192 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			192 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | {{# 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 { {{?}} | ||
|  | {{?}} |