zod-aot 0.10.0 → 0.12.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.
Files changed (84) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +31 -23
  3. package/dist/cli/commands/check.d.ts.map +1 -1
  4. package/dist/cli/commands/check.js +108 -5
  5. package/dist/cli/commands/check.js.map +1 -1
  6. package/dist/cli/fallback.d.ts.map +1 -1
  7. package/dist/cli/fallback.js +4 -1
  8. package/dist/cli/fallback.js.map +1 -1
  9. package/dist/core/codegen/context.d.ts +8 -1
  10. package/dist/core/codegen/context.d.ts.map +1 -1
  11. package/dist/core/codegen/context.js +33 -0
  12. package/dist/core/codegen/context.js.map +1 -1
  13. package/dist/core/codegen/fast-check.d.ts +16 -0
  14. package/dist/core/codegen/fast-check.d.ts.map +1 -0
  15. package/dist/core/codegen/fast-check.js +406 -0
  16. package/dist/core/codegen/fast-check.js.map +1 -0
  17. package/dist/core/codegen/generators/bigint.d.ts.map +1 -1
  18. package/dist/core/codegen/generators/bigint.js +7 -3
  19. package/dist/core/codegen/generators/bigint.js.map +1 -1
  20. package/dist/core/codegen/generators/boolean.d.ts +4 -1
  21. package/dist/core/codegen/generators/boolean.d.ts.map +1 -1
  22. package/dist/core/codegen/generators/boolean.js +8 -3
  23. package/dist/core/codegen/generators/boolean.js.map +1 -1
  24. package/dist/core/codegen/generators/catch.d.ts +6 -0
  25. package/dist/core/codegen/generators/catch.d.ts.map +1 -0
  26. package/dist/core/codegen/generators/catch.js +11 -0
  27. package/dist/core/codegen/generators/catch.js.map +1 -0
  28. package/dist/core/codegen/generators/date.d.ts.map +1 -1
  29. package/dist/core/codegen/generators/date.js +5 -1
  30. package/dist/core/codegen/generators/date.js.map +1 -1
  31. package/dist/core/codegen/generators/enum.d.ts.map +1 -1
  32. package/dist/core/codegen/generators/enum.js +10 -1
  33. package/dist/core/codegen/generators/enum.js.map +1 -1
  34. package/dist/core/codegen/generators/index.d.ts +2 -0
  35. package/dist/core/codegen/generators/index.d.ts.map +1 -1
  36. package/dist/core/codegen/generators/index.js +2 -0
  37. package/dist/core/codegen/generators/index.js.map +1 -1
  38. package/dist/core/codegen/generators/number.d.ts.map +1 -1
  39. package/dist/core/codegen/generators/number.js +7 -3
  40. package/dist/core/codegen/generators/number.js.map +1 -1
  41. package/dist/core/codegen/generators/string.d.ts.map +1 -1
  42. package/dist/core/codegen/generators/string.js +7 -3
  43. package/dist/core/codegen/generators/string.js.map +1 -1
  44. package/dist/core/codegen/generators/template-literal.d.ts +6 -0
  45. package/dist/core/codegen/generators/template-literal.d.ts.map +1 -0
  46. package/dist/core/codegen/generators/template-literal.js +12 -0
  47. package/dist/core/codegen/generators/template-literal.js.map +1 -0
  48. package/dist/core/codegen/index.d.ts +1 -0
  49. package/dist/core/codegen/index.d.ts.map +1 -1
  50. package/dist/core/codegen/index.js +30 -17
  51. package/dist/core/codegen/index.js.map +1 -1
  52. package/dist/core/extract/extractors/bigint.js +1 -1
  53. package/dist/core/extract/extractors/bigint.js.map +1 -1
  54. package/dist/core/extract/extractors/catch.d.ts +4 -0
  55. package/dist/core/extract/extractors/catch.d.ts.map +1 -0
  56. package/dist/core/extract/extractors/catch.js +28 -0
  57. package/dist/core/extract/extractors/catch.js.map +1 -0
  58. package/dist/core/extract/extractors/date.js +1 -1
  59. package/dist/core/extract/extractors/date.js.map +1 -1
  60. package/dist/core/extract/extractors/index.d.ts +2 -0
  61. package/dist/core/extract/extractors/index.d.ts.map +1 -1
  62. package/dist/core/extract/extractors/index.js +2 -0
  63. package/dist/core/extract/extractors/index.js.map +1 -1
  64. package/dist/core/extract/extractors/number.d.ts.map +1 -1
  65. package/dist/core/extract/extractors/number.js +4 -2
  66. package/dist/core/extract/extractors/number.js.map +1 -1
  67. package/dist/core/extract/extractors/string.d.ts.map +1 -1
  68. package/dist/core/extract/extractors/string.js +4 -2
  69. package/dist/core/extract/extractors/string.js.map +1 -1
  70. package/dist/core/extract/extractors/template-literal.d.ts +4 -0
  71. package/dist/core/extract/extractors/template-literal.d.ts.map +1 -0
  72. package/dist/core/extract/extractors/template-literal.js +8 -0
  73. package/dist/core/extract/extractors/template-literal.js.map +1 -0
  74. package/dist/core/extract/index.d.ts.map +1 -1
  75. package/dist/core/extract/index.js +6 -2
  76. package/dist/core/extract/index.js.map +1 -1
  77. package/dist/core/extract/types.d.ts +4 -0
  78. package/dist/core/extract/types.d.ts.map +1 -1
  79. package/dist/core/iife.d.ts.map +1 -1
  80. package/dist/core/iife.js +1 -0
  81. package/dist/core/iife.js.map +1 -1
  82. package/dist/core/types.d.ts +15 -1
  83. package/dist/core/types.d.ts.map +1 -1
  84. package/package.json +2 -2
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 tetsuyawakita
3
+ Copyright (c) 2026 wakita181009
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![npm](https://img.shields.io/npm/v/zod-aot)](https://www.npmjs.com/package/zod-aot)
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
9
9
 
10
- No code changes required — keep your existing Zod schemas and get **2-80x faster** validation.
10
+ No code changes required — keep your existing Zod schemas and get **2-64x faster** validation.
11
11
 
12
12
  ## Why
13
13
 
@@ -32,27 +32,35 @@ pnpm bench
32
32
 
33
33
  ### safeParse
34
34
 
35
- | Scenario | Zod v3 | Zod v4 | Zod AOT | vs v3 | vs v4 |
36
- |---|---|---|-----------|---|---|
37
- | simple string | 8.2M ops/s | 9.6M ops/s | 10.4M ops/s | **1.3x** | **1.1x** |
38
- | string (min/max) | 7.8M ops/s | 5.4M ops/s | 10.5M ops/s | **1.4x** | **2.0x** |
39
- | number (int+positive) | 7.8M ops/s | 5.7M ops/s | 10.5M ops/s | **1.3x** | **1.8x** |
40
- | enum | 7.5M ops/s | 9.1M ops/s | 10.0M ops/s | **1.3x** | **1.1x** |
41
- | tuple [string, int, boolean] | 4.2M ops/s | 4.6M ops/s | 10.5M ops/s | **2.5x** | **2.3x** |
42
- | record\<string, number\> (5 keys) | 2.3M ops/s | 1.9M ops/s | 5.6M ops/s | **2.4x** | **2.9x** |
43
- | discriminatedUnion (3 variants) | 2.3M ops/s | 2.9M ops/s | 9.3M ops/s | **4.1x** | **3.3x** |
44
- | medium object (7 props, valid) | 1.3M ops/s | 1.7M ops/s | 5.2M ops/s | **4.0x** | **3.0x** |
45
- | medium object (7 props, invalid) | 346K ops/s | 62K ops/s | 467K ops/s | **1.4x** | **7.5x** |
46
- | large object (10 nested items) | 83K ops/s | 110K ops/s | 4.0M ops/s | **48x** | **36x** |
47
- | large object (100 nested items) | 8.5K ops/s | 11.3K ops/s | 680K ops/s | **80x** | **60x** |
48
- | recursive tree (7 nodes) | 398K ops/s | 1.5M ops/s | 6.3M ops/s | **16x** | **4.2x** |
49
- | recursive tree (121 nodes) | 23K ops/s | 101K ops/s | 749K ops/s | **33x** | **7.4x** |
50
- | event log (combined) | 265K ops/s | 440K ops/s | 4.4M ops/s | **17x** | **10x** |
51
- | partial fallback object (transform) | 822K ops/s | 1.4M ops/s | 3.5M ops/s | **4.2x** | **2.4x** |
52
- | partial fallback array 10 (transform) | 85K ops/s | 144K ops/s | 1.1M ops/s | **13x** | **7.7x** |
53
- | partial fallback array 50 (transform) | 18K ops/s | 30K ops/s | 237K ops/s | **13x** | **7.8x** |
54
-
55
- Performance gains scale with schema complexity. The `discriminatedUnion` optimization uses an O(1) `switch` dispatch instead of Zod's sequential trial approach. Partial fallback schemas (containing `transform`/`refine`) still show 2-8x speedups by compiling the optimizable portions.
35
+ | Scenario | Zod v3 | Zod v4 | **Zod AOT** | Typia | AJV | vs Zod v4 |
36
+ |---|---|---|---|---|---|---|
37
+ | simple string | 8.7M | 10.0M | **11.0M** | 11.0M | 11.1M | 1.1x |
38
+ | string (min/max) | 8.3M | 6.0M | **11.1M** | 11.3M | 9.5M | 1.8x |
39
+ | number (int+positive) | 8.2M | 5.8M | **10.9M** | 10.7M | 10.9M | 1.9x |
40
+ | enum | 8.0M | 9.5M | **10.6M** | 10.6M | 10.5M | 1.1x |
41
+ | bigint (min/max) | 8.0M | 6.0M | **10.9M** | | | 1.8x |
42
+ | tuple [string, int, bool] | 4.0M | 4.4M | **10.5M** | 10.8M | 10.5M | 2.4x |
43
+ | record\<string, number\> | 2.3M | 1.9M | **5.4M** | 7.5M | 9.4M | 2.8x |
44
+ | set\<string\> (5 items) | 2.7M | 1.6M | **9.8M** | | | 6.3x |
45
+ | set\<string\> (20 items) | 1.0M | 475K | **7.7M** | | | **16x** |
46
+ | map\<string, number\> (5 entries) | 1.5M | 946K | **8.5M** | | | 9.0x |
47
+ | map\<string, number\> (20 entries) | 490K | 238K | **5.2M** | | | **22x** |
48
+ | pipe (non-transform) | 6.3M | 3.8M | **10.8M** | | | 2.8x |
49
+ | discriminatedUnion (3 variants) | 2.3M | 2.9M | **9.8M** | 10.4M | 5.6M | 3.4x |
50
+ | medium object (valid) | 1.3M | 1.7M | **5.4M** | 7.3M | 5.0M | 3.1x |
51
+ | medium object (invalid) | 351K | 65K | **471K** | 2.1M | 5.6M | 7.3x |
52
+ | large object (10 items) | 82K | 111K | **4.0M** | 4.1M | 834K | **36x** |
53
+ | large object (100 items) | 9.0K | 11.6K | **676K** | 808K | 89K | **58x** |
54
+ | recursive tree (7 nodes) | 424K | 1.5M | **6.4M** | 8.1M | 3.1M | 4.1x |
55
+ | recursive tree (121 nodes) | 24K | 101K | **741K** | 1.4M | 250K | 7.4x |
56
+ | event log (combined) | 260K | 479K | **4.5M** | — | — | 9.4x |
57
+ | partial fallback obj (transform) | 817K | 1.4M | **3.3M** | — | — | 2.3x |
58
+ | partial fallback arr 10 (transform) | 88K | 139K | **841K** | — | — | 6.1x |
59
+ | partial fallback arr 50 (transform) | 18K | 28K | **175K** | — | — | 6.3x |
60
+
61
+ *ops/s, higher is better. "—" = not supported by the library. Measured with `vitest bench` on Apple M-series.*
62
+
63
+ Performance gains scale with schema complexity. The `discriminatedUnion` optimization uses an O(1) `switch` dispatch instead of Zod's sequential trial approach. Partial fallback schemas (containing `transform`/`refine`) still show 2-6x speedups by compiling the optimizable portions. Set/Map/BigInt are only benchmarked among Zod variants as AJV and Typia lack native support for these types.
56
64
 
57
65
  ## Runtime Support
58
66
 
@@ -303,7 +311,7 @@ interface CompiledSchema<T> {
303
311
  | Type | Supported Checks |
304
312
  |---|---|
305
313
  | `string` | `min`, `max`, `length`, `email`, `url`, `uuid`, `regex`, `includes`, `startsWith`, `endsWith` |
306
- | `number` | `int`, `positive`, `negative`, `nonnegative`, `nonpositive`, `min`, `max`, `multipleOf` |
314
+ | `number` | `int`, `positive`, `negative`, `nonnegative`, `nonpositive`, `min`, `max`, `multipleOf`, `int32`, `uint32`, `float32`, `float64` |
307
315
  | `bigint` | `min`, `max`, `positive`, `negative`, `nonnegative`, `nonpositive`, `multipleOf` |
308
316
  | `boolean` | — |
309
317
  | `null` | — |
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAUA,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDnE"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAmIA,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDnE"}
@@ -4,8 +4,109 @@ import process from "node:process";
4
4
  import { extractSchema } from "#src/core/extract/index.js";
5
5
  import { discoverSchemas } from "#src/discovery.js";
6
6
  import { getErrorMessage } from "../errors.js";
7
- import { hasFallback } from "../fallback.js";
8
7
  import { logger } from "../logger.js";
8
+ function countNodes(ir, currentPath = "") {
9
+ if (ir.type === "fallback") {
10
+ return {
11
+ total: 1,
12
+ compilable: 0,
13
+ fallbacks: [{ reason: ir.reason, path: currentPath || "." }],
14
+ };
15
+ }
16
+ if (ir.type === "object") {
17
+ let total = 0;
18
+ let compilable = 0;
19
+ const fallbacks = [];
20
+ for (const [key, prop] of Object.entries(ir.properties)) {
21
+ const r = countNodes(prop, `${currentPath}.${key}`);
22
+ total += r.total;
23
+ compilable += r.compilable;
24
+ fallbacks.push(...r.fallbacks);
25
+ }
26
+ return { total, compilable, fallbacks };
27
+ }
28
+ if (ir.type === "array") {
29
+ return countNodes(ir.element, `${currentPath}[]`);
30
+ }
31
+ if (ir.type === "optional" || ir.type === "nullable" || ir.type === "readonly") {
32
+ return countNodes(ir.inner, currentPath);
33
+ }
34
+ if (ir.type === "default" || ir.type === "catch") {
35
+ return countNodes(ir.inner, currentPath);
36
+ }
37
+ if (ir.type === "union" || ir.type === "discriminatedUnion") {
38
+ let total = 0;
39
+ let compilable = 0;
40
+ const fallbacks = [];
41
+ for (const [i, opt] of ir.options.entries()) {
42
+ const r = countNodes(opt, `${currentPath}[${i}]`);
43
+ total += r.total;
44
+ compilable += r.compilable;
45
+ fallbacks.push(...r.fallbacks);
46
+ }
47
+ return { total, compilable, fallbacks };
48
+ }
49
+ if (ir.type === "tuple") {
50
+ let total = 0;
51
+ let compilable = 0;
52
+ const fallbacks = [];
53
+ for (const [i, item] of ir.items.entries()) {
54
+ const r = countNodes(item, `${currentPath}[${i}]`);
55
+ total += r.total;
56
+ compilable += r.compilable;
57
+ fallbacks.push(...r.fallbacks);
58
+ }
59
+ if (ir.rest) {
60
+ const r = countNodes(ir.rest, `${currentPath}[...rest]`);
61
+ total += r.total;
62
+ compilable += r.compilable;
63
+ fallbacks.push(...r.fallbacks);
64
+ }
65
+ return { total, compilable, fallbacks };
66
+ }
67
+ if (ir.type === "record") {
68
+ const kr = countNodes(ir.keyType, `${currentPath}[key]`);
69
+ const vr = countNodes(ir.valueType, `${currentPath}[value]`);
70
+ return {
71
+ total: kr.total + vr.total,
72
+ compilable: kr.compilable + vr.compilable,
73
+ fallbacks: [...kr.fallbacks, ...vr.fallbacks],
74
+ };
75
+ }
76
+ if (ir.type === "intersection") {
77
+ const lr = countNodes(ir.left, `${currentPath}[left]`);
78
+ const rr = countNodes(ir.right, `${currentPath}[right]`);
79
+ return {
80
+ total: lr.total + rr.total,
81
+ compilable: lr.compilable + rr.compilable,
82
+ fallbacks: [...lr.fallbacks, ...rr.fallbacks],
83
+ };
84
+ }
85
+ if (ir.type === "set") {
86
+ return countNodes(ir.valueType, `${currentPath}[element]`);
87
+ }
88
+ if (ir.type === "map") {
89
+ const kr = countNodes(ir.keyType, `${currentPath}[key]`);
90
+ const vr = countNodes(ir.valueType, `${currentPath}[value]`);
91
+ return {
92
+ total: kr.total + vr.total,
93
+ compilable: kr.compilable + vr.compilable,
94
+ fallbacks: [...kr.fallbacks, ...vr.fallbacks],
95
+ };
96
+ }
97
+ if (ir.type === "pipe") {
98
+ const ir2 = countNodes(ir.in, `${currentPath}[in]`);
99
+ const or2 = countNodes(ir.out, `${currentPath}[out]`);
100
+ return {
101
+ total: ir2.total + or2.total,
102
+ compilable: ir2.compilable + or2.compilable,
103
+ fallbacks: [...ir2.fallbacks, ...or2.fallbacks],
104
+ };
105
+ }
106
+ // Leaf node (string, number, boolean, bigint, date, literal, enum,
107
+ // symbol, null, undefined, void, nan, never, any, unknown, recursiveRef, templateLiteral)
108
+ return { total: 1, compilable: 1, fallbacks: [] };
109
+ }
9
110
  export async function runCheck(options) {
10
111
  const files = [];
11
112
  for (const input of options.inputs) {
@@ -38,12 +139,14 @@ export async function runCheck(options) {
38
139
  }
39
140
  for (const s of schemas) {
40
141
  const ir = extractSchema(s.schema);
41
- const fallbackReason = hasFallback(ir);
42
- if (fallbackReason) {
43
- logger.warn(`${s.exportName} partial (fallback: ${fallbackReason})`);
142
+ const coverage = countNodes(ir);
143
+ const pct = coverage.total > 0 ? Math.round((coverage.compilable / coverage.total) * 100) : 100;
144
+ if (coverage.fallbacks.length > 0) {
145
+ const reasons = coverage.fallbacks.map((f) => `${f.reason} at ${f.path}`).join(", ");
146
+ logger.warn(`${s.exportName} — ${pct}% compiled (fallback: ${reasons})`);
44
147
  }
45
148
  else {
46
- logger.success(`${s.exportName} — compilable`);
149
+ logger.success(`${s.exportName} — ${pct}% compiled`);
47
150
  hasCompilable = true;
48
151
  }
49
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAMtC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEvD,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,KAAK,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,4BAA4B,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;YAEvC,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,yBAAyB,cAAc,GAAG,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,eAAe,CAAC,CAAC;gBAC/C,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAQtC,SAAS,UAAU,CAAC,EAAY,EAAE,WAAW,GAAG,EAAE;IAChD,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO;YACL,KAAK,EAAE,CAAC;YACR,UAAU,EAAE,CAAC;YACb,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,IAAI,GAAG,EAAE,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAgC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,WAAW,IAAI,GAAG,EAAE,CAAC,CAAC;YACpD,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;YACjB,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,WAAW,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/E,OAAO,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjD,OAAO,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC5D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAgC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;YACjB,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAgC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC;YACnD,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;YACjB,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,WAAW,WAAW,CAAC,CAAC;YACzD,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;YACjB,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,WAAW,SAAS,CAAC,CAAC;QAC7D,OAAO;YACL,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;YAC1B,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;YACzC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,WAAW,QAAQ,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,WAAW,SAAS,CAAC,CAAC;QACzD,OAAO;YACL,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;YAC1B,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;YACzC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,WAAW,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;QACzD,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,WAAW,SAAS,CAAC,CAAC;QAC7D,OAAO;YACL,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK;YAC1B,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU;YACzC,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,WAAW,MAAM,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,WAAW,OAAO,CAAC,CAAC;QACtD,OAAO;YACL,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;YAC5B,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU;YAC3C,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,0FAA0F;IAC1F,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACpD,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,mBAAmB,KAAK,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAEvD,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,kBAAkB,OAAO,KAAK,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,4BAA4B,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;YAChC,MAAM,GAAG,GACP,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAEtF,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM,GAAG,yBAAyB,OAAO,GAAG,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM,GAAG,YAAY,CAAC,CAAC;gBACrD,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/cli/fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAuCvD"}
1
+ {"version":3,"file":"fallback.d.ts","sourceRoot":"","sources":["../../src/cli/fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CA0CvD"}
@@ -19,9 +19,12 @@ export function hasFallback(ir) {
19
19
  if (ir.type === "optional" || ir.type === "nullable" || ir.type === "readonly") {
20
20
  return hasFallback(ir.inner);
21
21
  }
22
- if (ir.type === "default") {
22
+ if (ir.type === "default" || ir.type === "catch") {
23
23
  return hasFallback(ir.inner);
24
24
  }
25
+ if (ir.type === "templateLiteral") {
26
+ return null;
27
+ }
25
28
  if (ir.type === "union" || ir.type === "discriminatedUnion") {
26
29
  for (const opt of ir.options) {
27
30
  const reason = hasFallback(opt);
@@ -1 +1 @@
1
- {"version":3,"file":"fallback.js","sourceRoot":"","sources":["../../src/cli/fallback.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAAY;IACtC,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,MAAM;gBAAE,OAAO,GAAG,MAAM,QAAQ,GAAG,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/E,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,IAAI,EAAE,CAAC,IAAI;YAAE,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"fallback.js","sourceRoot":"","sources":["../../src/cli/fallback.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAAY;IACtC,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;IACnB,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,MAAM;gBAAE,OAAO,GAAG,MAAM,QAAQ,GAAG,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/E,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjD,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC5D,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;QAC5B,CAAC;QACD,IAAI,EAAE,CAAC,IAAI;YAAE,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,9 +1,11 @@
1
- import type { SchemaIR } from "../types.js";
1
+ import type { BigIntCheckIR, CheckIR, DateCheckIR, SchemaIR } from "../types.js";
2
2
  export interface CodeGenResult {
3
3
  code: string;
4
4
  functionDef: string;
5
5
  /** Number of fallback schemas referenced by __fb[N] in the generated code. 0 = no fallbacks. */
6
6
  fallbackCount: number;
7
+ /** Auxiliary function definitions (e.g. __fastCheck_* for recursiveRef). Emitted before the main function. */
8
+ auxiliaryFunctions?: string[];
7
9
  }
8
10
  export interface CodeGenContext {
9
11
  preamble: string[];
@@ -25,4 +27,9 @@ export declare function escapeString(s: string): string;
25
27
  * e.g. "function safeParse_User(input){..." -> "safeParse_User"
26
28
  */
27
29
  export declare function extractFunctionName(functionDef: string): string;
30
+ /**
31
+ * Sort comparator for CheckIR: cheapest/most-discriminating checks first.
32
+ * Used as `[...ir.checks].sort(checkPriority)`.
33
+ */
34
+ export declare function checkPriority(a: CheckIR | BigIntCheckIR | DateCheckIR, b: CheckIR | BigIntCheckIR | DateCheckIR): number;
28
35
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,CAAC;AAGZ,eAAO,MAAM,kBAAkB,QAA+G,CAAC;AAE/I,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,2KAC4I,CAAC;AAE3K;;;GAGG;AACH,wBAAgB,IAAI,CAClB,OAAO,EAAE,oBAAoB,EAC7B,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,GAChD,MAAM,CAOR;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM/D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,aAAa,EAAE,MAAM,CAAC;IACtB,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,CAAC;AAGZ,eAAO,MAAM,kBAAkB,QAA+G,CAAC;AAE/I,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,2KAC4I,CAAC;AAE3K;;;GAGG;AACH,wBAAgB,IAAI,CAClB,OAAO,EAAE,oBAAoB,EAC7B,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,GAChD,MAAM,CAOR;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAM/D;AA6BD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,EACxC,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GACvC,MAAM,CAER"}
@@ -29,4 +29,37 @@ export function extractFunctionName(functionDef) {
29
29
  }
30
30
  return match[1];
31
31
  }
32
+ const CHECK_PRIORITY = {
33
+ // Cheapest: length/size comparisons (O(1))
34
+ min_length: 10,
35
+ max_length: 11,
36
+ length_equals: 12,
37
+ min_size: 13,
38
+ max_size: 14,
39
+ // Number format checks (comparison + bitwise)
40
+ number_format: 15,
41
+ // Range comparisons
42
+ greater_than: 20,
43
+ less_than: 21,
44
+ bigint_greater_than: 20,
45
+ bigint_less_than: 21,
46
+ date_greater_than: 22,
47
+ date_less_than: 23,
48
+ // Modulo
49
+ multiple_of: 30,
50
+ bigint_multiple_of: 30,
51
+ // String search (O(n))
52
+ includes: 40,
53
+ starts_with: 41,
54
+ ends_with: 42,
55
+ // Regex (most expensive)
56
+ string_format: 50,
57
+ };
58
+ /**
59
+ * Sort comparator for CheckIR: cheapest/most-discriminating checks first.
60
+ * Used as `[...ir.checks].sort(checkPriority)`.
61
+ */
62
+ export function checkPriority(a, b) {
63
+ return (CHECK_PRIORITY[a.kind] ?? 99) - (CHECK_PRIORITY[b.kind] ?? 99);
64
+ }
32
65
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAuBA,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA,kGAAkG,CAAC;AAE/I,kGAAkG;AAClG,MAAM,CAAC,MAAM,iBAAiB,GAC5B,wKAAwK,CAAC;AAE3K;;;GAGG;AACH,MAAM,UAAU,IAAI,CAClB,OAA6B,EAC7B,GAAG,MAA8C;IAEjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAyBA,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA,kGAAkG,CAAC;AAE/I,kGAAkG;AAClG,MAAM,CAAC,MAAM,iBAAiB,GAC5B,wKAAwK,CAAC;AAE3K;;;GAGG;AACH,MAAM,UAAU,IAAI,CAClB,OAA6B,EAC7B,GAAG,MAA8C;IAEjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,cAAc,GAA2B;IAC7C,2CAA2C;IAC3C,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,EAAE;IACjB,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,8CAA8C;IAC9C,aAAa,EAAE,EAAE;IACjB,oBAAoB;IACpB,YAAY,EAAE,EAAE;IAChB,SAAS,EAAE,EAAE;IACb,mBAAmB,EAAE,EAAE;IACvB,gBAAgB,EAAE,EAAE;IACpB,iBAAiB,EAAE,EAAE;IACrB,cAAc,EAAE,EAAE;IAClB,SAAS;IACT,WAAW,EAAE,EAAE;IACf,kBAAkB,EAAE,EAAE;IACtB,uBAAuB;IACvB,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,yBAAyB;IACzB,aAAa,EAAE,EAAE;CAClB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,CAAwC,EACxC,CAAwC;IAExC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Fast Path generator: produces a boolean expression string for eligible schemas.
3
+ * When the expression evaluates to `true` at runtime, the input is valid and
4
+ * safeParse can return success immediately without allocating an issues array.
5
+ *
6
+ * Returns `null` if the schema is not eligible for Fast Path (contains coerce,
7
+ * default, catch, date, set/map, transform, refine, or other non-pure constructs).
8
+ */
9
+ import type { SchemaIR } from "../types.js";
10
+ import type { CodeGenContext } from "./context.js";
11
+ /**
12
+ * Generate a boolean expression string that validates `inputExpr` against the schema.
13
+ * Returns `null` if the schema (or any nested part) is not eligible for fast checking.
14
+ */
15
+ export declare function generateFastCheck(ir: SchemaIR, inputExpr: string, ctx: CodeGenContext): string | null;
16
+ //# sourceMappingURL=fast-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-check.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/fast-check.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAaV,QAAQ,EAIT,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,GAClB,MAAM,GAAG,IAAI,CA6Ff"}