zod-compiler 0.1.1 → 1.0.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/LICENSE +21 -0
- package/README.md +381 -28
- package/dist/cli/commands/check.d.ts +9 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +150 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +34 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +135 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +33 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +163 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/emitter.d.ts +21 -0
- package/dist/cli/emitter.d.ts.map +1 -0
- package/dist/cli/emitter.js +64 -0
- package/dist/cli/emitter.js.map +1 -0
- package/dist/cli/errors.d.ts +2 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/errors.js +4 -0
- package/dist/cli/errors.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +181 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/logger.d.ts +18 -0
- package/dist/cli/logger.d.ts.map +1 -0
- package/dist/cli/logger.js +46 -0
- package/dist/cli/logger.js.map +1 -0
- package/dist/core/codegen/context.d.ts +138 -0
- package/dist/core/codegen/context.d.ts.map +1 -0
- package/dist/core/codegen/context.js +213 -0
- package/dist/core/codegen/context.js.map +1 -0
- package/dist/core/codegen/emit-issue.d.ts +74 -0
- package/dist/core/codegen/emit-issue.d.ts.map +1 -0
- package/dist/core/codegen/emit-issue.js +116 -0
- package/dist/core/codegen/emit-issue.js.map +1 -0
- 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-path.d.ts +17 -0
- package/dist/core/codegen/fast-path.d.ts.map +1 -0
- package/dist/core/codegen/fast-path.js +114 -0
- package/dist/core/codegen/fast-path.js.map +1 -0
- package/dist/core/codegen/index.d.ts +19 -0
- package/dist/core/codegen/index.d.ts.map +1 -0
- package/dist/core/codegen/index.js +54 -0
- package/dist/core/codegen/index.js.map +1 -0
- package/dist/core/codegen/issue-decls.d.ts +37 -0
- package/dist/core/codegen/issue-decls.d.ts.map +1 -0
- package/dist/core/codegen/issue-decls.js +47 -0
- package/dist/core/codegen/issue-decls.js.map +1 -0
- package/dist/core/codegen/schemas/any.d.ts +5 -0
- package/dist/core/codegen/schemas/any.d.ts.map +1 -0
- package/dist/core/codegen/schemas/any.js +7 -0
- package/dist/core/codegen/schemas/any.js.map +1 -0
- package/dist/core/codegen/schemas/array.d.ts +7 -0
- package/dist/core/codegen/schemas/array.d.ts.map +1 -0
- package/dist/core/codegen/schemas/array.js +86 -0
- package/dist/core/codegen/schemas/array.js.map +1 -0
- package/dist/core/codegen/schemas/bigint.d.ts +5 -0
- package/dist/core/codegen/schemas/bigint.d.ts.map +1 -0
- package/dist/core/codegen/schemas/bigint.js +80 -0
- package/dist/core/codegen/schemas/bigint.js.map +1 -0
- package/dist/core/codegen/schemas/boolean.d.ts +5 -0
- package/dist/core/codegen/schemas/boolean.d.ts.map +1 -0
- package/dist/core/codegen/schemas/boolean.js +20 -0
- package/dist/core/codegen/schemas/boolean.js.map +1 -0
- package/dist/core/codegen/schemas/catch.d.ts +7 -0
- package/dist/core/codegen/schemas/catch.d.ts.map +1 -0
- package/dist/core/codegen/schemas/catch.js +26 -0
- package/dist/core/codegen/schemas/catch.js.map +1 -0
- package/dist/core/codegen/schemas/date.d.ts +5 -0
- package/dist/core/codegen/schemas/date.d.ts.map +1 -0
- package/dist/core/codegen/schemas/date.js +79 -0
- package/dist/core/codegen/schemas/date.js.map +1 -0
- package/dist/core/codegen/schemas/default.d.ts +5 -0
- package/dist/core/codegen/schemas/default.d.ts.map +1 -0
- package/dist/core/codegen/schemas/default.js +17 -0
- package/dist/core/codegen/schemas/default.js.map +1 -0
- package/dist/core/codegen/schemas/discriminated-union.d.ts +7 -0
- package/dist/core/codegen/schemas/discriminated-union.d.ts.map +1 -0
- package/dist/core/codegen/schemas/discriminated-union.js +45 -0
- package/dist/core/codegen/schemas/discriminated-union.js.map +1 -0
- package/dist/core/codegen/schemas/effect.d.ts +17 -0
- package/dist/core/codegen/schemas/effect.d.ts.map +1 -0
- package/dist/core/codegen/schemas/effect.js +35 -0
- package/dist/core/codegen/schemas/effect.js.map +1 -0
- package/dist/core/codegen/schemas/enum.d.ts +5 -0
- package/dist/core/codegen/schemas/enum.d.ts.map +1 -0
- package/dist/core/codegen/schemas/enum.js +33 -0
- package/dist/core/codegen/schemas/enum.js.map +1 -0
- package/dist/core/codegen/schemas/fallback.d.ts +4 -0
- package/dist/core/codegen/schemas/fallback.d.ts.map +1 -0
- package/dist/core/codegen/schemas/fallback.js +23 -0
- package/dist/core/codegen/schemas/fallback.js.map +1 -0
- package/dist/core/codegen/schemas/file.d.ts +5 -0
- package/dist/core/codegen/schemas/file.d.ts.map +1 -0
- package/dist/core/codegen/schemas/file.js +78 -0
- package/dist/core/codegen/schemas/file.js.map +1 -0
- package/dist/core/codegen/schemas/intersection.d.ts +7 -0
- package/dist/core/codegen/schemas/intersection.d.ts.map +1 -0
- package/dist/core/codegen/schemas/intersection.js +13 -0
- package/dist/core/codegen/schemas/intersection.js.map +1 -0
- package/dist/core/codegen/schemas/literal.d.ts +5 -0
- package/dist/core/codegen/schemas/literal.d.ts.map +1 -0
- package/dist/core/codegen/schemas/literal.js +31 -0
- package/dist/core/codegen/schemas/literal.js.map +1 -0
- package/dist/core/codegen/schemas/map.d.ts +7 -0
- package/dist/core/codegen/schemas/map.d.ts.map +1 -0
- package/dist/core/codegen/schemas/map.js +46 -0
- package/dist/core/codegen/schemas/map.js.map +1 -0
- package/dist/core/codegen/schemas/nan.d.ts +5 -0
- package/dist/core/codegen/schemas/nan.d.ts.map +1 -0
- package/dist/core/codegen/schemas/nan.js +13 -0
- package/dist/core/codegen/schemas/nan.js.map +1 -0
- package/dist/core/codegen/schemas/never.d.ts +5 -0
- package/dist/core/codegen/schemas/never.d.ts.map +1 -0
- package/dist/core/codegen/schemas/never.js +11 -0
- package/dist/core/codegen/schemas/never.js.map +1 -0
- package/dist/core/codegen/schemas/null.d.ts +5 -0
- package/dist/core/codegen/schemas/null.d.ts.map +1 -0
- package/dist/core/codegen/schemas/null.js +13 -0
- package/dist/core/codegen/schemas/null.js.map +1 -0
- package/dist/core/codegen/schemas/nullable.d.ts +7 -0
- package/dist/core/codegen/schemas/nullable.d.ts.map +1 -0
- package/dist/core/codegen/schemas/nullable.js +15 -0
- package/dist/core/codegen/schemas/nullable.js.map +1 -0
- package/dist/core/codegen/schemas/number.d.ts +5 -0
- package/dist/core/codegen/schemas/number.d.ts.map +1 -0
- package/dist/core/codegen/schemas/number.js +186 -0
- package/dist/core/codegen/schemas/number.js.map +1 -0
- package/dist/core/codegen/schemas/object.d.ts +7 -0
- package/dist/core/codegen/schemas/object.d.ts.map +1 -0
- package/dist/core/codegen/schemas/object.js +65 -0
- package/dist/core/codegen/schemas/object.js.map +1 -0
- package/dist/core/codegen/schemas/optional.d.ts +7 -0
- package/dist/core/codegen/schemas/optional.d.ts.map +1 -0
- package/dist/core/codegen/schemas/optional.js +15 -0
- package/dist/core/codegen/schemas/optional.js.map +1 -0
- package/dist/core/codegen/schemas/pipe.d.ts +7 -0
- package/dist/core/codegen/schemas/pipe.d.ts.map +1 -0
- package/dist/core/codegen/schemas/pipe.js +18 -0
- package/dist/core/codegen/schemas/pipe.js.map +1 -0
- package/dist/core/codegen/schemas/readonly.d.ts +7 -0
- package/dist/core/codegen/schemas/readonly.d.ts.map +1 -0
- package/dist/core/codegen/schemas/readonly.js +7 -0
- package/dist/core/codegen/schemas/readonly.js.map +1 -0
- package/dist/core/codegen/schemas/record.d.ts +7 -0
- package/dist/core/codegen/schemas/record.d.ts.map +1 -0
- package/dist/core/codegen/schemas/record.js +53 -0
- package/dist/core/codegen/schemas/record.js.map +1 -0
- package/dist/core/codegen/schemas/recursive-ref.d.ts +5 -0
- package/dist/core/codegen/schemas/recursive-ref.d.ts.map +1 -0
- package/dist/core/codegen/schemas/recursive-ref.js +24 -0
- package/dist/core/codegen/schemas/recursive-ref.js.map +1 -0
- package/dist/core/codegen/schemas/set.d.ts +7 -0
- package/dist/core/codegen/schemas/set.d.ts.map +1 -0
- package/dist/core/codegen/schemas/set.js +88 -0
- package/dist/core/codegen/schemas/set.js.map +1 -0
- package/dist/core/codegen/schemas/string-bool.d.ts +4 -0
- package/dist/core/codegen/schemas/string-bool.d.ts.map +1 -0
- package/dist/core/codegen/schemas/string-bool.js +39 -0
- package/dist/core/codegen/schemas/string-bool.js.map +1 -0
- package/dist/core/codegen/schemas/string.d.ts +5 -0
- package/dist/core/codegen/schemas/string.d.ts.map +1 -0
- package/dist/core/codegen/schemas/string.js +226 -0
- package/dist/core/codegen/schemas/string.js.map +1 -0
- package/dist/core/codegen/schemas/symbol.d.ts +5 -0
- package/dist/core/codegen/schemas/symbol.d.ts.map +1 -0
- package/dist/core/codegen/schemas/symbol.js +13 -0
- package/dist/core/codegen/schemas/symbol.js.map +1 -0
- package/dist/core/codegen/schemas/template-literal.d.ts +5 -0
- package/dist/core/codegen/schemas/template-literal.d.ts.map +1 -0
- package/dist/core/codegen/schemas/template-literal.js +16 -0
- package/dist/core/codegen/schemas/template-literal.js.map +1 -0
- package/dist/core/codegen/schemas/tuple.d.ts +15 -0
- package/dist/core/codegen/schemas/tuple.d.ts.map +1 -0
- package/dist/core/codegen/schemas/tuple.js +111 -0
- package/dist/core/codegen/schemas/tuple.js.map +1 -0
- package/dist/core/codegen/schemas/undefined.d.ts +5 -0
- package/dist/core/codegen/schemas/undefined.d.ts.map +1 -0
- package/dist/core/codegen/schemas/undefined.js +13 -0
- package/dist/core/codegen/schemas/undefined.js.map +1 -0
- package/dist/core/codegen/schemas/union.d.ts +7 -0
- package/dist/core/codegen/schemas/union.d.ts.map +1 -0
- package/dist/core/codegen/schemas/union.js +95 -0
- package/dist/core/codegen/schemas/union.js.map +1 -0
- package/dist/core/codegen/schemas/unknown.d.ts +5 -0
- package/dist/core/codegen/schemas/unknown.d.ts.map +1 -0
- package/dist/core/codegen/schemas/unknown.js +7 -0
- package/dist/core/codegen/schemas/unknown.js.map +1 -0
- package/dist/core/codegen/schemas/void.d.ts +5 -0
- package/dist/core/codegen/schemas/void.d.ts.map +1 -0
- package/dist/core/codegen/schemas/void.js +13 -0
- package/dist/core/codegen/schemas/void.js.map +1 -0
- package/dist/core/codegen/slow-path.d.ts +5 -0
- package/dist/core/codegen/slow-path.d.ts.map +1 -0
- package/dist/core/codegen/slow-path.js +113 -0
- package/dist/core/codegen/slow-path.js.map +1 -0
- package/dist/core/codegen/well-known-regex.d.ts +27 -0
- package/dist/core/codegen/well-known-regex.d.ts.map +1 -0
- package/dist/core/codegen/well-known-regex.js +51 -0
- package/dist/core/codegen/well-known-regex.js.map +1 -0
- package/dist/core/compile.d.ts +19 -0
- package/dist/core/compile.d.ts.map +1 -0
- package/dist/core/compile.js +37 -0
- package/dist/core/compile.js.map +1 -0
- package/dist/core/diagnostic.d.ts +46 -0
- package/dist/core/diagnostic.d.ts.map +1 -0
- package/dist/core/diagnostic.js +174 -0
- package/dist/core/diagnostic.js.map +1 -0
- package/dist/core/extract/checks.d.ts +35 -0
- package/dist/core/extract/checks.d.ts.map +1 -0
- package/dist/core/extract/checks.js +249 -0
- package/dist/core/extract/checks.js.map +1 -0
- package/dist/core/extract/effects.d.ts +12 -0
- package/dist/core/extract/effects.d.ts.map +1 -0
- package/dist/core/extract/effects.js +204 -0
- package/dist/core/extract/effects.js.map +1 -0
- package/dist/core/extract/extractors/any.d.ts +3 -0
- package/dist/core/extract/extractors/any.d.ts.map +1 -0
- package/dist/core/extract/extractors/any.js +2 -0
- package/dist/core/extract/extractors/any.js.map +1 -0
- package/dist/core/extract/extractors/array.d.ts +4 -0
- package/dist/core/extract/extractors/array.d.ts.map +1 -0
- package/dist/core/extract/extractors/array.js +19 -0
- package/dist/core/extract/extractors/array.js.map +1 -0
- package/dist/core/extract/extractors/bigint.d.ts +4 -0
- package/dist/core/extract/extractors/bigint.d.ts.map +1 -0
- package/dist/core/extract/extractors/bigint.js +70 -0
- package/dist/core/extract/extractors/bigint.js.map +1 -0
- package/dist/core/extract/extractors/boolean.d.ts +3 -0
- package/dist/core/extract/extractors/boolean.d.ts.map +1 -0
- package/dist/core/extract/extractors/boolean.js +5 -0
- package/dist/core/extract/extractors/boolean.js.map +1 -0
- package/dist/core/extract/extractors/catch.d.ts +11 -0
- package/dist/core/extract/extractors/catch.d.ts.map +1 -0
- package/dist/core/extract/extractors/catch.js +20 -0
- package/dist/core/extract/extractors/catch.js.map +1 -0
- package/dist/core/extract/extractors/date.d.ts +4 -0
- package/dist/core/extract/extractors/date.d.ts.map +1 -0
- package/dist/core/extract/extractors/date.js +49 -0
- package/dist/core/extract/extractors/date.js.map +1 -0
- package/dist/core/extract/extractors/default.d.ts +4 -0
- package/dist/core/extract/extractors/default.d.ts.map +1 -0
- package/dist/core/extract/extractors/default.js +11 -0
- package/dist/core/extract/extractors/default.js.map +1 -0
- package/dist/core/extract/extractors/enum.d.ts +3 -0
- package/dist/core/extract/extractors/enum.d.ts.map +1 -0
- package/dist/core/extract/extractors/enum.js +15 -0
- package/dist/core/extract/extractors/enum.js.map +1 -0
- package/dist/core/extract/extractors/file.d.ts +4 -0
- package/dist/core/extract/extractors/file.d.ts.map +1 -0
- package/dist/core/extract/extractors/file.js +24 -0
- package/dist/core/extract/extractors/file.js.map +1 -0
- package/dist/core/extract/extractors/index.d.ts +32 -0
- package/dist/core/extract/extractors/index.d.ts.map +1 -0
- package/dist/core/extract/extractors/index.js +32 -0
- package/dist/core/extract/extractors/index.js.map +1 -0
- package/dist/core/extract/extractors/intersection.d.ts +3 -0
- package/dist/core/extract/extractors/intersection.d.ts.map +1 -0
- package/dist/core/extract/extractors/intersection.js +14 -0
- package/dist/core/extract/extractors/intersection.js.map +1 -0
- package/dist/core/extract/extractors/lazy.d.ts +4 -0
- package/dist/core/extract/extractors/lazy.d.ts.map +1 -0
- package/dist/core/extract/extractors/lazy.js +23 -0
- package/dist/core/extract/extractors/lazy.js.map +1 -0
- package/dist/core/extract/extractors/literal.d.ts +3 -0
- package/dist/core/extract/extractors/literal.d.ts.map +1 -0
- package/dist/core/extract/extractors/literal.js +2 -0
- package/dist/core/extract/extractors/literal.js.map +1 -0
- package/dist/core/extract/extractors/map.d.ts +4 -0
- package/dist/core/extract/extractors/map.d.ts.map +1 -0
- package/dist/core/extract/extractors/map.js +6 -0
- package/dist/core/extract/extractors/map.js.map +1 -0
- package/dist/core/extract/extractors/nan.d.ts +3 -0
- package/dist/core/extract/extractors/nan.d.ts.map +1 -0
- package/dist/core/extract/extractors/nan.js +2 -0
- package/dist/core/extract/extractors/nan.js.map +1 -0
- package/dist/core/extract/extractors/never.d.ts +3 -0
- package/dist/core/extract/extractors/never.d.ts.map +1 -0
- package/dist/core/extract/extractors/never.js +2 -0
- package/dist/core/extract/extractors/never.js.map +1 -0
- package/dist/core/extract/extractors/null.d.ts +3 -0
- package/dist/core/extract/extractors/null.d.ts.map +1 -0
- package/dist/core/extract/extractors/null.js +2 -0
- package/dist/core/extract/extractors/null.js.map +1 -0
- package/dist/core/extract/extractors/nullable.d.ts +3 -0
- package/dist/core/extract/extractors/nullable.d.ts.map +1 -0
- package/dist/core/extract/extractors/nullable.js +5 -0
- package/dist/core/extract/extractors/nullable.js.map +1 -0
- package/dist/core/extract/extractors/number.d.ts +4 -0
- package/dist/core/extract/extractors/number.d.ts.map +1 -0
- package/dist/core/extract/extractors/number.js +38 -0
- package/dist/core/extract/extractors/number.js.map +1 -0
- package/dist/core/extract/extractors/object.d.ts +4 -0
- package/dist/core/extract/extractors/object.d.ts.map +1 -0
- package/dist/core/extract/extractors/object.js +43 -0
- package/dist/core/extract/extractors/object.js.map +1 -0
- package/dist/core/extract/extractors/optional.d.ts +3 -0
- package/dist/core/extract/extractors/optional.d.ts.map +1 -0
- package/dist/core/extract/extractors/optional.js +14 -0
- package/dist/core/extract/extractors/optional.js.map +1 -0
- package/dist/core/extract/extractors/pipe.d.ts +4 -0
- package/dist/core/extract/extractors/pipe.d.ts.map +1 -0
- package/dist/core/extract/extractors/pipe.js +31 -0
- package/dist/core/extract/extractors/pipe.js.map +1 -0
- package/dist/core/extract/extractors/readonly.d.ts +9 -0
- package/dist/core/extract/extractors/readonly.d.ts.map +1 -0
- package/dist/core/extract/extractors/readonly.js +8 -0
- package/dist/core/extract/extractors/readonly.js.map +1 -0
- package/dist/core/extract/extractors/record.d.ts +4 -0
- package/dist/core/extract/extractors/record.d.ts.map +1 -0
- package/dist/core/extract/extractors/record.js +39 -0
- package/dist/core/extract/extractors/record.js.map +1 -0
- package/dist/core/extract/extractors/set.d.ts +4 -0
- package/dist/core/extract/extractors/set.d.ts.map +1 -0
- package/dist/core/extract/extractors/set.js +33 -0
- package/dist/core/extract/extractors/set.js.map +1 -0
- package/dist/core/extract/extractors/string-bool.d.ts +10 -0
- package/dist/core/extract/extractors/string-bool.d.ts.map +1 -0
- package/dist/core/extract/extractors/string-bool.js +92 -0
- package/dist/core/extract/extractors/string-bool.js.map +1 -0
- package/dist/core/extract/extractors/string.d.ts +4 -0
- package/dist/core/extract/extractors/string.d.ts.map +1 -0
- package/dist/core/extract/extractors/string.js +41 -0
- package/dist/core/extract/extractors/string.js.map +1 -0
- package/dist/core/extract/extractors/symbol.d.ts +3 -0
- package/dist/core/extract/extractors/symbol.d.ts.map +1 -0
- package/dist/core/extract/extractors/symbol.js +2 -0
- package/dist/core/extract/extractors/symbol.js.map +1 -0
- package/dist/core/extract/extractors/template-literal.d.ts +4 -0
- package/dist/core/extract/extractors/template-literal.d.ts.map +1 -0
- package/dist/core/extract/extractors/template-literal.js +8 -0
- package/dist/core/extract/extractors/template-literal.js.map +1 -0
- package/dist/core/extract/extractors/tuple.d.ts +4 -0
- package/dist/core/extract/extractors/tuple.d.ts.map +1 -0
- package/dist/core/extract/extractors/tuple.js +6 -0
- package/dist/core/extract/extractors/tuple.js.map +1 -0
- package/dist/core/extract/extractors/undefined.d.ts +3 -0
- package/dist/core/extract/extractors/undefined.d.ts.map +1 -0
- package/dist/core/extract/extractors/undefined.js +2 -0
- package/dist/core/extract/extractors/undefined.js.map +1 -0
- package/dist/core/extract/extractors/union.d.ts +4 -0
- package/dist/core/extract/extractors/union.d.ts.map +1 -0
- package/dist/core/extract/extractors/union.js +44 -0
- package/dist/core/extract/extractors/union.js.map +1 -0
- package/dist/core/extract/extractors/unknown.d.ts +3 -0
- package/dist/core/extract/extractors/unknown.d.ts.map +1 -0
- package/dist/core/extract/extractors/unknown.js +2 -0
- package/dist/core/extract/extractors/unknown.js.map +1 -0
- package/dist/core/extract/extractors/void.d.ts +3 -0
- package/dist/core/extract/extractors/void.d.ts.map +1 -0
- package/dist/core/extract/extractors/void.js +2 -0
- package/dist/core/extract/extractors/void.js.map +1 -0
- package/dist/core/extract/fallback.d.ts +4 -0
- package/dist/core/extract/fallback.d.ts.map +1 -0
- package/dist/core/extract/fallback.js +9 -0
- package/dist/core/extract/fallback.js.map +1 -0
- package/dist/core/extract/index.d.ts +11 -0
- package/dist/core/extract/index.d.ts.map +1 -0
- package/dist/core/extract/index.js +11 -0
- package/dist/core/extract/index.js.map +1 -0
- package/dist/core/extract/registry.d.ts +59 -0
- package/dist/core/extract/registry.d.ts.map +1 -0
- package/dist/core/extract/registry.js +152 -0
- package/dist/core/extract/registry.js.map +1 -0
- package/dist/core/extract/types.d.ts +114 -0
- package/dist/core/extract/types.d.ts.map +1 -0
- package/dist/core/extract/types.js +2 -0
- package/dist/core/extract/types.js.map +1 -0
- package/dist/core/iife.d.ts +38 -0
- package/dist/core/iife.d.ts.map +1 -0
- package/dist/core/iife.js +59 -0
- package/dist/core/iife.js.map +1 -0
- package/dist/core/pipeline.d.ts +26 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +42 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/types.d.ts +352 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/discovery.d.ts +15 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +40 -0
- package/dist/discovery.js.map +1 -0
- package/dist/index.d.ts +4 -674
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -2553
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +12 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +76 -0
- package/dist/loader.js.map +1 -0
- package/dist/unplugin/bun.d.ts +3 -0
- package/dist/unplugin/bun.d.ts.map +1 -0
- package/dist/unplugin/bun.js +3 -0
- package/dist/unplugin/bun.js.map +1 -0
- package/dist/unplugin/esbuild.d.ts +3 -0
- package/dist/unplugin/esbuild.d.ts.map +1 -0
- package/dist/unplugin/esbuild.js +3 -0
- package/dist/unplugin/esbuild.js.map +1 -0
- package/dist/unplugin/farm.d.ts +3 -0
- package/dist/unplugin/farm.d.ts.map +1 -0
- package/dist/unplugin/farm.js +3 -0
- package/dist/unplugin/farm.js.map +1 -0
- package/dist/unplugin/index.d.ts +4 -0
- package/dist/unplugin/index.d.ts.map +1 -0
- package/dist/unplugin/index.js +75 -0
- package/dist/unplugin/index.js.map +1 -0
- package/dist/unplugin/rolldown.d.ts +3 -0
- package/dist/unplugin/rolldown.d.ts.map +1 -0
- package/dist/unplugin/rolldown.js +3 -0
- package/dist/unplugin/rolldown.js.map +1 -0
- package/dist/unplugin/rollup.d.ts +3 -0
- package/dist/unplugin/rollup.d.ts.map +1 -0
- package/dist/unplugin/rollup.js +3 -0
- package/dist/unplugin/rollup.js.map +1 -0
- package/dist/unplugin/rspack.d.ts +3 -0
- package/dist/unplugin/rspack.d.ts.map +1 -0
- package/dist/unplugin/rspack.js +3 -0
- package/dist/unplugin/rspack.js.map +1 -0
- package/dist/unplugin/transform.d.ts +36 -0
- package/dist/unplugin/transform.d.ts.map +1 -0
- package/dist/unplugin/transform.js +285 -0
- package/dist/unplugin/transform.js.map +1 -0
- package/dist/unplugin/types.d.ts +54 -0
- package/dist/unplugin/types.d.ts.map +1 -0
- package/dist/unplugin/types.js +19 -0
- package/dist/unplugin/types.js.map +1 -0
- package/dist/unplugin/virtual.d.ts +24 -0
- package/dist/unplugin/virtual.d.ts.map +1 -0
- package/dist/unplugin/virtual.js +62 -0
- package/dist/unplugin/virtual.js.map +1 -0
- package/dist/unplugin/vite.d.ts +3 -0
- package/dist/unplugin/vite.d.ts.map +1 -0
- package/dist/unplugin/vite.js +3 -0
- package/dist/unplugin/vite.js.map +1 -0
- package/dist/unplugin/webpack.d.ts +3 -0
- package/dist/unplugin/webpack.d.ts.map +1 -0
- package/dist/unplugin/webpack.js +3 -0
- package/dist/unplugin/webpack.js.map +1 -0
- package/package.json +110 -51
- package/dist/index.mjs +0 -2539
- package/dist/standalone.d.ts +0 -386
- package/dist/standalone.js +0 -540
- package/dist/standalone.mjs +0 -531
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 wakita181009
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,40 +1,393 @@
|
|
|
1
|
-
|
|
2
|
-
<h1>⚡ <code>zod-compiler</code> ⚡</h1>
|
|
3
|
-
</div>
|
|
1
|
+
# zod-compiler
|
|
4
2
|
|
|
5
|
-
|
|
6
|
-
```ts
|
|
7
|
-
import z from 'zod';
|
|
3
|
+
**Compile Zod schemas into zero-overhead validation functions at build time.**
|
|
8
4
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
Keep your existing Zod schemas. Get **2-64x faster** validation. No code changes required.
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
// vite.config.ts — add one line
|
|
9
|
+
import zodCompiler from "zod-compiler/vite";
|
|
10
|
+
export default defineConfig({
|
|
11
|
+
plugins: [zodCompiler({ autoDiscover: true })],
|
|
13
12
|
});
|
|
13
|
+
```
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
```typescript
|
|
16
|
+
// src/schemas.ts — write plain Zod, nothing else
|
|
17
|
+
import { z } from "zod";
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
export const UserSchema = z.object({
|
|
20
|
+
name: z.string().min(3),
|
|
21
|
+
email: z.email(),
|
|
22
|
+
age: z.number().int().positive(),
|
|
23
|
+
});
|
|
21
24
|
|
|
22
|
-
|
|
25
|
+
// Use it anywhere — tRPC, Hono, React Hook Form, etc.
|
|
26
|
+
// At build time, zod-compiler compiles it to a 3-64x faster validator.
|
|
23
27
|
```
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// title: string;
|
|
30
|
-
// tags?: string[];
|
|
31
|
-
// ...
|
|
32
|
-
// };
|
|
29
|
+
## Install
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install zod-compiler zod@^4
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
| Runtime | Version |
|
|
36
|
+
|---------|---------|
|
|
37
|
+
| Node.js | 20+ |
|
|
38
|
+
| Bun | 1.3+ |
|
|
39
|
+
| Deno | 2.0+ |
|
|
40
|
+
|
|
41
|
+
## Usage
|
|
42
|
+
|
|
43
|
+
There are three ways to use zod-compiler. Choose the one that fits your project.
|
|
44
|
+
|
|
45
|
+
### 1. autoDiscover (Recommended)
|
|
46
|
+
|
|
47
|
+
The plugin automatically detects and compiles all exported Zod schemas at build time. No wrappers, no imports from `zod-compiler` in your source code.
|
|
48
|
+
|
|
49
|
+
**vite.config.ts:**
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import zodCompiler from "zod-compiler/vite";
|
|
53
|
+
|
|
54
|
+
export default defineConfig({
|
|
55
|
+
plugins: [zodCompiler({ autoDiscover: true })],
|
|
56
|
+
});
|
|
38
57
|
```
|
|
39
58
|
|
|
40
|
-
|
|
59
|
+
**Your schema file stays pure Zod:**
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// src/schemas.ts
|
|
63
|
+
import { z } from "zod";
|
|
64
|
+
|
|
65
|
+
export const CreateUserSchema = z.object({
|
|
66
|
+
name: z.string().min(1).max(100),
|
|
67
|
+
email: z.email(),
|
|
68
|
+
age: z.number().int().min(0).max(150),
|
|
69
|
+
role: z.enum(["admin", "editor", "viewer"]),
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
export const UpdateUserSchema = z.object({
|
|
73
|
+
name: z.string().min(1).max(100).optional(),
|
|
74
|
+
email: z.email().optional(),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
export const ListUsersSchema = z.object({
|
|
78
|
+
page: z.number().int().min(1).optional().default(1),
|
|
79
|
+
limit: z.number().int().min(1).max(100).optional().default(20),
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Use them as usual:**
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
const user = CreateUserSchema.parse(data); // throws on failure
|
|
87
|
+
const result = CreateUserSchema.safeParse(data); // { success, data/error }
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
At build time, the plugin:
|
|
91
|
+
1. Finds every file with `import ... from "zod"` (skips type-only imports)
|
|
92
|
+
2. Executes the file and detects exported Zod schemas
|
|
93
|
+
3. Compiles each schema into an optimized validator
|
|
94
|
+
4. Replaces the export with a tree-shakeable IIFE that preserves the full Zod API
|
|
95
|
+
|
|
96
|
+
**What "preserves the full Zod API" means:** The compiled schema inherits from the original Zod schema via `Object.create()`. So `._zod`, `.shape`, Standard Schema (`~standard`), `instanceof` checks — all still work. Libraries that accept Zod schemas (tRPC, Hono, React Hook Form) work without changes.
|
|
97
|
+
|
|
98
|
+
### 2. compile() (Explicit)
|
|
99
|
+
|
|
100
|
+
If you prefer explicit opt-in, wrap specific schemas with `compile()`:
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { z } from "zod";
|
|
104
|
+
import { compile } from "zod-compiler";
|
|
105
|
+
|
|
106
|
+
const UserSchema = z.object({
|
|
107
|
+
name: z.string().min(3),
|
|
108
|
+
email: z.email(),
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
export const validateUser = compile(UserSchema);
|
|
112
|
+
|
|
113
|
+
// In dev: falls back to Zod's runtime validation
|
|
114
|
+
// After build: uses AOT-compiled optimized code
|
|
115
|
+
validateUser.parse(data);
|
|
116
|
+
validateUser.safeParse(data);
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`compile()` and `autoDiscover` coexist — `compile()` schemas are detected first, then `autoDiscover` picks up remaining plain Zod exports.
|
|
120
|
+
|
|
121
|
+
### 3. CLI (No Bundler)
|
|
122
|
+
|
|
123
|
+
Generate optimized validation files from the command line:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# Single file
|
|
127
|
+
npx zod-compiler generate src/schemas.ts -o src/schemas.compiled.ts
|
|
128
|
+
|
|
129
|
+
# Directory
|
|
130
|
+
npx zod-compiler generate src/ -o src/compiled/
|
|
131
|
+
|
|
132
|
+
# Watch mode
|
|
133
|
+
npx zod-compiler generate src/ --watch
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Build Plugin
|
|
137
|
+
|
|
138
|
+
### Supported Build Tools
|
|
139
|
+
|
|
140
|
+
| Build Tool | Import |
|
|
141
|
+
|---|---|
|
|
142
|
+
| Vite | `import zodCompiler from "zod-compiler/vite"` |
|
|
143
|
+
| webpack | `import zodCompiler from "zod-compiler/webpack"` |
|
|
144
|
+
| esbuild | `import zodCompiler from "zod-compiler/esbuild"` |
|
|
145
|
+
| Rollup | `import zodCompiler from "zod-compiler/rollup"` |
|
|
146
|
+
| Rolldown | `import zodCompiler from "zod-compiler/rolldown"` |
|
|
147
|
+
| rspack | `import zodCompiler from "zod-compiler/rspack"` |
|
|
148
|
+
| Bun | `import zodCompiler from "zod-compiler/bun"` |
|
|
149
|
+
| Farm | `import zodCompiler from "zod-compiler/farm"` |
|
|
150
|
+
|
|
151
|
+
### Options
|
|
152
|
+
|
|
153
|
+
| Option | Type | Default | Description |
|
|
154
|
+
|---|---|---|---|
|
|
155
|
+
| `autoDiscover` | `boolean` | `false` | Auto-detect all exported Zod schemas without `compile()` |
|
|
156
|
+
| `include` | `string[]` | — | Only process files matching these substrings |
|
|
157
|
+
| `exclude` | `string[]` | — | Skip files matching these substrings |
|
|
158
|
+
| `zodCompat` | `boolean` | `true` | Preserve Zod API via `Object.create()`. Set `false` for smaller output |
|
|
159
|
+
| `verbose` | `boolean` | `false` | Log per-schema compilation status during build |
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
zodCompiler({
|
|
163
|
+
autoDiscover: true,
|
|
164
|
+
include: ["src/schemas"],
|
|
165
|
+
verbose: true,
|
|
166
|
+
})
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Bundle Size & Cross-File Dedup
|
|
170
|
+
|
|
171
|
+
Generated validators share a small runtime helper layer (`__mkv` validator
|
|
172
|
+
wrapper, issue factories like `__zaTS`/`__zaIT`, and well-known regexes for
|
|
173
|
+
`email`, `uuid`, `cuid`, `ipv4`, etc.).
|
|
174
|
+
|
|
175
|
+
On bundlers that support virtual modules — **Vite, Rollup, Rolldown, esbuild,
|
|
176
|
+
Farm, Bun** — the plugin imports these helpers from
|
|
177
|
+
`virtual:zod-compiler/runtime`, so the bundler emits a single bundle-wide copy
|
|
178
|
+
regardless of how many files reference them. webpack and rspack fall back to
|
|
179
|
+
self-contained file-level helpers (a few hundred bytes per file) since they
|
|
180
|
+
reject the `virtual:` URI scheme at the resolver layer.
|
|
181
|
+
|
|
182
|
+
The result: a 5-file project with 10 schemas all using `z.email()` and
|
|
183
|
+
`z.uuid()` produces a bundle where each shared regex appears exactly **once**.
|
|
184
|
+
Set `zodCompat: false` to additionally drop the original Zod schema reference
|
|
185
|
+
when you don't need `instanceof` / `.shape` access on the compiled output.
|
|
186
|
+
|
|
187
|
+
### autoDiscover: Side Effects Warning
|
|
188
|
+
|
|
189
|
+
With `autoDiscover`, the plugin executes files to inspect their exports. If a file imports Zod AND has side effects (starts a server, connects to a database), those side effects run at build time.
|
|
190
|
+
|
|
191
|
+
**Fix:** Use `include` to limit which files are scanned:
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
zodCompiler({
|
|
195
|
+
autoDiscover: true,
|
|
196
|
+
include: ["src/schemas", "src/validators"],
|
|
197
|
+
})
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### autoDiscover vs compile()
|
|
201
|
+
|
|
202
|
+
| | autoDiscover | compile() |
|
|
203
|
+
|---|---|---|
|
|
204
|
+
| Source code changes | None | Wrap each schema |
|
|
205
|
+
| `zod-compiler` import needed | No | Yes |
|
|
206
|
+
| What gets compiled | All exported Zod schemas | Only wrapped schemas |
|
|
207
|
+
| Build-time file execution | Files with `import ... from "zod"` | Files with `import ... from "zod-compiler"` |
|
|
208
|
+
| Best for | New projects, framework integration | Gradual adoption, selective optimization |
|
|
209
|
+
|
|
210
|
+
## Framework Examples
|
|
211
|
+
|
|
212
|
+
### tRPC
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// src/schemas.ts
|
|
216
|
+
import { z } from "zod";
|
|
217
|
+
|
|
218
|
+
export const CreateUserSchema = z.object({
|
|
219
|
+
name: z.string().min(1).max(100),
|
|
220
|
+
email: z.email(),
|
|
221
|
+
age: z.number().int().min(0).max(150),
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
// src/router.ts
|
|
225
|
+
import { CreateUserSchema } from "./schemas";
|
|
226
|
+
|
|
227
|
+
export const appRouter = t.router({
|
|
228
|
+
createUser: t.procedure
|
|
229
|
+
.input(CreateUserSchema)
|
|
230
|
+
.mutation(({ input }) => createUser(input)),
|
|
231
|
+
});
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
With `autoDiscover: true`, `CreateUserSchema` is compiled at build time. The tRPC router uses the optimized version automatically. No `.input(compile(CreateUserSchema))` needed.
|
|
235
|
+
|
|
236
|
+
### Hono
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import { Hono } from "hono";
|
|
240
|
+
import { zValidator } from "@hono/zod-validator";
|
|
241
|
+
import { UserSchema } from "./schemas";
|
|
242
|
+
|
|
243
|
+
const app = new Hono();
|
|
244
|
+
|
|
245
|
+
app.post("/users", zValidator("json", UserSchema), (c) => {
|
|
246
|
+
const user = c.req.valid("json");
|
|
247
|
+
return c.json(user);
|
|
248
|
+
});
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### React Hook Form
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
import { useForm } from "react-hook-form";
|
|
255
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
256
|
+
import { UserSchema } from "./schemas";
|
|
257
|
+
|
|
258
|
+
function UserForm() {
|
|
259
|
+
const form = useForm({
|
|
260
|
+
resolver: zodResolver(UserSchema),
|
|
261
|
+
});
|
|
262
|
+
// ...
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Any Standard Schema Consumer
|
|
267
|
+
|
|
268
|
+
zod-compiler compiled schemas implement [Standard Schema](https://standardschema.dev) via prototype chain. Any library that accepts Standard Schema validators works automatically.
|
|
269
|
+
|
|
270
|
+
## Schema Diagnostics
|
|
271
|
+
|
|
272
|
+
Analyze your schemas before compiling — check coverage, Fast Path eligibility, and get actionable hints:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
npx zod-compiler check src/schemas.ts
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Output:
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
src/schemas.ts
|
|
282
|
+
|
|
283
|
+
CreateUserSchema [Fast Path] 100% compiled (5 checks)
|
|
284
|
+
├─ name: string (min_length, max_length)
|
|
285
|
+
├─ email: string (string_format[email])
|
|
286
|
+
├─ age: number (number_format[safeint], greater_than)
|
|
287
|
+
└─ role: enum
|
|
288
|
+
|
|
289
|
+
OrderSchema [Slow Path] 85% compiled (3 checks)
|
|
290
|
+
├─ id: string (string_format[uuid])
|
|
291
|
+
└─ metadata: object
|
|
292
|
+
└─ audit: fallback(transform)
|
|
293
|
+
Hint: Consider z.pipe() to keep inner schema compilable
|
|
294
|
+
|
|
295
|
+
Summary: 2 schemas | 1 Fast Path, 1 Slow Path | 8/9 nodes (88.9%)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### CI Integration
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
# JSON output
|
|
302
|
+
npx zod-compiler check src/schemas.ts --json
|
|
303
|
+
|
|
304
|
+
# Fail if any schema below 80% coverage
|
|
305
|
+
npx zod-compiler check src/schemas.ts --json --fail-under 80
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
| Flag | Description |
|
|
309
|
+
|---|---|
|
|
310
|
+
| `--json` | Structured JSON output |
|
|
311
|
+
| `--fail-under <pct>` | Exit code 1 if coverage below threshold |
|
|
312
|
+
| `--no-color` | Disable colored output |
|
|
313
|
+
|
|
314
|
+
## What Gets Compiled
|
|
315
|
+
|
|
316
|
+
### Fully Compiled (3-64x faster)
|
|
317
|
+
|
|
318
|
+
`string`, `number`, `bigint`, `boolean`, `null`, `undefined`, `any`, `unknown`, `literal`, `enum`, `date`, `object`, `array`, `tuple`, `record`, `set`, `map`, `union`, `discriminatedUnion`, `intersection`, `pipe` (non-transform), `optional`, `nullable`, `readonly`, `default`, `catch`, `coerce`, `templateLiteral`, `symbol`, `void`, `nan`, `never`, `lazy` (self-recursive)
|
|
319
|
+
|
|
320
|
+
All standard Zod checks are supported: `min`, `max`, `length`, `email`, `url`, `uuid`, `regex`, `int`, `positive`, `negative`, `multipleOf`, `int32`, `uint32`, `float32`, `float64`, `includes`, `startsWith`, `endsWith`, and more.
|
|
321
|
+
|
|
322
|
+
### Falls Back to Zod (Still Works, Not Faster)
|
|
323
|
+
|
|
324
|
+
These types contain JavaScript closures that cannot be compiled to static code:
|
|
325
|
+
|
|
326
|
+
| Type | Why | Alternative |
|
|
327
|
+
|---|---|---|
|
|
328
|
+
| `transform` | Runtime data transformation function | Use `z.pipe()` when possible |
|
|
329
|
+
| `refine` / `superRefine` | Custom validation closures | Use built-in checks when possible |
|
|
330
|
+
| `custom` | Arbitrary validation logic | — |
|
|
331
|
+
| `preprocess` | Input preprocessing function | Use `z.coerce` when possible |
|
|
332
|
+
| `lazy` (non-recursive) | Cannot resolve inner type | Use self-referencing lazy for recursion |
|
|
333
|
+
|
|
334
|
+
**Partial fallback:** If an object has 10 properties and 1 uses `transform`, the other 9 are still compiled. Only the `transform` property falls back to Zod.
|
|
335
|
+
|
|
336
|
+
**Tip:** Run `npx zod-compiler check` to see exactly which parts of your schemas are compiled and which fall back.
|
|
337
|
+
|
|
338
|
+
## Benchmarks
|
|
339
|
+
|
|
340
|
+
5-way comparison: **Zod v3** vs **Zod v4** vs **zod-compiler** vs **[Typia](https://typia.io/)** vs **[AJV](https://ajv.js.org/)**
|
|
341
|
+
|
|
342
|
+
| Scenario | Zod v3 | Zod v4 | **zod-compiler** | Typia | AJV | vs Zod v4 |
|
|
343
|
+
|---|---|---|---|---|---|---|
|
|
344
|
+
| simple string | 8.7M | 10.0M | **11.0M** | 11.0M | 11.1M | 1.1x |
|
|
345
|
+
| string (min/max) | 8.3M | 6.0M | **11.1M** | 11.3M | 9.5M | 1.8x |
|
|
346
|
+
| number (int+positive) | 8.2M | 5.8M | **10.9M** | 10.7M | 10.9M | 1.9x |
|
|
347
|
+
| enum | 8.0M | 9.5M | **10.6M** | 10.6M | 10.5M | 1.1x |
|
|
348
|
+
| bigint (min/max) | 8.0M | 6.0M | **10.9M** | — | — | 1.8x |
|
|
349
|
+
| tuple [string, int, bool] | 4.0M | 4.4M | **10.5M** | 10.8M | 10.5M | 2.4x |
|
|
350
|
+
| record\<string, number\> | 2.3M | 1.9M | **5.4M** | 7.5M | 9.4M | 2.8x |
|
|
351
|
+
| set\<string\> (5 items) | 2.7M | 1.6M | **9.8M** | — | — | 6.3x |
|
|
352
|
+
| set\<string\> (20 items) | 1.0M | 475K | **7.7M** | — | — | **16x** |
|
|
353
|
+
| map\<string, number\> (5 entries) | 1.5M | 946K | **8.5M** | — | — | 9.0x |
|
|
354
|
+
| map\<string, number\> (20 entries) | 490K | 238K | **5.2M** | — | — | **22x** |
|
|
355
|
+
| pipe (non-transform) | 6.3M | 3.8M | **10.8M** | — | — | 2.8x |
|
|
356
|
+
| discriminatedUnion (3 variants) | 2.3M | 2.9M | **9.8M** | 10.4M | 5.6M | 3.4x |
|
|
357
|
+
| medium object (valid) | 1.3M | 1.7M | **5.4M** | 7.3M | 5.0M | 3.1x |
|
|
358
|
+
| medium object (invalid) | 351K | 65K | **471K** | 2.1M | 5.6M | 7.3x |
|
|
359
|
+
| large object (10 items) | 82K | 111K | **4.0M** | 4.1M | 834K | **36x** |
|
|
360
|
+
| large object (100 items) | 9.0K | 11.6K | **676K** | 808K | 89K | **58x** |
|
|
361
|
+
| recursive tree (7 nodes) | 424K | 1.5M | **6.4M** | 8.1M | 3.1M | 4.1x |
|
|
362
|
+
| recursive tree (121 nodes) | 24K | 101K | **741K** | 1.4M | 250K | 7.4x |
|
|
363
|
+
| event log (combined) | 260K | 479K | **4.5M** | — | — | 9.4x |
|
|
364
|
+
| partial fallback obj (transform) | 817K | 1.4M | **3.3M** | — | — | 2.3x |
|
|
365
|
+
| partial fallback arr 10 (transform) | 88K | 139K | **841K** | — | — | 6.1x |
|
|
366
|
+
| partial fallback arr 50 (transform) | 18K | 28K | **175K** | — | — | 6.3x |
|
|
367
|
+
|
|
368
|
+
*ops/s, higher is better. "—" = not supported by the library. Measured with `vitest bench` on Apple M-series.*
|
|
369
|
+
|
|
370
|
+
Performance scales with schema complexity. Nested objects and arrays see the biggest gains because zod-compiler eliminates per-node traversal overhead. `discriminatedUnion` uses O(1) `switch` dispatch instead of Zod's sequential trial. Partial fallback schemas (containing `transform`/`refine`) still show 2-6x speedups.
|
|
371
|
+
|
|
372
|
+
```bash
|
|
373
|
+
pnpm bench # run locally
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### Performance Architecture
|
|
377
|
+
|
|
378
|
+
For eligible schemas, zod-compiler generates a **two-phase validator**:
|
|
379
|
+
|
|
380
|
+
1. **Fast Path** — A single `&&` expression chain that validates the entire input with zero allocations. Valid input returns immediately.
|
|
381
|
+
2. **Slow Path** — Error-collecting validation that only runs when the Fast Path fails.
|
|
382
|
+
|
|
383
|
+
Additional optimizations: check ordering (cheap checks first), pre-compiled regex, Set-based enum lookups, small enum inlining (`===` for 1-3 values).
|
|
384
|
+
|
|
385
|
+
Run `npx zod-compiler check --json` to see which schemas qualify for Fast Path.
|
|
386
|
+
|
|
387
|
+
## Acknowledgements
|
|
388
|
+
|
|
389
|
+
zod-compiler started as a fork of [zod-aot](https://github.com/wakita181009/zod-aot) by [@wakita181009](https://github.com/wakita181009). The compilation pipeline, build-plugin integration, and benchmark suite originate from that project.
|
|
390
|
+
|
|
391
|
+
## License
|
|
392
|
+
|
|
393
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
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;IACjB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqHnE"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { diagnoseSchema } from "#src/core/diagnostic.js";
|
|
5
|
+
import { extractSchema } from "#src/core/extract/index.js";
|
|
6
|
+
import { discoverSchemas } from "#src/discovery.js";
|
|
7
|
+
import { getErrorMessage } from "../errors.js";
|
|
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}`);
|
|
22
|
+
}
|
|
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));
|
|
26
|
+
}
|
|
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
|
+
};
|
|
49
|
+
}
|
|
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);
|
|
57
|
+
const files = [];
|
|
58
|
+
for (const input of options.inputs) {
|
|
59
|
+
const absPath = path.resolve(input);
|
|
60
|
+
const stat = await fs.promises.stat(absPath).catch(() => null);
|
|
61
|
+
if (!stat) {
|
|
62
|
+
logger.error(`File not found: ${input}`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
if (stat.isDirectory()) {
|
|
66
|
+
logger.error("check command expects file paths, not directories.");
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
files.push(absPath);
|
|
70
|
+
}
|
|
71
|
+
const allJsonReports = [];
|
|
72
|
+
let minCoverage = 100;
|
|
73
|
+
let schemasProcessed = 0;
|
|
74
|
+
for (const filePath of files) {
|
|
75
|
+
const relPath = path.relative(process.cwd(), filePath);
|
|
76
|
+
let schemas;
|
|
77
|
+
try {
|
|
78
|
+
schemas = await discoverSchemas(filePath, { autoDiscover: options.autoDiscover });
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
logger.error(`Failed to load ${relPath}: ${getErrorMessage(e)}`);
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
if (schemas.length === 0) {
|
|
85
|
+
const hint = options.autoDiscover
|
|
86
|
+
? "no Zod schemas exported"
|
|
87
|
+
: "no compile() calls found (use --auto-discover to scan plain Zod exports)";
|
|
88
|
+
logger.warn(`${relPath}: ${hint}`);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const results = [];
|
|
92
|
+
for (const s of schemas) {
|
|
93
|
+
let ir;
|
|
94
|
+
try {
|
|
95
|
+
ir = extractSchema(s.schema);
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
err(`${c.red}error${c.reset} Failed to extract "${s.exportName}" in ${relPath}: ${getErrorMessage(e)}`);
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const diagnostic = diagnoseSchema(ir);
|
|
102
|
+
results.push({ exportName: s.exportName, diagnostic });
|
|
103
|
+
schemasProcessed++;
|
|
104
|
+
if (diagnostic.coveragePct < minCoverage) {
|
|
105
|
+
minCoverage = diagnostic.coveragePct;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (options.json) {
|
|
109
|
+
allJsonReports.push(buildJsonReport(relPath, results));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
out(`\n${c.bold}${relPath}${c.reset}`);
|
|
113
|
+
for (const { exportName, diagnostic } of results) {
|
|
114
|
+
const pctColor = diagnostic.coveragePct === 100 ? c.green : c.yellow;
|
|
115
|
+
const fpLabel = diagnostic.fastPathEligible
|
|
116
|
+
? `${c.green}Fast Path: eligible${c.reset}`
|
|
117
|
+
: `${c.yellow}Fast Path: ineligible${c.reset}${c.dim} (${diagnostic.fastPathBlocker})${c.reset}`;
|
|
118
|
+
out(`\n ${c.cyan}${exportName}${c.reset} — ${pctColor}${diagnostic.coveragePct}%${c.reset} compiled (${diagnostic.compilable}/${diagnostic.total} nodes) | ${fpLabel}`);
|
|
119
|
+
const treeLines = renderTree(diagnostic.root, c, " ");
|
|
120
|
+
for (const line of treeLines) {
|
|
121
|
+
out(line);
|
|
122
|
+
}
|
|
123
|
+
if (diagnostic.fallbacks.length > 0) {
|
|
124
|
+
out(`\n ${c.yellow}Fallbacks:${c.reset}`);
|
|
125
|
+
for (const fb of diagnostic.fallbacks) {
|
|
126
|
+
out(` ${c.red}✗${c.reset} ${fb.path} — ${fb.reason}`);
|
|
127
|
+
out(` ${c.dim}${fb.hint}${c.reset}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (options.json) {
|
|
134
|
+
out(JSON.stringify(allJsonReports, null, 2));
|
|
135
|
+
}
|
|
136
|
+
if (options.failUnder !== undefined) {
|
|
137
|
+
if (schemasProcessed === 0) {
|
|
138
|
+
logger.error("No schemas were analyzed — cannot satisfy --fail-under");
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
if (minCoverage < options.failUnder) {
|
|
142
|
+
logger.error(`Coverage ${minCoverage}% is below threshold ${options.failUnder}%`);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else if (schemasProcessed === 0) {
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface GenerateOptions {
|
|
2
|
+
inputs: string[];
|
|
3
|
+
output: string | undefined;
|
|
4
|
+
zodCompat?: boolean | undefined;
|
|
5
|
+
autoDiscover?: boolean | undefined;
|
|
6
|
+
}
|
|
7
|
+
export interface GenerateFileResult {
|
|
8
|
+
filePath: string;
|
|
9
|
+
outputPath: string;
|
|
10
|
+
schemaCount: number;
|
|
11
|
+
schemaNames: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if a filename is a schema file candidate.
|
|
15
|
+
* Shared filter logic used by both findSchemaFiles and isWatchTarget.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isSchemaFile(fileName: string): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve input paths to a list of source files.
|
|
20
|
+
* If a path is a directory, find all .ts files (excluding .compiled.ts, .test.ts, node_modules).
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveInputFiles(inputs: string[]): Promise<string[]>;
|
|
23
|
+
export declare function findSchemaFiles(dir: string): Promise<string[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Generate compiled output for a single source file.
|
|
26
|
+
* Returns null if no compile() calls are found.
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateFile(filePath: string, outputFlag: string | undefined, options?: {
|
|
29
|
+
cacheBust?: boolean | undefined;
|
|
30
|
+
zodCompat?: boolean | undefined;
|
|
31
|
+
autoDiscover?: boolean | undefined;
|
|
32
|
+
}): Promise<GenerateFileResult | null>;
|
|
33
|
+
export declare function runGenerate(options: GenerateOptions): Promise<void>;
|
|
34
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAStD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqB3E;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBpE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC,GACA,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiCpC;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CzE"}
|