Spaces:
Sleeping
Sleeping
| {{# 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) + '; }'; | |
| } | |
| }} | |