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