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