1
|
{{# def.definitions }}
|
2
|
{{# def.errors }}
|
3
|
{{# def.setupKeyword }}
|
4
|
{{# def.$data }}
|
5
|
|
6
|
{{
|
7
|
var $rule = this
|
8
|
, $definition = 'definition' + $lvl
|
9
|
, $rDef = $rule.definition
|
10
|
, $closingBraces = '';
|
11
|
var $validate = $rDef.validate;
|
12
|
var $compile, $inline, $macro, $ruleValidate, $validateCode;
|
13
|
}}
|
14
|
|
15
|
{{? $isData && $rDef.$data }}
|
16
|
{{
|
17
|
$validateCode = 'keywordValidate' + $lvl;
|
18
|
var $validateSchema = $rDef.validateSchema;
|
19
|
}}
|
20
|
var {{=$definition}} = RULES.custom['{{=$keyword}}'].definition;
|
21
|
var {{=$validateCode}} = {{=$definition}}.validate;
|
22
|
{{??}}
|
23
|
{{
|
24
|
$ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);
|
25
|
if (!$ruleValidate) return;
|
26
|
$schemaValue = 'validate.schema' + $schemaPath;
|
27
|
$validateCode = $ruleValidate.code;
|
28
|
$compile = $rDef.compile;
|
29
|
$inline = $rDef.inline;
|
30
|
$macro = $rDef.macro;
|
31
|
}}
|
32
|
{{?}}
|
33
|
|
34
|
{{
|
35
|
var $ruleErrs = $validateCode + '.errors'
|
36
|
, $i = 'i' + $lvl
|
37
|
, $ruleErr = 'ruleErr' + $lvl
|
38
|
, $asyncKeyword = $rDef.async;
|
39
|
|
40
|
if ($asyncKeyword && !it.async)
|
41
|
throw new Error('async keyword in sync schema');
|
42
|
}}
|
43
|
|
44
|
|
45
|
{{? !($inline || $macro) }}{{=$ruleErrs}} = null;{{?}}
|
46
|
var {{=$errs}} = errors;
|
47
|
var {{=$valid}};
|
48
|
|
49
|
{{## def.callRuleValidate:
|
50
|
{{=$validateCode}}.call(
|
51
|
{{? it.opts.passContext }}this{{??}}self{{?}}
|
52
|
{{? $compile || $rDef.schema === false }}
|
53
|
, {{=$data}}
|
54
|
{{??}}
|
55
|
, {{=$schemaValue}}
|
56
|
, {{=$data}}
|
57
|
, validate.schema{{=it.schemaPath}}
|
58
|
{{?}}
|
59
|
, {{# def.dataPath }}
|
60
|
{{# def.passParentData }}
|
61
|
, rootData
|
62
|
)
|
63
|
#}}
|
64
|
|
65
|
{{## def.extendErrors:_inline:
|
66
|
for (var {{=$i}}={{=$errs}}; {{=$i}}<errors; {{=$i}}++) {
|
67
|
var {{=$ruleErr}} = vErrors[{{=$i}}];
|
68
|
if ({{=$ruleErr}}.dataPath === undefined)
|
69
|
{{=$ruleErr}}.dataPath = (dataPath || '') + {{= it.errorPath }};
|
70
|
{{# _inline ? 'if (\{\{=$ruleErr\}\}.schemaPath === undefined) {' : '' }}
|
71
|
{{=$ruleErr}}.schemaPath = "{{=$errSchemaPath}}";
|
72
|
{{# _inline ? '}' : '' }}
|
73
|
{{? it.opts.verbose }}
|
74
|
{{=$ruleErr}}.schema = {{=$schemaValue}};
|
75
|
{{=$ruleErr}}.data = {{=$data}};
|
76
|
{{?}}
|
77
|
}
|
78
|
#}}
|
79
|
|
80
|
|
81
|
{{? $isData && $rDef.$data }}
|
82
|
{{ $closingBraces += '}'; }}
|
83
|
if ({{=$schemaValue}} === undefined) {
|
84
|
{{=$valid}} = true;
|
85
|
} else {
|
86
|
{{? $validateSchema }}
|
87
|
{{ $closingBraces += '}'; }}
|
88
|
{{=$valid}} = {{=$definition}}.validateSchema({{=$schemaValue}});
|
89
|
if ({{=$valid}}) {
|
90
|
{{?}}
|
91
|
{{?}}
|
92
|
|
93
|
{{? $inline }}
|
94
|
{{? $rDef.statements }}
|
95
|
{{= $ruleValidate.validate }}
|
96
|
{{??}}
|
97
|
{{=$valid}} = {{= $ruleValidate.validate }};
|
98
|
{{?}}
|
99
|
{{?? $macro }}
|
100
|
{{# def.setupNextLevel }}
|
101
|
{{
|
102
|
$it.schema = $ruleValidate.validate;
|
103
|
$it.schemaPath = '';
|
104
|
}}
|
105
|
{{# def.setCompositeRule }}
|
106
|
{{ var $code = it.validate($it).replace(/validate\.schema/g, $validateCode); }}
|
107
|
{{# def.resetCompositeRule }}
|
108
|
{{= $code }}
|
109
|
{{??}}
|
110
|
{{# def.beginDefOut}}
|
111
|
{{# def.callRuleValidate }}
|
112
|
{{# def.storeDefOut:def_callRuleValidate }}
|
113
|
|
114
|
{{? $rDef.errors === false }}
|
115
|
{{=$valid}} = {{? $asyncKeyword }}await {{?}}{{= def_callRuleValidate }};
|
116
|
{{??}}
|
117
|
{{? $asyncKeyword }}
|
118
|
{{ $ruleErrs = 'customErrors' + $lvl; }}
|
119
|
var {{=$ruleErrs}} = null;
|
120
|
try {
|
121
|
{{=$valid}} = await {{= def_callRuleValidate }};
|
122
|
} catch (e) {
|
123
|
{{=$valid}} = false;
|
124
|
if (e instanceof ValidationError) {{=$ruleErrs}} = e.errors;
|
125
|
else throw e;
|
126
|
}
|
127
|
{{??}}
|
128
|
{{=$ruleErrs}} = null;
|
129
|
{{=$valid}} = {{= def_callRuleValidate }};
|
130
|
{{?}}
|
131
|
{{?}}
|
132
|
{{?}}
|
133
|
|
134
|
{{? $rDef.modifying }}
|
135
|
if ({{=$parentData}}) {{=$data}} = {{=$parentData}}[{{=$parentDataProperty}}];
|
136
|
{{?}}
|
137
|
|
138
|
{{= $closingBraces }}
|
139
|
|
140
|
{{## def.notValidationResult:
|
141
|
{{? $rDef.valid === undefined }}
|
142
|
!{{? $macro }}{{=$nextValid}}{{??}}{{=$valid}}{{?}}
|
143
|
{{??}}
|
144
|
{{= !$rDef.valid }}
|
145
|
{{?}}
|
146
|
#}}
|
147
|
|
148
|
{{? $rDef.valid }}
|
149
|
{{? $breakOnError }} if (true) { {{?}}
|
150
|
{{??}}
|
151
|
if ({{# def.notValidationResult }}) {
|
152
|
{{ $errorKeyword = $rule.keyword; }}
|
153
|
{{# def.beginDefOut}}
|
154
|
{{# def.error:'custom' }}
|
155
|
{{# def.storeDefOut:def_customError }}
|
156
|
|
157
|
{{? $inline }}
|
158
|
{{? $rDef.errors }}
|
159
|
{{? $rDef.errors != 'full' }}
|
160
|
{{# def.extendErrors:true }}
|
161
|
{{?}}
|
162
|
{{??}}
|
163
|
{{? $rDef.errors === false}}
|
164
|
{{= def_customError }}
|
165
|
{{??}}
|
166
|
if ({{=$errs}} == errors) {
|
167
|
{{= def_customError }}
|
168
|
} else {
|
169
|
{{# def.extendErrors:true }}
|
170
|
}
|
171
|
{{?}}
|
172
|
{{?}}
|
173
|
{{?? $macro }}
|
174
|
{{# def.extraError:'custom' }}
|
175
|
{{??}}
|
176
|
{{? $rDef.errors === false}}
|
177
|
{{= def_customError }}
|
178
|
{{??}}
|
179
|
if (Array.isArray({{=$ruleErrs}})) {
|
180
|
if (vErrors === null) vErrors = {{=$ruleErrs}};
|
181
|
else vErrors = vErrors.concat({{=$ruleErrs}});
|
182
|
errors = vErrors.length;
|
183
|
{{# def.extendErrors:false }}
|
184
|
} else {
|
185
|
{{= def_customError }}
|
186
|
}
|
187
|
{{?}}
|
188
|
{{?}}
|
189
|
|
190
|
} {{? $breakOnError }} else { {{?}}
|
191
|
{{?}}
|