123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- {{# 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.v5 && $required.$data) && $required.length < it.opts.loopRequired)
- var $requiredHash = it.util.toHash($required);
- if (it.opts.patternGroups) {
- var $pgProperties = it.schema.patternGroups || {}
- , $pgPropertyKeys = Object.keys($pgProperties);
- }
- }}
- var {{=$errs}} = errors;
- var {{=$nextValid}} = true;
- {{? $ownProperties }}
- var {{=$dataProperties}} = undefined;
- {{?}}
- {{? $checkAdditional }}
- {{# def.iterateProperties }}
- {{? $someProperties }}
- var isAdditional{{=$lvl}} = !(false
- {{? $schemaKeys.length }}
- {{? $schemaKeys.length > 5 }}
- || validate.schema{{=$schemaPath}}[{{=$key}}]
- {{??}}
- {{~ $schemaKeys:$propertyKey }}
- || {{=$key}} == {{= it.util.toQuotedString($propertyKey) }}
- {{~}}
- {{?}}
- {{?}}
- {{? $pPropertyKeys.length }}
- {{~ $pPropertyKeys:$pProperty:$i }}
- || {{= it.usePattern($pProperty) }}.test({{=$key}})
- {{~}}
- {{?}}
- {{? it.opts.patternGroups && $pgPropertyKeys.length }}
- {{~ $pgPropertyKeys:$pgProperty:$i }}
- || {{= it.usePattern($pgProperty) }}.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 */ }}
- {{~}}
- {{?}}
- {{? it.opts.patternGroups && $pgPropertyKeys.length }}
- {{~ $pgPropertyKeys:$pgProperty }}
- {{
- var $pgSchema = $pgProperties[$pgProperty]
- , $sch = $pgSchema.schema;
- }}
- {{? {{# def.nonEmptySchema:$sch}} }}
- {{
- $it.schema = $sch;
- $it.schemaPath = it.schemaPath + '.patternGroups' + it.util.getProperty($pgProperty) + '.schema';
- $it.errSchemaPath = it.errSchemaPath + '/patternGroups/'
- + it.util.escapeFragment($pgProperty)
- + '/schema';
- }}
- var pgPropCount{{=$lvl}} = 0;
- {{# def.iterateProperties }}
- if ({{= it.usePattern($pgProperty) }}.test({{=$key}})) {
- pgPropCount{{=$lvl}}++;
- {{
- $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 }}
- {{
- var $pgMin = $pgSchema.minimum
- , $pgMax = $pgSchema.maximum;
- }}
- {{? $pgMin !== undefined || $pgMax !== undefined }}
- var {{=$valid}} = true;
- {{ var $currErrSchemaPath = $errSchemaPath; }}
- {{? $pgMin !== undefined }}
- {{ var $limit = $pgMin, $reason = 'minimum', $moreOrLess = 'less'; }}
- {{=$valid}} = pgPropCount{{=$lvl}} >= {{=$pgMin}};
- {{ $errSchemaPath = it.errSchemaPath + '/patternGroups/minimum'; }}
- {{# def.checkError:'patternGroups' }}
- {{? $pgMax !== undefined }}
- else
- {{?}}
- {{?}}
- {{? $pgMax !== undefined }}
- {{ var $limit = $pgMax, $reason = 'maximum', $moreOrLess = 'more'; }}
- {{=$valid}} = pgPropCount{{=$lvl}} <= {{=$pgMax}};
- {{ $errSchemaPath = it.errSchemaPath + '/patternGroups/maximum'; }}
- {{# def.checkError:'patternGroups' }}
- {{?}}
- {{ $errSchemaPath = $currErrSchemaPath; }}
- {{# def.ifValid }}
- {{?}}
- {{?}} {{ /* def.nonEmptySchema */ }}
- {{~}}
- {{?}}
- {{? $breakOnError }}
- {{= $closingBraces }}
- if ({{=$errs}} == errors) {
- {{?}}
- {{# def.cleanUp }}
|