@luvio/jsonschema-validate
Advanced tools
Comparing version 5.12.1 to 5.13.0
@@ -19,2 +19,4 @@ /** | ||
} | ||
class InvalidRefError extends JsonSchemaViolationError { | ||
} | ||
/** | ||
@@ -33,3 +35,3 @@ * Validates a value against a schema in a TypeScript-friendly way. | ||
} | ||
function validateJsonSchema(data, schema, path = '$') { | ||
function validateJsonSchema(data, schema, path = '$', document = schema) { | ||
if (schema === true) | ||
@@ -41,10 +43,13 @@ return; | ||
if ('anyOf' in schema) { | ||
validateAnyOf(data, schema, path); | ||
validateAnyOf(data, schema, path, document); | ||
} | ||
else if ('allOf' in schema) { | ||
validateAllOf(data, schema, path); | ||
validateAllOf(data, schema, path, document); | ||
} | ||
else if ('not' in schema) { | ||
validateNot(data, schema, path); | ||
validateNot(data, schema, path, document); | ||
} | ||
else if ('$ref' in schema) { | ||
validateRef(data, schema, path, document); | ||
} | ||
else if (schema.type === 'object') { | ||
@@ -54,3 +59,3 @@ if (dataType !== 'object') { | ||
} | ||
validateObject(data, schema, path); | ||
validateObject(data, schema, path, document); | ||
} | ||
@@ -61,3 +66,3 @@ else if (schema.type === 'array') { | ||
} | ||
validateArray(data, schema, path); | ||
validateArray(data, schema, path, document); | ||
} | ||
@@ -68,6 +73,6 @@ else { | ||
} | ||
function validateAnyOf(data, schema, path) { | ||
function validateAnyOf(data, schema, path, document) { | ||
if (!schema.anyOf.find((element) => { | ||
try { | ||
validateJsonSchema(data, element, path); | ||
validateJsonSchema(data, element, path, document); | ||
return true; | ||
@@ -82,6 +87,6 @@ } | ||
} | ||
function validateAllOf(data, schema, path) { | ||
function validateAllOf(data, schema, path, document) { | ||
if (!schema.allOf.every((element) => { | ||
try { | ||
validateJsonSchema(data, element, path); | ||
validateJsonSchema(data, element, path, document); | ||
return true; | ||
@@ -96,5 +101,5 @@ } | ||
} | ||
function validateNot(data, schema, path) { | ||
function validateNot(data, schema, path, document) { | ||
try { | ||
validateJsonSchema(data, schema.not, path); | ||
validateJsonSchema(data, schema.not, path, document); | ||
} | ||
@@ -110,3 +115,3 @@ catch (e) { | ||
} | ||
function validateObject(data, schema, path) { | ||
function validateObject(data, schema, path, document) { | ||
const schemaKeys = Object.keys(schema.properties); | ||
@@ -117,3 +122,3 @@ const requiredKeys = new Set(schema.required); | ||
if (!schemaKeySet.has(key)) { | ||
validateJsonSchema(data[key], schema.additionalProperties, `${path}.additionalProperties[${key}]`); | ||
validateJsonSchema(data[key], schema.additionalProperties, `${path}.additionalProperties[${key}]`, document); | ||
} | ||
@@ -128,7 +133,7 @@ }); | ||
if (keyInData) { | ||
validateJsonSchema(data[key], schema.properties[key], `${path}.${key}`); | ||
validateJsonSchema(data[key], schema.properties[key], `${path}.${key}`, document); | ||
} | ||
} | ||
} | ||
function validateArray(data, schema, path) { | ||
function validateArray(data, schema, path, document) { | ||
if (schema.minItems !== undefined && data.length < schema.minItems) { | ||
@@ -140,3 +145,3 @@ throw new MinItemsViolationError(`Array at path '${path}' fails minItems constraint. Has ${data.length} items, needs at least ${schema.minItems}.`); | ||
} | ||
data.forEach((element, index) => validateJsonSchema(element, schema.items, `${path}[${index}]`)); | ||
data.forEach((element, index) => validateJsonSchema(element, schema.items, `${path}[${index}]`, document)); | ||
} | ||
@@ -175,4 +180,12 @@ function validateScalar(data, schema, path) { | ||
} | ||
function validateRef(data, schema, path, document) { | ||
if (schema.$ref === '#') { | ||
validateJsonSchema(data, document, path, document); | ||
} | ||
else { | ||
throw new InvalidRefError(`$ref values other than # are unsupported`); | ||
} | ||
} | ||
export { AdditionalPropertiesError, IncorrectTypeError, JsonSchemaViolationError, MaxItemsViolationError, MinItemsViolationError, MissingRequiredPropertyError, assertIsValid, validateAllOf, validateAnyOf, validateArray, validateJsonSchema, validateNot, validateObject, validateScalar }; | ||
export { AdditionalPropertiesError, IncorrectTypeError, InvalidRefError, JsonSchemaViolationError, MaxItemsViolationError, MinItemsViolationError, MissingRequiredPropertyError, assertIsValid, validateAllOf, validateAnyOf, validateArray, validateJsonSchema, validateNot, validateObject, validateScalar }; | ||
//# sourceMappingURL=jsonschema-validate.js.map |
@@ -1,2 +0,5 @@ | ||
export type JSONSchema = ObjectType | ArrayType | ScalarType | AnyOf | AllOf | Not | boolean; | ||
export type JSONSchema = ObjectType | ArrayType | ScalarType | AnyOf | AllOf | Not | RefType | boolean; | ||
export type RefType = { | ||
$ref: '#'; | ||
}; | ||
export type ObjectType = { | ||
@@ -51,2 +54,4 @@ type: 'object'; | ||
} | ||
export declare class InvalidRefError extends JsonSchemaViolationError { | ||
} | ||
/** | ||
@@ -60,9 +65,9 @@ * Validates a value against a schema in a TypeScript-friendly way. | ||
export declare function assertIsValid<Type>(data: unknown, schema: JSONSchema): asserts data is Type; | ||
export declare function validateJsonSchema(data: unknown, schema: JSONSchema, path?: string): void; | ||
export declare function validateAnyOf(data: unknown, schema: AnyOf, path: string): void; | ||
export declare function validateAllOf(data: unknown, schema: AllOf, path: string): void; | ||
export declare function validateNot(data: unknown, schema: Not, path: string): void; | ||
export declare function validateObject(data: Record<string, unknown>, schema: ObjectType, path: string): void; | ||
export declare function validateArray(data: Array<unknown>, schema: ArrayType, path: string): void; | ||
export declare function validateJsonSchema(data: unknown, schema: JSONSchema, path?: string, document?: JSONSchema): void; | ||
export declare function validateAnyOf(data: unknown, schema: AnyOf, path: string, document: JSONSchema): void; | ||
export declare function validateAllOf(data: unknown, schema: AllOf, path: string, document: JSONSchema): void; | ||
export declare function validateNot(data: unknown, schema: Not, path: string, document: JSONSchema): void; | ||
export declare function validateObject(data: Record<string, unknown>, schema: ObjectType, path: string, document: JSONSchema): void; | ||
export declare function validateArray(data: Array<unknown>, schema: ArrayType, path: string, document: JSONSchema): void; | ||
export declare function validateScalar(data: number | string | boolean | null, schema: ScalarType, path: string): void; | ||
export {}; |
{ | ||
"name": "@luvio/jsonschema-validate", | ||
"version": "5.12.1", | ||
"version": "5.13.0", | ||
"private": false, | ||
@@ -25,2 +25,5 @@ "description": "Luvio Next JSON Schema Validation", | ||
}, | ||
"volta": { | ||
"extends": "../../../package.json" | ||
}, | ||
"bundlesize": [ | ||
@@ -27,0 +30,0 @@ { |
Sorry, the diff of this file is not supported yet
41044
249