| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 | {{# 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) + '; }';  }}}
 |