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