@expo/schema-utils 55.0.3-canary-20260429-a5e59cf → 55.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/deref.js CHANGED
@@ -31,7 +31,7 @@ const getValueAtPath = (input, ref) => {
31
31
  let node = input;
32
32
  for (let index = 0; index < ref.length; index++) {
33
33
  const part = ref[index];
34
- if (node != null && typeof node === 'object' && part != null && part in node) {
34
+ if (node != null && typeof node === 'object' && part in node) {
35
35
  node = node[part];
36
36
  } else {
37
37
  node = NOT_FOUND_SYMBOL;
@@ -114,7 +114,7 @@ function deref(input) {
114
114
  // to not pollute it
115
115
  for (; targetIndex < target.length - 1; targetIndex++) {
116
116
  const part = target[targetIndex];
117
- if (inputNode == null || typeof inputNode !== 'object' || part == null || !(part in inputNode)) {
117
+ if (inputNode == null || typeof inputNode !== 'object' || !(part in inputNode)) {
118
118
  // If the part doesn't exist, we abort
119
119
  break;
120
120
  } else if (outputNode[part] === inputNode[part]) {
@@ -132,7 +132,7 @@ function deref(input) {
132
132
  // For each remaining part on the target, continue traversing the output
133
133
  for (; targetIndex < target.length - 1; targetIndex++) {
134
134
  const part = target[targetIndex];
135
- if (outputNode == null || typeof outputNode !== 'object' || part == null || !(part in outputNode)) {
135
+ if (outputNode == null || typeof outputNode !== 'object' || !(part in outputNode)) {
136
136
  // If the part doesn't exist, skip the entire ref
137
137
  continue nextRef;
138
138
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"deref.js","names":["getRef","node","$ref","undefined","parseRefMaybe","ref","props","startIndex","index","char","length","charCodeAt","prop","slice","push","NOT_FOUND_SYMBOL","Symbol","getValueAtPath","input","part","findRefsRec","refs","path","Array","isArray","l","value","targetRef","set","pop","record","key","isSelfReferencingRefEntry","target","source","getSortedRefEntries","entries","sort","a","b","filter","entry","deref","Map","output","nextRef","inputNode","outputNode","targetIndex","sourceValue","rootTargetRef","title","description"],"sources":["../src/deref.ts"],"sourcesContent":["type RefPath = readonly (string | number)[];\n\ninterface NodeRef {\n $ref: string;\n}\n\n/** Return JSON schema ref if input is of `NodeRef` type */\nconst getRef = (node: NodeRef | unknown): string | undefined =>\n node != null && typeof node === 'object' && '$ref' in node && typeof node.$ref === 'string'\n ? node.$ref\n : undefined;\n\n/** Parse a JSON schema ref into a path array, or return undefined */\nconst parseRefMaybe = (ref: string | undefined): RefPath | undefined => {\n if (ref == null || ref[0] !== '#') {\n return undefined;\n }\n const props = [];\n let startIndex = 1;\n let index = 1;\n let char: number;\n while (index < ref.length) {\n while ((char = ref.charCodeAt(index++)) && char !== 47 /*'/'*/);\n const prop = ref.slice(startIndex, index - 1);\n startIndex = index;\n if (prop) props.push(prop);\n }\n return props.length ? props : undefined;\n};\n\nconst NOT_FOUND_SYMBOL = Symbol();\n\n/** Get value at given JSON schema path or return `NOT_FOUND_SYMBOL` */\nconst getValueAtPath = (input: unknown, ref: RefPath): unknown | typeof NOT_FOUND_SYMBOL => {\n let node = input;\n for (let index = 0; index < ref.length; index++) {\n const part = ref[index];\n if (node != null && typeof node === 'object' && part != null && part in node) {\n node = (node as Record<string, unknown>)[part];\n } else {\n node = NOT_FOUND_SYMBOL;\n break;\n }\n }\n return node;\n};\n\n/** Find all JSON schema refs recursively and add them to `refs` Map */\nconst findRefsRec = (\n node: unknown,\n refs: Map<RefPath, RefPath>,\n path: (string | number)[]\n): void => {\n if (node == null || typeof node !== 'object') {\n } else if (Array.isArray(node)) {\n for (let index = 0, l = node.length; index < l; index++) {\n const value = node[index];\n const ref = getRef(value);\n if (ref) {\n const targetRef = parseRefMaybe(ref);\n if (targetRef) refs.set([...path, index], targetRef);\n } else if (value != null && typeof value === 'object') {\n path.push(index);\n findRefsRec(value, refs, path);\n path.pop();\n }\n }\n } else {\n const record = node as Record<string, unknown>;\n for (const key in record) {\n const value = record[key];\n const ref = getRef(value);\n if (ref) {\n const targetRef = parseRefMaybe(ref);\n if (targetRef) refs.set([...path, key], targetRef);\n } else if (value != null && typeof value === 'object') {\n path.push(key);\n findRefsRec(value, refs, path);\n path.pop();\n }\n }\n }\n};\n\n/** Detect whether target (where we set the source value) is a nested path inside the source path */\nconst isSelfReferencingRefEntry = (target: RefPath, source: RefPath) => {\n for (let index = 0; index < source.length; index++) {\n if (source[index] !== target[index]) return false;\n }\n return true;\n};\n\n/** Return sorted refs entries. Longest target paths will be returned first */\nconst getSortedRefEntries = (refs: Map<RefPath, RefPath>): readonly [RefPath, RefPath][] => {\n const entries = [...refs.entries()].sort((a, b) => b[1].length - a[1].length);\n // Filter out self-referenceing paths. If we set nested targets to source values, we'd\n // create unserializable circular references\n return entries.filter((entry) => !isSelfReferencingRefEntry(entry[0], entry[1]));\n};\n\n/** Dereference JSON schema pointers.\n *\n * @remarks\n * This is a minimal reimplementation of `json-schema-deref-sync` without\n * file reference, URL/web reference, and loader support.\n *\n * @see https://github.com/cvent/json-schema-deref-sync\n */\nexport function deref(input: any): any {\n const refs = new Map<RefPath, RefPath>();\n // Find all JSON schema refs paths\n findRefsRec(input, refs, []);\n // Shallow copy output\n const output = { ...input };\n // Process all ref entries with deepest targets first\n nextRef: for (const [target, source] of getSortedRefEntries(refs)) {\n let inputNode = input;\n let outputNode = output;\n let targetIndex = 0;\n // For each path part on the target, traverse the output and clone the input\n // to not pollute it\n for (; targetIndex < target.length - 1; targetIndex++) {\n const part = target[targetIndex];\n if (\n inputNode == null ||\n typeof inputNode !== 'object' ||\n part == null ||\n !(part in inputNode)\n ) {\n // If the part doesn't exist, we abort\n break;\n } else if (outputNode[part] === inputNode[part]) {\n // Copy the input on the output if references are equal\n outputNode[part] = Array.isArray(inputNode[part])\n ? [...inputNode[part]]\n : { ...inputNode[part] };\n inputNode = inputNode[part];\n outputNode = outputNode[part];\n } else {\n // If this part has already been copied, abort\n break;\n }\n }\n // For each remaining part on the target, continue traversing the output\n for (; targetIndex < target.length - 1; targetIndex++) {\n const part = target[targetIndex];\n if (\n outputNode == null ||\n typeof outputNode !== 'object' ||\n part == null ||\n !(part in outputNode)\n ) {\n // If the part doesn't exist, skip the entire ref\n continue nextRef;\n } else {\n outputNode = outputNode[part];\n }\n }\n // Get value from output\n let sourceValue = getValueAtPath(output, source);\n if (sourceValue === NOT_FOUND_SYMBOL) {\n // If no value was found, try to get a value from the input instead\n sourceValue = getValueAtPath(input, source);\n // Otherwise, skip this ref\n if (sourceValue === NOT_FOUND_SYMBOL) continue;\n }\n // Set the source value on the target path\n // The for-loops prior have made sure that the output has already been deeply\n // cloned and traversed for the entire path\n outputNode[target[target.length - 1]!] = sourceValue;\n }\n // Handle root refs last\n const rootTargetRef = parseRefMaybe(getRef(input));\n if (rootTargetRef) {\n // Get value from output\n let sourceValue = getValueAtPath(output, rootTargetRef);\n // If no value was found, try to get a value from the input instead\n if (sourceValue === NOT_FOUND_SYMBOL) {\n sourceValue = getValueAtPath(input, rootTargetRef);\n }\n // Assign the target object to the output\n if (sourceValue !== NOT_FOUND_SYMBOL && sourceValue != null) {\n return typeof sourceValue === 'object'\n ? {\n ...sourceValue,\n title: output.title,\n description: output.description,\n }\n : sourceValue;\n }\n }\n // Return the output with resolved refs\n return output;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"deref.js","names":["getRef","node","$ref","undefined","parseRefMaybe","ref","props","startIndex","index","char","length","charCodeAt","prop","slice","push","NOT_FOUND_SYMBOL","Symbol","getValueAtPath","input","part","findRefsRec","refs","path","Array","isArray","l","value","targetRef","set","pop","record","key","isSelfReferencingRefEntry","target","source","getSortedRefEntries","entries","sort","a","b","filter","entry","deref","Map","output","nextRef","inputNode","outputNode","targetIndex","sourceValue","rootTargetRef","title","description"],"sources":["../src/deref.ts"],"sourcesContent":["type RefPath = readonly (string | number)[];\n\ninterface NodeRef {\n $ref: string;\n}\n\n/** Return JSON schema ref if input is of `NodeRef` type */\nconst getRef = (node: NodeRef | unknown): string | undefined =>\n node != null && typeof node === 'object' && '$ref' in node && typeof node.$ref === 'string'\n ? node.$ref\n : undefined;\n\n/** Parse a JSON schema ref into a path array, or return undefined */\nconst parseRefMaybe = (ref: string | undefined): RefPath | undefined => {\n if (ref == null || ref[0] !== '#') {\n return undefined;\n }\n const props = [];\n let startIndex = 1;\n let index = 1;\n let char: number;\n while (index < ref.length) {\n while ((char = ref.charCodeAt(index++)) && char !== 47 /*'/'*/);\n const prop = ref.slice(startIndex, index - 1);\n startIndex = index;\n if (prop) props.push(prop);\n }\n return props.length ? props : undefined;\n};\n\nconst NOT_FOUND_SYMBOL = Symbol();\n\n/** Get value at given JSON schema path or return `NOT_FOUND_SYMBOL` */\nconst getValueAtPath = (input: unknown, ref: RefPath): unknown | typeof NOT_FOUND_SYMBOL => {\n let node = input;\n for (let index = 0; index < ref.length; index++) {\n const part = ref[index];\n if (node != null && typeof node === 'object' && part in node) {\n node = (node as Record<string, unknown>)[part];\n } else {\n node = NOT_FOUND_SYMBOL;\n break;\n }\n }\n return node;\n};\n\n/** Find all JSON schema refs recursively and add them to `refs` Map */\nconst findRefsRec = (\n node: unknown,\n refs: Map<RefPath, RefPath>,\n path: (string | number)[]\n): void => {\n if (node == null || typeof node !== 'object') {\n } else if (Array.isArray(node)) {\n for (let index = 0, l = node.length; index < l; index++) {\n const value = node[index];\n const ref = getRef(value);\n if (ref) {\n const targetRef = parseRefMaybe(ref);\n if (targetRef) refs.set([...path, index], targetRef);\n } else if (value != null && typeof value === 'object') {\n path.push(index);\n findRefsRec(value, refs, path);\n path.pop();\n }\n }\n } else {\n const record = node as Record<string, unknown>;\n for (const key in record) {\n const value = record[key];\n const ref = getRef(value);\n if (ref) {\n const targetRef = parseRefMaybe(ref);\n if (targetRef) refs.set([...path, key], targetRef);\n } else if (value != null && typeof value === 'object') {\n path.push(key);\n findRefsRec(value, refs, path);\n path.pop();\n }\n }\n }\n};\n\n/** Detect whether target (where we set the source value) is a nested path inside the source path */\nconst isSelfReferencingRefEntry = (target: RefPath, source: RefPath) => {\n for (let index = 0; index < source.length; index++) {\n if (source[index] !== target[index]) return false;\n }\n return true;\n};\n\n/** Return sorted refs entries. Longest target paths will be returned first */\nconst getSortedRefEntries = (refs: Map<RefPath, RefPath>): readonly [RefPath, RefPath][] => {\n const entries = [...refs.entries()].sort((a, b) => b[1].length - a[1].length);\n // Filter out self-referenceing paths. If we set nested targets to source values, we'd\n // create unserializable circular references\n return entries.filter((entry) => !isSelfReferencingRefEntry(entry[0], entry[1]));\n};\n\n/** Dereference JSON schema pointers.\n *\n * @remarks\n * This is a minimal reimplementation of `json-schema-deref-sync` without\n * file reference, URL/web reference, and loader support.\n *\n * @see https://github.com/cvent/json-schema-deref-sync\n */\nexport function deref(input: any): any {\n const refs = new Map<RefPath, RefPath>();\n // Find all JSON schema refs paths\n findRefsRec(input, refs, []);\n // Shallow copy output\n const output = { ...input };\n // Process all ref entries with deepest targets first\n nextRef: for (const [target, source] of getSortedRefEntries(refs)) {\n let inputNode = input;\n let outputNode = output;\n let targetIndex = 0;\n // For each path part on the target, traverse the output and clone the input\n // to not pollute it\n for (; targetIndex < target.length - 1; targetIndex++) {\n const part = target[targetIndex];\n if (inputNode == null || typeof inputNode !== 'object' || !(part in inputNode)) {\n // If the part doesn't exist, we abort\n break;\n } else if (outputNode[part] === inputNode[part]) {\n // Copy the input on the output if references are equal\n outputNode[part] = Array.isArray(inputNode[part])\n ? [...inputNode[part]]\n : { ...inputNode[part] };\n inputNode = inputNode[part];\n outputNode = outputNode[part];\n } else {\n // If this part has already been copied, abort\n break;\n }\n }\n // For each remaining part on the target, continue traversing the output\n for (; targetIndex < target.length - 1; targetIndex++) {\n const part = target[targetIndex];\n if (outputNode == null || typeof outputNode !== 'object' || !(part in outputNode)) {\n // If the part doesn't exist, skip the entire ref\n continue nextRef;\n } else {\n outputNode = outputNode[part];\n }\n }\n // Get value from output\n let sourceValue = getValueAtPath(output, source);\n if (sourceValue === NOT_FOUND_SYMBOL) {\n // If no value was found, try to get a value from the input instead\n sourceValue = getValueAtPath(input, source);\n // Otherwise, skip this ref\n if (sourceValue === NOT_FOUND_SYMBOL) continue;\n }\n // Set the source value on the target path\n // The for-loops prior have made sure that the output has already been deeply\n // cloned and traversed for the entire path\n outputNode[target[target.length - 1]] = sourceValue;\n }\n // Handle root refs last\n const rootTargetRef = parseRefMaybe(getRef(input));\n if (rootTargetRef) {\n // Get value from output\n let sourceValue = getValueAtPath(output, rootTargetRef);\n // If no value was found, try to get a value from the input instead\n if (sourceValue === NOT_FOUND_SYMBOL) {\n sourceValue = getValueAtPath(input, rootTargetRef);\n }\n // Assign the target object to the output\n if (sourceValue !== NOT_FOUND_SYMBOL && sourceValue != null) {\n return typeof sourceValue === 'object'\n ? {\n ...sourceValue,\n title: output.title,\n description: output.description,\n }\n : sourceValue;\n }\n }\n // Return the output with resolved refs\n return output;\n}\n"],"mappings":"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","ignoreList":[]}
package/build/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { JSONSchema } from './JSONSchema';
2
2
  import { BaseValidationError, ValidationError as ValidationResult } from './validate';
3
- export type { JSONSchema } from './JSONSchema';
3
+ export { JSONSchema } from './JSONSchema';
4
4
  export declare class ValidationError<T> extends Error {
5
5
  schema: JSONSchema<T>;
6
6
  errors: BaseValidationError[];
package/build/index.js CHANGED
@@ -3,6 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "JSONSchema", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _JSONSchema().JSONSchema;
10
+ }
11
+ });
6
12
  exports.ValidationError = void 0;
7
13
  exports.derefSchema = derefSchema;
8
14
  exports.validate = validate;
@@ -20,6 +26,13 @@ function _validate() {
20
26
  };
21
27
  return data;
22
28
  }
29
+ function _JSONSchema() {
30
+ const data = require("./JSONSchema");
31
+ _JSONSchema = function () {
32
+ return data;
33
+ };
34
+ return data;
35
+ }
23
36
  const CACHE_SYMBOL = Symbol('@expo/schema-utils');
24
37
  const flattenValidationResults = (input, output = []) => {
25
38
  output.push({
@@ -28,8 +41,8 @@ const flattenValidationResults = (input, output = []) => {
28
41
  keyword: input.keyword,
29
42
  value: input.value
30
43
  });
31
- for (const cause of input.cause ?? []) {
32
- flattenValidationResults(cause, output);
44
+ for (let idx = 0; input.cause && idx < input.cause.length; idx++) {
45
+ flattenValidationResults(input.cause[idx], output);
33
46
  }
34
47
  return output;
35
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_deref","data","require","_validate","CACHE_SYMBOL","Symbol","flattenValidationResults","input","output","push","message","path","keyword","value","cause","toErrorsMessages","errors","map","error","ValidationError","Error","constructor","result","schema","title","line","join","name","toErrorsMessage","exports","derefSchemaCache","derefed","deref","cache","WeakMap","derefSchema","validate","get","undefined","validateSchema","set"],"sources":["../src/index.ts"],"sourcesContent":["import { JSONSchema } from './JSONSchema';\nimport { deref } from './deref';\nimport {\n validateSchema,\n BaseValidationError,\n ValidationError as ValidationResult,\n} from './validate';\n\nexport type { JSONSchema } from './JSONSchema';\n\nconst CACHE_SYMBOL = Symbol('@expo/schema-utils');\n\ninterface SchemaCacheData {\n schema: JSONSchema;\n cache: WeakMap<object, ValidationResult | null>;\n}\n\nconst flattenValidationResults = (\n input: ValidationResult,\n output: BaseValidationError[] = []\n): BaseValidationError[] => {\n output.push({\n message: input.message,\n path: input.path,\n keyword: input.keyword,\n value: input.value,\n });\n for (const cause of input.cause ?? []) {\n flattenValidationResults(cause, output);\n }\n return output;\n};\n\nconst toErrorsMessages = (errors: BaseValidationError[]) =>\n errors.map((error) => {\n return `\\n - options${error.path} (${error.keyword}): ${error.message}`;\n });\n\nexport class ValidationError<T> extends Error {\n schema: JSONSchema<T>;\n errors: BaseValidationError[];\n constructor(result: ValidationResult, schema: JSONSchema<T>) {\n const errors = flattenValidationResults(result);\n const title = typeof schema.title === 'string' ? schema.title : 'Value';\n super(\n `Invalid options object. ${title} options object does not match the defined schema.\\n` +\n toErrorsMessages(errors)\n .map((line) => ` - options${line}`)\n .join('\\n')\n );\n this.name = 'ValidationError';\n this.errors = errors;\n this.schema = schema;\n }\n\n toErrorsMessage(): string[] {\n return toErrorsMessages(this.errors);\n }\n}\n\nconst derefSchemaCache = (schema: JSONSchema): SchemaCacheData => {\n let derefed = (schema as any)[CACHE_SYMBOL] as SchemaCacheData | undefined;\n if (!derefed) {\n derefed = {\n schema: deref(schema),\n cache: new WeakMap(),\n };\n (schema as any)[CACHE_SYMBOL] = derefed;\n }\n return derefed!;\n};\n\nexport function derefSchema<T>(schema: JSONSchema<T>): JSONSchema<T> {\n return derefSchemaCache(schema).schema;\n}\n\nexport function validate<T>(schema: JSONSchema<T>, value: unknown): asserts value is T {\n const data = derefSchemaCache(schema);\n let result: ValidationResult | null | undefined;\n if (\n typeof value !== 'object' ||\n value == null ||\n (result = data.cache.get(value)) === undefined\n ) {\n result = validateSchema(data.schema, value, '');\n if (typeof value === 'object' && value != null) {\n data.cache.set(value, result);\n }\n }\n if (result) {\n throw new ValidationError(result, data.schema);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_deref","data","require","_validate","_JSONSchema","CACHE_SYMBOL","Symbol","flattenValidationResults","input","output","push","message","path","keyword","value","idx","cause","length","toErrorsMessages","errors","map","error","ValidationError","Error","constructor","result","schema","title","line","join","name","toErrorsMessage","exports","derefSchemaCache","derefed","deref","cache","WeakMap","derefSchema","validate","get","undefined","validateSchema","set"],"sources":["../src/index.ts"],"sourcesContent":["import { JSONSchema } from './JSONSchema';\nimport { deref } from './deref';\nimport {\n validateSchema,\n BaseValidationError,\n ValidationError as ValidationResult,\n} from './validate';\n\nexport { JSONSchema } from './JSONSchema';\n\nconst CACHE_SYMBOL = Symbol('@expo/schema-utils');\n\ninterface SchemaCacheData {\n schema: JSONSchema;\n cache: WeakMap<object, ValidationResult | null>;\n}\n\nconst flattenValidationResults = (\n input: ValidationResult,\n output: BaseValidationError[] = []\n): BaseValidationError[] => {\n output.push({\n message: input.message,\n path: input.path,\n keyword: input.keyword,\n value: input.value,\n });\n for (let idx = 0; input.cause && idx < input.cause.length; idx++) {\n flattenValidationResults(input.cause[idx], output);\n }\n return output;\n};\n\nconst toErrorsMessages = (errors: BaseValidationError[]) =>\n errors.map((error) => {\n return `\\n - options${error.path} (${error.keyword}): ${error.message}`;\n });\n\nexport class ValidationError<T> extends Error {\n schema: JSONSchema<T>;\n errors: BaseValidationError[];\n constructor(result: ValidationResult, schema: JSONSchema<T>) {\n const errors = flattenValidationResults(result);\n const title = typeof schema.title === 'string' ? schema.title : 'Value';\n super(\n `Invalid options object. ${title} options object does not match the defined schema.\\n` +\n toErrorsMessages(errors)\n .map((line) => ` - options${line}`)\n .join('\\n')\n );\n this.name = 'ValidationError';\n this.errors = errors;\n this.schema = schema;\n }\n\n toErrorsMessage(): string[] {\n return toErrorsMessages(this.errors);\n }\n}\n\nconst derefSchemaCache = (schema: JSONSchema): SchemaCacheData => {\n let derefed = (schema as any)[CACHE_SYMBOL] as SchemaCacheData | undefined;\n if (!derefed) {\n derefed = {\n schema: deref(schema),\n cache: new WeakMap(),\n };\n (schema as any)[CACHE_SYMBOL] = derefed;\n }\n return derefed!;\n};\n\nexport function derefSchema<T>(schema: JSONSchema<T>): JSONSchema<T> {\n return derefSchemaCache(schema).schema;\n}\n\nexport function validate<T>(schema: JSONSchema<T>, value: unknown): asserts value is T {\n const data = derefSchemaCache(schema);\n let result: ValidationResult | null | undefined;\n if (\n typeof value !== 'object' ||\n value == null ||\n (result = data.cache.get(value)) === undefined\n ) {\n result = validateSchema(data.schema, value, '');\n if (typeof value === 'object' && value != null) {\n data.cache.set(value, result);\n }\n }\n if (result) {\n throw new ValidationError(result, data.schema);\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/build/validate.js CHANGED
@@ -45,8 +45,8 @@ const isDeepEqual = (a, b) => {
45
45
  if (!isDeepEqual(keysA, keysB)) {
46
46
  return false;
47
47
  }
48
- for (const key of keysA) {
49
- if (!isDeepEqual(a[key], b[key])) {
48
+ for (let idx = 0; idx < keysA.length; idx++) {
49
+ if (!isDeepEqual(a[keysA[idx]], b[keysA[idx]])) {
50
50
  return false;
51
51
  }
52
52
  }
@@ -272,12 +272,12 @@ const validateArray = (schema, value, path) => {
272
272
  }
273
273
  };
274
274
  const validateRequired = (keys, value, path) => {
275
- for (const key of keys) {
276
- if (value[key] === undefined) {
275
+ for (let idx = 0; idx < keys.length; idx++) {
276
+ if (value[keys[idx]] === undefined) {
277
277
  return {
278
- message: `Required property "${key}" is missing`,
278
+ message: `Required property "${keys[idx]}" is missing`,
279
279
  keyword: 'required',
280
- path: `${path}.${key}`,
280
+ path: `${path}.${keys[idx]}`,
281
281
  value
282
282
  };
283
283
  }
@@ -287,7 +287,7 @@ const validateRequired = (keys, value, path) => {
287
287
  const validateProperties = (properties, value, path) => {
288
288
  let child;
289
289
  for (const key in properties) {
290
- if (properties[key] != null && value[key] !== undefined && (child = validateSchema(properties[key], value[key], `${path}.${key}`)) != null) {
290
+ if (value[key] !== undefined && (child = validateSchema(properties[key], value[key], `${path}.${key}`)) != null) {
291
291
  return child;
292
292
  }
293
293
  }
@@ -297,9 +297,10 @@ const validatePatternProperties = (validatedProperties, patternProperties, keys,
297
297
  let child;
298
298
  for (const pattern in patternProperties) {
299
299
  const propertyRe = new RegExp(pattern);
300
- for (const key of keys) {
300
+ for (let idx = 0; idx < keys.length; idx++) {
301
+ const key = keys[idx];
301
302
  const childSchema = patternProperties[pattern];
302
- if (propertyRe.test(key) && childSchema != null) {
303
+ if (propertyRe.test(key)) {
303
304
  validatedProperties.add(key);
304
305
  if ((child = validateSchema(childSchema, value[key], `${path}.${key}`)) != null) {
305
306
  return child;
@@ -314,7 +315,8 @@ const validateAdditionalProperties = (additionalProperties, properties, visitedP
314
315
  return null;
315
316
  }
316
317
  let child;
317
- for (const key of keys) {
318
+ for (let idx = 0; idx < keys.length; idx++) {
319
+ const key = keys[idx];
318
320
  if (!visitedPatternProperties.has(key) && !properties?.[key]) {
319
321
  if (additionalProperties === false) {
320
322
  return {
@@ -332,7 +334,8 @@ const validateAdditionalProperties = (additionalProperties, properties, visitedP
332
334
  };
333
335
  const validatePropertyNames = (propertyNames, keys, path) => {
334
336
  let child;
335
- for (const key of keys) {
337
+ for (let idx = 0; idx < keys.length; idx++) {
338
+ const key = keys[idx];
336
339
  if ((child = validateString(propertyNames, key, `${path}.${key}`)) != null) {
337
340
  child.message = `Property name "${key}" does not match schema. ${child.message}`;
338
341
  return child;
@@ -344,19 +347,18 @@ const validateDependencies = (dependencies, value, path) => {
344
347
  let child;
345
348
  for (const key in dependencies) {
346
349
  if (value[key] !== undefined) {
347
- const dependency = dependencies[key];
348
- if (Array.isArray(dependency)) {
349
- for (const property of dependency) {
350
- if (value[property] === undefined) {
350
+ if (Array.isArray(dependencies[key])) {
351
+ for (let idx = 0; idx < dependencies[key].length; idx++) {
352
+ if (value[dependencies[key][idx]] === undefined) {
351
353
  return {
352
- message: `Property "${property}" is required when "${key}" is present`,
354
+ message: `Property "${dependencies[key][idx]}" is required when "${key}" is present`,
353
355
  keyword: 'dependencies',
354
- path: `${path}.${property}`,
356
+ path: `${path}.${dependencies[key][idx]}`,
355
357
  value: undefined
356
358
  };
357
359
  }
358
360
  }
359
- } else if (dependency != null && (child = validateSchema(dependency, value, path)) != null) {
361
+ } else if (dependencies[key] != null && (child = validateSchema(dependencies[key], value, path)) != null) {
360
362
  return child;
361
363
  }
362
364
  }
@@ -422,8 +424,8 @@ const validateType = (schemaType, valueType, path) => {
422
424
  };
423
425
  const validateAllOf = (schemas, value, path) => {
424
426
  let child;
425
- for (const schema of schemas) {
426
- if ((child = validateSchema(schema, value, path)) != null) {
427
+ for (let idx = 0; idx < schemas.length; idx++) {
428
+ if ((child = validateSchema(schemas[idx], value, path)) != null) {
427
429
  return child;
428
430
  }
429
431
  }
@@ -432,8 +434,8 @@ const validateAllOf = (schemas, value, path) => {
432
434
  const validateAnyOf = (schemas, value, path) => {
433
435
  let child;
434
436
  const cause = [];
435
- for (const schema of schemas) {
436
- if ((child = validateSchema(schema, value, path)) != null) {
437
+ for (let idx = 0; idx < schemas.length; idx++) {
438
+ if ((child = validateSchema(schemas[idx], value, path)) != null) {
437
439
  cause.push(child);
438
440
  } else {
439
441
  return null;
@@ -450,8 +452,8 @@ const validateAnyOf = (schemas, value, path) => {
450
452
  const validateOneOf = (schemas, value, path) => {
451
453
  let child;
452
454
  const cause = [];
453
- for (const schema of schemas) {
454
- if ((child = validateSchema(schema, value, path)) != null) {
455
+ for (let idx = 0; idx < schemas.length; idx++) {
456
+ if ((child = validateSchema(schemas[idx], value, path)) != null) {
455
457
  cause.push(child);
456
458
  }
457
459
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","names":["getValueType","value","typeOf","Number","isInteger","Array","isArray","isDeepEqual","a","b","length","idx","keysA","Object","keys","keysB","key","areArrayValuesUnique","array","i","j","dateRe","dateTimeRe","timeRe","emailRe","hostnameRe","uriRe","validateFormat","format","test","TypeError","isEnumValue","enumValues","validateString","schema","path","minLength","message","keyword","maxLength","pattern","RegExp","validateNumber","multipleOf","minimum","maximum","exclusiveMaximum","exclusiveMinimum","validateContains","containsSchema","validateSchema","validateItems","itemsSchema","additionalItems","child","validateArray","minItems","maxItems","uniqueItems","contains","items","validateRequired","undefined","validateProperties","properties","validatePatternProperties","validatedProperties","patternProperties","propertyRe","childSchema","add","validateAdditionalProperties","additionalProperties","visitedPatternProperties","has","validatePropertyNames","propertyNames","validateDependencies","dependencies","dependency","property","validateObject","Set","minProperties","maxProperties","required","validateType","schemaType","valueType","includes","join","validateAllOf","schemas","validateAnyOf","cause","push","validateOneOf","validateConditional","ifSchema","thenSchema","elseSchema","type","const","JSON","stringify","enum","allOf","anyOf","oneOf","not","if","then","else","exports"],"sources":["../src/validate.ts"],"sourcesContent":["import { JSONSchema } from './JSONSchema';\n\nexport interface BaseValidationError {\n message: string;\n path: string;\n keyword: string;\n value: unknown;\n}\n\nexport interface ValidationError extends BaseValidationError {\n cause?: ValidationError[];\n}\n\ntype OneOrMany<T> = T | T[];\n\nconst getValueType = (\n value: unknown\n):\n | 'null'\n | 'boolean'\n | 'object'\n | 'array'\n | 'number'\n | 'integer'\n | 'string'\n | 'symbol'\n | 'undefined'\n | 'bigint'\n | 'function' => {\n const typeOf = typeof value;\n switch (typeOf) {\n case 'number':\n return Number.isInteger(value) ? 'integer' : 'number';\n case 'boolean':\n case 'string':\n return typeOf;\n case 'object':\n if (value === null) {\n return 'null';\n } else if (Array.isArray(value)) {\n return 'array';\n } else {\n return 'object';\n }\n default:\n return typeOf;\n }\n};\n\nconst isDeepEqual = (a: any, b: any): boolean => {\n if (a === b) {\n return true;\n } else if (a === null || b === null) {\n return false;\n } else if (typeof a !== typeof b) {\n return false;\n } else if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n for (let idx = 0; idx < a.length; idx++) {\n if (!isDeepEqual(a[idx], b[idx])) return false;\n }\n return true;\n } else if (typeof a === 'object') {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (!isDeepEqual(keysA, keysB)) {\n return false;\n }\n for (const key of keysA) {\n if (!isDeepEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n};\n\nconst areArrayValuesUnique = (array: unknown[]): boolean => {\n for (let i = 0; i < array.length; i++) {\n for (let j = 0; j < array.length; j++) {\n if (i !== j && isDeepEqual(array[i], array[j])) {\n return false;\n }\n }\n }\n return true;\n};\n\nconst dateRe = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst dateTimeRe = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/;\nconst timeRe = /^\\d{2}:\\d{2}:\\d{2}$/;\nconst emailRe = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst hostnameRe =\n /^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nconst uriRe = /^https?:\\/\\//;\n\nconst validateFormat = (format: string, value: string): boolean => {\n // NOTE: Left out ipv4 and ipv6\n switch (format) {\n case 'date-time':\n return dateTimeRe.test(value);\n case 'date':\n return dateRe.test(value);\n case 'time':\n return timeRe.test(value);\n case 'email':\n return emailRe.test(value);\n case 'hostname':\n return hostnameRe.test(value);\n case 'uri':\n return uriRe.test(value);\n default:\n throw new TypeError(`Unsupported format \"${format}\"`);\n }\n};\n\nconst isEnumValue = (enumValues: unknown[], value: unknown): boolean => {\n if (!enumValues.length) {\n throw new TypeError('Empty enum array');\n }\n for (let idx = 0; idx < enumValues.length; idx++) {\n if (isDeepEqual(value, enumValues[idx])) {\n return true;\n }\n }\n return false;\n};\n\nconst validateString = (\n schema: JSONSchema,\n value: string,\n path: string\n): ValidationError | null => {\n if (schema.minLength != null && value.length < schema.minLength) {\n return {\n message: `String must be at least ${schema.minLength} characters`,\n keyword: 'minLength',\n path,\n value,\n };\n } else if (schema.maxLength != null && value.length > schema.maxLength) {\n return {\n message: `String must be at most ${schema.maxLength} characters`,\n keyword: 'maxLength',\n path,\n value,\n };\n } else if (schema.pattern != null && !new RegExp(schema.pattern).test(value)) {\n return {\n message: `String does not match pattern: ${schema.pattern}`,\n keyword: 'pattern',\n path,\n value,\n };\n } else if (schema.format != null && !validateFormat(schema.format, value)) {\n return {\n message: `String does not match format: ${schema.format}`,\n keyword: 'format',\n path,\n value,\n };\n } else {\n return null;\n }\n};\n\nconst validateNumber = (\n schema: JSONSchema,\n value: number,\n path: string\n): ValidationError | null => {\n if (schema.multipleOf != null && value % schema.multipleOf !== 0) {\n return {\n message: `Number must be multiple of ${schema.multipleOf}`,\n keyword: 'multipleOf',\n path,\n value,\n };\n } else if (schema.minimum != null && value < schema.minimum) {\n return {\n message: `Number must be equal or greater than ${schema.minimum}`,\n keyword: 'minimum',\n path,\n value,\n };\n } else if (schema.maximum != null && value > schema.maximum) {\n return {\n message: `Number must be equal or less than ${schema.maximum}`,\n keyword: 'maximum',\n path,\n value,\n };\n } else if (\n schema.exclusiveMaximum === true &&\n schema.maximum != null &&\n value >= schema.maximum\n ) {\n return {\n message: `Number must be less than ${schema.maximum}`,\n keyword: 'exclusiveMaximum',\n path,\n value,\n };\n } else if (typeof schema.exclusiveMaximum === 'number' && value >= schema.exclusiveMaximum) {\n return {\n message: `Number must be less than ${schema.exclusiveMaximum}`,\n keyword: 'exclusiveMaximum',\n path,\n value,\n };\n } else if (\n schema.exclusiveMinimum === true &&\n schema.minimum != null &&\n value <= schema.minimum\n ) {\n return {\n message: `Number must be greater than ${schema.minimum}`,\n keyword: 'exclusiveMinimum',\n path,\n value,\n };\n } else if (typeof schema.exclusiveMinimum === 'number' && value <= schema.exclusiveMinimum) {\n return {\n message: `Number must be greater than ${schema.exclusiveMinimum}`,\n keyword: 'exclusiveMinimum',\n path,\n value,\n };\n } else {\n return null;\n }\n};\n\nconst validateContains = (\n containsSchema: JSONSchema,\n value: unknown[],\n path: string\n): ValidationError | null => {\n for (let idx = 0; idx < value.length; idx++) {\n if (validateSchema(containsSchema, value[idx], path) === null) {\n return null;\n }\n }\n return {\n message: 'Array must contain at least one item matching the contains schema',\n keyword: 'contains',\n path,\n value,\n };\n};\n\nconst validateItems = (\n itemsSchema: JSONSchema | JSONSchema[],\n additionalItems: boolean | JSONSchema | undefined,\n value: unknown[],\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n if (Array.isArray(itemsSchema)) {\n let idx = 0;\n for (idx = 0; idx < itemsSchema.length; idx++) {\n if ((child = validateSchema(itemsSchema[idx]!, value[idx], `${path}[${idx}]`)) != null) {\n return child;\n }\n }\n if (idx < value.length) {\n if (additionalItems === true) {\n return null;\n } else if (additionalItems) {\n for (; idx < value.length; idx++) {\n if ((child = validateSchema(additionalItems, value[idx], `${path}[${idx}]`)) != null) {\n return child;\n }\n }\n return null;\n } else {\n return {\n message: `Array contained ${value.length - idx} more items than items schema`,\n keyword: 'additionalItems',\n path,\n value,\n };\n }\n } else {\n return null;\n }\n } else {\n for (let idx = 0; idx < value.length; idx++) {\n if ((child = validateSchema(itemsSchema, value[idx], `${path}[${idx}]`)) != null) {\n return child;\n }\n }\n return null;\n }\n};\n\nconst validateArray = (schema: JSONSchema, value: unknown[], path: string) => {\n let child: ValidationError | null;\n if (schema.minItems != null && value.length < schema.minItems) {\n return {\n message: `Array must have at least ${schema.minItems} items`,\n keyword: 'minItems',\n path,\n value,\n };\n } else if (schema.maxItems != null && value.length > schema.maxItems) {\n return {\n message: `Array must have at most ${schema.maxItems} items`,\n keyword: 'maxItems',\n path,\n value,\n };\n } else if (schema.uniqueItems && !areArrayValuesUnique(value)) {\n return {\n message: 'Array items must be unique',\n keyword: 'uniqueItems',\n path,\n value,\n };\n } else if (\n schema.contains != null &&\n (child = validateContains(schema.contains as JSONSchema, value, path)) != null\n ) {\n return child;\n } else if (\n schema.items != null &&\n (child = validateItems(schema.items, schema.additionalItems, value, path)) != null\n ) {\n return child;\n } else {\n return null;\n }\n};\n\nconst validateRequired = (\n keys: string[],\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n for (const key of keys) {\n if (value[key] === undefined) {\n return {\n message: `Required property \"${key}\" is missing`,\n keyword: 'required',\n path: `${path}.${key}`,\n value,\n };\n }\n }\n return null;\n};\n\nconst validateProperties = (\n properties: Record<string, JSONSchema>,\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (const key in properties) {\n if (\n properties[key] != null &&\n value[key] !== undefined &&\n (child = validateSchema(properties[key], value[key], `${path}.${key}`)) != null\n ) {\n return child;\n }\n }\n return null;\n};\n\nconst validatePatternProperties = (\n validatedProperties: Set<string>,\n patternProperties: Record<string, JSONSchema>,\n keys: string[],\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (const pattern in patternProperties) {\n const propertyRe = new RegExp(pattern);\n for (const key of keys) {\n const childSchema = patternProperties[pattern];\n if (propertyRe.test(key) && childSchema != null) {\n validatedProperties.add(key);\n if ((child = validateSchema(childSchema, value[key], `${path}.${key}`)) != null) {\n return child;\n }\n }\n }\n }\n return null;\n};\n\nconst validateAdditionalProperties = (\n additionalProperties: boolean | JSONSchema,\n properties: Record<string, JSONSchema> | undefined,\n visitedPatternProperties: Set<string>,\n keys: string[],\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n if (additionalProperties === true) {\n return null;\n }\n let child: ValidationError | null;\n for (const key of keys) {\n if (!visitedPatternProperties.has(key) && !properties?.[key]) {\n if (additionalProperties === false) {\n return {\n message: `Additional property \"${key}\" is not allowed`,\n keyword: 'additionalProperties',\n path: `${path}.${key}`,\n value: value[key],\n };\n } else if (\n (child = validateSchema(additionalProperties, value[key], `${path}.${key}`)) != null\n ) {\n return child;\n }\n }\n }\n return null;\n};\n\nconst validatePropertyNames = (\n propertyNames: JSONSchema,\n keys: string[],\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (const key of keys) {\n if ((child = validateString(propertyNames, key, `${path}.${key}`)) != null) {\n child.message = `Property name \"${key}\" does not match schema. ${child.message}`;\n return child;\n }\n }\n return null;\n};\n\nconst validateDependencies = (\n dependencies: Record<string, JSONSchema | string[] | undefined>,\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (const key in dependencies) {\n if (value[key] !== undefined) {\n const dependency = dependencies[key];\n\n if (Array.isArray(dependency)) {\n for (const property of dependency) {\n if (value[property] === undefined) {\n return {\n message: `Property \"${property}\" is required when \"${key}\" is present`,\n keyword: 'dependencies',\n path: `${path}.${property}`,\n value: undefined,\n };\n }\n }\n } else if (dependency != null && (child = validateSchema(dependency, value, path)) != null) {\n return child;\n }\n }\n }\n return null;\n};\n\nconst validateObject = (\n schema: JSONSchema,\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n const keys = Object.keys(value);\n const visitedPatternProperties = new Set<string>();\n let child: ValidationError | null;\n if (schema.minProperties != null && keys.length < schema.minProperties) {\n return {\n message: `Object must have at least ${schema.minProperties} properties`,\n keyword: 'minProperties',\n path,\n value,\n };\n } else if (schema.maxProperties != null && keys.length > schema.maxProperties) {\n return {\n message: `Object must have at most ${schema.maxProperties} properties`,\n keyword: 'maxProperties',\n path,\n value,\n };\n } else if (\n schema.required != null &&\n (child = validateRequired(schema.required, value, path)) != null\n ) {\n return child;\n } else if (\n schema.properties != null &&\n (child = validateProperties(schema.properties, value, path)) != null\n ) {\n return child;\n } else if (\n schema.patternProperties != null &&\n (child = validatePatternProperties(\n visitedPatternProperties,\n schema.patternProperties,\n keys,\n value,\n path\n )) != null\n ) {\n return child;\n } else if (\n schema.additionalProperties != null &&\n (child = validateAdditionalProperties(\n schema.additionalProperties,\n schema.properties,\n visitedPatternProperties,\n keys,\n value,\n path\n )) != null\n ) {\n return child;\n } else if (\n schema.propertyNames != null &&\n (child = validatePropertyNames(schema.propertyNames as JSONSchema, keys, path)) != null\n ) {\n return child;\n } else if (\n schema.dependencies != null &&\n (child = validateDependencies(schema.dependencies, value, path)) != null\n ) {\n return child;\n } else {\n return null;\n }\n};\n\nconst validateType = (\n schemaType: OneOrMany<'null' | 'boolean' | 'object' | 'array' | 'number' | 'integer' | 'string'>,\n valueType: string,\n path: string\n): ValidationError | null => {\n if (Array.isArray(schemaType)) {\n if (valueType === 'integer' && schemaType.includes('number')) {\n return null;\n }\n return !schemaType.includes(valueType as any)\n ? {\n message: `Expected type ${schemaType.join(' or ')}, got ${valueType}`,\n keyword: 'type',\n path,\n value: undefined,\n }\n : null;\n } else {\n if (valueType === 'integer' && schemaType === 'number') {\n return null;\n }\n return schemaType !== valueType\n ? {\n message: `Expected type ${schemaType}, got ${valueType}`,\n keyword: 'type',\n path,\n value: undefined,\n }\n : null;\n }\n};\n\nconst validateAllOf = (\n schemas: JSONSchema[],\n value: unknown,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (const schema of schemas) {\n if ((child = validateSchema(schema, value, path)) != null) {\n return child;\n }\n }\n return null;\n};\n\nconst validateAnyOf = (\n schemas: JSONSchema[],\n value: unknown,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n const cause: ValidationError[] = [];\n for (const schema of schemas) {\n if ((child = validateSchema(schema, value, path)) != null) {\n cause.push(child);\n } else {\n return null;\n }\n }\n return {\n message: 'No schema matched anyOf type',\n keyword: 'anyOf',\n path,\n value,\n cause,\n };\n};\n\nconst validateOneOf = (\n schemas: JSONSchema[],\n value: unknown,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n const cause: ValidationError[] = [];\n for (const schema of schemas) {\n if ((child = validateSchema(schema, value, path)) != null) {\n cause.push(child);\n }\n }\n if (cause.length >= schemas.length) {\n return {\n message: 'Value does not match any of the oneOf schemas',\n keyword: 'oneOf',\n path,\n value,\n cause,\n };\n } else if (cause.length < schemas.length - 1) {\n return {\n message: `Value matches ${schemas.length - cause.length} schemas, but exactly one is required`,\n keyword: 'oneOf',\n path,\n value,\n cause,\n };\n } else {\n return null;\n }\n};\n\nconst validateConditional = (\n ifSchema: JSONSchema,\n thenSchema: JSONSchema | undefined,\n elseSchema: JSONSchema | undefined,\n value: unknown,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n if (validateSchema(ifSchema, value, path) != null) {\n if (elseSchema != null && (child = validateSchema(elseSchema, value, path)) != null) {\n return {\n message: 'Value does not match \"else\" schema but did not match \"if\" condition schema',\n keyword: 'else',\n path,\n value,\n cause: [child],\n };\n } else {\n return null;\n }\n } else if (thenSchema != null && (child = validateSchema(thenSchema, value, path)) != null) {\n return {\n message: 'Value does not match \"then\" schema but did match \"if\" condition schema',\n keyword: 'then',\n path,\n value,\n cause: [child],\n };\n } else {\n return null;\n }\n};\n\nexport const validateSchema = (\n schema: JSONSchema,\n value: unknown,\n path: string\n): ValidationError | null => {\n if (typeof schema === 'boolean') {\n // Draft 07: Schemas can be booleans\n return !schema\n ? {\n message: 'Schema is false',\n keyword: 'schema',\n path,\n value: undefined,\n }\n : null;\n }\n\n const valueType = getValueType(value);\n let child: ValidationError | null;\n if (schema.type !== undefined && (child = validateType(schema.type, valueType, path)) != null) {\n return child;\n } else if (schema.const !== undefined && !isDeepEqual(value, schema.const)) {\n return {\n message: `Value must be equal to ${JSON.stringify(schema.const)}`,\n keyword: 'const',\n path,\n value,\n };\n } else if (schema.enum != null && !isEnumValue(schema.enum, value)) {\n return {\n message: `Value must be one of ${JSON.stringify(schema.enum)}`,\n keyword: 'enum',\n path,\n value,\n };\n } else if (schema.allOf != null && (child = validateAllOf(schema.allOf, value, path)) != null) {\n return child;\n } else if (schema.anyOf != null && (child = validateAnyOf(schema.anyOf, value, path)) != null) {\n return child;\n } else if (schema.oneOf != null && (child = validateOneOf(schema.oneOf, value, path)) != null) {\n return child;\n } else if (schema.not != null && validateSchema(schema.not, value, path) == null) {\n return {\n message: 'Value matches the not schema, but should not',\n keyword: 'not',\n path,\n value,\n };\n } else if (\n schema.if != null &&\n (schema.then != null || schema.else != null) &&\n (child = validateConditional(\n schema.if as JSONSchema,\n schema.then as JSONSchema | undefined,\n schema.else as JSONSchema | undefined,\n value,\n path\n )) != null\n ) {\n return child;\n }\n\n switch (valueType) {\n case 'string':\n return validateString(schema, value as string, path);\n case 'number':\n case 'integer':\n return validateNumber(schema, value as number, path);\n case 'array':\n return validateArray(schema, value as unknown[], path);\n case 'object':\n return validateObject(schema, value as Record<string, unknown>, path);\n default:\n return null;\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"validate.js","names":["getValueType","value","typeOf","Number","isInteger","Array","isArray","isDeepEqual","a","b","length","idx","keysA","Object","keys","keysB","areArrayValuesUnique","array","i","j","dateRe","dateTimeRe","timeRe","emailRe","hostnameRe","uriRe","validateFormat","format","test","TypeError","isEnumValue","enumValues","validateString","schema","path","minLength","message","keyword","maxLength","pattern","RegExp","validateNumber","multipleOf","minimum","maximum","exclusiveMaximum","exclusiveMinimum","validateContains","containsSchema","validateSchema","validateItems","itemsSchema","additionalItems","child","validateArray","minItems","maxItems","uniqueItems","contains","items","validateRequired","undefined","validateProperties","properties","key","validatePatternProperties","validatedProperties","patternProperties","propertyRe","childSchema","add","validateAdditionalProperties","additionalProperties","visitedPatternProperties","has","validatePropertyNames","propertyNames","validateDependencies","dependencies","validateObject","Set","minProperties","maxProperties","required","validateType","schemaType","valueType","includes","join","validateAllOf","schemas","validateAnyOf","cause","push","validateOneOf","validateConditional","ifSchema","thenSchema","elseSchema","type","const","JSON","stringify","enum","allOf","anyOf","oneOf","not","if","then","else","exports"],"sources":["../src/validate.ts"],"sourcesContent":["import { JSONSchema } from './JSONSchema';\n\nexport interface BaseValidationError {\n message: string;\n path: string;\n keyword: string;\n value: unknown;\n}\n\nexport interface ValidationError extends BaseValidationError {\n cause?: ValidationError[];\n}\n\ntype OneOrMany<T> = T | T[];\n\nconst getValueType = (\n value: unknown\n):\n | 'null'\n | 'boolean'\n | 'object'\n | 'array'\n | 'number'\n | 'integer'\n | 'string'\n | 'symbol'\n | 'undefined'\n | 'bigint'\n | 'function' => {\n const typeOf = typeof value;\n switch (typeOf) {\n case 'number':\n return Number.isInteger(value) ? 'integer' : 'number';\n case 'boolean':\n case 'string':\n return typeOf;\n case 'object':\n if (value === null) {\n return 'null';\n } else if (Array.isArray(value)) {\n return 'array';\n } else {\n return 'object';\n }\n default:\n return typeOf;\n }\n};\n\nconst isDeepEqual = (a: any, b: any): boolean => {\n if (a === b) {\n return true;\n } else if (a === null || b === null) {\n return false;\n } else if (typeof a !== typeof b) {\n return false;\n } else if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n for (let idx = 0; idx < a.length; idx++) {\n if (!isDeepEqual(a[idx], b[idx])) return false;\n }\n return true;\n } else if (typeof a === 'object') {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (!isDeepEqual(keysA, keysB)) {\n return false;\n }\n for (let idx = 0; idx < keysA.length; idx++) {\n if (!isDeepEqual(a[keysA[idx]], b[keysA[idx]])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n};\n\nconst areArrayValuesUnique = (array: unknown[]): boolean => {\n for (let i = 0; i < array.length; i++) {\n for (let j = 0; j < array.length; j++) {\n if (i !== j && isDeepEqual(array[i], array[j])) {\n return false;\n }\n }\n }\n return true;\n};\n\nconst dateRe = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst dateTimeRe = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/;\nconst timeRe = /^\\d{2}:\\d{2}:\\d{2}$/;\nconst emailRe = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\nconst hostnameRe =\n /^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\nconst uriRe = /^https?:\\/\\//;\n\nconst validateFormat = (format: string, value: string): boolean => {\n // NOTE: Left out ipv4 and ipv6\n switch (format) {\n case 'date-time':\n return dateTimeRe.test(value);\n case 'date':\n return dateRe.test(value);\n case 'time':\n return timeRe.test(value);\n case 'email':\n return emailRe.test(value);\n case 'hostname':\n return hostnameRe.test(value);\n case 'uri':\n return uriRe.test(value);\n default:\n throw new TypeError(`Unsupported format \"${format}\"`);\n }\n};\n\nconst isEnumValue = (enumValues: unknown[], value: unknown): boolean => {\n if (!enumValues.length) {\n throw new TypeError('Empty enum array');\n }\n for (let idx = 0; idx < enumValues.length; idx++) {\n if (isDeepEqual(value, enumValues[idx])) {\n return true;\n }\n }\n return false;\n};\n\nconst validateString = (\n schema: JSONSchema,\n value: string,\n path: string\n): ValidationError | null => {\n if (schema.minLength != null && value.length < schema.minLength) {\n return {\n message: `String must be at least ${schema.minLength} characters`,\n keyword: 'minLength',\n path,\n value,\n };\n } else if (schema.maxLength != null && value.length > schema.maxLength) {\n return {\n message: `String must be at most ${schema.maxLength} characters`,\n keyword: 'maxLength',\n path,\n value,\n };\n } else if (schema.pattern != null && !new RegExp(schema.pattern).test(value)) {\n return {\n message: `String does not match pattern: ${schema.pattern}`,\n keyword: 'pattern',\n path,\n value,\n };\n } else if (schema.format != null && !validateFormat(schema.format, value)) {\n return {\n message: `String does not match format: ${schema.format}`,\n keyword: 'format',\n path,\n value,\n };\n } else {\n return null;\n }\n};\n\nconst validateNumber = (\n schema: JSONSchema,\n value: number,\n path: string\n): ValidationError | null => {\n if (schema.multipleOf != null && value % schema.multipleOf !== 0) {\n return {\n message: `Number must be multiple of ${schema.multipleOf}`,\n keyword: 'multipleOf',\n path,\n value,\n };\n } else if (schema.minimum != null && value < schema.minimum) {\n return {\n message: `Number must be equal or greater than ${schema.minimum}`,\n keyword: 'minimum',\n path,\n value,\n };\n } else if (schema.maximum != null && value > schema.maximum) {\n return {\n message: `Number must be equal or less than ${schema.maximum}`,\n keyword: 'maximum',\n path,\n value,\n };\n } else if (\n schema.exclusiveMaximum === true &&\n schema.maximum != null &&\n value >= schema.maximum\n ) {\n return {\n message: `Number must be less than ${schema.maximum}`,\n keyword: 'exclusiveMaximum',\n path,\n value,\n };\n } else if (typeof schema.exclusiveMaximum === 'number' && value >= schema.exclusiveMaximum) {\n return {\n message: `Number must be less than ${schema.exclusiveMaximum}`,\n keyword: 'exclusiveMaximum',\n path,\n value,\n };\n } else if (\n schema.exclusiveMinimum === true &&\n schema.minimum != null &&\n value <= schema.minimum\n ) {\n return {\n message: `Number must be greater than ${schema.minimum}`,\n keyword: 'exclusiveMinimum',\n path,\n value,\n };\n } else if (typeof schema.exclusiveMinimum === 'number' && value <= schema.exclusiveMinimum) {\n return {\n message: `Number must be greater than ${schema.exclusiveMinimum}`,\n keyword: 'exclusiveMinimum',\n path,\n value,\n };\n } else {\n return null;\n }\n};\n\nconst validateContains = (\n containsSchema: JSONSchema,\n value: unknown[],\n path: string\n): ValidationError | null => {\n for (let idx = 0; idx < value.length; idx++) {\n if (validateSchema(containsSchema, value[idx], path) === null) {\n return null;\n }\n }\n return {\n message: 'Array must contain at least one item matching the contains schema',\n keyword: 'contains',\n path,\n value,\n };\n};\n\nconst validateItems = (\n itemsSchema: JSONSchema | JSONSchema[],\n additionalItems: boolean | JSONSchema | undefined,\n value: unknown[],\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n if (Array.isArray(itemsSchema)) {\n let idx = 0;\n for (idx = 0; idx < itemsSchema.length; idx++) {\n if ((child = validateSchema(itemsSchema[idx], value[idx], `${path}[${idx}]`)) != null) {\n return child;\n }\n }\n if (idx < value.length) {\n if (additionalItems === true) {\n return null;\n } else if (additionalItems) {\n for (; idx < value.length; idx++) {\n if ((child = validateSchema(additionalItems, value[idx], `${path}[${idx}]`)) != null) {\n return child;\n }\n }\n return null;\n } else {\n return {\n message: `Array contained ${value.length - idx} more items than items schema`,\n keyword: 'additionalItems',\n path,\n value,\n };\n }\n } else {\n return null;\n }\n } else {\n for (let idx = 0; idx < value.length; idx++) {\n if ((child = validateSchema(itemsSchema, value[idx], `${path}[${idx}]`)) != null) {\n return child;\n }\n }\n return null;\n }\n};\n\nconst validateArray = (schema: JSONSchema, value: unknown[], path: string) => {\n let child: ValidationError | null;\n if (schema.minItems != null && value.length < schema.minItems) {\n return {\n message: `Array must have at least ${schema.minItems} items`,\n keyword: 'minItems',\n path,\n value,\n };\n } else if (schema.maxItems != null && value.length > schema.maxItems) {\n return {\n message: `Array must have at most ${schema.maxItems} items`,\n keyword: 'maxItems',\n path,\n value,\n };\n } else if (schema.uniqueItems && !areArrayValuesUnique(value)) {\n return {\n message: 'Array items must be unique',\n keyword: 'uniqueItems',\n path,\n value,\n };\n } else if (\n schema.contains != null &&\n (child = validateContains(schema.contains as JSONSchema, value, path)) != null\n ) {\n return child;\n } else if (\n schema.items != null &&\n (child = validateItems(schema.items, schema.additionalItems, value, path)) != null\n ) {\n return child;\n } else {\n return null;\n }\n};\n\nconst validateRequired = (\n keys: string[],\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n for (let idx = 0; idx < keys.length; idx++) {\n if (value[keys[idx]] === undefined) {\n return {\n message: `Required property \"${keys[idx]}\" is missing`,\n keyword: 'required',\n path: `${path}.${keys[idx]}`,\n value,\n };\n }\n }\n return null;\n};\n\nconst validateProperties = (\n properties: Record<string, JSONSchema>,\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (const key in properties) {\n if (\n value[key] !== undefined &&\n (child = validateSchema(properties[key], value[key], `${path}.${key}`)) != null\n ) {\n return child;\n }\n }\n return null;\n};\n\nconst validatePatternProperties = (\n validatedProperties: Set<string>,\n patternProperties: Record<string, JSONSchema>,\n keys: string[],\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (const pattern in patternProperties) {\n const propertyRe = new RegExp(pattern);\n for (let idx = 0; idx < keys.length; idx++) {\n const key = keys[idx];\n const childSchema = patternProperties[pattern];\n if (propertyRe.test(key)) {\n validatedProperties.add(key);\n if ((child = validateSchema(childSchema, value[key], `${path}.${key}`)) != null) {\n return child;\n }\n }\n }\n }\n return null;\n};\n\nconst validateAdditionalProperties = (\n additionalProperties: boolean | JSONSchema,\n properties: Record<string, JSONSchema> | undefined,\n visitedPatternProperties: Set<string>,\n keys: string[],\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n if (additionalProperties === true) {\n return null;\n }\n let child: ValidationError | null;\n for (let idx = 0; idx < keys.length; idx++) {\n const key = keys[idx];\n if (!visitedPatternProperties.has(key) && !properties?.[key]) {\n if (additionalProperties === false) {\n return {\n message: `Additional property \"${key}\" is not allowed`,\n keyword: 'additionalProperties',\n path: `${path}.${key}`,\n value: value[key],\n };\n } else if (\n (child = validateSchema(additionalProperties, value[key], `${path}.${key}`)) != null\n ) {\n return child;\n }\n }\n }\n return null;\n};\n\nconst validatePropertyNames = (\n propertyNames: JSONSchema,\n keys: string[],\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (let idx = 0; idx < keys.length; idx++) {\n const key = keys[idx];\n if ((child = validateString(propertyNames, key, `${path}.${key}`)) != null) {\n child.message = `Property name \"${key}\" does not match schema. ${child.message}`;\n return child;\n }\n }\n return null;\n};\n\nconst validateDependencies = (\n dependencies: Record<string, JSONSchema | string[] | undefined>,\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (const key in dependencies) {\n if (value[key] !== undefined) {\n if (Array.isArray(dependencies[key])) {\n for (let idx = 0; idx < dependencies[key].length; idx++) {\n if (value[dependencies[key][idx]] === undefined) {\n return {\n message: `Property \"${dependencies[key][idx]}\" is required when \"${key}\" is present`,\n keyword: 'dependencies',\n path: `${path}.${dependencies[key][idx]}`,\n value: undefined,\n };\n }\n }\n } else if (\n dependencies[key] != null &&\n (child = validateSchema(dependencies[key], value, path)) != null\n ) {\n return child;\n }\n }\n }\n return null;\n};\n\nconst validateObject = (\n schema: JSONSchema,\n value: Record<string, unknown>,\n path: string\n): ValidationError | null => {\n const keys = Object.keys(value);\n const visitedPatternProperties = new Set<string>();\n let child: ValidationError | null;\n if (schema.minProperties != null && keys.length < schema.minProperties) {\n return {\n message: `Object must have at least ${schema.minProperties} properties`,\n keyword: 'minProperties',\n path,\n value,\n };\n } else if (schema.maxProperties != null && keys.length > schema.maxProperties) {\n return {\n message: `Object must have at most ${schema.maxProperties} properties`,\n keyword: 'maxProperties',\n path,\n value,\n };\n } else if (\n schema.required != null &&\n (child = validateRequired(schema.required, value, path)) != null\n ) {\n return child;\n } else if (\n schema.properties != null &&\n (child = validateProperties(schema.properties, value, path)) != null\n ) {\n return child;\n } else if (\n schema.patternProperties != null &&\n (child = validatePatternProperties(\n visitedPatternProperties,\n schema.patternProperties,\n keys,\n value,\n path\n )) != null\n ) {\n return child;\n } else if (\n schema.additionalProperties != null &&\n (child = validateAdditionalProperties(\n schema.additionalProperties,\n schema.properties,\n visitedPatternProperties,\n keys,\n value,\n path\n )) != null\n ) {\n return child;\n } else if (\n schema.propertyNames != null &&\n (child = validatePropertyNames(schema.propertyNames as JSONSchema, keys, path)) != null\n ) {\n return child;\n } else if (\n schema.dependencies != null &&\n (child = validateDependencies(schema.dependencies, value, path)) != null\n ) {\n return child;\n } else {\n return null;\n }\n};\n\nconst validateType = (\n schemaType: OneOrMany<'null' | 'boolean' | 'object' | 'array' | 'number' | 'integer' | 'string'>,\n valueType: string,\n path: string\n): ValidationError | null => {\n if (Array.isArray(schemaType)) {\n if (valueType === 'integer' && schemaType.includes('number')) {\n return null;\n }\n return !schemaType.includes(valueType as any)\n ? {\n message: `Expected type ${schemaType.join(' or ')}, got ${valueType}`,\n keyword: 'type',\n path,\n value: undefined,\n }\n : null;\n } else {\n if (valueType === 'integer' && schemaType === 'number') {\n return null;\n }\n return schemaType !== valueType\n ? {\n message: `Expected type ${schemaType}, got ${valueType}`,\n keyword: 'type',\n path,\n value: undefined,\n }\n : null;\n }\n};\n\nconst validateAllOf = (\n schemas: JSONSchema[],\n value: unknown,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n for (let idx = 0; idx < schemas.length; idx++) {\n if ((child = validateSchema(schemas[idx], value, path)) != null) {\n return child;\n }\n }\n return null;\n};\n\nconst validateAnyOf = (\n schemas: JSONSchema[],\n value: unknown,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n const cause: ValidationError[] = [];\n for (let idx = 0; idx < schemas.length; idx++) {\n if ((child = validateSchema(schemas[idx], value, path)) != null) {\n cause.push(child);\n } else {\n return null;\n }\n }\n return {\n message: 'No schema matched anyOf type',\n keyword: 'anyOf',\n path,\n value,\n cause,\n };\n};\n\nconst validateOneOf = (\n schemas: JSONSchema[],\n value: unknown,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n const cause: ValidationError[] = [];\n for (let idx = 0; idx < schemas.length; idx++) {\n if ((child = validateSchema(schemas[idx], value, path)) != null) {\n cause.push(child);\n }\n }\n if (cause.length >= schemas.length) {\n return {\n message: 'Value does not match any of the oneOf schemas',\n keyword: 'oneOf',\n path,\n value,\n cause,\n };\n } else if (cause.length < schemas.length - 1) {\n return {\n message: `Value matches ${schemas.length - cause.length} schemas, but exactly one is required`,\n keyword: 'oneOf',\n path,\n value,\n cause,\n };\n } else {\n return null;\n }\n};\n\nconst validateConditional = (\n ifSchema: JSONSchema,\n thenSchema: JSONSchema | undefined,\n elseSchema: JSONSchema | undefined,\n value: unknown,\n path: string\n): ValidationError | null => {\n let child: ValidationError | null;\n if (validateSchema(ifSchema, value, path) != null) {\n if (elseSchema != null && (child = validateSchema(elseSchema, value, path)) != null) {\n return {\n message: 'Value does not match \"else\" schema but did not match \"if\" condition schema',\n keyword: 'else',\n path,\n value,\n cause: [child],\n };\n } else {\n return null;\n }\n } else if (thenSchema != null && (child = validateSchema(thenSchema, value, path)) != null) {\n return {\n message: 'Value does not match \"then\" schema but did match \"if\" condition schema',\n keyword: 'then',\n path,\n value,\n cause: [child],\n };\n } else {\n return null;\n }\n};\n\nexport const validateSchema = (\n schema: JSONSchema,\n value: unknown,\n path: string\n): ValidationError | null => {\n if (typeof schema === 'boolean') {\n // Draft 07: Schemas can be booleans\n return !schema\n ? {\n message: 'Schema is false',\n keyword: 'schema',\n path,\n value: undefined,\n }\n : null;\n }\n\n const valueType = getValueType(value);\n let child: ValidationError | null;\n if (schema.type !== undefined && (child = validateType(schema.type, valueType, path)) != null) {\n return child;\n } else if (schema.const !== undefined && !isDeepEqual(value, schema.const)) {\n return {\n message: `Value must be equal to ${JSON.stringify(schema.const)}`,\n keyword: 'const',\n path,\n value,\n };\n } else if (schema.enum != null && !isEnumValue(schema.enum, value)) {\n return {\n message: `Value must be one of ${JSON.stringify(schema.enum)}`,\n keyword: 'enum',\n path,\n value,\n };\n } else if (schema.allOf != null && (child = validateAllOf(schema.allOf, value, path)) != null) {\n return child;\n } else if (schema.anyOf != null && (child = validateAnyOf(schema.anyOf, value, path)) != null) {\n return child;\n } else if (schema.oneOf != null && (child = validateOneOf(schema.oneOf, value, path)) != null) {\n return child;\n } else if (schema.not != null && validateSchema(schema.not, value, path) == null) {\n return {\n message: 'Value matches the not schema, but should not',\n keyword: 'not',\n path,\n value,\n };\n } else if (\n schema.if != null &&\n (schema.then != null || schema.else != null) &&\n (child = validateConditional(\n schema.if as JSONSchema,\n schema.then as JSONSchema | undefined,\n schema.else as JSONSchema | undefined,\n value,\n path\n )) != null\n ) {\n return child;\n }\n\n switch (valueType) {\n case 'string':\n return validateString(schema, value as string, path);\n case 'number':\n case 'integer':\n return validateNumber(schema, value as number, path);\n case 'array':\n return validateArray(schema, value as unknown[], path);\n case 'object':\n return validateObject(schema, value as Record<string, unknown>, path);\n default:\n return null;\n }\n};\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expo/schema-utils",
3
- "version": "55.0.3-canary-20260429-a5e59cf",
3
+ "version": "55.0.4",
4
4
  "description": "Reusable JSON Schema (Draft 04) validation library for Expo",
5
5
  "license": "MIT",
6
6
  "main": "./build/index.js",
@@ -13,7 +13,8 @@
13
13
  "clean": "expo-module clean",
14
14
  "lint": "expo-module lint",
15
15
  "generate": "node ./scripts/generate.js",
16
- "prepublishOnly": "pnpm run clean && pnpm run build",
16
+ "prepare": "yarn run clean && yarn run build",
17
+ "prepublishOnly": "expo-module prepublishOnly",
17
18
  "test": "expo-module test",
18
19
  "typecheck": "expo-module typecheck"
19
20
  },
@@ -27,12 +28,11 @@
27
28
  "url": "https://github.com/expo/expo/issues"
28
29
  },
29
30
  "devDependencies": {
30
- "@babel/cli": "^7.23.4",
31
- "@types/node": "^22.14.0",
32
- "expo-module-scripts": "workspace:*",
31
+ "expo-module-scripts": "^55.0.2",
33
32
  "json-schema-to-typescript": "^15.0.0"
34
33
  },
35
34
  "publishConfig": {
36
35
  "access": "public"
37
- }
36
+ },
37
+ "gitHead": "7c081282cf88968f81732feb67a71840e769a40f"
38
38
  }