@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.
- package/CHANGELOG.md +45 -0
- package/README.md +256 -159
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/src/baker.d.ts +31 -0
- package/dist/src/baker.js +1 -0
- package/dist/src/configure.d.ts +3 -8
- package/dist/src/configure.js +1 -1
- package/dist/src/create-rule.d.ts +2 -1
- package/dist/src/decorators/field.d.ts +2 -1
- package/dist/src/decorators/field.js +1 -1
- package/dist/src/decorators/index.d.ts +0 -1
- package/dist/src/decorators/index.js +1 -1
- package/dist/src/enums.d.ts +51 -0
- package/dist/src/enums.js +1 -0
- package/dist/src/errors.d.ts +1 -1
- package/dist/src/errors.js +1 -1
- package/dist/src/functions/check-call-options.d.ts +1 -1
- package/dist/src/functions/check-call-options.js +1 -1
- package/dist/src/functions/deserialize.d.ts +1 -1
- package/dist/src/functions/serialize.d.ts +1 -1
- package/dist/src/rule-plan.d.ts +5 -3
- package/dist/src/rule-plan.js +1 -1
- package/dist/src/rules/array.js +1 -1
- package/dist/src/rules/date.js +1 -1
- package/dist/src/rules/locales.js +1 -1
- package/dist/src/rules/number.js +1 -1
- package/dist/src/rules/object.js +1 -1
- package/dist/src/rules/string.js +5 -5
- package/dist/src/rules/typechecker.js +5 -5
- package/dist/src/seal/deserialize-builder.js +230 -230
- package/dist/src/seal/enums.d.ts +8 -0
- package/dist/src/seal/enums.js +1 -0
- package/dist/src/seal/expose-validator.js +1 -1
- package/dist/src/seal/seal.d.ts +10 -21
- package/dist/src/seal/seal.js +1 -1
- package/dist/src/seal/serialize-builder.js +8 -8
- package/dist/src/seal/validate-meta.js +1 -1
- package/dist/src/symbols.d.ts +1 -1
- package/dist/src/types.d.ts +15 -14
- package/package.json +1 -1
- package/dist/src/decorators/recipe.d.ts +0 -17
- package/dist/src/decorators/recipe.js +0 -1
- package/dist/src/registry.d.ts +0 -8
- package/dist/src/registry.js +0 -1
- package/dist/src/seal/seal-state.d.ts +0 -10
- package/dist/src/seal/seal-state.js +0 -1
|
@@ -1,265 +1,265 @@
|
|
|
1
|
-
import{err as
|
|
2
|
-
if(${
|
|
3
|
-
else{var ${$}={path:${W},code:${
|
|
4
|
-
if(${
|
|
5
|
-
if(${
|
|
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
|
|
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)${
|
|
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
|
-
${
|
|
13
|
-
`;if(j){if(
|
|
14
|
-
`}else
|
|
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)
|
|
17
|
-
`;
|
|
18
|
-
`;if($){
|
|
19
|
-
`;
|
|
20
|
-
`;
|
|
21
|
-
`;
|
|
22
|
-
`;
|
|
23
|
-
`}if(U?.whitelist){const
|
|
24
|
-
`;else
|
|
25
|
-
`}let
|
|
26
|
-
`;
|
|
27
|
-
`;
|
|
28
|
-
`}for(const[
|
|
29
|
-
`;
|
|
30
|
-
`;if($)
|
|
31
|
-
`;const
|
|
32
|
-
`;const O=
|
|
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 $},
|
|
36
|
-
`;
|
|
37
|
-
`;
|
|
38
|
-
`;return
|
|
39
|
-
`;$+=U;return $},
|
|
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},
|
|
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
|
|
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
|
|
47
|
-
`}else
|
|
48
|
-
`;let
|
|
49
|
-
`;
|
|
50
|
-
`}let O=
|
|
51
|
-
`,S=
|
|
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
|
-
`+
|
|
54
|
-
`}else if(
|
|
55
|
-
`}else for(const
|
|
56
|
-
`}}if(U.type?.collection){Q+=$.validateOnly?
|
|
57
|
-
`;return Q}Q+=
|
|
58
|
-
`;if(
|
|
59
|
-
`;for(const
|
|
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
|
|
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
|
|
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})) { ${
|
|
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 { ${
|
|
69
|
+
else { ${F} }
|
|
70
70
|
`;case"date":return` ${W} = new Date(${W});
|
|
71
|
-
if (isNaN(${W}.getTime())) { ${
|
|
72
|
-
`;default:throw new
|
|
73
|
-
`;Q+=`if (${
|
|
74
|
-
`;Q+=
|
|
75
|
-
`;Q+=`if (!${
|
|
76
|
-
`;if(
|
|
77
|
-
`;Q+=
|
|
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 (${
|
|
79
|
+
`}else{Q+=`if (${J}) ${A.fail(_)};
|
|
80
80
|
`;Q+=`else {
|
|
81
|
-
`;if(
|
|
82
|
-
`;Q+=
|
|
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&&(
|
|
85
|
-
`;Q+=
|
|
86
|
-
`;Q+=
|
|
87
|
-
`}else{Q+=`if (${
|
|
88
|
-
`;Q+=
|
|
89
|
-
`}return Q}function
|
|
90
|
-
`}else if(j.validateOnly)Q+=
|
|
91
|
-
`;Q+=
|
|
92
|
-
`}else{Q+=
|
|
93
|
-
`}return Q}function
|
|
94
|
-
`;Q+=`var ${
|
|
95
|
-
`;Q+=`if (${O} === 0) ${
|
|
96
|
-
`;for(const
|
|
97
|
-
`:"",S=
|
|
98
|
-
`:"",R=[{guard:`Array.isArray(${W})`,idxVar:
|
|
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
|
-
`},{
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
`;
|
|
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
|
|
110
|
-
`;const
|
|
111
|
-
`;
|
|
112
|
-
`;
|
|
113
|
-
`;
|
|
114
|
-
`;if(j){
|
|
115
|
-
`;
|
|
116
|
-
`;
|
|
117
|
-
`;
|
|
118
|
-
`}else{
|
|
119
|
-
`;
|
|
120
|
-
`;
|
|
121
|
-
`;
|
|
122
|
-
`;
|
|
123
|
-
`}else
|
|
124
|
-
`;const
|
|
125
|
-
`;
|
|
126
|
-
`;for(const O of
|
|
127
|
-
`}
|
|
128
|
-
`;
|
|
129
|
-
`}
|
|
130
|
-
`}else{
|
|
131
|
-
`;if(
|
|
132
|
-
`;
|
|
133
|
-
`;
|
|
134
|
-
`;
|
|
135
|
-
`;
|
|
136
|
-
`;
|
|
137
|
-
`;if(j){
|
|
138
|
-
`;
|
|
139
|
-
`;
|
|
140
|
-
`;
|
|
141
|
-
`}else{
|
|
142
|
-
`;
|
|
143
|
-
`;
|
|
144
|
-
`;
|
|
145
|
-
`;
|
|
146
|
-
`}else{const
|
|
147
|
-
`;
|
|
148
|
-
`;
|
|
149
|
-
`;
|
|
150
|
-
`;
|
|
151
|
-
`;
|
|
152
|
-
`;
|
|
153
|
-
`}
|
|
154
|
-
`}return
|
|
155
|
-
`;let Q="";const
|
|
156
|
-
`;Q+=`switch (${X.disc}${
|
|
157
|
-
`;for(const
|
|
158
|
-
`;Q+=` var ${X.result}${
|
|
159
|
-
`;Q+=
|
|
160
|
-
`}const
|
|
161
|
-
`;else if($.validateOnly)Q+=` default: return [{path:${
|
|
162
|
-
`;else Q+=` default: return err([{path:${
|
|
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
|
|
165
|
-
`}}else{const
|
|
166
|
-
`;const
|
|
167
|
-
`;Q+=` for (var ${
|
|
168
|
-
`;Q+=` var ${X.result}${
|
|
169
|
-
`;Q+=` if (isErr(${X.result}${
|
|
170
|
-
`;if(j){Q+=` var ${X.errors}${
|
|
171
|
-
`;Q+=` var __bk$pp${
|
|
172
|
-
`;Q+=` for (var ${X.nestedIdx}${
|
|
173
|
-
`;Q+=" "+
|
|
174
|
-
`}else{Q+=` var ${X.errors}${
|
|
175
|
-
`;Q+=` var __bk$pp${
|
|
176
|
-
`;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}${
|
|
179
|
-
`;Q+=`} else { ${
|
|
180
|
-
`}else{const
|
|
181
|
-
`;Q+=` var ${X.result}${
|
|
182
|
-
`;Q+=
|
|
183
|
-
`}}return Q}function
|
|
184
|
-
var ${X.errors}${
|
|
185
|
-
var __bk$pp${
|
|
186
|
-
for (var ${X.nestedIdx}${
|
|
187
|
-
`+
|
|
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
|
|
190
|
-
var ${X.errors}${
|
|
191
|
-
var __bk$pp${
|
|
192
|
-
`+
|
|
193
|
-
`}function
|
|
194
|
-
`;
|
|
195
|
-
`;for(const
|
|
196
|
-
`;if(O){const
|
|
197
|
-
`;
|
|
198
|
-
`}const
|
|
199
|
-
`;else
|
|
200
|
-
`;
|
|
201
|
-
`}else{const
|
|
202
|
-
`;const
|
|
203
|
-
`;if(
|
|
204
|
-
`;
|
|
205
|
-
`;
|
|
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+=
|
|
236
|
-
`}else{const
|
|
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
|
|
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+=" "+
|
|
241
|
-
`}else 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
|
-
|
|
216
|
+
`;Y+=`} else { ${L.fail("isArray")}; }
|
|
248
217
|
`}else{Y+=`if (${W} != null && typeof ${W} === 'object' && !Array.isArray(${W})) {
|
|
249
|
-
`;if(H){const
|
|
250
|
-
`;Y
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
`;
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
`;if(
|
|
261
|
-
`;
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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};
|