zod-aot 0.0.7 → 0.0.9
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 +26 -7
- package/dist/cli/commands/generate.d.ts +25 -2
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +58 -31
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/watch.d.ts +23 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +149 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/emitter.d.ts.map +1 -1
- package/dist/cli/emitter.js +4 -0
- package/dist/cli/emitter.js.map +1 -1
- package/dist/cli/index.js +16 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/core/codegen/generators/bigint.d.ts +6 -0
- package/dist/core/codegen/generators/bigint.d.ts.map +1 -0
- package/dist/core/codegen/generators/bigint.js +32 -0
- package/dist/core/codegen/generators/bigint.js.map +1 -0
- package/dist/core/codegen/generators/index.d.ts +4 -0
- package/dist/core/codegen/generators/index.d.ts.map +1 -1
- package/dist/core/codegen/generators/index.js +4 -0
- package/dist/core/codegen/generators/index.js.map +1 -1
- package/dist/core/codegen/generators/map.d.ts +8 -0
- package/dist/core/codegen/generators/map.d.ts.map +1 -0
- package/dist/core/codegen/generators/map.js +18 -0
- package/dist/core/codegen/generators/map.js.map +1 -0
- package/dist/core/codegen/generators/pipe.d.ts +8 -0
- package/dist/core/codegen/generators/pipe.d.ts.map +1 -0
- package/dist/core/codegen/generators/pipe.js +7 -0
- package/dist/core/codegen/generators/pipe.js.map +1 -0
- package/dist/core/codegen/generators/set.d.ts +8 -0
- package/dist/core/codegen/generators/set.d.ts.map +1 -0
- package/dist/core/codegen/generators/set.js +29 -0
- package/dist/core/codegen/generators/set.js.map +1 -0
- package/dist/core/codegen/generators/string.d.ts.map +1 -1
- package/dist/core/codegen/generators/string.js +0 -2
- package/dist/core/codegen/generators/string.js.map +1 -1
- package/dist/core/codegen/generators/tuple.d.ts.map +1 -1
- package/dist/core/codegen/generators/tuple.js +3 -0
- package/dist/core/codegen/generators/tuple.js.map +1 -1
- package/dist/core/codegen/generators/union.d.ts.map +1 -1
- package/dist/core/codegen/generators/union.js +4 -3
- package/dist/core/codegen/generators/union.js.map +1 -1
- package/dist/core/codegen/index.d.ts.map +1 -1
- package/dist/core/codegen/index.js +9 -1
- package/dist/core/codegen/index.js.map +1 -1
- package/dist/core/extractor.d.ts.map +1 -1
- package/dist/core/extractor.js +72 -2
- package/dist/core/extractor.js.map +1 -1
- package/dist/core/types.d.ts +48 -2
- package/dist/core/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -116,6 +116,9 @@ npx zod-aot generate src/schemas.ts -o src/schemas.compiled.ts
|
|
|
116
116
|
# Generate from a directory
|
|
117
117
|
npx zod-aot generate src/ -o src/compiled/
|
|
118
118
|
|
|
119
|
+
# Watch mode — regenerate on file changes
|
|
120
|
+
npx zod-aot generate src/ --watch
|
|
121
|
+
|
|
119
122
|
# Check if schemas are compilable (without generating)
|
|
120
123
|
npx zod-aot check src/schemas.ts
|
|
121
124
|
```
|
|
@@ -360,7 +363,11 @@ The intermediate representation — a discriminated union of all supported schem
|
|
|
360
363
|
| `DefaultIR` | `.default(...)` |
|
|
361
364
|
| `IntersectionIR` | `z.intersection(...)` / `.and(...)` |
|
|
362
365
|
| `DiscriminatedUnionIR` | `z.discriminatedUnion(...)` |
|
|
363
|
-
| `
|
|
366
|
+
| `BigIntIR` | `z.bigint()` |
|
|
367
|
+
| `SetIR` | `z.set(...)` |
|
|
368
|
+
| `MapIR` | `z.map(...)` |
|
|
369
|
+
| `PipeIR` | `.pipe(...)` (non-transform) |
|
|
370
|
+
| `FallbackIR` | `transform`, `refine`, `lazy`, etc. |
|
|
364
371
|
|
|
365
372
|
## Supported Types
|
|
366
373
|
|
|
@@ -395,14 +402,24 @@ The intermediate representation — a discriminated union of all supported schem
|
|
|
395
402
|
| `intersection` | validates both left and right schemas |
|
|
396
403
|
| `discriminatedUnion` | O(1) `switch` dispatch on discriminator field |
|
|
397
404
|
|
|
405
|
+
### Tier 3 — Collections & Pipeline
|
|
406
|
+
|
|
407
|
+
| Type | Supported Checks |
|
|
408
|
+
|---|---|
|
|
409
|
+
| `bigint` | `min`, `max`, `positive`, `negative`, `nonnegative`, `nonpositive`, `multipleOf` |
|
|
410
|
+
| `set` | `min`, `max` (size), element validation |
|
|
411
|
+
| `map` | key and value type validation |
|
|
412
|
+
| `pipe` (non-transform) | sequential in→out validation |
|
|
413
|
+
|
|
398
414
|
### Automatic Fallback to Zod
|
|
399
415
|
|
|
400
|
-
These schema types contain JavaScript closures that cannot be compiled to static code. They are detected during extraction and produce a `FallbackIR`:
|
|
416
|
+
These schema types contain JavaScript closures or runtime-dependent logic that cannot be compiled to static code. They are detected during extraction and produce a `FallbackIR`:
|
|
401
417
|
|
|
402
418
|
- `transform` — runtime data transformation
|
|
403
419
|
- `refine` / `superRefine` — custom validation with closures
|
|
404
420
|
- `custom` — arbitrary validation logic
|
|
405
421
|
- `preprocess` — input preprocessing
|
|
422
|
+
- `lazy` — deferred schema resolution (getter function not serializable)
|
|
406
423
|
|
|
407
424
|
#### Partial Fallback
|
|
408
425
|
|
|
@@ -410,11 +427,11 @@ When a schema contains a mix of compilable and non-compilable parts (e.g., an ob
|
|
|
410
427
|
|
|
411
428
|
> **Note:** If a schema heavily relies on `transform`, `refine`, or other non-compilable features, the performance benefit from partial fallback will be minimal — most of the validation work is still delegated to Zod. Partial fallback is most effective when only a small portion of the schema uses these features.
|
|
412
429
|
|
|
413
|
-
### Planned
|
|
430
|
+
### Planned
|
|
414
431
|
|
|
415
|
-
|
|
|
432
|
+
| Type | Status |
|
|
416
433
|
|---|---|
|
|
417
|
-
|
|
|
434
|
+
| `template_literal` | Pending Zod v4 API verification |
|
|
418
435
|
|
|
419
436
|
## Roadmap
|
|
420
437
|
|
|
@@ -435,11 +452,13 @@ When a schema contains a mix of compilable and non-compilable parts (e.g., an ob
|
|
|
435
452
|
- [x] CLI (`npx zod-aot generate` / `npx zod-aot check`)
|
|
436
453
|
- [x] Partial fallback (objects with some transform properties)
|
|
437
454
|
- [x] unplugin integration (Vite / webpack / esbuild / Rollup)
|
|
438
|
-
- [
|
|
455
|
+
- [x] Watch mode (`--watch` / `-w`)
|
|
439
456
|
|
|
440
457
|
### Phase 3: Ecosystem
|
|
441
458
|
|
|
442
|
-
- [
|
|
459
|
+
- [x] Tier 3 type support (bigint, set, map, pipe non-transform)
|
|
460
|
+
- [x] Lazy schema fallback
|
|
461
|
+
- [ ] `template_literal` type support
|
|
443
462
|
- [ ] Documentation site
|
|
444
463
|
|
|
445
464
|
## Development
|
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
interface GenerateOptions {
|
|
1
|
+
export interface GenerateOptions {
|
|
2
2
|
inputs: string[];
|
|
3
3
|
output: string | undefined;
|
|
4
4
|
}
|
|
5
|
+
export interface GenerateFileResult {
|
|
6
|
+
filePath: string;
|
|
7
|
+
outputPath: string;
|
|
8
|
+
schemaCount: number;
|
|
9
|
+
schemaNames: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Check if a filename is a schema file candidate.
|
|
13
|
+
* Shared filter logic used by both findSchemaFiles and isWatchTarget.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isSchemaFile(fileName: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve input paths to a list of source files.
|
|
18
|
+
* If a path is a directory, find all .ts files (excluding .compiled.ts, .test.ts, node_modules).
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveInputFiles(inputs: string[]): Promise<string[]>;
|
|
21
|
+
export declare function findSchemaFiles(dir: string): Promise<string[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Generate compiled output for a single source file.
|
|
24
|
+
* Returns null if no compile() calls are found.
|
|
25
|
+
*/
|
|
26
|
+
export declare function generateFile(filePath: string, outputFlag: string | undefined, options?: {
|
|
27
|
+
cacheBust?: boolean;
|
|
28
|
+
}): Promise<GenerateFileResult | null>;
|
|
5
29
|
export declare function runGenerate(options: GenerateOptions): Promise<void>;
|
|
6
|
-
export {};
|
|
7
30
|
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAWA,
|
|
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;CAC5B;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;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAqCpC;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCzE"}
|
|
@@ -6,11 +6,23 @@ import { extractSchema } from "#src/core/extractor.js";
|
|
|
6
6
|
import { discoverSchemas } from "#src/discovery.js";
|
|
7
7
|
import { generateCompiledFileContent, resolveOutputPath, writeCompiledFile } from "../emitter.js";
|
|
8
8
|
import { logger } from "../logger.js";
|
|
9
|
+
/**
|
|
10
|
+
* Check if a filename is a schema file candidate.
|
|
11
|
+
* Shared filter logic used by both findSchemaFiles and isWatchTarget.
|
|
12
|
+
*/
|
|
13
|
+
export function isSchemaFile(fileName) {
|
|
14
|
+
return (/\.(?:ts|mts|js|mjs)$/.test(fileName) &&
|
|
15
|
+
!fileName.endsWith(".compiled.ts") &&
|
|
16
|
+
!fileName.endsWith(".compiled.js") &&
|
|
17
|
+
!fileName.endsWith(".test.ts") &&
|
|
18
|
+
!fileName.endsWith(".test.js") &&
|
|
19
|
+
!fileName.endsWith(".d.ts"));
|
|
20
|
+
}
|
|
9
21
|
/**
|
|
10
22
|
* Resolve input paths to a list of source files.
|
|
11
23
|
* If a path is a directory, find all .ts files (excluding .compiled.ts, .test.ts, node_modules).
|
|
12
24
|
*/
|
|
13
|
-
async function resolveInputFiles(inputs) {
|
|
25
|
+
export async function resolveInputFiles(inputs) {
|
|
14
26
|
const files = [];
|
|
15
27
|
for (const input of inputs) {
|
|
16
28
|
const absPath = path.resolve(input);
|
|
@@ -29,7 +41,7 @@ async function resolveInputFiles(inputs) {
|
|
|
29
41
|
}
|
|
30
42
|
return files;
|
|
31
43
|
}
|
|
32
|
-
async function findSchemaFiles(dir) {
|
|
44
|
+
export async function findSchemaFiles(dir) {
|
|
33
45
|
const results = [];
|
|
34
46
|
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
35
47
|
for (const entry of entries) {
|
|
@@ -41,18 +53,47 @@ async function findSchemaFiles(dir) {
|
|
|
41
53
|
const nested = await findSchemaFiles(fullPath);
|
|
42
54
|
results.push(...nested);
|
|
43
55
|
}
|
|
44
|
-
else if (entry.isFile() &&
|
|
45
|
-
/\.(?:ts|mts|js|mjs)$/.test(entry.name) &&
|
|
46
|
-
!entry.name.endsWith(".compiled.ts") &&
|
|
47
|
-
!entry.name.endsWith(".compiled.js") &&
|
|
48
|
-
!entry.name.endsWith(".test.ts") &&
|
|
49
|
-
!entry.name.endsWith(".test.js") &&
|
|
50
|
-
!entry.name.endsWith(".d.ts")) {
|
|
56
|
+
else if (entry.isFile() && isSchemaFile(entry.name)) {
|
|
51
57
|
results.push(fullPath);
|
|
52
58
|
}
|
|
53
59
|
}
|
|
54
60
|
return results;
|
|
55
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate compiled output for a single source file.
|
|
64
|
+
* Returns null if no compile() calls are found.
|
|
65
|
+
*/
|
|
66
|
+
export async function generateFile(filePath, outputFlag, options) {
|
|
67
|
+
const relPath = path.relative(process.cwd(), filePath);
|
|
68
|
+
let schemas;
|
|
69
|
+
try {
|
|
70
|
+
schemas = await discoverSchemas(filePath, options?.cacheBust ? { cacheBust: true } : undefined);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
throw new Error(`Failed to load ${relPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
74
|
+
}
|
|
75
|
+
if (schemas.length === 0) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const codegenResults = schemas.map((s) => {
|
|
79
|
+
const fallbackEntries = [];
|
|
80
|
+
const ir = extractSchema(s.schema, fallbackEntries);
|
|
81
|
+
const result = generateValidator(ir, s.exportName, {
|
|
82
|
+
fallbackCount: fallbackEntries.length,
|
|
83
|
+
});
|
|
84
|
+
return { exportName: s.exportName, codegenResult: result, fallbackEntries };
|
|
85
|
+
});
|
|
86
|
+
const outputPath = resolveOutputPath(filePath, outputFlag);
|
|
87
|
+
const sourceRelPath = path.relative(path.dirname(outputPath), filePath);
|
|
88
|
+
const content = generateCompiledFileContent(codegenResults, sourceRelPath);
|
|
89
|
+
await writeCompiledFile(outputPath, content);
|
|
90
|
+
return {
|
|
91
|
+
filePath,
|
|
92
|
+
outputPath,
|
|
93
|
+
schemaCount: schemas.length,
|
|
94
|
+
schemaNames: schemas.map((s) => s.exportName),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
56
97
|
export async function runGenerate(options) {
|
|
57
98
|
const files = await resolveInputFiles(options.inputs);
|
|
58
99
|
if (files.length === 0) {
|
|
@@ -62,34 +103,20 @@ export async function runGenerate(options) {
|
|
|
62
103
|
let totalSchemas = 0;
|
|
63
104
|
let totalFiles = 0;
|
|
64
105
|
for (const filePath of files) {
|
|
65
|
-
|
|
66
|
-
let schemas;
|
|
106
|
+
let result;
|
|
67
107
|
try {
|
|
68
|
-
|
|
108
|
+
result = await generateFile(filePath, options.output);
|
|
69
109
|
}
|
|
70
110
|
catch (err) {
|
|
71
|
-
logger.error(
|
|
111
|
+
logger.error(err instanceof Error ? err.message : String(err));
|
|
72
112
|
process.exit(1);
|
|
73
113
|
}
|
|
74
|
-
if (
|
|
114
|
+
if (!result)
|
|
75
115
|
continue;
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
const result = generateValidator(ir, s.exportName, {
|
|
81
|
-
fallbackCount: fallbackEntries.length,
|
|
82
|
-
});
|
|
83
|
-
return { exportName: s.exportName, codegenResult: result, fallbackEntries };
|
|
84
|
-
});
|
|
85
|
-
const outputPath = resolveOutputPath(filePath, options.output);
|
|
86
|
-
const outputRelPath = path.relative(process.cwd(), outputPath);
|
|
87
|
-
const sourceRelPath = path.relative(path.dirname(outputPath), filePath);
|
|
88
|
-
const content = generateCompiledFileContent(codegenResults, sourceRelPath);
|
|
89
|
-
await writeCompiledFile(outputPath, content);
|
|
90
|
-
const schemaNames = schemas.map((s) => s.exportName).join(", ");
|
|
91
|
-
logger.success(`${relPath} -> ${outputRelPath} (${schemaNames})`);
|
|
92
|
-
totalSchemas += schemas.length;
|
|
116
|
+
const relPath = path.relative(process.cwd(), result.filePath);
|
|
117
|
+
const outputRelPath = path.relative(process.cwd(), result.outputPath);
|
|
118
|
+
logger.success(`${relPath} -> ${outputRelPath} (${result.schemaNames.join(", ")})`);
|
|
119
|
+
totalSchemas += result.schemaCount;
|
|
93
120
|
totalFiles++;
|
|
94
121
|
}
|
|
95
122
|
if (totalFiles === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClG,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface WatchOptions {
|
|
2
|
+
inputs: string[];
|
|
3
|
+
output: string | undefined;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Check if a file path should trigger regeneration.
|
|
7
|
+
*/
|
|
8
|
+
export declare function isWatchTarget(filePath: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve which directories to watch from input paths.
|
|
11
|
+
* Files are mapped to their parent directory; subdirectories are deduplicated.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveWatchDirs(inputs: string[]): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Create a debounced version of a function.
|
|
16
|
+
*/
|
|
17
|
+
export declare function debounce<T extends (...args: never[]) => void>(fn: T, delayMs: number): T;
|
|
18
|
+
/**
|
|
19
|
+
* Run the watch mode: initial generate + fs.watch for changes.
|
|
20
|
+
*/
|
|
21
|
+
export declare function runWatch(options: WatchOptions): Promise<void>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAWA,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;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,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGnE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { logger } from "../logger.js";
|
|
5
|
+
import { generateFile, isSchemaFile, resolveInputFiles, } from "./generate.js";
|
|
6
|
+
/**
|
|
7
|
+
* Check if a file path should trigger regeneration.
|
|
8
|
+
*/
|
|
9
|
+
export function isWatchTarget(filePath) {
|
|
10
|
+
if (filePath.split(path.sep).includes("node_modules"))
|
|
11
|
+
return false;
|
|
12
|
+
return isSchemaFile(filePath);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolve which directories to watch from input paths.
|
|
16
|
+
* Files are mapped to their parent directory; subdirectories are deduplicated.
|
|
17
|
+
*/
|
|
18
|
+
export function resolveWatchDirs(inputs) {
|
|
19
|
+
const dirs = [];
|
|
20
|
+
for (const input of inputs) {
|
|
21
|
+
const abs = path.resolve(input);
|
|
22
|
+
try {
|
|
23
|
+
const stat = fs.statSync(abs);
|
|
24
|
+
dirs.push(stat.isDirectory() ? abs : path.dirname(abs));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
dirs.push(path.dirname(abs));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Deduplicate: remove dirs that are subdirectories of another watched dir
|
|
31
|
+
const sorted = [...new Set(dirs)].sort();
|
|
32
|
+
const result = [];
|
|
33
|
+
for (const dir of sorted) {
|
|
34
|
+
const isSubdir = result.some((parent) => dir.startsWith(parent + path.sep));
|
|
35
|
+
if (!isSubdir) {
|
|
36
|
+
result.push(dir);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a debounced version of a function.
|
|
43
|
+
*/
|
|
44
|
+
export function debounce(fn, delayMs) {
|
|
45
|
+
let timer;
|
|
46
|
+
return ((...args) => {
|
|
47
|
+
if (timer !== undefined)
|
|
48
|
+
clearTimeout(timer);
|
|
49
|
+
timer = setTimeout(() => {
|
|
50
|
+
timer = undefined;
|
|
51
|
+
fn(...args);
|
|
52
|
+
}, delayMs);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Run the watch mode: initial generate + fs.watch for changes.
|
|
57
|
+
*/
|
|
58
|
+
export async function runWatch(options) {
|
|
59
|
+
const files = await resolveInputFiles(options.inputs);
|
|
60
|
+
if (files.length === 0) {
|
|
61
|
+
logger.warn("No source files found.");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Initial generation
|
|
65
|
+
let totalSchemas = 0;
|
|
66
|
+
let totalFiles = 0;
|
|
67
|
+
for (const filePath of files) {
|
|
68
|
+
try {
|
|
69
|
+
const result = await generateFile(filePath, options.output);
|
|
70
|
+
if (result) {
|
|
71
|
+
logResult(result);
|
|
72
|
+
totalSchemas += result.schemaCount;
|
|
73
|
+
totalFiles++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
logger.error(err instanceof Error ? err.message : String(err));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (totalFiles > 0) {
|
|
81
|
+
logger.info(`Generated ${totalSchemas} schema${totalSchemas > 1 ? "s" : ""} from ${totalFiles} file${totalFiles > 1 ? "s" : ""}.`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
logger.warn("No compile() calls found in any source file.");
|
|
85
|
+
}
|
|
86
|
+
// Set up file watching
|
|
87
|
+
const watchDirs = resolveWatchDirs(options.inputs);
|
|
88
|
+
const ac = new AbortController();
|
|
89
|
+
const pendingFiles = new Set();
|
|
90
|
+
const flush = debounce(async () => {
|
|
91
|
+
const batch = [...pendingFiles];
|
|
92
|
+
pendingFiles.clear();
|
|
93
|
+
for (const filePath of batch) {
|
|
94
|
+
try {
|
|
95
|
+
const result = await generateFile(filePath, options.output, { cacheBust: true });
|
|
96
|
+
if (result) {
|
|
97
|
+
logResult(result);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
logger.error(err instanceof Error ? err.message : String(err));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}, 150);
|
|
105
|
+
const watchers = [];
|
|
106
|
+
for (const dir of watchDirs) {
|
|
107
|
+
try {
|
|
108
|
+
const watcher = fs.watch(dir, { recursive: true, signal: ac.signal }, (_event, filename) => {
|
|
109
|
+
if (!filename)
|
|
110
|
+
return;
|
|
111
|
+
const fullPath = path.resolve(dir, filename);
|
|
112
|
+
if (isWatchTarget(fullPath)) {
|
|
113
|
+
pendingFiles.add(fullPath);
|
|
114
|
+
void flush();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
watchers.push(watcher);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
logger.error(`Failed to watch ${dir}: ${err instanceof Error ? err.message : String(err)}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (watchers.length === 0) {
|
|
124
|
+
logger.error("No directories could be watched.");
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
logger.info(`Watching ${watchDirs.length} director${watchDirs.length > 1 ? "ies" : "y"} for changes... (Ctrl+C to stop)`);
|
|
128
|
+
// Graceful shutdown
|
|
129
|
+
const shutdown = () => {
|
|
130
|
+
logger.dim("\nStopping watch mode...");
|
|
131
|
+
ac.abort();
|
|
132
|
+
};
|
|
133
|
+
process.on("SIGINT", shutdown);
|
|
134
|
+
process.on("SIGTERM", shutdown);
|
|
135
|
+
// Keep process alive until aborted
|
|
136
|
+
await new Promise((resolve) => {
|
|
137
|
+
ac.signal.addEventListener("abort", () => {
|
|
138
|
+
process.removeListener("SIGINT", shutdown);
|
|
139
|
+
process.removeListener("SIGTERM", shutdown);
|
|
140
|
+
resolve();
|
|
141
|
+
}, { once: true });
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
function logResult(result) {
|
|
145
|
+
const relPath = path.relative(process.cwd(), result.filePath);
|
|
146
|
+
const outputRelPath = path.relative(process.cwd(), result.outputPath);
|
|
147
|
+
logger.success(`${relPath} -> ${outputRelPath} (${result.schemaNames.join(", ")})`);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/cli/emitter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/cli/emitter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,aAAa,EAAE,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAsFhG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAc3F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1F"}
|
package/dist/cli/emitter.js
CHANGED
|
@@ -49,6 +49,10 @@ export function generateCompiledFileContent(schemas, sourceRelPath) {
|
|
|
49
49
|
// Inject __fb binding at function start
|
|
50
50
|
const fnDef = schema.codegenResult.functionName;
|
|
51
51
|
const injected = fnDef.replace(/^(function\s+\w+\(input\)\{)\n/, `$1\nvar __fb=__fb_${schema.exportName};\n`);
|
|
52
|
+
if (injected === fnDef) {
|
|
53
|
+
throw new Error(`[zod-aot] Failed to inject __fb binding into ${schema.exportName}. ` +
|
|
54
|
+
"Generated function format may have changed.");
|
|
55
|
+
}
|
|
52
56
|
lines.push(injected);
|
|
53
57
|
}
|
|
54
58
|
else {
|
package/dist/cli/emitter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/cli/emitter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/cli/emitter.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -10,7 +10,7 @@ function printUsage() {
|
|
|
10
10
|
zod-aot v${VERSION} — Compile Zod schemas into zero-overhead validation functions
|
|
11
11
|
|
|
12
12
|
Usage:
|
|
13
|
-
zod-aot generate <files...> [-o <output>]
|
|
13
|
+
zod-aot generate <files...> [-o <output>] [-w]
|
|
14
14
|
zod-aot check <files...>
|
|
15
15
|
|
|
16
16
|
Commands:
|
|
@@ -19,13 +19,14 @@ Commands:
|
|
|
19
19
|
|
|
20
20
|
Options:
|
|
21
21
|
-o, --output <path> Output file or directory
|
|
22
|
+
-w, --watch Watch for changes and regenerate
|
|
22
23
|
-h, --help Show this help message
|
|
23
24
|
-v, --version Show version number
|
|
24
25
|
|
|
25
26
|
Examples:
|
|
26
27
|
zod-aot generate src/schemas.ts
|
|
27
28
|
zod-aot generate src/schemas.ts -o src/schemas.compiled.ts
|
|
28
|
-
zod-aot generate src/
|
|
29
|
+
zod-aot generate src/ --watch
|
|
29
30
|
zod-aot check src/schemas.ts
|
|
30
31
|
`.trim());
|
|
31
32
|
}
|
|
@@ -42,6 +43,7 @@ function parseArgs(argv) {
|
|
|
42
43
|
if (command === "generate") {
|
|
43
44
|
const inputs = [];
|
|
44
45
|
let output;
|
|
46
|
+
let watch = false;
|
|
45
47
|
for (let i = 0; i < rest.length; i++) {
|
|
46
48
|
const arg = rest[i];
|
|
47
49
|
if (arg === "-o" || arg === "--output") {
|
|
@@ -53,6 +55,9 @@ function parseArgs(argv) {
|
|
|
53
55
|
}
|
|
54
56
|
output = val;
|
|
55
57
|
}
|
|
58
|
+
else if (arg === "-w" || arg === "--watch") {
|
|
59
|
+
watch = true;
|
|
60
|
+
}
|
|
56
61
|
else if (arg.startsWith("-")) {
|
|
57
62
|
logger.error(`Unknown option: ${arg}`);
|
|
58
63
|
process.exit(1);
|
|
@@ -65,7 +70,7 @@ function parseArgs(argv) {
|
|
|
65
70
|
logger.error("No input files specified. Run 'zod-aot --help' for usage.");
|
|
66
71
|
process.exit(1);
|
|
67
72
|
}
|
|
68
|
-
return { kind: "generate", options: { inputs, output } };
|
|
73
|
+
return { kind: "generate", options: { inputs, output, watch } };
|
|
69
74
|
}
|
|
70
75
|
if (command === "check") {
|
|
71
76
|
const inputs = rest.filter((arg) => {
|
|
@@ -95,8 +100,14 @@ async function main() {
|
|
|
95
100
|
console.log(VERSION);
|
|
96
101
|
break;
|
|
97
102
|
case "generate": {
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
if (command.options.watch) {
|
|
104
|
+
const { runWatch } = await import("./commands/watch.js");
|
|
105
|
+
await runWatch(command.options);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const { runGenerate } = await import("./commands/generate.js");
|
|
109
|
+
await runGenerate(command.options);
|
|
110
|
+
}
|
|
100
111
|
break;
|
|
101
112
|
}
|
|
102
113
|
case "check": {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,OAAO,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SchemaIR } from "../../types.js";
|
|
2
|
+
import type { CodeGenContext } from "../context.js";
|
|
3
|
+
export declare function generateBigIntValidation(ir: SchemaIR & {
|
|
4
|
+
type: "bigint";
|
|
5
|
+
}, inputExpr: string, pathExpr: string, issuesVar: string, _ctx: CodeGenContext): string;
|
|
6
|
+
//# sourceMappingURL=bigint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigint.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/generators/bigint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,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,IAAI,EAAE,cAAc,GACnB,MAAM,CA8BR"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function generateBigIntValidation(ir, inputExpr, pathExpr, issuesVar, _ctx) {
|
|
2
|
+
let code = `if(typeof ${inputExpr}!=="bigint"){${issuesVar}.push({code:"invalid_type",expected:"bigint",received:typeof ${inputExpr},path:${pathExpr},message:"Expected bigint"});}`;
|
|
3
|
+
if (ir.checks.length > 0) {
|
|
4
|
+
code += `else{`;
|
|
5
|
+
for (const check of ir.checks) {
|
|
6
|
+
switch (check.kind) {
|
|
7
|
+
case "bigint_greater_than":
|
|
8
|
+
if (check.inclusive) {
|
|
9
|
+
code += `if(${inputExpr}<${check.value}n){${issuesVar}.push({code:"too_small",minimum:${check.value}n,type:"bigint",inclusive:true,path:${pathExpr},message:"BigInt must be greater than or equal to ${check.value}"});}`;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
code += `if(${inputExpr}<=${check.value}n){${issuesVar}.push({code:"too_small",minimum:${check.value}n,type:"bigint",inclusive:false,path:${pathExpr},message:"BigInt must be greater than ${check.value}"});}`;
|
|
13
|
+
}
|
|
14
|
+
break;
|
|
15
|
+
case "bigint_less_than":
|
|
16
|
+
if (check.inclusive) {
|
|
17
|
+
code += `if(${inputExpr}>${check.value}n){${issuesVar}.push({code:"too_big",maximum:${check.value}n,type:"bigint",inclusive:true,path:${pathExpr},message:"BigInt must be less than or equal to ${check.value}"});}`;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
code += `if(${inputExpr}>=${check.value}n){${issuesVar}.push({code:"too_big",maximum:${check.value}n,type:"bigint",inclusive:false,path:${pathExpr},message:"BigInt must be less than ${check.value}"});}`;
|
|
21
|
+
}
|
|
22
|
+
break;
|
|
23
|
+
case "bigint_multiple_of":
|
|
24
|
+
code += `if(${inputExpr}%${check.value}n!==0n){${issuesVar}.push({code:"not_multiple_of",multipleOf:${check.value}n,path:${pathExpr},message:"BigInt must be a multiple of ${check.value}"});}`;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
code += `}`;
|
|
29
|
+
}
|
|
30
|
+
return `${code}\n`;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=bigint.js.map
|