mirror of
				https://github.com/1disk/edp445.git
				synced 2024-08-14 22:47:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			245 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			245 lines
		
	
	
	
		
			7.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| {{# 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) {
 | |
| {{?}}
 |