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.
191 lines
4.8 KiB
191 lines
4.8 KiB
{{# def.definitions }} |
|
{{# def.errors }} |
|
{{# def.setupKeyword }} |
|
{{# def.$data }} |
|
|
|
{{ |
|
var $rule = this |
|
, $definition = 'definition' + $lvl |
|
, $rDef = $rule.definition |
|
, $closingBraces = ''; |
|
var $validate = $rDef.validate; |
|
var $compile, $inline, $macro, $ruleValidate, $validateCode; |
|
}} |
|
|
|
{{? $isData && $rDef.$data }} |
|
{{ |
|
$validateCode = 'keywordValidate' + $lvl; |
|
var $validateSchema = $rDef.validateSchema; |
|
}} |
|
var {{=$definition}} = RULES.custom['{{=$keyword}}'].definition; |
|
var {{=$validateCode}} = {{=$definition}}.validate; |
|
{{??}} |
|
{{ |
|
$ruleValidate = it.useCustomRule($rule, $schema, it.schema, it); |
|
if (!$ruleValidate) return; |
|
$schemaValue = 'validate.schema' + $schemaPath; |
|
$validateCode = $ruleValidate.code; |
|
$compile = $rDef.compile; |
|
$inline = $rDef.inline; |
|
$macro = $rDef.macro; |
|
}} |
|
{{?}} |
|
|
|
{{ |
|
var $ruleErrs = $validateCode + '.errors' |
|
, $i = 'i' + $lvl |
|
, $ruleErr = 'ruleErr' + $lvl |
|
, $asyncKeyword = $rDef.async; |
|
|
|
if ($asyncKeyword && !it.async) |
|
throw new Error('async keyword in sync schema'); |
|
}} |
|
|
|
|
|
{{? !($inline || $macro) }}{{=$ruleErrs}} = null;{{?}} |
|
var {{=$errs}} = errors; |
|
var {{=$valid}}; |
|
|
|
{{## def.callRuleValidate: |
|
{{=$validateCode}}.call( |
|
{{? it.opts.passContext }}this{{??}}self{{?}} |
|
{{? $compile || $rDef.schema === false }} |
|
, {{=$data}} |
|
{{??}} |
|
, {{=$schemaValue}} |
|
, {{=$data}} |
|
, validate.schema{{=it.schemaPath}} |
|
{{?}} |
|
, {{# def.dataPath }} |
|
{{# def.passParentData }} |
|
, rootData |
|
) |
|
#}} |
|
|
|
{{## def.extendErrors:_inline: |
|
for (var {{=$i}}={{=$errs}}; {{=$i}}<errors; {{=$i}}++) { |
|
var {{=$ruleErr}} = vErrors[{{=$i}}]; |
|
if ({{=$ruleErr}}.dataPath === undefined) |
|
{{=$ruleErr}}.dataPath = (dataPath || '') + {{= it.errorPath }}; |
|
{{# _inline ? 'if (\{\{=$ruleErr\}\}.schemaPath === undefined) {' : '' }} |
|
{{=$ruleErr}}.schemaPath = "{{=$errSchemaPath}}"; |
|
{{# _inline ? '}' : '' }} |
|
{{? it.opts.verbose }} |
|
{{=$ruleErr}}.schema = {{=$schemaValue}}; |
|
{{=$ruleErr}}.data = {{=$data}}; |
|
{{?}} |
|
} |
|
#}} |
|
|
|
|
|
{{? $isData && $rDef.$data }} |
|
{{ $closingBraces += '}'; }} |
|
if ({{=$schemaValue}} === undefined) { |
|
{{=$valid}} = true; |
|
} else { |
|
{{? $validateSchema }} |
|
{{ $closingBraces += '}'; }} |
|
{{=$valid}} = {{=$definition}}.validateSchema({{=$schemaValue}}); |
|
if ({{=$valid}}) { |
|
{{?}} |
|
{{?}} |
|
|
|
{{? $inline }} |
|
{{? $rDef.statements }} |
|
{{= $ruleValidate.validate }} |
|
{{??}} |
|
{{=$valid}} = {{= $ruleValidate.validate }}; |
|
{{?}} |
|
{{?? $macro }} |
|
{{# def.setupNextLevel }} |
|
{{ |
|
$it.schema = $ruleValidate.validate; |
|
$it.schemaPath = ''; |
|
}} |
|
{{# def.setCompositeRule }} |
|
{{ var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); }} |
|
{{# def.resetCompositeRule }} |
|
{{= $code }} |
|
{{??}} |
|
{{# def.beginDefOut}} |
|
{{# def.callRuleValidate }} |
|
{{# def.storeDefOut:def_callRuleValidate }} |
|
|
|
{{? $rDef.errors === false }} |
|
{{=$valid}} = {{? $asyncKeyword }}await {{?}}{{= def_callRuleValidate }}; |
|
{{??}} |
|
{{? $asyncKeyword }} |
|
{{ $ruleErrs = 'customErrors' + $lvl; }} |
|
var {{=$ruleErrs}} = null; |
|
try { |
|
{{=$valid}} = await {{= def_callRuleValidate }}; |
|
} catch (e) { |
|
{{=$valid}} = false; |
|
if (e instanceof ValidationError) {{=$ruleErrs}} = e.errors; |
|
else throw e; |
|
} |
|
{{??}} |
|
{{=$ruleErrs}} = null; |
|
{{=$valid}} = {{= def_callRuleValidate }}; |
|
{{?}} |
|
{{?}} |
|
{{?}} |
|
|
|
{{? $rDef.modifying }} |
|
if ({{=$parentData}}) {{=$data}} = {{=$parentData}}[{{=$parentDataProperty}}]; |
|
{{?}} |
|
|
|
{{= $closingBraces }} |
|
|
|
{{## def.notValidationResult: |
|
{{? $rDef.valid === undefined }} |
|
!{{? $macro }}{{=$nextValid}}{{??}}{{=$valid}}{{?}} |
|
{{??}} |
|
{{= !$rDef.valid }} |
|
{{?}} |
|
#}} |
|
|
|
{{? $rDef.valid }} |
|
{{? $breakOnError }} if (true) { {{?}} |
|
{{??}} |
|
if ({{# def.notValidationResult }}) { |
|
{{ $errorKeyword = $rule.keyword; }} |
|
{{# def.beginDefOut}} |
|
{{# def.error:'custom' }} |
|
{{# def.storeDefOut:def_customError }} |
|
|
|
{{? $inline }} |
|
{{? $rDef.errors }} |
|
{{? $rDef.errors != 'full' }} |
|
{{# def.extendErrors:true }} |
|
{{?}} |
|
{{??}} |
|
{{? $rDef.errors === false}} |
|
{{= def_customError }} |
|
{{??}} |
|
if ({{=$errs}} == errors) { |
|
{{= def_customError }} |
|
} else { |
|
{{# def.extendErrors:true }} |
|
} |
|
{{?}} |
|
{{?}} |
|
{{?? $macro }} |
|
{{# def.extraError:'custom' }} |
|
{{??}} |
|
{{? $rDef.errors === false}} |
|
{{= def_customError }} |
|
{{??}} |
|
if (Array.isArray({{=$ruleErrs}})) { |
|
if (vErrors === null) vErrors = {{=$ruleErrs}}; |
|
else vErrors = vErrors.concat({{=$ruleErrs}}); |
|
errors = vErrors.length; |
|
{{# def.extendErrors:false }} |
|
} else { |
|
{{= def_customError }} |
|
} |
|
{{?}} |
|
{{?}} |
|
|
|
} {{? $breakOnError }} else { {{?}} |
|
{{?}}
|
|
|