zod-compiler 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -74
- package/dist/cli/commands/generate.d.ts +0 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +8 -1
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +4 -1
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/discovery.d.ts +1 -2
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +1 -1
- package/dist/discovery.js.map +1 -1
- package/dist/loader.d.ts +18 -6
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +91 -38
- package/dist/loader.js.map +1 -1
- package/dist/static-filter.d.ts +7 -0
- package/dist/static-filter.d.ts.map +1 -0
- package/dist/static-filter.js +396 -0
- package/dist/static-filter.js.map +1 -0
- package/dist/unplugin/index.d.ts.map +1 -1
- package/dist/unplugin/index.js +31 -4
- package/dist/unplugin/index.js.map +1 -1
- package/dist/unplugin/transform.d.ts.map +1 -1
- package/dist/unplugin/transform.js +9 -2
- package/dist/unplugin/transform.js.map +1 -1
- package/dist/unplugin/types.d.ts +13 -0
- package/dist/unplugin/types.d.ts.map +1 -1
- package/package.json +10 -10
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check whether a file's exports could include Zod schemas (or compile()
|
|
3
|
+
* results) without executing the file. `filename` selects the TS/JSX
|
|
4
|
+
* transforms; the file does not need to exist on disk.
|
|
5
|
+
*/
|
|
6
|
+
export declare function mayExportSchemas(code: string, filename: string): Promise<boolean>;
|
|
7
|
+
//# sourceMappingURL=static-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-filter.d.ts","sourceRoot":"","sources":["../src/static-filter.ts"],"names":[],"mappings":"AA2CA;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BvF"}
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { pathToFileURL } from "node:url";
|
|
3
|
+
import { parse } from "acorn";
|
|
4
|
+
/** Lazily created jiti instance used only for single-file transpilation. */
|
|
5
|
+
let transformerPromise;
|
|
6
|
+
function getTransformer() {
|
|
7
|
+
transformerPromise ??= import("jiti").then(({ createJiti }) => createJiti(pathToFileURL(path.resolve("__zod-compiler-static-filter__.mjs")).href));
|
|
8
|
+
return transformerPromise;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Check whether a file's exports could include Zod schemas (or compile()
|
|
12
|
+
* results) without executing the file. `filename` selects the TS/JSX
|
|
13
|
+
* transforms; the file does not need to exist on disk.
|
|
14
|
+
*/
|
|
15
|
+
export async function mayExportSchemas(code, filename) {
|
|
16
|
+
let transpiled;
|
|
17
|
+
try {
|
|
18
|
+
const jiti = await getTransformer();
|
|
19
|
+
transpiled = jiti.transform({
|
|
20
|
+
source: code,
|
|
21
|
+
filename,
|
|
22
|
+
ts: /\.[cm]?tsx?$/.test(filename),
|
|
23
|
+
jsx: /\.[cm]?[jt]sx$/.test(filename),
|
|
24
|
+
// async mode keeps top-level await and emits `await jitiImport(...)`
|
|
25
|
+
// instead of failing — statements stay top-level either way.
|
|
26
|
+
async: true,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
// jiti reports parse failures by embedding an error marker in the output
|
|
33
|
+
// instead of throwing. We can't analyze such files — keep them candidates
|
|
34
|
+
// so the real loader surfaces (or tolerates) the failure exactly as before.
|
|
35
|
+
if (transpiled.includes("__JITI_ERROR__"))
|
|
36
|
+
return true;
|
|
37
|
+
let program;
|
|
38
|
+
try {
|
|
39
|
+
// Module mode: the CJS output has no import/export statements, but may
|
|
40
|
+
// contain top-level await (async transform).
|
|
41
|
+
program = parse(transpiled, { ecmaVersion: "latest", sourceType: "module" });
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
return analyzeProgram(program);
|
|
47
|
+
}
|
|
48
|
+
function analyzeProgram(program) {
|
|
49
|
+
// Pass 1: top-level bindings for identifier resolution, plus the set of
|
|
50
|
+
// identifier nodes that are "expected" (declaration ids and exports-chain
|
|
51
|
+
// participants). Pass 2 counts every OTHER reference: a name referenced
|
|
52
|
+
// outside its declaration/export may be mutated after creation
|
|
53
|
+
// (defineProperty, member writes, helper calls), so object/array values
|
|
54
|
+
// it names cannot be proven schema-free.
|
|
55
|
+
const safeDecls = new Set();
|
|
56
|
+
const varInits = new Map();
|
|
57
|
+
const expectedNodes = new Set();
|
|
58
|
+
function recordChainNodes(expr) {
|
|
59
|
+
let node = expr;
|
|
60
|
+
let hasExportTarget = false;
|
|
61
|
+
while (node.type === "AssignmentExpression" && node.operator === "=") {
|
|
62
|
+
if (node.left.type === "Identifier") {
|
|
63
|
+
// Assignment LHS identifiers rebind — they never read the value.
|
|
64
|
+
expectedNodes.add(node.left);
|
|
65
|
+
}
|
|
66
|
+
else if (node.left.type === "MemberExpression" && mentionsExports(node.left)) {
|
|
67
|
+
hasExportTarget = true;
|
|
68
|
+
}
|
|
69
|
+
node = node.right;
|
|
70
|
+
}
|
|
71
|
+
// The bare-identifier value of an export chain (`exports.f = f`) is the
|
|
72
|
+
// export itself; in a plain local chain (`alias = obj`) it is a real
|
|
73
|
+
// aliasing reference and must count toward taint.
|
|
74
|
+
if (hasExportTarget && node.type === "Identifier")
|
|
75
|
+
expectedNodes.add(node);
|
|
76
|
+
}
|
|
77
|
+
for (const stmt of program.body) {
|
|
78
|
+
if (stmt.type === "FunctionDeclaration" || stmt.type === "ClassDeclaration") {
|
|
79
|
+
safeDecls.add(stmt.id.name);
|
|
80
|
+
expectedNodes.add(stmt.id);
|
|
81
|
+
}
|
|
82
|
+
else if (stmt.type === "VariableDeclaration") {
|
|
83
|
+
for (const decl of stmt.declarations) {
|
|
84
|
+
if (decl.id.type === "Identifier") {
|
|
85
|
+
expectedNodes.add(decl.id);
|
|
86
|
+
// The init may be an `exports.X = value` chain — resolution should
|
|
87
|
+
// see the final value expression.
|
|
88
|
+
varInits.set(decl.id.name, decl.init ? unwrapAssignmentChain(decl.init).value : null);
|
|
89
|
+
}
|
|
90
|
+
if (decl.init)
|
|
91
|
+
recordChainNodes(decl.init);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else if (stmt.type === "ExpressionStatement") {
|
|
95
|
+
recordChainNodes(stmt.expression);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const referencedNames = collectReferencedNames(program, expectedNodes);
|
|
99
|
+
function resolveIdentifier(name, defaultish, seen) {
|
|
100
|
+
if (seen.has(name))
|
|
101
|
+
return "candidate";
|
|
102
|
+
seen.add(name);
|
|
103
|
+
if (safeDecls.has(name))
|
|
104
|
+
return "safe";
|
|
105
|
+
const init = varInits.get(name);
|
|
106
|
+
if (init === undefined || init === null)
|
|
107
|
+
return "candidate";
|
|
108
|
+
return classifyValue(init, defaultish, seen, [name]);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Could this expression evaluate to a Zod schema (an object carrying
|
|
112
|
+
* `_zod.def` or the compile() marker)? `bindingNames` are the local
|
|
113
|
+
* aliases of the value — a mutable container (object/array) is only safe
|
|
114
|
+
* when none of its aliases are referenced elsewhere in the file.
|
|
115
|
+
*/
|
|
116
|
+
function classifyValue(node, defaultish, seen, bindingNames) {
|
|
117
|
+
switch (node.type) {
|
|
118
|
+
case "Literal":
|
|
119
|
+
case "TemplateLiteral":
|
|
120
|
+
case "ArrowFunctionExpression":
|
|
121
|
+
case "FunctionExpression":
|
|
122
|
+
case "ClassExpression":
|
|
123
|
+
case "UnaryExpression":
|
|
124
|
+
case "UpdateExpression":
|
|
125
|
+
case "BinaryExpression":
|
|
126
|
+
return "safe";
|
|
127
|
+
case "ObjectExpression":
|
|
128
|
+
case "ArrayExpression":
|
|
129
|
+
// Discovery unwraps the properties of a default export object (and
|
|
130
|
+
// arrays are objects), so containers are candidates there. Named
|
|
131
|
+
// export containers are never unwrapped — but a container whose
|
|
132
|
+
// alias is referenced elsewhere may be mutated into a schema shape.
|
|
133
|
+
if (defaultish)
|
|
134
|
+
return "candidate";
|
|
135
|
+
return bindingNames.some((n) => referencedNames.has(n)) ? "candidate" : "safe";
|
|
136
|
+
case "Identifier":
|
|
137
|
+
return resolveIdentifier(node.name, defaultish, seen);
|
|
138
|
+
case "ConditionalExpression":
|
|
139
|
+
return classifyValue(node.consequent, defaultish, seen, bindingNames) === "safe" &&
|
|
140
|
+
classifyValue(node.alternate, defaultish, seen, bindingNames) === "safe"
|
|
141
|
+
? "safe"
|
|
142
|
+
: "candidate";
|
|
143
|
+
case "LogicalExpression":
|
|
144
|
+
return classifyValue(node.left, defaultish, seen, bindingNames) === "safe" &&
|
|
145
|
+
classifyValue(node.right, defaultish, seen, bindingNames) === "safe"
|
|
146
|
+
? "safe"
|
|
147
|
+
: "candidate";
|
|
148
|
+
case "SequenceExpression": {
|
|
149
|
+
const last = node.expressions[node.expressions.length - 1];
|
|
150
|
+
return last ? classifyValue(last, defaultish, seen, bindingNames) : "candidate";
|
|
151
|
+
}
|
|
152
|
+
case "AssignmentExpression":
|
|
153
|
+
return classifyValue(unwrapAssignmentChain(node).value, defaultish, seen, bindingNames);
|
|
154
|
+
default:
|
|
155
|
+
// CallExpression, NewExpression, MemberExpression, AwaitExpression, ...
|
|
156
|
+
return "candidate";
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/** Process one assignment chain: classify the value for each export target. */
|
|
160
|
+
function processAssignment(expr, declaredName) {
|
|
161
|
+
const { targets, value } = unwrapAssignmentChain(expr);
|
|
162
|
+
const bindingNames = declaredName ? [declaredName] : [];
|
|
163
|
+
const exportTargets = [];
|
|
164
|
+
for (const target of targets) {
|
|
165
|
+
const exportTarget = exportTargetOf(target);
|
|
166
|
+
if (exportTarget.kind === "unknown")
|
|
167
|
+
return "candidate";
|
|
168
|
+
if (exportTarget.kind === "local")
|
|
169
|
+
bindingNames.push(exportTarget.name);
|
|
170
|
+
exportTargets.push(exportTarget);
|
|
171
|
+
}
|
|
172
|
+
for (const exportTarget of exportTargets) {
|
|
173
|
+
if (exportTarget.kind === "named") {
|
|
174
|
+
if (classifyValue(value, false, new Set(), bindingNames) === "candidate")
|
|
175
|
+
return "candidate";
|
|
176
|
+
}
|
|
177
|
+
else if (exportTarget.kind === "default") {
|
|
178
|
+
if (classifyValue(value, true, new Set(), bindingNames) === "candidate")
|
|
179
|
+
return "candidate";
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Catch-all: the value itself may reference exports in a shape we did
|
|
183
|
+
// not positively classify (e.g. `exports.a = fn(exports.b)`).
|
|
184
|
+
return mentionsExports(value) ? "candidate" : "safe";
|
|
185
|
+
}
|
|
186
|
+
function processVariableDeclaration(stmt) {
|
|
187
|
+
for (const decl of stmt.declarations) {
|
|
188
|
+
if (!decl.init)
|
|
189
|
+
continue;
|
|
190
|
+
if (decl.id.type === "Identifier") {
|
|
191
|
+
if (processAssignment(decl.init, decl.id.name) === "candidate")
|
|
192
|
+
return "candidate";
|
|
193
|
+
}
|
|
194
|
+
else if (mentionsExports(decl.init)) {
|
|
195
|
+
// Destructuring declarators don't export by themselves (babel emits
|
|
196
|
+
// separate `exports.x = x` statements), but be paranoid about any
|
|
197
|
+
// exports reference hiding inside.
|
|
198
|
+
return "candidate";
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return "safe";
|
|
202
|
+
}
|
|
203
|
+
function processStatement(stmt) {
|
|
204
|
+
switch (stmt.type) {
|
|
205
|
+
case "FunctionDeclaration":
|
|
206
|
+
case "ClassDeclaration":
|
|
207
|
+
// Bodies that touch exports (hand-written CJS patterns) are opaque.
|
|
208
|
+
return mentionsExports(stmt) ? "candidate" : "safe";
|
|
209
|
+
case "VariableDeclaration":
|
|
210
|
+
return processVariableDeclaration(stmt);
|
|
211
|
+
case "ExpressionStatement":
|
|
212
|
+
return processExpression(stmt.expression);
|
|
213
|
+
case "EmptyStatement":
|
|
214
|
+
return "safe";
|
|
215
|
+
default:
|
|
216
|
+
// if/try/for/... — babel never emits exports there for ESM input,
|
|
217
|
+
// but hand-written CJS might (`if (x) module.exports = ...`).
|
|
218
|
+
return mentionsExports(stmt) ? "candidate" : "safe";
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function processExpression(expr) {
|
|
222
|
+
switch (expr.type) {
|
|
223
|
+
case "Literal":
|
|
224
|
+
// Directive prologue ("use strict")
|
|
225
|
+
return "safe";
|
|
226
|
+
case "AssignmentExpression":
|
|
227
|
+
return processAssignment(expr);
|
|
228
|
+
case "SequenceExpression": {
|
|
229
|
+
for (const sub of expr.expressions) {
|
|
230
|
+
if (processExpression(sub) === "candidate")
|
|
231
|
+
return "candidate";
|
|
232
|
+
}
|
|
233
|
+
return "safe";
|
|
234
|
+
}
|
|
235
|
+
case "CallExpression":
|
|
236
|
+
if (isEsModuleMarker(expr))
|
|
237
|
+
return "safe";
|
|
238
|
+
// Other exports-touching calls: re-export getters
|
|
239
|
+
// (Object.defineProperty), `export *` loops, helpers.
|
|
240
|
+
return mentionsExports(expr) ? "candidate" : "safe";
|
|
241
|
+
default:
|
|
242
|
+
return mentionsExports(expr) ? "candidate" : "safe";
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
for (const stmt of program.body) {
|
|
246
|
+
// The CJS output of jiti's transform contains no module declarations,
|
|
247
|
+
// but if one ever appears, treat the file as a candidate.
|
|
248
|
+
if (!isStatement(stmt))
|
|
249
|
+
return true;
|
|
250
|
+
if (processStatement(stmt) === "candidate")
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
function isStatement(node) {
|
|
256
|
+
return !node.type.startsWith("Import") && !node.type.startsWith("Export");
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Unwrap `a = b = c = value` into its assignment targets and final value.
|
|
260
|
+
* Non-assignment expressions return zero targets and themselves as value.
|
|
261
|
+
*/
|
|
262
|
+
function unwrapAssignmentChain(expr) {
|
|
263
|
+
const targets = [];
|
|
264
|
+
let value = expr;
|
|
265
|
+
while (value.type === "AssignmentExpression" && value.operator === "=") {
|
|
266
|
+
targets.push(value.left);
|
|
267
|
+
value = value.right;
|
|
268
|
+
}
|
|
269
|
+
return { targets, value };
|
|
270
|
+
}
|
|
271
|
+
/** Classify an assignment target by what discovery would see. */
|
|
272
|
+
function exportTargetOf(target) {
|
|
273
|
+
if (target.type === "Identifier") {
|
|
274
|
+
if (target.name === "exports" || target.name === "module")
|
|
275
|
+
return { kind: "unknown" };
|
|
276
|
+
return { kind: "local", name: target.name };
|
|
277
|
+
}
|
|
278
|
+
if (target.type !== "MemberExpression") {
|
|
279
|
+
return mentionsExports(target) ? { kind: "unknown" } : { kind: "ignored" };
|
|
280
|
+
}
|
|
281
|
+
const propName = !target.computed && target.property.type === "Identifier"
|
|
282
|
+
? target.property.name
|
|
283
|
+
: target.computed && target.property.type === "Literal"
|
|
284
|
+
? String(target.property.value)
|
|
285
|
+
: null;
|
|
286
|
+
// exports.X = ...
|
|
287
|
+
if (target.object.type === "Identifier" && target.object.name === "exports") {
|
|
288
|
+
if (propName === null)
|
|
289
|
+
return { kind: "unknown" };
|
|
290
|
+
return propName === "default" ? { kind: "default" } : { kind: "named", name: propName };
|
|
291
|
+
}
|
|
292
|
+
// module.exports = ... behaves like a default export after interop:
|
|
293
|
+
// discovery unwraps its properties.
|
|
294
|
+
if (target.object.type === "Identifier" && target.object.name === "module") {
|
|
295
|
+
return propName === "exports" ? { kind: "default" } : { kind: "unknown" };
|
|
296
|
+
}
|
|
297
|
+
// module.exports.X = ...
|
|
298
|
+
if (target.object.type === "MemberExpression" &&
|
|
299
|
+
target.object.object.type === "Identifier" &&
|
|
300
|
+
target.object.object.name === "module" &&
|
|
301
|
+
!target.object.computed &&
|
|
302
|
+
target.object.property.type === "Identifier" &&
|
|
303
|
+
target.object.property.name === "exports") {
|
|
304
|
+
if (propName === null)
|
|
305
|
+
return { kind: "unknown" };
|
|
306
|
+
return propName === "default" ? { kind: "default" } : { kind: "named", name: propName };
|
|
307
|
+
}
|
|
308
|
+
return mentionsExports(target) ? { kind: "unknown" } : { kind: "ignored" };
|
|
309
|
+
}
|
|
310
|
+
/** Object.defineProperty(exports, "__esModule", { value: true }) */
|
|
311
|
+
function isEsModuleMarker(expr) {
|
|
312
|
+
return (expr.type === "CallExpression" &&
|
|
313
|
+
expr.callee.type === "MemberExpression" &&
|
|
314
|
+
expr.callee.object.type === "Identifier" &&
|
|
315
|
+
expr.callee.object.name === "Object" &&
|
|
316
|
+
!expr.callee.computed &&
|
|
317
|
+
expr.callee.property.type === "Identifier" &&
|
|
318
|
+
expr.callee.property.name === "defineProperty" &&
|
|
319
|
+
expr.arguments[0]?.type === "Identifier" &&
|
|
320
|
+
expr.arguments[0].name === "exports" &&
|
|
321
|
+
expr.arguments[1]?.type === "Literal" &&
|
|
322
|
+
expr.arguments[1].value === "__esModule");
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Collect every identifier name used in a reference position, excluding the
|
|
326
|
+
* `expected` nodes (declaration ids and exports-chain participants).
|
|
327
|
+
* Non-reference positions — non-computed member properties, non-computed
|
|
328
|
+
* object/class keys, labels — are skipped. Over-counting (e.g. shadowed
|
|
329
|
+
* names in nested scopes, function params) only makes the filter more
|
|
330
|
+
* conservative, never less safe.
|
|
331
|
+
*/
|
|
332
|
+
function collectReferencedNames(program, expected) {
|
|
333
|
+
const names = new Set();
|
|
334
|
+
const stack = [program];
|
|
335
|
+
while (stack.length > 0) {
|
|
336
|
+
const node = stack.pop();
|
|
337
|
+
if (Array.isArray(node)) {
|
|
338
|
+
for (const item of node)
|
|
339
|
+
stack.push(item);
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
if (typeof node !== "object" || node === null)
|
|
343
|
+
continue;
|
|
344
|
+
const record = node;
|
|
345
|
+
const type = record["type"];
|
|
346
|
+
if (typeof type !== "string")
|
|
347
|
+
continue;
|
|
348
|
+
if (type === "Identifier") {
|
|
349
|
+
if (!expected.has(node))
|
|
350
|
+
names.add(record["name"]);
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
for (const [key, value] of Object.entries(record)) {
|
|
354
|
+
if (typeof value !== "object" || value === null)
|
|
355
|
+
continue;
|
|
356
|
+
// Skip non-reference identifier positions.
|
|
357
|
+
if (key === "property" && type === "MemberExpression" && record["computed"] !== true)
|
|
358
|
+
continue;
|
|
359
|
+
if (key === "key" &&
|
|
360
|
+
(type === "Property" || type === "PropertyDefinition" || type === "MethodDefinition") &&
|
|
361
|
+
record["computed"] !== true)
|
|
362
|
+
continue;
|
|
363
|
+
if (key === "label")
|
|
364
|
+
continue;
|
|
365
|
+
stack.push(value);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return names;
|
|
369
|
+
}
|
|
370
|
+
/** Deep-walk an acorn node for any reference to `exports` or `module`. */
|
|
371
|
+
function mentionsExports(root) {
|
|
372
|
+
const stack = [root];
|
|
373
|
+
while (stack.length > 0) {
|
|
374
|
+
const node = stack.pop();
|
|
375
|
+
if (Array.isArray(node)) {
|
|
376
|
+
for (const item of node)
|
|
377
|
+
stack.push(item);
|
|
378
|
+
continue;
|
|
379
|
+
}
|
|
380
|
+
if (typeof node !== "object" || node === null)
|
|
381
|
+
continue;
|
|
382
|
+
const record = node;
|
|
383
|
+
if (typeof record["type"] === "string") {
|
|
384
|
+
if (record["type"] === "Identifier" &&
|
|
385
|
+
(record["name"] === "exports" || record["name"] === "module")) {
|
|
386
|
+
return true;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
for (const value of Object.values(record)) {
|
|
390
|
+
if (typeof value === "object" && value !== null)
|
|
391
|
+
stack.push(value);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return false;
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=static-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-filter.js","sourceRoot":"","sources":["../src/static-filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/unplugin/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/unplugin/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAiC3D,eAAO,MAAM,QAAQ,oFAoFpB,CAAC;AAEF,YAAY,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/unplugin/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createUnplugin } from "unplugin";
|
|
2
|
+
import { invalidateModuleCache } from "#src/loader.js";
|
|
2
3
|
import { log, shouldTransform, transformCode } from "./transform.js";
|
|
3
4
|
import { BuildStatsAccumulator } from "./types.js";
|
|
4
5
|
import { loadVirtual, RESOLVED_RUNTIME_ID, resolveVirtualId, VIRTUAL_RUNTIME_ID, WP_RUNTIME_ID, } from "./virtual.js";
|
|
@@ -20,15 +21,25 @@ const VIRTUAL_MODULE_FRAMEWORKS = new Set([
|
|
|
20
21
|
]);
|
|
21
22
|
/** Frameworks that need the bare-specifier runtime ID instead of `virtual:`. */
|
|
22
23
|
const WP_FRAMEWORKS = new Set(["rspack", "webpack"]);
|
|
24
|
+
/** File extensions whose changes can affect a schema module graph. */
|
|
25
|
+
const SOURCE_LIKE = /\.([cm]?[jt]sx?|json)$/;
|
|
23
26
|
export const unplugin = createUnplugin((options, meta) => {
|
|
24
27
|
const stats = new BuildStatsAccumulator();
|
|
28
|
+
// Transform results keyed by id, validated by content: bundlers re-run
|
|
29
|
+
// transform for the same file (multiple environments, watch rebuilds) —
|
|
30
|
+
// identical content returns the cached result, changed content recomputes.
|
|
25
31
|
const cache = new Map();
|
|
26
32
|
const verbose = options?.verbose === true;
|
|
27
33
|
const mode = VIRTUAL_MODULE_FRAMEWORKS.has(meta.framework) ? "lean" : "inline";
|
|
28
34
|
const runtimeId = WP_FRAMEWORKS.has(meta.framework) ? WP_RUNTIME_ID : VIRTUAL_RUNTIME_ID;
|
|
35
|
+
const apply = options?.apply ?? "build";
|
|
29
36
|
return {
|
|
30
37
|
name: "zod-compiler",
|
|
31
38
|
enforce: "pre",
|
|
39
|
+
// Vite only: skip dev server / vitest by default so they don't pay
|
|
40
|
+
// build-time AOT cost — compile() falls back to Zod at dev time.
|
|
41
|
+
// Other bundlers ignore this field.
|
|
42
|
+
vite: apply === "all" ? {} : { apply },
|
|
32
43
|
resolveId(id) {
|
|
33
44
|
return resolveVirtualId(id);
|
|
34
45
|
},
|
|
@@ -43,8 +54,14 @@ export const unplugin = createUnplugin((options, meta) => {
|
|
|
43
54
|
},
|
|
44
55
|
async transform(code, id) {
|
|
45
56
|
const cached = cache.get(id);
|
|
46
|
-
if (cached)
|
|
47
|
-
return { code: cached, map: null };
|
|
57
|
+
if (cached && cached.code === code) {
|
|
58
|
+
return cached.result === null ? undefined : { code: cached.result, map: null };
|
|
59
|
+
}
|
|
60
|
+
if (cached) {
|
|
61
|
+
// Content changed but no watchChange fired (bundlers without the
|
|
62
|
+
// hook): drop stale module executions before re-discovering.
|
|
63
|
+
invalidateModuleCache();
|
|
64
|
+
}
|
|
48
65
|
const result = await transformCode(code, id, {
|
|
49
66
|
mode,
|
|
50
67
|
runtimeId,
|
|
@@ -55,11 +72,22 @@ export const unplugin = createUnplugin((options, meta) => {
|
|
|
55
72
|
stats.add(s);
|
|
56
73
|
},
|
|
57
74
|
});
|
|
75
|
+
cache.set(id, { code, result });
|
|
58
76
|
if (!result)
|
|
59
77
|
return;
|
|
60
|
-
cache.set(id, result);
|
|
61
78
|
return { code: result, map: null };
|
|
62
79
|
},
|
|
80
|
+
watchChange(id) {
|
|
81
|
+
if (!SOURCE_LIKE.test(id))
|
|
82
|
+
return;
|
|
83
|
+
if (id.includes("node_modules"))
|
|
84
|
+
return;
|
|
85
|
+
// The changed file may be a dependency of any schema file, so both
|
|
86
|
+
// the module cache (executions) and the transform result cache are
|
|
87
|
+
// invalidated wholesale. node_modules stay warm in the loader.
|
|
88
|
+
invalidateModuleCache();
|
|
89
|
+
cache.clear();
|
|
90
|
+
},
|
|
63
91
|
buildEnd() {
|
|
64
92
|
if (!verbose)
|
|
65
93
|
return;
|
|
@@ -68,7 +96,6 @@ export const unplugin = createUnplugin((options, meta) => {
|
|
|
68
96
|
log(`Build summary: ${stats.optimized}/${stats.schemas} schemas optimized across ${stats.files} file(s)` +
|
|
69
97
|
(stats.failed > 0 ? `, ${stats.failed} failed` : ""));
|
|
70
98
|
stats.reset();
|
|
71
|
-
cache.clear();
|
|
72
99
|
},
|
|
73
100
|
};
|
|
74
101
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/unplugin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA4B,MAAM,UAAU,CAAC;AAEpE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,MAAM;IACN,QAAQ;IACR,UAAU;IACV,SAAS;IACT,MAAM;IACN,KAAK;IACL,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AAEH,gFAAgF;AAChF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CACpC,CAAC,OAA6C,EAAE,IAAyB,EAAE,EAAE;IAC3E,MAAM,KAAK,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/unplugin/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/unplugin/transform.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/unplugin/transform.ts"],"names":[],"mappings":"AAUA,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAM7E;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAevF;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGrC;AAOD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwHxB;AA8DD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,EAAE,EAC7B,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC5C,MAAM,CA2BR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUrE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,EAAE,EAC7B,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAC5C,MAAM,CAuBR;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAaxD"}
|
|
@@ -3,6 +3,7 @@ import picomatch from "picomatch";
|
|
|
3
3
|
import { FIN_DECL, generateIIFE, MK_VALIDATOR_DECL, ZOD_CONFIG_IMPORT, ZOD_MSG_DECLARATION, } from "#src/core/iife.js";
|
|
4
4
|
import { aggregateUsedHelpers, compileSchemas, } from "#src/core/pipeline.js";
|
|
5
5
|
import { discoverSchemas } from "#src/discovery.js";
|
|
6
|
+
import { mayExportSchemas } from "#src/static-filter.js";
|
|
6
7
|
import { VIRTUAL_RUNTIME_ID } from "./virtual.js";
|
|
7
8
|
/** Matches a runtime (non-type-only) import from "zod". */
|
|
8
9
|
const HAS_RUNTIME_ZOD_IMPORT = /import\s+(?!type\s)[^;]*from\s+["']zod["']/;
|
|
@@ -57,10 +58,16 @@ export async function transformCode(code, id, options) {
|
|
|
57
58
|
if (!code.includes("zod-compiler") || !/\bcompile\b/.test(code))
|
|
58
59
|
return null;
|
|
59
60
|
}
|
|
60
|
-
//
|
|
61
|
+
// Static pre-filter: skip files whose exports provably cannot be schemas
|
|
62
|
+
// (functions, components, constants, type-only modules) without executing
|
|
63
|
+
// them. Conservative — anything ambiguous stays a candidate.
|
|
64
|
+
if (!(await mayExportSchemas(code, id)))
|
|
65
|
+
return null;
|
|
66
|
+
// Discover schemas by executing the file. Module executions are cached in
|
|
67
|
+
// the shared loader; watch/HMR changes invalidate via invalidateModuleCache().
|
|
61
68
|
let schemas;
|
|
62
69
|
try {
|
|
63
|
-
schemas = await discoverSchemas(id, {
|
|
70
|
+
schemas = await discoverSchemas(id, { autoDiscover });
|
|
64
71
|
}
|
|
65
72
|
catch (e) {
|
|
66
73
|
const msg = e instanceof Error ? e.message : String(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/unplugin/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EAEpB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/unplugin/transform.ts"],"names":[],"mappings":"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"}
|