| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 | 
							- {{# 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) {
 
- {{?}}
 
 
  |