jsonschema
Advanced tools
Comparing version 1.2.11 to 1.3.0
@@ -19,5 +19,5 @@ 'use strict'; | ||
// arguments to other properties | ||
'exclusiveMinimum': true, | ||
'exclusiveMaximum': true, | ||
'additionalItems': true, | ||
'then': true, | ||
'else': true, | ||
// special-handled properties | ||
@@ -52,3 +52,4 @@ '$schema': true, | ||
if(!v) return; | ||
return v.id && ('<' + v.id + '>') || (v+''); | ||
var id = v.$id || v.id; | ||
return id ? ('<' + id + '>') : (v+''); | ||
}); | ||
@@ -99,3 +100,5 @@ result.addError({ | ||
var list = schema.anyOf.map(function (v, i) { | ||
return (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']'; | ||
var id = v.$id || v.id; | ||
if(id) return '<' + id + '>'; | ||
return(v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']'; | ||
}); | ||
@@ -135,3 +138,4 @@ if (options.nestedErrors) { | ||
if(!valid.valid){ | ||
var msg = (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']'; | ||
var id = v.$id || v.id; | ||
var msg = id || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']'; | ||
result.addError({ | ||
@@ -171,3 +175,4 @@ name: 'allOf', | ||
var list = schema.oneOf.map(function (v, i) { | ||
return (v.id && ('<' + v.id + '>')) || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']'; | ||
var id = v.$id || v.id; | ||
return id || (v.title && JSON.stringify(v.title)) || (v['$ref'] && ('<' + v['$ref'] + '>')) || '[subschema '+i+']'; | ||
}); | ||
@@ -187,2 +192,31 @@ if (count!==1) { | ||
/** | ||
* Validates "then" or "else" depending on the result of validating "if" | ||
* @param instance | ||
* @param schema | ||
* @param options | ||
* @param ctx | ||
* @return {String|null} | ||
*/ | ||
validators.if = function validateIf (instance, schema, options, ctx) { | ||
// Ignore undefined instances | ||
if (instance === undefined) return null; | ||
if (!helpers.isSchema(schema.if)) throw new Error('Expected "if" keyword to be a schema'); | ||
var ifValid = testSchemaNoThrow.call(this, instance, options, ctx, null, schema.if); | ||
var result = new ValidatorResult(instance, schema, options, ctx); | ||
var res; | ||
if(ifValid){ | ||
if (schema.then === undefined) return; | ||
if (!helpers.isSchema(schema.then)) throw new Error('Expected "then" keyword to be a schema'); | ||
res = this.validateSchema(instance, schema.then, options, ctx.makeChild(schema.then)); | ||
result.importErrors(res); | ||
}else{ | ||
if (schema.else === undefined) return; | ||
if (!helpers.isSchema(schema.else)) throw new Error('Expected "else" keyword to be a schema'); | ||
res = this.validateSchema(instance, schema.else, options, ctx.makeChild(schema.else)); | ||
result.importErrors(res); | ||
} | ||
return result; | ||
}; | ||
function getEnumerableProperty(object, key){ | ||
@@ -194,3 +228,3 @@ // Determine if `key` shows up in `for(var key in object)` | ||
if(!(key in object)) return; | ||
while(object = Object.getPrototypeOf(object)){ | ||
while( (object = Object.getPrototypeOf(object)) ){ | ||
if(Object.propertyIsEnumerable.call(object, key)) return object[key]; | ||
@@ -201,2 +235,26 @@ } | ||
/** | ||
* Validates propertyNames | ||
* @param instance | ||
* @param schema | ||
* @param options | ||
* @param ctx | ||
* @return {String|null|ValidatorResult} | ||
*/ | ||
validators.propertyNames = function validatePropertyNames (instance, schema, options, ctx) { | ||
if(!this.types.object(instance)) return; | ||
var result = new ValidatorResult(instance, schema, options, ctx); | ||
var subschema = schema.propertyNames!==undefined ? schema.propertyNames : {}; | ||
if(!helpers.isSchema(subschema)) throw new SchemaError('Expected "propertyNames" to be a schema (object or boolean)'); | ||
for (var property in instance) { | ||
if(getEnumerableProperty(instance, property) !== undefined){ | ||
var res = this.validateSchema(property, subschema, options, ctx.makeChild(subschema)); | ||
result.importErrors(res); | ||
} | ||
} | ||
return result; | ||
}; | ||
/** | ||
* Validates properties | ||
@@ -247,3 +305,3 @@ * @param instance | ||
argument: property, | ||
message: "additionalProperty " + JSON.stringify(property) + " exists in instance when not allowed", | ||
message: "is not allowed to have the additional property " + JSON.stringify(property), | ||
}); | ||
@@ -416,15 +474,19 @@ } else { | ||
var result = new ValidatorResult(instance, schema, options, ctx); | ||
var valid = true; | ||
if (schema.exclusiveMinimum && schema.exclusiveMinimum === true) { | ||
valid = instance > schema.minimum; | ||
if(!(instance > schema.minimum)){ | ||
result.addError({ | ||
name: 'minimum', | ||
argument: schema.minimum, | ||
message: "must be greater than " + schema.minimum, | ||
}); | ||
} | ||
} else { | ||
valid = instance >= schema.minimum; | ||
if(!(instance >= schema.minimum)){ | ||
result.addError({ | ||
name: 'minimum', | ||
argument: schema.minimum, | ||
message: "must be greater than or equal to " + schema.minimum, | ||
}); | ||
} | ||
} | ||
if (!valid) { | ||
result.addError({ | ||
name: 'minimum', | ||
argument: schema.minimum, | ||
message: "must have a minimum value of " + schema.minimum, | ||
}); | ||
} | ||
return result; | ||
@@ -442,13 +504,39 @@ }; | ||
var result = new ValidatorResult(instance, schema, options, ctx); | ||
var valid; | ||
if (schema.exclusiveMaximum && schema.exclusiveMaximum === true) { | ||
valid = instance < schema.maximum; | ||
if(!(instance < schema.maximum)){ | ||
result.addError({ | ||
name: 'maximum', | ||
argument: schema.maximum, | ||
message: "must be less than " + schema.maximum, | ||
}); | ||
} | ||
} else { | ||
valid = instance <= schema.maximum; | ||
if(!(instance <= schema.maximum)){ | ||
result.addError({ | ||
name: 'maximum', | ||
argument: schema.maximum, | ||
message: "must be less than or equal to " + schema.maximum, | ||
}); | ||
} | ||
} | ||
return result; | ||
}; | ||
/** | ||
* Validates the number form of exclusiveMinimum when the type of the instance value is a number. | ||
* @param instance | ||
* @param schema | ||
* @return {String|null} | ||
*/ | ||
validators.exclusiveMinimum = function validateExclusiveMinimum (instance, schema, options, ctx) { | ||
// Support the boolean form of exclusiveMinimum, which is handled by the "minimum" keyword. | ||
if(typeof schema.exclusiveMaximum === 'boolean') return; | ||
if (!this.types.number(instance)) return; | ||
var result = new ValidatorResult(instance, schema, options, ctx); | ||
var valid = instance > schema.exclusiveMinimum; | ||
if (!valid) { | ||
result.addError({ | ||
name: 'maximum', | ||
argument: schema.maximum, | ||
message: "must have a maximum value of " + schema.maximum, | ||
name: 'exclusiveMinimum', | ||
argument: schema.exclusiveMinimum, | ||
message: "must be strictly greater than " + schema.exclusiveMinimum, | ||
}); | ||
@@ -460,2 +548,24 @@ } | ||
/** | ||
* Validates the number form of exclusiveMaximum when the type of the instance value is a number. | ||
* @param instance | ||
* @param schema | ||
* @return {String|null} | ||
*/ | ||
validators.exclusiveMaximum = function validateExclusiveMaximum (instance, schema, options, ctx) { | ||
// Support the boolean form of exclusiveMaximum, which is handled by the "maximum" keyword. | ||
if(typeof schema.exclusiveMaximum === 'boolean') return; | ||
if (!this.types.number(instance)) return; | ||
var result = new ValidatorResult(instance, schema, options, ctx); | ||
var valid = instance < schema.exclusiveMaximum; | ||
if (!valid) { | ||
result.addError({ | ||
name: 'exclusiveMaximum', | ||
argument: schema.exclusiveMaximum, | ||
message: "must be strictly less than " + schema.exclusiveMaximum, | ||
}); | ||
} | ||
return result; | ||
}; | ||
/** | ||
* Perform validation for multipleOf and divisibleBy, which are essentially the same. | ||
@@ -833,3 +943,4 @@ * @param instance | ||
if (self.testType(instance, schema, options, ctx, type)) { | ||
var schemaId = type && type.id && ('<' + type.id + '>') || type; | ||
var id = type && (type.$id || type.id); | ||
var schemaId = id || type; | ||
result.addError({ | ||
@@ -836,0 +947,0 @@ name: 'not', |
@@ -5,5 +5,10 @@ 'use strict'; | ||
var ValidationError = exports.ValidationError = function ValidationError (message, instance, schema, propertyPath, name, argument) { | ||
if (propertyPath) { | ||
this.property = propertyPath; | ||
var ValidationError = exports.ValidationError = function ValidationError (message, instance, schema, path, name, argument) { | ||
if(Array.isArray(path)){ | ||
this.path = path; | ||
this.property = path.reduce(function(sum, item){ | ||
return sum + makeSuffix(item); | ||
}, 'instance'); | ||
}else if(path !== undefined){ | ||
this.property = path; | ||
} | ||
@@ -14,7 +19,4 @@ if (message) { | ||
if (schema) { | ||
if (schema.id) { | ||
this.schema = schema.id; | ||
} else { | ||
this.schema = schema; | ||
} | ||
var id = schema.$id || schema.id; | ||
this.schema = id || schema; | ||
} | ||
@@ -36,2 +38,3 @@ if (instance !== undefined) { | ||
this.schema = schema; | ||
this.path = ctx.path; | ||
this.propertyPath = ctx.propertyPath; | ||
@@ -46,3 +49,3 @@ this.errors = []; | ||
if (typeof detail == 'string') { | ||
err = new ValidationError(detail, this.instance, this.schema, this.propertyPath); | ||
err = new ValidationError(detail, this.instance, this.schema, this.path); | ||
} else { | ||
@@ -52,3 +55,3 @@ if (!detail) throw new Error('Missing error detail'); | ||
if (!detail.name) throw new Error('Missing validator type'); | ||
err = new ValidationError(detail.message, this.instance, this.schema, this.propertyPath, detail.name, detail.argument); | ||
err = new ValidationError(detail.message, this.instance, this.schema, this.path, detail.name, detail.argument); | ||
} | ||
@@ -99,6 +102,13 @@ | ||
var SchemaContext = exports.SchemaContext = function SchemaContext (schema, options, propertyPath, base, schemas) { | ||
var SchemaContext = exports.SchemaContext = function SchemaContext (schema, options, path, base, schemas) { | ||
this.schema = schema; | ||
this.options = options; | ||
this.propertyPath = propertyPath; | ||
if(Array.isArray(path)){ | ||
this.path = path; | ||
this.propertyPath = path.reduce(function(sum, item){ | ||
return sum + makeSuffix(item); | ||
}, 'instance'); | ||
}else{ | ||
this.propertyPath = path; | ||
} | ||
this.base = base; | ||
@@ -113,6 +123,7 @@ this.schemas = schemas; | ||
SchemaContext.prototype.makeChild = function makeChild(schema, propertyName){ | ||
var propertyPath = (propertyName===undefined) ? this.propertyPath : this.propertyPath+makeSuffix(propertyName); | ||
var base = uri.resolve(this.base, schema.id||''); | ||
var ctx = new SchemaContext(schema, this.options, propertyPath, base, Object.create(this.schemas)); | ||
if(schema.id && !ctx.schemas[base]){ | ||
var path = (propertyName===undefined) ? this.path : this.path.concat([propertyName]); | ||
var id = schema.$id || schema.id; | ||
var base = uri.resolve(this.base, id||''); | ||
var ctx = new SchemaContext(schema, this.options, path, base, Object.create(this.schemas)); | ||
if(id && !ctx.schemas[base]){ | ||
ctx.schemas[base] = schema; | ||
@@ -131,3 +142,7 @@ } | ||
'ipv6': /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/, | ||
// TODO: A more accurate regular expression for "uri" goes: | ||
// [A-Za-z][+\-.0-9A-Za-z]*:((/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?)?)?#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])|/?%[0-9A-Fa-f]{2}|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*(#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?|/(/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+(:\d*)?|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?:\d*|\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)?)? | ||
'uri': /^[a-zA-Z][a-zA-Z0-9+-.]*:[^\s]*$/, | ||
'uri-reference': /^(((([A-Za-z][+\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~]|[/?])|\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|([A-Za-z][+\-.0-9A-Za-z]*:?)?)|([A-Za-z][+\-.0-9A-Za-z]*:)?\/((%[0-9A-Fa-f]{2}|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?)?))#(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|(([A-Za-z][+\-.0-9A-Za-z]*)?%[0-9A-Fa-f]{2}|[!$&-.0-9;=@_~]|[A-Za-z][+\-.0-9A-Za-z]*[!$&-*,;=@_~])(%[0-9A-Fa-f]{2}|[!$&-.0-9;=@-Z_a-z~])*((([/?](%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?#|[/?])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*)?|([A-Za-z][+\-.0-9A-Za-z]*(:%[0-9A-Fa-f]{2}|:[!$&-.0-;=?-Z_a-z~]|[/?])|\?)(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|([A-Za-z][+\-.0-9A-Za-z]*:)?\/((%[0-9A-Fa-f]{2}|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)(:\d*)?[/?]|[!$&-.0-;=?-Z_a-z~])(%[0-9A-Fa-f]{2}|[!$&-;=?-Z_a-z~])*|\/((%[0-9A-Fa-f]{2}|[!$&-.0-9;=A-Z_a-z~])+(:\d*)?|(\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?:\d*|\[(([Vv][0-9A-Fa-f]+\.[!$&-.0-;=A-Z_a-z~]+)?|[.0-:A-Fa-f]+)\])?)?|[A-Za-z][+\-.0-9A-Za-z]*:?)?$/, | ||
@@ -335,1 +350,5 @@ 'color': /^(#?([0-9A-Fa-f]{3}){1,2}\b|aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\)))$/, | ||
exports.isSchema = function isSchema(val){ | ||
return (typeof val === 'object' && val) || (typeof val === 'boolean'); | ||
}; | ||
@@ -32,2 +32,3 @@ /* | ||
constructor(message?: string, instance?: any, schema?: Schema, propertyPath?: any, name?: string, argument?: any); | ||
path: (string|number)[]; | ||
property: string; | ||
@@ -52,2 +53,3 @@ message: string; | ||
export interface Schema { | ||
$id?: string | ||
id?: string | ||
@@ -60,5 +62,5 @@ $schema?: string | ||
maximum?: number | ||
exclusiveMaximum?: boolean | ||
exclusiveMaximum?: number | boolean | ||
minimum?: number | ||
exclusiveMinimum?: boolean | ||
exclusiveMinimum?: number | boolean | ||
maxLength?: number | ||
@@ -96,2 +98,5 @@ minLength?: number | ||
not?: Schema | ||
if?: Schema | ||
then?: Schema | ||
else?: Schema | ||
} | ||
@@ -104,3 +109,2 @@ | ||
rewrite?: RewriteFunction; | ||
propertyName?: string; | ||
base?: string; | ||
@@ -107,0 +111,0 @@ throwError?: boolean; |
@@ -27,3 +27,4 @@ "use strict"; | ||
} | ||
var ourBase = schema.id ? urilib.resolve(baseuri, schema.id) : baseuri; | ||
var id = schema.$id || schema.id; | ||
var ourBase = id ? urilib.resolve(baseuri, id) : baseuri; | ||
if (ourBase) { | ||
@@ -30,0 +31,0 @@ // If there's no fragment, append an empty one |
@@ -112,7 +112,7 @@ 'use strict'; | ||
} | ||
var propertyName = options.propertyName || 'instance'; | ||
// This will work so long as the function at uri.resolve() will resolve a relative URI to a relative URI | ||
var base = urilib.resolve(options.base||anonymousBase, schema.id||''); | ||
var id = schema.$id || schema.id; | ||
var base = urilib.resolve(options.base||anonymousBase, id||''); | ||
if(!ctx){ | ||
ctx = new SchemaContext(schema, options, propertyName, base, Object.create(this.schemas)); | ||
ctx = new SchemaContext(schema, options, [], base, Object.create(this.schemas)); | ||
if (!ctx.schemas[base]) { | ||
@@ -187,3 +187,3 @@ ctx.schemas[base] = schema; | ||
var resolved = this.resolve(schema, switchSchema, ctx); | ||
var subctx = new SchemaContext(resolved.subschema, options, ctx.propertyPath, resolved.switchSchema, ctx.schemas); | ||
var subctx = new SchemaContext(resolved.subschema, options, ctx.path, resolved.switchSchema, ctx.schemas); | ||
return this.validateSchema(instance, resolved.subschema, options, subctx); | ||
@@ -190,0 +190,0 @@ } |
{ | ||
"author": "Tom de Grunt <tom@degrunt.nl>", | ||
"name": "jsonschema", | ||
"version": "1.2.11", | ||
"version": "1.3.0", | ||
"license": "MIT", | ||
@@ -12,3 +12,3 @@ "dependencies": {}, | ||
], | ||
"main": "./lib", | ||
"main": "./lib/index.js", | ||
"typings": "./lib/index.d.ts", | ||
@@ -15,0 +15,0 @@ "devDependencies": { |
@@ -149,3 +149,4 @@ [![Build Status](https://secure.travis-ci.org/tdegrunt/jsonschema.svg)](http://travis-ci.org/tdegrunt/jsonschema) | ||
* property: string. Describes the property path. Starts with `instance` (this is configurable with the `options.propertyName` option), and is delimited with a dot (`.`). | ||
* path: array. An array of property keys or array offsets, indicating where inside objects or arrays the instance was found. | ||
* property: string. Describes the property path. Starts with `instance`, and is delimited with a dot (`.`). | ||
* message: string. A human-readable message for debugging use. Provided in English and subject to change. | ||
@@ -161,3 +162,3 @@ * schema: object. The schema containing the keyword that failed | ||
This behavor may be configured with `options.nestedErrors`. If truthy, it will emit all the errors from the subschemas. This option may be useful when troubleshooting validation errors in complex schemas: | ||
This behavior may be configured with `options.nestedErrors`. If truthy, it will emit all the errors from the subschemas. This option may be useful when troubleshooting validation errors in complex schemas: | ||
@@ -164,0 +165,0 @@ ```javascript |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
75147
1708
390
10