You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							372 lines
						
					
					
						
							12 KiB
						
					
					
				
			
		
		
	
	
							372 lines
						
					
					
						
							12 KiB
						
					
					
				{{# def.definitions }} | 
						|
{{# def.errors }} | 
						|
{{# def.setupKeyword }} | 
						|
 | 
						|
{{## def.em_errorMatch: | 
						|
  {{# def._em_commonErrorMatch }} | 
						|
  && ({{=$err}}.dataPath == {{=$dataPath}} || | 
						|
      ({{=$err}}.dataPath.indexOf({{=$dataPath}}) == 0 && | 
						|
       {{=$err}}.dataPath[{{=$dataPath}}.length] == '/')) | 
						|
  && {{=$err}}.schemaPath.indexOf({{=$errSchemaPathString}}) == 0 | 
						|
  && {{=$err}}.schemaPath[{{=it.errSchemaPath.length}}] == '/' | 
						|
#}} | 
						|
 | 
						|
{{## def.em_keywordErrorMatch: | 
						|
  {{# def._em_commonErrorMatch }} | 
						|
  && {{=$err}}.keyword in {{=$errors}} | 
						|
  && {{=$err}}.dataPath == {{=$dataPath}} | 
						|
  && {{=$err}}.schemaPath.indexOf({{=$errSchemaPathString}}) == 0 | 
						|
  && /^\/[^\/]*$/.test({{=$err}}.schemaPath.slice({{=it.errSchemaPath.length}})) | 
						|
#}} | 
						|
 | 
						|
{{## def.em_childErrorMatch: | 
						|
  {{# def._em_commonErrorMatch }} | 
						|
  && {{=$err}}.dataPath.indexOf({{=$dataPath}}) == 0 | 
						|
  && ({{=$matches}} = {{=$err}}.dataPath.slice({{=$dataPath}}.length).match(/^\/([^\/]*)(?:\/|$)/), | 
						|
      {{=$child}} = {{=$matches}} && {{=$matches}}[1].replace(/~1/g, '/').replace(/~0/g, '~') | 
						|
     ) !== undefined | 
						|
  && {{=$child}} in {{=$errors}} | 
						|
#}} | 
						|
 | 
						|
{{## def._em_commonErrorMatch: | 
						|
  {{=$err}}.keyword != '{{=$keyword}}' | 
						|
  {{? $config.options.keepErrors }} | 
						|
    && !{{=$err}}.emUsed | 
						|
  {{?}} | 
						|
#}} | 
						|
 | 
						|
{{## def.em_useError: | 
						|
  {{? $config.options.keepErrors }} | 
						|
    {{=$err}}.emUsed = true; | 
						|
  {{??}} | 
						|
    vErrors.splice({{=$i}}, 1); | 
						|
    errors--; | 
						|
  {{?}} | 
						|
#}} | 
						|
 | 
						|
{{## def.em_compileTemplates: _keysArray: | 
						|
  var {{=$templates}} = { | 
						|
    {{ var $comma = false; }} | 
						|
    {{~ _keysArray:$k }} | 
						|
      {{? INTERPOLATION.test($schema[$k]) }} | 
						|
        {{?$comma}},{{?}}{{= it.util.toQuotedString($k) }}: {{= templateFunc($schema[$k]) }} | 
						|
        {{ $comma = true; }} | 
						|
      {{?}} | 
						|
    {{~}} | 
						|
  }; | 
						|
#}} | 
						|
 | 
						|
{{## def.em_compilePropsTemplates: _keywordProps: | 
						|
  var {{=$templates}} = { | 
						|
    {{ var $comma = false; }} | 
						|
    {{~ Object.keys(_keywordProps):$k }} | 
						|
      {{ var $keywordMsgs = $schema[$k]; }} | 
						|
      {{?$comma}},{{?}}{{= it.util.toQuotedString($k) }}: { | 
						|
        {{ $comma = true; var $innerComma = false; }} | 
						|
        {{~ Object.keys($keywordMsgs):$prop }} | 
						|
          {{? INTERPOLATION.test($keywordMsgs[$prop]) }} | 
						|
            {{?$innerComma}},{{?}}{{= it.util.toQuotedString($prop) }}: {{= templateFunc($keywordMsgs[$prop]) }} | 
						|
            {{ $innerComma = true; }} | 
						|
          {{?}} | 
						|
        {{~}} | 
						|
      } | 
						|
    {{~}} | 
						|
  }; | 
						|
#}} | 
						|
 | 
						|
{{## def.em_compileChildTemplates: _children: | 
						|
  {{ var _keysArray = Object.keys($childErrors._children); }} | 
						|
  var {{=$templates}} = { | 
						|
    {{ var $comma = false; }} | 
						|
    {{~ _keysArray:$k }} | 
						|
      {{? INTERPOLATION.test($schema._children[$k]) }} | 
						|
        {{?$comma}},{{?}}{{= it.util.toQuotedString($k) }}: {{= templateFunc($schema._children[$k]) }} | 
						|
        {{ $comma = true; }} | 
						|
      {{?}} | 
						|
    {{~}} | 
						|
  }; | 
						|
#}} | 
						|
 | 
						|
{{## def.em_errorMessage: | 
						|
  {{=$key}} in {{=$templates}} | 
						|
  ? {{=$templates}}[{{=$key}}] () | 
						|
  : validate.schema{{=$schemaPath}}[{{=$key}}] | 
						|
#}} | 
						|
 | 
						|
{{## def.em_keywordError: | 
						|
  var err = { | 
						|
    keyword: '{{=$keyword}}' | 
						|
    , dataPath: {{=$dataPath}} | 
						|
    , schemaPath: {{=$errSchemaPathString}} + '/{{=$keyword}}' | 
						|
    , params: { errors: {{=$paramsErrors}} } | 
						|
    , message: {{=$message}} | 
						|
    {{? it.opts.verbose }} | 
						|
      , schema: validate.schema{{=$schemaPath}} | 
						|
      , parentSchema: validate.schema{{=it.schemaPath}} | 
						|
      , data: {{=$data}} | 
						|
    {{?}} | 
						|
  }; | 
						|
  {{# def._addError:'custom' }} | 
						|
#}} | 
						|
 | 
						|
 | 
						|
{{? it.createErrors !== false }} | 
						|
  {{ | 
						|
    var INTERPOLATION = /\$\{[^\}]+\}/; | 
						|
    var INTERPOLATION_REPLACE = /\$\{([^\}]+)\}/g; | 
						|
    var EMPTY_STR = /^\'\'\s*\+\s*|\s*\+\s*\'\'$/g; | 
						|
 | 
						|
    var $config = it.self.getKeyword($keyword).config | 
						|
      , $dataPath = '_em_dataPath' + $lvl | 
						|
      , $i = '_em_i' + $lvl | 
						|
      , $key = '_em_key' + $lvl | 
						|
      , $keyProp = '_em_keyProp' + $lvl | 
						|
      , $err = '_em_err' + $lvl | 
						|
      , $child = '_em_child' + $lvl | 
						|
      , $childKeyword = '_em_childKeyword' + $lvl | 
						|
      , $matches = '_em_matches' + $lvl | 
						|
      , $isArray = '_em_isArray' + $lvl | 
						|
      , $errors = '_em_errors' + $lvl | 
						|
      , $message = '_em_message' + $lvl | 
						|
      , $paramsErrors = '_em_paramsErrors' + $lvl | 
						|
      , $propParam = '_em_propParam' + $lvl | 
						|
      , $keywordPropParams = '_em_keywordPropParams' + $lvl | 
						|
      , $templates = '_em_templates' + $lvl | 
						|
      , $errSchemaPathString = it.util.toQuotedString(it.errSchemaPath); | 
						|
  }} | 
						|
 | 
						|
  if (errors > 0) { | 
						|
    var {{=$dataPath}} = (dataPath || '') + {{= it.errorPath }}; | 
						|
    var {{=$i}}, {{=$err}}, {{=$errors}}; | 
						|
 | 
						|
    {{? typeof $schema == 'object' }} | 
						|
      {{ | 
						|
        var $keywordErrors = {} | 
						|
          , $keywordPropErrors = {} | 
						|
          , $childErrors = { properties: {}, items: {} } | 
						|
          , $hasKeywordProps = false | 
						|
          , $hasProperties = false | 
						|
          , $hasItems = false; | 
						|
 | 
						|
        for (var $k in $schema) { | 
						|
          switch ($k) { | 
						|
            case 'properties': | 
						|
              for (var $prop in $schema.properties) { | 
						|
                $hasProperties = true; | 
						|
                $childErrors.properties[$prop] = []; | 
						|
              } | 
						|
              break; | 
						|
            case 'items': | 
						|
              for (var $item=0; $item<$schema.items.length; $item++) { | 
						|
                $hasItems = true; | 
						|
                $childErrors.items[$item] = []; | 
						|
              } | 
						|
              break; | 
						|
            default: | 
						|
              if (typeof $schema[$k] == 'object') { | 
						|
                $hasKeywordProps = true; | 
						|
                $keywordPropErrors[$k] = {}; | 
						|
                for (var $prop in $schema[$k]) { | 
						|
                  $keywordPropErrors[$k][$prop] = []; | 
						|
                } | 
						|
              } else { | 
						|
                $keywordErrors[$k] = []; | 
						|
              } | 
						|
          } | 
						|
        } | 
						|
      }} | 
						|
 | 
						|
      {{ var $keywordErrorsArr = Object.keys($keywordErrors); }} | 
						|
      {{? $keywordErrorsArr.length }} | 
						|
        {{=$i}} = 0; | 
						|
        {{=$errors}} = {{= JSON.stringify($keywordErrors) }}; | 
						|
        {{# def.em_compileTemplates:$keywordErrorsArr }} | 
						|
        while ({{=$i}} < errors) { | 
						|
          {{=$err}} = vErrors[{{=$i}}]; | 
						|
          if ({{# def.em_keywordErrorMatch}}) { | 
						|
            {{=$errors}}[{{=$err}}.keyword].push({{=$err}}); | 
						|
            {{# def.em_useError }} | 
						|
          } else { | 
						|
            {{=$i}}++; | 
						|
          } | 
						|
        } | 
						|
 | 
						|
        {{? $config.options.singleError }} | 
						|
          var {{=$message}} = ''; | 
						|
          var {{=$paramsErrors}} = []; | 
						|
        {{?}} | 
						|
 | 
						|
          for (var {{=$key}} in {{=$errors}}) { | 
						|
            if ({{=$errors}}[{{=$key}}].length) { | 
						|
 | 
						|
        {{? $config.options.singleError }} | 
						|
              if ({{=$message}}) { | 
						|
                {{=$message}} += {{? typeof $config.options.singleError == 'string' }} | 
						|
                  {{= it.util.toQuotedString($config.options.singleError) }} | 
						|
                {{??}} | 
						|
                  '; ' | 
						|
                {{?}}; | 
						|
              } | 
						|
              {{=$message}} += {{# def.em_errorMessage }}; | 
						|
              {{=$paramsErrors}} = {{=$paramsErrors}}.concat({{=$errors}}[{{=$key}}]); | 
						|
            } | 
						|
          } | 
						|
        {{??}} | 
						|
              var {{=$message}} = {{# def.em_errorMessage }}; | 
						|
              var {{=$paramsErrors}} = {{=$errors}}[{{=$key}}]; | 
						|
        {{?}} | 
						|
 | 
						|
              {{# def.em_keywordError}} | 
						|
 | 
						|
        {{? !$config.options.singleError }} | 
						|
            } | 
						|
          } | 
						|
        {{?}} | 
						|
      {{?}} /* $keywordErrorsArr */ | 
						|
 | 
						|
      {{? $hasKeywordProps }} | 
						|
        {{=$i}} = 0; | 
						|
        {{=$errors}} = {{= JSON.stringify($keywordPropErrors) }}; | 
						|
        var {{=$paramsErrors}}, {{=$propParam}}; | 
						|
        var {{=$keywordPropParams}} = {{= JSON.stringify($config.KEYWORD_PROPERTY_PARAMS) }}; | 
						|
        {{# def.em_compilePropsTemplates:$keywordPropErrors }} | 
						|
 | 
						|
        while ({{=$i}} < errors) { | 
						|
          {{=$err}} = vErrors[{{=$i}}]; | 
						|
          if ({{# def.em_keywordErrorMatch}}) { | 
						|
            {{=$propParam}} = {{=$keywordPropParams}}[{{=$err}}.keyword]; | 
						|
            {{=$paramsErrors}} = {{=$errors}}[{{=$err}}.keyword][{{=$err}}.params[{{=$propParam}}]]; | 
						|
            if ({{=$paramsErrors}}) { | 
						|
              {{=$paramsErrors}}.push({{=$err}}); | 
						|
              {{# def.em_useError }} | 
						|
            } else { | 
						|
              {{=$i}}++; | 
						|
            } | 
						|
          } else { | 
						|
            {{=$i}}++; | 
						|
          } | 
						|
        } | 
						|
 | 
						|
        for (var {{=$key}} in {{=$errors}}) { | 
						|
          for (var {{=$keyProp}} in {{=$errors}}[{{=$key}}]) { | 
						|
            {{=$paramsErrors}} = {{=$errors}}[{{=$key}}][{{=$keyProp}}]; | 
						|
            if ({{=$paramsErrors}}.length) { | 
						|
              var {{=$message}} =   {{=$key}} in {{=$templates}} && {{=$keyProp}} in {{=$templates}}[{{=$key}}] | 
						|
                                    ? {{=$templates}}[{{=$key}}][{{=$keyProp}}] () | 
						|
                                    : validate.schema{{=$schemaPath}}[{{=$key}}][{{=$keyProp}}]; | 
						|
              {{# def.em_keywordError}} | 
						|
            } | 
						|
          } | 
						|
        } | 
						|
      {{?}} /* $hasKeywordProps */ | 
						|
 | 
						|
      {{? $hasProperties || $hasItems }} | 
						|
        var {{=$isArray}} = Array.isArray({{=$data}}); | 
						|
        if | 
						|
          {{? $hasProperties && $hasItems }} | 
						|
            (typeof {{=$data}} == 'object') { | 
						|
              {{ var $childProp = '[' + $childKeyword + ']'; }} | 
						|
              {{=$i}} = 0; | 
						|
              if ({{=$isArray}}) { | 
						|
                var {{=$childKeyword}} = 'items'; | 
						|
                {{=$errors}} = {{= JSON.stringify($childErrors.items) }};  | 
						|
                {{# def.em_compileChildTemplates: items }} | 
						|
              } else { | 
						|
                var {{=$childKeyword}} = 'properties'; | 
						|
                {{=$errors}} =  {{= JSON.stringify($childErrors.properties) }};  | 
						|
                {{# def.em_compileChildTemplates: properties }} | 
						|
              } | 
						|
          {{?? $hasProperties }} | 
						|
            (typeof {{=$data}} == 'object' && !{{=$isArray}}) { | 
						|
              {{ var $childProp = '.properties'; }} | 
						|
              {{=$i}} = 0; | 
						|
              {{=$errors}} = {{= JSON.stringify($childErrors.properties) }}; | 
						|
              {{# def.em_compileChildTemplates: properties }} | 
						|
          {{??}} | 
						|
            ({{=$isArray}}) { | 
						|
              {{ var $childProp = '.items'; }} | 
						|
              {{=$i}} = 0; | 
						|
              {{=$errors}} = {{= JSON.stringify($childErrors.items) }}; | 
						|
              {{# def.em_compileChildTemplates: items }} | 
						|
          {{?}} | 
						|
 | 
						|
          var {{=$child}}, {{=$matches}}; | 
						|
          while ({{=$i}} < errors) { | 
						|
            {{=$err}} = vErrors[{{=$i}}]; | 
						|
            if ({{# def.em_childErrorMatch}}) { | 
						|
              {{=$errors}}[{{=$child}}].push({{=$err}}); | 
						|
              {{# def.em_useError }} | 
						|
            } else { | 
						|
              {{=$i}}++; | 
						|
            } | 
						|
          } | 
						|
          for (var {{=$key}} in {{=$errors}}) { | 
						|
            if ({{=$errors}}[{{=$key}}].length) { | 
						|
              var err = { | 
						|
                keyword: '{{=$keyword}}' | 
						|
                , dataPath: {{=$dataPath}} + '/' + {{=$key}}.replace(/~/g, '~0').replace(/\//g, '~1') | 
						|
                , schemaPath: {{=$errSchemaPathString}} + '/{{=$keyword}}' | 
						|
                , params: { errors: {{=$errors}}[{{=$key}}] } | 
						|
                , message: {{=$key}} in {{=$templates}} | 
						|
                            ? {{=$templates}}[{{=$key}}] () | 
						|
                            : validate.schema{{=$schemaPath}}{{=$childProp}}[{{=$key}}] | 
						|
                {{? it.opts.verbose }} | 
						|
                  , schema: validate.schema{{=$schemaPath}} | 
						|
                  , parentSchema: validate.schema{{=it.schemaPath}} | 
						|
                  , data: {{=$data}} | 
						|
                {{?}} | 
						|
              }; | 
						|
              {{# def._addError:'custom' }} | 
						|
            } | 
						|
          } /* for */ | 
						|
        } /* if */ | 
						|
      {{?}} /* $hasProperties || $hasItems */ | 
						|
    {{?}} /* $schema is object */ | 
						|
 | 
						|
    {{ var $schemaMessage = typeof $schema == 'string' ? $schema : $schema._; }} | 
						|
    {{? $schemaMessage }} | 
						|
      {{=$i}} = 0; | 
						|
      {{=$errors}} = []; | 
						|
      while ({{=$i}} < errors) { | 
						|
        {{=$err}} = vErrors[{{=$i}}]; | 
						|
        if ({{# def.em_errorMatch}}) { | 
						|
          {{=$errors}}.push({{=$err}}); | 
						|
          {{# def.em_useError }} | 
						|
        } else { | 
						|
          {{=$i}}++; | 
						|
        } | 
						|
      } | 
						|
      if ({{=$errors}}.length) { | 
						|
        var err = { | 
						|
          keyword: '{{=$keyword}}' | 
						|
          , dataPath: {{=$dataPath}} | 
						|
          , schemaPath: {{=$errSchemaPathString}} + '/{{=$keyword}}' | 
						|
          , params: { errors: {{=$errors}} } | 
						|
          , message: {{=templateExpr($schemaMessage)}} | 
						|
          {{? it.opts.verbose }} | 
						|
            , schema: {{=it.util.toQuotedString($schemaMessage)}} | 
						|
            , parentSchema: validate.schema{{=it.schemaPath}} | 
						|
            , data: {{=$data}} | 
						|
          {{?}} | 
						|
        }; | 
						|
        {{# def._addError:'custom' }} | 
						|
      } | 
						|
    {{?}} | 
						|
  } | 
						|
{{?}} | 
						|
 | 
						|
 | 
						|
{{ | 
						|
  function templateExpr(str) { | 
						|
    str = it.util.escapeQuotes(str); | 
						|
    if (!INTERPOLATION.test(str)) return "'" + str + "'"; | 
						|
    var expr = "'" + str.replace(INTERPOLATION_REPLACE, function ($0, $1) { | 
						|
      return "' + JSON.stringify(" + it.util.getData($1, $dataLvl, it.dataPathArr) + ") + '"; | 
						|
    }) + "'"; | 
						|
    return expr.replace(EMPTY_STR, ''); | 
						|
  } | 
						|
 | 
						|
  function templateFunc(str) { | 
						|
    return 'function() { return ' + templateExpr(str) + '; }'; | 
						|
  } | 
						|
}}
 | 
						|
 |