zod-compiler 1.23.0 → 1.23.2
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 +9 -6
- package/dist/cli/commands/check.d.ts +10 -7
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +125 -148
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +22 -19
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +102 -133
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/watch.d.ts +17 -15
- package/dist/cli/commands/watch.d.ts.map +1 -1
- package/dist/cli/commands/watch.js +126 -154
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/emitter.d.ts +19 -16
- package/dist/cli/emitter.d.ts.map +1 -1
- package/dist/cli/emitter.js +55 -71
- package/dist/cli/emitter.js.map +1 -1
- package/dist/cli/errors.d.ts +4 -1
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/errors.js +6 -2
- package/dist/cli/errors.js.map +1 -1
- package/dist/cli/index.d.ts +1 -3
- package/dist/cli/index.js +147 -160
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/logger.d.ts +18 -15
- package/dist/cli/logger.d.ts.map +1 -1
- package/dist/cli/logger.js +38 -37
- package/dist/cli/logger.js.map +1 -1
- package/dist/core/codegen/build-path.d.ts +7 -41
- package/dist/core/codegen/build-path.d.ts.map +1 -1
- package/dist/core/codegen/build-path.js +481 -570
- package/dist/core/codegen/build-path.js.map +1 -1
- package/dist/core/codegen/context.d.ts +256 -253
- package/dist/core/codegen/context.d.ts.map +1 -1
- package/dist/core/codegen/context.js +363 -437
- package/dist/core/codegen/context.js.map +1 -1
- package/dist/core/codegen/dedupe.d.ts +22 -56
- package/dist/core/codegen/dedupe.d.ts.map +1 -1
- package/dist/core/codegen/dedupe.js +150 -242
- package/dist/core/codegen/dedupe.js.map +1 -1
- package/dist/core/codegen/emit-issue.d.ts +44 -68
- package/dist/core/codegen/emit-issue.d.ts.map +1 -1
- package/dist/core/codegen/emit-issue.js +76 -108
- package/dist/core/codegen/emit-issue.js.map +1 -1
- package/dist/core/codegen/emit.d.ts +4 -1
- package/dist/core/codegen/emit.d.ts.map +1 -1
- package/dist/core/codegen/emit.js +16 -13
- package/dist/core/codegen/emit.js.map +1 -1
- package/dist/core/codegen/fast-path.d.ts +7 -12
- package/dist/core/codegen/fast-path.d.ts.map +1 -1
- package/dist/core/codegen/fast-path.js +116 -145
- package/dist/core/codegen/fast-path.js.map +1 -1
- package/dist/core/codegen/fast-size.d.ts +12 -26
- package/dist/core/codegen/fast-size.d.ts.map +1 -1
- package/dist/core/codegen/fast-size.js +169 -244
- package/dist/core/codegen/fast-size.js.map +1 -1
- package/dist/core/codegen/index.d.ts +25 -23
- package/dist/core/codegen/index.d.ts.map +1 -1
- package/dist/core/codegen/index.js +239 -405
- package/dist/core/codegen/index.js.map +1 -1
- package/dist/core/codegen/issue-decls.d.ts +15 -12
- package/dist/core/codegen/issue-decls.d.ts.map +1 -1
- package/dist/core/codegen/issue-decls.js +131 -162
- package/dist/core/codegen/issue-decls.js.map +1 -1
- package/dist/core/codegen/regex-unroll.d.ts +4 -1
- package/dist/core/codegen/regex-unroll.d.ts.map +1 -1
- package/dist/core/codegen/regex-unroll.js +173 -197
- package/dist/core/codegen/regex-unroll.js.map +1 -1
- package/dist/core/codegen/schemas/any.d.ts +7 -4
- package/dist/core/codegen/schemas/any.d.ts.map +1 -1
- package/dist/core/codegen/schemas/any.js +8 -4
- package/dist/core/codegen/schemas/any.js.map +1 -1
- package/dist/core/codegen/schemas/array.d.ts +8 -5
- package/dist/core/codegen/schemas/array.d.ts.map +1 -1
- package/dist/core/codegen/schemas/array.js +77 -95
- package/dist/core/codegen/schemas/array.js.map +1 -1
- package/dist/core/codegen/schemas/bigint.d.ts +7 -4
- package/dist/core/codegen/schemas/bigint.d.ts.map +1 -1
- package/dist/core/codegen/schemas/bigint.js +44 -56
- package/dist/core/codegen/schemas/bigint.js.map +1 -1
- package/dist/core/codegen/schemas/boolean.d.ts +7 -4
- package/dist/core/codegen/schemas/boolean.d.ts.map +1 -1
- package/dist/core/codegen/schemas/boolean.js +12 -11
- package/dist/core/codegen/schemas/boolean.js.map +1 -1
- package/dist/core/codegen/schemas/catch.d.ts +8 -5
- package/dist/core/codegen/schemas/catch.d.ts.map +1 -1
- package/dist/core/codegen/schemas/catch.js +23 -23
- package/dist/core/codegen/schemas/catch.js.map +1 -1
- package/dist/core/codegen/schemas/date.d.ts +7 -4
- package/dist/core/codegen/schemas/date.d.ts.map +1 -1
- package/dist/core/codegen/schemas/date.js +49 -68
- package/dist/core/codegen/schemas/date.js.map +1 -1
- package/dist/core/codegen/schemas/default.d.ts +9 -6
- package/dist/core/codegen/schemas/default.d.ts.map +1 -1
- package/dist/core/codegen/schemas/default.js +29 -27
- package/dist/core/codegen/schemas/default.js.map +1 -1
- package/dist/core/codegen/schemas/discriminated-union.d.ts +12 -10
- package/dist/core/codegen/schemas/discriminated-union.d.ts.map +1 -1
- package/dist/core/codegen/schemas/discriminated-union.js +153 -178
- package/dist/core/codegen/schemas/discriminated-union.js.map +1 -1
- package/dist/core/codegen/schemas/effect.d.ts +9 -6
- package/dist/core/codegen/schemas/effect.d.ts.map +1 -1
- package/dist/core/codegen/schemas/effect.js +54 -67
- package/dist/core/codegen/schemas/effect.js.map +1 -1
- package/dist/core/codegen/schemas/enum.d.ts +7 -4
- package/dist/core/codegen/schemas/enum.d.ts.map +1 -1
- package/dist/core/codegen/schemas/enum.js +15 -21
- package/dist/core/codegen/schemas/enum.js.map +1 -1
- package/dist/core/codegen/schemas/fallback.d.ts +6 -3
- package/dist/core/codegen/schemas/fallback.d.ts.map +1 -1
- package/dist/core/codegen/schemas/fallback.js +14 -13
- package/dist/core/codegen/schemas/fallback.js.map +1 -1
- package/dist/core/codegen/schemas/file.d.ts +7 -4
- package/dist/core/codegen/schemas/file.d.ts.map +1 -1
- package/dist/core/codegen/schemas/file.js +51 -57
- package/dist/core/codegen/schemas/file.js.map +1 -1
- package/dist/core/codegen/schemas/intersection.d.ts +8 -5
- package/dist/core/codegen/schemas/intersection.d.ts.map +1 -1
- package/dist/core/codegen/schemas/intersection.js +16 -13
- package/dist/core/codegen/schemas/intersection.js.map +1 -1
- package/dist/core/codegen/schemas/literal.d.ts +7 -4
- package/dist/core/codegen/schemas/literal.d.ts.map +1 -1
- package/dist/core/codegen/schemas/literal.js +20 -23
- package/dist/core/codegen/schemas/literal.js.map +1 -1
- package/dist/core/codegen/schemas/map.d.ts +8 -5
- package/dist/core/codegen/schemas/map.d.ts.map +1 -1
- package/dist/core/codegen/schemas/map.js +61 -67
- package/dist/core/codegen/schemas/map.js.map +1 -1
- package/dist/core/codegen/schemas/nan.d.ts +7 -4
- package/dist/core/codegen/schemas/nan.d.ts.map +1 -1
- package/dist/core/codegen/schemas/nan.js +8 -4
- package/dist/core/codegen/schemas/nan.js.map +1 -1
- package/dist/core/codegen/schemas/never.d.ts +7 -4
- package/dist/core/codegen/schemas/never.d.ts.map +1 -1
- package/dist/core/codegen/schemas/never.js +8 -4
- package/dist/core/codegen/schemas/never.js.map +1 -1
- package/dist/core/codegen/schemas/null.d.ts +7 -4
- package/dist/core/codegen/schemas/null.d.ts.map +1 -1
- package/dist/core/codegen/schemas/null.js +8 -4
- package/dist/core/codegen/schemas/null.js.map +1 -1
- package/dist/core/codegen/schemas/nullable.d.ts +8 -5
- package/dist/core/codegen/schemas/nullable.d.ts.map +1 -1
- package/dist/core/codegen/schemas/nullable.js +8 -5
- package/dist/core/codegen/schemas/nullable.js.map +1 -1
- package/dist/core/codegen/schemas/number.d.ts +7 -4
- package/dist/core/codegen/schemas/number.d.ts.map +1 -1
- package/dist/core/codegen/schemas/number.js +120 -176
- package/dist/core/codegen/schemas/number.js.map +1 -1
- package/dist/core/codegen/schemas/object.d.ts +8 -5
- package/dist/core/codegen/schemas/object.d.ts.map +1 -1
- package/dist/core/codegen/schemas/object.js +144 -231
- package/dist/core/codegen/schemas/object.js.map +1 -1
- package/dist/core/codegen/schemas/optional.d.ts +9 -6
- package/dist/core/codegen/schemas/optional.d.ts.map +1 -1
- package/dist/core/codegen/schemas/optional.js +23 -31
- package/dist/core/codegen/schemas/optional.js.map +1 -1
- package/dist/core/codegen/schemas/pipe.d.ts +8 -5
- package/dist/core/codegen/schemas/pipe.d.ts.map +1 -1
- package/dist/core/codegen/schemas/pipe.js +20 -27
- package/dist/core/codegen/schemas/pipe.js.map +1 -1
- package/dist/core/codegen/schemas/readonly.d.ts +8 -5
- package/dist/core/codegen/schemas/readonly.d.ts.map +1 -1
- package/dist/core/codegen/schemas/readonly.js +8 -5
- package/dist/core/codegen/schemas/readonly.js.map +1 -1
- package/dist/core/codegen/schemas/record.d.ts +8 -5
- package/dist/core/codegen/schemas/record.d.ts.map +1 -1
- package/dist/core/codegen/schemas/record.js +52 -65
- package/dist/core/codegen/schemas/record.js.map +1 -1
- package/dist/core/codegen/schemas/recursive-ref.d.ts +9 -6
- package/dist/core/codegen/schemas/recursive-ref.d.ts.map +1 -1
- package/dist/core/codegen/schemas/recursive-ref.js +44 -44
- package/dist/core/codegen/schemas/recursive-ref.js.map +1 -1
- package/dist/core/codegen/schemas/set.d.ts +8 -5
- package/dist/core/codegen/schemas/set.d.ts.map +1 -1
- package/dist/core/codegen/schemas/set.js +61 -73
- package/dist/core/codegen/schemas/set.js.map +1 -1
- package/dist/core/codegen/schemas/string-bool.d.ts +6 -3
- package/dist/core/codegen/schemas/string-bool.d.ts.map +1 -1
- package/dist/core/codegen/schemas/string-bool.js +22 -23
- package/dist/core/codegen/schemas/string-bool.js.map +1 -1
- package/dist/core/codegen/schemas/string.d.ts +8 -5
- package/dist/core/codegen/schemas/string.d.ts.map +1 -1
- package/dist/core/codegen/schemas/string.js +168 -207
- package/dist/core/codegen/schemas/string.js.map +1 -1
- package/dist/core/codegen/schemas/symbol.d.ts +7 -4
- package/dist/core/codegen/schemas/symbol.d.ts.map +1 -1
- package/dist/core/codegen/schemas/symbol.js +8 -4
- package/dist/core/codegen/schemas/symbol.js.map +1 -1
- package/dist/core/codegen/schemas/template-literal.d.ts +7 -4
- package/dist/core/codegen/schemas/template-literal.d.ts.map +1 -1
- package/dist/core/codegen/schemas/template-literal.js +12 -13
- package/dist/core/codegen/schemas/template-literal.js.map +1 -1
- package/dist/core/codegen/schemas/tuple.d.ts +8 -5
- package/dist/core/codegen/schemas/tuple.d.ts.map +1 -1
- package/dist/core/codegen/schemas/tuple.js +84 -94
- package/dist/core/codegen/schemas/tuple.js.map +1 -1
- package/dist/core/codegen/schemas/undefined.d.ts +7 -4
- package/dist/core/codegen/schemas/undefined.d.ts.map +1 -1
- package/dist/core/codegen/schemas/undefined.js +8 -4
- package/dist/core/codegen/schemas/undefined.js.map +1 -1
- package/dist/core/codegen/schemas/union.d.ts +8 -5
- package/dist/core/codegen/schemas/union.d.ts.map +1 -1
- package/dist/core/codegen/schemas/union.js +49 -69
- package/dist/core/codegen/schemas/union.js.map +1 -1
- package/dist/core/codegen/schemas/unknown.d.ts +7 -4
- package/dist/core/codegen/schemas/unknown.d.ts.map +1 -1
- package/dist/core/codegen/schemas/unknown.js +8 -4
- package/dist/core/codegen/schemas/unknown.js.map +1 -1
- package/dist/core/codegen/schemas/void.d.ts +7 -4
- package/dist/core/codegen/schemas/void.d.ts.map +1 -1
- package/dist/core/codegen/schemas/void.js +8 -4
- package/dist/core/codegen/schemas/void.js.map +1 -1
- package/dist/core/codegen/slow-path.d.ts +7 -4
- package/dist/core/codegen/slow-path.d.ts.map +1 -1
- package/dist/core/codegen/slow-path.js +71 -96
- package/dist/core/codegen/slow-path.js.map +1 -1
- package/dist/core/codegen/well-known-regex.d.ts +22 -19
- package/dist/core/codegen/well-known-regex.d.ts.map +1 -1
- package/dist/core/codegen/well-known-regex.js +127 -96
- package/dist/core/codegen/well-known-regex.js.map +1 -1
- package/dist/core/compile.d.ts +7 -4
- package/dist/core/compile.d.ts.map +1 -1
- package/dist/core/compile.js +48 -48
- package/dist/core/compile.js.map +1 -1
- package/dist/core/diagnostic.d.ts +38 -39
- package/dist/core/diagnostic.d.ts.map +1 -1
- package/dist/core/diagnostic.js +140 -164
- package/dist/core/diagnostic.js.map +1 -1
- package/dist/core/extract/checks.d.ts +18 -15
- package/dist/core/extract/checks.d.ts.map +1 -1
- package/dist/core/extract/checks.js +318 -311
- package/dist/core/extract/checks.js.map +1 -1
- package/dist/core/extract/effects.d.ts +13 -10
- package/dist/core/extract/effects.d.ts.map +1 -1
- package/dist/core/extract/effects.js +153 -222
- package/dist/core/extract/effects.js.map +1 -1
- package/dist/core/extract/extractors/any.d.ts +5 -2
- package/dist/core/extract/extractors/any.d.ts.map +1 -1
- package/dist/core/extract/extractors/any.js +5 -1
- package/dist/core/extract/extractors/any.js.map +1 -1
- package/dist/core/extract/extractors/array.d.ts +6 -3
- package/dist/core/extract/extractors/array.d.ts.map +1 -1
- package/dist/core/extract/extractors/array.js +25 -20
- package/dist/core/extract/extractors/array.js.map +1 -1
- package/dist/core/extract/extractors/bigint.d.ts +6 -3
- package/dist/core/extract/extractors/bigint.d.ts.map +1 -1
- package/dist/core/extract/extractors/bigint.js +66 -64
- package/dist/core/extract/extractors/bigint.js.map +1 -1
- package/dist/core/extract/extractors/boolean.d.ts +5 -2
- package/dist/core/extract/extractors/boolean.d.ts.map +1 -1
- package/dist/core/extract/extractors/boolean.js +7 -3
- package/dist/core/extract/extractors/boolean.js.map +1 -1
- package/dist/core/extract/extractors/catch.d.ts +6 -3
- package/dist/core/extract/extractors/catch.d.ts.map +1 -1
- package/dist/core/extract/extractors/catch.js +26 -17
- package/dist/core/extract/extractors/catch.js.map +1 -1
- package/dist/core/extract/extractors/date.d.ts +6 -3
- package/dist/core/extract/extractors/date.d.ts.map +1 -1
- package/dist/core/extract/extractors/date.js +42 -46
- package/dist/core/extract/extractors/date.js.map +1 -1
- package/dist/core/extract/extractors/default.d.ts +6 -3
- package/dist/core/extract/extractors/default.d.ts.map +1 -1
- package/dist/core/extract/extractors/default.js +20 -14
- package/dist/core/extract/extractors/default.js.map +1 -1
- package/dist/core/extract/extractors/enum.d.ts +5 -2
- package/dist/core/extract/extractors/enum.d.ts.map +1 -1
- package/dist/core/extract/extractors/enum.js +12 -13
- package/dist/core/extract/extractors/enum.js.map +1 -1
- package/dist/core/extract/extractors/file.d.ts +6 -3
- package/dist/core/extract/extractors/file.d.ts.map +1 -1
- package/dist/core/extract/extractors/file.js +34 -28
- package/dist/core/extract/extractors/file.js.map +1 -1
- package/dist/core/extract/extractors/intersection.d.ts +5 -2
- package/dist/core/extract/extractors/intersection.d.ts.map +1 -1
- package/dist/core/extract/extractors/intersection.js +13 -11
- package/dist/core/extract/extractors/intersection.js.map +1 -1
- package/dist/core/extract/extractors/lazy.d.ts +6 -3
- package/dist/core/extract/extractors/lazy.d.ts.map +1 -1
- package/dist/core/extract/extractors/lazy.js +21 -30
- package/dist/core/extract/extractors/lazy.js.map +1 -1
- package/dist/core/extract/extractors/literal.d.ts +5 -2
- package/dist/core/extract/extractors/literal.d.ts.map +1 -1
- package/dist/core/extract/extractors/literal.js +8 -1
- package/dist/core/extract/extractors/literal.js.map +1 -1
- package/dist/core/extract/extractors/map.d.ts +6 -3
- package/dist/core/extract/extractors/map.d.ts.map +1 -1
- package/dist/core/extract/extractors/map.js +10 -4
- package/dist/core/extract/extractors/map.js.map +1 -1
- package/dist/core/extract/extractors/nan.d.ts +5 -2
- package/dist/core/extract/extractors/nan.d.ts.map +1 -1
- package/dist/core/extract/extractors/nan.js +5 -1
- package/dist/core/extract/extractors/nan.js.map +1 -1
- package/dist/core/extract/extractors/never.d.ts +5 -2
- package/dist/core/extract/extractors/never.d.ts.map +1 -1
- package/dist/core/extract/extractors/never.js +5 -1
- package/dist/core/extract/extractors/never.js.map +1 -1
- package/dist/core/extract/extractors/null.d.ts +5 -2
- package/dist/core/extract/extractors/null.d.ts.map +1 -1
- package/dist/core/extract/extractors/null.js +5 -1
- package/dist/core/extract/extractors/null.js.map +1 -1
- package/dist/core/extract/extractors/nullable.d.ts +5 -2
- package/dist/core/extract/extractors/nullable.d.ts.map +1 -1
- package/dist/core/extract/extractors/nullable.js +7 -3
- package/dist/core/extract/extractors/nullable.js.map +1 -1
- package/dist/core/extract/extractors/number.d.ts +6 -3
- package/dist/core/extract/extractors/number.d.ts.map +1 -1
- package/dist/core/extract/extractors/number.js +35 -35
- package/dist/core/extract/extractors/number.js.map +1 -1
- package/dist/core/extract/extractors/object.d.ts +6 -3
- package/dist/core/extract/extractors/object.d.ts.map +1 -1
- package/dist/core/extract/extractors/object.js +49 -76
- package/dist/core/extract/extractors/object.js.map +1 -1
- package/dist/core/extract/extractors/optional.d.ts +5 -2
- package/dist/core/extract/extractors/optional.d.ts.map +1 -1
- package/dist/core/extract/extractors/optional.js +10 -12
- package/dist/core/extract/extractors/optional.js.map +1 -1
- package/dist/core/extract/extractors/pipe.d.ts +6 -3
- package/dist/core/extract/extractors/pipe.d.ts.map +1 -1
- package/dist/core/extract/extractors/pipe.js +40 -41
- package/dist/core/extract/extractors/pipe.js.map +1 -1
- package/dist/core/extract/extractors/readonly.d.ts +5 -2
- package/dist/core/extract/extractors/readonly.d.ts.map +1 -1
- package/dist/core/extract/extractors/readonly.js +10 -6
- package/dist/core/extract/extractors/readonly.js.map +1 -1
- package/dist/core/extract/extractors/record.d.ts +6 -3
- package/dist/core/extract/extractors/record.d.ts.map +1 -1
- package/dist/core/extract/extractors/record.js +24 -35
- package/dist/core/extract/extractors/record.js.map +1 -1
- package/dist/core/extract/extractors/set.d.ts +6 -3
- package/dist/core/extract/extractors/set.d.ts.map +1 -1
- package/dist/core/extract/extractors/set.js +36 -30
- package/dist/core/extract/extractors/set.js.map +1 -1
- package/dist/core/extract/extractors/string-bool.d.ts +7 -4
- package/dist/core/extract/extractors/string-bool.d.ts.map +1 -1
- package/dist/core/extract/extractors/string-bool.js +66 -84
- package/dist/core/extract/extractors/string-bool.js.map +1 -1
- package/dist/core/extract/extractors/string.d.ts +6 -3
- package/dist/core/extract/extractors/string.d.ts.map +1 -1
- package/dist/core/extract/extractors/string.js +34 -37
- package/dist/core/extract/extractors/string.js.map +1 -1
- package/dist/core/extract/extractors/symbol.d.ts +5 -2
- package/dist/core/extract/extractors/symbol.d.ts.map +1 -1
- package/dist/core/extract/extractors/symbol.js +5 -1
- package/dist/core/extract/extractors/symbol.js.map +1 -1
- package/dist/core/extract/extractors/template-literal.d.ts +6 -3
- package/dist/core/extract/extractors/template-literal.d.ts.map +1 -1
- package/dist/core/extract/extractors/template-literal.js +11 -6
- package/dist/core/extract/extractors/template-literal.js.map +1 -1
- package/dist/core/extract/extractors/tuple.d.ts +6 -3
- package/dist/core/extract/extractors/tuple.d.ts.map +1 -1
- package/dist/core/extract/extractors/tuple.js +10 -4
- package/dist/core/extract/extractors/tuple.js.map +1 -1
- package/dist/core/extract/extractors/undefined.d.ts +5 -2
- package/dist/core/extract/extractors/undefined.d.ts.map +1 -1
- package/dist/core/extract/extractors/undefined.js +5 -1
- package/dist/core/extract/extractors/undefined.js.map +1 -1
- package/dist/core/extract/extractors/union.d.ts +6 -3
- package/dist/core/extract/extractors/union.d.ts.map +1 -1
- package/dist/core/extract/extractors/union.js +38 -64
- package/dist/core/extract/extractors/union.js.map +1 -1
- package/dist/core/extract/extractors/unknown.d.ts +5 -2
- package/dist/core/extract/extractors/unknown.d.ts.map +1 -1
- package/dist/core/extract/extractors/unknown.js +5 -1
- package/dist/core/extract/extractors/unknown.js.map +1 -1
- package/dist/core/extract/extractors/void.d.ts +5 -2
- package/dist/core/extract/extractors/void.d.ts.map +1 -1
- package/dist/core/extract/extractors/void.js +5 -1
- package/dist/core/extract/extractors/void.js.map +1 -1
- package/dist/core/extract/fallback.d.ts +6 -3
- package/dist/core/extract/fallback.d.ts.map +1 -1
- package/dist/core/extract/fallback.js +21 -7
- package/dist/core/extract/fallback.js.map +1 -1
- package/dist/core/extract/index.d.ts +6 -4
- package/dist/core/extract/index.d.ts.map +1 -1
- package/dist/core/extract/index.js +15 -15
- package/dist/core/extract/index.js.map +1 -1
- package/dist/core/extract/registry.d.ts +39 -36
- package/dist/core/extract/registry.d.ts.map +1 -1
- package/dist/core/extract/registry.js +96 -123
- package/dist/core/extract/registry.js.map +1 -1
- package/dist/core/extract/types.d.ts +124 -120
- package/dist/core/extract/types.d.ts.map +1 -1
- package/dist/core/extract/types.js +0 -1
- package/dist/core/iife.d.ts +14 -15
- package/dist/core/iife.d.ts.map +1 -1
- package/dist/core/iife.js +182 -206
- package/dist/core/iife.js.map +1 -1
- package/dist/core/pipeline.d.ts +33 -30
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +67 -74
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/types.d.ts +430 -427
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +0 -5
- package/dist/discovery.d.ts +8 -5
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +31 -32
- package/dist/discovery.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/jit.d.ts +15 -42
- package/dist/jit.d.ts.map +1 -1
- package/dist/jit.js +187 -216
- package/dist/jit.js.map +1 -1
- package/dist/loader.d.ts +14 -11
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +226 -258
- package/dist/loader.js.map +1 -1
- package/dist/static-filter.d.ts +4 -1
- package/dist/static-filter.d.ts.map +1 -1
- package/dist/static-filter.js +240 -367
- package/dist/static-filter.js.map +1 -1
- package/dist/swc.d.ts +38 -35
- package/dist/swc.d.ts.map +1 -1
- package/dist/swc.js +83 -76
- package/dist/swc.js.map +1 -1
- package/dist/unplugin/bun.d.ts +5 -2
- package/dist/unplugin/bun.d.ts.map +1 -1
- package/dist/unplugin/bun.js +5 -1
- package/dist/unplugin/bun.js.map +1 -1
- package/dist/unplugin/dep-graph.d.ts +10 -7
- package/dist/unplugin/dep-graph.d.ts.map +1 -1
- package/dist/unplugin/dep-graph.js +216 -252
- package/dist/unplugin/dep-graph.js.map +1 -1
- package/dist/unplugin/disk-cache.d.ts +121 -92
- package/dist/unplugin/disk-cache.d.ts.map +1 -1
- package/dist/unplugin/disk-cache.js +425 -444
- package/dist/unplugin/disk-cache.js.map +1 -1
- package/dist/unplugin/edits.d.ts +15 -12
- package/dist/unplugin/edits.d.ts.map +1 -1
- package/dist/unplugin/edits.js +24 -37
- package/dist/unplugin/edits.js.map +1 -1
- package/dist/unplugin/esbuild.d.ts +5 -2
- package/dist/unplugin/esbuild.d.ts.map +1 -1
- package/dist/unplugin/esbuild.js +5 -1
- package/dist/unplugin/esbuild.js.map +1 -1
- package/dist/unplugin/farm.d.ts +5 -2
- package/dist/unplugin/farm.d.ts.map +1 -1
- package/dist/unplugin/farm.js +5 -1
- package/dist/unplugin/farm.js.map +1 -1
- package/dist/unplugin/hoist-compile.d.ts +14 -42
- package/dist/unplugin/hoist-compile.d.ts.map +1 -1
- package/dist/unplugin/hoist-compile.js +67 -112
- package/dist/unplugin/hoist-compile.js.map +1 -1
- package/dist/unplugin/hoist.d.ts +56 -54
- package/dist/unplugin/hoist.d.ts.map +1 -1
- package/dist/unplugin/hoist.js +945 -1170
- package/dist/unplugin/hoist.js.map +1 -1
- package/dist/unplugin/index.d.ts +5 -3
- package/dist/unplugin/index.d.ts.map +1 -1
- package/dist/unplugin/index.js +175 -250
- package/dist/unplugin/index.js.map +1 -1
- package/dist/unplugin/rolldown.d.ts +5 -2
- package/dist/unplugin/rolldown.d.ts.map +1 -1
- package/dist/unplugin/rolldown.js +5 -1
- package/dist/unplugin/rolldown.js.map +1 -1
- package/dist/unplugin/rollup.d.ts +5 -2
- package/dist/unplugin/rollup.d.ts.map +1 -1
- package/dist/unplugin/rollup.js +5 -1
- package/dist/unplugin/rollup.js.map +1 -1
- package/dist/unplugin/rsbuild.d.ts +6 -3
- package/dist/unplugin/rsbuild.d.ts.map +1 -1
- package/dist/unplugin/rsbuild.js +15 -11
- package/dist/unplugin/rsbuild.js.map +1 -1
- package/dist/unplugin/rspack.d.ts +5 -2
- package/dist/unplugin/rspack.d.ts.map +1 -1
- package/dist/unplugin/rspack.js +5 -1
- package/dist/unplugin/rspack.js.map +1 -1
- package/dist/unplugin/transform.d.ts +30 -27
- package/dist/unplugin/transform.d.ts.map +1 -1
- package/dist/unplugin/transform.js +433 -620
- package/dist/unplugin/transform.js.map +1 -1
- package/dist/unplugin/types.d.ts +189 -184
- package/dist/unplugin/types.d.ts.map +1 -1
- package/dist/unplugin/types.js +22 -18
- package/dist/unplugin/types.js.map +1 -1
- package/dist/unplugin/virtual.d.ts +11 -8
- package/dist/unplugin/virtual.d.ts.map +1 -1
- package/dist/unplugin/virtual.js +65 -83
- package/dist/unplugin/virtual.js.map +1 -1
- package/dist/unplugin/vite.d.ts +5 -2
- package/dist/unplugin/vite.d.ts.map +1 -1
- package/dist/unplugin/vite.js +5 -1
- package/dist/unplugin/vite.js.map +1 -1
- package/dist/unplugin/webpack.d.ts +5 -2
- package/dist/unplugin/webpack.d.ts.map +1 -1
- package/dist/unplugin/webpack.js +5 -1
- package/dist/unplugin/webpack.js.map +1 -1
- package/package.json +23 -14
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/core/extract/types.js.map +0 -1
- package/dist/core/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
package/dist/loader.js
CHANGED
|
@@ -1,308 +1,276 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
|
-
import { createPathsMatcher, getTsconfig
|
|
3
|
+
import { createPathsMatcher, getTsconfig } from "get-tsconfig";
|
|
4
|
+
//#region src/loader.ts
|
|
4
5
|
function detectRuntime() {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return "deno";
|
|
9
|
-
return "node";
|
|
6
|
+
if ("Bun" in globalThis) return "bun";
|
|
7
|
+
if ("Deno" in globalThis) return "deno";
|
|
8
|
+
return "node";
|
|
10
9
|
}
|
|
11
10
|
/** Cache: search dir → tsconfig lookup result (getTsconfig walks the fs otherwise). */
|
|
12
|
-
const tsconfigSearchCache = new Map();
|
|
11
|
+
const tsconfigSearchCache = /* @__PURE__ */ new Map();
|
|
13
12
|
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const pathsMatcherCache = new Map();
|
|
13
|
+
* Cache: tsconfig.json absolute path → paths matcher. `null`: config has no
|
|
14
|
+
* baseUrl/paths. `"unusable"`: createPathsMatcher rejected the config (the
|
|
15
|
+
* same validations tsc enforces — multi-star patterns, TS5090 non-relative
|
|
16
|
+
* substitutions without baseUrl).
|
|
17
|
+
*/
|
|
18
|
+
const pathsMatcherCache = /* @__PURE__ */ new Map();
|
|
20
19
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
* Resolve the tsconfig.json visible from a source directory.
|
|
21
|
+
*
|
|
22
|
+
* jiti has first-class TypeScript paths support, so runtime discovery uses the
|
|
23
|
+
* tsconfig path directly instead of translating aliases into jiti's simpler
|
|
24
|
+
* prefix alias format. The static dependency crawler uses get-tsconfig's own
|
|
25
|
+
* matcher for the same reason: project aliases are arbitrary TypeScript
|
|
26
|
+
* `paths` patterns, not a fixed convention like "~" or "@".
|
|
27
|
+
*/
|
|
29
28
|
function resolveLoaderConfig(fromDir) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
const tsconfig = getTsconfig(fromDir, "tsconfig.json", tsconfigSearchCache);
|
|
30
|
+
if (!tsconfig) return {
|
|
31
|
+
key: "",
|
|
32
|
+
tsconfigPath: void 0
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
key: tsconfig.path,
|
|
36
|
+
tsconfigPath: tsconfig.path
|
|
37
|
+
};
|
|
34
38
|
}
|
|
35
39
|
/**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
* Whether an explicit `compilerOptions.paths` pattern matches the specifier.
|
|
41
|
+
* TS pattern grammar: an exact string, or a single `*` wildcard (prefix +
|
|
42
|
+
* suffix match). Needed because the matcher's output alone cannot tell an
|
|
43
|
+
* explicit alias apart from the implicit baseUrl lookup (see below).
|
|
44
|
+
*/
|
|
41
45
|
function specifierMatchesPathsPattern(tsconfig, specifier) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return (specifier.length >= prefix.length + suffix.length &&
|
|
52
|
-
specifier.startsWith(prefix) &&
|
|
53
|
-
specifier.endsWith(suffix));
|
|
54
|
-
});
|
|
46
|
+
const paths = tsconfig.config.compilerOptions?.paths;
|
|
47
|
+
if (!paths) return false;
|
|
48
|
+
return Object.keys(paths).some((pattern) => {
|
|
49
|
+
const star = pattern.indexOf("*");
|
|
50
|
+
if (star === -1) return pattern === specifier;
|
|
51
|
+
const prefix = pattern.slice(0, star);
|
|
52
|
+
const suffix = pattern.slice(star + 1);
|
|
53
|
+
return specifier.length >= prefix.length + suffix.length && specifier.startsWith(prefix) && specifier.endsWith(suffix);
|
|
54
|
+
});
|
|
55
55
|
}
|
|
56
56
|
const NO_CANDIDATES = {
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
candidates: [],
|
|
58
|
+
authoritative: false
|
|
59
59
|
};
|
|
60
60
|
const UNUSABLE_CONFIG = {
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
candidates: [],
|
|
62
|
+
authoritative: true
|
|
63
63
|
};
|
|
64
64
|
/**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if (candidates.length === 0)
|
|
101
|
-
return NO_CANDIDATES;
|
|
102
|
-
return { candidates, authoritative: specifierMatchesPathsPattern(tsconfig, specifier) };
|
|
65
|
+
* Candidate files for a specifier using the tsconfig path mappings visible
|
|
66
|
+
* from a directory. Used by the static dependency crawler so alias imports
|
|
67
|
+
* resolve the same way discovery resolves them.
|
|
68
|
+
*
|
|
69
|
+
* `authoritative` tells the caller how to treat a miss (no candidate exists
|
|
70
|
+
* on disk):
|
|
71
|
+
* - true — the tsconfig owns this specifier: an explicit `paths` pattern
|
|
72
|
+
* matched, or the paths config exists but cannot be interpreted
|
|
73
|
+
* (createPathsMatcher rejects what tsc rejects). Resolution must be
|
|
74
|
+
* treated as failed rather than falling back to node — which specifiers a
|
|
75
|
+
* broken config would have mapped is unknowable.
|
|
76
|
+
* - false — candidates came only from the implicit baseUrl lookup, which
|
|
77
|
+
* proposes `<baseDir>/<specifier>` for EVERY bare specifier (npm packages
|
|
78
|
+
* and `#` subpath imports included) and expects the caller to fall back
|
|
79
|
+
* to node resolution when the candidate does not exist.
|
|
80
|
+
*/
|
|
81
|
+
function resolveTsconfigPathCandidates(fromDir, specifier) {
|
|
82
|
+
const tsconfig = getTsconfig(fromDir, "tsconfig.json", tsconfigSearchCache);
|
|
83
|
+
if (!tsconfig) return NO_CANDIDATES;
|
|
84
|
+
let matcher = pathsMatcherCache.get(tsconfig.path);
|
|
85
|
+
if (matcher === void 0) {
|
|
86
|
+
try {
|
|
87
|
+
matcher = createPathsMatcher(tsconfig);
|
|
88
|
+
} catch {
|
|
89
|
+
matcher = "unusable";
|
|
90
|
+
}
|
|
91
|
+
pathsMatcherCache.set(tsconfig.path, matcher);
|
|
92
|
+
}
|
|
93
|
+
if (matcher === "unusable") return UNUSABLE_CONFIG;
|
|
94
|
+
const candidates = matcher?.(specifier) ?? [];
|
|
95
|
+
if (candidates.length === 0) return NO_CANDIDATES;
|
|
96
|
+
return {
|
|
97
|
+
candidates,
|
|
98
|
+
authoritative: specifierMatchesPathsPattern(tsconfig, specifier)
|
|
99
|
+
};
|
|
103
100
|
}
|
|
104
101
|
/**
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
const jitiInstances = new Map();
|
|
102
|
+
* Shared jiti instances, keyed by tsconfig identity (the alias config).
|
|
103
|
+
* Sharing one instance with `moduleCache: true` across the whole build means
|
|
104
|
+
* the module graph behind schema files (zod itself, shared helpers, ...) is
|
|
105
|
+
* executed roughly once per build instead of once per transformed file.
|
|
106
|
+
*/
|
|
107
|
+
const jitiInstances = /* @__PURE__ */ new Map();
|
|
111
108
|
/**
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
109
|
+
* Bumped by invalidateModuleCache(). Bun/Deno use native import, whose module
|
|
110
|
+
* cache cannot be evicted — instead the generation is appended as a query
|
|
111
|
+
* suffix so files re-execute after an invalidation while unchanged builds
|
|
112
|
+
* share a single execution.
|
|
113
|
+
*/
|
|
117
114
|
let cacheGeneration = 0;
|
|
118
115
|
/** Serializes loads so concurrent transforms don't double-execute shared deps. */
|
|
119
116
|
let loadQueue = Promise.resolve();
|
|
120
117
|
/**
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
118
|
+
* Env var set on `process.env` while a build-time module executes. A schema
|
|
119
|
+
* file's import graph commonly includes an env-validation module that calls
|
|
120
|
+
* `process.exit()` when required variables are missing; in CI builds those
|
|
121
|
+
* secrets are intentionally absent. Cooperating modules can guard on this
|
|
122
|
+
* marker to skip validation during discovery (mirrors t3-env's
|
|
123
|
+
* `SKIP_ENV_VALIDATION`):
|
|
124
|
+
*
|
|
125
|
+
* if (!process.env.ZOD_COMPILER) {
|
|
126
|
+
* const r = envSchema.safeParse(process.env);
|
|
127
|
+
* if (!r.success) process.exit(1);
|
|
128
|
+
* }
|
|
129
|
+
*/
|
|
133
130
|
const DISCOVERY_ENV_MARKER = "ZOD_COMPILER";
|
|
134
131
|
/**
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
132
|
+
* Thrown in place of a `process.exit()` call made while a build-time module is
|
|
133
|
+
* executing (see {@link runGuarded}). Discovery already catches load failures
|
|
134
|
+
* and skips the file (falling back to runtime Zod), so a non-cooperating
|
|
135
|
+
* module's exit degrades gracefully instead of terminating the bundler.
|
|
136
|
+
*/
|
|
137
|
+
var ProcessExitDuringLoadError = class extends Error {
|
|
138
|
+
/** The code passed to the intercepted `process.exit()`, if any. */
|
|
139
|
+
exitCode;
|
|
140
|
+
constructor(code) {
|
|
141
|
+
super(`process.exit(${code ?? ""}) was called while zod-compiler executed a module for build-time schema discovery.`);
|
|
142
|
+
this.name = "ProcessExitDuringLoadError";
|
|
143
|
+
this.exitCode = code;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
150
146
|
/**
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
147
|
+
* Ref-counted guard installed around every build-time module execution. While
|
|
148
|
+
* any load is in flight it (1) sets {@link DISCOVERY_ENV_MARKER} so cooperating
|
|
149
|
+
* env modules skip their exit guard, and (2) replaces `process.exit` with a
|
|
150
|
+
* throw so a non-cooperating module's exit surfaces as a catchable load failure
|
|
151
|
+
* rather than killing the process. Both are restored once the last concurrent
|
|
152
|
+
* load settles, so exits elsewhere in the build are untouched.
|
|
153
|
+
*
|
|
154
|
+
* Only synchronous exits during module evaluation are caught — an exit deferred
|
|
155
|
+
* past the load window (a `setTimeout`, a later event) still exits.
|
|
156
|
+
*/
|
|
161
157
|
let guardDepth = 0;
|
|
162
158
|
let savedExit;
|
|
163
159
|
let savedMarker;
|
|
164
160
|
let markerWasSet = false;
|
|
165
161
|
function installGuard() {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
process.exit = ((...args) => {
|
|
174
|
-
throw new ProcessExitDuringLoadError(args[0] ?? undefined);
|
|
175
|
-
});
|
|
162
|
+
markerWasSet = DISCOVERY_ENV_MARKER in process.env;
|
|
163
|
+
savedMarker = process.env[DISCOVERY_ENV_MARKER];
|
|
164
|
+
process.env[DISCOVERY_ENV_MARKER] = "1";
|
|
165
|
+
savedExit = process.exit;
|
|
166
|
+
process.exit = ((...args) => {
|
|
167
|
+
throw new ProcessExitDuringLoadError(args[0] ?? void 0);
|
|
168
|
+
});
|
|
176
169
|
}
|
|
177
170
|
function restoreGuard() {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
delete process.env[DISCOVERY_ENV_MARKER];
|
|
187
|
-
}
|
|
171
|
+
if (savedExit) {
|
|
172
|
+
process.exit = savedExit;
|
|
173
|
+
savedExit = void 0;
|
|
174
|
+
}
|
|
175
|
+
if (markerWasSet) process.env[DISCOVERY_ENV_MARKER] = savedMarker;
|
|
176
|
+
else delete process.env[DISCOVERY_ENV_MARKER];
|
|
188
177
|
}
|
|
189
178
|
/**
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
179
|
+
* Run a build-time module import with the discovery guard active. Nested and
|
|
180
|
+
* concurrent loads share a single install via the ref count.
|
|
181
|
+
*/
|
|
193
182
|
async function runGuarded(run) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
if (--guardDepth === 0)
|
|
201
|
-
restoreGuard();
|
|
202
|
-
}
|
|
183
|
+
if (guardDepth++ === 0) installGuard();
|
|
184
|
+
try {
|
|
185
|
+
return await run();
|
|
186
|
+
} finally {
|
|
187
|
+
if (--guardDepth === 0) restoreGuard();
|
|
188
|
+
}
|
|
203
189
|
}
|
|
204
190
|
const NODE_MODULES_SEGMENT = `${path.sep}node_modules${path.sep}`;
|
|
205
191
|
/**
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
for (const key of Object.keys(jiti.cache)) {
|
|
221
|
-
if (!key.includes(NODE_MODULES_SEGMENT)) {
|
|
222
|
-
delete jiti.cache[key];
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
192
|
+
* Drop every first-party (non-node_modules) module from the shared loader
|
|
193
|
+
* caches. Called on watch/HMR file changes so the next discovery re-executes
|
|
194
|
+
* changed schema graphs.
|
|
195
|
+
*
|
|
196
|
+
* Eviction is deliberately first-party-wide rather than per-module: jiti's
|
|
197
|
+
* module cache only records importer→dep edges on cache misses, so a precise
|
|
198
|
+
* reverse-dependency walk would miss importers of already-cached modules and
|
|
199
|
+
* serve stale schemas. Evicting all project files (cheap to re-execute) while
|
|
200
|
+
* keeping node_modules (the expensive bulk — zod itself) warm is both correct
|
|
201
|
+
* and fast.
|
|
202
|
+
*/
|
|
203
|
+
function invalidateModuleCache() {
|
|
204
|
+
cacheGeneration++;
|
|
205
|
+
for (const jiti of jitiInstances.values()) for (const key of Object.keys(jiti.cache)) if (!key.includes(NODE_MODULES_SEGMENT)) delete jiti.cache[key];
|
|
226
206
|
}
|
|
227
207
|
/**
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
for (const key of Object.keys(jiti.cache)) {
|
|
242
|
-
if (!key.includes(NODE_MODULES_SEGMENT)) {
|
|
243
|
-
paths.push(key);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
return paths;
|
|
208
|
+
* Absolute paths of every first-party (non-node_modules) module currently
|
|
209
|
+
* executed by the shared loader. Used by the unplugin disk cache to record
|
|
210
|
+
* which source files a schema file's discovery depended on — a superset is
|
|
211
|
+
* safe (it can only over-invalidate, never serve stale results).
|
|
212
|
+
*
|
|
213
|
+
* Returns null when no jiti instance exists (Bun/Deno native import — no
|
|
214
|
+
* evictable cache, so dependency tracking is unavailable).
|
|
215
|
+
*/
|
|
216
|
+
function getFirstPartyModulePaths() {
|
|
217
|
+
if (jitiInstances.size === 0) return null;
|
|
218
|
+
const paths = [];
|
|
219
|
+
for (const jiti of jitiInstances.values()) for (const key of Object.keys(jiti.cache)) if (!key.includes(NODE_MODULES_SEGMENT)) paths.push(key);
|
|
220
|
+
return paths;
|
|
248
221
|
}
|
|
249
222
|
async function getJiti(absPath) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
return created;
|
|
223
|
+
const { key, tsconfigPath } = resolveLoaderConfig(path.dirname(absPath));
|
|
224
|
+
const existing = jitiInstances.get(key);
|
|
225
|
+
if (existing) return existing;
|
|
226
|
+
const { createJiti } = await import("jiti");
|
|
227
|
+
const created = createJiti(pathToFileURL(absPath).href, {
|
|
228
|
+
moduleCache: true,
|
|
229
|
+
...tsconfigPath ? { tsconfigPaths: tsconfigPath } : {},
|
|
230
|
+
jsx: true
|
|
231
|
+
});
|
|
232
|
+
jitiInstances.set(key, created);
|
|
233
|
+
return created;
|
|
262
234
|
}
|
|
263
235
|
/**
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
const load = loadQueue.then(() => runGuarded(() => jiti.import(absPath)));
|
|
284
|
-
loadQueue = load.then(() => undefined, () => undefined);
|
|
285
|
-
return (await load);
|
|
236
|
+
* Dynamically import a source file (.ts or .js).
|
|
237
|
+
* - Bun/Deno: native TypeScript support, direct import
|
|
238
|
+
* - Node.js: uses a shared jiti instance for reliable TypeScript transpilation
|
|
239
|
+
* (handles extensionless imports, enums, path aliases, and all TS syntax)
|
|
240
|
+
*
|
|
241
|
+
* Module executions are cached across calls; use invalidateModuleCache()
|
|
242
|
+
* when source files change (watch/HMR).
|
|
243
|
+
*/
|
|
244
|
+
async function loadSourceFile(filePath) {
|
|
245
|
+
const absPath = path.resolve(filePath);
|
|
246
|
+
const runtime = detectRuntime();
|
|
247
|
+
if (runtime === "bun" || runtime === "deno" || absPath.endsWith(".mjs")) {
|
|
248
|
+
const suffix = cacheGeneration > 0 ? `?zcGen=${cacheGeneration}` : "";
|
|
249
|
+
return await runGuarded(() => import(pathToFileURL(absPath).href + suffix));
|
|
250
|
+
}
|
|
251
|
+
const jiti = await getJiti(absPath);
|
|
252
|
+
const load = loadQueue.then(() => runGuarded(() => jiti.import(absPath)));
|
|
253
|
+
loadQueue = load.then(() => void 0, () => void 0);
|
|
254
|
+
return await load;
|
|
286
255
|
}
|
|
287
256
|
/**
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
const jiti = await getJiti(absPath);
|
|
304
|
-
const load = loadQueue.then(() => runGuarded(() => jiti.import(specifier)));
|
|
305
|
-
loadQueue = load.then(() => undefined, () => undefined);
|
|
306
|
-
return (await load);
|
|
257
|
+
* Import a module by SPECIFIER as `fromFile` would: relative specifiers
|
|
258
|
+
* resolve against the importing file's directory; bare specifiers (`zod`)
|
|
259
|
+
* resolve through node_modules / the shared jiti instance, so the value is
|
|
260
|
+
* the same module instance discovery executions see. Used by the hoisted-
|
|
261
|
+
* schema compile step to evaluate hoisted expressions at build time.
|
|
262
|
+
*/
|
|
263
|
+
async function loadModule(specifier, fromFile) {
|
|
264
|
+
if (specifier.startsWith("./") || specifier.startsWith("../")) return loadSourceFile(path.resolve(path.dirname(path.resolve(fromFile)), specifier));
|
|
265
|
+
const absPath = path.resolve(fromFile);
|
|
266
|
+
const runtime = detectRuntime();
|
|
267
|
+
if (runtime === "bun" || runtime === "deno") return await runGuarded(() => import(specifier));
|
|
268
|
+
const jiti = await getJiti(absPath);
|
|
269
|
+
const load = loadQueue.then(() => runGuarded(() => jiti.import(specifier)));
|
|
270
|
+
loadQueue = load.then(() => void 0, () => void 0);
|
|
271
|
+
return await load;
|
|
307
272
|
}
|
|
273
|
+
//#endregion
|
|
274
|
+
export { ProcessExitDuringLoadError, getFirstPartyModulePaths, invalidateModuleCache, loadModule, loadSourceFile, resolveTsconfigPathCandidates };
|
|
275
|
+
|
|
308
276
|
//# sourceMappingURL=loader.js.map
|
package/dist/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","names":[],"sources":["../src/loader.ts"],"sourcesContent":["import path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport {\n createPathsMatcher,\n type Cache,\n getTsconfig,\n type PathsMatcher,\n type TsConfigResult,\n} from \"get-tsconfig\";\nimport type { Jiti } from \"jiti\";\n\ntype Runtime = \"node\" | \"bun\" | \"deno\";\n\nfunction detectRuntime(): Runtime {\n if (\"Bun\" in globalThis) return \"bun\";\n if (\"Deno\" in globalThis) return \"deno\";\n return \"node\";\n}\n\n/** Cache: search dir → tsconfig lookup result (getTsconfig walks the fs otherwise). */\nconst tsconfigSearchCache: Cache = new Map();\n\n/**\n * Cache: tsconfig.json absolute path → paths matcher. `null`: config has no\n * baseUrl/paths. `\"unusable\"`: createPathsMatcher rejected the config (the\n * same validations tsc enforces — multi-star patterns, TS5090 non-relative\n * substitutions without baseUrl).\n */\nconst pathsMatcherCache = new Map<string, PathsMatcher | null | \"unusable\">();\n\ninterface LoaderConfig {\n /** Identity key for the shared jiti instance (tsconfig path, or \"\" if none). */\n key: string;\n tsconfigPath: string | undefined;\n}\n\n/**\n * Resolve the tsconfig.json visible from a source directory.\n *\n * jiti has first-class TypeScript paths support, so runtime discovery uses the\n * tsconfig path directly instead of translating aliases into jiti's simpler\n * prefix alias format. The static dependency crawler uses get-tsconfig's own\n * matcher for the same reason: project aliases are arbitrary TypeScript\n * `paths` patterns, not a fixed convention like \"~\" or \"@\".\n */\nfunction resolveLoaderConfig(fromDir: string): LoaderConfig {\n const tsconfig = getTsconfig(fromDir, \"tsconfig.json\", tsconfigSearchCache);\n if (!tsconfig) return { key: \"\", tsconfigPath: undefined };\n\n return { key: tsconfig.path, tsconfigPath: tsconfig.path };\n}\n\n/**\n * Whether an explicit `compilerOptions.paths` pattern matches the specifier.\n * TS pattern grammar: an exact string, or a single `*` wildcard (prefix +\n * suffix match). Needed because the matcher's output alone cannot tell an\n * explicit alias apart from the implicit baseUrl lookup (see below).\n */\nfunction specifierMatchesPathsPattern(tsconfig: TsConfigResult, specifier: string): boolean {\n const paths = tsconfig.config.compilerOptions?.paths;\n if (!paths) return false;\n return Object.keys(paths).some((pattern) => {\n const star = pattern.indexOf(\"*\");\n if (star === -1) return pattern === specifier;\n const prefix = pattern.slice(0, star);\n const suffix = pattern.slice(star + 1);\n return (\n specifier.length >= prefix.length + suffix.length &&\n specifier.startsWith(prefix) &&\n specifier.endsWith(suffix)\n );\n });\n}\n\nconst NO_CANDIDATES: { candidates: string[]; authoritative: boolean } = {\n candidates: [],\n authoritative: false,\n};\n\nconst UNUSABLE_CONFIG: { candidates: string[]; authoritative: boolean } = {\n candidates: [],\n authoritative: true,\n};\n\n/**\n * Candidate files for a specifier using the tsconfig path mappings visible\n * from a directory. Used by the static dependency crawler so alias imports\n * resolve the same way discovery resolves them.\n *\n * `authoritative` tells the caller how to treat a miss (no candidate exists\n * on disk):\n * - true — the tsconfig owns this specifier: an explicit `paths` pattern\n * matched, or the paths config exists but cannot be interpreted\n * (createPathsMatcher rejects what tsc rejects). Resolution must be\n * treated as failed rather than falling back to node — which specifiers a\n * broken config would have mapped is unknowable.\n * - false — candidates came only from the implicit baseUrl lookup, which\n * proposes `<baseDir>/<specifier>` for EVERY bare specifier (npm packages\n * and `#` subpath imports included) and expects the caller to fall back\n * to node resolution when the candidate does not exist.\n */\nexport function resolveTsconfigPathCandidates(\n fromDir: string,\n specifier: string,\n): { candidates: string[]; authoritative: boolean } {\n const tsconfig = getTsconfig(fromDir, \"tsconfig.json\", tsconfigSearchCache);\n if (!tsconfig) return NO_CANDIDATES;\n\n let matcher = pathsMatcherCache.get(tsconfig.path);\n if (matcher === undefined) {\n try {\n matcher = createPathsMatcher(tsconfig);\n } catch {\n // Invalid-per-tsc paths config. A stray tsconfig anywhere in the\n // crawled tree must degrade the graph, not crash the build.\n matcher = \"unusable\";\n }\n pathsMatcherCache.set(tsconfig.path, matcher);\n }\n\n if (matcher === \"unusable\") return UNUSABLE_CONFIG;\n const candidates = matcher?.(specifier) ?? [];\n if (candidates.length === 0) return NO_CANDIDATES;\n return { candidates, authoritative: specifierMatchesPathsPattern(tsconfig, specifier) };\n}\n\n/**\n * Shared jiti instances, keyed by tsconfig identity (the alias config).\n * Sharing one instance with `moduleCache: true` across the whole build means\n * the module graph behind schema files (zod itself, shared helpers, ...) is\n * executed roughly once per build instead of once per transformed file.\n */\nconst jitiInstances = new Map<string, Jiti>();\n\n/**\n * Bumped by invalidateModuleCache(). Bun/Deno use native import, whose module\n * cache cannot be evicted — instead the generation is appended as a query\n * suffix so files re-execute after an invalidation while unchanged builds\n * share a single execution.\n */\nlet cacheGeneration = 0;\n\n/** Serializes loads so concurrent transforms don't double-execute shared deps. */\nlet loadQueue: Promise<unknown> = Promise.resolve();\n\n/**\n * Env var set on `process.env` while a build-time module executes. A schema\n * file's import graph commonly includes an env-validation module that calls\n * `process.exit()` when required variables are missing; in CI builds those\n * secrets are intentionally absent. Cooperating modules can guard on this\n * marker to skip validation during discovery (mirrors t3-env's\n * `SKIP_ENV_VALIDATION`):\n *\n * if (!process.env.ZOD_COMPILER) {\n * const r = envSchema.safeParse(process.env);\n * if (!r.success) process.exit(1);\n * }\n */\nconst DISCOVERY_ENV_MARKER = \"ZOD_COMPILER\";\n\n/**\n * Thrown in place of a `process.exit()` call made while a build-time module is\n * executing (see {@link runGuarded}). Discovery already catches load failures\n * and skips the file (falling back to runtime Zod), so a non-cooperating\n * module's exit degrades gracefully instead of terminating the bundler.\n */\nexport class ProcessExitDuringLoadError extends Error {\n /** The code passed to the intercepted `process.exit()`, if any. */\n readonly exitCode: number | string | undefined;\n\n constructor(code?: number | string) {\n super(\n `process.exit(${code ?? \"\"}) was called while zod-compiler executed a module ` +\n `for build-time schema discovery.`,\n );\n this.name = \"ProcessExitDuringLoadError\";\n this.exitCode = code;\n }\n}\n\n/**\n * Ref-counted guard installed around every build-time module execution. While\n * any load is in flight it (1) sets {@link DISCOVERY_ENV_MARKER} so cooperating\n * env modules skip their exit guard, and (2) replaces `process.exit` with a\n * throw so a non-cooperating module's exit surfaces as a catchable load failure\n * rather than killing the process. Both are restored once the last concurrent\n * load settles, so exits elsewhere in the build are untouched.\n *\n * Only synchronous exits during module evaluation are caught — an exit deferred\n * past the load window (a `setTimeout`, a later event) still exits.\n */\nlet guardDepth = 0;\nlet savedExit: typeof process.exit | undefined;\nlet savedMarker: string | undefined;\nlet markerWasSet = false;\n\nfunction installGuard(): void {\n markerWasSet = DISCOVERY_ENV_MARKER in process.env;\n savedMarker = process.env[DISCOVERY_ENV_MARKER];\n process.env[DISCOVERY_ENV_MARKER] = \"1\";\n // Capture the real exit verbatim so restoreGuard puts back the exact same\n // reference (identity matters to callers that compare process.exit).\n // oxlint-disable-next-line typescript/unbound-method -- restoring, not calling\n savedExit = process.exit;\n process.exit = ((...args: Parameters<typeof process.exit>): never => {\n throw new ProcessExitDuringLoadError(args[0] ?? undefined);\n }) as typeof process.exit;\n}\n\nfunction restoreGuard(): void {\n if (savedExit) {\n process.exit = savedExit;\n savedExit = undefined;\n }\n if (markerWasSet) {\n process.env[DISCOVERY_ENV_MARKER] = savedMarker as string;\n } else {\n delete process.env[DISCOVERY_ENV_MARKER];\n }\n}\n\n/**\n * Run a build-time module import with the discovery guard active. Nested and\n * concurrent loads share a single install via the ref count.\n */\nasync function runGuarded<T>(run: () => Promise<T>): Promise<T> {\n if (guardDepth++ === 0) installGuard();\n try {\n return await run();\n } finally {\n if (--guardDepth === 0) restoreGuard();\n }\n}\n\nconst NODE_MODULES_SEGMENT = `${path.sep}node_modules${path.sep}`;\n\n/**\n * Drop every first-party (non-node_modules) module from the shared loader\n * caches. Called on watch/HMR file changes so the next discovery re-executes\n * changed schema graphs.\n *\n * Eviction is deliberately first-party-wide rather than per-module: jiti's\n * module cache only records importer→dep edges on cache misses, so a precise\n * reverse-dependency walk would miss importers of already-cached modules and\n * serve stale schemas. Evicting all project files (cheap to re-execute) while\n * keeping node_modules (the expensive bulk — zod itself) warm is both correct\n * and fast.\n */\nexport function invalidateModuleCache(): void {\n cacheGeneration++;\n for (const jiti of jitiInstances.values()) {\n for (const key of Object.keys(jiti.cache)) {\n if (!key.includes(NODE_MODULES_SEGMENT)) {\n delete jiti.cache[key];\n }\n }\n }\n}\n\n/**\n * Absolute paths of every first-party (non-node_modules) module currently\n * executed by the shared loader. Used by the unplugin disk cache to record\n * which source files a schema file's discovery depended on — a superset is\n * safe (it can only over-invalidate, never serve stale results).\n *\n * Returns null when no jiti instance exists (Bun/Deno native import — no\n * evictable cache, so dependency tracking is unavailable).\n */\nexport function getFirstPartyModulePaths(): string[] | null {\n if (jitiInstances.size === 0) return null;\n const paths: string[] = [];\n for (const jiti of jitiInstances.values()) {\n for (const key of Object.keys(jiti.cache)) {\n if (!key.includes(NODE_MODULES_SEGMENT)) {\n paths.push(key);\n }\n }\n }\n return paths;\n}\n\nasync function getJiti(absPath: string): Promise<Jiti> {\n const { key, tsconfigPath } = resolveLoaderConfig(path.dirname(absPath));\n const existing = jitiInstances.get(key);\n if (existing) return existing;\n\n const { createJiti } = await import(\"jiti\");\n const created = createJiti(pathToFileURL(absPath).href, {\n moduleCache: true,\n ...(tsconfigPath ? { tsconfigPaths: tsconfigPath } : {}),\n jsx: true,\n });\n jitiInstances.set(key, created);\n return created;\n}\n\n/**\n * Dynamically import a source file (.ts or .js).\n * - Bun/Deno: native TypeScript support, direct import\n * - Node.js: uses a shared jiti instance for reliable TypeScript transpilation\n * (handles extensionless imports, enums, path aliases, and all TS syntax)\n *\n * Module executions are cached across calls; use invalidateModuleCache()\n * when source files change (watch/HMR).\n */\nexport async function loadSourceFile(filePath: string): Promise<Record<string, unknown>> {\n const absPath = path.resolve(filePath);\n const runtime = detectRuntime();\n\n // Bun/Deno execute TypeScript natively. .mjs files bypass jiti even on\n // Node (jiti hands them to native import, outside its evictable cache),\n // so the generation suffix is the only way to refresh them.\n if (runtime === \"bun\" || runtime === \"deno\" || absPath.endsWith(\".mjs\")) {\n const suffix = cacheGeneration > 0 ? `?zcGen=${cacheGeneration}` : \"\";\n return (await runGuarded(() => import(pathToFileURL(absPath).href + suffix))) as Record<\n string,\n unknown\n >;\n }\n\n const jiti = await getJiti(absPath);\n const load = loadQueue.then(() => runGuarded(() => jiti.import(absPath)));\n loadQueue = load.then(\n () => undefined,\n () => undefined,\n );\n return (await load) as Record<string, unknown>;\n}\n\n/**\n * Import a module by SPECIFIER as `fromFile` would: relative specifiers\n * resolve against the importing file's directory; bare specifiers (`zod`)\n * resolve through node_modules / the shared jiti instance, so the value is\n * the same module instance discovery executions see. Used by the hoisted-\n * schema compile step to evaluate hoisted expressions at build time.\n */\nexport async function loadModule(\n specifier: string,\n fromFile: string,\n): Promise<Record<string, unknown>> {\n if (specifier.startsWith(\"./\") || specifier.startsWith(\"../\")) {\n return loadSourceFile(path.resolve(path.dirname(path.resolve(fromFile)), specifier));\n }\n\n const absPath = path.resolve(fromFile);\n const runtime = detectRuntime();\n if (runtime === \"bun\" || runtime === \"deno\") {\n return (await runGuarded(() => import(specifier))) as Record<string, unknown>;\n }\n\n const jiti = await getJiti(absPath);\n const load = loadQueue.then(() => runGuarded(() => jiti.import(specifier)));\n loadQueue = load.then(\n () => undefined,\n () => undefined,\n );\n return (await load) as Record<string, unknown>;\n}\n"],"mappings":"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"}
|
package/dist/static-filter.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
//#region src/static-filter.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* Check whether a file's exports could include Zod schemas (or compile()
|
|
3
4
|
* results) without executing the file. `filename` selects the TS/JSX
|
|
4
5
|
* transforms; the file does not need to exist on disk.
|
|
5
6
|
*/
|
|
6
|
-
|
|
7
|
+
declare function mayExportSchemas(code: string, filename: string): Promise<boolean>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { mayExportSchemas };
|
|
7
10
|
//# sourceMappingURL=static-filter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-filter.d.ts","
|
|
1
|
+
{"version":3,"file":"static-filter.d.ts","names":[],"sources":["../src/static-filter.ts"],"mappings":";;;;;;iBAgDsB,iBAAiB,cAAc,mBAAmB"}
|