zod-compiler 1.0.0 → 1.0.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/README.md +74 -74
- package/dist/cli/commands/generate.d.ts +0 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +8 -1
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +4 -1
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/discovery.d.ts +1 -2
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +1 -1
- package/dist/discovery.js.map +1 -1
- package/dist/loader.d.ts +18 -6
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +91 -38
- package/dist/loader.js.map +1 -1
- package/dist/static-filter.d.ts +7 -0
- package/dist/static-filter.d.ts.map +1 -0
- package/dist/static-filter.js +396 -0
- package/dist/static-filter.js.map +1 -0
- package/dist/unplugin/index.d.ts.map +1 -1
- package/dist/unplugin/index.js +31 -4
- package/dist/unplugin/index.js.map +1 -1
- package/dist/unplugin/transform.d.ts.map +1 -1
- package/dist/unplugin/transform.js +9 -2
- package/dist/unplugin/transform.js.map +1 -1
- package/dist/unplugin/types.d.ts +13 -0
- package/dist/unplugin/types.d.ts.map +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ npm install zod-compiler zod@^4
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
| Runtime | Version |
|
|
36
|
-
|
|
36
|
+
| ------- | ------- |
|
|
37
37
|
| Node.js | 20+ |
|
|
38
38
|
| Bun | 1.3+ |
|
|
39
39
|
| Deno | 2.0+ |
|
|
@@ -83,11 +83,12 @@ export const ListUsersSchema = z.object({
|
|
|
83
83
|
**Use them as usual:**
|
|
84
84
|
|
|
85
85
|
```typescript
|
|
86
|
-
const user = CreateUserSchema.parse(data);
|
|
87
|
-
const result = CreateUserSchema.safeParse(data);
|
|
86
|
+
const user = CreateUserSchema.parse(data); // throws on failure
|
|
87
|
+
const result = CreateUserSchema.safeParse(data); // { success, data/error }
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
At build time, the plugin:
|
|
91
|
+
|
|
91
92
|
1. Finds every file with `import ... from "zod"` (skips type-only imports)
|
|
92
93
|
2. Executes the file and detects exported Zod schemas
|
|
93
94
|
3. Compiles each schema into an optimized validator
|
|
@@ -137,35 +138,40 @@ npx zod-compiler generate src/ --watch
|
|
|
137
138
|
|
|
138
139
|
### Supported Build Tools
|
|
139
140
|
|
|
140
|
-
| Build Tool | Import
|
|
141
|
-
|
|
142
|
-
| Vite
|
|
143
|
-
| webpack
|
|
144
|
-
| esbuild
|
|
145
|
-
| Rollup
|
|
146
|
-
| Rolldown
|
|
147
|
-
| rspack
|
|
148
|
-
| Bun
|
|
149
|
-
| Farm
|
|
141
|
+
| Build Tool | Import |
|
|
142
|
+
| ---------- | ------------------------------------------------- |
|
|
143
|
+
| Vite | `import zodCompiler from "zod-compiler/vite"` |
|
|
144
|
+
| webpack | `import zodCompiler from "zod-compiler/webpack"` |
|
|
145
|
+
| esbuild | `import zodCompiler from "zod-compiler/esbuild"` |
|
|
146
|
+
| Rollup | `import zodCompiler from "zod-compiler/rollup"` |
|
|
147
|
+
| Rolldown | `import zodCompiler from "zod-compiler/rolldown"` |
|
|
148
|
+
| rspack | `import zodCompiler from "zod-compiler/rspack"` |
|
|
149
|
+
| Bun | `import zodCompiler from "zod-compiler/bun"` |
|
|
150
|
+
| Farm | `import zodCompiler from "zod-compiler/farm"` |
|
|
150
151
|
|
|
151
152
|
### Options
|
|
152
153
|
|
|
153
|
-
| Option
|
|
154
|
-
|
|
155
|
-
| `autoDiscover` | `boolean`
|
|
156
|
-
| `include`
|
|
157
|
-
| `exclude`
|
|
158
|
-
| `zodCompat`
|
|
159
|
-
| `verbose`
|
|
154
|
+
| Option | Type | Default | Description |
|
|
155
|
+
| -------------- | ----------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
156
|
+
| `autoDiscover` | `boolean` | `false` | Auto-detect all exported Zod schemas without `compile()` |
|
|
157
|
+
| `include` | `string[]` | — | Only process files matching these substrings |
|
|
158
|
+
| `exclude` | `string[]` | — | Skip files matching these substrings |
|
|
159
|
+
| `zodCompat` | `boolean` | `true` | Preserve Zod API via `Object.create()`. Set `false` for smaller output |
|
|
160
|
+
| `verbose` | `boolean` | `false` | Log per-schema compilation status during build |
|
|
161
|
+
| `apply` | `"build" \| "serve" \| "all"` | `"build"` | **Vite only**: when the plugin runs. Defaults to production builds only — dev servers and Vitest use the Zod fallback (correct, just uncompiled). Set `"all"` to also compile in dev/test |
|
|
160
162
|
|
|
161
163
|
```typescript
|
|
162
164
|
zodCompiler({
|
|
163
165
|
autoDiscover: true,
|
|
164
166
|
include: ["src/schemas"],
|
|
165
167
|
verbose: true,
|
|
166
|
-
})
|
|
168
|
+
});
|
|
167
169
|
```
|
|
168
170
|
|
|
171
|
+
> **Note:** Vitest runs Vite in serve mode, so with the default `apply: "build"`
|
|
172
|
+
> the plugin is inactive during tests and validators fall back to Zod. Pass
|
|
173
|
+
> `apply: "all"` if your tests should exercise the compiled validators.
|
|
174
|
+
|
|
169
175
|
### Bundle Size & Cross-File Dedup
|
|
170
176
|
|
|
171
177
|
Generated validators share a small runtime helper layer (`__mkv` validator
|
|
@@ -194,18 +200,18 @@ With `autoDiscover`, the plugin executes files to inspect their exports. If a fi
|
|
|
194
200
|
zodCompiler({
|
|
195
201
|
autoDiscover: true,
|
|
196
202
|
include: ["src/schemas", "src/validators"],
|
|
197
|
-
})
|
|
203
|
+
});
|
|
198
204
|
```
|
|
199
205
|
|
|
200
206
|
### autoDiscover vs compile()
|
|
201
207
|
|
|
202
|
-
|
|
|
203
|
-
|
|
204
|
-
| Source code changes
|
|
205
|
-
| `zod-compiler` import needed | No
|
|
206
|
-
| What gets compiled
|
|
207
|
-
| Build-time file execution
|
|
208
|
-
| Best for
|
|
208
|
+
| | autoDiscover | compile() |
|
|
209
|
+
| ---------------------------- | ----------------------------------- | ------------------------------------------- |
|
|
210
|
+
| Source code changes | None | Wrap each schema |
|
|
211
|
+
| `zod-compiler` import needed | No | Yes |
|
|
212
|
+
| What gets compiled | All exported Zod schemas | Only wrapped schemas |
|
|
213
|
+
| Build-time file execution | Files with `import ... from "zod"` | Files with `import ... from "zod-compiler"` |
|
|
214
|
+
| Best for | New projects, framework integration | Gradual adoption, selective optimization |
|
|
209
215
|
|
|
210
216
|
## Framework Examples
|
|
211
217
|
|
|
@@ -225,9 +231,7 @@ export const CreateUserSchema = z.object({
|
|
|
225
231
|
import { CreateUserSchema } from "./schemas";
|
|
226
232
|
|
|
227
233
|
export const appRouter = t.router({
|
|
228
|
-
createUser: t.procedure
|
|
229
|
-
.input(CreateUserSchema)
|
|
230
|
-
.mutation(({ input }) => createUser(input)),
|
|
234
|
+
createUser: t.procedure.input(CreateUserSchema).mutation(({ input }) => createUser(input)),
|
|
231
235
|
});
|
|
232
236
|
```
|
|
233
237
|
|
|
@@ -305,11 +309,11 @@ npx zod-compiler check src/schemas.ts --json
|
|
|
305
309
|
npx zod-compiler check src/schemas.ts --json --fail-under 80
|
|
306
310
|
```
|
|
307
311
|
|
|
308
|
-
| Flag
|
|
309
|
-
|
|
310
|
-
| `--json`
|
|
312
|
+
| Flag | Description |
|
|
313
|
+
| -------------------- | --------------------------------------- |
|
|
314
|
+
| `--json` | Structured JSON output |
|
|
311
315
|
| `--fail-under <pct>` | Exit code 1 if coverage below threshold |
|
|
312
|
-
| `--no-color`
|
|
316
|
+
| `--no-color` | Disable colored output |
|
|
313
317
|
|
|
314
318
|
## What Gets Compiled
|
|
315
319
|
|
|
@@ -323,13 +327,13 @@ All standard Zod checks are supported: `min`, `max`, `length`, `email`, `url`, `
|
|
|
323
327
|
|
|
324
328
|
These types contain JavaScript closures that cannot be compiled to static code:
|
|
325
329
|
|
|
326
|
-
| Type
|
|
327
|
-
|
|
328
|
-
| `transform`
|
|
329
|
-
| `refine` / `superRefine` | Custom validation closures
|
|
330
|
-
| `custom`
|
|
331
|
-
| `preprocess`
|
|
332
|
-
| `lazy` (non-recursive)
|
|
330
|
+
| Type | Why | Alternative |
|
|
331
|
+
| ------------------------ | ------------------------------------ | --------------------------------------- |
|
|
332
|
+
| `transform` | Runtime data transformation function | Use `z.pipe()` when possible |
|
|
333
|
+
| `refine` / `superRefine` | Custom validation closures | Use built-in checks when possible |
|
|
334
|
+
| `custom` | Arbitrary validation logic | — |
|
|
335
|
+
| `preprocess` | Input preprocessing function | Use `z.coerce` when possible |
|
|
336
|
+
| `lazy` (non-recursive) | Cannot resolve inner type | Use self-referencing lazy for recursion |
|
|
333
337
|
|
|
334
338
|
**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.
|
|
335
339
|
|
|
@@ -339,33 +343,33 @@ These types contain JavaScript closures that cannot be compiled to static code:
|
|
|
339
343
|
|
|
340
344
|
5-way comparison: **Zod v3** vs **Zod v4** vs **zod-compiler** vs **[Typia](https://typia.io/)** vs **[AJV](https://ajv.js.org/)**
|
|
341
345
|
|
|
342
|
-
| Scenario
|
|
343
|
-
|
|
344
|
-
| simple string
|
|
345
|
-
| string (min/max)
|
|
346
|
-
| number (int+positive)
|
|
347
|
-
| enum
|
|
348
|
-
| bigint (min/max)
|
|
349
|
-
| tuple [string, int, bool]
|
|
350
|
-
| record\<string, number\>
|
|
351
|
-
| set\<string\> (5 items)
|
|
352
|
-
| set\<string\> (20 items)
|
|
353
|
-
| map\<string, number\> (5 entries)
|
|
354
|
-
| map\<string, number\> (20 entries)
|
|
355
|
-
| pipe (non-transform)
|
|
356
|
-
| discriminatedUnion (3 variants)
|
|
357
|
-
| medium object (valid)
|
|
358
|
-
| medium object (invalid)
|
|
359
|
-
| large object (10 items)
|
|
360
|
-
| large object (100 items)
|
|
361
|
-
| recursive tree (7 nodes)
|
|
362
|
-
| recursive tree (121 nodes)
|
|
363
|
-
| event log (combined)
|
|
364
|
-
| partial fallback obj (transform)
|
|
365
|
-
| partial fallback arr 10 (transform) | 88K
|
|
366
|
-
| partial fallback arr 50 (transform) | 18K
|
|
367
|
-
|
|
368
|
-
|
|
346
|
+
| Scenario | Zod v3 | Zod v4 | **zod-compiler** | Typia | AJV | vs Zod v4 |
|
|
347
|
+
| ----------------------------------- | ------ | ------ | ---------------- | ----- | ----- | --------- |
|
|
348
|
+
| simple string | 8.7M | 10.0M | **11.0M** | 11.0M | 11.1M | 1.1x |
|
|
349
|
+
| string (min/max) | 8.3M | 6.0M | **11.1M** | 11.3M | 9.5M | 1.8x |
|
|
350
|
+
| number (int+positive) | 8.2M | 5.8M | **10.9M** | 10.7M | 10.9M | 1.9x |
|
|
351
|
+
| enum | 8.0M | 9.5M | **10.6M** | 10.6M | 10.5M | 1.1x |
|
|
352
|
+
| bigint (min/max) | 8.0M | 6.0M | **10.9M** | — | — | 1.8x |
|
|
353
|
+
| tuple [string, int, bool] | 4.0M | 4.4M | **10.5M** | 10.8M | 10.5M | 2.4x |
|
|
354
|
+
| record\<string, number\> | 2.3M | 1.9M | **5.4M** | 7.5M | 9.4M | 2.8x |
|
|
355
|
+
| set\<string\> (5 items) | 2.7M | 1.6M | **9.8M** | — | — | 6.3x |
|
|
356
|
+
| set\<string\> (20 items) | 1.0M | 475K | **7.7M** | — | — | **16x** |
|
|
357
|
+
| map\<string, number\> (5 entries) | 1.5M | 946K | **8.5M** | — | — | 9.0x |
|
|
358
|
+
| map\<string, number\> (20 entries) | 490K | 238K | **5.2M** | — | — | **22x** |
|
|
359
|
+
| pipe (non-transform) | 6.3M | 3.8M | **10.8M** | — | — | 2.8x |
|
|
360
|
+
| discriminatedUnion (3 variants) | 2.3M | 2.9M | **9.8M** | 10.4M | 5.6M | 3.4x |
|
|
361
|
+
| medium object (valid) | 1.3M | 1.7M | **5.4M** | 7.3M | 5.0M | 3.1x |
|
|
362
|
+
| medium object (invalid) | 351K | 65K | **471K** | 2.1M | 5.6M | 7.3x |
|
|
363
|
+
| large object (10 items) | 82K | 111K | **4.0M** | 4.1M | 834K | **36x** |
|
|
364
|
+
| large object (100 items) | 9.0K | 11.6K | **676K** | 808K | 89K | **58x** |
|
|
365
|
+
| recursive tree (7 nodes) | 424K | 1.5M | **6.4M** | 8.1M | 3.1M | 4.1x |
|
|
366
|
+
| recursive tree (121 nodes) | 24K | 101K | **741K** | 1.4M | 250K | 7.4x |
|
|
367
|
+
| event log (combined) | 260K | 479K | **4.5M** | — | — | 9.4x |
|
|
368
|
+
| partial fallback obj (transform) | 817K | 1.4M | **3.3M** | — | — | 2.3x |
|
|
369
|
+
| partial fallback arr 10 (transform) | 88K | 139K | **841K** | — | — | 6.1x |
|
|
370
|
+
| partial fallback arr 50 (transform) | 18K | 28K | **175K** | — | — | 6.3x |
|
|
371
|
+
|
|
372
|
+
_ops/s, higher is better. "—" = not supported by the library. Measured with `vitest bench` on Apple M-series._
|
|
369
373
|
|
|
370
374
|
Performance scales with schema complexity. Nested objects and arrays see the biggest gains because zod-compiler eliminates per-node traversal overhead. `discriminatedUnion` uses O(1) `switch` dispatch instead of Zod's sequential trial. Partial fallback schemas (containing `transform`/`refine`) still show 2-6x speedups.
|
|
371
375
|
|
|
@@ -387,7 +391,3 @@ Run `npx zod-compiler check --json` to see which schemas qualify for Fast Path.
|
|
|
387
391
|
## Acknowledgements
|
|
388
392
|
|
|
389
393
|
zod-compiler started as a fork of [zod-aot](https://github.com/wakita181009/zod-aot) by [@wakita181009](https://github.com/wakita181009). The compilation pipeline, build-plugin integration, and benchmark suite originate from that project.
|
|
390
|
-
|
|
391
|
-
## License
|
|
392
|
-
|
|
393
|
-
[MIT](LICENSE)
|
|
@@ -26,7 +26,6 @@ export declare function findSchemaFiles(dir: string): Promise<string[]>;
|
|
|
26
26
|
* Returns null if no compile() calls are found.
|
|
27
27
|
*/
|
|
28
28
|
export declare function generateFile(filePath: string, outputFlag: string | undefined, options?: {
|
|
29
|
-
cacheBust?: boolean | undefined;
|
|
30
29
|
zodCompat?: boolean | undefined;
|
|
31
30
|
autoDiscover?: boolean | undefined;
|
|
32
31
|
}): Promise<GenerateFileResult | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAStD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqB3E;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBpE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC,GACA,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAwCpC;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CzE"}
|
|
@@ -3,6 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import process from "node:process";
|
|
4
4
|
import { compileSchemas } from "#src/core/pipeline.js";
|
|
5
5
|
import { discoverSchemas } from "#src/discovery.js";
|
|
6
|
+
import { mayExportSchemas } from "#src/static-filter.js";
|
|
6
7
|
import { generateCompiledFileContent, resolveOutputPath, writeCompiledFile } from "../emitter.js";
|
|
7
8
|
import { getErrorMessage } from "../errors.js";
|
|
8
9
|
import { logger } from "../logger.js";
|
|
@@ -65,10 +66,16 @@ export async function findSchemaFiles(dir) {
|
|
|
65
66
|
*/
|
|
66
67
|
export async function generateFile(filePath, outputFlag, options) {
|
|
67
68
|
const relPath = path.relative(process.cwd(), filePath);
|
|
69
|
+
// Static pre-filter: skip files whose exports provably cannot be schemas
|
|
70
|
+
// without executing them. Unreadable files fall through to discovery,
|
|
71
|
+
// which produces the proper error.
|
|
72
|
+
const source = await fs.promises.readFile(filePath, "utf8").catch(() => null);
|
|
73
|
+
if (source !== null && !(await mayExportSchemas(source, filePath))) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
68
76
|
let schemas;
|
|
69
77
|
try {
|
|
70
78
|
schemas = await discoverSchemas(filePath, {
|
|
71
|
-
cacheBust: options?.cacheBust,
|
|
72
79
|
autoDiscover: options?.autoDiscover,
|
|
73
80
|
});
|
|
74
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAazB,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC;AAED,yDAAyD;AACzD,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,CACb,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,EACpD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,KACvD,EAAE,CAAC,SAAS,CAAC;CACnB;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAwB3D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,CASxF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,YAAY,EACrB,IAAI,GAAE,SAA4B,GACjC,OAAO,CAAC,IAAI,CAAC,CAyHf"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import process from "node:process";
|
|
4
|
+
import { invalidateModuleCache } from "#src/loader.js";
|
|
4
5
|
import { getErrorMessage } from "../errors.js";
|
|
5
6
|
import { logger } from "../logger.js";
|
|
6
7
|
import { generateFile, isSchemaFile, resolveInputFiles, } from "./generate.js";
|
|
@@ -100,10 +101,12 @@ export async function runWatch(options, deps = defaultWatchDeps) {
|
|
|
100
101
|
const flush = debounce(async () => {
|
|
101
102
|
const batch = [...pendingFiles];
|
|
102
103
|
pendingFiles.clear();
|
|
104
|
+
// Changed files (and any project files importing them) must re-execute;
|
|
105
|
+
// node_modules stay warm in the shared loader cache.
|
|
106
|
+
invalidateModuleCache();
|
|
103
107
|
for (const filePath of batch) {
|
|
104
108
|
try {
|
|
105
109
|
const result = await generateFile(filePath, options.output, {
|
|
106
|
-
cacheBust: true,
|
|
107
110
|
zodCompat: options.zodCompat,
|
|
108
111
|
autoDiscover: options.autoDiscover,
|
|
109
112
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/discovery.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { DiscoveredSchema } from "#src/core/types.js";
|
|
2
|
-
|
|
3
|
-
export interface DiscoverOptions extends LoadOptions {
|
|
2
|
+
export interface DiscoverOptions {
|
|
4
3
|
/** Auto-detect all exported Zod schemas without requiring compile() wrappers. */
|
|
5
4
|
autoDiscover?: boolean | undefined;
|
|
6
5
|
}
|
package/dist/discovery.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC;AAYD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsB7B"}
|
package/dist/discovery.js
CHANGED
|
@@ -18,7 +18,7 @@ function isZodSchema(value) {
|
|
|
18
18
|
* compile() schemas take priority (isCompiledSchema checked first).
|
|
19
19
|
*/
|
|
20
20
|
export async function discoverSchemas(filePath, options) {
|
|
21
|
-
const mod = await loadSourceFile(filePath
|
|
21
|
+
const mod = await loadSourceFile(filePath);
|
|
22
22
|
const schemas = [];
|
|
23
23
|
const targets = { ...mod };
|
|
24
24
|
const defaultExport = mod["default"];
|
package/dist/discovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO7C;;;GAGG;AACH,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpF,MAAM,GAAG,GAAI,KAAiC,CAAC,MAAM,CAAC,CAAC;IACvD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,CAAC;AACjE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,OAAyB;IAEzB,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,OAAO,GAA4B,EAAE,GAAG,GAAG,EAAE,CAAC;IACpD,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,IACE,aAAa,IAAI,IAAI;QACrB,OAAO,aAAa,KAAK,QAAQ;QACjC,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAChC,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAwC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAG,KAA4C,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChG,CAAC;aAAM,IAAI,OAAO,EAAE,YAAY,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/loader.d.ts
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Drop every first-party (non-node_modules) module from the shared loader
|
|
3
|
+
* caches. Called on watch/HMR file changes so the next discovery re-executes
|
|
4
|
+
* changed schema graphs.
|
|
5
|
+
*
|
|
6
|
+
* Eviction is deliberately first-party-wide rather than per-module: jiti's
|
|
7
|
+
* module cache only records importer→dep edges on cache misses, so a precise
|
|
8
|
+
* reverse-dependency walk would miss importers of already-cached modules and
|
|
9
|
+
* serve stale schemas. Evicting all project files (cheap to re-execute) while
|
|
10
|
+
* keeping node_modules (the expensive bulk — zod itself) warm is both correct
|
|
11
|
+
* and fast.
|
|
12
|
+
*/
|
|
13
|
+
export declare function invalidateModuleCache(): void;
|
|
5
14
|
/**
|
|
6
15
|
* Dynamically import a source file (.ts or .js).
|
|
7
16
|
* - Bun/Deno: native TypeScript support, direct import
|
|
8
|
-
* - Node.js: uses jiti for reliable TypeScript transpilation
|
|
17
|
+
* - Node.js: uses a shared jiti instance for reliable TypeScript transpilation
|
|
9
18
|
* (handles extensionless imports, enums, path aliases, and all TS syntax)
|
|
19
|
+
*
|
|
20
|
+
* Module executions are cached across calls; use invalidateModuleCache()
|
|
21
|
+
* when source files change (watch/HMR).
|
|
10
22
|
*/
|
|
11
|
-
export declare function loadSourceFile(filePath: string
|
|
23
|
+
export declare function loadSourceFile(filePath: string): Promise<Record<string, unknown>>;
|
|
12
24
|
//# 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":"AAoFA;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAS5C;AAiBD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmBvF"}
|
package/dist/loader.js
CHANGED
|
@@ -8,69 +8,122 @@ function detectRuntime() {
|
|
|
8
8
|
return "deno";
|
|
9
9
|
return "node";
|
|
10
10
|
}
|
|
11
|
+
/** Cache: search dir → tsconfig lookup result (getTsconfig walks the fs otherwise). */
|
|
12
|
+
const tsconfigSearchCache = new Map();
|
|
11
13
|
/** Cache: tsconfig.json absolute path → resolved jiti alias map */
|
|
12
14
|
const aliasCache = new Map();
|
|
13
15
|
/**
|
|
14
16
|
* Resolve tsconfig.json path aliases into the format jiti expects.
|
|
15
|
-
* Returns an empty
|
|
17
|
+
* Returns an empty alias map if no tsconfig.json is found or no paths are configured.
|
|
16
18
|
*
|
|
17
19
|
* tsconfig paths use wildcards: { "@/*": ["./src/*"] }
|
|
18
20
|
* jiti uses prefix matching: { "@": "/absolute/path/to/src" }
|
|
19
21
|
*
|
|
20
22
|
* The trailing "/*" is stripped from both key and value before passing to jiti.
|
|
21
23
|
*/
|
|
22
|
-
function
|
|
23
|
-
const tsconfig = getTsconfig(fromDir);
|
|
24
|
+
function resolveLoaderConfig(fromDir) {
|
|
25
|
+
const tsconfig = getTsconfig(fromDir, "tsconfig.json", tsconfigSearchCache);
|
|
24
26
|
if (!tsconfig)
|
|
25
|
-
return {};
|
|
27
|
+
return { key: "", alias: {} };
|
|
26
28
|
const cached = aliasCache.get(tsconfig.path);
|
|
27
29
|
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;
|
|
30
|
+
return { key: tsconfig.path, alias: cached };
|
|
38
31
|
const alias = {};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
32
|
+
const paths = tsconfig.config.compilerOptions?.paths;
|
|
33
|
+
if (paths && Object.keys(paths).length > 0) {
|
|
34
|
+
const tsconfigDir = path.dirname(tsconfig.path);
|
|
35
|
+
const baseUrl = tsconfig.config.compilerOptions?.baseUrl;
|
|
36
|
+
const baseDir = baseUrl ? path.resolve(tsconfigDir, baseUrl) : tsconfigDir;
|
|
37
|
+
for (const [pattern, targets] of Object.entries(paths)) {
|
|
38
|
+
if (!targets || targets.length === 0)
|
|
39
|
+
continue;
|
|
40
|
+
const target = targets[0];
|
|
41
|
+
if (!target)
|
|
42
|
+
continue;
|
|
43
|
+
// Strip trailing "/*" — jiti uses prefix matching, not glob wildcards
|
|
44
|
+
const key = pattern.endsWith("/*") ? pattern.slice(0, -2) : pattern;
|
|
45
|
+
const val = target.endsWith("/*") ? target.slice(0, -2) : target;
|
|
46
|
+
alias[key] = path.resolve(baseDir, val);
|
|
47
|
+
}
|
|
49
48
|
}
|
|
50
49
|
aliasCache.set(tsconfig.path, alias);
|
|
51
|
-
return alias;
|
|
50
|
+
return { key: tsconfig.path, alias };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Shared jiti instances, keyed by tsconfig identity (the alias config).
|
|
54
|
+
* Sharing one instance with `moduleCache: true` across the whole build means
|
|
55
|
+
* the module graph behind schema files (zod itself, shared helpers, ...) is
|
|
56
|
+
* executed roughly once per build instead of once per transformed file.
|
|
57
|
+
*/
|
|
58
|
+
const jitiInstances = new Map();
|
|
59
|
+
/**
|
|
60
|
+
* Bumped by invalidateModuleCache(). Bun/Deno use native import, whose module
|
|
61
|
+
* cache cannot be evicted — instead the generation is appended as a query
|
|
62
|
+
* suffix so files re-execute after an invalidation while unchanged builds
|
|
63
|
+
* share a single execution.
|
|
64
|
+
*/
|
|
65
|
+
let cacheGeneration = 0;
|
|
66
|
+
/** Serializes loads so concurrent transforms don't double-execute shared deps. */
|
|
67
|
+
let loadQueue = Promise.resolve();
|
|
68
|
+
const NODE_MODULES_SEGMENT = `${path.sep}node_modules${path.sep}`;
|
|
69
|
+
/**
|
|
70
|
+
* Drop every first-party (non-node_modules) module from the shared loader
|
|
71
|
+
* caches. Called on watch/HMR file changes so the next discovery re-executes
|
|
72
|
+
* changed schema graphs.
|
|
73
|
+
*
|
|
74
|
+
* Eviction is deliberately first-party-wide rather than per-module: jiti's
|
|
75
|
+
* module cache only records importer→dep edges on cache misses, so a precise
|
|
76
|
+
* reverse-dependency walk would miss importers of already-cached modules and
|
|
77
|
+
* serve stale schemas. Evicting all project files (cheap to re-execute) while
|
|
78
|
+
* keeping node_modules (the expensive bulk — zod itself) warm is both correct
|
|
79
|
+
* and fast.
|
|
80
|
+
*/
|
|
81
|
+
export function invalidateModuleCache() {
|
|
82
|
+
cacheGeneration++;
|
|
83
|
+
for (const jiti of jitiInstances.values()) {
|
|
84
|
+
for (const key of Object.keys(jiti.cache)) {
|
|
85
|
+
if (!key.includes(NODE_MODULES_SEGMENT)) {
|
|
86
|
+
delete jiti.cache[key];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function getJiti(absPath) {
|
|
92
|
+
const { key, alias } = resolveLoaderConfig(path.dirname(absPath));
|
|
93
|
+
const existing = jitiInstances.get(key);
|
|
94
|
+
if (existing)
|
|
95
|
+
return existing;
|
|
96
|
+
const { createJiti } = await import("jiti");
|
|
97
|
+
const created = createJiti(pathToFileURL(absPath).href, {
|
|
98
|
+
moduleCache: true,
|
|
99
|
+
alias,
|
|
100
|
+
jsx: true,
|
|
101
|
+
});
|
|
102
|
+
jitiInstances.set(key, created);
|
|
103
|
+
return created;
|
|
52
104
|
}
|
|
53
105
|
/**
|
|
54
106
|
* Dynamically import a source file (.ts or .js).
|
|
55
107
|
* - Bun/Deno: native TypeScript support, direct import
|
|
56
|
-
* - Node.js: uses jiti for reliable TypeScript transpilation
|
|
108
|
+
* - Node.js: uses a shared jiti instance for reliable TypeScript transpilation
|
|
57
109
|
* (handles extensionless imports, enums, path aliases, and all TS syntax)
|
|
110
|
+
*
|
|
111
|
+
* Module executions are cached across calls; use invalidateModuleCache()
|
|
112
|
+
* when source files change (watch/HMR).
|
|
58
113
|
*/
|
|
59
|
-
export async function loadSourceFile(filePath
|
|
114
|
+
export async function loadSourceFile(filePath) {
|
|
60
115
|
const absPath = path.resolve(filePath);
|
|
61
116
|
const runtime = detectRuntime();
|
|
62
|
-
|
|
63
|
-
//
|
|
64
|
-
|
|
117
|
+
// Bun/Deno execute TypeScript natively. .mjs files bypass jiti even on
|
|
118
|
+
// Node (jiti hands them to native import, outside its evictable cache),
|
|
119
|
+
// so the generation suffix is the only way to refresh them.
|
|
120
|
+
if (runtime === "bun" || runtime === "deno" || absPath.endsWith(".mjs")) {
|
|
121
|
+
const suffix = cacheGeneration > 0 ? `?zcGen=${cacheGeneration}` : "";
|
|
65
122
|
return (await import(pathToFileURL(absPath).href + suffix));
|
|
66
123
|
}
|
|
67
|
-
const
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
alias,
|
|
72
|
-
jsx: true,
|
|
73
|
-
});
|
|
74
|
-
return (await jiti.import(absPath));
|
|
124
|
+
const jiti = await getJiti(absPath);
|
|
125
|
+
const load = loadQueue.then(() => jiti.import(absPath));
|
|
126
|
+
loadQueue = load.then(() => undefined, () => undefined);
|
|
127
|
+
return (await load);
|
|
75
128
|
}
|
|
76
129
|
//# sourceMappingURL=loader.js.map
|