245 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			245 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | {{# 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 }} |