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