UNPKG

2.53 kBJavaScriptView Raw
1"use strict";
2// tslint:disable:strict-type-predicates
3Object.defineProperty(exports, "__esModule", { value: true });
4exports.schemaPrimitiveValues = {
5 boolean: false,
6 requiredBoolean: true,
7 string: '',
8 requiredString: 'REQUIRED',
9};
10var schemaRequiredValues = new Set([
11 exports.schemaPrimitiveValues.requiredBoolean,
12 exports.schemaPrimitiveValues.requiredString,
13]);
14function checkSchemaMatch(value, schema, errors) {
15 if (value === undefined) {
16 errors.push('Root value is undefined');
17 return false;
18 }
19 return checkSchemaMatchRecursively(value, schema, '', errors);
20}
21exports.checkSchemaMatch = checkSchemaMatch;
22// tslint:disable-next-line:cyclomatic-complexity
23function checkSchemaMatchRecursively(value, schema, prefix, errors) {
24 if (typeof schema === 'boolean' || typeof schema === 'string') {
25 var schemeType = typeof schema;
26 if (value === undefined && schemaRequiredValues.has(schema)) {
27 errors.push("Value for \"" + prefix + "\" is required and must have type \"" + schemeType + "\"");
28 return false;
29 }
30 var valueType = typeof value;
31 if (value !== undefined && typeof schema !== valueType) {
32 errors.push("Type of values for \"" + prefix + "\" is not the same, expected=" + schemeType + ", actual=" + valueType);
33 return false;
34 }
35 return true;
36 }
37 if (value === undefined) {
38 return true;
39 }
40 if (Array.isArray(schema)) {
41 if (!Array.isArray(value)) {
42 return false;
43 }
44 var result_1 = true;
45 for (var i = 0; i < value.length; ++i) {
46 if (!checkSchemaMatchRecursively(value[i], schema[0], prefix + "[" + i + "]", errors)) {
47 result_1 = false;
48 }
49 }
50 return result_1;
51 }
52 var result = true;
53 for (var _i = 0, _a = Object.keys(value); _i < _a.length; _i++) {
54 var valueKey = _a[_i];
55 if (schema[valueKey] === undefined) {
56 errors.push("Exceeded property \"" + valueKey + "\" found in " + (prefix.length === 0 ? 'the root' : prefix));
57 result = false;
58 }
59 }
60 for (var _b = 0, _c = Object.keys(schema); _b < _c.length; _b++) {
61 var schemaKey = _c[_b];
62 var isSubValueSchemeMatched = checkSchemaMatchRecursively(value[schemaKey], schema[schemaKey], prefix.length === 0 ? schemaKey : prefix + "." + schemaKey, errors);
63 result = result && isSubValueSchemeMatched;
64 }
65 return result;
66}