@zipbul/baker 1.1.0 → 2.1.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 (38) hide show
  1. package/README.md +189 -501
  2. package/dist/index-fnv35wrf.js +3 -0
  3. package/dist/index-k3d659ad.js +3 -0
  4. package/dist/index-s0n74vx1.js +3 -0
  5. package/dist/index-xdn55cz3.js +0 -3
  6. package/dist/index.d.ts +5 -6
  7. package/dist/index.js +212 -211
  8. package/dist/src/collect.d.ts +0 -2
  9. package/dist/src/configure.d.ts +0 -6
  10. package/dist/src/create-rule.d.ts +1 -1
  11. package/dist/src/decorators/field.d.ts +4 -21
  12. package/dist/src/decorators/index.d.ts +1 -1
  13. package/dist/src/decorators/index.js +1 -4
  14. package/dist/src/errors.d.ts +19 -8
  15. package/dist/src/functions/_run-sealed.d.ts +7 -0
  16. package/dist/src/functions/deserialize.d.ts +5 -4
  17. package/dist/src/functions/index.d.ts +1 -2
  18. package/dist/src/functions/serialize.d.ts +2 -2
  19. package/dist/src/functions/validate.d.ts +13 -0
  20. package/dist/src/rules/index.d.ts +2 -2
  21. package/dist/src/rules/index.js +8 -11
  22. package/dist/src/rules/string.d.ts +8 -48
  23. package/dist/src/symbols.d.ts +0 -2
  24. package/dist/src/symbols.js +1 -4
  25. package/dist/src/transformers/collection.transformer.d.ts +3 -0
  26. package/dist/src/transformers/date.transformer.d.ts +4 -0
  27. package/dist/src/transformers/index.d.ts +8 -0
  28. package/dist/src/transformers/index.js +2 -0
  29. package/dist/src/transformers/luxon.transformer.d.ts +6 -0
  30. package/dist/src/transformers/moment.transformer.d.ts +5 -0
  31. package/dist/src/transformers/number.transformer.d.ts +2 -0
  32. package/dist/src/transformers/string.transformer.d.ts +4 -0
  33. package/dist/src/types.d.ts +9 -63
  34. package/package.json +40 -6
  35. package/README.ko.md +0 -588
  36. package/dist/index-70ggmxsa.js +0 -6
  37. package/dist/index-gcptd79v.js +0 -6
  38. package/dist/src/functions/to-json-schema.d.ts +0 -20
package/dist/index.js CHANGED
@@ -1,228 +1,229 @@
1
1
  // @bun
2
- import"./index-xdn55cz3.js";import{a as G,b as g,c as Q2,d as X2}from"./index-gcptd79v.js";import{e as S,f as T,g as FJ}from"./index-70ggmxsa.js";import{isErr as cJ}from"@zipbul/result";class u extends Error{errors;className;constructor(J,Q){let $=Q?`Validation failed for ${Q}`:"Validation failed";super(`${$}: ${J.length} error(s)`);this.name="BakerValidationError",this.errors=J,this.className=Q}}class w extends Error{constructor(J){super(J);this.name="SealError"}}var d={};function _J(J){let Q=[];if(r())Q.push("[baker] configure() called after auto-seal. Already-sealed classes are not affected. Call configure() before the first deserialize/serialize."),console.warn("[baker] configure() called after auto-seal. Already-sealed classes are not affected. Call configure() before the first deserialize/serialize.");return d={enableImplicitConversion:J.autoConvert??!1,exposeDefaultValues:J.allowClassDefaults??!1,stopAtFirstError:J.stopAtFirstError??!1,whitelist:J.forbidUnknown??J.stripUnknown??!1,debug:J.debug??!1},{warnings:Q}}function c(){return d}import{err as DJ,isErr as IJ}from"@zipbul/result";var q={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",groupsSet:"__bk$groupsSet",key:"__bk$k"};function b(J){return J.replace(/[^a-zA-Z0-9_]/g,(Q)=>`$${Q.charCodeAt(0)}$`)}function OJ(J){return q.field+b(J)}function e(J,Q){let $=Q.find((Y)=>Y.deserializeOnly&&Y.name);if($)return $.name;let X=Q.find((Y)=>!Y.deserializeOnly&&!Y.serializeOnly&&Y.name);if(X)return X.name;return J}function JJ(J){let Q=J.filter((X)=>!X.serializeOnly);if(Q.length===0)return;if(Q.some((X)=>!X.groups||X.groups.length===0))return;let $=new Set;for(let X of Q)for(let Y of X.groups)$.add(Y);return[...$]}function QJ(J,Q,$,X,Y){let M=$?.stopAtFirstError??!1,j=!M,Z=$?.exposeDefaultValues??!1,H=[],F=[],B=[],U=`'use strict';
3
- `;if(U+=`var ${q.out} = new _Cls();
4
- `,j)U+=`var ${q.errList} = [];
5
- `;if(U+=`if (input == null || typeof input !== 'object' || Array.isArray(input)) return _err([{path:'',code:'invalidInput'}]);
6
- `,X){F.push(new WeakSet);let L=F.length-1;U+=`if (_refs[${L}].has(input)) return _err([{path:'',code:'circular'}]);
7
- `,U+=`_refs[${L}].add(input);
8
- `}if($?.whitelist){let L=new Set;for(let[I,D]of Object.entries(Q)){let O=e(I,D.expose);L.add(O)}let _=F.length;if(F.push(L),j)U+=`for (var ${q.key} of Object.keys(input)) { if (!_refs[${_}].has(${q.key})) ${q.errList}.push({path:${q.key},code:'whitelistViolation'}); }
9
- `;else U+=`for (var ${q.key} of Object.keys(input)) { if (!_refs[${_}].has(${q.key})) return _err([{path:${q.key},code:'whitelistViolation'}]); }
10
- `}if(Object.values(Q).some((L)=>{let _=JJ(L.expose);if(_&&_.length>0)return!0;if(L.validation.some((I)=>I.groups&&I.groups.length>0))return!0;return!1}))U+=`var ${q.groups} = _opts && _opts.groups;
11
- `,U+=`var ${q.groupsSet} = ${q.groups} ? new Set(${q.groups}) : null;
12
- `;for(let[L,_]of Object.entries(Q)){let I=VJ(L,_,{stopAtFirstError:M,collectErrors:j,exposeDefaultValues:Z,isAsync:Y,regexes:H,refs:F,execs:B,options:$});U+=I}if(j)U+=`if (${q.errList}.length) return _err(${q.errList});
13
- `;return U+=`return ${q.out};
14
- `,U+=`//# sourceURL=baker://${J.name}/deserialize
15
- `,Function("_Cls","_re","_refs","_execs","_err","_isErr",`return ${Y?"async function":"function"}(input, _opts) { `+U+" }")(J,H,F,B,DJ,IJ)}function TJ(J,Q,$){if(J&&Q)return"nullable+optional";if(J)return"nullable";if($)return"defined";if(Q)return"optional";return"default"}var wJ={"nullable+optional"({varName:J,assignNull:Q,validationCode:$}){let X=`if (${J} === null) { ${Q}}
16
- `;return X+=`else if (${J} !== undefined) {
2
+ import"./index-xdn55cz3.js";import{a as G,b as dJ,c as sJ}from"./index-k3d659ad.js";import{d as k,e as R}from"./index-fnv35wrf.js";import"./index-s0n74vx1.js";import{isErr as HJ}from"@zipbul/result";var l=Symbol.for("baker:error");function WJ(Q){return Q!=null&&typeof Q==="object"&&l in Q}function K(Q){return{[l]:!0,errors:Q}}class O extends Error{constructor(Q){super(Q);this.name="SealError"}}var d={};function LJ(Q){let J=[];if(s())J.push("[baker] configure() called after auto-seal. Already-sealed classes are not affected. Call configure() before the first deserialize/serialize."),console.warn("[baker] configure() called after auto-seal. Already-sealed classes are not affected. Call configure() before the first deserialize/serialize.");return d={enableImplicitConversion:Q.autoConvert??!1,exposeDefaultValues:Q.allowClassDefaults??!1,stopAtFirstError:Q.stopAtFirstError??!1,whitelist:Q.forbidUnknown??!1,debug:Q.debug??!1},{warnings:J}}function c(){return d}import{err as zJ,isErr as wJ}from"@zipbul/result";function b(Q){return Q[Symbol.toStringTag]==="AsyncFunction"}var U={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",groupsSet:"__bk$groupsSet",key:"__bk$k"};function A(Q){return Q.replace(/[^a-zA-Z0-9_]/g,(J)=>`$${J.charCodeAt(0)}$`)}function u(Q,J,$,X){return`var ${X}={path:${J},code:${$}.code};
3
+ if(${$}.message!==undefined)${X}.message=${$}.message;
4
+ if(${$}.context!==undefined)${X}.context=${$}.context;
5
+ ${Q}.push(${X});
6
+ `}function f(Q,J,$){return`var ${$}={path:${Q},code:${J}.code};
7
+ if(${J}.message!==undefined)${$}.message=${J}.message;
8
+ if(${J}.context!==undefined)${$}.context=${J}.context;
9
+ return _err([${$}]);
10
+ `}function _J(Q){return U.field+A(Q)}function e(Q,J){let $=J.find((Y)=>Y.deserializeOnly&&Y.name);if($)return $.name;let X=J.find((Y)=>!Y.deserializeOnly&&!Y.serializeOnly&&Y.name);if(X)return X.name;return Q}function JJ(Q){let J=Q.filter((X)=>!X.serializeOnly);if(J.length===0)return;if(J.some((X)=>!X.groups||X.groups.length===0))return;let $=new Set;for(let X of J)for(let Y of X.groups)$.add(Y);return[...$]}function QJ(Q,J,$,X,Y){let B=$?.stopAtFirstError??!1,q=!B,Z=$?.exposeDefaultValues??!1,M=[],F=[],H=[],j=`'use strict';
11
+ `;if(j+=Z?`var ${U.out} = new _Cls();
12
+ `:`var ${U.out} = Object.create(_Cls.prototype);
13
+ `,q)j+=`var ${U.errList} = [];
14
+ `;j+=`if (input == null || typeof input !== 'object' || Array.isArray(input)) return _err([{path:'',code:'invalidInput'}]);
15
+ `;let z=-1;if(X)F.push(new WeakSet),z=F.length-1,j+=`if (_refs[${z}].has(input)) return _err([{path:'',code:'circular'}]);
16
+ `,j+=`_refs[${z}].add(input);
17
+ `,j+=`try {
18
+ `;if($?.whitelist){let W=new Set;for(let[w,h]of Object.entries(J)){let T=e(w,h.expose);W.add(T)}let D=F.length;if(F.push(W),q)j+=`for (var ${U.key} of Object.keys(input)) { if (!_refs[${D}].has(${U.key})) ${U.errList}.push({path:${U.key},code:'whitelistViolation'}); }
19
+ `;else j+=`for (var ${U.key} of Object.keys(input)) { if (!_refs[${D}].has(${U.key})) return _err([{path:${U.key},code:'whitelistViolation'}]); }
20
+ `}if(Object.values(J).some((W)=>{let D=JJ(W.expose);if(D&&D.length>0)return!0;if(W.validation.some((w)=>w.groups&&w.groups.length>0))return!0;return!1}))j+=`var ${U.groups} = _opts && _opts.groups;
21
+ `,j+=`var ${U.groupsSet} = ${U.groups} ? new Set(${U.groups}) : null;
22
+ `;for(let[W,D]of Object.entries(J)){let w=OJ(W,D,{stopAtFirstError:B,collectErrors:q,exposeDefaultValues:Z,isAsync:Y,regexes:M,refs:F,execs:H,options:$});j+=w}if(q)j+=`if (${U.errList}.length) return _err(${U.errList});
23
+ `;if(j+=`return ${U.out};
24
+ `,X)j+=`} finally { _refs[${z}].delete(input); }
25
+ `;return j+=`//# sourceURL=baker://${Q.name}/deserialize
26
+ `,Function("_Cls","_re","_refs","_execs","_err","_isErr",`return ${Y?"async function":"function"}(input, _opts) { `+j+" }")(Q,M,F,H,zJ,wJ)}function DJ(Q,J,$){if(Q&&J)return"nullable+optional";if(Q)return"nullable";if($)return"defined";if(J)return"optional";return"default"}var hJ={"nullable+optional"({varName:Q,assignNull:J,validationCode:$}){let X=`if (${Q} === null) { ${J}}
27
+ `;return X+=`else if (${Q} !== undefined) {
17
28
  `,X+=$,X+=`}
18
- `,X},nullable({varName:J,emitCtx:Q,assignNull:$,validationCode:X}){let Y=`if (${J} === undefined) ${Q.fail("isDefined")};
19
- `;return Y+=`else if (${J} !== null) {
29
+ `,X},nullable({varName:Q,emitCtx:J,assignNull:$,validationCode:X}){let Y=`if (${Q} === undefined) ${J.fail("isDefined")};
30
+ `;return Y+=`else if (${Q} !== null) {
20
31
  `,Y+=X,Y+=`} else { ${$}}
21
- `,Y},defined({varName:J,emitCtx:Q,validationCode:$}){let X=`if (${J} === undefined) ${Q.fail("isDefined")};
22
- `;return X+=$,X},optional({varName:J,validationCode:Q}){let $=`if (${J} !== undefined && ${J} !== null) {
23
- `;return $+=Q,$+=`}
24
- `,$},default({varName:J,emitCtx:Q,validationCode:$}){let X=`if (${J} === undefined || ${J} === null) ${Q.fail("isDefined")};
32
+ `,Y},defined({varName:Q,emitCtx:J,validationCode:$}){let X=`if (${Q} === undefined) ${J.fail("isDefined")};
33
+ `;return X+=$,X},optional({varName:Q,validationCode:J}){let $=`if (${Q} !== undefined && ${Q} !== null) {
34
+ `;return $+=J,$+=`}
35
+ `,$},default({varName:Q,emitCtx:J,validationCode:$}){let X=`if (${Q} === undefined || ${Q} === null) ${J.fail("isDefined")};
25
36
  `;return X+=`else {
26
37
  `,X+=$,X+=`}
27
- `,X}};function VJ(J,Q,$){let{collectErrors:X,exposeDefaultValues:Y}=$;if(Q.exclude){if(!Q.exclude.serializeOnly){if($.options?.debug){let V=Q.exclude.deserializeOnly?"deserializeOnly":"bidirectional";return`// [baker] field "${J}" excluded (${V} @Exclude)
28
- `}return""}}if(Q.expose.length>0&&Q.expose.every((V)=>V.serializeOnly)){if($.options?.debug)return`// [baker] field "${J}" excluded (all @Expose entries are serializeOnly)
29
- `;return""}let M=OJ(J),j=e(J,Q.expose),Z=JJ(Q.expose),H=EJ(J,$),F="",B=null;if(Q.flags.validateIf)B=$.refs.length,$.refs.push(Q.flags.validateIf);let U;if(Y&&!Q.flags.isOptional)U=`var ${M} = (${JSON.stringify(j)} in input) ? input[${JSON.stringify(j)}] : ${q.out}[${JSON.stringify(J)}];
30
- `;else U=`var ${M} = input[${JSON.stringify(j)}];
31
- `;let z="",P="";if(Z&&Z.length>0){let V=JSON.stringify(Z);z=`if (${q.groupsSet} && ${V}.some(function(g){return ${q.groupsSet}.has(g);})) {
32
- `,P=`}
33
- `}let W=U,L=!!(Q.flags.isOptional&&!Q.flags.isDefined),_=Q.flags.isNullable===!0,I=RJ(J,M,Q,$,H),D=`${q.out}[${JSON.stringify(J)}] = null;
34
- `,O=TJ(_,L,Q.flags.isDefined??!1);if(W+=wJ[O]({varName:M,emitCtx:H,assignNull:D,validationCode:I}),B!==null)F+=z+`if (_refs[${B}](input)) {
35
- `+W+`}
36
- `+P;else F+=z+W+P;return F}function RJ(J,Q,$,X,Y){let{collectErrors:M,execs:j}=X,Z="",H=$.transform.filter((F)=>!F.options?.serializeOnly);if(H.length>0)for(let F of H){let B=X.refs.length;X.refs.push(F.fn);let U=X.isAsync&&g(F.fn),z=`_refs[${B}]({value:${Q},key:${JSON.stringify(J)},obj:input,type:'deserialize'})`;Z+=`${Q} = ${U?"await ":""}${z};
37
- `}if($.type?.collection)return Z+=vJ(J,Q,$,X,Y),Z;if($.flags.validateNested&&$.type?.fn)return Z+=CJ(J,Q,$,X,Y),Z;if($.validation.length===0)return Z+=`${q.out}[${JSON.stringify(J)}] = ${Q};
38
- `,Z;return Z+=KJ(J,Q,$.validation,M,Y,X,$),Z}function XJ(J,Q,$,X){let Y="";if(typeof J.message==="string")Y+=`,message:${JSON.stringify(J.message)}`;else if(typeof J.message==="function"){let M=X.refs.length;X.refs.push(J.message);let j=X.refs.length;X.refs.push(J.rule.constraints??{}),Y+=`,message:_refs[${M}]({property:${JSON.stringify(Q)},value:${$},constraints:_refs[${j}]})`}if(J.context!==void 0){let M=X.refs.length;X.refs.push(J.context),Y+=`,context:_refs[${M}]`}return Y}function k(J,Q,$,X,Y){let M=XJ(X,Q,$,Y);if(!M)return J;return{...J,fail(j){if(J.collectErrors)return`${q.errList}.push({path:${JSON.stringify(Q)},code:${JSON.stringify(j)}${M}})`;else return`return _err([{path:${JSON.stringify(Q)},code:${JSON.stringify(j)}${M}}])`}}}function v(J,Q){if(!J.groups||J.groups.length===0)return Q;let $=JSON.stringify(J.groups);return`if (!${q.groupsSet} || ${$}.some(function(g){return ${q.groupsSet}.has(g);})) {
39
- ${Q}
38
+ `,X}};function OJ(Q,J,$){let{collectErrors:X,exposeDefaultValues:Y}=$;if(J.exclude){if(!J.exclude.serializeOnly){if($.options?.debug){let T=J.exclude.deserializeOnly?"deserializeOnly":"bidirectional";return`// [baker] field "${Q}" excluded (${T} @Exclude)
39
+ `}return""}}if(J.expose.length>0&&J.expose.every((T)=>T.serializeOnly)){if($.options?.debug)return`// [baker] field "${Q}" excluded (all @Expose entries are serializeOnly)
40
+ `;return""}let B=_J(Q),q=e(Q,J.expose),Z=JJ(J.expose),M=CJ(Q,$),F="",H=null;if(J.flags.validateIf)H=$.refs.length,$.refs.push(J.flags.validateIf);let j;if(Y&&!J.flags.isOptional)j=`var ${B} = (${JSON.stringify(q)} in input) ? input[${JSON.stringify(q)}] : ${U.out}[${JSON.stringify(Q)}];
41
+ `;else j=`var ${B} = input[${JSON.stringify(q)}];
42
+ `;let z="",L="";if(Z&&Z.length>0){let T=JSON.stringify(Z);z=`if (${U.groupsSet} && ${T}.some(function(g){return ${U.groupsSet}.has(g);})) {
43
+ `,L=`}
44
+ `}let P=j,_=!!(J.flags.isOptional&&!J.flags.isDefined),W=J.flags.isNullable===!0,D=TJ(Q,B,J,$,M),w=`${U.out}[${JSON.stringify(Q)}] = null;
45
+ `,h=DJ(W,_,J.flags.isDefined??!1);if(P+=hJ[h]({varName:B,emitCtx:M,assignNull:w,validationCode:D}),H!==null)F+=z+`if (_refs[${H}](input)) {
46
+ `+P+`}
47
+ `+L;else F+=z+P+L;return F}function TJ(Q,J,$,X,Y){let{collectErrors:B,execs:q}=X,Z="",M=$.transform.filter((F)=>!F.options?.serializeOnly);if(M.length>0)for(let F of M){let H=X.refs.length;X.refs.push(F.fn);let j=X.isAsync&&b(F.fn),z=`_refs[${H}]({value:${J},key:${JSON.stringify(Q)},obj:input})`;Z+=`${J} = ${j?"await ":""}${z};
48
+ `}if($.type?.collection)return Z+=GJ(Q,J,$,X,Y),Z;if($.flags.validateNested&&$.type?.fn)return Z+=KJ(Q,J,$,X,Y),Z;if($.validation.length===0)return Z+=`${U.out}[${JSON.stringify(Q)}] = ${J};
49
+ `,Z;return Z+=gJ(Q,J,$.validation,B,Y,X,$),Z}function XJ(Q,J,$,X){let Y="";if(typeof Q.message==="string")Y+=`,message:${JSON.stringify(Q.message)}`;else if(typeof Q.message==="function"){let B=X.refs.length;X.refs.push(Q.message);let q=X.refs.length;X.refs.push(Q.rule.constraints??{}),Y+=`,message:_refs[${B}]({property:${JSON.stringify(J)},value:${$},constraints:_refs[${q}]})`}if(Q.context!==void 0){let B=X.refs.length;X.refs.push(Q.context),Y+=`,context:_refs[${B}]`}return Y}function g(Q,J,$,X,Y){let B=XJ(X,J,$,Y);if(!B)return Q;return{...Q,fail(q){if(Q.collectErrors)return`${U.errList}.push({path:${JSON.stringify(J)},code:${JSON.stringify(q)}${B}})`;else return`return _err([{path:${JSON.stringify(J)},code:${JSON.stringify(q)}${B}}])`}}}function C(Q,J){if(!Q.groups||Q.groups.length===0)return J;let $=JSON.stringify(Q.groups);return`if (!${U.groupsSet} || ${$}.some(function(g){return ${U.groupsSet}.has(g);})) {
50
+ ${J}
40
51
  }
41
- `}function s(J,Q,$,X,Y,M){let j=Y?`${q.errList}.push({path:${JSON.stringify($)},code:'conversionFailed'}); ${X} = true;`:M.fail("conversionFailed")+";";switch(J){case"string":return` ${Q} = String(${Q});
42
- `;case"number":return` ${Q} = Number(${Q});
43
- if (isNaN(${Q})) { ${j} }
44
- `;case"boolean":return` if (${Q} === 'true' || ${Q} === '1' || ${Q} === 1) ${Q} = true;
45
- else if (${Q} === 'false' || ${Q} === '0' || ${Q} === 0) ${Q} = false;
46
- else { ${j} }
47
- `;case"date":return` ${Q} = new Date(${Q});
48
- if (isNaN(${Q}.getTime())) { ${j} }
49
- `;default:throw new w(`Unknown implicit conversion type: "${J}" for field "${$}"`)}}var AJ={Number:"number",Boolean:"boolean",String:"string",Date:"date"},t={isString:"string",isNumber:"number",isBoolean:"boolean",isDate:"date",isInt:"number"},bJ=new Set(["isString","isBoolean"]);function SJ(J,Q){let $=Q.filter((B)=>B.each),X=Q.filter((B)=>!B.each),Y=X.filter((B)=>B.rule.requiresType==="string"),M=X.filter((B)=>B.rule.requiresType==="number"),j=X.filter((B)=>B.rule.requiresType==="boolean"),Z=X.filter((B)=>B.rule.requiresType==="date"),H=X.filter((B)=>!B.rule.requiresType),F=[{type:"string",deps:Y},{type:"number",deps:M},{type:"boolean",deps:j},{type:"date",deps:Z}].filter((B)=>B.deps.length>0);if(F.length>1)throw new w(`Field "${J}" has conflicting requiresType: ${F.map((B)=>B.type).join(", ")}`);return{each:$,generalRules:H,typedDeps:F.length>0?F[0]:void 0}}function hJ(J,Q,$,X){let{generalRules:Y,typedDeps:M}=Q,j=!!M,Z=M?.type??null,H=M?.deps??[],F=-1;if(Z)F=Y.findIndex((W)=>t[W.rule.ruleName]===Z);let B=!!X.options?.enableImplicitConversion&&!$?.transform.some((W)=>!W.options?.serializeOnly),U=null;if(!j&&B&&F<0)for(let W=0;W<Y.length;W++){let L=t[Y[W].rule.ruleName];if(L){F=W,U=L;break}}let z=F>=0?Y[F]:void 0,P=null;if(!j&&!U&&B&&$?.type?.fn)try{let W=$.type.fn(),L=Array.isArray(W)?W[0]:W;P=L?AJ[L.name]??null:null}catch(W){throw new w(`field "${J}": @Field type function threw: ${W.message}`)}return{effectiveGateType:Z??U??P,gateDeps:H,typeAsserterIdx:F,typeAsserter:z,enableConversion:B,asserterInferredGate:U,typeHintGate:P}}function kJ(J,Q,$,X,Y,M){let j="",{effectiveGateType:Z,gateCondition:H,gateErrorCode:F,gateEmitCtx:B,otherGeneral:U,gateDeps:z,typeAsserter:P,enableConversion:W}=M,L=(_)=>{let I="";if(P&&!bJ.has(P.rule.ruleName)){let D=v(P,P.rule.emit(Q,k(X,J,Q,P,Y)));I+=_+D.replace(/\n/g,`
50
- `+_)+`
51
- `}for(let D of U){let O=v(D,D.rule.emit(Q,k(X,J,Q,D,Y)));I+=_+O.replace(/\n/g,`
52
- `+_)+`
53
- `}for(let D of z){let O=v(D,D.rule.emit(Q,k(X,J,Q,D,Y)));I+=_+O.replace(/\n/g,`
54
- `+_)+`
55
- `}return I};if($)if(W){let _=`${q.skip}${b(J)}`;j+=`var ${_} = false;
56
- `,j+=`if (${H}) {
57
- `,j+=s(Z,Q,J,_,!0,X),j+=`}
58
- `,j+=`if (!${_}) {
59
- `;let I=`${q.mark}${b(J)}`;j+=` var ${I} = ${q.errList}.length;
60
- `,j+=L(" "),j+=` if (${q.errList}.length === ${I}) ${q.out}[${JSON.stringify(J)}] = ${Q};
61
- `,j+=`}
62
- `}else{j+=`if (${H}) ${B.fail(F)};
63
- `,j+=`else {
64
- `;let _=`${q.mark}${b(J)}`;j+=` var ${_} = ${q.errList}.length;
65
- `,j+=L(" "),j+=` if (${q.errList}.length === ${_}) ${q.out}[${JSON.stringify(J)}] = ${Q};
66
- `,j+=`}
67
- `}else if(W)j+=`if (${H}) {
68
- `,j+=s(Z,Q,J,null,!1,X),j+=`}
69
- `,j+=L(""),j+=`${q.out}[${JSON.stringify(J)}] = ${Q};
70
- `;else j+=`if (${H}) ${B.fail(F)};
71
- `,j+=L(""),j+=`${q.out}[${JSON.stringify(J)}] = ${Q};
72
- `;return j}function gJ(J,Q,$,X,Y,M){let j="";if(X)if($.length===0)j+=`${q.out}[${JSON.stringify(J)}] = ${Q};
73
- `;else{let Z=`${q.mark}${b(J)}`;j+=`var ${Z} = ${q.errList}.length;
74
- `;for(let H of $)j+=v(H,H.rule.emit(Q,k(Y,J,Q,H,M)))+`
75
- `;j+=`if (${q.errList}.length === ${Z}) ${q.out}[${JSON.stringify(J)}] = ${Q};
76
- `}else{for(let Z of $)j+=v(Z,Z.rule.emit(Q,k(Y,J,Q,Z,M)))+`
77
- `;j+=`${q.out}[${JSON.stringify(J)}] = ${Q};
78
- `}return j}function GJ(J,Q,$,X,Y,M){let j="";for(let Z of $){let H=JSON.stringify(J),F=b(J),B=`${q.index}${F}`,U=`${q.setIdx}${F}`,z=`${q.setVal}${F}`,P=`${q.mapIdx}${F}`,W=`${q.mapVal}${F}`,L=XJ(Z,J,Q,M),_=Z.groups&&Z.groups.length>0?`if (!${q.groupsSet} || ${JSON.stringify(Z.groups)}.some(function(g){return ${q.groupsSet}.has(g);})) {
79
- `:"",I=Z.groups&&Z.groups.length>0?`}
80
- `:"",D=[{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:U,elemExpr:z,loopHeader:`for (var ${z} of ${Q})`,counterDecl:`var ${U} = 0;
81
- `,counterInc:`${U}++;
82
- `},{guard:`${Q} instanceof Map`,idxVar:P,elemExpr:W,loopHeader:`for (var ${W} of ${Q}.values())`,counterDecl:`var ${P} = 0;
83
- `,counterInc:`${P}++;
84
- `}],O=(V)=>{let h={...Y,fail:(K)=>X?`${q.errList}.push({path:${H}+'['+${V.idxVar}+']',code:${JSON.stringify(K)}${L}})`:`return _err([{path:${H}+'['+${V.idxVar}+']',code:${JSON.stringify(K)}${L}}])`},R="";if(R+=` ${V.counterDecl}`,R+=` ${V.loopHeader} {
85
- `,R+=" "+Z.rule.emit(V.elemExpr,h)+`
86
- `,V.counterInc)R+=` ${V.counterInc}`;return R+=` }
87
- `,R};if(j+=_,X)j+=`if (${D[0].guard}) {
88
- `,j+=O(D[0]),j+=`} else if (${D[1].guard}) {
89
- `,j+=O(D[1]),j+=`} else if (${D[2].guard}) {
90
- `,j+=O(D[2]),j+=`} else { ${q.errList}.push({path:${H},code:'isArray'}); }
91
- `;else j+=`if (!${D[0].guard} && !(${Q} instanceof Set) && !(${Q} instanceof Map)) ${Y.fail("isArray")};
92
- `,j+=`if (${D[0].guard}) {
93
- `,j+=O(D[0]),j+=`} else if (${D[1].guard}) {
94
- `,j+=O(D[1]),j+=`} else if (${D[2].guard}) {
95
- `,j+=O(D[2]),j+=`}
96
- `;j+=I}return j}function KJ(J,Q,$,X,Y,M,j){let Z=SJ(J,$),H=hJ(J,Z,j,M),F="";if(!!Z.typedDeps||H.asserterInferredGate||H.typeHintGate){let U=H.typeAsserter?Z.generalRules.filter((L,_)=>_!==H.typeAsserterIdx):Z.generalRules,z,P;if(H.typeAsserter)P=H.typeAsserter.rule.ruleName;else if(H.gateDeps.length>0)P=H.gateDeps[0].rule.ruleName;else P="conversionFailed";if(H.effectiveGateType==="date")z=`!(${Q} instanceof Date)`;else z=`typeof ${Q} !== '${H.effectiveGateType}'`;let W=H.typeAsserter?k(Y,J,Q,H.typeAsserter,M):Y;F+=kJ(J,Q,X,Y,M,{effectiveGateType:H.effectiveGateType,gateCondition:z,gateErrorCode:P,gateEmitCtx:W,otherGeneral:U,gateDeps:H.gateDeps,typeAsserter:H.typeAsserter,enableConversion:H.enableConversion})}else F+=gJ(J,Q,Z.generalRules,X,Y,M);return F+=GJ(J,Q,Z.each,X,Y,M),F}function vJ(J,Q,$,X,Y){let{collectErrors:M,execs:j}=X,Z=b(J),H=$.type.collection,F=X.isAsync?"await ":"",B=-1;if($.type.resolvedCollectionValue){let z=$.type.resolvedCollectionValue[T];B=j.length,j.push(z)}let U="";if(H==="Set"){U+=`if (Array.isArray(${Q})) {
97
- `;let z=$.validation.filter((W)=>!W.each);for(let W of z){let L=k(Y,J,Q,W,X);U+=` ${W.rule.emit(Q,L)}
98
- `}if(B>=0){let W=`${q.index}${Z}`;if(U+=` var ${q.arr}${Z} = new Set();
99
- `,U+=` for (var ${W}=0; ${W}<${Q}.length; ${W}++) {
100
- `,U+=` var ${q.result}${Z} = ${F}_execs[${B}]._deserialize(${Q}[${W}], _opts);
101
- `,U+=` if (_isErr(${q.result}${Z})) {
102
- `,M)U+=` var ${q.errors}${Z} = ${q.result}${Z}.data;
103
- `,U+=` for (var ${q.nestedIdx}${Z}=0; ${q.nestedIdx}${Z}<${q.errors}${Z}.length; ${q.nestedIdx}${Z}++) {
104
- `,U+=` ${q.errList}.push({path:${JSON.stringify(J)}+'['+${W}+'].'+${q.errors}${Z}[${q.nestedIdx}${Z}].path,code:${q.errors}${Z}[${q.nestedIdx}${Z}].code});
105
- `,U+=` }
106
- `;else U+=` var ${q.errors}${Z} = ${q.result}${Z}.data;
107
- `,U+=` return _err([{path:${JSON.stringify(J)}+'['+${W}+'].'+${q.errors}${Z}[0].path,code:${q.errors}${Z}[0].code}]);
108
- `;U+=` } else { ${q.arr}${Z}.add(${q.result}${Z}); }
109
- `,U+=` }
110
- `,U+=` ${q.out}[${JSON.stringify(J)}] = ${q.arr}${Z};
111
- `}else U+=` ${q.out}[${JSON.stringify(J)}] = new Set(${Q});
112
- `;let P=$.validation.filter((W)=>W.each);if(P.length>0){let W=`${q.setIdx}${Z}`,L=`${q.setVal}${Z}`;U+=` var ${W} = 0;
113
- `,U+=` for (var ${L} of ${q.out}[${JSON.stringify(J)}]) {
114
- `;for(let _ of P){let D={...Y,fail:(O)=>M?`${q.errList}.push({path:${JSON.stringify(J)}+'['+${W}+']',code:${JSON.stringify(O)}})`:`return _err([{path:${JSON.stringify(J)}+'['+${W}+']',code:${JSON.stringify(O)}}])`};U+=` ${_.rule.emit(L,D)}
115
- `}U+=` ${W}++;
116
- `,U+=` }
117
- `}U+=`} else { ${Y.fail("isArray")}; }
118
- `}else{if(U+=`if (${Q} != null && typeof ${Q} === 'object' && !Array.isArray(${Q})) {
119
- `,B>=0){let z=`${q.key}${Z}`;if(U+=` var ${q.arr}${Z} = new Map();
120
- `,U+=` for (var ${z} in ${Q}) {
121
- `,U+=` if (!Object.prototype.hasOwnProperty.call(${Q}, ${z})) continue;
122
- `,U+=` var ${q.result}${Z} = ${F}_execs[${B}]._deserialize(${Q}[${z}], _opts);
123
- `,U+=` if (_isErr(${q.result}${Z})) {
124
- `,M)U+=` var ${q.errors}${Z} = ${q.result}${Z}.data;
125
- `,U+=` for (var ${q.nestedIdx}${Z}=0; ${q.nestedIdx}${Z}<${q.errors}${Z}.length; ${q.nestedIdx}${Z}++) {
126
- `,U+=` ${q.errList}.push({path:${JSON.stringify(J)}+'['+${z}+'].'+${q.errors}${Z}[${q.nestedIdx}${Z}].path,code:${q.errors}${Z}[${q.nestedIdx}${Z}].code});
127
- `,U+=` }
128
- `;else U+=` var ${q.errors}${Z} = ${q.result}${Z}.data;
129
- `,U+=` return _err([{path:${JSON.stringify(J)}+'['+${z}+'].'+${q.errors}${Z}[0].path,code:${q.errors}${Z}[0].code}]);
130
- `;U+=` } else { ${q.arr}${Z}.set(${z}, ${q.result}${Z}); }
131
- `,U+=` }
132
- `,U+=` ${q.out}[${JSON.stringify(J)}] = ${q.arr}${Z};
133
- `}else U+=` var ${q.arr}${Z} = new Map();
134
- `,U+=` for (var ${q.key}${Z} in ${Q}) {
135
- `,U+=` if (Object.prototype.hasOwnProperty.call(${Q}, ${q.key}${Z})) ${q.arr}${Z}.set(${q.key}${Z}, ${Q}[${q.key}${Z}]);
136
- `,U+=` }
137
- `,U+=` ${q.out}[${JSON.stringify(J)}] = ${q.arr}${Z};
138
- `;U+=`} else { ${Y.fail("isObject")}; }
139
- `}return U}function CJ(J,Q,$,X,Y){let{collectErrors:M,execs:j}=X;if(!$.type)return`${q.out}[${JSON.stringify(J)}] = ${Q};
140
- `;let Z="",H=b(J);if($.type.discriminator){let F=JSON.stringify($.type.discriminator.property);Z+=`var ${q.disc}${H} = ${Q} && ${Q}[${F}];
141
- `,Z+=`switch (${q.disc}${H}) {
142
- `;for(let B of $.type.discriminator.subTypes){let U=B.value[T],z=j.length;j.push(U);let P=X.isAsync?"await ":"";Z+=` case ${JSON.stringify(B.name)}:
143
- `,Z+=` var ${q.result}${H} = ${P}_execs[${z}]._deserialize(${Q}, _opts);
144
- `,Z+=a(J,Q,`${q.result}${H}`,M),Z+=` break;
52
+ `}function t(Q,J,$,X,Y,B){let q=Y?`${U.errList}.push({path:${JSON.stringify($)},code:'conversionFailed'}); ${X} = true;`:B.fail("conversionFailed")+";";switch(Q){case"string":return` ${J} = String(${J});
53
+ `;case"number":return` ${J} = Number(${J});
54
+ if (isNaN(${J})) { ${q} }
55
+ `;case"boolean":return` if (${J} === 'true' || ${J} === '1' || ${J} === 1) ${J} = true;
56
+ else if (${J} === 'false' || ${J} === '0' || ${J} === 0) ${J} = false;
57
+ else { ${q} }
58
+ `;case"date":return` ${J} = new Date(${J});
59
+ if (isNaN(${J}.getTime())) { ${q} }
60
+ `;default:throw new O(`Unknown implicit conversion type: "${Q}" for field "${$}"`)}}var RJ={Number:"number",Boolean:"boolean",String:"string",Date:"date"},r={isString:"string",isNumber:"number",isBoolean:"boolean",isDate:"date",isInt:"number"},SJ=new Set(["isString","isBoolean"]);function VJ(Q,J){let $=J.filter((H)=>H.each),X=J.filter((H)=>!H.each),Y=X.filter((H)=>H.rule.requiresType==="string"),B=X.filter((H)=>H.rule.requiresType==="number"),q=X.filter((H)=>H.rule.requiresType==="boolean"),Z=X.filter((H)=>H.rule.requiresType==="date"),M=X.filter((H)=>!H.rule.requiresType),F=[{type:"string",deps:Y},{type:"number",deps:B},{type:"boolean",deps:q},{type:"date",deps:Z}].filter((H)=>H.deps.length>0);if(F.length>1)throw new O(`Field "${Q}" has conflicting requiresType: ${F.map((H)=>H.type).join(", ")}`);return{each:$,generalRules:M,typedDeps:F.length>0?F[0]:void 0}}function IJ(Q,J,$,X){let{generalRules:Y,typedDeps:B}=J,q=!!B,Z=B?.type??null,M=B?.deps??[],F=-1;if(Z)F=Y.findIndex((P)=>r[P.rule.ruleName]===Z);let H=!!X.options?.enableImplicitConversion&&!$?.transform.some((P)=>!P.options?.serializeOnly),j=null;if(!q&&H&&F<0)for(let P=0;P<Y.length;P++){let _=r[Y[P].rule.ruleName];if(_){F=P,j=_;break}}let z=F>=0?Y[F]:void 0,L=null;if(!q&&!j&&H&&$?.type?.fn)try{let P=$.type.fn(),_=Array.isArray(P)?P[0]:P;L=_?RJ[_.name]??null:null}catch(P){throw new O(`field "${Q}": @Field type function threw: ${P.message}`)}return{effectiveGateType:Z??j??L,gateDeps:M,typeAsserterIdx:F,typeAsserter:z,enableConversion:H,asserterInferredGate:j,typeHintGate:L}}function bJ(Q,J,$,X,Y,B){let q="",{effectiveGateType:Z,gateCondition:M,gateErrorCode:F,gateEmitCtx:H,otherGeneral:j,gateDeps:z,typeAsserter:L,enableConversion:P}=B,_=(W)=>{let D="";if(L&&!SJ.has(L.rule.ruleName)){let w=C(L,L.rule.emit(J,g(X,Q,J,L,Y)));D+=W+w.replace(/\n/g,`
61
+ `+W)+`
62
+ `}for(let w of j){let h=C(w,w.rule.emit(J,g(X,Q,J,w,Y)));D+=W+h.replace(/\n/g,`
63
+ `+W)+`
64
+ `}for(let w of z){let h=C(w,w.rule.emit(J,g(X,Q,J,w,Y)));D+=W+h.replace(/\n/g,`
65
+ `+W)+`
66
+ `}return D};if($)if(P){let W=`${U.skip}${A(Q)}`;q+=`var ${W} = false;
67
+ `,q+=`if (${M}) {
68
+ `,q+=t(Z,J,Q,W,!0,X),q+=`}
69
+ `,q+=`if (!${W}) {
70
+ `;let D=`${U.mark}${A(Q)}`;q+=` var ${D} = ${U.errList}.length;
71
+ `,q+=_(" "),q+=` if (${U.errList}.length === ${D}) ${U.out}[${JSON.stringify(Q)}] = ${J};
72
+ `,q+=`}
73
+ `}else{q+=`if (${M}) ${H.fail(F)};
74
+ `,q+=`else {
75
+ `;let W=`${U.mark}${A(Q)}`;q+=` var ${W} = ${U.errList}.length;
76
+ `,q+=_(" "),q+=` if (${U.errList}.length === ${W}) ${U.out}[${JSON.stringify(Q)}] = ${J};
77
+ `,q+=`}
78
+ `}else if(P)q+=`if (${M}) {
79
+ `,q+=t(Z,J,Q,null,!1,X),q+=`}
80
+ `,q+=_(""),q+=`${U.out}[${JSON.stringify(Q)}] = ${J};
81
+ `;else q+=`if (${M}) ${H.fail(F)};
82
+ `,q+=_(""),q+=`${U.out}[${JSON.stringify(Q)}] = ${J};
83
+ `;return q}function AJ(Q,J,$,X,Y,B){let q="";if(X)if($.length===0)q+=`${U.out}[${JSON.stringify(Q)}] = ${J};
84
+ `;else{let Z=`${U.mark}${A(Q)}`;q+=`var ${Z} = ${U.errList}.length;
85
+ `;for(let M of $)q+=C(M,M.rule.emit(J,g(Y,Q,J,M,B)))+`
86
+ `;q+=`if (${U.errList}.length === ${Z}) ${U.out}[${JSON.stringify(Q)}] = ${J};
87
+ `}else{for(let Z of $)q+=C(Z,Z.rule.emit(J,g(Y,Q,J,Z,B)))+`
88
+ `;q+=`${U.out}[${JSON.stringify(Q)}] = ${J};
89
+ `}return q}function kJ(Q,J,$,X,Y,B){let q="";for(let Z of $){let M=JSON.stringify(Q),F=A(Q),H=`${U.index}${F}`,j=`${U.setIdx}${F}`,z=`${U.setVal}${F}`,L=`${U.mapIdx}${F}`,P=`${U.mapVal}${F}`,_=XJ(Z,Q,J,B),W=Z.groups&&Z.groups.length>0?`if (!${U.groupsSet} || ${JSON.stringify(Z.groups)}.some(function(g){return ${U.groupsSet}.has(g);})) {
90
+ `:"",D=Z.groups&&Z.groups.length>0?`}
91
+ `:"",w=[{guard:`Array.isArray(${J})`,idxVar:H,elemExpr:`${J}[${H}]`,loopHeader:`for (var ${H}=0; ${H}<${J}.length; ${H}++)`,counterDecl:"",counterInc:""},{guard:`${J} instanceof Set`,idxVar:j,elemExpr:z,loopHeader:`for (var ${z} of ${J})`,counterDecl:`var ${j} = 0;
92
+ `,counterInc:`${j}++;
93
+ `},{guard:`${J} instanceof Map`,idxVar:L,elemExpr:P,loopHeader:`for (var ${P} of ${J}.values())`,counterDecl:`var ${L} = 0;
94
+ `,counterInc:`${L}++;
95
+ `}],h=(T)=>{let V={...Y,fail:(I)=>X?`${U.errList}.push({path:${M}+'['+${T.idxVar}+']',code:${JSON.stringify(I)}${_}})`:`return _err([{path:${M}+'['+${T.idxVar}+']',code:${JSON.stringify(I)}${_}}])`},S="";if(S+=` ${T.counterDecl}`,S+=` ${T.loopHeader} {
96
+ `,S+=" "+Z.rule.emit(T.elemExpr,V)+`
97
+ `,T.counterInc)S+=` ${T.counterInc}`;return S+=` }
98
+ `,S};if(q+=W,X)q+=`if (${w[0].guard}) {
99
+ `,q+=h(w[0]),q+=`} else if (${w[1].guard}) {
100
+ `,q+=h(w[1]),q+=`} else if (${w[2].guard}) {
101
+ `,q+=h(w[2]),q+=`} else { ${U.errList}.push({path:${M},code:'isArray'}); }
102
+ `;else q+=`if (!${w[0].guard} && !(${J} instanceof Set) && !(${J} instanceof Map)) ${Y.fail("isArray")};
103
+ `,q+=`if (${w[0].guard}) {
104
+ `,q+=h(w[0]),q+=`} else if (${w[1].guard}) {
105
+ `,q+=h(w[1]),q+=`} else if (${w[2].guard}) {
106
+ `,q+=h(w[2]),q+=`}
107
+ `;q+=D}return q}function gJ(Q,J,$,X,Y,B,q){let Z=VJ(Q,$),M=IJ(Q,Z,q,B),F="";if(!!Z.typedDeps||M.asserterInferredGate||M.typeHintGate){let j=M.typeAsserter?Z.generalRules.filter((_,W)=>W!==M.typeAsserterIdx):Z.generalRules,z,L;if(M.typeAsserter)L=M.typeAsserter.rule.ruleName;else if(M.gateDeps.length>0)L=M.gateDeps[0].rule.ruleName;else L="conversionFailed";if(M.effectiveGateType==="date")z=`!(${J} instanceof Date)`;else z=`typeof ${J} !== '${M.effectiveGateType}'`;let P=M.typeAsserter?g(Y,Q,J,M.typeAsserter,B):Y;F+=bJ(Q,J,X,Y,B,{effectiveGateType:M.effectiveGateType,gateCondition:z,gateErrorCode:L,gateEmitCtx:P,otherGeneral:j,gateDeps:M.gateDeps,typeAsserter:M.typeAsserter,enableConversion:M.enableConversion})}else F+=AJ(Q,J,Z.generalRules,X,Y,B);return F+=kJ(Q,J,Z.each,X,Y,B),F}function GJ(Q,J,$,X,Y){let{collectErrors:B,execs:q}=X,Z=A(Q),M=$.type.collection,F=X.isAsync?"await ":"",H=-1;if($.type.resolvedCollectionValue){let z=$.type.resolvedCollectionValue[R];H=q.length,q.push(z)}let j="";if(M==="Set"){j+=`if (Array.isArray(${J})) {
108
+ `;let z=$.validation.filter((P)=>!P.each);for(let P of z){let _=g(Y,Q,J,P,X);j+=` ${P.rule.emit(J,_)}
109
+ `}if(H>=0){let P=`${U.index}${Z}`;if(j+=` var ${U.arr}${Z} = new Set();
110
+ `,j+=` for (var ${P}=0; ${P}<${J}.length; ${P}++) {
111
+ `,j+=` var ${U.result}${Z} = ${F}_execs[${H}]._deserialize(${J}[${P}], _opts);
112
+ `,j+=` if (_isErr(${U.result}${Z})) {
113
+ `,B)j+=` var ${U.errors}${Z} = ${U.result}${Z}.data;
114
+ `,j+=` for (var ${U.nestedIdx}${Z}=0; ${U.nestedIdx}${Z}<${U.errors}${Z}.length; ${U.nestedIdx}${Z}++) {
115
+ `,j+=" "+u(U.errList,`${JSON.stringify(Q)}+'['+${P}+'].'+${U.errors}${Z}[${U.nestedIdx}${Z}].path`,`${U.errors}${Z}[${U.nestedIdx}${Z}]`,`__ne${Z}`),j+=` }
116
+ `;else j+=` var ${U.errors}${Z} = ${U.result}${Z}.data;
117
+ `,j+=" "+f(`${JSON.stringify(Q)}+'['+${P}+'].'+${U.errors}${Z}[0].path`,`${U.errors}${Z}[0]`,`__ne${Z}`);j+=` } else { ${U.arr}${Z}.add(${U.result}${Z}); }
118
+ `,j+=` }
119
+ `,j+=` ${U.out}[${JSON.stringify(Q)}] = ${U.arr}${Z};
120
+ `}else j+=` ${U.out}[${JSON.stringify(Q)}] = new Set(${J});
121
+ `;let L=$.validation.filter((P)=>P.each);if(L.length>0){let P=`${U.setIdx}${Z}`,_=`${U.setVal}${Z}`;j+=` var ${P} = 0;
122
+ `,j+=` for (var ${_} of ${U.out}[${JSON.stringify(Q)}]) {
123
+ `;for(let W of L){let w={...Y,fail:(h)=>B?`${U.errList}.push({path:${JSON.stringify(Q)}+'['+${P}+']',code:${JSON.stringify(h)}})`:`return _err([{path:${JSON.stringify(Q)}+'['+${P}+']',code:${JSON.stringify(h)}}])`};j+=` ${W.rule.emit(_,w)}
124
+ `}j+=` ${P}++;
125
+ `,j+=` }
126
+ `}j+=`} else { ${Y.fail("isArray")}; }
127
+ `}else{if(j+=`if (${J} != null && typeof ${J} === 'object' && !Array.isArray(${J})) {
128
+ `,H>=0){let z=`${U.key}${Z}`;if(j+=` var ${U.arr}${Z} = new Map();
129
+ `,j+=` for (var ${z} in ${J}) {
130
+ `,j+=` if (!Object.prototype.hasOwnProperty.call(${J}, ${z})) continue;
131
+ `,j+=` var ${U.result}${Z} = ${F}_execs[${H}]._deserialize(${J}[${z}], _opts);
132
+ `,j+=` if (_isErr(${U.result}${Z})) {
133
+ `,B)j+=` var ${U.errors}${Z} = ${U.result}${Z}.data;
134
+ `,j+=` for (var ${U.nestedIdx}${Z}=0; ${U.nestedIdx}${Z}<${U.errors}${Z}.length; ${U.nestedIdx}${Z}++) {
135
+ `,j+=" "+u(U.errList,`${JSON.stringify(Q)}+'['+${z}+'].'+${U.errors}${Z}[${U.nestedIdx}${Z}].path`,`${U.errors}${Z}[${U.nestedIdx}${Z}]`,`__ne${Z}`),j+=` }
136
+ `;else j+=` var ${U.errors}${Z} = ${U.result}${Z}.data;
137
+ `,j+=" "+f(`${JSON.stringify(Q)}+'['+${z}+'].'+${U.errors}${Z}[0].path`,`${U.errors}${Z}[0]`,`__ne${Z}`);j+=` } else { ${U.arr}${Z}.set(${z}, ${U.result}${Z}); }
138
+ `,j+=` }
139
+ `,j+=` ${U.out}[${JSON.stringify(Q)}] = ${U.arr}${Z};
140
+ `}else j+=` var ${U.arr}${Z} = new Map();
141
+ `,j+=` for (var ${U.key}${Z} in ${J}) {
142
+ `,j+=` if (Object.prototype.hasOwnProperty.call(${J}, ${U.key}${Z})) ${U.arr}${Z}.set(${U.key}${Z}, ${J}[${U.key}${Z}]);
143
+ `,j+=` }
144
+ `,j+=` ${U.out}[${JSON.stringify(Q)}] = ${U.arr}${Z};
145
+ `;j+=`} else { ${Y.fail("isObject")}; }
146
+ `}return j}function KJ(Q,J,$,X,Y){let{collectErrors:B,execs:q}=X;if(!$.type)return`${U.out}[${JSON.stringify(Q)}] = ${J};
147
+ `;let Z="",M=A(Q);if($.type.discriminator){let F=JSON.stringify($.type.discriminator.property);Z+=`var ${U.disc}${M} = ${J} && ${J}[${F}];
148
+ `,Z+=`switch (${U.disc}${M}) {
149
+ `;for(let H of $.type.discriminator.subTypes){let j=H.value[R],z=q.length;q.push(j);let L=X.isAsync?"await ":"";Z+=` case ${JSON.stringify(H.name)}:
150
+ `,Z+=` var ${U.result}${M} = ${L}_execs[${z}]._deserialize(${J}, _opts);
151
+ `,Z+=a(Q,`${U.result}${M}`,B),Z+=` break;
145
152
  `}if(Z+=` default: ${Y.fail("invalidDiscriminator")};
146
153
  `,Z+=`}
147
- `,$.type.keepDiscriminatorProperty)Z+=`if (${q.out}[${JSON.stringify(J)}] != null) ${q.out}[${JSON.stringify(J)}][${F}] = ${q.disc}${H};
148
- `}else{let B=($.type.resolvedClass??$.type.fn())[T],U=j.length;if(j.push(B),$.type?.isArray||$.flags.validateNestedEach||$.validation.some((P)=>P.each)){let P=`${q.index}${H}`,W=X.isAsync?"await ":"";Z+=`if (Array.isArray(${Q})) {
149
- `;let L=$.validation.filter((_)=>!_.each);for(let _ of L){let I=k(Y,J,Q,_,X),D=_.rule.emit(Q,I);Z+=` ${D}
150
- `}if(Z+=` var ${q.arr}${H} = [];
151
- `,Z+=` for (var ${P}=0; ${P}<${Q}.length; ${P}++) {
152
- `,Z+=` var ${q.result}${H} = ${W}_execs[${U}]._deserialize(${Q}[${P}], _opts);
153
- `,Z+=` if (_isErr(${q.result}${H})) {
154
- `,M)Z+=` var ${q.errors}${H} = ${q.result}${H}.data;
155
- `,Z+=` for (var ${q.nestedIdx}${H}=0; ${q.nestedIdx}${H}<${q.errors}${H}.length; ${q.nestedIdx}${H}++) {
156
- `,Z+=` ${q.errList}.push({path:${JSON.stringify(J)}+'['+${P}+'].'+${q.errors}${H}[${q.nestedIdx}${H}].path,code:${q.errors}${H}[${q.nestedIdx}${H}].code});
157
- `,Z+=` }
158
- `;else Z+=` var ${q.errors}${H} = ${q.result}${H}.data;
159
- `,Z+=` return _err([{path:${JSON.stringify(J)}+'['+${P}+'].'+${q.errors}${H}[0].path,code:${q.errors}${H}[0].code}]);
160
- `;Z+=` } else { ${q.arr}${H}.push(${q.result}${H}); }
154
+ `,$.type.keepDiscriminatorProperty)Z+=`if (${U.out}[${JSON.stringify(Q)}] != null) ${U.out}[${JSON.stringify(Q)}][${F}] = ${U.disc}${M};
155
+ `}else{let H=($.type.resolvedClass??$.type.fn())[R],j=q.length;if(q.push(H),$.type?.isArray||$.flags.validateNestedEach||$.validation.some((L)=>L.each)){let L=`${U.index}${M}`,P=X.isAsync?"await ":"";Z+=`if (Array.isArray(${J})) {
156
+ `;let _=$.validation.filter((W)=>!W.each);for(let W of _){let D=g(Y,Q,J,W,X),w=W.rule.emit(J,D);Z+=` ${w}
157
+ `}if(Z+=` var ${U.arr}${M} = [];
158
+ `,Z+=` for (var ${L}=0; ${L}<${J}.length; ${L}++) {
159
+ `,Z+=` var ${U.result}${M} = ${P}_execs[${j}]._deserialize(${J}[${L}], _opts);
160
+ `,Z+=` if (_isErr(${U.result}${M})) {
161
+ `,B)Z+=` var ${U.errors}${M} = ${U.result}${M}.data;
162
+ `,Z+=` for (var ${U.nestedIdx}${M}=0; ${U.nestedIdx}${M}<${U.errors}${M}.length; ${U.nestedIdx}${M}++) {
163
+ `,Z+=" "+u(U.errList,`${JSON.stringify(Q)}+'['+${L}+'].'+${U.errors}${M}[${U.nestedIdx}${M}].path`,`${U.errors}${M}[${U.nestedIdx}${M}]`,`__ne${M}`),Z+=` }
164
+ `;else Z+=` var ${U.errors}${M} = ${U.result}${M}.data;
165
+ `,Z+=" "+f(`${JSON.stringify(Q)}+'['+${L}+'].'+${U.errors}${M}[0].path`,`${U.errors}${M}[0]`,`__ne${M}`);Z+=` } else { ${U.arr}${M}.push(${U.result}${M}); }
161
166
  `,Z+=` }
162
- `,Z+=` ${q.out}[${JSON.stringify(J)}] = ${q.arr}${H};
167
+ `,Z+=` ${U.out}[${JSON.stringify(Q)}] = ${U.arr}${M};
163
168
  `,Z+=`} else { ${Y.fail("isArray")}; }
164
- `}else{let P=X.isAsync?"await ":"";Z+=`if (${Q} != null && typeof ${Q} === 'object') {
165
- `,Z+=` var ${q.result}${H} = ${P}_execs[${U}]._deserialize(${Q}, _opts);
166
- `,Z+=a(J,Q,`${q.result}${H}`,M),Z+=`} else { ${Y.fail("isObject")}; }
167
- `}}return Z}function a(J,Q,$,X){let Y=b(J);if(X)return` if (_isErr(${$})) {
168
- var ${q.errors}${Y} = ${$}.data;
169
- for (var ${q.nestedIdx}${Y}=0; ${q.nestedIdx}${Y}<${q.errors}${Y}.length; ${q.nestedIdx}${Y}++) {
170
- ${q.errList}.push({path:${JSON.stringify(J+".")}+${q.errors}${Y}[${q.nestedIdx}${Y}].path,code:${q.errors}${Y}[${q.nestedIdx}${Y}].code});
171
- }
172
- } else { ${q.out}[${JSON.stringify(J)}] = ${$}; }
173
- `;else return` if (_isErr(${$})) {
174
- var ${q.errors}${Y} = ${$}.data;
175
- return _err([{path:${JSON.stringify(J+".")}+${q.errors}${Y}[0].path,code:${q.errors}${Y}[0].code}]);
176
- } else { ${q.out}[${JSON.stringify(J)}] = ${$}; }
177
- `}function EJ(J,Q){let{collectErrors:$,regexes:X,refs:Y,execs:M}=Q;return{addRegex(j){return X.push(j),X.length-1},addRef(j){return Y.push(j),Y.length-1},addExecutor(j){return M.push(j),M.length-1},fail(j){if($)return`${q.errList}.push({path:${JSON.stringify(J)},code:${JSON.stringify(j)}})`;else return`return _err([{path:${JSON.stringify(J)},code:${JSON.stringify(j)}}])`},collectErrors:$}}function uJ(J,Q){let $=Q.find((Y)=>Y.serializeOnly&&Y.name);if($)return $.name;let X=Q.find((Y)=>!Y.deserializeOnly&&!Y.serializeOnly&&Y.name);if(X)return X.name;return J}function ZJ(J){let Q=J.filter((X)=>!X.deserializeOnly);if(Q.length===0)return;if(Q.some((X)=>!X.groups||X.groups.length===0))return;let $=new Set;for(let X of Q)for(let Y of X.groups)$.add(Y);return[...$]}function $J(J,Q,$,X){let Y=[],M=[],j=`'use strict';
178
- `;if(j+=`var __bk$out = {};
179
- `,Object.values(Q).some((B)=>{let U=ZJ(B.expose);return U&&U.length>0}))j+=`var __bk$groups = _opts && _opts.groups;
180
- `,j+=`var __bk$groupsSet = __bk$groups ? new Set(__bk$groups) : null;
181
- `;for(let[B,U]of Object.entries(Q))j+=pJ(B,U,Y,M,X,$);return j+=`return __bk$out;
182
- `,j+=`//# sourceURL=baker://${J.name}/serialize
183
- `,Function("_refs","_execs",`return ${X?"async function":"function"}(instance, _opts) { `+j+" }")(Y,M)}function pJ(J,Q,$,X,Y,M){if(Q.exclude){if(!Q.exclude.deserializeOnly){if(M?.debug){let P=Q.exclude.serializeOnly?"serializeOnly":"bidirectional";return`// [baker] field "${J}" excluded (${P} @Exclude)
184
- `}return""}}if(Q.expose.length>0&&Q.expose.every((P)=>P.deserializeOnly)){if(M?.debug)return`// [baker] field "${J}" excluded (all @Expose entries are deserializeOnly)
185
- `;return""}let j=uJ(J,Q.expose),Z=ZJ(Q.expose),H="",F="",B="";if(Z&&Z.length>0)F=`if (__bk$groupsSet && ${JSON.stringify(Z)}.some(function(g){return __bk$groupsSet.has(g);})) {
186
- `,B=`}
187
- `;let U="",z=Q.flags.isOptional;if(Q.type?.collection&&!Q.transform.filter((P)=>!P.options?.deserializeOnly).length){let P=`__bk$out[${JSON.stringify(j)}]`,W=Q.type.collection,L;if(W==="Set")if(Q.type.resolvedCollectionValue){let _=Q.type.resolvedCollectionValue[T],I=X.length;if(X.push(_),Y)L=`${P} = await Promise.all(Array.from(instance[${JSON.stringify(J)}]).map(async function(__ser_item) { return __ser_item == null ? __ser_item : await _execs[${I}]._serialize(__ser_item, _opts); }));`;else L=`${P} = Array.from(instance[${JSON.stringify(J)}]).map(function(__ser_item) { return __ser_item == null ? __ser_item : _execs[${I}]._serialize(__ser_item, _opts); });`}else L=`${P} = Array.from(instance[${JSON.stringify(J)}]);`;else if(Q.type.resolvedCollectionValue){let _=Q.type.resolvedCollectionValue[T],I=X.length;X.push(_);let D=Y?"await ":"";L=`var __bk$m = {};
188
- `,L+=` for (var __bk$me of instance[${JSON.stringify(J)}]) {
189
- `,L+=` __bk$m[__bk$me[0]] = __bk$me[1] == null ? __bk$me[1] : ${D}_execs[${I}]._serialize(__bk$me[1], _opts);
190
- `,L+=` }
191
- `,L+=` ${P} = __bk$m;`}else L=`${P} = Object.fromEntries(instance[${JSON.stringify(J)}]);`;if(z)U=`if (instance[${JSON.stringify(J)}] !== undefined && instance[${JSON.stringify(J)}] !== null) {
192
- ${L}
193
- } else if (instance[${JSON.stringify(J)}] === null) {
169
+ `}else{let L=X.isAsync?"await ":"";Z+=`if (${J} != null && typeof ${J} === 'object') {
170
+ `,Z+=` var ${U.result}${M} = ${L}_execs[${j}]._deserialize(${J}, _opts);
171
+ `,Z+=a(Q,`${U.result}${M}`,B),Z+=`} else { ${Y.fail("isObject")}; }
172
+ `}}return Z}function a(Q,J,$){let X=A(Q);if($){let Y=`${U.errors}${X}[${U.nestedIdx}${X}]`;return` if (_isErr(${J})) {
173
+ var ${U.errors}${X} = ${J}.data;
174
+ for (var ${U.nestedIdx}${X}=0; ${U.nestedIdx}${X}<${U.errors}${X}.length; ${U.nestedIdx}${X}++) {
175
+ `+u(U.errList,`${JSON.stringify(Q+".")}+${Y}.path`,Y,`__ne${X}`)+` }
176
+ } else { ${U.out}[${JSON.stringify(Q)}] = ${J}; }
177
+ `}else{let Y=`${U.errors}${X}[0]`;return` if (_isErr(${J})) {
178
+ var ${U.errors}${X} = ${J}.data;
179
+ `+f(`${JSON.stringify(Q+".")}+${Y}.path`,Y,`__ne${X}`)+` } else { ${U.out}[${JSON.stringify(Q)}] = ${J}; }
180
+ `}}function CJ(Q,J){let{collectErrors:$,regexes:X,refs:Y,execs:B}=J;return{addRegex(q){return X.push(q),X.length-1},addRef(q){return Y.push(q),Y.length-1},addExecutor(q){return B.push(q),B.length-1},fail(q){if($)return`${U.errList}.push({path:${JSON.stringify(Q)},code:${JSON.stringify(q)}})`;else return`return _err([{path:${JSON.stringify(Q)},code:${JSON.stringify(q)}}])`},collectErrors:$}}function vJ(Q,J){let $=J.find((Y)=>Y.serializeOnly&&Y.name);if($)return $.name;let X=J.find((Y)=>!Y.deserializeOnly&&!Y.serializeOnly&&Y.name);if(X)return X.name;return Q}function $J(Q){let J=Q.filter((X)=>!X.deserializeOnly);if(J.length===0)return;if(J.some((X)=>!X.groups||X.groups.length===0))return;let $=new Set;for(let X of J)for(let Y of X.groups)$.add(Y);return[...$]}function ZJ(Q,J,$,X,Y){if($.length===0)return"";let B=[...$].reverse(),q=Q;for(let Z of B){let M=X.length;X.push(Z.fn);let F=`_refs[${M}]({value:${q},key:${JSON.stringify(J)},obj:instance})`;q=Y&&b(Z.fn)?`(await ${F})`:F}return`
181
+ ${Q} = ${q};`}function UJ(Q,J,$,X){let Y=[],B=[],q=`'use strict';
182
+ `;if(q+=`var __bk$out = {};
183
+ `,Object.values(J).some((H)=>{let j=$J(H.expose);return j&&j.length>0}))q+=`var __bk$groups = _opts && _opts.groups;
184
+ `,q+=`var __bk$groupsSet = __bk$groups ? new Set(__bk$groups) : null;
185
+ `;for(let[H,j]of Object.entries(J))q+=xJ(H,j,Y,B,X,$);return q+=`return __bk$out;
186
+ `,q+=`//# sourceURL=baker://${Q.name}/serialize
187
+ `,Function("_refs","_execs",`return ${X?"async function":"function"}(instance, _opts) { `+q+" }")(Y,B)}function xJ(Q,J,$,X,Y,B){if(J.exclude){if(!J.exclude.deserializeOnly){if(B?.debug){let P=J.exclude.serializeOnly?"serializeOnly":"bidirectional";return`// [baker] field "${Q}" excluded (${P} @Exclude)
188
+ `}return""}}if(J.expose.length>0&&J.expose.every((P)=>P.deserializeOnly)){if(B?.debug)return`// [baker] field "${Q}" excluded (all @Expose entries are deserializeOnly)
189
+ `;return""}let q=vJ(Q,J.expose),Z=$J(J.expose),M="",F="",H="";if(Z&&Z.length>0)F=`if (__bk$groupsSet && ${JSON.stringify(Z)}.some(function(g){return __bk$groupsSet.has(g);})) {
190
+ `,H=`}
191
+ `;let j="",z=J.flags.isOptional,L=J.transform.filter((P)=>!P.options?.deserializeOnly);if(J.type?.collection){let P=`__bk$out[${JSON.stringify(q)}]`,_=J.type.collection,W;if(_==="Set")if(J.type.resolvedCollectionValue){let D=J.type.resolvedCollectionValue[R],w=X.length;if(X.push(D),Y)W=`${P} = await Promise.all(Array.from(instance[${JSON.stringify(Q)}]).map(async function(__ser_item) { return __ser_item == null ? __ser_item : await _execs[${w}]._serialize(__ser_item, _opts); }));`;else W=`${P} = Array.from(instance[${JSON.stringify(Q)}]).map(function(__ser_item) { return __ser_item == null ? __ser_item : _execs[${w}]._serialize(__ser_item, _opts); });`}else W=`${P} = Array.from(instance[${JSON.stringify(Q)}]);`;else if(J.type.resolvedCollectionValue){let D=J.type.resolvedCollectionValue[R],w=X.length;X.push(D);let h=Y?"await ":"";W=`var __bk$m = {};
192
+ `,W+=` for (var __bk$me of instance[${JSON.stringify(Q)}]) {
193
+ `,W+=` __bk$m[__bk$me[0]] = __bk$me[1] == null ? __bk$me[1] : ${h}_execs[${w}]._serialize(__bk$me[1], _opts);
194
+ `,W+=` }
195
+ `,W+=` ${P} = __bk$m;`}else W=`${P} = Object.fromEntries(instance[${JSON.stringify(Q)}]);`;if(W+=ZJ(P,Q,L,$,Y),z)j=`if (instance[${JSON.stringify(Q)}] !== undefined && instance[${JSON.stringify(Q)}] !== null) {
196
+ ${W}
197
+ } else if (instance[${JSON.stringify(Q)}] === null) {
194
198
  ${P} = null;
195
199
  }
196
- `;else U=`if (instance[${JSON.stringify(J)}] != null) {
197
- ${L}
200
+ `;else j=`if (instance[${JSON.stringify(Q)}] != null) {
201
+ ${W}
198
202
  } else {
199
- ${P} = instance[${JSON.stringify(J)}];
203
+ ${P} = instance[${JSON.stringify(Q)}];
200
204
  }
201
- `;return H+=F+U+B,H}if((Q.type?.resolvedClass||Q.type?.discriminator||Q.type?.fn&&Q.flags.validateNested)&&!Q.transform.filter((P)=>!P.options?.deserializeOnly).length){let P=Q.type?.isArray||Q.flags.validateNestedEach||Q.validation.some((_)=>_.each),W=`__bk$out[${JSON.stringify(j)}]`,L;if(Q.type.discriminator){let{property:_,subTypes:I}=Q.type.discriminator,D=Q.type.keepDiscriminatorProperty!==!1,O=[...I].sort((A,h)=>{if(A.value.prototype instanceof h.value)return-1;if(h.value.prototype instanceof A.value)return 1;return 0}),V=(A,h)=>{let R="";for(let K=0;K<O.length;K++){let m=O[K],WJ=m.value[T],LJ=X.length;X.push(WJ);let zJ=$.length;if($.push(m.value),R+=`${K===0?"if":"} else if"} (${A} instanceof _refs[${zJ}]) {
202
- `,R+=` var __bk$sr = ${h}_execs[${LJ}]._serialize(${A}, _opts);
203
- `,D)R+=` __bk$sr[${JSON.stringify(_)}] = ${JSON.stringify(m.name)};
204
- `;R+=` __bk$out_item = __bk$sr;
205
- `}return R+="} else { __bk$out_item = "+A+`; }
206
- `,R};if(P){let A=Y?"await ":"";if(Y)L=`${W} = await Promise.all(instance[${JSON.stringify(J)}].map(async function(__ser_item) {
207
- `;else L=`${W} = instance[${JSON.stringify(J)}].map(function(__ser_item) {
208
- `;L+=` var __bk$out_item;
209
- `,L+=V("__ser_item",A),L+=` return __bk$out_item;
210
- `,L+="});"}else{let A=Y?"await ":"",h=JSON.stringify(J);L=`var __bk$out_item;
211
- `,L+=V(`instance[${h}]`,A),L+=`${W} = __bk$out_item;`}}else{let I=(Q.type.resolvedClass??Q.type.fn())[T],D=X.length;if(X.push(I),P)if(Y)L=`${W} = await Promise.all(instance[${JSON.stringify(J)}].map(async function(__ser_item) { return __ser_item == null ? __ser_item : await _execs[${D}]._serialize(__ser_item, _opts); }));`;else L=`${W} = instance[${JSON.stringify(J)}].map(function(__ser_item) { return __ser_item == null ? __ser_item : _execs[${D}]._serialize(__ser_item, _opts); });`;else L=`${W} = ${Y?"await ":""}_execs[${D}]._serialize(instance[${JSON.stringify(J)}], _opts);`}if(z)U=`if (instance[${JSON.stringify(J)}] !== undefined && instance[${JSON.stringify(J)}] !== null) {
212
- ${L}
213
- } else if (instance[${JSON.stringify(J)}] === null) {
214
- ${W} = null;
205
+ `;return M+=F+j+H,M}if(J.type?.resolvedClass||J.type?.discriminator||J.type?.fn&&J.flags.validateNested){let P=J.type?.isArray||J.flags.validateNestedEach||J.validation.some((D)=>D.each),_=`__bk$out[${JSON.stringify(q)}]`,W;if(J.type.discriminator){let{property:D,subTypes:w}=J.type.discriminator,h=J.type.keepDiscriminatorProperty!==!1,T=[...w].sort((V,S)=>{if(V.value.prototype instanceof S.value)return-1;if(S.value.prototype instanceof V.value)return 1;return 0}),n=(V,S)=>{let I="";for(let x=0;x<T.length;x++){let m=T[x],FJ=m.value[R],BJ=X.length;X.push(FJ);let PJ=$.length;if($.push(m.value),I+=`${x===0?"if":"} else if"} (${V} instanceof _refs[${PJ}]) {
206
+ `,I+=` var __bk$sr = ${S}_execs[${BJ}]._serialize(${V}, _opts);
207
+ `,h)I+=` __bk$sr[${JSON.stringify(D)}] = ${JSON.stringify(m.name)};
208
+ `;I+=` __bk$out_item = __bk$sr;
209
+ `}return I+="} else { __bk$out_item = "+V+`; }
210
+ `,I};if(P){let V=Y?"await ":"";if(Y)W=`${_} = await Promise.all(instance[${JSON.stringify(Q)}].map(async function(__ser_item) {
211
+ `;else W=`${_} = instance[${JSON.stringify(Q)}].map(function(__ser_item) {
212
+ `;W+=` var __bk$out_item;
213
+ `,W+=n("__ser_item",V),W+=` return __bk$out_item;
214
+ `,W+=Y?"}));":"});"}else{let V=Y?"await ":"",S=JSON.stringify(Q);W=`var __bk$out_item;
215
+ `,W+=n(`instance[${S}]`,V),W+=`${_} = __bk$out_item;`}}else{let w=(J.type.resolvedClass??J.type.fn())[R],h=X.length;if(X.push(w),P)if(Y)W=`${_} = await Promise.all(instance[${JSON.stringify(Q)}].map(async function(__ser_item) { return __ser_item == null ? __ser_item : await _execs[${h}]._serialize(__ser_item, _opts); }));`;else W=`${_} = instance[${JSON.stringify(Q)}].map(function(__ser_item) { return __ser_item == null ? __ser_item : _execs[${h}]._serialize(__ser_item, _opts); });`;else W=`${_} = ${Y?"await ":""}_execs[${h}]._serialize(instance[${JSON.stringify(Q)}], _opts);`}if(W+=ZJ(_,Q,L,$,Y),z)j=`if (instance[${JSON.stringify(Q)}] !== undefined && instance[${JSON.stringify(Q)}] !== null) {
216
+ ${W}
217
+ } else if (instance[${JSON.stringify(Q)}] === null) {
218
+ ${_} = null;
215
219
  }
216
- `;else U=`if (instance[${JSON.stringify(J)}] != null) {
217
- ${L}
220
+ `;else j=`if (instance[${JSON.stringify(Q)}] != null) {
221
+ ${W}
218
222
  } else {
219
- ${W} = instance[${JSON.stringify(J)}];
223
+ ${_} = instance[${JSON.stringify(Q)}];
220
224
  }
221
- `}else{let P=fJ(J,j,Q,$,Y);if(z)U+=`if (instance[${JSON.stringify(J)}] !== undefined) {
222
- `,U+=" "+P+`
223
- `,U+=`}
224
- `;else U+=P+`
225
- `}return H+=F+U+B,H}function fJ(J,Q,$,X,Y){let M=`__bk$out[${JSON.stringify(Q)}]`,j=$.transform.filter((Z)=>!Z.options?.deserializeOnly);if(j.length>0){let Z=`instance[${JSON.stringify(J)}]`;for(let H of j){let F=X.length;X.push(H.fn);let B=`_refs[${F}]({value:${Z},key:${JSON.stringify(J)},obj:instance,type:'serialize'})`;Z=Y&&g(H.fn)?`(await ${B})`:B}return`${M} = ${Z};`}return`${M} = instance[${JSON.stringify(J)}];`}function YJ(J){let Q=new Set;function $(X){if(Q.has(X))return!0;Q.add(X);let Y=X[S];if(Y)for(let M of Object.values(Y)){if(M.type?.fn){let j;try{j=M.type.fn()}catch(H){throw new w(`${X.name}: type function threw: ${H.message}`)}let Z=Array.isArray(j)?j[0]:j;if($(Z))return!0}if(M.type?.discriminator){for(let j of M.type.discriminator.subTypes)if($(j.value))return!0}}return Q.delete(X),!1}return $(J)}function qJ(J,Q){let $=Q?`${Q}.`:"";for(let[X,Y]of Object.entries(J)){for(let Z of Y.expose)if(Z.deserializeOnly&&Z.serializeOnly)throw new w(`Invalid @Expose on field '${$}${X}': cannot have both deserializeOnly:true and serializeOnly:true on the same @Expose entry. Use separate @Expose decorators for each direction.`);let M=Y.expose.filter((Z)=>!Z.serializeOnly),j=Y.expose.filter((Z)=>!Z.deserializeOnly);jJ($+X,M,"deserialize"),jJ($+X,j,"serialize")}}function jJ(J,Q,$){for(let X=0;X<Q.length;X++)for(let Y=X+1;Y<Q.length;Y++){let M=Q[X].groups??[],j=Q[Y].groups??[];if(xJ(M,j)){let Z=new Set(j),H=M.length===0?[]:M.filter((F)=>Z.has(F));throw new w(`@Expose conflict on '${J}': 2 @Expose stacks with '${$}' direction and overlapping groups [${H.join(", ")}]. Each direction must have at most one @Expose per group set.`)}}}function xJ(J,Q){if(J.length===0&&Q.length===0)return!0;if(J.length===0||Q.length===0)return!1;return J.some(($)=>Q.includes($))}var NJ=new Set(["__proto__","constructor","prototype"]),HJ=new Set([Number,String,Boolean,Date]);function yJ(J){let Q=`Circular dependency during seal: ${J} is still being sealed`;return{_deserialize(){throw new w(Q)},_serialize(){throw new w(Q)},_isAsync:!1,_isSerializeAsync:!1}}function f(J,Q,$){let X=$??new Set;for(let Y of Object.values(J)){if(Q==="deserialize"&&Y.validation.some((j)=>j.rule.isAsync))return!0;if((Q==="deserialize"?Y.transform.filter((j)=>!j.options?.serializeOnly):Y.transform.filter((j)=>!j.options?.deserializeOnly)).some((j)=>g(j.fn)))return!0;if(Y.type?.resolvedClass||Y.type?.fn){let j;if(Y.type.resolvedClass)j=Y.type.resolvedClass;else try{j=Y.type.fn()}catch(Z){throw new w(`type function threw: ${Z.message}`)}if(!X.has(j)){X.add(j);let Z=E(j);if(f(Z,Q,X))return!0}}if(Y.type?.discriminator){for(let j of Y.type.discriminator.subTypes)if(!X.has(j.value)){X.add(j.value);let Z=E(j.value);if(f(Z,Q,X))return!0}}}return!1}var o=!1;function r(){return o}var p=new Set;function nJ(){if(o)return;let J=c();try{for(let Q of G)C(Q,J)}catch(Q){for(let $ of G)if(Object.hasOwn($,T))delete $[T];throw Q}for(let Q of G)p.add(Q),Object.freeze(Q[S]);G.clear(),o=!0}function mJ(J){if(Object.hasOwn(J,T))return;if(!Object.hasOwn(J,S))return;let Q=new Set(p),$=c();C(J,$),p.add(J),Object.freeze(J[S]),G.delete(J);let X=[...G].filter((Y)=>Object.hasOwn(Y,T)&&!Q.has(Y));for(let Y of X)p.add(Y),Object.freeze(Y[S]),G.delete(Y)}function x(J){let Q=J[T];if(!Q)nJ(),Q=J[T];if(!Q)mJ(J),Q=J[T];if(!Q)throw new w(`${J.name} has no @Field decorators`);return Q}function C(J,Q){if(Object.hasOwn(J,T))return;let $=yJ(J.name);J[T]=$;let X=E(J);for(let F of Object.keys(X))if(NJ.has(F))throw new w(`${J.name}: field name '${F}' is not allowed (reserved property name)`);for(let[F,B]of Object.entries(X)){if(!B.type?.fn)continue;let U=B.type.fn();if(U===Map||U===Set){let L=U===Map?"Map":"Set",_={...B.type,collection:L,isArray:!1};if(B.type.collectionValue){let I=B.type.collectionValue();if(I!=null&&typeof I==="function"&&!HJ.has(I))_.resolvedCollectionValue=I}X[F]={...B,type:_};continue}let z=Array.isArray(U),P=z?U[0]:U;if(P==null||typeof P!=="function")throw new w(`${J.name}: @Type/@Field type must return a constructor or [constructor], got ${String(P)}`);let W={...B.type,isArray:z};if(!HJ.has(P)){if(W.resolvedClass=P,!B.flags.validateNested||!B.flags.validateNestedEach){if(B.flags={...B.flags},!B.flags.validateNested)B.flags.validateNested=!0;if(z&&!B.flags.validateNestedEach)B.flags.validateNestedEach=!0}}X[F]={...B,type:W}}qJ(X,J.name);let Y=YJ(J);for(let F of Object.values(X)){if(F.type?.resolvedClass)C(F.type.resolvedClass,Q);if(F.type?.resolvedCollectionValue)C(F.type.resolvedCollectionValue,Q);if(F.type?.discriminator)for(let B of F.type.discriminator.subTypes)C(B.value,Q)}let M=f(X,"deserialize"),j=f(X,"serialize"),Z=QJ(J,X,Q,Y,M),H=$J(J,X,Q,j);Object.assign($,{_deserialize:Z,_serialize:H,_isAsync:M,_isSerializeAsync:j,_merged:X})}function E(J){let Q=[],$=J;while($&&$!==Object){if(Object.hasOwn($,S))Q.push($);let Y=Object.getPrototypeOf($);$=Y===$?null:Y}let X=Object.create(null);for(let Y of Q){let M=Y[S];for(let[j,Z]of Object.entries(M))if(!X[j])X[j]={validation:[...Z.validation],transform:[...Z.transform],expose:[...Z.expose],exclude:Z.exclude,type:Z.type,flags:{...Z.flags},schema:typeof Z.schema==="function"?Z.schema:Z.schema?{...Z.schema}:null};else{let H=X[j],F=Z;for(let z of F.validation)if(!H.validation.some((P)=>P.rule===z.rule))H.validation.push(z);if(H.transform.length===0&&F.transform.length>0)H.transform=[...F.transform];if(H.expose.length===0&&F.expose.length>0)H.expose=[...F.expose];if(H.exclude===null&&F.exclude!==null)H.exclude=F.exclude;if(H.type===null&&F.type!==null)H.type=F.type;let B=H.flags,U=F.flags;if(U.isOptional!==void 0&&B.isOptional===void 0)B.isOptional=U.isOptional;if(U.isDefined!==void 0&&B.isDefined===void 0)B.isDefined=U.isDefined;if(U.validateIf!==void 0&&B.validateIf===void 0)B.validateIf=U.validateIf;if(U.isNullable!==void 0&&B.isNullable===void 0)B.isNullable=U.isNullable;if(U.validateNested!==void 0&&B.validateNested===void 0)B.validateNested=U.validateNested;if(U.validateNestedEach!==void 0&&B.validateNestedEach===void 0)B.validateNestedEach=U.validateNestedEach;if(H.schema==null&&F.schema!=null)H.schema=typeof F.schema==="function"?F.schema:{...F.schema};else if(H.schema!=null&&F.schema!=null){if(typeof H.schema==="function");else if(typeof F.schema==="function");else for(let[z,P]of Object.entries(F.schema))if(!(z in H.schema))H.schema[z]=P}}}return X}function UJ(J,Q){if(cJ(J))throw new u(J.data,Q);return J}function oJ(J,Q,$){try{let X=x(J);if(X._isAsync)return X._deserialize(Q,$).then((Y)=>UJ(Y,J.name));return Promise.resolve(UJ(X._deserialize(Q,$),J.name))}catch(X){return Promise.reject(X)}}function iJ(J,Q){try{let $=J.constructor,X=x($);if(X._isSerializeAsync)return X._serialize(J,Q);return Promise.resolve(X._serialize(J,Q))}catch($){return Promise.reject($)}}var MJ=new Set,lJ=new Set(["allOf","anyOf","oneOf","not","if","then","else"]),dJ={isString:()=>({type:"string"}),isNumber:()=>({type:"number"}),isInt:()=>({type:"integer"}),isBoolean:()=>({type:"boolean"}),isDate:()=>({type:"string",format:"date-time"}),isArray:()=>({type:"array"}),isObject:()=>({type:"object"}),isEnum:(J)=>({enum:J.values}),isIn:(J)=>({enum:J.values}),equals:(J)=>({const:J.value}),notEquals:(J)=>({not:{const:J.value}}),isNotIn:(J)=>({not:{enum:J.values}}),min:(J)=>J.exclusive?{exclusiveMinimum:J.min}:{minimum:J.min},max:(J)=>J.exclusive?{exclusiveMaximum:J.max}:{maximum:J.max},isPositive:()=>({exclusiveMinimum:0}),isNegative:()=>({exclusiveMaximum:0}),isDivisibleBy:(J)=>({multipleOf:J.divisor}),minLength:(J)=>({minLength:J.min}),maxLength:(J)=>({maxLength:J.max}),length:(J)=>({minLength:J.min,maxLength:J.max}),matches:(J)=>({pattern:J.pattern}),isEmail:()=>({format:"email"}),isURL:()=>({format:"uri"}),isUUID:()=>({format:"uuid"}),isISO8601:()=>({format:"date-time"}),isIP:(J)=>{if(J.version===4)return{format:"ipv4"};if(J.version===6)return{format:"ipv6"};return null},arrayMinSize:(J)=>({minItems:J.min}),arrayMaxSize:(J)=>({maxItems:J.max}),arrayUnique:()=>({uniqueItems:!0}),arrayNotEmpty:()=>({minItems:1}),arrayContains:(J)=>({contains:{enum:J.values}}),isNotEmptyObject:()=>({minProperties:1})};function rJ(J,Q){let $={direction:Q?.direction??"deserialize",groups:Q?.groups,whitelist:Q?.whitelist,processing:new Set,defKeyMap:new Map,defs:{},nameCounter:new Map,onUnmappedRule:Q?.onUnmappedRule};$.processing.add(J);let X=PJ(J,$);if($.processing.delete(J),$.defKeyMap.has(J))$.defs[$.defKeyMap.get(J)]=X;let Y={...X};if(Y.$schema="https://json-schema.org/draft/2020-12/schema",Object.keys($.defs).length>0)Y.$defs=$.defs;let M=J[FJ];if(M)for(let[j,Z]of Object.entries(M))if(j==="properties"||j==="$defs")Y[j]={...Y[j]??{},...Z};else if(j==="required")Y.required=[...new Set([...Y.required??[],...Z])];else Y[j]=Z;if(Q?.title)Y.title=Q.title;if(Q?.description)Y.description=Q.description;if(Q?.$id)Y.$id=Q.$id;return Y}function BJ(J,Q){let $=Q.defKeyMap.get(J);if($!==void 0)return $;let X=J.name||"Anonymous",Y=Q.nameCounter.get(X)??0;Q.nameCounter.set(X,Y+1);let M=Y===0?X:`${X}_${Y+1}`;return Q.defKeyMap.set(J,M),M}function N(J,Q){let $=Q.defKeyMap.get(J);if($!==void 0&&$ in Q.defs)return{$ref:`#/$defs/${$}`};if(Q.processing.has(J))return{$ref:`#/$defs/${BJ(J,Q)}`};let X=BJ(J,Q);Q.processing.add(J);let Y=PJ(J,Q);return Q.processing.delete(J),Q.defs[X]=Y,{$ref:`#/$defs/${X}`}}function PJ(J,Q){let X=J[T]?._merged??E(J),Y={},M=[];for(let[Z,H]of Object.entries(X)){let F=sJ(H,Z,Q.direction);if(F===null)continue;if(Q.groups){let U=H.expose.filter((z)=>{if(Q.direction==="deserialize"&&z.serializeOnly)return!1;if(Q.direction==="serialize"&&z.deserializeOnly)return!1;return!0});if(U.length>0){if(!U.some((P)=>{if(!P.groups||P.groups.length===0)return!0;return P.groups.some((W)=>Q.groups.includes(W))}))continue}else if(H.validation.length>0&&H.validation.every((z)=>z.groups&&z.groups.length>0)){if(!H.validation.some((P)=>P.groups.some((W)=>Q.groups.includes(W))))continue}}let B=tJ(H,Q,Z);if(Y[F]=B,!H.flags.isOptional)M.push(F)}let j={type:"object",properties:Y};if(M.length>0)j.required=M;if(Q.whitelist)j.unevaluatedProperties=!1;return j}function sJ(J,Q,$){if(J.exclude){if(!J.exclude.deserializeOnly&&!J.exclude.serializeOnly)return null;if($==="deserialize"&&!J.exclude.serializeOnly)return null;if($==="serialize"&&!J.exclude.deserializeOnly)return null}return J.expose.find((Y)=>{if($==="deserialize"&&Y.serializeOnly)return!1;if($==="serialize"&&Y.deserializeOnly)return!1;return!0})?.name??Q}function tJ(J,Q,$){if(J.type?.collection)return aJ(J,Q,$);if(J.type)return eJ(J,Q,$);let X=i(J.validation.filter((j)=>!j.each),Q.groups),Y=i(J.validation.filter((j)=>j.each),Q.groups),M=l(X,Q,$);if(Y.length>0){let j=l(Y,Q,$);if(Object.keys(j).length>0)M.items=j}if(J.flags.isNullable)y(M);return n(J,M)}function aJ(J,Q,$){let X=J.type.collection,Y;if(X==="Set"){let M;if(J.type.resolvedCollectionValue)M=N(J.type.resolvedCollectionValue,Q);if(Y={type:"array",uniqueItems:!0},M)Y.items=M}else{let M;if(J.type.resolvedCollectionValue)M=N(J.type.resolvedCollectionValue,Q);if(Y={type:"object"},M)Y.additionalProperties=M}if(J.flags.isNullable)y(Y);return n(J,Y)}function eJ(J,Q,$){let X;if(J.type.discriminator){let{property:M,subTypes:j}=J.type.discriminator;X={oneOf:j.map((H)=>{return{allOf:[N(H.value,Q),{properties:{[M]:{const:H.name}},required:[M]}]}})}}else{let M=J.type.resolvedClass??J.type.fn();X=N(M,Q)}if(J.type?.isArray||J.flags.validateNestedEach){let M={type:"array",items:X},j=i(J.validation.filter((H)=>!H.each),Q.groups),Z=l(j,Q,$);if(Z.minItems!==void 0)M.minItems=Z.minItems;if(Z.maxItems!==void 0)M.maxItems=Z.maxItems;if(Z.uniqueItems!==void 0)M.uniqueItems=Z.uniqueItems;if(J.flags.isNullable)y(M);return n(J,M)}if(J.flags.isNullable)if(X.$ref)X={oneOf:[X,{type:"null"}]};else if(X.oneOf)X={oneOf:[...X.oneOf,{type:"null"}]};else y(X);return n(J,X)}function i(J,Q){if(!Q)return J;return J.filter(($)=>{if(!$.groups||$.groups.length===0)return!0;return $.groups.some((X)=>Q.includes(X))})}function l(J,Q,$){let X={};for(let Y of J){let M=dJ[Y.rule.ruleName];if(!M){let Z=Y.rule.ruleName;if(Q?.onUnmappedRule)Q.onUnmappedRule(Z,$??"<unknown>");else if(!MJ.has(Z))MJ.add(Z),console.warn(`[baker] No JSON Schema mapping for rule "${Z}"`);continue}let j=M(Y.rule.constraints??{});if(!j)continue;Object.assign(X,j)}return X}function y(J){if(J.type)if(Array.isArray(J.type)){if(!J.type.includes("null"))J.type=[...J.type,"null"]}else J.type=J.type==="null"?["null"]:[J.type,"null"];else J.type=["null"]}function n(J,Q){if(J.schema==null)return Q;if(typeof J.schema==="function")return J.schema(Q);let $=J.schema;return Object.keys($).some((Y)=>lJ.has(Y))?{...Q,...$}:{...Q,...$}}function J2(J,Q){let $=typeof J==="string"?J:J.name,X=typeof J==="string"?Q:J.validate,Y=typeof J==="object"?J.constraints:void 0,M=typeof J==="object"?J.requiresType:void 0,j=g(X),Z=function(H){return X(H)};if(Z.emit=function(H,F){let B=F.addRef(X);if(j)return`if(!(await _refs[${B}](${H}))) ${F.fail($)};`;return`if(!_refs[${B}](${H})) ${F.fail($)};`},Z.ruleName=$,Z.isAsync=j,Y)Z.constraints=Y;if(M)Z.requiresType=M;return Z}export{rJ as toJsonSchema,iJ as serialize,oJ as deserialize,J2 as createRule,_J as configure,Q2 as arrayOf,w as SealError,X2 as Field,u as BakerValidationError};
226
-
227
- //# debugId=80279DF78DB18A8764756E2164756E21
228
- //# sourceMappingURL=index.js.map
225
+ `}else{let P=uJ(Q,q,J,$,Y);if(z)j+=`if (instance[${JSON.stringify(Q)}] !== undefined) {
226
+ `,j+=" "+P+`
227
+ `,j+=`}
228
+ `;else j+=P+`
229
+ `}return M+=F+j+H,M}function uJ(Q,J,$,X,Y){let B=`__bk$out[${JSON.stringify(J)}]`,q=$.transform.filter((Z)=>!Z.options?.deserializeOnly);if(q.length>0){let Z=[...q].reverse(),M=`instance[${JSON.stringify(Q)}]`;for(let F of Z){let H=X.length;X.push(F.fn);let j=`_refs[${H}]({value:${M},key:${JSON.stringify(Q)},obj:instance})`;M=Y&&b(F.fn)?`(await ${j})`:j}return`${B} = ${M};`}return`${B} = instance[${JSON.stringify(Q)}];`}function qJ(Q){let J=new Set;function $(X){if(J.has(X))return!0;J.add(X);let Y=X[k];if(Y)for(let B of Object.values(Y)){if(B.type?.fn){let q;try{q=B.type.fn()}catch(M){throw new O(`${X.name}: type function threw: ${M.message}`)}let Z=Array.isArray(q)?q[0]:q;if($(Z))return!0}if(B.type?.discriminator){for(let q of B.type.discriminator.subTypes)if($(q.value))return!0}}return J.delete(X),!1}return $(Q)}function jJ(Q,J){let $=J?`${J}.`:"";for(let[X,Y]of Object.entries(Q)){for(let Z of Y.expose)if(Z.deserializeOnly&&Z.serializeOnly)throw new O(`Invalid @Expose on field '${$}${X}': cannot have both deserializeOnly:true and serializeOnly:true on the same @Expose entry. Use separate @Expose decorators for each direction.`);let B=Y.expose.filter((Z)=>!Z.serializeOnly),q=Y.expose.filter((Z)=>!Z.deserializeOnly);YJ($+X,B,"deserialize"),YJ($+X,q,"serialize")}}function YJ(Q,J,$){for(let X=0;X<J.length;X++)for(let Y=X+1;Y<J.length;Y++){let B=J[X].groups??[],q=J[Y].groups??[];if(fJ(B,q)){let Z=new Set(q),M=B.length===0?[]:B.filter((F)=>Z.has(F));throw new O(`@Expose conflict on '${Q}': 2 @Expose stacks with '${$}' direction and overlapping groups [${M.join(", ")}]. Each direction must have at most one @Expose per group set.`)}}}function fJ(Q,J){if(Q.length===0&&J.length===0)return!0;if(Q.length===0||J.length===0)return!1;return Q.some(($)=>J.includes($))}var pJ=new Set(["__proto__","constructor","prototype"]),MJ=new Set([Number,String,Boolean,Date]);function EJ(Q){let J=`Circular dependency during seal: ${Q} is still being sealed`;return{_deserialize(){throw new O(J)},_serialize(){throw new O(J)},_isAsync:!1,_isSerializeAsync:!1}}function E(Q,J,$){let X=$??new Set;for(let Y of Object.values(Q)){if(J==="deserialize"&&Y.validation.some((q)=>q.rule.isAsync))return!0;if((J==="deserialize"?Y.transform.filter((q)=>!q.options?.serializeOnly):Y.transform.filter((q)=>!q.options?.deserializeOnly)).some((q)=>b(q.fn)))return!0;if(Y.type?.resolvedClass){let q=Y.type.resolvedClass;if(!X.has(q)){X.add(q);let Z=i(q);if(E(Z,J,X))return!0}}if(Y.type?.discriminator){for(let q of Y.type.discriminator.subTypes)if(!X.has(q.value)){X.add(q.value);let Z=i(q.value);if(E(Z,J,X))return!0}}}return!1}var o=!1;function s(){return o}var p=new Set;function NJ(){if(o)return;let Q=c();try{for(let J of G)v(J,Q)}catch(J){for(let $ of G)if(Object.hasOwn($,R))delete $[R];throw J}for(let J of G)p.add(J),Object.freeze(J[k]);G.clear(),o=!0}function yJ(Q){if(Object.hasOwn(Q,R))return;if(!Object.hasOwn(Q,k))return;let J=new Set(p),$=c();v(Q,$),p.add(Q),Object.freeze(Q[k]),G.delete(Q);let X=[...G].filter((Y)=>Object.hasOwn(Y,R)&&!J.has(Y));for(let Y of X)p.add(Y),Object.freeze(Y[k]),G.delete(Y)}function N(Q){let J=Q[R];if(!J)NJ(),J=Q[R];if(!J)yJ(Q),J=Q[R];if(!J)throw new O(`${Q.name} has no @Field decorators`);return J}function v(Q,J){if(Object.hasOwn(Q,R))return;let $=EJ(Q.name);Q[R]=$;let X=i(Q);for(let F of Object.keys(X))if(pJ.has(F))throw new O(`${Q.name}: field name '${F}' is not allowed (reserved property name)`);for(let[F,H]of Object.entries(X)){if(!H.type?.fn)continue;let j=H.type.fn();if(j===Map||j===Set){let _=j===Map?"Map":"Set",W={...H.type,collection:_,isArray:!1};if(H.type.collectionValue){let D=H.type.collectionValue();if(D!=null&&typeof D==="function"&&!MJ.has(D))W.resolvedCollectionValue=D}X[F]={...H,type:W};continue}let z=Array.isArray(j),L=z?j[0]:j;if(L==null||typeof L!=="function")throw new O(`${Q.name}: @Type/@Field type must return a constructor or [constructor], got ${String(L)}`);let P={...H.type,isArray:z};if(!MJ.has(L)){if(P.resolvedClass=L,!H.flags.validateNested||!H.flags.validateNestedEach){if(H.flags={...H.flags},!H.flags.validateNested)H.flags.validateNested=!0;if(z&&!H.flags.validateNestedEach)H.flags.validateNestedEach=!0}}X[F]={...H,type:P}}jJ(X,Q.name);let Y=qJ(Q);for(let F of Object.values(X)){if(F.type?.resolvedClass)v(F.type.resolvedClass,J);if(F.type?.resolvedCollectionValue)v(F.type.resolvedCollectionValue,J);if(F.type?.discriminator)for(let H of F.type.discriminator.subTypes)v(H.value,J)}let B=E(X,"deserialize"),q=E(X,"serialize"),Z=QJ(Q,X,J,Y,B),M=UJ(Q,X,J,q);Object.assign($,{_deserialize:Z,_serialize:M,_isAsync:B,_isSerializeAsync:q,_merged:X})}function i(Q){let J=[],$=Q;while($&&$!==Object){if(Object.hasOwn($,k))J.push($);let Y=Object.getPrototypeOf($);$=Y===$?null:Y}let X=Object.create(null);for(let Y of J){let B=Y[k];for(let[q,Z]of Object.entries(B))if(!X[q])X[q]={validation:[...Z.validation],transform:[...Z.transform],expose:[...Z.expose],exclude:Z.exclude,type:Z.type,flags:{...Z.flags}};else{let M=X[q],F=Z;for(let z of F.validation)if(!M.validation.some((L)=>L.rule===z.rule))M.validation.push(z);if(M.transform.length===0&&F.transform.length>0)M.transform=[...F.transform];if(M.expose.length===0&&F.expose.length>0)M.expose=[...F.expose];if(M.exclude===null&&F.exclude!==null)M.exclude=F.exclude;if(M.type===null&&F.type!==null)M.type=F.type;let H=M.flags,j=F.flags;if(j.isOptional!==void 0&&H.isOptional===void 0)H.isOptional=j.isOptional;if(j.isDefined!==void 0&&H.isDefined===void 0)H.isDefined=j.isDefined;if(j.validateIf!==void 0&&H.validateIf===void 0)H.validateIf=j.validateIf;if(j.isNullable!==void 0&&H.isNullable===void 0)H.isNullable=j.isNullable;if(j.validateNested!==void 0&&H.validateNested===void 0)H.validateNested=j.validateNested;if(j.validateNestedEach!==void 0&&H.validateNestedEach===void 0)H.validateNestedEach=j.validateNestedEach}}return X}function y(Q,J,$,X){let Y=N(Q);if(Y._isAsync)return Y._deserialize(J,$).then((q)=>{if(HJ(q))return K(q.data);return X(q)});let B=Y._deserialize(J,$);if(HJ(B))return K(B.data);return X(B)}function nJ(Q,J,$){return y(Q,J,$,(X)=>X)}function mJ(Q,...J){if(typeof Q==="function"&&J.length>=1){let $=J[0];if(!($!=null&&typeof $==="function"&&("emit"in $)&&("ruleName"in $)))return y(Q,$,J[1],()=>!0)}return cJ(Q,J)}function cJ(Q,J){if(J.some((Y)=>Y.isAsync))return oJ(Q,J);let X=[];for(let Y of J)if(!Y(Q))X.push({path:"",code:Y.ruleName});return X.length?K(X):!0}async function oJ(Q,J){let $=[];for(let X of J)if(!await X(Q))$.push({path:"",code:X.ruleName});return $.length?K($):!0}function iJ(Q,J){if(Q==null||typeof Q!=="object")throw new O("serialize: expected a class instance, got "+(Q===null?"null":typeof Q));let $=Q.constructor;if(typeof $!=="function")throw new O("serialize: instance has no constructor");let X=N($);if(X._isSerializeAsync)return X._serialize(Q,J);return X._serialize(Q,J)}function lJ(Q,J){let $=typeof Q==="string"?Q:Q.name,X=typeof Q==="string"?J:Q.validate,Y=typeof Q==="object"?Q.constraints:void 0,B=typeof Q==="object"?Q.requiresType:void 0,q=b(X),Z=function(M){return X(M)};if(Z.emit=function(M,F){let H=F.addRef(X);if(q)return`if(!(await _refs[${H}](${M}))) ${F.fail($)};`;return`if(!_refs[${H}](${M})) ${F.fail($)};`},Z.ruleName=$,Z.isAsync=q,Y)Z.constraints=Y;if(B)Z.requiresType=B;return Z}export{mJ as validate,iJ as serialize,WJ as isBakerError,nJ as deserialize,lJ as createRule,LJ as configure,dJ as arrayOf,O as SealError,sJ as Field};