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