| {{# 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 || {}) |
| , $pProperties = it.schema.patternProperties || {} |
| , $pPropertyKeys = Object.keys($pProperties) |
| , $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); |
| }} |
| |
| |
| 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) { |
| {{?}} |
| |
| {{# def.cleanUp }} |