You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
245 lines
7.5 KiB
245 lines
7.5 KiB
{{# def.definitions }} |
|
{{# def.errors }} |
|
{{# def.setupKeyword }} |
|
{{# def.setupNextLevel }} |
|
|
|
|
|
{{## def.validateAdditional: |
|
{{ /* additionalProperties is schema */ |
|
$it.schema = $aProperties; |
|
$it.schemaPath = it.schemaPath + '.additionalProperties'; |
|
$it.errSchemaPath = it.errSchemaPath + '/additionalProperties'; |
|
$it.errorPath = it.opts._errorDataPathProperty |
|
? it.errorPath |
|
: it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); |
|
var $passData = $data + '[' + $key + ']'; |
|
$it.dataPathArr[$dataNxt] = $key; |
|
}} |
|
|
|
{{# def.generateSubschemaCode }} |
|
{{# def.optimizeValidate }} |
|
#}} |
|
|
|
|
|
{{ |
|
var $key = 'key' + $lvl |
|
, $idx = 'idx' + $lvl |
|
, $dataNxt = $it.dataLevel = it.dataLevel + 1 |
|
, $nextData = 'data' + $dataNxt |
|
, $dataProperties = 'dataProperties' + $lvl; |
|
|
|
var $schemaKeys = Object.keys($schema || {}).filter(notProto) |
|
, $pProperties = it.schema.patternProperties || {} |
|
, $pPropertyKeys = Object.keys($pProperties).filter(notProto) |
|
, $aProperties = it.schema.additionalProperties |
|
, $someProperties = $schemaKeys.length || $pPropertyKeys.length |
|
, $noAdditional = $aProperties === false |
|
, $additionalIsSchema = typeof $aProperties == 'object' |
|
&& Object.keys($aProperties).length |
|
, $removeAdditional = it.opts.removeAdditional |
|
, $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional |
|
, $ownProperties = it.opts.ownProperties |
|
, $currentBaseId = it.baseId; |
|
|
|
var $required = it.schema.required; |
|
if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) { |
|
var $requiredHash = it.util.toHash($required); |
|
} |
|
|
|
function notProto(p) { return p !== '__proto__'; } |
|
}} |
|
|
|
|
|
var {{=$errs}} = errors; |
|
var {{=$nextValid}} = true; |
|
{{? $ownProperties }} |
|
var {{=$dataProperties}} = undefined; |
|
{{?}} |
|
|
|
{{? $checkAdditional }} |
|
{{# def.iterateProperties }} |
|
{{? $someProperties }} |
|
var isAdditional{{=$lvl}} = !(false |
|
{{? $schemaKeys.length }} |
|
{{? $schemaKeys.length > 8 }} |
|
|| validate.schema{{=$schemaPath}}.hasOwnProperty({{=$key}}) |
|
{{??}} |
|
{{~ $schemaKeys:$propertyKey }} |
|
|| {{=$key}} == {{= it.util.toQuotedString($propertyKey) }} |
|
{{~}} |
|
{{?}} |
|
{{?}} |
|
{{? $pPropertyKeys.length }} |
|
{{~ $pPropertyKeys:$pProperty:$i }} |
|
|| {{= it.usePattern($pProperty) }}.test({{=$key}}) |
|
{{~}} |
|
{{?}} |
|
); |
|
|
|
if (isAdditional{{=$lvl}}) { |
|
{{?}} |
|
{{? $removeAdditional == 'all' }} |
|
delete {{=$data}}[{{=$key}}]; |
|
{{??}} |
|
{{ |
|
var $currentErrorPath = it.errorPath; |
|
var $additionalProperty = '\' + ' + $key + ' + \''; |
|
if (it.opts._errorDataPathProperty) { |
|
it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); |
|
} |
|
}} |
|
{{? $noAdditional }} |
|
{{? $removeAdditional }} |
|
delete {{=$data}}[{{=$key}}]; |
|
{{??}} |
|
{{=$nextValid}} = false; |
|
{{ |
|
var $currErrSchemaPath = $errSchemaPath; |
|
$errSchemaPath = it.errSchemaPath + '/additionalProperties'; |
|
}} |
|
{{# def.error:'additionalProperties' }} |
|
{{ $errSchemaPath = $currErrSchemaPath; }} |
|
{{? $breakOnError }} break; {{?}} |
|
{{?}} |
|
{{?? $additionalIsSchema }} |
|
{{? $removeAdditional == 'failing' }} |
|
var {{=$errs}} = errors; |
|
{{# def.setCompositeRule }} |
|
|
|
{{# def.validateAdditional }} |
|
|
|
if (!{{=$nextValid}}) { |
|
errors = {{=$errs}}; |
|
if (validate.errors !== null) { |
|
if (errors) validate.errors.length = errors; |
|
else validate.errors = null; |
|
} |
|
delete {{=$data}}[{{=$key}}]; |
|
} |
|
|
|
{{# def.resetCompositeRule }} |
|
{{??}} |
|
{{# def.validateAdditional }} |
|
{{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} |
|
{{?}} |
|
{{?}} |
|
{{ it.errorPath = $currentErrorPath; }} |
|
{{?}} |
|
{{? $someProperties }} |
|
} |
|
{{?}} |
|
} |
|
|
|
{{# def.ifResultValid }} |
|
{{?}} |
|
|
|
{{ var $useDefaults = it.opts.useDefaults && !it.compositeRule; }} |
|
|
|
{{? $schemaKeys.length }} |
|
{{~ $schemaKeys:$propertyKey }} |
|
{{ var $sch = $schema[$propertyKey]; }} |
|
|
|
{{? {{# def.nonEmptySchema:$sch}} }} |
|
{{ |
|
var $prop = it.util.getProperty($propertyKey) |
|
, $passData = $data + $prop |
|
, $hasDefault = $useDefaults && $sch.default !== undefined; |
|
$it.schema = $sch; |
|
$it.schemaPath = $schemaPath + $prop; |
|
$it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey); |
|
$it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers); |
|
$it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey); |
|
}} |
|
|
|
{{# def.generateSubschemaCode }} |
|
|
|
{{? {{# def.willOptimize }} }} |
|
{{ |
|
$code = {{# def._optimizeValidate }}; |
|
var $useData = $passData; |
|
}} |
|
{{??}} |
|
{{ var $useData = $nextData; }} |
|
var {{=$nextData}} = {{=$passData}}; |
|
{{?}} |
|
|
|
{{? $hasDefault }} |
|
{{= $code }} |
|
{{??}} |
|
{{? $requiredHash && $requiredHash[$propertyKey] }} |
|
if ({{# def.noPropertyInData }}) { |
|
{{=$nextValid}} = false; |
|
{{ |
|
var $currentErrorPath = it.errorPath |
|
, $currErrSchemaPath = $errSchemaPath |
|
, $missingProperty = it.util.escapeQuotes($propertyKey); |
|
if (it.opts._errorDataPathProperty) { |
|
it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers); |
|
} |
|
$errSchemaPath = it.errSchemaPath + '/required'; |
|
}} |
|
{{# def.error:'required' }} |
|
{{ $errSchemaPath = $currErrSchemaPath; }} |
|
{{ it.errorPath = $currentErrorPath; }} |
|
} else { |
|
{{??}} |
|
{{? $breakOnError }} |
|
if ({{# def.noPropertyInData }}) { |
|
{{=$nextValid}} = true; |
|
} else { |
|
{{??}} |
|
if ({{=$useData}} !== undefined |
|
{{? $ownProperties }} |
|
&& {{# def.isOwnProperty }} |
|
{{?}} |
|
) { |
|
{{?}} |
|
{{?}} |
|
|
|
{{= $code }} |
|
} |
|
{{?}} {{ /* $hasDefault */ }} |
|
{{?}} {{ /* def.nonEmptySchema */ }} |
|
|
|
{{# def.ifResultValid }} |
|
{{~}} |
|
{{?}} |
|
|
|
{{? $pPropertyKeys.length }} |
|
{{~ $pPropertyKeys:$pProperty }} |
|
{{ var $sch = $pProperties[$pProperty]; }} |
|
|
|
{{? {{# def.nonEmptySchema:$sch}} }} |
|
{{ |
|
$it.schema = $sch; |
|
$it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty); |
|
$it.errSchemaPath = it.errSchemaPath + '/patternProperties/' |
|
+ it.util.escapeFragment($pProperty); |
|
}} |
|
|
|
{{# def.iterateProperties }} |
|
if ({{= it.usePattern($pProperty) }}.test({{=$key}})) { |
|
{{ |
|
$it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers); |
|
var $passData = $data + '[' + $key + ']'; |
|
$it.dataPathArr[$dataNxt] = $key; |
|
}} |
|
|
|
{{# def.generateSubschemaCode }} |
|
{{# def.optimizeValidate }} |
|
|
|
{{? $breakOnError }} if (!{{=$nextValid}}) break; {{?}} |
|
} |
|
{{? $breakOnError }} else {{=$nextValid}} = true; {{?}} |
|
} |
|
|
|
{{# def.ifResultValid }} |
|
{{?}} {{ /* def.nonEmptySchema */ }} |
|
{{~}} |
|
{{?}} |
|
|
|
|
|
{{? $breakOnError }} |
|
{{= $closingBraces }} |
|
if ({{=$errs}} == errors) { |
|
{{?}}
|
|
|