zod-aot 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -1
- package/dist/cli/commands/check.d.ts +4 -2
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +102 -113
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/index.js +43 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/logger.d.ts +10 -0
- package/dist/cli/logger.d.ts.map +1 -1
- package/dist/cli/logger.js +22 -9
- package/dist/cli/logger.js.map +1 -1
- package/dist/core/codegen/context.d.ts +3 -10
- package/dist/core/codegen/context.d.ts.map +1 -1
- package/dist/core/codegen/context.js +10 -31
- package/dist/core/codegen/context.js.map +1 -1
- package/dist/core/codegen/emit.d.ts +8 -0
- package/dist/core/codegen/emit.d.ts.map +1 -0
- package/dist/core/codegen/emit.js +16 -0
- package/dist/core/codegen/emit.js.map +1 -0
- package/dist/core/codegen/fast-check/array.d.ts +4 -0
- package/dist/core/codegen/fast-check/array.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/array.js +28 -0
- package/dist/core/codegen/fast-check/array.js.map +1 -0
- package/dist/core/codegen/fast-check/bigint.d.ts +3 -0
- package/dist/core/codegen/fast-check/bigint.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/bigint.js +19 -0
- package/dist/core/codegen/fast-check/bigint.js.map +1 -0
- package/dist/core/codegen/fast-check/discriminated-union.d.ts +4 -0
- package/dist/core/codegen/fast-check/discriminated-union.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/discriminated-union.js +13 -0
- package/dist/core/codegen/fast-check/discriminated-union.js.map +1 -0
- package/dist/core/codegen/fast-check/enum.d.ts +4 -0
- package/dist/core/codegen/fast-check/enum.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/enum.js +12 -0
- package/dist/core/codegen/fast-check/enum.js.map +1 -0
- package/dist/core/codegen/{fast-check.d.ts → fast-check/index.d.ts} +3 -3
- package/dist/core/codegen/fast-check/index.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/index.js +118 -0
- package/dist/core/codegen/fast-check/index.js.map +1 -0
- package/dist/core/codegen/fast-check/intersection.d.ts +4 -0
- package/dist/core/codegen/fast-check/intersection.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/intersection.js +10 -0
- package/dist/core/codegen/fast-check/intersection.js.map +1 -0
- package/dist/core/codegen/fast-check/literal.d.ts +3 -0
- package/dist/core/codegen/fast-check/literal.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/literal.js +8 -0
- package/dist/core/codegen/fast-check/literal.js.map +1 -0
- package/dist/core/codegen/fast-check/nullable.d.ts +4 -0
- package/dist/core/codegen/fast-check/nullable.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/nullable.js +7 -0
- package/dist/core/codegen/fast-check/nullable.js.map +1 -0
- package/dist/core/codegen/fast-check/number.d.ts +3 -0
- package/dist/core/codegen/fast-check/number.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/number.js +51 -0
- package/dist/core/codegen/fast-check/number.js.map +1 -0
- package/dist/core/codegen/fast-check/object.d.ts +4 -0
- package/dist/core/codegen/fast-check/object.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/object.js +13 -0
- package/dist/core/codegen/fast-check/object.js.map +1 -0
- package/dist/core/codegen/fast-check/optional.d.ts +4 -0
- package/dist/core/codegen/fast-check/optional.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/optional.js +7 -0
- package/dist/core/codegen/fast-check/optional.js.map +1 -0
- package/dist/core/codegen/fast-check/pipe.d.ts +4 -0
- package/dist/core/codegen/fast-check/pipe.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/pipe.js +14 -0
- package/dist/core/codegen/fast-check/pipe.js.map +1 -0
- package/dist/core/codegen/fast-check/readonly.d.ts +4 -0
- package/dist/core/codegen/fast-check/readonly.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/readonly.js +4 -0
- package/dist/core/codegen/fast-check/readonly.js.map +1 -0
- package/dist/core/codegen/fast-check/record.d.ts +4 -0
- package/dist/core/codegen/fast-check/record.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/record.js +18 -0
- package/dist/core/codegen/fast-check/record.js.map +1 -0
- package/dist/core/codegen/fast-check/string.d.ts +4 -0
- package/dist/core/codegen/fast-check/string.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/string.js +62 -0
- package/dist/core/codegen/fast-check/string.js.map +1 -0
- package/dist/core/codegen/fast-check/tuple.d.ts +4 -0
- package/dist/core/codegen/fast-check/tuple.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/tuple.js +32 -0
- package/dist/core/codegen/fast-check/tuple.js.map +1 -0
- package/dist/core/codegen/fast-check/union.d.ts +4 -0
- package/dist/core/codegen/fast-check/union.d.ts.map +1 -0
- package/dist/core/codegen/fast-check/union.js +12 -0
- package/dist/core/codegen/fast-check/union.js.map +1 -0
- package/dist/core/codegen/generators/array.js +1 -1
- package/dist/core/codegen/generators/array.js.map +1 -1
- package/dist/core/codegen/generators/bigint.d.ts.map +1 -1
- package/dist/core/codegen/generators/bigint.js +2 -1
- package/dist/core/codegen/generators/bigint.js.map +1 -1
- package/dist/core/codegen/generators/boolean.js +1 -1
- package/dist/core/codegen/generators/boolean.js.map +1 -1
- package/dist/core/codegen/generators/date.js +1 -1
- package/dist/core/codegen/generators/date.js.map +1 -1
- package/dist/core/codegen/generators/default.js +1 -1
- package/dist/core/codegen/generators/default.js.map +1 -1
- package/dist/core/codegen/generators/discriminated-union.d.ts.map +1 -1
- package/dist/core/codegen/generators/discriminated-union.js +2 -1
- package/dist/core/codegen/generators/discriminated-union.js.map +1 -1
- package/dist/core/codegen/generators/enum.d.ts.map +1 -1
- package/dist/core/codegen/generators/enum.js +3 -2
- package/dist/core/codegen/generators/enum.js.map +1 -1
- package/dist/core/codegen/generators/fallback.js +1 -1
- package/dist/core/codegen/generators/fallback.js.map +1 -1
- package/dist/core/codegen/generators/index.d.ts +3 -33
- package/dist/core/codegen/generators/index.d.ts.map +1 -1
- package/dist/core/codegen/generators/index.js +103 -33
- package/dist/core/codegen/generators/index.js.map +1 -1
- package/dist/core/codegen/generators/literal.d.ts.map +1 -1
- package/dist/core/codegen/generators/literal.js +2 -1
- package/dist/core/codegen/generators/literal.js.map +1 -1
- package/dist/core/codegen/generators/map.js +1 -1
- package/dist/core/codegen/generators/map.js.map +1 -1
- package/dist/core/codegen/generators/nan.js +1 -1
- package/dist/core/codegen/generators/nan.js.map +1 -1
- package/dist/core/codegen/generators/never.js +1 -1
- package/dist/core/codegen/generators/never.js.map +1 -1
- package/dist/core/codegen/generators/null.js +1 -1
- package/dist/core/codegen/generators/null.js.map +1 -1
- package/dist/core/codegen/generators/nullable.js +1 -1
- package/dist/core/codegen/generators/nullable.js.map +1 -1
- package/dist/core/codegen/generators/number.d.ts.map +1 -1
- package/dist/core/codegen/generators/number.js +2 -1
- package/dist/core/codegen/generators/number.js.map +1 -1
- package/dist/core/codegen/generators/object.d.ts.map +1 -1
- package/dist/core/codegen/generators/object.js +2 -1
- package/dist/core/codegen/generators/object.js.map +1 -1
- package/dist/core/codegen/generators/optional.js +1 -1
- package/dist/core/codegen/generators/optional.js.map +1 -1
- package/dist/core/codegen/generators/record.js +1 -1
- package/dist/core/codegen/generators/record.js.map +1 -1
- package/dist/core/codegen/generators/recursive-ref.js +1 -1
- package/dist/core/codegen/generators/recursive-ref.js.map +1 -1
- package/dist/core/codegen/generators/set.js +1 -1
- package/dist/core/codegen/generators/set.js.map +1 -1
- package/dist/core/codegen/generators/string.d.ts.map +1 -1
- package/dist/core/codegen/generators/string.js +2 -1
- package/dist/core/codegen/generators/string.js.map +1 -1
- package/dist/core/codegen/generators/symbol.js +1 -1
- package/dist/core/codegen/generators/symbol.js.map +1 -1
- package/dist/core/codegen/generators/template-literal.d.ts.map +1 -1
- package/dist/core/codegen/generators/template-literal.js +2 -1
- package/dist/core/codegen/generators/template-literal.js.map +1 -1
- package/dist/core/codegen/generators/tuple.js +1 -1
- package/dist/core/codegen/generators/tuple.js.map +1 -1
- package/dist/core/codegen/generators/undefined.js +1 -1
- package/dist/core/codegen/generators/undefined.js.map +1 -1
- package/dist/core/codegen/generators/union.js +1 -1
- package/dist/core/codegen/generators/union.js.map +1 -1
- package/dist/core/codegen/generators/void.js +1 -1
- package/dist/core/codegen/generators/void.js.map +1 -1
- package/dist/core/codegen/index.d.ts +1 -1
- package/dist/core/codegen/index.d.ts.map +1 -1
- package/dist/core/codegen/index.js +3 -73
- package/dist/core/codegen/index.js.map +1 -1
- package/dist/core/compile.d.ts.map +1 -1
- package/dist/core/compile.js +12 -1
- package/dist/core/compile.js.map +1 -1
- package/dist/core/diagnostic.d.ts +46 -0
- package/dist/core/diagnostic.d.ts.map +1 -0
- package/dist/core/diagnostic.js +168 -0
- package/dist/core/diagnostic.js.map +1 -0
- package/dist/core/iife.d.ts.map +1 -1
- package/dist/core/iife.js +7 -1
- package/dist/core/iife.js.map +1 -1
- package/dist/core/pipeline.d.ts +10 -4
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +21 -9
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/types.d.ts +4 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/discovery.d.ts +1 -4
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js.map +1 -1
- package/dist/unplugin/index.d.ts.map +1 -1
- package/dist/unplugin/index.js +40 -17
- package/dist/unplugin/index.js.map +1 -1
- package/dist/unplugin/transform.d.ts +15 -4
- package/dist/unplugin/transform.d.ts.map +1 -1
- package/dist/unplugin/transform.js +35 -1
- package/dist/unplugin/transform.js.map +1 -1
- package/dist/unplugin/types.d.ts +6 -0
- package/dist/unplugin/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/cli/fallback.d.ts +0 -7
- package/dist/cli/fallback.d.ts.map +0 -1
- package/dist/cli/fallback.js +0 -52
- package/dist/cli/fallback.js.map +0 -1
- package/dist/core/codegen/fast-check.d.ts.map +0 -1
- package/dist/core/codegen/fast-check.js +0 -406
- package/dist/core/codegen/fast-check.js.map +0 -1
- package/dist/core/runtime.d.ts +0 -10
- package/dist/core/runtime.d.ts.map +0 -1
- package/dist/core/runtime.js +0 -14
- package/dist/core/runtime.js.map +0 -1
package/README.md
CHANGED
|
@@ -135,8 +135,14 @@ npx zod-aot generate src/ -o src/compiled/
|
|
|
135
135
|
# Watch mode — regenerate on file changes
|
|
136
136
|
npx zod-aot generate src/ --watch
|
|
137
137
|
|
|
138
|
-
#
|
|
138
|
+
# Diagnose schemas — tree view, coverage, Fast Path, hints
|
|
139
139
|
npx zod-aot check src/schemas.ts
|
|
140
|
+
|
|
141
|
+
# JSON output for CI integration
|
|
142
|
+
npx zod-aot check src/schemas.ts --json
|
|
143
|
+
|
|
144
|
+
# Fail CI if coverage < 80%
|
|
145
|
+
npx zod-aot check src/schemas.ts --json --fail-under 80
|
|
140
146
|
```
|
|
141
147
|
|
|
142
148
|
## Build Plugin (unplugin)
|
|
@@ -159,6 +165,7 @@ module.exports = { plugins: [zodAot()] };
|
|
|
159
165
|
zodAot({
|
|
160
166
|
include: ["src/schemas"], // only process files matching these substrings
|
|
161
167
|
exclude: ["test", "mock"], // skip files matching these substrings
|
|
168
|
+
verbose: true, // log per-schema compilation status and build summary
|
|
162
169
|
})
|
|
163
170
|
```
|
|
164
171
|
|
|
@@ -199,6 +206,59 @@ app.post("/users", zValidator("json", validateUser), (c) => {
|
|
|
199
206
|
|
|
200
207
|
`@hono/zod-validator` internally calls `schema.safeParse()` — with zod-aot, this call is replaced by the generated optimized validator at build time, giving you faster request validation with zero code changes.
|
|
201
208
|
|
|
209
|
+
## Schema Diagnostics (`check`)
|
|
210
|
+
|
|
211
|
+
The `check` command analyzes schemas for compilation coverage, Fast Path eligibility, and actionable hints — without generating code.
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
npx zod-aot check src/schemas.ts
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Output includes:**
|
|
218
|
+
|
|
219
|
+
- **Tree view** — hierarchical visualization of schema structure with compile/fallback status per node
|
|
220
|
+
- **Coverage** — percentage of schema nodes that are compiled (e.g. `85% compiled (17/20 nodes)`)
|
|
221
|
+
- **Fast Path eligibility** — whether the schema qualifies for two-phase validation, with the specific blocker if ineligible
|
|
222
|
+
- **Hints** — actionable suggestions (e.g. "Replace `.refine()` with built-in checks")
|
|
223
|
+
|
|
224
|
+
### Options
|
|
225
|
+
|
|
226
|
+
| Flag | Description |
|
|
227
|
+
|---|---|
|
|
228
|
+
| `--json` | Output structured JSON (for CI/CD integration) |
|
|
229
|
+
| `--fail-under <pct>` | Exit with code 1 if any schema's coverage is below the threshold |
|
|
230
|
+
| `--no-color` | Disable colored output |
|
|
231
|
+
|
|
232
|
+
### JSON output
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
npx zod-aot check src/schemas.ts --json
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
```json
|
|
239
|
+
[
|
|
240
|
+
{
|
|
241
|
+
"file": "src/schemas.ts",
|
|
242
|
+
"schemas": [
|
|
243
|
+
{
|
|
244
|
+
"exportName": "validateUser",
|
|
245
|
+
"coverage": { "total": 5, "compilable": 5, "percent": 100 },
|
|
246
|
+
"fastPath": { "eligible": true },
|
|
247
|
+
"fallbacks": []
|
|
248
|
+
}
|
|
249
|
+
]
|
|
250
|
+
}
|
|
251
|
+
]
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### CI gate
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
npx zod-aot check src/schemas.ts --json --fail-under 80
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Exits with code 1 if any schema's compilation coverage drops below 80%.
|
|
261
|
+
|
|
202
262
|
## How It Works
|
|
203
263
|
|
|
204
264
|
```
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
interface CheckOptions {
|
|
1
|
+
export interface CheckOptions {
|
|
2
2
|
inputs: string[];
|
|
3
|
+
json: boolean;
|
|
4
|
+
failUnder: number | undefined;
|
|
5
|
+
noColor: boolean;
|
|
3
6
|
}
|
|
4
7
|
export declare function runCheck(options: CheckOptions): Promise<void>;
|
|
5
|
-
export {};
|
|
6
8
|
//# sourceMappingURL=check.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAiFA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHnE"}
|
|
@@ -1,113 +1,59 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import process from "node:process";
|
|
4
|
+
import { diagnoseSchema } from "#src/core/diagnostic.js";
|
|
4
5
|
import { extractSchema } from "#src/core/extract/index.js";
|
|
5
6
|
import { discoverSchemas } from "#src/discovery.js";
|
|
6
7
|
import { getErrorMessage } from "../errors.js";
|
|
7
|
-
import { logger } from "../logger.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
import { createColors, logger } from "../logger.js";
|
|
9
|
+
// ─── Tree Rendering ─────────────────────────────────────────────────────────
|
|
10
|
+
function renderTree(node, c, prefix = "", isLast = true) {
|
|
11
|
+
const lines = [];
|
|
12
|
+
const connector = prefix === "" ? "" : isLast ? "└─ " : "├─ ";
|
|
13
|
+
const childPrefix = prefix === "" ? "" : prefix + (isLast ? " " : "│ ");
|
|
14
|
+
const statusIcon = node.status === "compiled" ? `${c.green}✓${c.reset}` : `${c.red}✗${c.reset}`;
|
|
15
|
+
const typeLabel = `${c.bold}${node.type}${c.reset}`;
|
|
16
|
+
const pathLabel = node.path && node.path !== "(root)" ? ` ${c.dim}${node.path}${c.reset}` : "";
|
|
17
|
+
const reasonLabel = node.status === "fallback" && node.reason ? ` ${c.yellow}(${node.reason})${c.reset}` : "";
|
|
18
|
+
lines.push(`${prefix}${connector}${statusIcon} ${typeLabel}${pathLabel}${reasonLabel}`);
|
|
19
|
+
if (node.status === "fallback" && node.hint) {
|
|
20
|
+
const hintPrefix = `${childPrefix} `;
|
|
21
|
+
lines.push(`${hintPrefix}${c.dim}hint: ${node.hint}${c.reset}`);
|
|
15
22
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
};
|
|
23
|
+
for (const [i, child] of node.children.entries()) {
|
|
24
|
+
const last = i === node.children.length - 1;
|
|
25
|
+
lines.push(...renderTree(child, c, childPrefix, last));
|
|
96
26
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
27
|
+
return lines;
|
|
28
|
+
}
|
|
29
|
+
function buildJsonReport(filePath, results) {
|
|
30
|
+
return {
|
|
31
|
+
file: filePath,
|
|
32
|
+
schemas: results.map(({ exportName, diagnostic }) => {
|
|
33
|
+
const report = {
|
|
34
|
+
exportName,
|
|
35
|
+
coverage: {
|
|
36
|
+
total: diagnostic.total,
|
|
37
|
+
compilable: diagnostic.compilable,
|
|
38
|
+
percent: diagnostic.coveragePct,
|
|
39
|
+
},
|
|
40
|
+
fastPath: { eligible: diagnostic.fastPathEligible },
|
|
41
|
+
fallbacks: diagnostic.fallbacks,
|
|
42
|
+
};
|
|
43
|
+
if (diagnostic.fastPathBlocker) {
|
|
44
|
+
report.fastPath.blocker = diagnostic.fastPathBlocker;
|
|
45
|
+
}
|
|
46
|
+
return report;
|
|
47
|
+
}),
|
|
48
|
+
};
|
|
109
49
|
}
|
|
110
50
|
export async function runCheck(options) {
|
|
51
|
+
// biome-ignore lint/suspicious/noConsole: CLI output
|
|
52
|
+
const out = console.log;
|
|
53
|
+
// biome-ignore lint/suspicious/noConsole: CLI output
|
|
54
|
+
const err = console.error;
|
|
55
|
+
const colorEnabled = !options.noColor && process.stdout.isTTY === true;
|
|
56
|
+
const c = createColors(colorEnabled);
|
|
111
57
|
const files = [];
|
|
112
58
|
for (const input of options.inputs) {
|
|
113
59
|
const absPath = path.resolve(input);
|
|
@@ -122,36 +68,79 @@ export async function runCheck(options) {
|
|
|
122
68
|
}
|
|
123
69
|
files.push(absPath);
|
|
124
70
|
}
|
|
125
|
-
|
|
71
|
+
const allJsonReports = [];
|
|
72
|
+
let minCoverage = 100;
|
|
73
|
+
let schemasProcessed = 0;
|
|
126
74
|
for (const filePath of files) {
|
|
127
75
|
const relPath = path.relative(process.cwd(), filePath);
|
|
128
76
|
let schemas;
|
|
129
77
|
try {
|
|
130
78
|
schemas = await discoverSchemas(filePath);
|
|
131
79
|
}
|
|
132
|
-
catch (
|
|
133
|
-
logger.error(`Failed to load ${relPath}: ${getErrorMessage(
|
|
80
|
+
catch (e) {
|
|
81
|
+
logger.error(`Failed to load ${relPath}: ${getErrorMessage(e)}`);
|
|
134
82
|
process.exit(1);
|
|
135
83
|
}
|
|
136
84
|
if (schemas.length === 0) {
|
|
137
85
|
logger.warn(`${relPath}: no compile() calls found`);
|
|
138
86
|
continue;
|
|
139
87
|
}
|
|
88
|
+
const results = [];
|
|
140
89
|
for (const s of schemas) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
90
|
+
let ir;
|
|
91
|
+
try {
|
|
92
|
+
ir = extractSchema(s.schema);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
err(`${c.red}error${c.reset} Failed to extract "${s.exportName}" in ${relPath}: ${getErrorMessage(e)}`);
|
|
96
|
+
continue;
|
|
147
97
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
98
|
+
const diagnostic = diagnoseSchema(ir);
|
|
99
|
+
results.push({ exportName: s.exportName, diagnostic });
|
|
100
|
+
schemasProcessed++;
|
|
101
|
+
if (diagnostic.coveragePct < minCoverage) {
|
|
102
|
+
minCoverage = diagnostic.coveragePct;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (options.json) {
|
|
106
|
+
allJsonReports.push(buildJsonReport(relPath, results));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
out(`\n${c.bold}${relPath}${c.reset}`);
|
|
110
|
+
for (const { exportName, diagnostic } of results) {
|
|
111
|
+
const pctColor = diagnostic.coveragePct === 100 ? c.green : c.yellow;
|
|
112
|
+
const fpLabel = diagnostic.fastPathEligible
|
|
113
|
+
? `${c.green}Fast Path: eligible${c.reset}`
|
|
114
|
+
: `${c.yellow}Fast Path: ineligible${c.reset}${c.dim} (${diagnostic.fastPathBlocker})${c.reset}`;
|
|
115
|
+
out(`\n ${c.cyan}${exportName}${c.reset} — ${pctColor}${diagnostic.coveragePct}%${c.reset} compiled (${diagnostic.compilable}/${diagnostic.total} nodes) | ${fpLabel}`);
|
|
116
|
+
const treeLines = renderTree(diagnostic.root, c, " ");
|
|
117
|
+
for (const line of treeLines) {
|
|
118
|
+
out(line);
|
|
119
|
+
}
|
|
120
|
+
if (diagnostic.fallbacks.length > 0) {
|
|
121
|
+
out(`\n ${c.yellow}Fallbacks:${c.reset}`);
|
|
122
|
+
for (const fb of diagnostic.fallbacks) {
|
|
123
|
+
out(` ${c.red}✗${c.reset} ${fb.path} — ${fb.reason}`);
|
|
124
|
+
out(` ${c.dim}${fb.hint}${c.reset}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
151
127
|
}
|
|
152
128
|
}
|
|
153
129
|
}
|
|
154
|
-
if (
|
|
130
|
+
if (options.json) {
|
|
131
|
+
out(JSON.stringify(allJsonReports, null, 2));
|
|
132
|
+
}
|
|
133
|
+
if (options.failUnder !== undefined) {
|
|
134
|
+
if (schemasProcessed === 0) {
|
|
135
|
+
logger.error("No schemas were analyzed — cannot satisfy --fail-under");
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
if (minCoverage < options.failUnder) {
|
|
139
|
+
logger.error(`Coverage ${minCoverage}% is below threshold ${options.failUnder}%`);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else if (schemasProcessed === 0) {
|
|
155
144
|
process.exit(1);
|
|
156
145
|
}
|
|
157
146
|
}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -12,24 +12,28 @@ zod-aot v${VERSION} — Compile Zod schemas into zero-overhead validation functi
|
|
|
12
12
|
|
|
13
13
|
Usage:
|
|
14
14
|
zod-aot generate <files...> [-o <output>] [-w]
|
|
15
|
-
zod-aot check <files...>
|
|
15
|
+
zod-aot check <files...> [--json] [--fail-under <pct>] [--no-color]
|
|
16
16
|
|
|
17
17
|
Commands:
|
|
18
18
|
generate Generate optimized validation code from compile() calls
|
|
19
|
-
check Check
|
|
19
|
+
check Check schemas with tree view, coverage, Fast Path status, and hints
|
|
20
20
|
|
|
21
21
|
Options:
|
|
22
|
-
-o, --output <path>
|
|
23
|
-
-w, --watch
|
|
24
|
-
--no-zod-compat
|
|
25
|
-
|
|
26
|
-
-
|
|
22
|
+
-o, --output <path> Output file or directory
|
|
23
|
+
-w, --watch Watch for changes and regenerate
|
|
24
|
+
--no-zod-compat Minimal output without Zod compatibility (smaller bundle)
|
|
25
|
+
--json Output diagnosis as JSON (check only)
|
|
26
|
+
--fail-under <pct> Exit with code 1 if any schema's coverage < pct (check only)
|
|
27
|
+
--no-color Disable colored output (check only)
|
|
28
|
+
-h, --help Show this help message
|
|
29
|
+
-v, --version Show version number
|
|
27
30
|
|
|
28
31
|
Examples:
|
|
29
32
|
zod-aot generate src/schemas.ts
|
|
30
33
|
zod-aot generate src/schemas.ts -o src/schemas.compiled.ts
|
|
31
34
|
zod-aot generate src/ --watch
|
|
32
35
|
zod-aot check src/schemas.ts
|
|
36
|
+
zod-aot check src/schemas.ts --json --fail-under 80
|
|
33
37
|
`.trim());
|
|
34
38
|
}
|
|
35
39
|
function parseArgs(argv) {
|
|
@@ -87,18 +91,45 @@ function parseArgs(argv) {
|
|
|
87
91
|
};
|
|
88
92
|
}
|
|
89
93
|
if (command === "check") {
|
|
90
|
-
const inputs =
|
|
91
|
-
|
|
94
|
+
const inputs = [];
|
|
95
|
+
let json = false;
|
|
96
|
+
let failUnder;
|
|
97
|
+
let noColor = false;
|
|
98
|
+
for (let i = 0; i < rest.length; i++) {
|
|
99
|
+
const arg = rest[i];
|
|
100
|
+
if (arg === "--json") {
|
|
101
|
+
json = true;
|
|
102
|
+
}
|
|
103
|
+
else if (arg === "--fail-under") {
|
|
104
|
+
i++;
|
|
105
|
+
const val = rest[i];
|
|
106
|
+
if (!val) {
|
|
107
|
+
logger.error("Missing value for --fail-under");
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
const num = Number(val);
|
|
111
|
+
if (Number.isNaN(num) || num < 0 || num > 100) {
|
|
112
|
+
logger.error("--fail-under must be a number between 0 and 100");
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
failUnder = num;
|
|
116
|
+
}
|
|
117
|
+
else if (arg === "--no-color") {
|
|
118
|
+
noColor = true;
|
|
119
|
+
}
|
|
120
|
+
else if (arg.startsWith("-")) {
|
|
92
121
|
logger.error(`Unknown option: ${arg}`);
|
|
93
122
|
process.exit(1);
|
|
94
123
|
}
|
|
95
|
-
|
|
96
|
-
|
|
124
|
+
else {
|
|
125
|
+
inputs.push(arg);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
97
128
|
if (inputs.length === 0) {
|
|
98
129
|
logger.error("No input files specified. Run 'zod-aot --help' for usage.");
|
|
99
130
|
process.exit(1);
|
|
100
131
|
}
|
|
101
|
-
return { kind: "check", options: { inputs } };
|
|
132
|
+
return { kind: "check", options: { inputs, json, failUnder, noColor } };
|
|
102
133
|
}
|
|
103
134
|
logger.error(`Unknown command: ${command}. Run 'zod-aot --help' for usage.`);
|
|
104
135
|
process.exit(1);
|
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":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,OAAO,MAAM,cAAc,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,OAAO,GAAY,OAAO,CAAC,oBAAoB,CAAyB,CAAC,OAAO,CAAC;AAUvF,SAAS,UAAU;IACjB,qDAAqD;IACrD,OAAO,CAAC,GAAG,CACT;WACO,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BjB,CAAC,IAAI,EAAE,CACL,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,MAA0B,CAAC;QAC/B,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,SAA8B,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;YAC9B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBACvC,CAAC,EAAE,CAAC;gBACJ,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;oBAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,GAAG,GAAG,CAAC;YACf,CAAC;iBAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC7C,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;iBAAM,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;gBACrC,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE;gBACP,MAAM;gBACN,MAAM;gBACN,KAAK;gBACL,SAAS;aACV;SACF,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,SAA6B,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAW,CAAC;YAC9B,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;iBAAM,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;gBAClC,CAAC,EAAE,CAAC;gBACJ,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;oBAC9C,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;oBAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,SAAS,GAAG,GAAG,CAAC;YAClB,CAAC;iBAAM,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,OAAO,mCAAmC,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,UAAU,EAAE,CAAC;YACb,MAAM;QACR,KAAK,SAAS;YACZ,qDAAqD;YACrD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBACzD,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBAC/D,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACrC,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YACzD,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACjC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/cli/logger.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
export interface Colors {
|
|
2
|
+
reset: string;
|
|
3
|
+
red: string;
|
|
4
|
+
green: string;
|
|
5
|
+
yellow: string;
|
|
6
|
+
cyan: string;
|
|
7
|
+
dim: string;
|
|
8
|
+
bold: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createColors(enabled: boolean): Colors;
|
|
1
11
|
export declare const logger: {
|
|
2
12
|
info(msg: string): void;
|
|
3
13
|
success(msg: string): void;
|
package/dist/cli/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAYD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAWrD;AASD,eAAO,MAAM,MAAM;cACP,MAAM,GAAG,IAAI;iBAGV,MAAM,GAAG,IAAI;cAGhB,MAAM,GAAG,IAAI;eAGZ,MAAM,GAAG,IAAI;aAGf,MAAM,GAAG,IAAI;CAGvB,CAAC"}
|
package/dist/cli/logger.js
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
1
1
|
import process from "node:process";
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
bold: isTTY ? "\x1b[1m" : "",
|
|
2
|
+
const NO_COLORS = {
|
|
3
|
+
reset: "",
|
|
4
|
+
red: "",
|
|
5
|
+
green: "",
|
|
6
|
+
yellow: "",
|
|
7
|
+
cyan: "",
|
|
8
|
+
dim: "",
|
|
9
|
+
bold: "",
|
|
11
10
|
};
|
|
11
|
+
export function createColors(enabled) {
|
|
12
|
+
if (!enabled)
|
|
13
|
+
return NO_COLORS;
|
|
14
|
+
return {
|
|
15
|
+
reset: "\x1b[0m",
|
|
16
|
+
red: "\x1b[31m",
|
|
17
|
+
green: "\x1b[32m",
|
|
18
|
+
yellow: "\x1b[33m",
|
|
19
|
+
cyan: "\x1b[36m",
|
|
20
|
+
dim: "\x1b[2m",
|
|
21
|
+
bold: "\x1b[1m",
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const colors = createColors(process.stdout.isTTY === true);
|
|
12
25
|
// biome-ignore lint/suspicious/noConsole: CLI output
|
|
13
26
|
const log = console.log;
|
|
14
27
|
// biome-ignore lint/suspicious/noConsole: CLI output
|
package/dist/cli/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/cli/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAYnC,MAAM,SAAS,GAAW;IACxB,KAAK,EAAE,EAAE;IACT,GAAG,EAAE,EAAE;IACP,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,EAAE;IACR,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,EAAE;CACT,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AAE3D,qDAAqD;AACrD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AACxB,qDAAqD;AACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;AAE/B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,CAAC,GAAW;QACd,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,GAAW;QACd,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,CAAC,GAAW;QACf,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,QAAQ,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,GAAG,CAAC,GAAW;QACb,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC"}
|
|
@@ -13,20 +13,13 @@ export interface CodeGenContext {
|
|
|
13
13
|
fnName: string;
|
|
14
14
|
}
|
|
15
15
|
export type GenerateValidationFn = (ir: SchemaIR, inputExpr: string, pathExpr: string, issuesVar: string, ctx: CodeGenContext) => string;
|
|
16
|
+
export type GenerateFastCheckFn = (ir: SchemaIR, inputExpr: string, ctx: CodeGenContext) => string | null;
|
|
16
17
|
export declare const EMAIL_REGEX_SOURCE: string;
|
|
17
18
|
/** Fallback UUID regex used when the extractor doesn't provide a pattern (e.g. in unit tests). */
|
|
18
19
|
export declare const UUID_REGEX_SOURCE = "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$";
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
* Allows writing generated code with readable indentation while producing minified output.
|
|
22
|
-
*/
|
|
23
|
-
export declare function emit(strings: TemplateStringsArray, ...values: (string | number | bigint | boolean)[]): string;
|
|
20
|
+
/** Enum values at or below this count use inline === checks instead of Set.has(). */
|
|
21
|
+
export declare const ENUM_INLINE_THRESHOLD = 3;
|
|
24
22
|
export declare function escapeString(s: string): string;
|
|
25
|
-
/**
|
|
26
|
-
* Extract the function name from a generated function definition string.
|
|
27
|
-
* e.g. "function safeParse_User(input){..." -> "safeParse_User"
|
|
28
|
-
*/
|
|
29
|
-
export declare function extractFunctionName(functionDef: string): string;
|
|
30
23
|
/**
|
|
31
24
|
* Sort comparator for CheckIR: cheapest/most-discriminating checks first.
|
|
32
25
|
* Used as `[...ir.checks].sort(checkPriority)`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,aAAa,EAAE,MAAM,CAAC;IACtB,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/codegen/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,aAAa,EAAE,MAAM,CAAC;IACtB,8GAA8G;IAC9G,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAAG,CAChC,EAAE,EAAE,QAAQ,EACZ,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,KAChB,MAAM,GAAG,IAAI,CAAC;AAGnB,eAAO,MAAM,kBAAkB,QAA+G,CAAC;AAE/I,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,2KAC4I,CAAC;AAE3K,qFAAqF;AACrF,eAAO,MAAM,qBAAqB,IAAI,CAAC;AA8BvC,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,EACxC,CAAC,EAAE,OAAO,GAAG,aAAa,GAAG,WAAW,GACvC,MAAM,CAER"}
|