246 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			246 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 || {}).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) {
 | 
						|
{{?}}
 |