zod-aot 0.14.1 → 0.15.1
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/dist/core/codegen/context.d.ts +6 -0
- package/dist/core/codegen/context.d.ts.map +1 -1
- package/dist/core/codegen/context.js +43 -0
- package/dist/core/codegen/context.js.map +1 -1
- package/dist/core/codegen/generators/array.d.ts.map +1 -1
- package/dist/core/codegen/generators/array.js +4 -0
- package/dist/core/codegen/generators/array.js.map +1 -1
- package/dist/core/codegen/generators/effect.d.ts +13 -0
- package/dist/core/codegen/generators/effect.d.ts.map +1 -0
- package/dist/core/codegen/generators/effect.js +27 -0
- package/dist/core/codegen/generators/effect.js.map +1 -0
- package/dist/core/codegen/generators/object.d.ts.map +1 -1
- package/dist/core/codegen/generators/object.js +8 -2
- package/dist/core/codegen/generators/object.js.map +1 -1
- package/dist/core/codegen/generators/record.d.ts.map +1 -1
- package/dist/core/codegen/generators/record.js +4 -0
- package/dist/core/codegen/generators/record.js.map +1 -1
- package/dist/core/codegen/generators/tuple.d.ts.map +1 -1
- package/dist/core/codegen/generators/tuple.js +4 -0
- package/dist/core/codegen/generators/tuple.js.map +1 -1
- package/dist/core/extract/effects.d.ts +12 -0
- package/dist/core/extract/effects.d.ts.map +1 -0
- package/dist/core/extract/effects.js +181 -0
- package/dist/core/extract/effects.js.map +1 -0
- package/dist/loader.d.ts +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +47 -1
- package/dist/loader.js.map +1 -1
- package/dist/unplugin/bun.d.ts +1 -1
- package/dist/unplugin/rolldown.d.ts +1 -1
- package/package.json +2 -1
|
@@ -20,6 +20,12 @@ export declare const UUID_REGEX_SOURCE = "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][
|
|
|
20
20
|
/** Enum values at or below this count use inline === checks instead of Set.has(). */
|
|
21
21
|
export declare const ENUM_INLINE_THRESHOLD = 3;
|
|
22
22
|
export declare function escapeString(s: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a SchemaIR tree contains any value-mutating operations
|
|
25
|
+
* (coerce, default, catch) that would write back to the input expression.
|
|
26
|
+
* Used by container generators to decide whether to shallow-clone.
|
|
27
|
+
*/
|
|
28
|
+
export declare function hasMutation(ir: SchemaIR): boolean;
|
|
23
29
|
/**
|
|
24
30
|
* Sort comparator for CheckIR: cheapest/most-discriminating checks first.
|
|
25
31
|
* Used as `[...ir.checks].sort(checkPriority)`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,aAAa,EAAE,MAAM,CAAC;IACtB,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,CAChC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,GAAG,IAAI,CAAC;AAGnB,eAAO,MAAM,kBAAkB,QAA+G,CAAC;AAE/I,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,2KAC4I,CAAC;AAE3K,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AA8BvC,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,EACxC,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GACvC,MAAM,CAER"}
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,aAAa,EAAE,MAAM,CAAC;IACtB,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,CAChC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,GAAG,IAAI,CAAC;AAGnB,eAAO,MAAM,kBAAkB,QAA+G,CAAC;AAE/I,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,2KAC4I,CAAC;AAE3K,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AA8BvC,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAqCjD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,EACxC,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GACvC,MAAM,CAER"}
|
|
@@ -34,6 +34,49 @@ const CHECK_PRIORITY = {
|
|
|
34
34
|
export function escapeString(s) {
|
|
35
35
|
return JSON.stringify(s);
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if a SchemaIR tree contains any value-mutating operations
|
|
39
|
+
* (coerce, default, catch) that would write back to the input expression.
|
|
40
|
+
* Used by container generators to decide whether to shallow-clone.
|
|
41
|
+
*/
|
|
42
|
+
export function hasMutation(ir) {
|
|
43
|
+
switch (ir.type) {
|
|
44
|
+
case "string":
|
|
45
|
+
case "number":
|
|
46
|
+
case "boolean":
|
|
47
|
+
case "bigint":
|
|
48
|
+
case "date":
|
|
49
|
+
return ir.coerce === true;
|
|
50
|
+
case "default":
|
|
51
|
+
case "catch":
|
|
52
|
+
return true;
|
|
53
|
+
case "object":
|
|
54
|
+
return Object.values(ir.properties).some(hasMutation);
|
|
55
|
+
case "array":
|
|
56
|
+
return hasMutation(ir.element);
|
|
57
|
+
case "tuple":
|
|
58
|
+
return ir.items.some(hasMutation) || (ir.rest !== null && hasMutation(ir.rest));
|
|
59
|
+
case "record":
|
|
60
|
+
return hasMutation(ir.valueType);
|
|
61
|
+
case "optional":
|
|
62
|
+
case "nullable":
|
|
63
|
+
case "readonly":
|
|
64
|
+
return hasMutation(ir.inner);
|
|
65
|
+
case "union":
|
|
66
|
+
case "discriminatedUnion":
|
|
67
|
+
return ir.options.some(hasMutation);
|
|
68
|
+
case "intersection":
|
|
69
|
+
return hasMutation(ir.left) || hasMutation(ir.right);
|
|
70
|
+
case "pipe":
|
|
71
|
+
return hasMutation(ir.in) || hasMutation(ir.out);
|
|
72
|
+
case "set":
|
|
73
|
+
return hasMutation(ir.valueType);
|
|
74
|
+
case "map":
|
|
75
|
+
return hasMutation(ir.keyType) || hasMutation(ir.valueType);
|
|
76
|
+
default:
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
37
80
|
/**
|
|
38
81
|
* Sort comparator for CheckIR: cheapest/most-discriminating checks first.
|
|
39
82
|
* Used as `[...ir.checks].sort(checkPriority)`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AA+BA,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA,kGAAkG,CAAC;AAE/I,kGAAkG;AAClG,MAAM,CAAC,MAAM,iBAAiB,GAC5B,wKAAwK,CAAC;AAE3K,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC,MAAM,cAAc,GAA2B;IAC7C,2CAA2C;IAC3C,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,EAAE;IACjB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,8CAA8C;IAC9C,aAAa,EAAE,EAAE;IACjB,oBAAoB;IACpB,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,EAAE;IACb,mBAAmB,EAAE,EAAE;IACvB,gBAAgB,EAAE,EAAE;IACpB,iBAAiB,EAAE,EAAE;IACrB,cAAc,EAAE,EAAE;IAClB,SAAS;IACT,WAAW,EAAE,EAAE;IACf,kBAAkB,EAAE,EAAE;IACtB,iDAAiD;IACjD,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,oCAAoC;IACpC,QAAQ,EAAE,EAAE;IACZ,yBAAyB;IACzB,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,CAAwC,EACxC,CAAwC;IAExC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACzE,CAAC"}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1E,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,oBAAoB,GAC/B,MAAM,CA4CR"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { hasMutation } from "../context.js";
|
|
1
2
|
import { emit } from "../emit.js";
|
|
2
3
|
export function generateArrayValidation(ir, inputExpr, pathExpr, issuesVar, ctx, generateFn) {
|
|
3
4
|
let code = emit `
|
|
4
5
|
if(!Array.isArray(${inputExpr})){
|
|
5
6
|
${issuesVar}.push({code:"invalid_type",expected:"array",input:${inputExpr},path:${pathExpr}});
|
|
6
7
|
}else{`;
|
|
8
|
+
if (hasMutation(ir.element)) {
|
|
9
|
+
code += `${inputExpr}=${inputExpr}.slice();`;
|
|
10
|
+
}
|
|
7
11
|
for (const check of ir.checks) {
|
|
8
12
|
switch (check.kind) {
|
|
9
13
|
case "min_length":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/array.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,uBAAuB,CACrC,EAAgC,EAChC,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,GAAmB,EACnB,UAAgC;IAEhC,IAAI,IAAI,GAAG,IAAI,CAAA;wBACO,SAAS;QACzB,SAAS,qDAAqD,SAAS,SAAS,QAAQ;WACrF,CAAC;IAEV,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,YAAY;gBACf,IAAI,IAAI,IAAI,CAAA;eACL,SAAS,WAAW,KAAK,CAAC,OAAO;cAClC,SAAS,mCAAmC,KAAK,CAAC,OAAO,wCAAwC,SAAS,SAAS,QAAQ;YAC7H,CAAC;gBACL,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,IAAI,IAAI,CAAA;eACL,SAAS,WAAW,KAAK,CAAC,OAAO;cAClC,SAAS,iCAAiC,KAAK,CAAC,OAAO,wCAAwC,SAAS,SAAS,QAAQ;YAC3H,CAAC;gBACL,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,IAAI,IAAI,CAAA;eACL,SAAS,WAAW,KAAK,CAAC,MAAM;cACjC,SAAS,mCAAmC,KAAK,CAAC,MAAM,mDAAmD,SAAS,SAAS,QAAQ;qBAC9H,SAAS,WAAW,KAAK,CAAC,MAAM;cACvC,SAAS,iCAAiC,KAAK,CAAC,MAAM,mDAAmD,SAAS,SAAS,QAAQ;YACrI,CAAC;gBACL,MAAM;QACV,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,GAAG,QAAQ,WAAW,MAAM,GAAG,CAAC;IACjD,IAAI,IAAI,IAAI,CAAA;cACA,MAAM,MAAM,MAAM,IAAI,SAAS,WAAW,MAAM;QACtD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC;;IAE9D,CAAC;IACH,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/array.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,uBAAuB,CACrC,EAAgC,EAChC,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,GAAmB,EACnB,UAAgC;IAEhC,IAAI,IAAI,GAAG,IAAI,CAAA;wBACO,SAAS;QACzB,SAAS,qDAAqD,SAAS,SAAS,QAAQ;WACrF,CAAC;IAEV,IAAI,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,SAAS,IAAI,SAAS,WAAW,CAAC;IAC/C,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,YAAY;gBACf,IAAI,IAAI,IAAI,CAAA;eACL,SAAS,WAAW,KAAK,CAAC,OAAO;cAClC,SAAS,mCAAmC,KAAK,CAAC,OAAO,wCAAwC,SAAS,SAAS,QAAQ;YAC7H,CAAC;gBACL,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,IAAI,IAAI,CAAA;eACL,SAAS,WAAW,KAAK,CAAC,OAAO;cAClC,SAAS,iCAAiC,KAAK,CAAC,OAAO,wCAAwC,SAAS,SAAS,QAAQ;YAC3H,CAAC;gBACL,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,IAAI,IAAI,CAAA;eACL,SAAS,WAAW,KAAK,CAAC,MAAM;cACjC,SAAS,mCAAmC,KAAK,CAAC,MAAM,mDAAmD,SAAS,SAAS,QAAQ;qBAC9H,SAAS,WAAW,KAAK,CAAC,MAAM;cACvC,SAAS,iCAAiC,KAAK,CAAC,MAAM,mDAAmD,SAAS,SAAS,QAAQ;YACrI,CAAC;gBACL,MAAM;QACV,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC;IAC3C,MAAM,QAAQ,GAAG,GAAG,QAAQ,WAAW,MAAM,GAAG,CAAC;IACjD,IAAI,IAAI,IAAI,CAAA;cACA,MAAM,MAAM,MAAM,IAAI,SAAS,WAAW,MAAM;QACtD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC;;IAE9D,CAAC;IACH,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RefineEffectCheckIR, TransformEffectIR } from "../../types.js";
|
|
2
|
+
import type { CodeGenContext, GenerateValidationFn } from "../context.js";
|
|
3
|
+
/**
|
|
4
|
+
* Generate code for a TransformEffectIR node.
|
|
5
|
+
* Validates the inner schema, then applies the transform function and writes back the result.
|
|
6
|
+
*/
|
|
7
|
+
export declare function generateTransformEffect(ir: TransformEffectIR, inputExpr: string, pathExpr: string, issuesVar: string, ctx: CodeGenContext, generateValidation: GenerateValidationFn): string;
|
|
8
|
+
/**
|
|
9
|
+
* Generate code for a RefineEffectCheckIR (inline refine function call).
|
|
10
|
+
* Called from string/number/object check loops when a refine_effect is encountered.
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateRefineCheck(check: RefineEffectCheckIR, inputExpr: string, pathExpr: string, issuesVar: string): string;
|
|
13
|
+
//# sourceMappingURL=effect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG1E;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,iBAAiB,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,EACnB,kBAAkB,EAAE,oBAAoB,GACvC,MAAM,CAWR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,EAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { emit } from "../emit.js";
|
|
2
|
+
/**
|
|
3
|
+
* Generate code for a TransformEffectIR node.
|
|
4
|
+
* Validates the inner schema, then applies the transform function and writes back the result.
|
|
5
|
+
*/
|
|
6
|
+
export function generateTransformEffect(ir, inputExpr, pathExpr, issuesVar, ctx, generateValidation) {
|
|
7
|
+
const beforeVar = `__ib${ctx.counter++}`;
|
|
8
|
+
const innerCode = generateValidation(ir.inner, inputExpr, pathExpr, issuesVar, ctx);
|
|
9
|
+
return `${emit `
|
|
10
|
+
var ${beforeVar}=${issuesVar}.length;
|
|
11
|
+
${innerCode}
|
|
12
|
+
if(${issuesVar}.length===${beforeVar}){
|
|
13
|
+
${inputExpr}=(${ir.source})(${inputExpr});
|
|
14
|
+
}
|
|
15
|
+
`}\n`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate code for a RefineEffectCheckIR (inline refine function call).
|
|
19
|
+
* Called from string/number/object check loops when a refine_effect is encountered.
|
|
20
|
+
*/
|
|
21
|
+
export function generateRefineCheck(check, inputExpr, pathExpr, issuesVar) {
|
|
22
|
+
return emit `
|
|
23
|
+
if(!(${check.source})(${inputExpr})){
|
|
24
|
+
${issuesVar}.push({code:"custom",path:${pathExpr},message:"Invalid",input:${inputExpr}});
|
|
25
|
+
}`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=effect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/effect.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,EAAqB,EACrB,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,GAAmB,EACnB,kBAAwC;IAExC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAEpF,OAAO,GAAG,IAAI,CAAA;UACN,SAAS,IAAI,SAAS;MAC1B,SAAS;SACN,SAAS,aAAa,SAAS;QAChC,SAAS,KAAK,EAAE,CAAC,MAAM,KAAK,SAAS;;GAE1C,IAAI,CAAC;AACR,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAA0B,EAC1B,SAAiB,EACjB,QAAgB,EAChB,SAAiB;IAEjB,OAAO,IAAI,CAAA;WACF,KAAK,CAAC,MAAM,KAAK,SAAS;QAC7B,SAAS,6BAA6B,QAAQ,4BAA4B,SAAS;MACrF,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1E,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,EACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,oBAAoB,GAC/B,MAAM,
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/object.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1E,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,EACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,oBAAoB,GAC/B,MAAM,CAuBR"}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
import { escapeString } from "../context.js";
|
|
1
|
+
import { escapeString, hasMutation } from "../context.js";
|
|
2
2
|
import { emit } from "../emit.js";
|
|
3
3
|
export function generateObjectValidation(ir, inputExpr, pathExpr, issuesVar, ctx, generateFn) {
|
|
4
4
|
let code = emit `
|
|
5
5
|
if(typeof ${inputExpr}!=="object"||${inputExpr}===null||Array.isArray(${inputExpr})){
|
|
6
6
|
${issuesVar}.push({code:"invalid_type",expected:"object",input:${inputExpr},path:${pathExpr}});
|
|
7
7
|
}else{`;
|
|
8
|
+
const needsClone = Object.values(ir.properties).some(hasMutation);
|
|
8
9
|
const objVar = `__o_${ctx.counter++}`;
|
|
9
|
-
code +=
|
|
10
|
+
code += needsClone
|
|
11
|
+
? `var ${objVar}=Object.assign({},${inputExpr});`
|
|
12
|
+
: `var ${objVar}=${inputExpr};`;
|
|
10
13
|
for (const [key, propIR] of Object.entries(ir.properties)) {
|
|
11
14
|
const propExpr = `${objVar}[${escapeString(key)}]`;
|
|
12
15
|
const propPath = `${pathExpr}.concat(${escapeString(key)})`;
|
|
13
16
|
code += generateFn(propIR, propExpr, propPath, issuesVar, ctx);
|
|
14
17
|
}
|
|
18
|
+
if (needsClone) {
|
|
19
|
+
code += `${inputExpr}=${objVar};`;
|
|
20
|
+
}
|
|
15
21
|
code += `}\n`;
|
|
16
22
|
return code;
|
|
17
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/object.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/object.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,wBAAwB,CACtC,EAAiC,EACjC,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,GAAmB,EACnB,UAAgC;IAEhC,IAAI,IAAI,GAAG,IAAI,CAAA;gBACD,SAAS,gBAAgB,SAAS,0BAA0B,SAAS;QAC7E,SAAS,sDAAsD,SAAS,SAAS,QAAQ;WACtF,CAAC;IAEV,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACtC,IAAI,IAAI,UAAU;QAChB,CAAC,CAAC,OAAO,MAAM,qBAAqB,SAAS,IAAI;QACjD,CAAC,CAAC,OAAO,MAAM,IAAI,SAAS,GAAG,CAAC;IAElC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QACnD,MAAM,QAAQ,GAAG,GAAG,QAAQ,WAAW,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5D,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,IAAI,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,KAAK,CAAC;IACd,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/record.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1E,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,EACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,oBAAoB,GAC/B,MAAM,CA+BR"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { hasMutation } from "../context.js";
|
|
1
2
|
import { emit } from "../emit.js";
|
|
2
3
|
export function generateRecordValidation(ir, inputExpr, pathExpr, issuesVar, ctx, generateFn) {
|
|
3
4
|
let code = emit `
|
|
4
5
|
if(typeof ${inputExpr}!=="object"||${inputExpr}===null||Array.isArray(${inputExpr})){
|
|
5
6
|
${issuesVar}.push({code:"invalid_type",expected:"record",input:${inputExpr},path:${pathExpr}});
|
|
6
7
|
}else{`;
|
|
8
|
+
if (hasMutation(ir.valueType)) {
|
|
9
|
+
code += `${inputExpr}=Object.assign({},${inputExpr});`;
|
|
10
|
+
}
|
|
7
11
|
const keysVar = `__rk_${ctx.counter++}`;
|
|
8
12
|
const idxVar = `__ri_${ctx.counter++}`;
|
|
9
13
|
const keyVar = `__rkey_${ctx.counter++}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/record.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,wBAAwB,CACtC,EAAiC,EACjC,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,GAAmB,EACnB,UAAgC;IAEhC,IAAI,IAAI,GAAG,IAAI,CAAA;gBACD,SAAS,gBAAgB,SAAS,0BAA0B,SAAS;QAC7E,SAAS,sDAAsD,SAAS,SAAS,QAAQ;WACtF,CAAC;IAEV,MAAM,OAAO,GAAG,QAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,QAAQ,WAAW,MAAM,GAAG,CAAC;IAChD,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC;IAE1C,IAAI,IAAI,IAAI,CAAA;UACJ,OAAO,gBAAgB,SAAS;cAC5B,MAAM,MAAM,MAAM,IAAI,OAAO,WAAW,MAAM;YAChD,MAAM,IAAI,OAAO,IAAI,MAAM;YAC3B,YAAY;QAChB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC;WACvD,YAAY;UACb,SAAS,kDAAkD,OAAO,WAAW,YAAY;;UAEzF,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC;;;IAGhE,CAAC;IACH,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/record.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,wBAAwB,CACtC,EAAiC,EACjC,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,GAAmB,EACnB,UAAgC;IAEhC,IAAI,IAAI,GAAG,IAAI,CAAA;gBACD,SAAS,gBAAgB,SAAS,0BAA0B,SAAS;QAC7E,SAAS,sDAAsD,SAAS,SAAS,QAAQ;WACtF,CAAC;IAEV,IAAI,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,SAAS,qBAAqB,SAAS,IAAI,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,SAAS,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,GAAG,QAAQ,WAAW,MAAM,GAAG,CAAC;IAChD,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC;IAE1C,IAAI,IAAI,IAAI,CAAA;UACJ,OAAO,gBAAgB,SAAS;cAC5B,MAAM,MAAM,MAAM,IAAI,OAAO,WAAW,MAAM;YAChD,MAAM,IAAI,OAAO,IAAI,MAAM;YAC3B,YAAY;QAChB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC;WACvD,YAAY;UACb,SAAS,kDAAkD,OAAO,WAAW,YAAY;;UAEzF,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC;;;IAGhE,CAAC;IACH,OAAO,GAAG,IAAI,IAAI,CAAC;AACrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/tuple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"tuple.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/tuple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1E,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,oBAAoB,GAC/B,MAAM,CAuCR"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hasMutation } from "../context.js";
|
|
1
2
|
import { emit } from "../emit.js";
|
|
2
3
|
export function generateTupleValidation(ir, inputExpr, pathExpr, issuesVar, ctx, generateFn) {
|
|
3
4
|
const len = ir.items.length;
|
|
@@ -5,6 +6,9 @@ export function generateTupleValidation(ir, inputExpr, pathExpr, issuesVar, ctx,
|
|
|
5
6
|
if(!Array.isArray(${inputExpr})){
|
|
6
7
|
${issuesVar}.push({code:"invalid_type",expected:"tuple",input:${inputExpr},path:${pathExpr}});
|
|
7
8
|
}else{`;
|
|
9
|
+
if (ir.items.some(hasMutation) || (ir.rest !== null && hasMutation(ir.rest))) {
|
|
10
|
+
code += `${inputExpr}=${inputExpr}.slice();`;
|
|
11
|
+
}
|
|
8
12
|
// Reject extra elements when no rest element is defined
|
|
9
13
|
if (ir.rest === null) {
|
|
10
14
|
code += emit `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/tuple.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,uBAAuB,CACrC,EAAgC,EAChC,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,GAAmB,EACnB,UAAgC;IAEhC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,IAAI,GAAG,IAAI,CAAA;wBACO,SAAS;QACzB,SAAS,qDAAqD,SAAS,SAAS,QAAQ;WACrF,CAAC;IAEV,wDAAwD;IACxD,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,IAAI,CAAA;WACL,SAAS,WAAW,GAAG;UACxB,SAAS,iCAAiC,GAAG,wCAAwC,SAAS,SAAS,QAAQ;QACjH,CAAC;IACP,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAa,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,CAAC,GAAG,CAAC;QACtC,MAAM,QAAQ,GAAG,GAAG,QAAQ,WAAW,CAAC,GAAG,CAAC;QAC5C,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,QAAQ,WAAW,MAAM,GAAG,CAAC;QACjD,IAAI,IAAI,IAAI,CAAA;gBACA,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,SAAS,WAAW,MAAM;UAC3D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC;QACzD,CAAC;IACP,CAAC;IAED,IAAI,IAAI,KAAK,CAAC;IACd,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"tuple.js","sourceRoot":"","sources":["../../../../src/core/codegen/generators/tuple.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,uBAAuB,CACrC,EAAgC,EAChC,SAAiB,EACjB,QAAgB,EAChB,SAAiB,EACjB,GAAmB,EACnB,UAAgC;IAEhC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,IAAI,GAAG,IAAI,CAAA;wBACO,SAAS;QACzB,SAAS,qDAAqD,SAAS,SAAS,QAAQ;WACrF,CAAC;IAEV,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC7E,IAAI,IAAI,GAAG,SAAS,IAAI,SAAS,WAAW,CAAC;IAC/C,CAAC;IAED,wDAAwD;IACxD,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACrB,IAAI,IAAI,IAAI,CAAA;WACL,SAAS,WAAW,GAAG;UACxB,SAAS,iCAAiC,GAAG,wCAAwC,SAAS,SAAS,QAAQ;QACjH,CAAC;IACP,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAa,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,CAAC,GAAG,CAAC;QACtC,MAAM,QAAQ,GAAG,GAAG,QAAQ,WAAW,CAAC,GAAG,CAAC;QAC5C,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,MAAM,GAAG,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,QAAQ,WAAW,MAAM,GAAG,CAAC;QACjD,IAAI,IAAI,IAAI,CAAA;gBACA,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,SAAS,WAAW,MAAM;UAC3D,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC;QACzD,CAAC;IACP,CAAC;IAED,IAAI,IAAI,KAAK,CAAC;IACd,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect compilation utilities.
|
|
3
|
+
* Uses fn.toString() to extract function source text from live Zod schema references,
|
|
4
|
+
* then classifies whether the function can be safely inlined (zero external captures).
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Try to compile a function into an inlineable source string.
|
|
8
|
+
* Returns the function source if it's a zero-capture function (safe to inline),
|
|
9
|
+
* or undefined if it cannot be compiled (async, has captures, or parse failure).
|
|
10
|
+
*/
|
|
11
|
+
export declare function tryCompileEffect(fn: unknown): string | undefined;
|
|
12
|
+
//# sourceMappingURL=effects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../../src/core/extract/effects.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2CH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAwDhE"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect compilation utilities.
|
|
3
|
+
* Uses fn.toString() to extract function source text from live Zod schema references,
|
|
4
|
+
* then classifies whether the function can be safely inlined (zero external captures).
|
|
5
|
+
*/
|
|
6
|
+
import { parseExpressionAt } from "acorn";
|
|
7
|
+
// Well-known globals that are safe to reference in inlined functions
|
|
8
|
+
const SAFE_GLOBALS = new Set([
|
|
9
|
+
"undefined",
|
|
10
|
+
"null",
|
|
11
|
+
"NaN",
|
|
12
|
+
"Infinity",
|
|
13
|
+
"Math",
|
|
14
|
+
"Number",
|
|
15
|
+
"String",
|
|
16
|
+
"Boolean",
|
|
17
|
+
"Array",
|
|
18
|
+
"Object",
|
|
19
|
+
"JSON",
|
|
20
|
+
"Date",
|
|
21
|
+
"RegExp",
|
|
22
|
+
"parseInt",
|
|
23
|
+
"parseFloat",
|
|
24
|
+
"isNaN",
|
|
25
|
+
"isFinite",
|
|
26
|
+
"encodeURI",
|
|
27
|
+
"decodeURI",
|
|
28
|
+
"encodeURIComponent",
|
|
29
|
+
"decodeURIComponent",
|
|
30
|
+
"BigInt",
|
|
31
|
+
"Symbol",
|
|
32
|
+
"Map",
|
|
33
|
+
"Set",
|
|
34
|
+
"Error",
|
|
35
|
+
"TypeError",
|
|
36
|
+
"RangeError",
|
|
37
|
+
"SyntaxError",
|
|
38
|
+
"ReferenceError",
|
|
39
|
+
"Promise",
|
|
40
|
+
"globalThis",
|
|
41
|
+
"true",
|
|
42
|
+
"false",
|
|
43
|
+
]);
|
|
44
|
+
/**
|
|
45
|
+
* Try to compile a function into an inlineable source string.
|
|
46
|
+
* Returns the function source if it's a zero-capture function (safe to inline),
|
|
47
|
+
* or undefined if it cannot be compiled (async, has captures, or parse failure).
|
|
48
|
+
*/
|
|
49
|
+
export function tryCompileEffect(fn) {
|
|
50
|
+
if (typeof fn !== "function")
|
|
51
|
+
return undefined;
|
|
52
|
+
const source = fn.toString();
|
|
53
|
+
// Quick reject: native functions
|
|
54
|
+
if (source.includes("[native code]"))
|
|
55
|
+
return undefined;
|
|
56
|
+
let ast;
|
|
57
|
+
try {
|
|
58
|
+
ast = parseExpressionAt(source, 0, {
|
|
59
|
+
ecmaVersion: "latest",
|
|
60
|
+
sourceType: "module",
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Parse failed — likely TypeScript annotations or unsupported syntax
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
// Reject async functions
|
|
68
|
+
if ("async" in ast && ast.async)
|
|
69
|
+
return undefined;
|
|
70
|
+
// Collect parameter names
|
|
71
|
+
const params = new Set();
|
|
72
|
+
const fnNode = ast;
|
|
73
|
+
if (fnNode.params) {
|
|
74
|
+
for (const param of fnNode.params) {
|
|
75
|
+
collectBindingNames(param, params);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Collect local variable declarations in the body
|
|
79
|
+
const locals = new Set();
|
|
80
|
+
if (fnNode.body && fnNode.body.type === "BlockStatement") {
|
|
81
|
+
collectLocals(fnNode.body, locals);
|
|
82
|
+
}
|
|
83
|
+
// Collect all identifier references in the body
|
|
84
|
+
const refs = new Set();
|
|
85
|
+
if (fnNode.body) {
|
|
86
|
+
collectIdentifierRefs(fnNode.body, refs);
|
|
87
|
+
}
|
|
88
|
+
// Check for external captures
|
|
89
|
+
for (const ref of refs) {
|
|
90
|
+
if (!params.has(ref) && !locals.has(ref) && !SAFE_GLOBALS.has(ref)) {
|
|
91
|
+
return undefined; // Has external capture
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return source;
|
|
95
|
+
}
|
|
96
|
+
/** Collect binding names from a parameter pattern (handles destructuring). */
|
|
97
|
+
function collectBindingNames(node, names) {
|
|
98
|
+
switch (node.type) {
|
|
99
|
+
case "Identifier":
|
|
100
|
+
names.add(node.name);
|
|
101
|
+
break;
|
|
102
|
+
case "AssignmentPattern":
|
|
103
|
+
collectBindingNames(node.left, names);
|
|
104
|
+
break;
|
|
105
|
+
case "ObjectPattern":
|
|
106
|
+
for (const prop of node.properties) {
|
|
107
|
+
if (prop.type === "RestElement") {
|
|
108
|
+
collectBindingNames(prop.argument, names);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
collectBindingNames(prop.value, names);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
case "ArrayPattern":
|
|
116
|
+
for (const elem of node.elements) {
|
|
117
|
+
if (elem)
|
|
118
|
+
collectBindingNames(elem, names);
|
|
119
|
+
}
|
|
120
|
+
break;
|
|
121
|
+
case "RestElement":
|
|
122
|
+
collectBindingNames(node.argument, names);
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** Collect locally declared variable names from a block body. */
|
|
127
|
+
function collectLocals(body, locals) {
|
|
128
|
+
const block = body;
|
|
129
|
+
if (!block.body)
|
|
130
|
+
return;
|
|
131
|
+
for (const stmt of block.body) {
|
|
132
|
+
if (stmt.type === "VariableDeclaration") {
|
|
133
|
+
for (const decl of stmt.declarations) {
|
|
134
|
+
const id = decl.id;
|
|
135
|
+
collectBindingNames(id, locals);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/** Collect all identifier references in an AST subtree. */
|
|
141
|
+
function collectIdentifierRefs(node, refs) {
|
|
142
|
+
if (node.type === "Identifier") {
|
|
143
|
+
refs.add(node.name);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Skip property access identifiers (obj.prop — "prop" is not a reference)
|
|
147
|
+
if (node.type === "MemberExpression") {
|
|
148
|
+
const member = node;
|
|
149
|
+
collectIdentifierRefs(member.object, refs);
|
|
150
|
+
if (member.computed) {
|
|
151
|
+
collectIdentifierRefs(member.property, refs);
|
|
152
|
+
}
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Skip binding positions in variable declarations, function params, etc.
|
|
156
|
+
if (node.type === "VariableDeclarator") {
|
|
157
|
+
const decl = node;
|
|
158
|
+
if (decl.init)
|
|
159
|
+
collectIdentifierRefs(decl.init, refs);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// Recursively walk all child nodes
|
|
163
|
+
for (const key of Object.keys(node)) {
|
|
164
|
+
if (key === "type" || key === "start" || key === "end")
|
|
165
|
+
continue;
|
|
166
|
+
const child = node[key];
|
|
167
|
+
if (child && typeof child === "object") {
|
|
168
|
+
if (Array.isArray(child)) {
|
|
169
|
+
for (const item of child) {
|
|
170
|
+
if (item && typeof item === "object" && "type" in item) {
|
|
171
|
+
collectIdentifierRefs(item, refs);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else if ("type" in child) {
|
|
176
|
+
collectIdentifierRefs(child, refs);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=effects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.js","sourceRoot":"","sources":["../../../src/core/extract/effects.ts"],"names":[],"mappings":"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"}
|
package/dist/loader.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface LoadOptions {
|
|
|
6
6
|
* Dynamically import a source file (.ts or .js).
|
|
7
7
|
* - Bun/Deno: native TypeScript support, direct import
|
|
8
8
|
* - Node.js: uses jiti for reliable TypeScript transpilation
|
|
9
|
-
* (handles extensionless imports, enums, and all TS syntax)
|
|
9
|
+
* (handles extensionless imports, enums, path aliases, and all TS syntax)
|
|
10
10
|
*/
|
|
11
11
|
export declare function loadSourceFile(filePath: string, options?: LoadOptions): Promise<Record<string, unknown>>;
|
|
12
12
|
//# sourceMappingURL=loader.d.ts.map
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,WAAW;IAC1B,8FAA8F;IAC9F,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA+CD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmBlC"}
|
package/dist/loader.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { getTsconfig } from "get-tsconfig";
|
|
3
4
|
function detectRuntime() {
|
|
4
5
|
if ("Bun" in globalThis)
|
|
5
6
|
return "bun";
|
|
@@ -7,11 +8,53 @@ function detectRuntime() {
|
|
|
7
8
|
return "deno";
|
|
8
9
|
return "node";
|
|
9
10
|
}
|
|
11
|
+
/** Cache: tsconfig.json absolute path → resolved jiti alias map */
|
|
12
|
+
const aliasCache = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Resolve tsconfig.json path aliases into the format jiti expects.
|
|
15
|
+
* Returns an empty object if no tsconfig.json is found or no paths are configured.
|
|
16
|
+
*
|
|
17
|
+
* tsconfig paths use wildcards: { "@/*": ["./src/*"] }
|
|
18
|
+
* jiti uses prefix matching: { "@": "/absolute/path/to/src" }
|
|
19
|
+
*
|
|
20
|
+
* The trailing "/*" is stripped from both key and value before passing to jiti.
|
|
21
|
+
*/
|
|
22
|
+
function resolveTsconfigAliases(fromDir) {
|
|
23
|
+
const tsconfig = getTsconfig(fromDir);
|
|
24
|
+
if (!tsconfig)
|
|
25
|
+
return {};
|
|
26
|
+
const cached = aliasCache.get(tsconfig.path);
|
|
27
|
+
if (cached)
|
|
28
|
+
return cached;
|
|
29
|
+
const paths = tsconfig.config.compilerOptions?.paths;
|
|
30
|
+
if (!paths || Object.keys(paths).length === 0) {
|
|
31
|
+
const empty = {};
|
|
32
|
+
aliasCache.set(tsconfig.path, empty);
|
|
33
|
+
return empty;
|
|
34
|
+
}
|
|
35
|
+
const tsconfigDir = path.dirname(tsconfig.path);
|
|
36
|
+
const baseUrl = tsconfig.config.compilerOptions?.baseUrl;
|
|
37
|
+
const baseDir = baseUrl ? path.resolve(tsconfigDir, baseUrl) : tsconfigDir;
|
|
38
|
+
const alias = {};
|
|
39
|
+
for (const [pattern, targets] of Object.entries(paths)) {
|
|
40
|
+
if (!targets || targets.length === 0)
|
|
41
|
+
continue;
|
|
42
|
+
const target = targets[0];
|
|
43
|
+
if (!target)
|
|
44
|
+
continue;
|
|
45
|
+
// Strip trailing "/*" — jiti uses prefix matching, not glob wildcards
|
|
46
|
+
const key = pattern.endsWith("/*") ? pattern.slice(0, -2) : pattern;
|
|
47
|
+
const val = target.endsWith("/*") ? target.slice(0, -2) : target;
|
|
48
|
+
alias[key] = path.resolve(baseDir, val);
|
|
49
|
+
}
|
|
50
|
+
aliasCache.set(tsconfig.path, alias);
|
|
51
|
+
return alias;
|
|
52
|
+
}
|
|
10
53
|
/**
|
|
11
54
|
* Dynamically import a source file (.ts or .js).
|
|
12
55
|
* - Bun/Deno: native TypeScript support, direct import
|
|
13
56
|
* - Node.js: uses jiti for reliable TypeScript transpilation
|
|
14
|
-
* (handles extensionless imports, enums, and all TS syntax)
|
|
57
|
+
* (handles extensionless imports, enums, path aliases, and all TS syntax)
|
|
15
58
|
*/
|
|
16
59
|
export async function loadSourceFile(filePath, options) {
|
|
17
60
|
const absPath = path.resolve(filePath);
|
|
@@ -21,9 +64,12 @@ export async function loadSourceFile(filePath, options) {
|
|
|
21
64
|
if (runtime === "bun" || runtime === "deno") {
|
|
22
65
|
return (await import(pathToFileURL(absPath).href + suffix));
|
|
23
66
|
}
|
|
67
|
+
const alias = resolveTsconfigAliases(path.dirname(absPath));
|
|
24
68
|
const { createJiti } = await import("jiti");
|
|
25
69
|
const jiti = createJiti(pathToFileURL(absPath).href, {
|
|
26
70
|
moduleCache: !options?.cacheBust,
|
|
71
|
+
alias,
|
|
72
|
+
jsx: true,
|
|
27
73
|
});
|
|
28
74
|
return (await jiti.import(absPath));
|
|
29
75
|
}
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/unplugin/bun.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: (options?: import("./types.js").ZodAotPluginOptions | undefined) => BunPlugin;
|
|
1
|
+
declare const _default: (options?: import("./types.js").ZodAotPluginOptions | undefined) => Bun.BunPlugin;
|
|
2
2
|
export default _default;
|
|
3
3
|
//# sourceMappingURL=bun.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: (options?: import("./types.js").ZodAotPluginOptions | undefined) => import("
|
|
1
|
+
declare const _default: (options?: import("./types.js").ZodAotPluginOptions | undefined) => import("unplugin").RolldownPlugin<any> | import("unplugin").RolldownPlugin<any>[];
|
|
2
2
|
export default _default;
|
|
3
3
|
//# sourceMappingURL=rolldown.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zod-aot",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"description": "Compile Zod schemas into zero-overhead validation functions at build time",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
},
|
|
85
85
|
"dependencies": {
|
|
86
86
|
"acorn": "^8.16.0",
|
|
87
|
+
"get-tsconfig": "^4.13.0",
|
|
87
88
|
"jiti": "^2.6.1",
|
|
88
89
|
"unplugin": "^3.0.0"
|
|
89
90
|
},
|