github.com/vcilabs/webrpc@v0.5.2-0.20201116131534-162e27b1b33b/gen/typescript/templates/server_helpers.ts.tmpl (about)

     1  {{ define "server_helpers" }}
     2  
     3  const JS_TYPES = [
     4      "bigint",
     5      "boolean",
     6      "function",
     7      "number",
     8      "object",
     9      "string",
    10      "symbol",
    11      "undefined"
    12  ]
    13  
    14  {{ range .Messages }}
    15      const validate{{ .Name }} = (value: any) => {
    16          {{ range .Fields }}
    17              {{ if .Optional }}
    18                  if ("{{ . | exportedJSONField }}" in value && !validateType(value["{{ . | exportedJSONField }}"], "{{ .Type | jsFieldType }}")) {
    19                      return false
    20                  }
    21              {{ else }}
    22                  if (!("{{ . | exportedJSONField }}" in value) || !validateType(value["{{ . | exportedJSONField }}"], "{{ .Type | jsFieldType }}")) {
    23                      return false
    24                  }
    25              {{ end }}
    26          {{ end }}
    27  
    28          return true
    29      }
    30  {{ end }}
    31  
    32  const TYPE_VALIDATORS: { [type: string]: (value: any) => boolean } = {
    33      {{ range .Messages }}
    34          {{ .Name }}: validate{{ .Name }},
    35      {{ end }}
    36  }
    37  
    38  const validateType = (value: any, type: string) => {
    39      if (JS_TYPES.indexOf(type) > -1) {
    40          return typeof value === type;
    41      }
    42  
    43      const validator = TYPE_VALIDATORS[type];
    44  
    45      if (!validator) {
    46          return false;
    47      }
    48  
    49      return validator(value);
    50  }
    51  
    52  {{ end }}