@zipbul/baker 5.1.0 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +84 -0
- package/dist/index.d.ts +11 -9
- package/dist/index.js +1 -1
- package/dist/src/baker.d.ts +8 -9
- package/dist/src/baker.js +1 -1
- package/dist/src/common/enums.d.ts +10 -0
- package/dist/src/common/enums.js +1 -0
- package/dist/src/common/index.d.ts +6 -0
- package/dist/src/common/index.js +1 -0
- package/dist/src/common/interfaces.d.ts +4 -0
- package/dist/src/common/types.d.ts +2 -0
- package/dist/src/config/config-normalizer.d.ts +7 -0
- package/dist/src/config/config-normalizer.js +1 -0
- package/dist/src/config/constants.d.ts +6 -0
- package/dist/src/config/constants.js +1 -0
- package/dist/src/config/index.d.ts +3 -0
- package/dist/src/config/index.js +1 -0
- package/dist/src/{configure.d.ts → config/interfaces.d.ts} +1 -8
- package/dist/src/config/interfaces.js +0 -0
- package/dist/src/decorators/constants.d.ts +2 -0
- package/dist/src/decorators/constants.js +1 -0
- package/dist/src/decorators/enums.d.ts +5 -0
- package/dist/src/decorators/enums.js +1 -0
- package/dist/src/decorators/field.d.ts +3 -54
- package/dist/src/decorators/field.js +1 -1
- package/dist/src/decorators/index.d.ts +2 -2
- package/dist/src/decorators/index.js +1 -1
- package/dist/src/decorators/interfaces.d.ts +50 -0
- package/dist/src/decorators/interfaces.js +0 -0
- package/dist/src/decorators/public.d.ts +2 -0
- package/dist/src/decorators/public.js +1 -0
- package/dist/src/decorators/types.d.ts +6 -0
- package/dist/src/decorators/types.js +0 -0
- package/dist/src/metadata/enums.d.ts +5 -0
- package/dist/src/metadata/enums.js +1 -0
- package/dist/src/metadata/index.d.ts +3 -0
- package/dist/src/metadata/index.js +1 -0
- package/dist/src/metadata/interfaces.d.ts +90 -0
- package/dist/src/metadata/interfaces.js +0 -0
- package/dist/src/metadata/meta-store.d.ts +49 -0
- package/dist/src/metadata/meta-store.js +1 -0
- package/dist/src/metadata/types.d.ts +10 -0
- package/dist/src/metadata/types.js +0 -0
- package/dist/src/rules/array.d.ts +2 -2
- package/dist/src/rules/array.js +1 -1
- package/dist/src/rules/binary.d.ts +2 -2
- package/dist/src/rules/binary.js +1 -1
- package/dist/src/rules/combinators.d.ts +1 -1
- package/dist/src/rules/combinators.js +1 -1
- package/dist/src/rules/common.d.ts +3 -3
- package/dist/src/rules/common.js +1 -1
- package/dist/src/rules/constants.d.ts +10 -0
- package/dist/src/rules/constants.js +1 -0
- package/dist/src/{create-rule.d.ts → rules/create-rule.d.ts} +1 -1
- package/dist/src/rules/create-rule.js +1 -0
- package/dist/src/rules/date.d.ts +1 -1
- package/dist/src/rules/date.js +1 -1
- package/dist/src/{enums.d.ts → rules/enums.d.ts} +0 -20
- package/dist/src/rules/enums.js +1 -0
- package/dist/src/rules/index.d.ts +5 -13
- package/dist/src/rules/index.js +1 -1
- package/dist/src/rules/interfaces.d.ts +43 -0
- package/dist/src/rules/interfaces.js +0 -0
- package/dist/src/rules/locales.d.ts +1 -1
- package/dist/src/rules/locales.js +1 -1
- package/dist/src/rules/number.d.ts +3 -3
- package/dist/src/rules/number.js +1 -1
- package/dist/src/rules/object.d.ts +1 -1
- package/dist/src/rules/object.js +1 -1
- package/dist/src/rules/public.d.ts +14 -0
- package/dist/src/rules/public.js +1 -0
- package/dist/src/{rule-metadata.d.ts → rules/rule-metadata.d.ts} +1 -1
- package/dist/src/{rule-metadata.js → rules/rule-metadata.js} +1 -1
- package/dist/src/{rule-plan.d.ts → rules/rule-plan.d.ts} +4 -7
- package/dist/src/rules/rule-plan.js +1 -0
- package/dist/src/rules/string-basic.d.ts +23 -0
- package/dist/src/rules/string-basic.js +1 -0
- package/dist/src/rules/string-crypto.d.ts +5 -0
- package/dist/src/rules/string-crypto.js +1 -0
- package/dist/src/rules/string-datetime.d.ts +3 -0
- package/dist/src/rules/string-datetime.js +1 -0
- package/dist/src/rules/string-encoding.d.ts +14 -0
- package/dist/src/rules/string-encoding.js +1 -0
- package/dist/src/rules/string-finance.d.ts +18 -0
- package/dist/src/rules/string-finance.js +10 -0
- package/dist/src/rules/string-format.d.ts +38 -0
- package/dist/src/rules/string-format.js +1 -0
- package/dist/src/rules/string-geo.d.ts +5 -0
- package/dist/src/rules/string-geo.js +1 -0
- package/dist/src/rules/string-identifier.d.ts +16 -0
- package/dist/src/rules/string-identifier.js +3 -0
- package/dist/src/rules/string-shared.d.ts +3 -0
- package/dist/src/rules/string-shared.js +1 -0
- package/dist/src/rules/string-width.d.ts +6 -0
- package/dist/src/rules/string-width.js +1 -0
- package/dist/src/rules/string.d.ts +14 -110
- package/dist/src/rules/string.js +1 -12
- package/dist/src/rules/typechecker.d.ts +10 -10
- package/dist/src/rules/typechecker.js +5 -5
- package/dist/src/rules/types.d.ts +26 -0
- package/dist/src/rules/types.js +0 -0
- package/dist/src/{functions → runtime}/check-call-options.d.ts +1 -1
- package/dist/src/runtime/check-call-options.js +1 -0
- package/dist/src/runtime/constants.d.ts +3 -0
- package/dist/src/runtime/constants.js +1 -0
- package/dist/src/{functions → runtime}/deserialize.d.ts +2 -3
- package/dist/src/runtime/deserialize.js +1 -0
- package/dist/src/runtime/index.d.ts +3 -0
- package/dist/src/runtime/index.js +1 -0
- package/dist/src/{functions → runtime}/serialize.d.ts +2 -2
- package/dist/src/runtime/serialize.js +1 -0
- package/dist/src/{functions → runtime}/validate.d.ts +2 -3
- package/dist/src/runtime/validate.js +1 -0
- package/dist/src/seal/async-analyzer.d.ts +20 -0
- package/dist/src/seal/async-analyzer.js +1 -0
- package/dist/src/seal/circular-analyzer.d.ts +9 -6
- package/dist/src/seal/circular-analyzer.js +1 -1
- package/dist/src/seal/circular-placeholder.d.ts +20 -0
- package/dist/src/seal/circular-placeholder.js +1 -0
- package/dist/src/seal/codegen-utils.d.ts +15 -0
- package/dist/src/seal/codegen-utils.js +1 -1
- package/dist/src/seal/compile-cache.d.ts +38 -0
- package/dist/src/seal/compile-cache.js +1 -0
- package/dist/src/seal/constants.d.ts +62 -0
- package/dist/src/seal/constants.js +1 -0
- package/dist/src/seal/deserialize-builder.d.ts +3 -6
- package/dist/src/seal/deserialize-builder.js +200 -263
- package/dist/src/seal/deserialize-codegen.d.ts +58 -0
- package/dist/src/seal/deserialize-codegen.js +64 -0
- package/dist/src/seal/enums.d.ts +1 -2
- package/dist/src/seal/enums.js +1 -1
- package/dist/src/seal/expose-validator.d.ts +2 -2
- package/dist/src/seal/expose-validator.js +1 -1
- package/dist/src/seal/index.d.ts +3 -0
- package/dist/src/seal/index.js +1 -0
- package/dist/src/seal/inheritance-merger.d.ts +18 -0
- package/dist/src/seal/inheritance-merger.js +1 -0
- package/dist/src/seal/interfaces.d.ts +89 -0
- package/dist/src/seal/interfaces.js +0 -0
- package/dist/src/seal/meta-validator.d.ts +16 -0
- package/dist/src/seal/meta-validator.js +1 -0
- package/dist/src/seal/seal.d.ts +4 -28
- package/dist/src/seal/seal.js +1 -1
- package/dist/src/seal/serialize-builder.d.ts +5 -3
- package/dist/src/seal/serialize-builder.js +64 -64
- package/dist/src/seal/type-normalizer.d.ts +9 -0
- package/dist/src/seal/type-normalizer.js +1 -0
- package/dist/src/seal/type-resolver.d.ts +2 -0
- package/dist/src/seal/type-resolver.js +1 -0
- package/dist/src/seal/types.d.ts +6 -0
- package/dist/src/seal/types.js +0 -0
- package/dist/src/transformers/{collection.transformer.d.ts → collection.d.ts} +1 -1
- package/dist/src/transformers/constants.d.ts +2 -0
- package/dist/src/transformers/constants.js +1 -0
- package/dist/src/transformers/{date.transformer.d.ts → date.d.ts} +1 -1
- package/dist/src/transformers/date.js +1 -0
- package/dist/src/transformers/index.d.ts +3 -8
- package/dist/src/transformers/index.js +1 -1
- package/dist/src/transformers/interfaces.d.ts +26 -0
- package/dist/src/transformers/interfaces.js +0 -0
- package/dist/src/transformers/luxon.d.ts +3 -0
- package/dist/src/transformers/luxon.js +1 -0
- package/dist/src/transformers/moment.d.ts +3 -0
- package/dist/src/transformers/moment.js +1 -0
- package/dist/src/transformers/{number.transformer.d.ts → number.d.ts} +1 -1
- package/dist/src/transformers/public.d.ts +7 -0
- package/dist/src/transformers/public.js +1 -0
- package/dist/src/transformers/{string.transformer.d.ts → string.d.ts} +1 -1
- package/dist/src/transformers/types.d.ts +3 -0
- package/dist/src/transformers/types.js +0 -0
- package/package.json +7 -7
- package/dist/src/collect.d.ts +0 -15
- package/dist/src/collect.js +0 -1
- package/dist/src/configure.js +0 -1
- package/dist/src/create-rule.js +0 -1
- package/dist/src/enums.js +0 -1
- package/dist/src/functions/check-call-options.js +0 -1
- package/dist/src/functions/deserialize.js +0 -1
- package/dist/src/functions/serialize.js +0 -1
- package/dist/src/functions/validate.js +0 -1
- package/dist/src/interfaces.d.ts +0 -32
- package/dist/src/meta-access.d.ts +0 -12
- package/dist/src/meta-access.js +0 -1
- package/dist/src/rule-plan.js +0 -1
- package/dist/src/seal/validate-meta.d.ts +0 -13
- package/dist/src/seal/validate-meta.js +0 -1
- package/dist/src/transformers/date.transformer.js +0 -1
- package/dist/src/transformers/luxon.transformer.d.ts +0 -8
- package/dist/src/transformers/luxon.transformer.js +0 -1
- package/dist/src/transformers/moment.transformer.d.ts +0 -7
- package/dist/src/transformers/moment.transformer.js +0 -1
- package/dist/src/types.d.ts +0 -177
- /package/dist/src/{errors.d.ts → common/errors.d.ts} +0 -0
- /package/dist/src/{errors.js → common/errors.js} +0 -0
- /package/dist/src/{interfaces.js → common/interfaces.js} +0 -0
- /package/dist/src/{types.js → common/types.js} +0 -0
- /package/dist/src/{utils.d.ts → common/utils.d.ts} +0 -0
- /package/dist/src/{utils.js → common/utils.js} +0 -0
- /package/dist/src/transformers/{collection.transformer.js → collection.js} +0 -0
- /package/dist/src/transformers/{number.transformer.js → number.js} +0 -0
- /package/dist/src/transformers/{string.transformer.js → string.js} +0 -0
|
@@ -1,265 +1,202 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if(${_}.message!==undefined)${$}.message=${_}.message;
|
|
5
|
-
if(${_}.context!==undefined)${$}.context=${_}.context;
|
|
6
|
-
${Z}.push(${$});}
|
|
7
|
-
`}function E(Z,W,Y,$){const _=(L)=>$?`return ${L};
|
|
8
|
-
`:`return err(${L});
|
|
9
|
-
`;return`if(${W}.message===undefined&&${W}.context===undefined)${_(`[{path:${Z},code:${W}.code}]`)} var ${Y}={path:${Z},code:${W}.code};
|
|
10
|
-
if(${W}.message!==undefined)${Y}.message=${W}.message;
|
|
11
|
-
if(${W}.context!==undefined)${Y}.context=${W}.context;
|
|
12
|
-
${_(`[${Y}]`)}`}function e(Z,W){return X.field+(W||"")+b(Z)}function o(Z,W){const Y=W.find((_)=>_.deserializeOnly&&_.name);if(Y)return Y.name;const $=W.find((_)=>!_.deserializeOnly&&!_.serializeOnly&&_.name);if($)return $.name;return Z}function l(Z){let W=null;for(const Y of Z){if(Y.serializeOnly)continue;if(!Y.groups||Y.groups.length===0)return;if(W===null)W=new Set;for(const $ of Y.groups)W.add($)}return W===null?void 0:[...W]}function buildDeserializeCode(Z,W,Y,$,_,L,z=!1){const Q=Y?.stopAtFirstError??!1,q=!Q,j=Y?.exposeDefaultValues??!1,F=[],H=[],D=[],B=z?(w)=>w:(w)=>`err(${w})`;let U=`'use strict';
|
|
13
|
-
`;if(z){if(j)U+=`var __bk$defs = new _Cls();
|
|
14
|
-
`}else U+=j?`var ${X.out} = new _Cls();
|
|
1
|
+
class K{Class;merged;options;needsCircularCheck;isAsync;resolve;stopAtFirstError;collectErrors;exposeDefaultValues;validateOnly;regexes;refs;execs;inlineCounter;inlineNestedClasses;pathPrefix;varPrefix;inputExpr;constructor(W,q,$,F,H,j,U,Q){this.Class=W;this.merged=q;this.options=$;this.needsCircularCheck=F;this.isAsync=H;this.resolve=j;this.validateOnly=U;this.stopAtFirstError=$?.stopAtFirstError??!1;this.collectErrors=!this.stopAtFirstError;if(Q){this.exposeDefaultValues=!1;this.regexes=Q.regexes;this.refs=Q.refs;this.execs=Q.execs;this.inlineCounter=Q.inlineCounter;if(Q.inlineNestedClasses)this.inlineNestedClasses=Q.inlineNestedClasses;this.pathPrefix=Q.pathPrefix;this.varPrefix=Q.varPrefix;this.inputExpr=Q.inputExpr}else{this.exposeDefaultValues=$?.exposeDefaultValues??!1;this.regexes=[];this.refs=[];this.execs=[];this.inlineCounter={n:0}}}createChild(W,q,$){return new K(this.Class,this.merged,this.options,this.needsCircularCheck,this.isAsync,this.resolve,this.validateOnly,{regexes:this.regexes,refs:this.refs,execs:this.execs,inlineCounter:this.inlineCounter,inlineNestedClasses:this.inlineNestedClasses,pathPrefix:W,varPrefix:q,inputExpr:$})}build(){const{validateOnly:W,exposeDefaultValues:q,collectErrors:$,needsCircularCheck:F,isAsync:H,merged:j,options:U,Class:Q}=this,{regexes:_,refs:B,execs:M}=this,z=W?(D)=>D:(D)=>`err(${D})`;let Z=`'use strict';
|
|
2
|
+
`;if(W){if(q)Z+=`var __bk$defs = new _Cls();
|
|
3
|
+
`}else Z+=q?`var ${X.out} = new _Cls();
|
|
15
4
|
`:`var ${X.out} = Object.create(_Cls.prototype);
|
|
16
|
-
`;if(
|
|
17
|
-
`;
|
|
18
|
-
`;if(
|
|
19
|
-
`;
|
|
20
|
-
`;
|
|
21
|
-
`;
|
|
22
|
-
`;
|
|
23
|
-
`}if(
|
|
24
|
-
`;else
|
|
25
|
-
`}let
|
|
26
|
-
`;
|
|
27
|
-
`;
|
|
28
|
-
`}for(const[
|
|
29
|
-
`;
|
|
30
|
-
`;if(
|
|
31
|
-
`;const
|
|
32
|
-
`;const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
`;
|
|
37
|
-
`;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
`;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
`}
|
|
56
|
-
`}
|
|
57
|
-
`;
|
|
58
|
-
`;if(
|
|
59
|
-
`;
|
|
60
|
-
|
|
61
|
-
`}
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
`}
|
|
65
|
-
`;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
`;
|
|
73
|
-
`;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
`}
|
|
80
|
-
`;
|
|
81
|
-
`;
|
|
82
|
-
`;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
`;
|
|
86
|
-
`;
|
|
87
|
-
|
|
88
|
-
`;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
`;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
`;
|
|
95
|
-
`;
|
|
96
|
-
`;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
`,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
`;if(
|
|
105
|
-
`;
|
|
106
|
-
`;
|
|
107
|
-
`;
|
|
108
|
-
`;Q
|
|
109
|
-
`;
|
|
110
|
-
`;
|
|
111
|
-
`;
|
|
112
|
-
`;
|
|
113
|
-
`;
|
|
114
|
-
`;
|
|
115
|
-
`;
|
|
116
|
-
`;
|
|
117
|
-
`;
|
|
118
|
-
`}
|
|
119
|
-
|
|
120
|
-
`;
|
|
121
|
-
`;
|
|
122
|
-
`;
|
|
123
|
-
|
|
124
|
-
`;
|
|
125
|
-
`;
|
|
126
|
-
`;
|
|
127
|
-
|
|
128
|
-
`;
|
|
129
|
-
`}
|
|
130
|
-
|
|
131
|
-
`;
|
|
132
|
-
`;
|
|
133
|
-
`;
|
|
134
|
-
`;
|
|
135
|
-
`;
|
|
136
|
-
`;
|
|
137
|
-
`;
|
|
138
|
-
`;
|
|
139
|
-
`;
|
|
140
|
-
`;
|
|
141
|
-
`}
|
|
142
|
-
`;
|
|
143
|
-
`;
|
|
144
|
-
`;
|
|
145
|
-
`;
|
|
146
|
-
`}else{const
|
|
147
|
-
`;
|
|
148
|
-
`;
|
|
149
|
-
`;
|
|
150
|
-
`;
|
|
151
|
-
`;
|
|
152
|
-
`;
|
|
153
|
-
`}
|
|
154
|
-
|
|
155
|
-
`;
|
|
156
|
-
|
|
157
|
-
`;
|
|
158
|
-
`;
|
|
159
|
-
`;
|
|
160
|
-
|
|
161
|
-
`;
|
|
162
|
-
`;
|
|
5
|
+
`;if($)Z+=`var ${X.errList} = [];
|
|
6
|
+
`;Z+=`if (input == null || typeof input !== 'object' || Array.isArray(input)) return ${z("[{path:'',code:'invalidInput'}]")};
|
|
7
|
+
`;if(F){Z+=`var __seen = (opts && opts[__SEEN_KEY]) || null;
|
|
8
|
+
`;Z+=`if (__seen === null) { __seen = new WeakSet(); opts = opts ? { ...opts, [__SEEN_KEY]: __seen } : { [__SEEN_KEY]: __seen }; }
|
|
9
|
+
`;Z+=`if (__seen.has(input)) return ${z("[{path:'',code:'circular'}]")};
|
|
10
|
+
`;Z+=`__seen.add(input);
|
|
11
|
+
`;Z+=`try {
|
|
12
|
+
`}if(U?.whitelist){const D=new Set;for(const[P,S]of Object.entries(j)){const w=y(P,S.expose,g.Deserialize);D.add(w)}const O=B.length;B.push(D);if($)Z+=`{var __wlk=Object.keys(input);for(var __wli=0;__wli<__wlk.length;__wli++){var ${X.key}=__wlk[__wli];if(!refs[${O}].has(${X.key}))${X.errList}.push({path:${X.key},code:'whitelistViolation'});}}
|
|
13
|
+
`;else Z+=`{var __wlk=Object.keys(input);for(var __wli=0;__wli<__wlk.length;__wli++){var ${X.key}=__wlk[__wli];if(!refs[${O}].has(${X.key}))return ${z(`[{path:${X.key},code:'whitelistViolation'}]`)};}}
|
|
14
|
+
`}let L=!1;for(const D in j){const O=j[D],P=v(O.expose,g.Deserialize);if(P&&P.length>0){L=!0;break}let S=!1;for(const w of O.validation)if(w.groups&&w.groups.length>0){S=!0;break}if(S){L=!0;break}}if(L){Z+=`var ${X.groups} = opts && opts.groups;
|
|
15
|
+
`;Z+=`var ${X.group0} = ${X.groups} && ${X.groups}.length === 1 ? ${X.groups}[0] : null;
|
|
16
|
+
`;Z+=`var ${X.groupsSet} = ${X.groups} && ${X.groups}.length > 1 ? new Set(${X.groups}) : null;
|
|
17
|
+
`}for(const[D,O]of Object.entries(j))Z+=this.generateFieldCode(D,O);if($)Z+=`if (${X.errList}.length) return ${W?X.errList:`err(${X.errList})`};
|
|
18
|
+
`;Z+=`return ${W?"null":X.out};
|
|
19
|
+
`;if(F)Z+=`} finally { __seen.delete(input); }
|
|
20
|
+
`;const J=Q.name.replace(/[^\w$.-]/g,"_");Z+=`//# sourceURL=baker://${J}/${W?"validate":"deserialize"}
|
|
21
|
+
`;const Y=H?"async function":"function",A=Symbol.for("baker:circular-seen");return Function("_Cls","re","refs","execs","err","isErr","__SEEN_KEY",`return ${Y}(input, opts) { `+Z+" }")(Q,_,B,M,l,s,A)}generateFieldCode(W,q){const{exposeDefaultValues:$}=this;if(q.exclude){if(!q.exclude.serializeOnly){if(this.options?.debug){const S=q.exclude.deserializeOnly?"deserializeOnly":"bidirectional";return`// [baker] field ${JSON.stringify(W)} excluded (${S} @Exclude)
|
|
22
|
+
`}return""}}if(q.expose.length>0&&q.expose.every((S)=>S.serializeOnly)){if(this.options?.debug)return`// [baker] field ${JSON.stringify(W)} excluded (all @Expose entries are serializeOnly)
|
|
23
|
+
`;return""}const F=r(W,this.varPrefix),H=y(W,q.expose,g.Deserialize),j=v(q.expose,g.Deserialize),U=this.inputExpr||"input",Q=this.computeFieldExtras(q,W,F),_=this.makeEmitCtx(W,Q);let B="",M=null;if(q.flags.validateIf){M=this.refs.length;this.refs.push(q.flags.validateIf)}let z;const Z=JSON.stringify(H);if($&&!q.flags.isOptional){const S=this.validateOnly?"__bk$defs":X.out;z=`var ${F} = Object.hasOwn(${U}, ${Z}) ? ${U}[${Z}] : ${S}[${JSON.stringify(W)}];
|
|
24
|
+
`}else z=`var ${F} = ${U}[${Z}];
|
|
25
|
+
`;let L="",J="";if(j&&j.length>0){L=`if ((${X.group0} !== null || ${X.groupsSet}) && (${C(X.group0,X.groupsSet,j)})) {
|
|
26
|
+
`;J=`}
|
|
27
|
+
`}let Y=z;const A=q.flags.isOptional===!0,T=q.flags.isNullable===!0,D=this.generateValidationCode(W,F,q,_,j),O=this.validateOnly?"":`${X.out}[${JSON.stringify(W)}] = null;
|
|
28
|
+
`,P=a(T,A);Y+=e[P]({varName:F,emitCtx:_,assignNull:O,validationCode:D});if(M!==null)B+=L+`if (refs[${M}](${U})) {
|
|
29
|
+
`+Y+`}
|
|
30
|
+
`+J;else B+=L+Y+J;return B}generateValidationCode(W,q,$,F,H){const{collectErrors:j}=this;let U="";const Q=$.transform.filter((_)=>!_.options?.serializeOnly);if(Q.length>0){const _=JSON.stringify(W),B=this.inputExpr||"input";if(Q.length===1){const M=Q[0],z=this.refs.length;this.refs.push(M.fn);const Z=`refs[${z}]({value:${q},key:${_},obj:${B}})`;U+=`${q} = ${M.isAsync?"await ":""}${Z};
|
|
31
|
+
`}else if(Q.length===2){const M=Q[0],z=Q[1],Z=this.refs.length;this.refs.push(M.fn);const L=this.refs.length;this.refs.push(z.fn);const J=`refs[${Z}]({value:${q},key:${_},obj:${B}})`,Y=M.isAsync?`await ${J}`:J,A=`refs[${L}]({value:${Y},key:${_},obj:${B}})`;U+=`${q} = ${z.isAsync?"await ":""}${A};
|
|
32
|
+
`}else for(const M of Q){const z=this.refs.length;this.refs.push(M.fn);const Z=`refs[${z}]({value:${q},key:${_},obj:${B}})`;U+=`${q} = ${M.isAsync?"await ":""}${Z};
|
|
33
|
+
`}}if($.type?.collection){U+=this.validateOnly?this.generateCollectionCodeValidateOnly(W,q,$,F,H):this.generateCollectionCode(W,q,$,F,H);return U}if($.flags.validateNested&&$.type?.fn){U+=this.validateOnly?this.generateNestedCodeValidateOnly(W,q,$,F):this.generateNestedCode(W,q,$,F);return U}if($.validation.length===0){if(!this.validateOnly)U+=`${X.out}[${JSON.stringify(W)}] = ${q};
|
|
34
|
+
`;return U}U+=this.buildRulesCode(W,q,$.validation,j,F,$,H);return U}buildIssueExtras(W,q,$,F,H){let j="";if(typeof W==="string")j+=`,message:${JSON.stringify(W)}`;else if(typeof W==="function"){const U=this.refs.length;this.refs.push(W);const Q=$();j+=`,message:refs[${U}]({property:${JSON.stringify(F)},value:${H},constraints:${Q}})`}if(q!==void 0){const U=this.refs.length;this.refs.push(q);j+=`,context:refs[${U}]`}return j}computeRuleExtras(W,q,$){return this.buildIssueExtras(W.message,W.context,()=>{const F=this.refs.length;this.refs.push(W.rule.constraints??{});return`refs[${F}]`},q,$)}computeFieldExtras(W,q,$){return this.buildIssueExtras(W.message,W.context,()=>"{}",q,$)}makeRuleEmitCtx(W,q,$,F){const H=this.computeRuleExtras(F,q,$);if(!H)return W;const j=W.pathExpr??JSON.stringify(q),U=this.validateOnly;return{...W,fail(Q){if(W.collectErrors)return`${X.errList}.push({path:${j},code:${JSON.stringify(Q)}${H}})`;else if(U)return`return [{path:${j},code:${JSON.stringify(Q)}${H}}]`;return`return err([{path:${j},code:${JSON.stringify(Q)}${H}}])`}}}emitRuleList(W,q,$,F,H,j,U){let Q="",_=0,B=0;for(const L of $){if(!E(L.groups,j))continue;if(L.rule.plan?.cacheKey===h.Length)_+=1;else if(L.rule.plan?.cacheKey===h.Time)B+=1}const M=(this.varPrefix||"")+b(W),z=_>1?`${X.arr}${M}len`:null,Z=B>1?`${X.arr}${M}time`:null;if(z)Q+=`${H}var ${z} = ${q}.length;
|
|
35
|
+
`;if(Z)Q+=`${H}var ${Z} = ${q}.getTime();
|
|
36
|
+
`;for(const L of $){const J=E(L.groups,j),Y=this.makeRuleEmitCtx(F,W,q,L),A=U?{...Y,insideTypeGate:!0}:Y;let T;if(J&&L.rule.plan&&(z||Z)){const O={};if(L.rule.plan.cacheKey===h.Length&&z)O.length=z;if(L.rule.plan.cacheKey===h.Time&&Z)O.time=Z;T=i(q,A,L.rule.ruleName,L.rule.plan,O,U)}else T=L.rule.emit(q,A);if(!T)continue;const D=J?T:qq(L,T);Q+=H+D.replace(/\n/g,`
|
|
37
|
+
`+H)+`
|
|
38
|
+
`}return Q}resolveTypeGate(W,q,$){const{generalRules:F,typedDeps:H}=q,j=!!H,U=H?.type??null,Q=H?.deps??[];let _=-1;if(U)_=F.findIndex((L)=>n[L.rule.ruleName]===U);const B=!!this.options?.enableImplicitConversion&&!$?.transform.some((L)=>!L.options?.serializeOnly);let M=null;if(!j&&B&&_<0)for(let L=0;L<F.length;L++){const J=n[F[L].rule.ruleName];if(J){_=L;M=J;break}}const z=_>=0?F[_]:void 0;let Z=null;if(!j&&!M&&B&&$?.type?.fn)try{const L=$.type.fn(),J=Array.isArray(L)?L[0]:L;Z=J?t[J.name]??null:null}catch(L){throw new p(`field "${W}": @Field type function threw: ${L.message}`,{cause:L})}return{effectiveGateType:U??M??Z,gateDeps:Q,typeAsserterIdx:_,typeAsserter:z,enableConversion:B,asserterInferredGate:M,typeHintGate:Z}}emitTypedRules(W,q,$,F,H,j){let U="";const Q=(this.varPrefix||"")+b(W),{effectiveGateType:_,gateCondition:B,gateErrorCode:M,gateEmitCtx:z,otherGeneral:Z,gateDeps:L,typeAsserter:J,enableConversion:Y}=H,A=(D)=>{const O=[];if(J&&!d.has(J.rule.ruleName))O.push(J);O.push(...Z,...L);return this.emitRuleList(W,q,O,F,D,j,!0)},T=Y&&(_==="string"||_==="number"||_==="boolean"||_==="date");if($)if(T){const D=`${X.skip}${Q}`;U+=`var ${D} = false;
|
|
39
|
+
`;U+=`if (${B}) {
|
|
40
|
+
`;U+=f(_,q,W,D,!0,F);U+=`}
|
|
41
|
+
`;U+=`if (!${D}) {
|
|
42
|
+
`;if(this.validateOnly)U+=A(" ");else{const O=`${X.mark}${Q}`;U+=` var ${O} = ${X.errList}.length;
|
|
43
|
+
`;U+=A(" ");U+=` if (${X.errList}.length === ${O}) ${X.out}[${JSON.stringify(W)}] = ${q};
|
|
44
|
+
`}U+=`}
|
|
45
|
+
`}else{U+=`if (${B}) ${z.fail(M)};
|
|
46
|
+
`;U+=`else {
|
|
47
|
+
`;if(this.validateOnly)U+=A(" ");else{const D=`${X.mark}${Q}`;U+=` var ${D} = ${X.errList}.length;
|
|
48
|
+
`;U+=A(" ");U+=` if (${X.errList}.length === ${D}) ${X.out}[${JSON.stringify(W)}] = ${q};
|
|
49
|
+
`}U+=`}
|
|
50
|
+
`}else if(T){U+=`if (${B}) {
|
|
51
|
+
`;U+=f(_,q,W,null,!1,F);U+=`}
|
|
52
|
+
`;U+=A("");if(!this.validateOnly)U+=`${X.out}[${JSON.stringify(W)}] = ${q};
|
|
53
|
+
`}else{U+=`if (${B}) ${z.fail(M)};
|
|
54
|
+
`;U+=A("");if(!this.validateOnly)U+=`${X.out}[${JSON.stringify(W)}] = ${q};
|
|
55
|
+
`}return U}emitGeneralRules(W,q,$,F,H,j){let U="";const Q=(this.varPrefix||"")+b(W);if(F)if($.length===0){if(!this.validateOnly)U+=`${X.out}[${JSON.stringify(W)}] = ${q};
|
|
56
|
+
`}else if(this.validateOnly)U+=this.emitRuleList(W,q,$,H,"",j);else{const _=`${X.mark}${Q}`;U+=`var ${_} = ${X.errList}.length;
|
|
57
|
+
`;U+=this.emitRuleList(W,q,$,H,"",j);U+=`if (${X.errList}.length === ${_}) ${X.out}[${JSON.stringify(W)}] = ${q};
|
|
58
|
+
`}else{U+=this.emitRuleList(W,q,$,H,"",j);if(!this.validateOnly)U+=`${X.out}[${JSON.stringify(W)}] = ${q};
|
|
59
|
+
`}return U}emitEachRules(W,q,$,F,H,j){let U="";if($.length===0)return U;const Q=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}`:JSON.stringify(W),_=(this.varPrefix||"")+b(W),B=`${X.index}${_}`,M=`${X.setIdx}${_}`,z=`${X.setVal}${_}`,Z=`${X.mapIdx}${_}`,L=`${X.mapVal}${_}`,J=`__bk$ep_${_}`,Y=`__bk$ck${_}`,A=`__bk$el${_}`;U+=`var ${Y} = Array.isArray(${q})?1:(${q} instanceof Set?2:(${q} instanceof Map?3:0));
|
|
60
|
+
`;U+=`var ${J} = ${Q}+'[';
|
|
61
|
+
`;U+=`if (${Y} === 0) ${H.fail("isArray")};
|
|
62
|
+
`;for(const T of $){const D=this.computeRuleExtras(T,W,A),O=T.groups&&T.groups.length>0&&!E(T.groups,j)?T.groups:null,P=O?`if ((${X.group0} === null && !${X.groupsSet}) || ${C(X.group0,X.groupsSet,O)}) {
|
|
63
|
+
`:"",S=O?`}
|
|
64
|
+
`:"",w=[{guard:`Array.isArray(${q})`,idxVar:B,elemExpr:`${q}[${B}]`,loopHeader:`for (var ${B}=0; ${B}<${q}.length; ${B}++)`,counterDecl:"",counterInc:""},{guard:`${q} instanceof Set`,idxVar:M,elemExpr:z,loopHeader:`for (var ${z} of ${q})`,counterDecl:`var ${M} = 0;
|
|
65
|
+
`,counterInc:`${M}++;
|
|
66
|
+
`},{guard:`${q} instanceof Map`,idxVar:Z,elemExpr:L,loopHeader:`for (var ${L} of ${q}.values())`,counterDecl:`var ${Z} = 0;
|
|
67
|
+
`,counterInc:`${Z}++;
|
|
68
|
+
`}],R=(I)=>{const o={...H,fail:(V)=>F?`${X.errList}.push({path:${J}+${I.idxVar}+']',code:${JSON.stringify(V)}${D}})`:this.validateOnly?`return [{path:${J}+${I.idxVar}+']',code:${JSON.stringify(V)}${D}}]`:`return err([{path:${J}+${I.idxVar}+']',code:${JSON.stringify(V)}${D}}])`};let G="";G+=` ${I.counterDecl}`;G+=` ${I.loopHeader} {
|
|
69
|
+
`;G+=` var ${A} = ${I.elemExpr};
|
|
70
|
+
`;G+=" "+T.rule.emit(A,o)+`
|
|
71
|
+
`;if(I.counterInc)G+=` ${I.counterInc}`;G+=` }
|
|
72
|
+
`;return G};U+=P;U+=`if (${Y} === 1) {
|
|
73
|
+
`;U+=R(w[0]);U+=`} else if (${Y} === 2) {
|
|
74
|
+
`;U+=R(w[1]);U+=`} else if (${Y} === 3) {
|
|
75
|
+
`;U+=R(w[2]);U+=`}
|
|
76
|
+
`;U+=S}return U}buildRulesCode(W,q,$,F,H,j,U){const Q=Qq(W,$),_=this.resolveTypeGate(W,Q,j);let B="";if(!!Q.typedDeps||_.asserterInferredGate||_.typeHintGate){const z=_.typeAsserter?Q.generalRules.filter((Y,A)=>A!==_.typeAsserterIdx):Q.generalRules;let Z,L;if(_.typeAsserter)L=_.typeAsserter.rule.ruleName;else if(_.gateDeps.length>0)L=_.gateDeps[0].rule.ruleName;else L="conversionFailed";if(_.effectiveGateType==="date")Z=`!(${q} instanceof Date) || isNaN(${q}.getTime())`;else if(_.effectiveGateType==="array")Z=`!Array.isArray(${q})`;else if(_.effectiveGateType==="object")Z=`typeof ${q} !== 'object' || ${q} === null || Array.isArray(${q})`;else if(_.effectiveGateType==="number")Z=`typeof ${q} !== 'number' || isNaN(${q})`;else Z=`typeof ${q} !== '${_.effectiveGateType}'`;const J=_.typeAsserter?this.makeRuleEmitCtx(H,W,q,_.typeAsserter):H;B+=this.emitTypedRules(W,q,F,H,{effectiveGateType:_.effectiveGateType,gateCondition:Z,gateErrorCode:L,gateEmitCtx:J,otherGeneral:z,gateDeps:_.gateDeps,typeAsserter:_.typeAsserter,enableConversion:_.enableConversion},U)}else B+=this.emitGeneralRules(W,q,Q.generalRules,F,H,U);B+=this.emitEachRules(W,q,Q.each,F,H,U);return B}resolveExecutor(W){const q=this.resolve(W);if(q===void 0)throw new p(`${this.Class.name}: nested class '${W.name}' was not sealed before deserialize codegen.`);return q}emitDeclaredEachRules(W,q,$,F,H,j,U){if(q.length===0)return"";const Q=`${X.setIdx}${F}`,_=`__bk$el${F}`,B=`__bk$ep_${F}`,M=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}+'['`:`${JSON.stringify(W)}+'['`;let z=`${U}var ${B} = ${M};
|
|
77
|
+
`;for(const Z of q){const L=this.computeRuleExtras(Z,W,_),J=Z.groups&&Z.groups.length>0&&!E(Z.groups,j)?Z.groups:null,Y=J?`${U}if ((${X.group0} === null && !${X.groupsSet}) || ${C(X.group0,X.groupsSet,J)}) {
|
|
78
|
+
`:"",A=J?`${U}}
|
|
79
|
+
`:"",D={...H,fail:(O)=>this.collectErrors?`${X.errList}.push({path:${B}+${Q}+']',code:${JSON.stringify(O)}${L}})`:this.validateOnly?`return [{path:${B}+${Q}+']',code:${JSON.stringify(O)}${L}}]`:`return err([{path:${B}+${Q}+']',code:${JSON.stringify(O)}${L}}])`};z+=Y;z+=`${U} var ${Q} = 0;
|
|
80
|
+
`;z+=`${U} for (var ${_} of ${$}) {
|
|
81
|
+
`;z+=`${U} ${Z.rule.emit(_,D)}
|
|
82
|
+
`;z+=`${U} ${Q}++;
|
|
83
|
+
`;z+=`${U} }
|
|
84
|
+
`;z+=A}return z}generateCollectionCode(W,q,$,F,H){const{collectErrors:j,execs:U}=this,Q=(this.varPrefix||"")+b(W),_=$.type,B=_.collection,M=this.isAsync?"await ":"";let z=-1;if(_.resolvedCollectionValue){const L=this.resolveExecutor(_.resolvedCollectionValue);z=U.length;U.push(L)}let Z="";if(B===x.Set){Z+=`if (Array.isArray(${q})) {
|
|
85
|
+
`;const L=$.validation.filter((Y)=>!Y.each);Z+=this.emitRuleList(W,q,L,F," ");if(z>=0){const Y=`${X.index}${Q}`;Z+=` var ${X.arr}${Q} = new Set();
|
|
86
|
+
`;Z+=` for (var ${Y}=0; ${Y}<${q}.length; ${Y}++) {
|
|
87
|
+
`;Z+=` var ${X.result}${Q} = ${M}execs[${z}].deserialize(${q}[${Y}], opts);
|
|
88
|
+
`;Z+=u(`${X.result}${Q}`,`${JSON.stringify(W)}+'['+${Y}+'].'`,Q,j,`${X.arr}${Q}.add(${X.result}${Q});`," ");Z+=` }
|
|
89
|
+
`;Z+=` ${X.out}[${JSON.stringify(W)}] = ${X.arr}${Q};
|
|
90
|
+
`}else Z+=` ${X.out}[${JSON.stringify(W)}] = new Set(${q});
|
|
91
|
+
`;const J=$.validation.filter((Y)=>Y.each);Z+=this.emitDeclaredEachRules(W,J,`${X.out}[${JSON.stringify(W)}]`,Q,F,H," ");Z+=`} else { ${F.fail("isArray")}; }
|
|
92
|
+
`}else{Z+=`if (${q} != null && typeof ${q} === 'object' && !Array.isArray(${q})) {
|
|
93
|
+
`;if(z>=0){const J=`${X.key}${Q}`,Y=`__bk$mk${Q}`,A=`__bk$mi${Q}`;Z+=` var ${X.arr}${Q} = new Map();
|
|
94
|
+
`;Z+=` var ${Y} = Object.keys(${q});
|
|
95
|
+
`;Z+=` for (var ${A}=0; ${A}<${Y}.length; ${A}++) {
|
|
96
|
+
`;Z+=` var ${J} = ${Y}[${A}];
|
|
97
|
+
`;Z+=` var ${X.result}${Q} = ${M}execs[${z}].deserialize(${q}[${J}], opts);
|
|
98
|
+
`;Z+=u(`${X.result}${Q}`,`${JSON.stringify(W)}+'['+${J}+'].'`,Q,j,`${X.arr}${Q}.set(${J}, ${X.result}${Q});`," ");Z+=` }
|
|
99
|
+
`;Z+=` ${X.out}[${JSON.stringify(W)}] = ${X.arr}${Q};
|
|
100
|
+
`}else{const J=`__bk$mk${Q}`,Y=`__bk$mi${Q}`;Z+=` var ${X.arr}${Q} = new Map();
|
|
101
|
+
`;Z+=` var ${J} = Object.keys(${q});
|
|
102
|
+
`;Z+=` for (var ${Y}=0; ${Y}<${J}.length; ${Y}++) {
|
|
103
|
+
`;Z+=` var ${X.key}${Q} = ${J}[${Y}];
|
|
104
|
+
`;Z+=` ${X.arr}${Q}.set(${X.key}${Q}, ${q}[${X.key}${Q}]);
|
|
105
|
+
`;Z+=` }
|
|
106
|
+
`;Z+=` ${X.out}[${JSON.stringify(W)}] = ${X.arr}${Q};
|
|
107
|
+
`}const L=$.validation.filter((J)=>J.each);Z+=this.emitDeclaredEachRules(W,L,`${X.out}[${JSON.stringify(W)}].values()`,Q,F,H," ");Z+=`} else { ${F.fail("isObject")}; }
|
|
108
|
+
`}return Z}generateDiscriminatorEachCode(W,q,$,F,H){const{collectErrors:j,execs:U}=this,Q=$.type.discriminator,_=$.type.keepDiscriminatorProperty===!0,B=JSON.stringify(Q.property),M=this.isAsync?"await ":"",z=`${X.index}${H}`,Z=`__bk$di${H}`,L=`${X.disc}${H}`,J=`${X.result}${H}`,Y=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}`:JSON.stringify(W),A=`${Y}+'['+${z}+'].'`,T=`${Y}+'['+${z}+']'`,D=JSON.stringify(Q.subTypes.map((w)=>w.name));let O=`if (Array.isArray(${q})) {
|
|
109
|
+
`;const P=$.validation.filter((w)=>!w.each);O+=this.emitRuleList(W,q,P,F," ");O+=` var ${X.arr}${H} = [];
|
|
110
|
+
`;O+=` for (var ${z}=0; ${z}<${q}.length; ${z}++) {
|
|
111
|
+
`;O+=` var ${Z} = ${q}[${z}];
|
|
112
|
+
`;O+=` var ${L} = ${Z} && ${Z}[${B}];
|
|
113
|
+
`;O+=` switch (${L}) {
|
|
114
|
+
`;for(const w of Q.subTypes){const R=this.resolveExecutor(w.value),I=U.length;U.push(R);O+=` case ${JSON.stringify(w.name)}: {
|
|
115
|
+
`;O+=` var ${J} = ${M}execs[${I}].deserialize(${Z}, opts);
|
|
116
|
+
`;const N=`${_?`${J}[${B}] = ${L}; `:""}${X.arr}${H}.push(${J});`;O+=u(J,A,H,j,N," ");O+=` break;
|
|
117
|
+
`;O+=` }
|
|
118
|
+
`}const S=`{path:${T},code:'invalidDiscriminator',context:{received:${L},validSubTypes:${D}}}`;O+=j?` default: ${X.errList}.push(${S});
|
|
119
|
+
`:` default: return err([${S}]);
|
|
120
|
+
`;O+=` }
|
|
121
|
+
`;O+=` }
|
|
122
|
+
`;O+=` ${X.out}[${JSON.stringify(W)}] = ${X.arr}${H};
|
|
123
|
+
`;O+=`} else { ${F.fail("isArray")}; }
|
|
124
|
+
`;return O}generateNestedCode(W,q,$,F){const{collectErrors:H,execs:j}=this;if(!$.type)return`${X.out}[${JSON.stringify(W)}] = ${q};
|
|
125
|
+
`;let U="";const Q=(this.varPrefix||"")+b(W);if($.type.discriminator){if($.type.isArray||$.flags.validateNestedEach||$.validation.some((L)=>L.each))return this.generateDiscriminatorEachCode(W,q,$,F,Q);const B=JSON.stringify($.type.discriminator.property);U+=`var ${X.disc}${Q} = ${q} && ${q}[${B}];
|
|
126
|
+
`;U+=`switch (${X.disc}${Q}) {
|
|
127
|
+
`;for(const L of $.type.discriminator.subTypes){const J=this.resolveExecutor(L.value),Y=j.length;j.push(J);const A=this.isAsync?"await ":"";U+=` case ${JSON.stringify(L.name)}:
|
|
128
|
+
`;U+=` var ${X.result}${Q} = ${A}execs[${Y}].deserialize(${q}, opts);
|
|
129
|
+
`;U+=c(W,`${X.result}${Q}`,H,this.pathPrefix);U+=` break;
|
|
130
|
+
`}const M=JSON.stringify($.type.discriminator.subTypes.map((L)=>L.name)),z=F.pathExpr??JSON.stringify(W),Z=`${X.disc}${Q}`;if(H)U+=` default: ${X.errList}.push({path:${z},code:'invalidDiscriminator',context:{received:${Z},validSubTypes:${M}}});
|
|
131
|
+
`;else if(this.validateOnly)U+=` default: return [{path:${z},code:'invalidDiscriminator',context:{received:${Z},validSubTypes:${M}}}];
|
|
132
|
+
`;else U+=` default: return err([{path:${z},code:'invalidDiscriminator',context:{received:${Z},validSubTypes:${M}}}]);
|
|
133
|
+
`;U+=`}
|
|
134
|
+
`;if($.type.keepDiscriminatorProperty===!0){const L=JSON.stringify(W);U+=`{var __dh=${X.out}[${L}]; if(__dh!=null) __dh[${B}]=${X.disc}${Q};}
|
|
135
|
+
`}}else{const _=$.type.resolvedClass??$.type.fn(),B=this.resolveExecutor(_),M=j.length;j.push(B);if($.type.isArray||$.flags.validateNestedEach||$.validation.some((Z)=>Z.each)){const Z=`${X.index}${Q}`,L=this.isAsync?"await ":"";U+=`if (Array.isArray(${q})) {
|
|
136
|
+
`;const J=$.validation.filter((Y)=>!Y.each);U+=this.emitRuleList(W,q,J,F," ");U+=` var ${X.arr}${Q} = [];
|
|
137
|
+
`;U+=` for (var ${Z}=0; ${Z}<${q}.length; ${Z}++) {
|
|
138
|
+
`;U+=` var ${X.result}${Q} = ${L}execs[${M}].deserialize(${q}[${Z}], opts);
|
|
139
|
+
`;U+=u(`${X.result}${Q}`,`${JSON.stringify(W)}+'['+${Z}+'].'`,Q,H,`${X.arr}${Q}.push(${X.result}${Q});`," ");U+=` }
|
|
140
|
+
`;U+=` ${X.out}[${JSON.stringify(W)}] = ${X.arr}${Q};
|
|
141
|
+
`;U+=`} else { ${F.fail("isArray")}; }
|
|
142
|
+
`}else{const Z=this.isAsync?"await ":"";U+=`if (${q} != null && typeof ${q} === 'object' && !Array.isArray(${q})) {
|
|
143
|
+
`;U+=` var ${X.result}${Q} = ${Z}execs[${M}].deserialize(${q}, opts);
|
|
144
|
+
`;U+=c(W,`${X.result}${Q}`,H,this.pathPrefix);U+=`} else { ${F.fail("isObject")}; }
|
|
145
|
+
`}}return U}emitInlineNestedBlock(W,q,$,F,H){const j=this.inlineNestedClasses;j.add(q);const U=this.createChild(F,`${H}${this.inlineCounter.n++}_`,$);let Q="";for(const[_,B]of Object.entries(W))Q+=U.generateFieldCode(_,B);j.delete(q);return Q}generateDiscriminatorEachCodeValidateOnly(W,q,$,F,H){const{collectErrors:j,execs:U}=this,Q=$.type.discriminator,_=JSON.stringify(Q.property),B=this.isAsync?"await ":"",M=`${X.index}${H}`,z=`__bk$di${H}`,Z=`${X.disc}${H}`,L=`${X.result}${H}`,J=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}`:JSON.stringify(W),Y=`${J}+'['+${M}+'].'`,A=`${J}+'['+${M}+']'`,T=JSON.stringify(Q.subTypes.map((S)=>S.name));let D=`if (Array.isArray(${q})) {
|
|
146
|
+
`;const O=$.validation.filter((S)=>!S.each);D+=this.emitRuleList(W,q,O,F," ");D+=` for (var ${M}=0; ${M}<${q}.length; ${M}++) {
|
|
147
|
+
`;D+=` var ${z} = ${q}[${M}];
|
|
148
|
+
`;D+=` var ${Z} = ${z} && ${z}[${_}];
|
|
149
|
+
`;D+=` switch (${Z}) {
|
|
150
|
+
`;for(const S of Q.subTypes){const w=this.resolveExecutor(S.value),R=U.length;U.push(w);D+=` case ${JSON.stringify(S.name)}: {
|
|
151
|
+
`;D+=` var ${L} = ${B}execs[${R}].validate(${z}, opts);
|
|
152
|
+
`;D+=k(L,Y,H,j," ");D+=` break;
|
|
153
|
+
`;D+=` }
|
|
154
|
+
`}const P=`{path:${A},code:'invalidDiscriminator',context:{received:${Z},validSubTypes:${T}}}`;D+=j?` default: ${X.errList}.push(${P});
|
|
155
|
+
`:` default: return [${P}];
|
|
156
|
+
`;D+=` }
|
|
157
|
+
`;D+=` }
|
|
158
|
+
`;D+=`} else { ${F.fail("isArray")}; }
|
|
159
|
+
`;return D}generateNestedCodeValidateOnly(W,q,$,F){const{collectErrors:H,execs:j}=this;if(!$.type)return"";const U=(this.varPrefix||"")+b(W);let Q="";if(!this.inlineNestedClasses)this.inlineNestedClasses=new Set;if($.type.discriminator){if($.type.isArray||$.flags.validateNestedEach||$.validation.some((L)=>L.each))return this.generateDiscriminatorEachCodeValidateOnly(W,q,$,F,U);const B=JSON.stringify($.type.discriminator.property);Q+=`var ${X.disc}${U} = ${q} && ${q}[${B}];
|
|
160
|
+
`;Q+=`switch (${X.disc}${U}) {
|
|
161
|
+
`;for(const L of $.type.discriminator.subTypes){const J=this.resolveExecutor(L.value),Y=J.merged,A=Y&&!this.inlineNestedClasses.has(L.value);Q+=` case ${JSON.stringify(L.name)}:
|
|
162
|
+
`;if(A){const T=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W+".")}`:JSON.stringify(W+"."),D=`${U}_d${b(L.name)}_`;Q+=this.emitInlineNestedBlock(Y,L.value,q,T,D)}else{const T=j.length;j.push(J);const D=this.isAsync?"await ":"";Q+=` var ${X.result}${U} = ${D}execs[${T}].validate(${q}, opts);
|
|
163
|
+
`;Q+=m(W,`${X.result}${U}`,H,this.pathPrefix)}Q+=` break;
|
|
164
|
+
`}const M=JSON.stringify($.type.discriminator.subTypes.map((L)=>L.name)),z=F.pathExpr??JSON.stringify(W),Z=`${X.disc}${U}`;if(H)Q+=` default: ${X.errList}.push({path:${z},code:'invalidDiscriminator',context:{received:${Z},validSubTypes:${M}}});
|
|
165
|
+
`;else Q+=` default: return [{path:${z},code:'invalidDiscriminator',context:{received:${Z},validSubTypes:${M}}}];
|
|
163
166
|
`;Q+=`}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
`;const
|
|
167
|
-
`;Q+=`
|
|
168
|
-
`;Q+=`
|
|
169
|
-
`;Q+=`
|
|
170
|
-
`;
|
|
171
|
-
|
|
172
|
-
`;
|
|
173
|
-
`;Q
|
|
174
|
-
`}else{Q+=`
|
|
175
|
-
`;Q+=`
|
|
176
|
-
`;Q+=
|
|
177
|
-
|
|
178
|
-
`;
|
|
179
|
-
`;Q+=`}
|
|
180
|
-
|
|
181
|
-
`;
|
|
182
|
-
`;
|
|
183
|
-
|
|
184
|
-
var ${X.
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
var ${
|
|
191
|
-
var
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
`;
|
|
195
|
-
`;
|
|
196
|
-
|
|
197
|
-
`;
|
|
198
|
-
`}const
|
|
199
|
-
|
|
200
|
-
`;q+=`}
|
|
201
|
-
`}else{const j=Y.type.resolvedClass??Y.type.fn(),F=$.resolve(j),H=F.merged,D=Y.type.isArray||Y.flags.validateNestedEach||Y.validation.some((U)=>U.each),B=H&&!$.inlineNestedClasses.has(j);if(D){const U=`${X.index}${Q}`;q+=`if (Array.isArray(${W})) {
|
|
202
|
-
`;const M=Y.validation.filter((O)=>!O.each);q+=h(Z,W,M,_,$," ");q+=` for (var ${U}=0; ${U}<${W}.length; ${U}++) {
|
|
203
|
-
`;if(B){const O=`__il$${Q}item`,J=`__bk$pp${Q}`,A=J,P=$.pathPrefix?`${$.pathPrefix}+${JSON.stringify(Z)}+'['+${U}+'].'`:`${JSON.stringify(Z)}+'['+${U}+'].'`,w=`${Q}i_`;q+=` var ${O} = ${W}[${U}];
|
|
204
|
-
`;q+=` var ${J} = ${P};
|
|
205
|
-
`;q+=` if (${O} == null || typeof ${O} !== 'object' || Array.isArray(${O})) `;if(L)q+=`${X.errList}.push({path:${J},code:'invalidInput'});
|
|
206
|
-
`;else q+=`return [{path:${J},code:'invalidInput'}];
|
|
207
|
-
`;q+=` else {
|
|
208
|
-
`;q+=C(H,j,O,A,w,$);q+=` }
|
|
209
|
-
`}else{const O=z.length;z.push(F);const J=$.isAsync?"await ":"";q+=` var ${X.result}${Q} = ${J}execs[${O}].validate(${W}[${U}], opts);
|
|
210
|
-
`;q+=` if (${X.result}${Q} !== null) {
|
|
211
|
-
`;const A=`__bk$pp${Q}`,P=$.pathPrefix?`${$.pathPrefix}+${JSON.stringify(Z)}+'['+${U}+'].'`:`${JSON.stringify(Z)}+'['+${U}+'].'`;q+=` var ${A} = ${P};
|
|
212
|
-
`;if(L){q+=` for (var ${X.nestedIdx}${Q}=0; ${X.nestedIdx}${Q}<${X.result}${Q}.length; ${X.nestedIdx}${Q}++) {
|
|
213
|
-
`;q+=" "+g(X.errList,`${A}+${X.result}${Q}[${X.nestedIdx}${Q}].path`,`${X.result}${Q}[${X.nestedIdx}${Q}]`,`__ne${Q}`);q+=` }
|
|
214
|
-
`}else q+=" "+E(`${A}+${X.result}${Q}[0].path`,`${X.result}${Q}[0]`,`__ne${Q}`,!0);q+=` }
|
|
215
|
-
`}q+=` }
|
|
216
|
-
`;q+=`} else { ${_.fail("isArray")}; }
|
|
217
|
-
`}else{q+=`if (${W} != null && typeof ${W} === 'object' && !Array.isArray(${W})) {
|
|
218
|
-
`;if(B){const U=$.pathPrefix?`${$.pathPrefix}+${JSON.stringify(Z+".")}`:JSON.stringify(Z+"."),M=`${Q}_`;q+=C(H,j,W,U,M,$)}else{const U=z.length;z.push(F);const M=$.isAsync?"await ":"";q+=` var ${X.result}${Q} = ${M}execs[${U}].validate(${W}, opts);
|
|
219
|
-
`;q+=x(Z,`${X.result}${Q}`,L,$.pathPrefix)}q+=`} else { ${_.fail("isObject")}; }
|
|
220
|
-
`}}return q}function x(Z,W,Y,$){const _=b(Z),L=`__bk$pp${_}`,z=$?`${$}+${JSON.stringify(Z+".")}`:JSON.stringify(Z+".");if(Y){const q=`${W}[${X.nestedIdx}${_}]`;return` if (${W} !== null) {
|
|
221
|
-
var ${L} = ${z};
|
|
222
|
-
for (var ${X.nestedIdx}${_}=0; ${X.nestedIdx}${_}<${W}.length; ${X.nestedIdx}${_}++) {
|
|
223
|
-
`+g(X.errList,`${L}+${q}.path`,q,`__ne${_}`)+` }
|
|
224
|
-
}
|
|
225
|
-
`}const Q=`${W}[0]`;return` if (${W} !== null) {
|
|
226
|
-
var ${L} = ${z};
|
|
227
|
-
`+E(`${L}+${Q}.path`,Q,`__ne${_}`,!0)+` }
|
|
228
|
-
`}function DQ(Z,W,Y,$,_){const{collectErrors:L,execs:z}=$,Q=($.varPrefix||"")+b(Z),q=Y.type.collection,j=$.isAsync?"await ":"";if(!$.inlineNestedClasses)$.inlineNestedClasses=new Set;let F,H,D;if(Y.type.resolvedCollectionValue){F=Y.type.resolvedCollectionValue;H=$.resolve(F);D=H.merged}const B=F&&D&&!$.inlineNestedClasses.has(F);let U="";if(q===m.Set){U+=`if (Array.isArray(${W})) {
|
|
229
|
-
`;const M=Y.validation.filter((J)=>!J.each);U+=h(Z,W,M,_,$," ");if(H){const J=`${X.index}${Q}`;U+=` for (var ${J}=0; ${J}<${W}.length; ${J}++) {
|
|
230
|
-
`;if(B){const A=`__il$${Q}ci`,P=`__bk$pp${Q}`,w=$.pathPrefix?`${$.pathPrefix}+${JSON.stringify(Z)}+'['+${J}+'].'`:`${JSON.stringify(Z)}+'['+${J}+'].'`,R=`${Q}c_`;U+=` var ${A} = ${W}[${J}];
|
|
231
|
-
`;U+=` var ${P} = ${w};
|
|
232
|
-
`;U+=` if (${A} == null || typeof ${A} !== 'object' || Array.isArray(${A})) `;if(L)U+=`${X.errList}.push({path:${P},code:'invalidInput'});
|
|
233
|
-
`;else U+=`return [{path:${P},code:'invalidInput'}];
|
|
234
|
-
`;U+=` else {
|
|
235
|
-
`;U+=C(D,F,A,P,R,$);U+=` }
|
|
236
|
-
`}else{const A=z.length;z.push(H);U+=` var ${X.result}${Q} = ${j}execs[${A}].validate(${W}[${J}], opts);
|
|
237
|
-
`;U+=` if (${X.result}${Q} !== null) {
|
|
238
|
-
`;const P=`__bk$pp${Q}`,w=$.pathPrefix?`${$.pathPrefix}+${JSON.stringify(Z)}+'['+${J}+'].'`:`${JSON.stringify(Z)}+'['+${J}+'].'`;U+=` var ${P} = ${w};
|
|
239
|
-
`;if(L){U+=` for (var ${X.nestedIdx}${Q}=0; ${X.nestedIdx}${Q}<${X.result}${Q}.length; ${X.nestedIdx}${Q}++) {
|
|
240
|
-
`;U+=" "+g(X.errList,`${P}+${X.result}${Q}[${X.nestedIdx}${Q}].path`,`${X.result}${Q}[${X.nestedIdx}${Q}]`,`__ne${Q}`);U+=` }
|
|
241
|
-
`}else U+=" "+E(`${P}+${X.result}${Q}[0].path`,`${X.result}${Q}[0]`,`__ne${Q}`,!0);U+=` }
|
|
242
|
-
`}U+=` }
|
|
243
|
-
`}const O=Y.validation.filter((J)=>J.each);if(O.length>0){const J=`${X.index}${Q}e`;U+=` for (var ${J}=0; ${J}<${W}.length; ${J}++) {
|
|
244
|
-
`;for(const A of O){const P=`__bk$ep_${Q}`,w=K(A,Z,W,$),S={..._,fail:(T)=>L?`${X.errList}.push({path:${P}+${J}+']',code:${JSON.stringify(T)}${w}})`:`return [{path:${P}+${J}+']',code:${JSON.stringify(T)}${w}}]`};if(!U.includes(`var ${P}`)){const T=$.pathPrefix?`${$.pathPrefix}+${JSON.stringify(Z)}+'['`:`${JSON.stringify(Z)}+'['`;U+=` var ${P} = ${T};
|
|
245
|
-
`}U+=` ${A.rule.emit(`${W}[${J}]`,S)}
|
|
246
|
-
`}U+=` }
|
|
247
|
-
`}U+=`} else { ${_.fail("isArray")}; }
|
|
248
|
-
`}else{U+=`if (${W} != null && typeof ${W} === 'object' && !Array.isArray(${W})) {
|
|
249
|
-
`;if(H){const M=`${X.key}${Q}`,O=`__bk$vk${Q}`,J=`__bk$vi${Q}`;U+=` var ${O} = Object.keys(${W});
|
|
250
|
-
`;U+=` for (var ${J}=0; ${J}<${O}.length; ${J}++) {
|
|
251
|
-
`;U+=` var ${M} = ${O}[${J}];
|
|
252
|
-
`;if(B){const A=`__il$${Q}mi`,P=$.pathPrefix?`${$.pathPrefix}+${JSON.stringify(Z)}+'['+${M}+'].'`:`${JSON.stringify(Z)}+'['+${M}+'].'`,w=`${Q}m_`,R=P;U+=` var ${A} = ${W}[${M}];
|
|
253
|
-
`;U+=` if (${A} == null || typeof ${A} !== 'object' || Array.isArray(${A})) `;if(L)U+=`${X.errList}.push({path:${R},code:'invalidInput'});
|
|
254
|
-
`;else U+=`return [{path:${R},code:'invalidInput'}];
|
|
255
|
-
`;U+=` else {
|
|
256
|
-
`;U+=C(D,F,A,P,w,$);U+=` }
|
|
257
|
-
`}else{const A=z.length;z.push(H);U+=` var ${X.result}${Q} = ${j}execs[${A}].validate(${W}[${M}], opts);
|
|
258
|
-
`;U+=` if (${X.result}${Q} !== null) {
|
|
259
|
-
`;const P=`__bk$pp${Q}`,w=$.pathPrefix?`${$.pathPrefix}+${JSON.stringify(Z)}+'['+${M}+'].'`:`${JSON.stringify(Z)}+'['+${M}+'].'`;U+=` var ${P} = ${w};
|
|
260
|
-
`;if(L){U+=` for (var ${X.nestedIdx}${Q}=0; ${X.nestedIdx}${Q}<${X.result}${Q}.length; ${X.nestedIdx}${Q}++) {
|
|
261
|
-
`;U+=" "+g(X.errList,`${P}+${X.result}${Q}[${X.nestedIdx}${Q}].path`,`${X.result}${Q}[${X.nestedIdx}${Q}]`,`__ne${Q}`);U+=` }
|
|
262
|
-
`}else U+=" "+E(`${P}+${X.result}${Q}[0].path`,`${X.result}${Q}[0]`,`__ne${Q}`,!0);U+=` }
|
|
263
|
-
`}U+=` }
|
|
264
|
-
`}U+=`} else { ${_.fail("isObject")}; }
|
|
265
|
-
`}return U}function MQ(Z,W,Y=""){const{collectErrors:$,regexes:_,refs:L,execs:z,validateOnly:Q,pathPrefix:q}=W,j=q?`${q}+${JSON.stringify(Z)}`:JSON.stringify(Z);return{addRegex(F){_.push(F);return _.length-1},addRef(F){L.push(F);return L.length-1},addExecutor(F){z.push(F);return z.length-1},fail(F){if($)return`${X.errList}.push({path:${j},code:${JSON.stringify(F)}${Y}})`;else if(Q)return`return [{path:${j},code:${JSON.stringify(F)}${Y}}]`;return`return err([{path:${j},code:${JSON.stringify(F)}${Y}}])`},collectErrors:$,pathExpr:j}}export{buildDeserializeCode,buildValidateCode};
|
|
167
|
+
`}else{const _=$.type.resolvedClass??$.type.fn(),B=this.resolveExecutor(_),M=B.merged,z=$.type.isArray||$.flags.validateNestedEach||$.validation.some((L)=>L.each),Z=M&&!this.inlineNestedClasses.has(_);if(z){const L=`${X.index}${U}`;Q+=`if (Array.isArray(${q})) {
|
|
168
|
+
`;const J=$.validation.filter((Y)=>!Y.each);Q+=this.emitRuleList(W,q,J,F," ");Q+=` for (var ${L}=0; ${L}<${q}.length; ${L}++) {
|
|
169
|
+
`;if(Z){const Y=`__il$${U}item`,A=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}+'['+${L}+'].'`:`${JSON.stringify(W)}+'['+${L}+'].'`,T=`${U}i_`;Q+=` var ${Y} = ${q}[${L}];
|
|
170
|
+
`;Q+=` if (${Y} == null || typeof ${Y} !== 'object' || Array.isArray(${Y})) `;if(H)Q+=`${X.errList}.push({path:${A},code:'invalidInput'});
|
|
171
|
+
`;else Q+=`return [{path:${A},code:'invalidInput'}];
|
|
172
|
+
`;Q+=` else {
|
|
173
|
+
`;Q+=this.emitInlineNestedBlock(M,_,Y,A,T);Q+=` }
|
|
174
|
+
`}else{const Y=j.length;j.push(B);const A=this.isAsync?"await ":"";Q+=` var ${X.result}${U} = ${A}execs[${Y}].validate(${q}[${L}], opts);
|
|
175
|
+
`;const T=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}+'['+${L}+'].'`:`${JSON.stringify(W)}+'['+${L}+'].'`;Q+=k(`${X.result}${U}`,T,U,H," ")}Q+=` }
|
|
176
|
+
`;Q+=`} else { ${F.fail("isArray")}; }
|
|
177
|
+
`}else{Q+=`if (${q} != null && typeof ${q} === 'object' && !Array.isArray(${q})) {
|
|
178
|
+
`;if(Z){const L=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W+".")}`:JSON.stringify(W+"."),J=`${U}_`;Q+=this.emitInlineNestedBlock(M,_,q,L,J)}else{const L=j.length;j.push(B);const J=this.isAsync?"await ":"";Q+=` var ${X.result}${U} = ${J}execs[${L}].validate(${q}, opts);
|
|
179
|
+
`;Q+=m(W,`${X.result}${U}`,H,this.pathPrefix)}Q+=`} else { ${F.fail("isObject")}; }
|
|
180
|
+
`}}return Q}generateCollectionCodeValidateOnly(W,q,$,F,H){const{collectErrors:j,execs:U}=this,Q=(this.varPrefix||"")+b(W),_=$.type,B=_.collection,M=this.isAsync?"await ":"";if(!this.inlineNestedClasses)this.inlineNestedClasses=new Set;let z,Z,L;if(_.resolvedCollectionValue){z=_.resolvedCollectionValue;Z=this.resolveExecutor(z);L=Z.merged}const J=z&&L&&!this.inlineNestedClasses.has(z);let Y="";if(B===x.Set){Y+=`if (Array.isArray(${q})) {
|
|
181
|
+
`;const A=$.validation.filter((D)=>!D.each);Y+=this.emitRuleList(W,q,A,F," ");if(Z){const D=`${X.index}${Q}`;Y+=` for (var ${D}=0; ${D}<${q}.length; ${D}++) {
|
|
182
|
+
`;if(J){const O=`__il$${Q}ci`,P=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}+'['+${D}+'].'`:`${JSON.stringify(W)}+'['+${D}+'].'`,S=`${Q}c_`;Y+=` var ${O} = ${q}[${D}];
|
|
183
|
+
`;Y+=` if (${O} == null || typeof ${O} !== 'object' || Array.isArray(${O})) `;if(j)Y+=`${X.errList}.push({path:${P},code:'invalidInput'});
|
|
184
|
+
`;else Y+=`return [{path:${P},code:'invalidInput'}];
|
|
185
|
+
`;Y+=` else {
|
|
186
|
+
`;Y+=this.emitInlineNestedBlock(L,z,O,P,S);Y+=` }
|
|
187
|
+
`}else{const O=U.length;U.push(Z);Y+=` var ${X.result}${Q} = ${M}execs[${O}].validate(${q}[${D}], opts);
|
|
188
|
+
`;const P=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}+'['+${D}+'].'`:`${JSON.stringify(W)}+'['+${D}+'].'`;Y+=k(`${X.result}${Q}`,P,Q,j," ")}Y+=` }
|
|
189
|
+
`}const T=$.validation.filter((D)=>D.each);Y+=this.emitDeclaredEachRules(W,T,q,Q,F,H," ");Y+=`} else { ${F.fail("isArray")}; }
|
|
190
|
+
`}else{Y+=`if (${q} != null && typeof ${q} === 'object' && !Array.isArray(${q})) {
|
|
191
|
+
`;if(Z){const T=`${X.key}${Q}`,D=`__bk$vk${Q}`,O=`__bk$vi${Q}`;Y+=` var ${D} = Object.keys(${q});
|
|
192
|
+
`;Y+=` for (var ${O}=0; ${O}<${D}.length; ${O}++) {
|
|
193
|
+
`;Y+=` var ${T} = ${D}[${O}];
|
|
194
|
+
`;if(J){const P=`__il$${Q}mi`,S=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}+'['+${T}+'].'`:`${JSON.stringify(W)}+'['+${T}+'].'`,w=`${Q}m_`,R=S;Y+=` var ${P} = ${q}[${T}];
|
|
195
|
+
`;Y+=` if (${P} == null || typeof ${P} !== 'object' || Array.isArray(${P})) `;if(j)Y+=`${X.errList}.push({path:${R},code:'invalidInput'});
|
|
196
|
+
`;else Y+=`return [{path:${R},code:'invalidInput'}];
|
|
197
|
+
`;Y+=` else {
|
|
198
|
+
`;Y+=this.emitInlineNestedBlock(L,z,P,S,w);Y+=` }
|
|
199
|
+
`}else{const P=U.length;U.push(Z);Y+=` var ${X.result}${Q} = ${M}execs[${P}].validate(${q}[${T}], opts);
|
|
200
|
+
`;const S=this.pathPrefix?`${this.pathPrefix}+${JSON.stringify(W)}+'['+${T}+'].'`:`${JSON.stringify(W)}+'['+${T}+'].'`;Y+=k(`${X.result}${Q}`,S,Q,j," ")}Y+=` }
|
|
201
|
+
`}const A=$.validation.filter((T)=>T.each);Y+=this.emitDeclaredEachRules(W,A,`Object.values(${q})`,Q,F,H," ");Y+=`} else { ${F.fail("isObject")}; }
|
|
202
|
+
`}return Y}makeEmitCtx(W,q=""){const{collectErrors:$,regexes:F,refs:H,execs:j,validateOnly:U,pathPrefix:Q}=this,_=Q?`${Q}+${JSON.stringify(W)}`:JSON.stringify(W);return{addRegex(B){F.push(B);return F.length-1},addRef(B){H.push(B);return H.length-1},addExecutor(B){j.push(B);return j.length-1},fail(B){if($)return`${X.errList}.push({path:${_},code:${JSON.stringify(B)}${q}})`;else if(U)return`return [{path:${_},code:${JSON.stringify(B)}${q}}]`;return`return err([{path:${_},code:${JSON.stringify(B)}${q}}])`},collectErrors:$,pathExpr:_}}}import{err as l,isErr as s}from"@zipbul/result";import{CacheKey as h,BakerError as p,Direction as g}from"../common/index.js";import{CollectionType as x}from"../metadata/index.js";import{emitRulePlan as i}from"../rules/index.js";import{sanitizeKey as b,buildGroupsHasExpr as C,resolveExposeName as y,resolveExposeGroups as v}from"./codegen-utils.js";import{DES_GEN as X,PRIMITIVE_TYPE_HINTS as t,ASSERTER_TO_GATE as n,GATE_ONLY_ASSERTERS as d}from"./constants.js";import{toVarName as r,resolveGuardKey as a,GUARD_STRATEGIES as e,wrapGroupsGuard as qq,sameGroups as E,generateConversionCode as f,categorizeRules as Qq,generateNestedResultCode as c,generateNestedEachResultCode as u,generateValidateNestedResult as m,generateValidateNestedEachResultCode as k}from"./deserialize-codegen.js";function buildDeserializeCode(W,q,$,F,H,j,U=!1){return new K(W,q,$,F,H,j,U).build()}function buildValidateCode(W,q,$,F,H,j){return buildDeserializeCode(W,q,$,F,H,j,!0)}export{buildDeserializeCode,buildValidateCode};
|