| {{# 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 { {{?}} |
| {{?}} |