@zipbul/baker 0.1.2 → 1.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.
- package/README.ko.md +368 -280
- package/README.md +407 -280
- package/dist/index-70ggmxsa.js +6 -0
- package/dist/index-gcptd79v.js +6 -0
- package/dist/index-xdn55cz3.js +4 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +211 -155
- package/dist/src/collect.d.ts +3 -3
- package/dist/src/configure.d.ts +33 -0
- package/dist/src/create-rule.d.ts +10 -19
- package/dist/src/decorators/field.d.ts +86 -0
- package/dist/src/decorators/index.d.ts +2 -14
- package/dist/src/decorators/index.js +2 -2
- package/dist/src/errors.d.ts +17 -17
- package/dist/src/functions/deserialize.d.ts +6 -4
- package/dist/src/functions/serialize.d.ts +5 -4
- package/dist/src/functions/to-json-schema.d.ts +11 -5
- package/dist/src/interfaces.d.ts +9 -30
- package/dist/src/registry.d.ts +4 -12
- package/dist/src/rules/index.d.ts +2 -0
- package/dist/src/rules/index.js +11 -2
- package/dist/src/rules/object.d.ts +1 -1
- package/dist/src/seal/circular-analyzer.d.ts +5 -9
- package/dist/src/seal/expose-validator.d.ts +6 -6
- package/dist/src/seal/index.d.ts +1 -1
- package/dist/src/seal/seal.d.ts +30 -15
- package/dist/src/seal/serialize-builder.d.ts +2 -2
- package/dist/src/symbols.d.ts +5 -5
- package/dist/src/symbols.js +2 -2
- package/dist/src/types.d.ts +38 -32
- package/dist/src/utils.d.ts +2 -0
- package/package.json +1 -1
- package/dist/index-3gcf6hkv.js +0 -5
- package/dist/index-mx6gnk4h.js +0 -6
- package/dist/index-wy5sh2nx.js +0 -15
- package/dist/src/decorators/array.d.ts +0 -13
- package/dist/src/decorators/common.d.ts +0 -39
- package/dist/src/decorators/date.d.ts +0 -5
- package/dist/src/decorators/locales.d.ts +0 -9
- package/dist/src/decorators/nested.d.ts +0 -17
- package/dist/src/decorators/number.d.ts +0 -15
- package/dist/src/decorators/object.d.ts +0 -9
- package/dist/src/decorators/schema.d.ts +0 -13
- package/dist/src/decorators/string.d.ts +0 -72
- package/dist/src/decorators/transform.d.ts +0 -68
- package/dist/src/decorators/typechecker.d.ts +0 -18
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{e as Q}from"./index-70ggmxsa.js";var T=new Set;function U(b,G){if(!Object.prototype.hasOwnProperty.call(b,Q))b[Q]=Object.create(null),T.add(b);let j=b[Q];return j[G]??={validation:[],transform:[],expose:[],exclude:null,type:null,flags:{},schema:null}}function X(b){return b[Symbol.toStringTag]==="AsyncFunction"}var $=Symbol.for("baker:arrayOf");function W(...b){let G={rules:b};return G[$]=!0,G}function v(b){return typeof b==="object"&&b!==null&&b[$]===!0}var N=new Set(["type","discriminator","keepDiscriminatorProperty","rules","optional","nullable","name","deserializeName","serializeName","exclude","groups","when","schema","transform","transformDirection","message","context","mapValue","setValue"]);function Z(b){if(typeof b==="function")return!1;if(typeof b!=="object"||b===null)return!1;if(v(b))return!1;let G=Object.keys(b);if(G.length===0)return!0;return G.some((j)=>N.has(j))}function P(b){if(b.length===0)return{rules:[],options:{}};if(b.length===1&&Z(b[0])){let j=b[0];return{rules:j.rules??[],options:j}}let G=b[b.length-1];if(Z(G)){let j=G,B=b.slice(0,-1);if(j.rules)B=[...B,...j.rules];return{rules:B,options:j}}return{rules:b,options:{}}}function S(b,G,j){for(let B of G)if(v(B))for(let J of B.rules){let q={rule:J,each:!0,groups:j.groups};if(j.message!==void 0)q.message=j.message;if(j.context!==void 0)q.context=j.context;b.validation.push(q)}else{let J={rule:B,groups:j.groups};if(j.message!==void 0)J.message=j.message;if(j.context!==void 0)J.context=j.context;b.validation.push(J)}}function V(b,G){if(G.name)b.expose.push({name:G.name,groups:G.groups});else if(G.deserializeName||G.serializeName){if(G.deserializeName)b.expose.push({name:G.deserializeName,deserializeOnly:!0,groups:G.groups});if(G.serializeName)b.expose.push({name:G.serializeName,serializeOnly:!0,groups:G.groups})}else if(G.groups)b.expose.push({groups:G.groups});else b.expose.push({})}function H(b,G){if(!G.transform)return;let j=G.transform,J=X(j)?async(z)=>j({value:z.value,key:z.key,obj:z.obj,direction:z.type}):(z)=>j({value:z.value,key:z.key,obj:z.obj,direction:z.type});if(G.transformDirection&&G.transformDirection!=="deserializeOnly"&&G.transformDirection!=="serializeOnly")throw Error(`Invalid transformDirection: "${G.transformDirection}". Expected 'deserializeOnly' or 'serializeOnly'.`);let q={};if(G.transformDirection==="deserializeOnly")q.deserializeOnly=!0;if(G.transformDirection==="serializeOnly")q.serializeOnly=!0;b.transform.push({fn:J,options:Object.keys(q).length>0?q:void 0})}function d(...b){return(G,j)=>{let B=G.constructor,q=U(B,j),{rules:z,options:w}=P(b);if(S(q,z,w),w.optional)q.flags.isOptional=!0;if(w.nullable)q.flags.isNullable=!0;if(w.when)q.flags.validateIf=w.when;if(w.type)q.type={fn:w.type,discriminator:w.discriminator,keepDiscriminatorProperty:w.keepDiscriminatorProperty,collectionValue:w.mapValue??w.setValue};if(V(q,w),w.exclude){if(w.exclude===!0)q.exclude={};else if(w.exclude==="deserializeOnly")q.exclude={deserializeOnly:!0};else if(w.exclude==="serializeOnly")q.exclude={serializeOnly:!0}}if(H(q,w),w.schema)if(typeof q.schema==="function");else q.schema={...q.schema??{},...w.schema}}}
|
|
3
|
+
export{T as a,X as b,W as c,d};
|
|
4
|
+
|
|
5
|
+
//# debugId=31CC953F620CB89C64756E2164756E21
|
|
6
|
+
//# sourceMappingURL=index-gcptd79v.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
export { seal } from './src/seal/seal';
|
|
2
1
|
export { deserialize } from './src/functions/deserialize';
|
|
3
2
|
export { serialize } from './src/functions/serialize';
|
|
4
3
|
export { toJsonSchema } from './src/functions/to-json-schema';
|
|
4
|
+
export { configure } from './src/configure';
|
|
5
5
|
export { createRule } from './src/create-rule';
|
|
6
|
-
export {
|
|
7
|
-
export
|
|
6
|
+
export { Field, arrayOf } from './src/decorators/index';
|
|
7
|
+
export type { FieldOptions, FieldTransformParams, JsonSchemaOverride, ArrayOfMarker } from './src/decorators/index';
|
|
8
8
|
export type { BakerError } from './src/errors';
|
|
9
9
|
export { BakerValidationError, SealError } from './src/errors';
|
|
10
|
-
export type { JsonSchema202012 } from './src/types';
|
|
11
|
-
export type {
|
|
10
|
+
export type { JsonSchema202012, EmittableRule } from './src/types';
|
|
11
|
+
export type { BakerConfig, ConfigureResult } from './src/configure';
|
|
12
|
+
export type { RuntimeOptions } from './src/interfaces';
|
|
12
13
|
export type { ToJsonSchemaOptions } from './src/functions/to-json-schema';
|
package/dist/index.js
CHANGED
|
@@ -1,172 +1,228 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
3
|
-
`;if(
|
|
4
|
-
`,
|
|
5
|
-
`;if(
|
|
6
|
-
|
|
7
|
-
`,
|
|
8
|
-
`}if(
|
|
9
|
-
`;else
|
|
10
|
-
`}if(Object.values(Q).some((L)=>{let
|
|
11
|
-
`,
|
|
12
|
-
`;for(let[L,
|
|
13
|
-
`;
|
|
14
|
-
`,
|
|
15
|
-
|
|
16
|
-
`;else
|
|
17
|
-
|
|
18
|
-
`,
|
|
19
|
-
`;
|
|
20
|
-
|
|
21
|
-
`,
|
|
22
|
-
|
|
23
|
-
`;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
`,
|
|
28
|
-
|
|
29
|
-
`;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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) {
|
|
17
|
+
`,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) {
|
|
20
|
+
`,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")};
|
|
25
|
+
`;return X+=`else {
|
|
26
|
+
`,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);})) {
|
|
37
39
|
${Q}
|
|
38
40
|
}
|
|
39
|
-
`}function
|
|
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});
|
|
40
42
|
`;case"number":return` ${Q} = Number(${Q});
|
|
41
|
-
if (isNaN(${Q})) { ${
|
|
43
|
+
if (isNaN(${Q})) { ${j} }
|
|
42
44
|
`;case"boolean":return` if (${Q} === 'true' || ${Q} === '1' || ${Q} === 1) ${Q} = true;
|
|
43
45
|
else if (${Q} === 'false' || ${Q} === '0' || ${Q} === 0) ${Q} = false;
|
|
44
|
-
else { ${
|
|
46
|
+
else { ${j} }
|
|
45
47
|
`;case"date":return` ${Q} = new Date(${Q});
|
|
46
|
-
if (isNaN(${Q}.getTime())) { ${
|
|
47
|
-
`;default:
|
|
48
|
-
`+
|
|
49
|
-
`}for(let
|
|
50
|
-
`+
|
|
51
|
-
`}for(let
|
|
52
|
-
`+
|
|
53
|
-
`}return
|
|
54
|
-
`,j+=`if (${
|
|
55
|
-
`,j+=
|
|
56
|
-
`,j+=`if (!${
|
|
57
|
-
`;let
|
|
58
|
-
`,j+=
|
|
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};
|
|
59
61
|
`,j+=`}
|
|
60
|
-
`}else{j+=`if (${
|
|
62
|
+
`}else{j+=`if (${H}) ${B.fail(F)};
|
|
61
63
|
`,j+=`else {
|
|
62
|
-
`;let
|
|
63
|
-
`,j+=
|
|
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};
|
|
64
66
|
`,j+=`}
|
|
65
|
-
`}else if(
|
|
66
|
-
`,j+=
|
|
67
|
-
`,j+=
|
|
68
|
-
`;else j+=`if (${
|
|
69
|
-
`,j+=
|
|
70
|
-
|
|
71
|
-
`;else{let
|
|
72
|
-
`;for(let
|
|
73
|
-
`;j+=`if (
|
|
74
|
-
`}else{for(let
|
|
75
|
-
`;j
|
|
76
|
-
`}for(let
|
|
77
|
-
`:"",
|
|
78
|
-
`:""
|
|
79
|
-
`,
|
|
80
|
-
`,
|
|
81
|
-
`,
|
|
82
|
-
|
|
83
|
-
`,
|
|
84
|
-
`,
|
|
85
|
-
`,j+=
|
|
86
|
-
`,j+=`
|
|
87
|
-
`,j+=`
|
|
88
|
-
`,j+=`} else
|
|
89
|
-
|
|
90
|
-
`,j+=`
|
|
91
|
-
`,j+=
|
|
92
|
-
`,j+=`
|
|
93
|
-
`,j+=`
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
`,
|
|
98
|
-
`,
|
|
99
|
-
`,
|
|
100
|
-
`,
|
|
101
|
-
`,
|
|
102
|
-
|
|
103
|
-
`,
|
|
104
|
-
|
|
105
|
-
`,
|
|
106
|
-
`;
|
|
107
|
-
`,
|
|
108
|
-
`,
|
|
109
|
-
|
|
110
|
-
`;let
|
|
111
|
-
`,
|
|
112
|
-
`;for(let
|
|
113
|
-
|
|
114
|
-
`,
|
|
115
|
-
`}
|
|
116
|
-
|
|
117
|
-
`,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
`,
|
|
122
|
-
`,
|
|
123
|
-
`,
|
|
124
|
-
`,q)
|
|
125
|
-
`,
|
|
126
|
-
|
|
127
|
-
`,
|
|
128
|
-
`;else
|
|
129
|
-
`,
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
`,
|
|
133
|
-
`,
|
|
134
|
-
|
|
135
|
-
`,
|
|
136
|
-
|
|
137
|
-
`}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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;
|
|
145
|
+
`}if(Z+=` default: ${Y.fail("invalidDiscriminator")};
|
|
146
|
+
`,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}); }
|
|
161
|
+
`,Z+=` }
|
|
162
|
+
`,Z+=` ${q.out}[${JSON.stringify(J)}] = ${q.arr}${H};
|
|
163
|
+
`,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});
|
|
141
171
|
}
|
|
142
|
-
} else {
|
|
143
|
-
`;else return` if (_isErr(${
|
|
144
|
-
var
|
|
145
|
-
return _err([{path:${JSON.stringify(J+".")}
|
|
146
|
-
} else {
|
|
147
|
-
`}function
|
|
148
|
-
`;if(
|
|
149
|
-
`,Object.values(Q).some((
|
|
150
|
-
`,
|
|
151
|
-
`;for(let[
|
|
152
|
-
`,
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
`;
|
|
156
|
-
|
|
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) {
|
|
194
|
+
${P} = null;
|
|
195
|
+
}
|
|
196
|
+
`;else U=`if (instance[${JSON.stringify(J)}] != null) {
|
|
197
|
+
${L}
|
|
198
|
+
} else {
|
|
199
|
+
${P} = instance[${JSON.stringify(J)}];
|
|
200
|
+
}
|
|
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}
|
|
157
213
|
} else if (instance[${JSON.stringify(J)}] === null) {
|
|
158
|
-
${
|
|
214
|
+
${W} = null;
|
|
159
215
|
}
|
|
160
|
-
`;else
|
|
161
|
-
${
|
|
216
|
+
`;else U=`if (instance[${JSON.stringify(J)}] != null) {
|
|
217
|
+
${L}
|
|
162
218
|
} else {
|
|
163
|
-
${
|
|
219
|
+
${W} = instance[${JSON.stringify(J)}];
|
|
164
220
|
}
|
|
165
|
-
`}else{let
|
|
166
|
-
`,
|
|
167
|
-
`,
|
|
168
|
-
`;else
|
|
169
|
-
`}return Y+=U+H+j,Y}function NJ(J,Q,Z,$,X){let q=`__bk$out[${JSON.stringify(Q)}]`,B=Z.transform.filter((Y)=>!Y.options?.deserializeOnly);if(B.length>0){let Y=`instance[${JSON.stringify(J)}]`;for(let U of B){let j=$.length;$.push(U.fn);let H=`_refs[${j}]({value:${Y},key:${JSON.stringify(J)},obj:instance,type:'serialize'})`;Y=X&&U.fn.constructor?.name==="AsyncFunction"?`(await ${H})`:H}return`${q} = ${Y};`}return`${q} = instance[${JSON.stringify(J)}];`}function WJ(J,Q,Z){if(Z?.enableCircularCheck===!0)return!0;if(Z?.enableCircularCheck===!1)return!1;let $=new Set;function X(q){if($.has(q))return!0;$.add(q);let B=q[C];if(B)for(let Y of Object.values(B)){if(Y.type?.fn){let U=Y.type.fn();if(X(U))return!0}if(Y.type?.discriminator){for(let U of Y.type.discriminator.subTypes)if(X(U.value))return!0}}return $.delete(q),!1}return X(J)}function FJ(J,Q){let Z=Q?`${Q}.`:"";for(let[$,X]of Object.entries(J)){for(let Y of X.expose)if(Y.deserializeOnly&&Y.serializeOnly)throw new R(`Invalid @Expose on field '${Z}${$}': cannot have both deserializeOnly:true and serializeOnly:true on the same @Expose entry. Use separate @Expose decorators for each direction.`);let q=X.expose.filter((Y)=>!Y.serializeOnly),B=X.expose.filter((Y)=>!Y.deserializeOnly);HJ(Z+$,q,"deserialize"),HJ(Z+$,B,"serialize")}}function HJ(J,Q,Z){for(let $=0;$<Q.length;$++)for(let X=$+1;X<Q.length;X++){let q=Q[$].groups??[],B=Q[X].groups??[];if(KJ(q,B)){let Y=q.length===0?[]:q.filter((U)=>B.includes(U));throw new R(`@Expose conflict on '${J}': 2 @Expose stacks with '${Z}' direction and overlapping groups [${Y.join(", ")}]. Each direction must have at most one @Expose per group set.`)}}}function KJ(J,Q){if(J.length===0&&Q.length===0)return!0;if(J.length===0||Q.length===0)return!1;return J.some((Z)=>Q.includes(Z))}function n(J,Q,Z){for(let $ of Object.values(J)){if(Q==="deserialize"&&$.validation.some((q)=>q.rule.isAsync))return!0;if((Q==="deserialize"?$.transform.filter((q)=>!q.options?.serializeOnly):$.transform.filter((q)=>!q.options?.deserializeOnly)).some((q)=>q.fn.constructor?.name==="AsyncFunction"))return!0;if($.type?.fn){let q=$.type.fn(),B=Z??new Set;if(!B.has(q)){B.add(q);let Y=f(q);if(n(Y,Q,B))return!0}}if($.type?.discriminator)for(let q of $.type.discriminator.subTypes){let B=Z??new Set;if(!B.has(q.value)){B.add(q.value);let Y=f(q.value);if(n(Y,Q,B))return!0}}}return!1}var MJ=!1;function vJ(J){if(MJ)throw new R("already sealed: seal() must be called exactly once");for(let Q of PJ)r(Q,J);MJ=!0}function r(J,Q){if(Object.prototype.hasOwnProperty.call(J,A))return;let Z={_deserialize:()=>{throw new R("seal in progress")},_serialize:()=>{throw new R("seal in progress")},_isAsync:!1,_isSerializeAsync:!1};J[A]=Z;let $=f(J),X=["__proto__","constructor","prototype"];for(let W of Object.keys($))if(X.includes(W))throw new R(`${J.name}: field name '${W}' is not allowed (reserved property name)`);for(let[W,M]of Object.entries($))if(M.type&&!M.flags.validateNested&&M.transform.filter((O)=>!O.options?.serializeOnly).length===0)console.warn(`[baker] ${J.name}.${W}: @Type without @ValidateNested \u2014 nested DTO will not be validated during deserialization. Add @ValidateNested() to enable recursive validation.`);FJ($,J.name);let q=WJ(J,$,Q);for(let W of Object.values($)){if(W.type?.fn){let M=W.type.fn();r(M,Q)}if(W.type?.discriminator)for(let M of W.type.discriminator.subTypes)r(M.value,Q)}let B=n($,"deserialize"),Y=n($,"serialize"),U=YJ(J,$,Q,q,B),j=UJ(J,$,Q,Y),H={_deserialize:U,_serialize:j,_isAsync:B,_isSerializeAsync:Y};if(Q?.debug)H._source={deserialize:U.__bakerSource??"",serialize:j.__bakerSource??""};Object.assign(Z,H)}function f(J){let Q=[],Z=J;while(Z&&Z!==Object){if(Object.hasOwn(Z,C))Q.push(Z);let X=Object.getPrototypeOf(Z);Z=X===Z?null:X}let $=Object.create(null);for(let X of Q){let q=X[C];for(let[B,Y]of Object.entries(q))if(!$[B])$[B]={validation:[...Y.validation],transform:[...Y.transform],expose:[...Y.expose],exclude:Y.exclude,type:Y.type,flags:{...Y.flags},schema:typeof Y.schema==="function"?Y.schema:Y.schema?{...Y.schema}:null};else{let U=$[B],j=Y;for(let M of j.validation)if(!U.validation.some((O)=>O.rule===M.rule))U.validation.push(M);if(U.transform.length===0&&j.transform.length>0)U.transform=[...j.transform];if(U.expose.length===0&&j.expose.length>0)U.expose=[...j.expose];if(U.exclude===null&&j.exclude!==null)U.exclude=j.exclude;if(U.type===null&&j.type!==null)U.type=j.type;let H=U.flags,W=j.flags;if(W.isOptional!==void 0&&H.isOptional===void 0)H.isOptional=W.isOptional;if(W.isDefined!==void 0&&H.isDefined===void 0)H.isDefined=W.isDefined;if(W.validateIf!==void 0&&H.validateIf===void 0)H.validateIf=W.validateIf;if(W.isNullable!==void 0&&H.isNullable===void 0)H.isNullable=W.isNullable;if(W.validateNested!==void 0&&H.validateNested===void 0)H.validateNested=W.validateNested;if(W.validateNestedEach!==void 0&&H.validateNestedEach===void 0)H.validateNestedEach=W.validateNestedEach;if(U.schema==null&&j.schema!=null)U.schema=typeof j.schema==="function"?j.schema:{...j.schema};else if(U.schema!=null&&j.schema!=null){if(typeof U.schema==="function");else if(typeof j.schema==="function");else for(let[M,O]of Object.entries(j.schema))if(!(M in U.schema))U.schema[M]=O}}}return $}import{isErr as uJ}from"@zipbul/result";async function CJ(J,Q,Z){let $=J[A];if(!$)throw new R(`not sealed: ${J.name}. Call seal() before deserialize()`);let X=await $._deserialize(Q,Z);if(uJ(X))throw new t(X.data,J.name);return X}async function fJ(J,Q){let Z=J.constructor,$=Z[A];if(!$)throw new R(`not sealed: ${Z.name}. Call seal() before serialize()`);return await $._serialize(J,Q)}var pJ=new Set(["allOf","anyOf","oneOf","not","if","then","else"]),xJ={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 yJ(J,Q){let Z={direction:Q?.direction??"deserialize",groups:Q?.groups,whitelist:Q?.whitelist,processing:new Set,defKeyMap:new Map,defs:{},nameCounter:new Map};Z.processing.add(J);let $=wJ(J,Z);if(Z.processing.delete(J),Z.defKeyMap.has(J))Z.defs[Z.defKeyMap.get(J)]=$;let X={...$};if(X.$schema="https://json-schema.org/draft/2020-12/schema",Object.keys(Z.defs).length>0)X.$defs=Z.defs;let q=J[_J];if(q)Object.assign(X,q);return X}function LJ(J,Q){let Z=Q.defKeyMap.get(J);if(Z!==void 0)return Z;let $=J.name||"Anonymous",X=Q.nameCounter.get($)??0;Q.nameCounter.set($,X+1);let q=X===0?$:`${$}_${X+1}`;return Q.defKeyMap.set(J,q),q}function OJ(J,Q){let Z=Q.defKeyMap.get(J);if(Z!==void 0&&Z in Q.defs)return{$ref:`#/$defs/${Z}`};if(Q.processing.has(J))return{$ref:`#/$defs/${LJ(J,Q)}`};let $=LJ(J,Q);Q.processing.add(J);let X=wJ(J,Q);return Q.processing.delete(J),Q.defs[$]=X,{$ref:`#/$defs/${$}`}}function wJ(J,Q){let Z=f(J),$={},X=[];for(let[B,Y]of Object.entries(Z)){let U=nJ(Y,B,Q.direction);if(U===null)continue;if(Q.groups){let H=Y.expose.filter((W)=>{if(Q.direction==="deserialize"&&W.serializeOnly)return!1;if(Q.direction==="serialize"&&W.deserializeOnly)return!1;return!0});if(H.length>0){if(!H.some((M)=>{if(!M.groups||M.groups.length===0)return!0;return M.groups.some((O)=>Q.groups.includes(O))}))continue}}let j=lJ(Y,Q);if($[U]=j,!Y.flags.isOptional)X.push(U)}let q={type:"object",properties:$};if(X.length>0)q.required=X;if(Q.whitelist)q.unevaluatedProperties=!1;return q}function nJ(J,Q,Z){if(J.exclude){if(!J.exclude.deserializeOnly&&!J.exclude.serializeOnly)return null;if(Z==="deserialize"&&!J.exclude.serializeOnly)return null;if(Z==="serialize"&&!J.exclude.deserializeOnly)return null}return J.expose.find((X)=>{if(Z==="deserialize"&&X.serializeOnly)return!1;if(Z==="serialize"&&X.deserializeOnly)return!1;return!0})?.name??Q}function lJ(J,Q){if(J.type)return oJ(J,Q);let Z=a(J.validation.filter((q)=>!q.each),Q.groups),$=a(J.validation.filter((q)=>q.each),Q.groups),X=e(Z);if($.length>0){let q=e($);if(Object.keys(q).length>0)X.items=q}if(J.flags.isNullable)JJ(X);return QJ(J,X)}function oJ(J,Q){let Z;if(J.type.discriminator){let{property:X,subTypes:q}=J.type.discriminator;Z={oneOf:q.map((Y)=>{return{...OJ(Y.value,Q),properties:{[X]:{const:Y.name}},required:[X]}})}}else{let X=J.type.fn();Z=OJ(X,Q)}if(J.flags.validateNestedEach){let X={type:"array",items:Z},q=a(J.validation.filter((Y)=>!Y.each),Q.groups),B=e(q);if(B.minItems!==void 0)X.minItems=B.minItems;if(B.maxItems!==void 0)X.maxItems=B.maxItems;if(B.uniqueItems!==void 0)X.uniqueItems=B.uniqueItems;if(J.flags.isNullable)JJ(X);return QJ(J,X)}if(J.flags.isNullable)JJ(Z);return QJ(J,Z)}function a(J,Q){if(!Q)return J;return J.filter((Z)=>{if(!Z.groups||Z.groups.length===0)return!0;return Z.groups.some(($)=>Q.includes($))})}function e(J){let Q={};for(let Z of J){let $=xJ[Z.rule.ruleName];if(!$)continue;let X=$(Z.rule.constraints??{});if(!X)continue;Object.assign(Q,X)}return Q}function JJ(J){if(J.type)J.type=Array.isArray(J.type)?[...J.type,"null"]:[J.type,"null"];else J.type=["null"]}function QJ(J,Q){if(J.schema==null)return Q;if(typeof J.schema==="function")return J.schema(Q);let Z=J.schema;return Object.keys(Z).some((X)=>pJ.has(X))?{...Z}:{...Q,...Z}}function cJ(J){let{name:Q,validate:Z}=J,$=Z.constructor.name==="AsyncFunction",X=function(q){return Z(q)};if(X.emit=function(q,B){let Y=B.addRef(Z);if($)return`if(!(await _refs[${Y}](${q}))) ${B.fail(Q)};`;return`if(!_refs[${Y}](${q})) ${B.fail(Q)};`},X.ruleName=Q,X.isAsync=$,J.constraints)X.constraints=J.constraints;if(J.requiresType)X.requiresType=J.requiresType;return X}export{mJ as unregister,yJ as toJsonSchema,fJ as serialize,vJ as seal,CJ as deserialize,cJ as createRule,K2 as ValidateNested,N2 as ValidateIf,h1 as Type,k1 as Transform,R as SealError,g1 as Schema,C2 as NotEquals,B0 as NotContains,n2 as Nested,$0 as MinLength,X0 as MinDate,t2 as Min,j0 as MaxLength,Z0 as MaxDate,a2 as Max,U0 as Matches,q0 as Length,D0 as IsVariableWidth,H0 as IsUppercase,b0 as IsUUID,A0 as IsURL,w1 as IsTaxId,I0 as IsSurrogatePair,_1 as IsStrongPassword,l2 as IsString,s0 as IsSemVer,h0 as IsRgbColor,U1 as IsRFC3339,N1 as IsPostalCode,e2 as IsPositive,l0 as IsPort,O1 as IsPhoneNumber,v1 as IsPassportNumber,E2 as IsOptional,G0 as IsOctal,r2 as IsObject,O0 as IsNumberString,o2 as IsNumber,v2 as IsNullable,y2 as IsNotIn,V1 as IsNotEmptyObject,p2 as IsNotEmpty,J0 as IsNegative,T0 as IsMultibyte,r0 as IsMongoId,E1 as IsMobilePhone,X1 as IsMimeType,W1 as IsMilitaryTime,$1 as IsMagnetURI,E0 as IsMACAddress,W0 as IsLowercase,F1 as IsLongitude,x0 as IsLocale,H1 as IsLatitude,p0 as IsLatLong,f0 as IsJWT,t0 as IsJSON,d2 as IsInt,A1 as IsInstance,x2 as IsIn,K1 as IsIdentityCard,C0 as IsISSN,u0 as IsISRC,v0 as IsISO8601,L1 as IsISO4217CurrencyCode,m0 as IsISO31661Alpha3,c0 as IsISO31661Alpha2,K0 as IsISIN,N0 as IsISBN,S0 as IsIP,q1 as IsIBAN,R0 as IsHexadecimal,k0 as IsHexColor,B1 as IsHash,z0 as IsHalfWidth,g0 as IsHSL,w0 as IsFullWidth,d0 as IsFirebasePushId,n0 as IsFQDN,M1 as IsEthereumAddress,i2 as IsEnum,f2 as IsEmpty,V0 as IsEmail,o0 as IsEAN,Q0 as IsDivisibleBy,g2 as IsDefined,_0 as IsDecimal,Q1 as IsDateString,m2 as IsDate,y0 as IsDataURI,Z1 as IsCurrency,j1 as IsCreditCard,Y1 as IsByteLength,P1 as IsBtcAddress,L0 as IsBooleanString,c2 as IsBoolean,J1 as IsBase64,e0 as IsBase58,a0 as IsBase32,i0 as IsBIC,F0 as IsAscii,s2 as IsArray,P0 as IsAlphanumeric,M0 as IsAlpha,b1 as Expose,S1 as Exclude,u2 as Equals,Y0 as Contains,t as BakerValidationError,R1 as ArrayUnique,G1 as ArrayNotEmpty,D1 as ArrayNotContains,T1 as ArrayMinSize,I1 as ArrayMaxSize,z1 as ArrayContains};
|
|
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};
|
|
170
226
|
|
|
171
|
-
//# debugId=
|
|
227
|
+
//# debugId=80279DF78DB18A8764756E2164756E21
|
|
172
228
|
//# sourceMappingURL=index.js.map
|
package/dist/src/collect.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { RawPropertyMeta, RuleDef, TransformDef, ExposeDef, ExcludeDef, TypeDef } from './types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* -
|
|
5
|
-
* -
|
|
3
|
+
* Returns the RawPropertyMeta for the given propertyKey on ctor.
|
|
4
|
+
* - Creates with default values if it doesn't exist.
|
|
5
|
+
* - Automatically registers ctor in the global registry (registered if at least one decorator exists).
|
|
6
6
|
*/
|
|
7
7
|
export declare function ensureMeta(ctor: Function, key: string): RawPropertyMeta;
|
|
8
8
|
export declare function collectValidation(target: object, key: string, ruleDef: RuleDef): void;
|