zod-compiler 1.18.1 → 1.20.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.md +63 -44
- package/dist/core/codegen/context.d.ts +26 -1
- package/dist/core/codegen/context.d.ts.map +1 -1
- package/dist/core/codegen/context.js +57 -6
- package/dist/core/codegen/context.js.map +1 -1
- package/dist/core/codegen/index.d.ts.map +1 -1
- package/dist/core/codegen/index.js +7 -0
- package/dist/core/codegen/index.js.map +1 -1
- package/dist/core/codegen/schemas/array.js +2 -2
- package/dist/core/codegen/schemas/array.js.map +1 -1
- package/dist/core/codegen/schemas/discriminated-union.d.ts.map +1 -1
- package/dist/core/codegen/schemas/discriminated-union.js +66 -9
- package/dist/core/codegen/schemas/discriminated-union.js.map +1 -1
- package/dist/core/codegen/schemas/effect.d.ts.map +1 -1
- package/dist/core/codegen/schemas/effect.js +8 -3
- package/dist/core/codegen/schemas/effect.js.map +1 -1
- package/dist/core/codegen/schemas/enum.d.ts.map +1 -1
- package/dist/core/codegen/schemas/enum.js +4 -5
- package/dist/core/codegen/schemas/enum.js.map +1 -1
- package/dist/core/codegen/schemas/file.d.ts.map +1 -1
- package/dist/core/codegen/schemas/file.js +2 -4
- package/dist/core/codegen/schemas/file.js.map +1 -1
- package/dist/core/codegen/schemas/number.js +2 -2
- package/dist/core/codegen/schemas/number.js.map +1 -1
- package/dist/core/codegen/schemas/object.d.ts.map +1 -1
- package/dist/core/codegen/schemas/object.js +17 -7
- package/dist/core/codegen/schemas/object.js.map +1 -1
- package/dist/core/codegen/schemas/string.d.ts.map +1 -1
- package/dist/core/codegen/schemas/string.js +2 -2
- package/dist/core/codegen/schemas/string.js.map +1 -1
- package/dist/core/extract/checks.d.ts +18 -2
- package/dist/core/extract/checks.d.ts.map +1 -1
- package/dist/core/extract/checks.js +49 -4
- package/dist/core/extract/checks.js.map +1 -1
- package/dist/core/extract/effects.d.ts +10 -0
- package/dist/core/extract/effects.d.ts.map +1 -1
- package/dist/core/extract/effects.js +17 -0
- package/dist/core/extract/effects.js.map +1 -1
- package/dist/core/extract/extractors/array.js +2 -2
- package/dist/core/extract/extractors/array.js.map +1 -1
- package/dist/core/extract/extractors/number.d.ts.map +1 -1
- package/dist/core/extract/extractors/number.js +2 -2
- package/dist/core/extract/extractors/number.js.map +1 -1
- package/dist/core/extract/extractors/object.d.ts.map +1 -1
- package/dist/core/extract/extractors/object.js +2 -2
- package/dist/core/extract/extractors/object.js.map +1 -1
- package/dist/core/extract/extractors/string.d.ts.map +1 -1
- package/dist/core/extract/extractors/string.js +2 -2
- package/dist/core/extract/extractors/string.js.map +1 -1
- package/dist/core/extract/types.d.ts +2 -0
- package/dist/core/extract/types.d.ts.map +1 -1
- package/dist/core/types.d.ts +21 -2
- package/dist/core/types.d.ts.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -708,14 +708,15 @@ All standard Zod checks are supported: `min`, `max`, `length`, `email`, `url`, `
|
|
|
708
708
|
|
|
709
709
|
These contain JavaScript callbacks that cannot be reproduced in generated code:
|
|
710
710
|
|
|
711
|
-
| Type
|
|
712
|
-
|
|
|
713
|
-
| `transform`
|
|
714
|
-
| `
|
|
715
|
-
| `
|
|
716
|
-
| `
|
|
717
|
-
| `
|
|
718
|
-
|
|
|
711
|
+
| Type | Why | Alternative |
|
|
712
|
+
| ------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------- |
|
|
713
|
+
| `transform` with captures | Callback captures outer variables (or is async / takes `ctx`) | Use zero-capture callbacks or built-in checks |
|
|
714
|
+
| `refine` that is async or takes `ctx` | A promise result, or zod's issue-collection protocol | Use a plain single-argument predicate |
|
|
715
|
+
| `superRefine` | Callback needs `ctx` for issue collection | Use `refine` or built-in checks |
|
|
716
|
+
| `custom` | Arbitrary validation logic | — |
|
|
717
|
+
| `preprocess` | Input preprocessing function | Use `z.coerce` when possible |
|
|
718
|
+
| `lazy` (unresolvable inner) | Getter throws / inner type can't be resolved at compile time | Ensure the lazy getter returns a static schema |
|
|
719
|
+
| `.catchall(schema)` | Unknown keys validated against a value schema | `strictObject` and `looseObject` both compile |
|
|
719
720
|
|
|
720
721
|
**Zero-capture effects compile:** a `transform`/`refine` callback that takes a
|
|
721
722
|
single argument and references only its own parameters, locals, and safe
|
|
@@ -724,6 +725,19 @@ inlined into the generated validator. `z.string().transform((s) => s.trim())`
|
|
|
724
725
|
compiles; `z.string().transform((s) => s + suffix)` falls back (it captures
|
|
725
726
|
`suffix`).
|
|
726
727
|
|
|
728
|
+
**Every `refine` compiles, captures or not.** A predicate that cannot be
|
|
729
|
+
inlined is instead **called by reference** — the generated validator invokes
|
|
730
|
+
your own function object, reached from the schema — so the schema keeps its
|
|
731
|
+
compiled path either way. This matters most for cross-field checks, where the
|
|
732
|
+
refine sits on the root: `z.object({ … }).refine((d) => d.password === d.confirm)`
|
|
733
|
+
used to send the whole object through Zod, and now runs the compiled fast path
|
|
734
|
+
and calls your predicate. Measured on a six-field object with a captured root
|
|
735
|
+
refine: **246.7 ns → 8.5 ns (29x)**, against Zod's 250.5 ns. Where the predicate
|
|
736
|
+
itself dominates, compiled output reaches the predicate's own cost — a captured
|
|
737
|
+
`refine` doing `allowedDomains.some(…)` measures 23.9 ns against 24.1 ns for
|
|
738
|
+
calling that predicate alone, i.e. zero remaining validation overhead. Only
|
|
739
|
+
`superRefine` (needs Zod's `ctx`) and async predicates still delegate.
|
|
740
|
+
|
|
727
741
|
**Partial fallback:** If an object has 10 properties and 1 uses `transform`, the other 9 are still compiled. Only the `transform` property falls back to Zod.
|
|
728
742
|
|
|
729
743
|
**Recursive schemas compile** — whether directly self-recursive (`z.lazy(() => Self)`), mutually recursive (`A` ↔ `B`), or **nested as a field of a larger root** (a recursive `Comment` inside `z.object({ thread, root: Comment })`). Each distinct recursive shape is hosted once as a dedicated validator and reached by reference, so the whole structure stays on the fast path instead of delegating to Zod — a recursive type nested in an API envelope runs **12–33x faster than Zod** (see the benchmark table). A `lazy` schema only falls back when its getter can't be resolved at compile time.
|
|
@@ -753,9 +767,9 @@ What this means in practice:
|
|
|
753
767
|
|
|
754
768
|
| Schema (input) | Zod (strips) | compiler (keep, default) | compiler (strip) | strip vs keep | strip vs Zod |
|
|
755
769
|
| ----------------------------- | ------------ | ------------------------ | ---------------- | ------------- | ------------ |
|
|
756
|
-
| medium object, 7 keys (clean) | 2.
|
|
757
|
-
| wide object, 20 keys (clean) | 4.
|
|
758
|
-
| nested API response (clean) |
|
|
770
|
+
| medium object, 7 keys (clean) | 2.7M | 13.5M | 12.7M | 0.94x | **4.7x** |
|
|
771
|
+
| wide object, 20 keys (clean) | 4.0M | 24.4M | 18.1M | 0.74x | **4.5x** |
|
|
772
|
+
| nested API response (clean) | 176K | 9.3M | 5.4M | 0.58x | **31x** |
|
|
759
773
|
|
|
760
774
|
The tax scales with nesting depth (one fresh object per level), not really with key count, and is independent of whether unknown keys are actually present. It is small enough that you should turn stripping on wherever you want sanitization — forwarding parsed bodies to an ORM, for instance — rather than trading it away for throughput.
|
|
761
775
|
|
|
@@ -769,44 +783,45 @@ Matching Zod on these would mean allocating a fresh object (or a `Reflect.ownKey
|
|
|
769
783
|
|
|
770
784
|
| Scenario | Zod v3 | Zod v4 | **zod-compiler** | Typia | AJV | vs Zod v4 |
|
|
771
785
|
| ------------------------------------------------- | ------ | ------ | ---------------- | ----- | ----- | --------- |
|
|
772
|
-
| simple string |
|
|
773
|
-
| string (min/max) | 12.
|
|
774
|
-
| number (int+positive) |
|
|
775
|
-
| enum | 11.
|
|
776
|
-
| bigint (min/max) |
|
|
777
|
-
| tuple [string, int, bool] | 5.
|
|
778
|
-
| record\<string, number\> | 3.
|
|
779
|
-
| set\<string\> (5 items) | 3.
|
|
780
|
-
| set\<string\> (20 items) | 1.3M |
|
|
781
|
-
| map\<string, number\> (5 entries) | 2.1M | 1.4M | **
|
|
782
|
-
| map\<string, number\> (20 entries) |
|
|
783
|
-
| pipe (non-transform) | 8.
|
|
784
|
-
| discriminatedUnion (3 variants) | 3.
|
|
785
|
-
| discriminatedUnion (8 variants, rotating) | 2.7M | 3.
|
|
786
|
-
| plain union of 8 tagged objects (auto-discrim.) |
|
|
787
|
-
| strict object (DB row) | 1.8M | 3.
|
|
788
|
-
| medium object (valid) |
|
|
789
|
-
| medium object (invalid) |
|
|
790
|
-
| large object (10 items) |
|
|
791
|
-
| large object (100 items) | 13K | 18K | **1.4M** | 1.3M |
|
|
792
|
-
| recursive tree (7 nodes) |
|
|
793
|
-
| recursive tree (121 nodes) |
|
|
794
|
-
| nested recursion (7 nodes) |
|
|
795
|
-
| nested recursion (121 nodes) | 24K |
|
|
796
|
-
| deeply nested object (243 leaves) | 11K | 19K | **1.2M** | 1.1M | 122K | **
|
|
797
|
-
| event log (combined) |
|
|
798
|
-
| object with transform (zero-capture) | 1.
|
|
799
|
-
| array 10 × transform (zero-capture) |
|
|
800
|
-
| array 50 × transform (zero-capture) |
|
|
801
|
-
| object with captured transform (partial fallback) | 1.3M | 6.
|
|
786
|
+
| simple string | 13.2M | 13.9M | **16.3M** | 17.2M | 17.8M | 1.2x |
|
|
787
|
+
| string (min/max) | 12.3M | 7.7M | **16.5M** | 17.4M | 15.5M | 2.1x |
|
|
788
|
+
| number (int+positive) | 11.9M | 7.4M | **16.3M** | 17.8M | 17.1M | 2.2x |
|
|
789
|
+
| enum | 11.8M | 11.7M | **15.3M** | 17.1M | 17.1M | 1.3x |
|
|
790
|
+
| bigint (min/max) | 12.0M | 7.8M | **16.2M** | — | — | 2.1x |
|
|
791
|
+
| tuple [string, int, bool] | 5.8M | 6.7M | **17.0M** | 17.2M | 16.4M | 2.5x |
|
|
792
|
+
| record\<string, number\> | 3.2M | 2.8M | **15.5M** | 12.4M | 15.3M | 5.6x |
|
|
793
|
+
| set\<string\> (5 items) | 3.7M | 2.3M | **14.8M** | — | — | 6.5x |
|
|
794
|
+
| set\<string\> (20 items) | 1.3M | 693K | **12.4M** | — | — | **18x** |
|
|
795
|
+
| map\<string, number\> (5 entries) | 2.1M | 1.4M | **12.7M** | — | — | 9.4x |
|
|
796
|
+
| map\<string, number\> (20 entries) | 646K | 357K | **8.4M** | — | — | **24x** |
|
|
797
|
+
| pipe (non-transform) | 8.7M | 5.8M | **15.3M** | — | — | 2.6x |
|
|
798
|
+
| discriminatedUnion (3 variants) | 3.3M | 4.2M | **16.1M** | 16.1M | 7.7M | 3.8x |
|
|
799
|
+
| discriminatedUnion (8 variants, rotating) | 2.7M | 3.7M | **10.0M** | — | — | 2.7x |
|
|
800
|
+
| plain union of 8 tagged objects (auto-discrim.) | 351K | 648K | **9.5M** | — | — | **15x** |
|
|
801
|
+
| strict object (DB row) | 1.8M | 3.2M | **8.2M** | — | — | 2.6x |
|
|
802
|
+
| medium object (valid) | 1.9M | 2.4M | **10.0M** | 11.1M | 7.5M | 4.2x |
|
|
803
|
+
| medium object (invalid) | 528K | 79K | **14.5M** | 3.0M | 7.8M | **183x** |
|
|
804
|
+
| large object (10 items) | 121K | 168K | **7.6M** | 5.8M | 1.2M | **45x** |
|
|
805
|
+
| large object (100 items) | 13K | 18K | **1.4M** | 1.3M | 122K | **78x** |
|
|
806
|
+
| recursive tree (7 nodes) | 588K | 2.1M | **12.7M** | 11.6M | 4.8M | 6.0x |
|
|
807
|
+
| recursive tree (121 nodes) | 33K | 139K | **2.5M** | 1.9M | 373K | **18x** |
|
|
808
|
+
| nested recursion (7 nodes) | 402K | 1.0M | **11.8M** | 10.7M | 3.1M | **12x** |
|
|
809
|
+
| nested recursion (121 nodes) | 24K | 64K | **2.1M** | 1.6M | 223K | **32x** |
|
|
810
|
+
| deeply nested object (243 leaves) | 11K | 19K | **1.2M** | 1.1M | 122K | **63x** |
|
|
811
|
+
| event log (combined) | 382K | 618K | **6.4M** | — | — | **10x** |
|
|
812
|
+
| object with transform (zero-capture) | 1.2M | 1.9M | **6.2M** | — | — | 3.2x |
|
|
813
|
+
| array 10 × transform (zero-capture) | 124K | 219K | **3.3M** | — | — | **15x** |
|
|
814
|
+
| array 50 × transform (zero-capture) | 26K | 44K | **824K** | — | — | **19x** |
|
|
815
|
+
| object with captured transform (partial fallback) | 1.3M | 6.5M | **6.5M** | — | — | 1.0x |
|
|
816
|
+
| object with captured refine (cross-field) | 1.5M | 2.5M | **15.7M** | — | — | 6.4x |
|
|
802
817
|
|
|
803
818
|
_ops/s, higher is better. "—" = not supported by the library. Measured with `vitest bench` on Apple M4 Max (zod 4.3.6, zod v3 3.23.8, typia 12, ajv 8), best of two full runs; rows reproduce within ~5% between runs. The harness itself costs ~55 ns per iteration — the fastest rows sit at that floor — so it compresses the top of the range: gaps between the three AOT columns on the primitive rows are below the noise, not real._
|
|
804
819
|
|
|
805
|
-
Performance scales with schema complexity. Nested objects and arrays see the biggest gains because zod-compiler eliminates per-node traversal overhead. Deeply nested schemas (the 243-leaf dashboard row) stay fast because oversized fast-check functions are split into smaller boolean helpers, each kept within V8's optimizing-compiler budget. `discriminatedUnion`
|
|
820
|
+
Performance scales with schema complexity. Nested objects and arrays see the biggest gains because zod-compiler eliminates per-node traversal overhead. Deeply nested schemas (the 243-leaf dashboard row) stay fast because oversized fast-check functions are split into smaller boolean helpers, each kept within V8's optimizing-compiler budget. `discriminatedUnion` dispatches instead of trying options in sequence the way Zod does, and each case validates only its variant's distinctive fields — the object type-guard and the discriminator are checked once before dispatch, never re-checked inside the matched case (a redundancy the engine only elides on unions small enough to inline, so large unions get a measured ~1.5x on the fast check). Dispatch is genuinely O(1) for string discriminators: a `switch` over string labels is only _written_ as a jump, V8 lowers it to sequential `===` comparisons (~0.5 ns per preceding case, so 52 ns of pure dispatch at 80 variants), so the discriminator goes through a `{value: ordinal}` table into a dense integer switch — measured 1.9x at 8 variants and 2.8x at 60, for ~1% more generated bytes. Unions of two variants, or with non-string discriminators, keep the plain switch. A **plain `z.union`** of objects that all pin a shared key to disjoint literals is auto-detected and lowered to the same switch dispatch — so an untagged union written without `discriminatedUnion` still validates in O(1) (15x faster than Zod here), as long as it has enough options to outweigh the switch's setup cost; below that it keeps the fully-inlined `||`-chain, whose options and per-option checks are ordered cheapest-first so a non-matching option is dropped without running its regexes. The invalid-input row is large because failed `safeParse` defers error materialization until `.error` is read. Zero-capture `transform`/`refine` callbacks are compiled (3-19x), and a captured `refine` is compiled too — its predicate is called by reference rather than costing the schema its compiled path (the cross-field row: 2.5M → 15.7M). Only captured `transform`s still fall back per-field and roughly match Zod.
|
|
806
821
|
|
|
807
|
-
`parse()` (throwing API) rides a zero-allocation fast path: medium object 2.4M → 10.
|
|
822
|
+
`parse()` (throwing API) rides a zero-allocation fast path: medium object 2.4M → 10.2M ops/s (4.3x), large object (100 items) 18K → 1.4M ops/s (78x).
|
|
808
823
|
|
|
809
|
-
The `.is()` guard answers both halves of "does this match?" cheaply — 10.
|
|
824
|
+
The `.is()` guard answers both halves of "does this match?" cheaply — 10.3M ops/s on matching input and **16.8M on non-matching**, against Zod's 2.4M / 159K via `safeParse().success` (medium object). Rejection is the _faster_ half by construction: the fast check's conjuncts are ordered so a mismatch is decided on a type guard rather than on the schema's most expensive check — 106x Zod, which pays full error construction to say no.
|
|
810
825
|
|
|
811
826
|
```bash
|
|
812
827
|
pnpm benchmark # run locally
|
|
@@ -825,6 +840,10 @@ Additional optimizations: pre-compiled regex, per-type check ordering (a string'
|
|
|
825
840
|
|
|
826
841
|
**Object construction.** Where a fresh object must be produced — `stripUnknownKeys` — it is emitted as one object literal rather than assembled key by key. V8 stamps a literal out of a cached boilerplate map in a single allocation; adding keys one at a time walks a transition chain and re-checks the map on every store, which measured 8.1x slower on a 20-key shape. Keys that can be absent (optionals) are appended after the literal, in shape order, under zod's own presence rule.
|
|
827
842
|
|
|
843
|
+
**Local bindings for called helpers.** Lean mode imports its shared helpers from the plugin's runtime module, and a bundler leaves those as module-scope `var`s. V8 folds a _local_ binding into a constant callee and inlines straight through `helper.call(...)`; a mutable module-scope one it will not, so the record fast path's per-key `__zcHop.call(o, k)` became a generic call. Aliasing such helpers into the IIFE once fixes it: measured on a plugin-transformed, esbuild-bundled artifact, a 5-key record went 34.6 ns → 9.2 ns and a 20-key record 157.3 ns → 23.1 ns. Only helpers invoked through `.call` need this — a direct call to an imported function, and an imported RegExp receiver, are both unaffected.
|
|
844
|
+
|
|
845
|
+
**One declaration per value.** Constant tables — an enum's `Set`, a strict shape's key list, a file's mime list — are keyed by their initializer, so a value list reached from both the fast check and the slow walk, or shared by sibling properties, is emitted once rather than per use. Worth 18-21% of the generated bytes on enum-heavy schemas, and 10% raw / 5% gzip across a realistic schema set.
|
|
846
|
+
|
|
828
847
|
**Membership tests.** A strict object's unknown-key pass consults an object literal (`TABLE[k] === 1`) rather than a `Set`, whose `has` costs a flat ~4 ns hash probe per key however small the set — 3.7x (8 keys) to 4.5x (32 keys) faster over the same for-in, taking an 8-key strict object from 53 ns to 32 ns end to end. Enum values keep the existing split: an inlined `===` chain up to 5 values, one `Set` lookup above that.
|
|
829
848
|
|
|
830
849
|
Run `npx zod-compiler check --json` to see which schemas qualify for Fast Path.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BigIntCheckIR, CheckIR, DateCheckIR, SchemaIR, SetCheckIR } from "../types.js";
|
|
1
|
+
import type { BigIntCheckIR, CheckIR, DateCheckIR, RefineEffectCheckIR, SchemaIR, SetCheckIR } from "../types.js";
|
|
2
2
|
import type { SharedSchemaPlan } from "./dedupe.js";
|
|
3
3
|
/** Codegen output mode. "inline" emits self-contained code (CLI .compiled.ts). "lean" emits references to imports from "virtual:zod-compiler/runtime" (unplugin). */
|
|
4
4
|
export type CodegenMode = "inline" | "lean";
|
|
@@ -87,6 +87,8 @@ export interface CodeGenContext {
|
|
|
87
87
|
recTargets?: Map<number, RecTargetGen>;
|
|
88
88
|
/** Dedup cache for hosted zero-capture effect functions: source text → preamble var. */
|
|
89
89
|
effectFnCache?: Map<string, string>;
|
|
90
|
+
/** Dedup cache for constant preamble declarations: initializer text → preamble var. */
|
|
91
|
+
valueCache?: Map<string, string>;
|
|
90
92
|
/** Memo for estimateFastCost (size-gated fast-check extraction). Lazily created. */
|
|
91
93
|
fastSizeCache?: WeakMap<SchemaIR, number>;
|
|
92
94
|
/** Memo for estimateRuntimeCost (cheapest-first check ordering). Lazily created. */
|
|
@@ -218,6 +220,17 @@ export declare function emitTemp(ctx: CodeGenContext, prefix: string): string;
|
|
|
218
220
|
* by source text.
|
|
219
221
|
*/
|
|
220
222
|
export declare function emitEffectFn(ctx: CodeGenContext, source: string): string;
|
|
223
|
+
/**
|
|
224
|
+
* Callable expression for a refine predicate.
|
|
225
|
+
*
|
|
226
|
+
* A zero-capture callback is hosted from its source text; one that CAPTURES
|
|
227
|
+
* outer variables is called by reference through `__rf[N]` — the user's own
|
|
228
|
+
* function object, reached from the schema — instead of costing the schema its
|
|
229
|
+
* compiled path. The reference is aliased into a preamble binding rather than
|
|
230
|
+
* re-read per call, for the same reason call-invoked helpers are (a per-call
|
|
231
|
+
* array element load is not a foldable callee).
|
|
232
|
+
*/
|
|
233
|
+
export declare function emitRefinePredicate(ctx: CodeGenContext, check: RefineEffectCheckIR): string;
|
|
221
234
|
/**
|
|
222
235
|
* Pristine fallback delegate: declare `var __rfp_N=__rf[N].safeParse.bind(__rf[N]);`
|
|
223
236
|
* in the preamble and return the variable name. Generated code must NEVER read
|
|
@@ -251,6 +264,18 @@ export declare function emitRegex(ctx: CodeGenContext, prefix: string, pattern:
|
|
|
251
264
|
* stays a single bundle-wide string; inline mode declares it once per IIFE.
|
|
252
265
|
*/
|
|
253
266
|
export declare function emitRegexSourceString(ctx: CodeGenContext, pattern: string): string;
|
|
267
|
+
/**
|
|
268
|
+
* Declare a constant value in the preamble and return its variable name,
|
|
269
|
+
* reusing an earlier declaration of the SAME initializer.
|
|
270
|
+
*
|
|
271
|
+
* Value tables are reached from both halves of a validator — an enum's `Set`
|
|
272
|
+
* from its fast check and again from its slow walk, a strict shape's key table
|
|
273
|
+
* likewise — and repeat across sibling properties that share a value list. One
|
|
274
|
+
* declaration per USE emitted the payload two or four times: measured 17% of a
|
|
275
|
+
* 20-value enum schema's generated bytes, 16% for an object with two identical
|
|
276
|
+
* enums. Keyed by initializer text, so only identical payloads collapse.
|
|
277
|
+
*/
|
|
278
|
+
export declare function emitConstant(ctx: CodeGenContext, prefix: string, initializer: string): string;
|
|
254
279
|
/** Declare a `new Set([...])` in the preamble and return its variable name. */
|
|
255
280
|
export declare function emitSet(ctx: CodeGenContext, prefix: string, values: readonly unknown[]): string;
|
|
256
281
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,24 @@ export function emitEffectFn(ctx, source) {
|
|
|
26
26
|
ctx.effectFnCache.set(source, name);
|
|
27
27
|
return name;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Callable expression for a refine predicate.
|
|
31
|
+
*
|
|
32
|
+
* A zero-capture callback is hosted from its source text; one that CAPTURES
|
|
33
|
+
* outer variables is called by reference through `__rf[N]` — the user's own
|
|
34
|
+
* function object, reached from the schema — instead of costing the schema its
|
|
35
|
+
* compiled path. The reference is aliased into a preamble binding rather than
|
|
36
|
+
* re-read per call, for the same reason call-invoked helpers are (a per-call
|
|
37
|
+
* array element load is not a foldable callee).
|
|
38
|
+
*/
|
|
39
|
+
export function emitRefinePredicate(ctx, check) {
|
|
40
|
+
if (check.refIndex !== undefined)
|
|
41
|
+
return emitConstant(ctx, "rfn", `__rf[${check.refIndex}]`);
|
|
42
|
+
if (check.source === undefined) {
|
|
43
|
+
throw new Error("refine_effect check has neither inlineable source nor a reference index");
|
|
44
|
+
}
|
|
45
|
+
return emitEffectFn(ctx, check.source);
|
|
46
|
+
}
|
|
29
47
|
/**
|
|
30
48
|
* Pristine fallback delegate: declare `var __rfp_N=__rf[N].safeParse.bind(__rf[N]);`
|
|
31
49
|
* in the preamble and return the variable name. Generated code must NEVER read
|
|
@@ -103,11 +121,30 @@ export function emitRegexSourceString(ctx, pattern) {
|
|
|
103
121
|
ctx.regexCache.set(cacheKey, name);
|
|
104
122
|
return name;
|
|
105
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* Declare a constant value in the preamble and return its variable name,
|
|
126
|
+
* reusing an earlier declaration of the SAME initializer.
|
|
127
|
+
*
|
|
128
|
+
* Value tables are reached from both halves of a validator — an enum's `Set`
|
|
129
|
+
* from its fast check and again from its slow walk, a strict shape's key table
|
|
130
|
+
* likewise — and repeat across sibling properties that share a value list. One
|
|
131
|
+
* declaration per USE emitted the payload two or four times: measured 17% of a
|
|
132
|
+
* 20-value enum schema's generated bytes, 16% for an object with two identical
|
|
133
|
+
* enums. Keyed by initializer text, so only identical payloads collapse.
|
|
134
|
+
*/
|
|
135
|
+
export function emitConstant(ctx, prefix, initializer) {
|
|
136
|
+
ctx.valueCache ??= new Map();
|
|
137
|
+
const cached = ctx.valueCache.get(initializer);
|
|
138
|
+
if (cached !== undefined)
|
|
139
|
+
return cached;
|
|
140
|
+
const name = `__${prefix}_${ctx.counter++}`;
|
|
141
|
+
ctx.preamble.push(`var ${name}=${initializer};`);
|
|
142
|
+
ctx.valueCache.set(initializer, name);
|
|
143
|
+
return name;
|
|
144
|
+
}
|
|
106
145
|
/** Declare a `new Set([...])` in the preamble and return its variable name. */
|
|
107
146
|
export function emitSet(ctx, prefix, values) {
|
|
108
|
-
|
|
109
|
-
ctx.preamble.push(`var ${name}=new Set(${JSON.stringify([...values])});`);
|
|
110
|
-
return name;
|
|
147
|
+
return emitConstant(ctx, `set_${prefix}`, `new Set(${JSON.stringify([...values])})`);
|
|
111
148
|
}
|
|
112
149
|
/**
|
|
113
150
|
* An object literal cannot carry an own `__proto__` key: `{"__proto__":1}`
|
|
@@ -130,10 +167,8 @@ function literalSafeKeys(keys) {
|
|
|
130
167
|
* that is never the number 1, so they read as unknown exactly as they should.
|
|
131
168
|
*/
|
|
132
169
|
function emitKeyLookup(ctx, prefix, keys) {
|
|
133
|
-
const name = `__ko_${prefix}_${ctx.counter++}`;
|
|
134
170
|
const entries = keys.map((k) => `${escapeString(k)}:1`).join(",");
|
|
135
|
-
ctx
|
|
136
|
-
return name;
|
|
171
|
+
return emitConstant(ctx, `ko_${prefix}`, `{${entries}}`);
|
|
137
172
|
}
|
|
138
173
|
/**
|
|
139
174
|
* Boolean membership test for one key variable against a fixed key list.
|
|
@@ -208,6 +243,20 @@ export function literalToJs(v) {
|
|
|
208
243
|
return String(v);
|
|
209
244
|
return JSON.stringify(v);
|
|
210
245
|
}
|
|
246
|
+
/**
|
|
247
|
+
* Helpers that generated code invokes through `Function.prototype.call`, and
|
|
248
|
+
* which therefore must be aliased into a module-local binding in lean mode.
|
|
249
|
+
*
|
|
250
|
+
* V8 folds a local `const` callee into a constant and inlines straight through
|
|
251
|
+
* `x.call(...)`; an IMPORTED binding is a cell it will not fold, so the same
|
|
252
|
+
* expression stays a generic property load plus a generic call — measured 4.5x
|
|
253
|
+
* (5 keys) to 6.5x (20 keys) slower on the record fast path, 35.9 ns vs 7.2 ns
|
|
254
|
+
* for a 5-key record. Aliasing the import into the IIFE recovers all of it
|
|
255
|
+
* (7.4 ns). A DIRECT call to an imported function (`__zcFsr(v,s)`) is not
|
|
256
|
+
* penalized — measured identical — and neither is an imported RegExp receiver,
|
|
257
|
+
* so only the `.call` sites are listed here.
|
|
258
|
+
*/
|
|
259
|
+
const CALL_INVOKED_HELPERS = new Set(["__zcHop"]);
|
|
211
260
|
/**
|
|
212
261
|
* Reference a shared runtime helper (e.g. __zcFsr) from generated code.
|
|
213
262
|
* Lean mode: registers it for the `virtual:zod-compiler/runtime` import.
|
|
@@ -216,6 +265,8 @@ export function literalToJs(v) {
|
|
|
216
265
|
export function emitRuntimeHelper(ctx, name, decl) {
|
|
217
266
|
if (ctx.mode === "lean") {
|
|
218
267
|
ctx.usedHelpers.add(name);
|
|
268
|
+
if (CALL_INVOKED_HELPERS.has(name))
|
|
269
|
+
return emitConstant(ctx, "lh", name);
|
|
219
270
|
}
|
|
220
271
|
else if (!ctx.preamble.includes(decl)) {
|
|
221
272
|
ctx.preamble.push(decl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"
|
|
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":"index.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAkB,aAAa,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AAE7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,wBAAwB,GACjC,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAkB,aAAa,EAAE,WAAW,EAAgB,MAAM,cAAc,CAAC;AAE7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,wBAAwB,GACjC,aAAa,CAgSf"}
|
|
@@ -76,6 +76,7 @@ export function generateValidator(ir, name, options) {
|
|
|
76
76
|
const fastPreambleLen = ctx.preamble.length;
|
|
77
77
|
const fastRegexCache = new Map(ctx.regexCache);
|
|
78
78
|
const fastEffectCache = ctx.effectFnCache && new Map(ctx.effectFnCache);
|
|
79
|
+
const fastValueCache = ctx.valueCache && new Map(ctx.valueCache);
|
|
79
80
|
const fastRecName = ctx.recFastName;
|
|
80
81
|
const fg = createFastGen("input", ctx);
|
|
81
82
|
let fastExpr = generateFast(ir, fg);
|
|
@@ -103,6 +104,12 @@ export function generateValidator(ir, name, options) {
|
|
|
103
104
|
delete ctx.effectFnCache;
|
|
104
105
|
else
|
|
105
106
|
ctx.effectFnCache = fastEffectCache;
|
|
107
|
+
// Value declarations the abandoned walk emitted are truncated above, so
|
|
108
|
+
// their cache entries would name identifiers that no longer exist.
|
|
109
|
+
if (fastValueCache === undefined)
|
|
110
|
+
delete ctx.valueCache;
|
|
111
|
+
else
|
|
112
|
+
ctx.valueCache = fastValueCache;
|
|
106
113
|
if (fastRecName === undefined)
|
|
107
114
|
delete ctx.recFastName;
|
|
108
115
|
else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/codegen/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/codegen/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { checkPriority,
|
|
1
|
+
import { checkPriority, emitRefinePredicate, extendPath, hasMutation } from "../context.js";
|
|
2
2
|
import { emit } from "../emit.js";
|
|
3
3
|
import { invalidType, tooBig, tooSmall } from "../emit-issue.js";
|
|
4
4
|
import { refineCheck } from "./effect.js";
|
|
@@ -85,7 +85,7 @@ export function fastArray(ir, g) {
|
|
|
85
85
|
// Refine effect checks (appended last — run after cheap checks short-circuit)
|
|
86
86
|
for (const check of ir.checks) {
|
|
87
87
|
if (check.kind === "refine_effect") {
|
|
88
|
-
parts.push(`${
|
|
88
|
+
parts.push(`${emitRefinePredicate(g.ctx, check)}(${x})`);
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
return parts.join("&&");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/array.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"array.js","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/array.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discriminated-union.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/discriminated-union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAY,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAKtD,+DAA+D;AAC/D,KAAK,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,EAC7C,CAAC,EAAE,OAAO,GACT,MAAM,CAsCR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CACzC,CAAC,EAAE,OAAO,EACV,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,OAAO,EAAE,SAAS,QAAQ,EAAE,GAC3B,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"discriminated-union.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/discriminated-union.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAY,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAKtD,+DAA+D;AAC/D,KAAK,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,EAC7C,CAAC,EAAE,OAAO,GACT,MAAM,CAsCR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CACzC,CAAC,EAAE,OAAO,EACV,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,SAAS,iBAAiB,EAAE,EACnC,OAAO,EAAE,SAAS,QAAQ,EAAE,GAC3B,MAAM,GAAG,IAAI,CAiDf;AAoCD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE1F;AA0BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,QAAQ,EAAE,GAC3B;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;CAAE,GAAG,IAAI,CA2B9D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { escapeString, extendPath, hasMutation, literalToJs } from "../context.js";
|
|
1
|
+
import { emitConstant, escapeString, extendPath, hasMutation, literalToJs } from "../context.js";
|
|
2
2
|
import { emit } from "../emit.js";
|
|
3
3
|
import { invalidType } from "../emit-issue.js";
|
|
4
4
|
export function slowDiscriminatedUnion(ir, g) {
|
|
@@ -58,21 +58,78 @@ export function emitFastDiscriminatedSwitch(g, discriminator, cases, options) {
|
|
|
58
58
|
const discKey = escapeString(discriminator);
|
|
59
59
|
const helperName = g.temp("du");
|
|
60
60
|
const helperParam = g.temp("dx");
|
|
61
|
-
const caseStrs = [];
|
|
62
61
|
// The switch body is its own function: size-gate the options against the cap
|
|
63
62
|
// in a fresh scope, otherwise many small options accumulate into the caller's
|
|
64
63
|
// scope while this helper itself grows unbounded past the TurboFan budget.
|
|
65
64
|
const body = g.scoped(helperParam);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
const table = stringDispatchTable(cases);
|
|
66
|
+
if (table === null) {
|
|
67
|
+
const caseStrs = [];
|
|
68
|
+
for (const { value, option: index } of cases) {
|
|
69
|
+
const check = body.visit(options[index], { discSkipKey: discriminator });
|
|
70
|
+
if (check === null)
|
|
71
|
+
return null;
|
|
72
|
+
caseStrs.push(`case ${literalToJs(value)}:return ${check};`);
|
|
73
|
+
}
|
|
74
|
+
g.ctx.preamble.push(`function ${helperName}(${helperParam}){switch(${helperParam}[${discKey}]){${caseStrs.join("")}default:return false;}}`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Dispatch through a string→ordinal table, then switch on the ordinal. V8
|
|
78
|
+
// compiles a switch over STRING labels as sequential `===` comparisons, so
|
|
79
|
+
// the plain form costs ~0.5 ns per preceding case: measured 4.1 ns (2
|
|
80
|
+
// variants), 11.4 (8), 52.1 (80). A dense integer switch becomes a jump
|
|
81
|
+
// table, leaving the lookup flat — 5.9 ns (8) and 15.1 (80), i.e. 1.9x to
|
|
82
|
+
// 3.5x, for a table that adds ~1.3% to a union's generated bytes.
|
|
83
|
+
//
|
|
84
|
+
// `typeof t==="string"` is load-bearing: property access would coerce a
|
|
85
|
+
// non-string discriminator (an object's toString, a number) into a key that
|
|
86
|
+
// could hit a case whose own discriminator check the switch has stripped.
|
|
87
|
+
// Strict equality never matched those, so the guard keeps the verdict.
|
|
88
|
+
const caseStrs = [];
|
|
89
|
+
for (const [optionIndex, ordinal] of table.ordinals) {
|
|
90
|
+
const check = body.visit(options[optionIndex], { discSkipKey: discriminator });
|
|
91
|
+
if (check === null)
|
|
92
|
+
return null;
|
|
93
|
+
caseStrs.push(`case ${ordinal}:return ${check};`);
|
|
94
|
+
}
|
|
95
|
+
const tableVar = emitConstant(g.ctx, "dt", table.initializer);
|
|
96
|
+
const t = g.temp("dv");
|
|
97
|
+
g.ctx.preamble.push(`function ${helperName}(${helperParam}){var ${t}=${helperParam}[${discKey}];` +
|
|
98
|
+
`switch(typeof ${t}==="string"?${tableVar}[${t}]:0){${caseStrs.join("")}default:return false;}}`);
|
|
72
99
|
}
|
|
73
|
-
g.ctx.preamble.push(`function ${helperName}(${helperParam}){switch(${helperParam}[${discKey}]){${caseStrs.join("")}default:return false;}}`);
|
|
74
100
|
return `typeof ${x}==="object"&&${x}!==null&&!Array.isArray(${x})&&${helperName}(${x})`;
|
|
75
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Minimum case count for ordinal dispatch. Measured crossover is 3: at 2 cases
|
|
104
|
+
* the string switch is one comparison and beats the extra table lookup
|
|
105
|
+
* (4.1 ns vs 4.5), at 3 the table already wins (6.1 vs 4.6).
|
|
106
|
+
*/
|
|
107
|
+
const MIN_TABLE_DISPATCH = 3;
|
|
108
|
+
/**
|
|
109
|
+
* Build the `{value: ordinal}` dispatch table for a set of cases, or null when
|
|
110
|
+
* the plain string switch should be kept. Requires every discriminator value to
|
|
111
|
+
* be a string — mixed types would collide once coerced to property keys (`5`
|
|
112
|
+
* and `"5"`) — and excludes `__proto__`, which an object literal cannot hold as
|
|
113
|
+
* an own key. Values that select the SAME option share one ordinal, so a
|
|
114
|
+
* multi-value literal emits its check once instead of per value.
|
|
115
|
+
*/
|
|
116
|
+
function stringDispatchTable(cases) {
|
|
117
|
+
if (cases.length < MIN_TABLE_DISPATCH)
|
|
118
|
+
return null;
|
|
119
|
+
if (!cases.every((c) => typeof c.value === "string" && c.value !== "__proto__"))
|
|
120
|
+
return null;
|
|
121
|
+
const ordinals = new Map();
|
|
122
|
+
const entries = [];
|
|
123
|
+
for (const { value, option } of cases) {
|
|
124
|
+
let ordinal = ordinals.get(option);
|
|
125
|
+
if (ordinal === undefined) {
|
|
126
|
+
ordinal = ordinals.size + 1;
|
|
127
|
+
ordinals.set(option, ordinal);
|
|
128
|
+
}
|
|
129
|
+
entries.push(`${escapeString(value)}:${ordinal}`);
|
|
130
|
+
}
|
|
131
|
+
return { initializer: `{${entries.join(",")}}`, ordinals };
|
|
132
|
+
}
|
|
76
133
|
export function fastDiscriminatedUnion(ir, g) {
|
|
77
134
|
return emitFastDiscriminatedSwitch(g, ir.discriminator, ir.cases, ir.options);
|
|
78
135
|
}
|