zod-compiler 0.1.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +381 -28
  3. package/dist/cli/commands/check.d.ts +9 -0
  4. package/dist/cli/commands/check.d.ts.map +1 -0
  5. package/dist/cli/commands/check.js +150 -0
  6. package/dist/cli/commands/check.js.map +1 -0
  7. package/dist/cli/commands/generate.d.ts +33 -0
  8. package/dist/cli/commands/generate.d.ts.map +1 -0
  9. package/dist/cli/commands/generate.js +142 -0
  10. package/dist/cli/commands/generate.js.map +1 -0
  11. package/dist/cli/commands/watch.d.ts +33 -0
  12. package/dist/cli/commands/watch.d.ts.map +1 -0
  13. package/dist/cli/commands/watch.js +166 -0
  14. package/dist/cli/commands/watch.js.map +1 -0
  15. package/dist/cli/emitter.d.ts +21 -0
  16. package/dist/cli/emitter.d.ts.map +1 -0
  17. package/dist/cli/emitter.js +64 -0
  18. package/dist/cli/emitter.js.map +1 -0
  19. package/dist/cli/errors.d.ts +2 -0
  20. package/dist/cli/errors.d.ts.map +1 -0
  21. package/dist/cli/errors.js +4 -0
  22. package/dist/cli/errors.js.map +1 -0
  23. package/dist/cli/index.d.ts +3 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +181 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/logger.d.ts +18 -0
  28. package/dist/cli/logger.d.ts.map +1 -0
  29. package/dist/cli/logger.js +46 -0
  30. package/dist/cli/logger.js.map +1 -0
  31. package/dist/core/codegen/context.d.ts +138 -0
  32. package/dist/core/codegen/context.d.ts.map +1 -0
  33. package/dist/core/codegen/context.js +213 -0
  34. package/dist/core/codegen/context.js.map +1 -0
  35. package/dist/core/codegen/emit-issue.d.ts +74 -0
  36. package/dist/core/codegen/emit-issue.d.ts.map +1 -0
  37. package/dist/core/codegen/emit-issue.js +116 -0
  38. package/dist/core/codegen/emit-issue.js.map +1 -0
  39. package/dist/core/codegen/emit.d.ts +8 -0
  40. package/dist/core/codegen/emit.d.ts.map +1 -0
  41. package/dist/core/codegen/emit.js +16 -0
  42. package/dist/core/codegen/emit.js.map +1 -0
  43. package/dist/core/codegen/fast-path.d.ts +17 -0
  44. package/dist/core/codegen/fast-path.d.ts.map +1 -0
  45. package/dist/core/codegen/fast-path.js +114 -0
  46. package/dist/core/codegen/fast-path.js.map +1 -0
  47. package/dist/core/codegen/index.d.ts +19 -0
  48. package/dist/core/codegen/index.d.ts.map +1 -0
  49. package/dist/core/codegen/index.js +54 -0
  50. package/dist/core/codegen/index.js.map +1 -0
  51. package/dist/core/codegen/issue-decls.d.ts +37 -0
  52. package/dist/core/codegen/issue-decls.d.ts.map +1 -0
  53. package/dist/core/codegen/issue-decls.js +47 -0
  54. package/dist/core/codegen/issue-decls.js.map +1 -0
  55. package/dist/core/codegen/schemas/any.d.ts +5 -0
  56. package/dist/core/codegen/schemas/any.d.ts.map +1 -0
  57. package/dist/core/codegen/schemas/any.js +7 -0
  58. package/dist/core/codegen/schemas/any.js.map +1 -0
  59. package/dist/core/codegen/schemas/array.d.ts +7 -0
  60. package/dist/core/codegen/schemas/array.d.ts.map +1 -0
  61. package/dist/core/codegen/schemas/array.js +86 -0
  62. package/dist/core/codegen/schemas/array.js.map +1 -0
  63. package/dist/core/codegen/schemas/bigint.d.ts +5 -0
  64. package/dist/core/codegen/schemas/bigint.d.ts.map +1 -0
  65. package/dist/core/codegen/schemas/bigint.js +80 -0
  66. package/dist/core/codegen/schemas/bigint.js.map +1 -0
  67. package/dist/core/codegen/schemas/boolean.d.ts +5 -0
  68. package/dist/core/codegen/schemas/boolean.d.ts.map +1 -0
  69. package/dist/core/codegen/schemas/boolean.js +20 -0
  70. package/dist/core/codegen/schemas/boolean.js.map +1 -0
  71. package/dist/core/codegen/schemas/catch.d.ts +7 -0
  72. package/dist/core/codegen/schemas/catch.d.ts.map +1 -0
  73. package/dist/core/codegen/schemas/catch.js +26 -0
  74. package/dist/core/codegen/schemas/catch.js.map +1 -0
  75. package/dist/core/codegen/schemas/date.d.ts +5 -0
  76. package/dist/core/codegen/schemas/date.d.ts.map +1 -0
  77. package/dist/core/codegen/schemas/date.js +79 -0
  78. package/dist/core/codegen/schemas/date.js.map +1 -0
  79. package/dist/core/codegen/schemas/default.d.ts +5 -0
  80. package/dist/core/codegen/schemas/default.d.ts.map +1 -0
  81. package/dist/core/codegen/schemas/default.js +17 -0
  82. package/dist/core/codegen/schemas/default.js.map +1 -0
  83. package/dist/core/codegen/schemas/discriminated-union.d.ts +7 -0
  84. package/dist/core/codegen/schemas/discriminated-union.d.ts.map +1 -0
  85. package/dist/core/codegen/schemas/discriminated-union.js +45 -0
  86. package/dist/core/codegen/schemas/discriminated-union.js.map +1 -0
  87. package/dist/core/codegen/schemas/effect.d.ts +17 -0
  88. package/dist/core/codegen/schemas/effect.d.ts.map +1 -0
  89. package/dist/core/codegen/schemas/effect.js +35 -0
  90. package/dist/core/codegen/schemas/effect.js.map +1 -0
  91. package/dist/core/codegen/schemas/enum.d.ts +5 -0
  92. package/dist/core/codegen/schemas/enum.d.ts.map +1 -0
  93. package/dist/core/codegen/schemas/enum.js +33 -0
  94. package/dist/core/codegen/schemas/enum.js.map +1 -0
  95. package/dist/core/codegen/schemas/fallback.d.ts +4 -0
  96. package/dist/core/codegen/schemas/fallback.d.ts.map +1 -0
  97. package/dist/core/codegen/schemas/fallback.js +23 -0
  98. package/dist/core/codegen/schemas/fallback.js.map +1 -0
  99. package/dist/core/codegen/schemas/file.d.ts +5 -0
  100. package/dist/core/codegen/schemas/file.d.ts.map +1 -0
  101. package/dist/core/codegen/schemas/file.js +78 -0
  102. package/dist/core/codegen/schemas/file.js.map +1 -0
  103. package/dist/core/codegen/schemas/intersection.d.ts +7 -0
  104. package/dist/core/codegen/schemas/intersection.d.ts.map +1 -0
  105. package/dist/core/codegen/schemas/intersection.js +13 -0
  106. package/dist/core/codegen/schemas/intersection.js.map +1 -0
  107. package/dist/core/codegen/schemas/literal.d.ts +5 -0
  108. package/dist/core/codegen/schemas/literal.d.ts.map +1 -0
  109. package/dist/core/codegen/schemas/literal.js +31 -0
  110. package/dist/core/codegen/schemas/literal.js.map +1 -0
  111. package/dist/core/codegen/schemas/map.d.ts +7 -0
  112. package/dist/core/codegen/schemas/map.d.ts.map +1 -0
  113. package/dist/core/codegen/schemas/map.js +46 -0
  114. package/dist/core/codegen/schemas/map.js.map +1 -0
  115. package/dist/core/codegen/schemas/nan.d.ts +5 -0
  116. package/dist/core/codegen/schemas/nan.d.ts.map +1 -0
  117. package/dist/core/codegen/schemas/nan.js +13 -0
  118. package/dist/core/codegen/schemas/nan.js.map +1 -0
  119. package/dist/core/codegen/schemas/never.d.ts +5 -0
  120. package/dist/core/codegen/schemas/never.d.ts.map +1 -0
  121. package/dist/core/codegen/schemas/never.js +11 -0
  122. package/dist/core/codegen/schemas/never.js.map +1 -0
  123. package/dist/core/codegen/schemas/null.d.ts +5 -0
  124. package/dist/core/codegen/schemas/null.d.ts.map +1 -0
  125. package/dist/core/codegen/schemas/null.js +13 -0
  126. package/dist/core/codegen/schemas/null.js.map +1 -0
  127. package/dist/core/codegen/schemas/nullable.d.ts +7 -0
  128. package/dist/core/codegen/schemas/nullable.d.ts.map +1 -0
  129. package/dist/core/codegen/schemas/nullable.js +15 -0
  130. package/dist/core/codegen/schemas/nullable.js.map +1 -0
  131. package/dist/core/codegen/schemas/number.d.ts +5 -0
  132. package/dist/core/codegen/schemas/number.d.ts.map +1 -0
  133. package/dist/core/codegen/schemas/number.js +186 -0
  134. package/dist/core/codegen/schemas/number.js.map +1 -0
  135. package/dist/core/codegen/schemas/object.d.ts +7 -0
  136. package/dist/core/codegen/schemas/object.d.ts.map +1 -0
  137. package/dist/core/codegen/schemas/object.js +65 -0
  138. package/dist/core/codegen/schemas/object.js.map +1 -0
  139. package/dist/core/codegen/schemas/optional.d.ts +7 -0
  140. package/dist/core/codegen/schemas/optional.d.ts.map +1 -0
  141. package/dist/core/codegen/schemas/optional.js +15 -0
  142. package/dist/core/codegen/schemas/optional.js.map +1 -0
  143. package/dist/core/codegen/schemas/pipe.d.ts +7 -0
  144. package/dist/core/codegen/schemas/pipe.d.ts.map +1 -0
  145. package/dist/core/codegen/schemas/pipe.js +18 -0
  146. package/dist/core/codegen/schemas/pipe.js.map +1 -0
  147. package/dist/core/codegen/schemas/readonly.d.ts +7 -0
  148. package/dist/core/codegen/schemas/readonly.d.ts.map +1 -0
  149. package/dist/core/codegen/schemas/readonly.js +7 -0
  150. package/dist/core/codegen/schemas/readonly.js.map +1 -0
  151. package/dist/core/codegen/schemas/record.d.ts +7 -0
  152. package/dist/core/codegen/schemas/record.d.ts.map +1 -0
  153. package/dist/core/codegen/schemas/record.js +53 -0
  154. package/dist/core/codegen/schemas/record.js.map +1 -0
  155. package/dist/core/codegen/schemas/recursive-ref.d.ts +5 -0
  156. package/dist/core/codegen/schemas/recursive-ref.d.ts.map +1 -0
  157. package/dist/core/codegen/schemas/recursive-ref.js +24 -0
  158. package/dist/core/codegen/schemas/recursive-ref.js.map +1 -0
  159. package/dist/core/codegen/schemas/set.d.ts +7 -0
  160. package/dist/core/codegen/schemas/set.d.ts.map +1 -0
  161. package/dist/core/codegen/schemas/set.js +88 -0
  162. package/dist/core/codegen/schemas/set.js.map +1 -0
  163. package/dist/core/codegen/schemas/string-bool.d.ts +4 -0
  164. package/dist/core/codegen/schemas/string-bool.d.ts.map +1 -0
  165. package/dist/core/codegen/schemas/string-bool.js +39 -0
  166. package/dist/core/codegen/schemas/string-bool.js.map +1 -0
  167. package/dist/core/codegen/schemas/string.d.ts +5 -0
  168. package/dist/core/codegen/schemas/string.d.ts.map +1 -0
  169. package/dist/core/codegen/schemas/string.js +226 -0
  170. package/dist/core/codegen/schemas/string.js.map +1 -0
  171. package/dist/core/codegen/schemas/symbol.d.ts +5 -0
  172. package/dist/core/codegen/schemas/symbol.d.ts.map +1 -0
  173. package/dist/core/codegen/schemas/symbol.js +13 -0
  174. package/dist/core/codegen/schemas/symbol.js.map +1 -0
  175. package/dist/core/codegen/schemas/template-literal.d.ts +5 -0
  176. package/dist/core/codegen/schemas/template-literal.d.ts.map +1 -0
  177. package/dist/core/codegen/schemas/template-literal.js +16 -0
  178. package/dist/core/codegen/schemas/template-literal.js.map +1 -0
  179. package/dist/core/codegen/schemas/tuple.d.ts +15 -0
  180. package/dist/core/codegen/schemas/tuple.d.ts.map +1 -0
  181. package/dist/core/codegen/schemas/tuple.js +111 -0
  182. package/dist/core/codegen/schemas/tuple.js.map +1 -0
  183. package/dist/core/codegen/schemas/undefined.d.ts +5 -0
  184. package/dist/core/codegen/schemas/undefined.d.ts.map +1 -0
  185. package/dist/core/codegen/schemas/undefined.js +13 -0
  186. package/dist/core/codegen/schemas/undefined.js.map +1 -0
  187. package/dist/core/codegen/schemas/union.d.ts +7 -0
  188. package/dist/core/codegen/schemas/union.d.ts.map +1 -0
  189. package/dist/core/codegen/schemas/union.js +95 -0
  190. package/dist/core/codegen/schemas/union.js.map +1 -0
  191. package/dist/core/codegen/schemas/unknown.d.ts +5 -0
  192. package/dist/core/codegen/schemas/unknown.d.ts.map +1 -0
  193. package/dist/core/codegen/schemas/unknown.js +7 -0
  194. package/dist/core/codegen/schemas/unknown.js.map +1 -0
  195. package/dist/core/codegen/schemas/void.d.ts +5 -0
  196. package/dist/core/codegen/schemas/void.d.ts.map +1 -0
  197. package/dist/core/codegen/schemas/void.js +13 -0
  198. package/dist/core/codegen/schemas/void.js.map +1 -0
  199. package/dist/core/codegen/slow-path.d.ts +5 -0
  200. package/dist/core/codegen/slow-path.d.ts.map +1 -0
  201. package/dist/core/codegen/slow-path.js +113 -0
  202. package/dist/core/codegen/slow-path.js.map +1 -0
  203. package/dist/core/codegen/well-known-regex.d.ts +27 -0
  204. package/dist/core/codegen/well-known-regex.d.ts.map +1 -0
  205. package/dist/core/codegen/well-known-regex.js +51 -0
  206. package/dist/core/codegen/well-known-regex.js.map +1 -0
  207. package/dist/core/compile.d.ts +19 -0
  208. package/dist/core/compile.d.ts.map +1 -0
  209. package/dist/core/compile.js +37 -0
  210. package/dist/core/compile.js.map +1 -0
  211. package/dist/core/diagnostic.d.ts +46 -0
  212. package/dist/core/diagnostic.d.ts.map +1 -0
  213. package/dist/core/diagnostic.js +174 -0
  214. package/dist/core/diagnostic.js.map +1 -0
  215. package/dist/core/extract/checks.d.ts +35 -0
  216. package/dist/core/extract/checks.d.ts.map +1 -0
  217. package/dist/core/extract/checks.js +249 -0
  218. package/dist/core/extract/checks.js.map +1 -0
  219. package/dist/core/extract/effects.d.ts +12 -0
  220. package/dist/core/extract/effects.d.ts.map +1 -0
  221. package/dist/core/extract/effects.js +204 -0
  222. package/dist/core/extract/effects.js.map +1 -0
  223. package/dist/core/extract/extractors/any.d.ts +3 -0
  224. package/dist/core/extract/extractors/any.d.ts.map +1 -0
  225. package/dist/core/extract/extractors/any.js +2 -0
  226. package/dist/core/extract/extractors/any.js.map +1 -0
  227. package/dist/core/extract/extractors/array.d.ts +4 -0
  228. package/dist/core/extract/extractors/array.d.ts.map +1 -0
  229. package/dist/core/extract/extractors/array.js +19 -0
  230. package/dist/core/extract/extractors/array.js.map +1 -0
  231. package/dist/core/extract/extractors/bigint.d.ts +4 -0
  232. package/dist/core/extract/extractors/bigint.d.ts.map +1 -0
  233. package/dist/core/extract/extractors/bigint.js +70 -0
  234. package/dist/core/extract/extractors/bigint.js.map +1 -0
  235. package/dist/core/extract/extractors/boolean.d.ts +3 -0
  236. package/dist/core/extract/extractors/boolean.d.ts.map +1 -0
  237. package/dist/core/extract/extractors/boolean.js +5 -0
  238. package/dist/core/extract/extractors/boolean.js.map +1 -0
  239. package/dist/core/extract/extractors/catch.d.ts +11 -0
  240. package/dist/core/extract/extractors/catch.d.ts.map +1 -0
  241. package/dist/core/extract/extractors/catch.js +20 -0
  242. package/dist/core/extract/extractors/catch.js.map +1 -0
  243. package/dist/core/extract/extractors/date.d.ts +4 -0
  244. package/dist/core/extract/extractors/date.d.ts.map +1 -0
  245. package/dist/core/extract/extractors/date.js +49 -0
  246. package/dist/core/extract/extractors/date.js.map +1 -0
  247. package/dist/core/extract/extractors/default.d.ts +4 -0
  248. package/dist/core/extract/extractors/default.d.ts.map +1 -0
  249. package/dist/core/extract/extractors/default.js +11 -0
  250. package/dist/core/extract/extractors/default.js.map +1 -0
  251. package/dist/core/extract/extractors/enum.d.ts +3 -0
  252. package/dist/core/extract/extractors/enum.d.ts.map +1 -0
  253. package/dist/core/extract/extractors/enum.js +15 -0
  254. package/dist/core/extract/extractors/enum.js.map +1 -0
  255. package/dist/core/extract/extractors/file.d.ts +4 -0
  256. package/dist/core/extract/extractors/file.d.ts.map +1 -0
  257. package/dist/core/extract/extractors/file.js +24 -0
  258. package/dist/core/extract/extractors/file.js.map +1 -0
  259. package/dist/core/extract/extractors/index.d.ts +32 -0
  260. package/dist/core/extract/extractors/index.d.ts.map +1 -0
  261. package/dist/core/extract/extractors/index.js +32 -0
  262. package/dist/core/extract/extractors/index.js.map +1 -0
  263. package/dist/core/extract/extractors/intersection.d.ts +3 -0
  264. package/dist/core/extract/extractors/intersection.d.ts.map +1 -0
  265. package/dist/core/extract/extractors/intersection.js +14 -0
  266. package/dist/core/extract/extractors/intersection.js.map +1 -0
  267. package/dist/core/extract/extractors/lazy.d.ts +4 -0
  268. package/dist/core/extract/extractors/lazy.d.ts.map +1 -0
  269. package/dist/core/extract/extractors/lazy.js +23 -0
  270. package/dist/core/extract/extractors/lazy.js.map +1 -0
  271. package/dist/core/extract/extractors/literal.d.ts +3 -0
  272. package/dist/core/extract/extractors/literal.d.ts.map +1 -0
  273. package/dist/core/extract/extractors/literal.js +2 -0
  274. package/dist/core/extract/extractors/literal.js.map +1 -0
  275. package/dist/core/extract/extractors/map.d.ts +4 -0
  276. package/dist/core/extract/extractors/map.d.ts.map +1 -0
  277. package/dist/core/extract/extractors/map.js +6 -0
  278. package/dist/core/extract/extractors/map.js.map +1 -0
  279. package/dist/core/extract/extractors/nan.d.ts +3 -0
  280. package/dist/core/extract/extractors/nan.d.ts.map +1 -0
  281. package/dist/core/extract/extractors/nan.js +2 -0
  282. package/dist/core/extract/extractors/nan.js.map +1 -0
  283. package/dist/core/extract/extractors/never.d.ts +3 -0
  284. package/dist/core/extract/extractors/never.d.ts.map +1 -0
  285. package/dist/core/extract/extractors/never.js +2 -0
  286. package/dist/core/extract/extractors/never.js.map +1 -0
  287. package/dist/core/extract/extractors/null.d.ts +3 -0
  288. package/dist/core/extract/extractors/null.d.ts.map +1 -0
  289. package/dist/core/extract/extractors/null.js +2 -0
  290. package/dist/core/extract/extractors/null.js.map +1 -0
  291. package/dist/core/extract/extractors/nullable.d.ts +3 -0
  292. package/dist/core/extract/extractors/nullable.d.ts.map +1 -0
  293. package/dist/core/extract/extractors/nullable.js +5 -0
  294. package/dist/core/extract/extractors/nullable.js.map +1 -0
  295. package/dist/core/extract/extractors/number.d.ts +4 -0
  296. package/dist/core/extract/extractors/number.d.ts.map +1 -0
  297. package/dist/core/extract/extractors/number.js +38 -0
  298. package/dist/core/extract/extractors/number.js.map +1 -0
  299. package/dist/core/extract/extractors/object.d.ts +4 -0
  300. package/dist/core/extract/extractors/object.d.ts.map +1 -0
  301. package/dist/core/extract/extractors/object.js +43 -0
  302. package/dist/core/extract/extractors/object.js.map +1 -0
  303. package/dist/core/extract/extractors/optional.d.ts +3 -0
  304. package/dist/core/extract/extractors/optional.d.ts.map +1 -0
  305. package/dist/core/extract/extractors/optional.js +14 -0
  306. package/dist/core/extract/extractors/optional.js.map +1 -0
  307. package/dist/core/extract/extractors/pipe.d.ts +4 -0
  308. package/dist/core/extract/extractors/pipe.d.ts.map +1 -0
  309. package/dist/core/extract/extractors/pipe.js +31 -0
  310. package/dist/core/extract/extractors/pipe.js.map +1 -0
  311. package/dist/core/extract/extractors/readonly.d.ts +9 -0
  312. package/dist/core/extract/extractors/readonly.d.ts.map +1 -0
  313. package/dist/core/extract/extractors/readonly.js +8 -0
  314. package/dist/core/extract/extractors/readonly.js.map +1 -0
  315. package/dist/core/extract/extractors/record.d.ts +4 -0
  316. package/dist/core/extract/extractors/record.d.ts.map +1 -0
  317. package/dist/core/extract/extractors/record.js +39 -0
  318. package/dist/core/extract/extractors/record.js.map +1 -0
  319. package/dist/core/extract/extractors/set.d.ts +4 -0
  320. package/dist/core/extract/extractors/set.d.ts.map +1 -0
  321. package/dist/core/extract/extractors/set.js +33 -0
  322. package/dist/core/extract/extractors/set.js.map +1 -0
  323. package/dist/core/extract/extractors/string-bool.d.ts +10 -0
  324. package/dist/core/extract/extractors/string-bool.d.ts.map +1 -0
  325. package/dist/core/extract/extractors/string-bool.js +92 -0
  326. package/dist/core/extract/extractors/string-bool.js.map +1 -0
  327. package/dist/core/extract/extractors/string.d.ts +4 -0
  328. package/dist/core/extract/extractors/string.d.ts.map +1 -0
  329. package/dist/core/extract/extractors/string.js +41 -0
  330. package/dist/core/extract/extractors/string.js.map +1 -0
  331. package/dist/core/extract/extractors/symbol.d.ts +3 -0
  332. package/dist/core/extract/extractors/symbol.d.ts.map +1 -0
  333. package/dist/core/extract/extractors/symbol.js +2 -0
  334. package/dist/core/extract/extractors/symbol.js.map +1 -0
  335. package/dist/core/extract/extractors/template-literal.d.ts +4 -0
  336. package/dist/core/extract/extractors/template-literal.d.ts.map +1 -0
  337. package/dist/core/extract/extractors/template-literal.js +8 -0
  338. package/dist/core/extract/extractors/template-literal.js.map +1 -0
  339. package/dist/core/extract/extractors/tuple.d.ts +4 -0
  340. package/dist/core/extract/extractors/tuple.d.ts.map +1 -0
  341. package/dist/core/extract/extractors/tuple.js +6 -0
  342. package/dist/core/extract/extractors/tuple.js.map +1 -0
  343. package/dist/core/extract/extractors/undefined.d.ts +3 -0
  344. package/dist/core/extract/extractors/undefined.d.ts.map +1 -0
  345. package/dist/core/extract/extractors/undefined.js +2 -0
  346. package/dist/core/extract/extractors/undefined.js.map +1 -0
  347. package/dist/core/extract/extractors/union.d.ts +4 -0
  348. package/dist/core/extract/extractors/union.d.ts.map +1 -0
  349. package/dist/core/extract/extractors/union.js +44 -0
  350. package/dist/core/extract/extractors/union.js.map +1 -0
  351. package/dist/core/extract/extractors/unknown.d.ts +3 -0
  352. package/dist/core/extract/extractors/unknown.d.ts.map +1 -0
  353. package/dist/core/extract/extractors/unknown.js +2 -0
  354. package/dist/core/extract/extractors/unknown.js.map +1 -0
  355. package/dist/core/extract/extractors/void.d.ts +3 -0
  356. package/dist/core/extract/extractors/void.d.ts.map +1 -0
  357. package/dist/core/extract/extractors/void.js +2 -0
  358. package/dist/core/extract/extractors/void.js.map +1 -0
  359. package/dist/core/extract/fallback.d.ts +4 -0
  360. package/dist/core/extract/fallback.d.ts.map +1 -0
  361. package/dist/core/extract/fallback.js +9 -0
  362. package/dist/core/extract/fallback.js.map +1 -0
  363. package/dist/core/extract/index.d.ts +11 -0
  364. package/dist/core/extract/index.d.ts.map +1 -0
  365. package/dist/core/extract/index.js +11 -0
  366. package/dist/core/extract/index.js.map +1 -0
  367. package/dist/core/extract/registry.d.ts +59 -0
  368. package/dist/core/extract/registry.d.ts.map +1 -0
  369. package/dist/core/extract/registry.js +152 -0
  370. package/dist/core/extract/registry.js.map +1 -0
  371. package/dist/core/extract/types.d.ts +114 -0
  372. package/dist/core/extract/types.d.ts.map +1 -0
  373. package/dist/core/extract/types.js +2 -0
  374. package/dist/core/extract/types.js.map +1 -0
  375. package/dist/core/iife.d.ts +38 -0
  376. package/dist/core/iife.d.ts.map +1 -0
  377. package/dist/core/iife.js +59 -0
  378. package/dist/core/iife.js.map +1 -0
  379. package/dist/core/pipeline.d.ts +26 -0
  380. package/dist/core/pipeline.d.ts.map +1 -0
  381. package/dist/core/pipeline.js +42 -0
  382. package/dist/core/pipeline.js.map +1 -0
  383. package/dist/core/types.d.ts +352 -0
  384. package/dist/core/types.d.ts.map +1 -0
  385. package/dist/core/types.js +6 -0
  386. package/dist/core/types.js.map +1 -0
  387. package/dist/discovery.d.ts +14 -0
  388. package/dist/discovery.d.ts.map +1 -0
  389. package/dist/discovery.js +40 -0
  390. package/dist/discovery.js.map +1 -0
  391. package/dist/index.d.ts +4 -674
  392. package/dist/index.d.ts.map +1 -0
  393. package/dist/index.js +2 -2553
  394. package/dist/index.js.map +1 -0
  395. package/dist/loader.d.ts +24 -0
  396. package/dist/loader.d.ts.map +1 -0
  397. package/dist/loader.js +129 -0
  398. package/dist/loader.js.map +1 -0
  399. package/dist/static-filter.d.ts +7 -0
  400. package/dist/static-filter.d.ts.map +1 -0
  401. package/dist/static-filter.js +396 -0
  402. package/dist/static-filter.js.map +1 -0
  403. package/dist/unplugin/bun.d.ts +3 -0
  404. package/dist/unplugin/bun.d.ts.map +1 -0
  405. package/dist/unplugin/bun.js +3 -0
  406. package/dist/unplugin/bun.js.map +1 -0
  407. package/dist/unplugin/esbuild.d.ts +3 -0
  408. package/dist/unplugin/esbuild.d.ts.map +1 -0
  409. package/dist/unplugin/esbuild.js +3 -0
  410. package/dist/unplugin/esbuild.js.map +1 -0
  411. package/dist/unplugin/farm.d.ts +3 -0
  412. package/dist/unplugin/farm.d.ts.map +1 -0
  413. package/dist/unplugin/farm.js +3 -0
  414. package/dist/unplugin/farm.js.map +1 -0
  415. package/dist/unplugin/index.d.ts +4 -0
  416. package/dist/unplugin/index.d.ts.map +1 -0
  417. package/dist/unplugin/index.js +102 -0
  418. package/dist/unplugin/index.js.map +1 -0
  419. package/dist/unplugin/rolldown.d.ts +3 -0
  420. package/dist/unplugin/rolldown.d.ts.map +1 -0
  421. package/dist/unplugin/rolldown.js +3 -0
  422. package/dist/unplugin/rolldown.js.map +1 -0
  423. package/dist/unplugin/rollup.d.ts +3 -0
  424. package/dist/unplugin/rollup.d.ts.map +1 -0
  425. package/dist/unplugin/rollup.js +3 -0
  426. package/dist/unplugin/rollup.js.map +1 -0
  427. package/dist/unplugin/rspack.d.ts +3 -0
  428. package/dist/unplugin/rspack.d.ts.map +1 -0
  429. package/dist/unplugin/rspack.js +3 -0
  430. package/dist/unplugin/rspack.js.map +1 -0
  431. package/dist/unplugin/transform.d.ts +36 -0
  432. package/dist/unplugin/transform.d.ts.map +1 -0
  433. package/dist/unplugin/transform.js +292 -0
  434. package/dist/unplugin/transform.js.map +1 -0
  435. package/dist/unplugin/types.d.ts +67 -0
  436. package/dist/unplugin/types.d.ts.map +1 -0
  437. package/dist/unplugin/types.js +19 -0
  438. package/dist/unplugin/types.js.map +1 -0
  439. package/dist/unplugin/virtual.d.ts +24 -0
  440. package/dist/unplugin/virtual.d.ts.map +1 -0
  441. package/dist/unplugin/virtual.js +62 -0
  442. package/dist/unplugin/virtual.js.map +1 -0
  443. package/dist/unplugin/vite.d.ts +3 -0
  444. package/dist/unplugin/vite.d.ts.map +1 -0
  445. package/dist/unplugin/vite.js +3 -0
  446. package/dist/unplugin/vite.js.map +1 -0
  447. package/dist/unplugin/webpack.d.ts +3 -0
  448. package/dist/unplugin/webpack.d.ts.map +1 -0
  449. package/dist/unplugin/webpack.js +3 -0
  450. package/dist/unplugin/webpack.js.map +1 -0
  451. package/package.json +110 -51
  452. package/dist/index.mjs +0 -2539
  453. package/dist/standalone.d.ts +0 -386
  454. package/dist/standalone.js +0 -540
  455. 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
- <div align="center">
2
- <h1>⚡ <code>zod-compiler</code> ⚡</h1>
3
- </div>
1
+ # zod-compiler
4
2
 
5
- ### Speed up your Zod schemas
6
- ```ts
7
- import z from 'zod';
3
+ **Compile Zod schemas into zero-overhead validation functions at build time.**
8
4
 
9
- const schema = z.object({
10
- title: z.string().min(3).max(64),
11
- tags: z.array(z.string()).optional(),
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 })],
12
+ });
13
+ ```
14
+
15
+ ```typescript
16
+ // src/schemas.ts — write plain Zod, nothing else
17
+ import { z } from "zod";
18
+
19
+ export const UserSchema = z.object({
20
+ name: z.string().min(3),
21
+ email: z.email(),
22
+ age: z.number().int().positive(),
23
+ });
24
+
25
+ // Use it anywhere — tRPC, Hono, React Hook Form, etc.
26
+ // At build time, zod-compiler compiles it to a 3-64x faster validator.
27
+ ```
28
+
29
+ ## Install
30
+
31
+ ```bash
32
+ npm install zod-compiler zod@^4
33
+ ```
34
+
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
+ });
57
+ ```
58
+
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
+
92
+ 1. Finds every file with `import ... from "zod"` (skips type-only imports)
93
+ 2. Executes the file and detects exported Zod schemas
94
+ 3. Compiles each schema into an optimized validator
95
+ 4. Replaces the export with a tree-shakeable IIFE that preserves the full Zod API
96
+
97
+ **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.
98
+
99
+ ### 2. compile() (Explicit)
100
+
101
+ If you prefer explicit opt-in, wrap specific schemas with `compile()`:
102
+
103
+ ```typescript
104
+ import { z } from "zod";
105
+ import { compile } from "zod-compiler";
106
+
107
+ const UserSchema = z.object({
108
+ name: z.string().min(3),
109
+ email: z.email(),
13
110
  });
14
111
 
15
- // slow!
16
- const { success, data, error } = schema.safeParse(input);
112
+ export const validateUser = compile(UserSchema);
113
+
114
+ // In dev: falls back to Zod's runtime validation
115
+ // After build: uses AOT-compiled optimized code
116
+ validateUser.parse(data);
117
+ validateUser.safeParse(data);
118
+ ```
119
+
120
+ `compile()` and `autoDiscover` coexist — `compile()` schemas are detected first, then `autoDiscover` picks up remaining plain Zod exports.
17
121
 
18
- // 🚀
19
- import zc from 'zod-compiler';
20
- const compiledSchema = zc.compile(schema);
122
+ ### 3. CLI (No Bundler)
21
123
 
22
- const { success, data, error } = compiledSchema.safeParse(input);
124
+ Generate optimized validation files from the command line:
125
+
126
+ ```bash
127
+ # Single file
128
+ npx zod-compiler generate src/schemas.ts -o src/schemas.compiled.ts
129
+
130
+ # Directory
131
+ npx zod-compiler generate src/ -o src/compiled/
132
+
133
+ # Watch mode
134
+ npx zod-compiler generate src/ --watch
23
135
  ```
24
136
 
25
- ### Export your Zod schemas to TypeScript types
26
- ```ts
27
- console.log(zc.types(schema));
28
- // export type Schema = {
29
- // title: string;
30
- // tags?: string[];
31
- // ...
32
- // };
137
+ ## Build Plugin
138
+
139
+ ### Supported Build Tools
140
+
141
+ | Build Tool | Import |
142
+ | ---------- | ------------------------------------------------- |
143
+ | Vite | `import zodCompiler from "zod-compiler/vite"` |
144
+ | webpack | `import zodCompiler from "zod-compiler/webpack"` |
145
+ | esbuild | `import zodCompiler from "zod-compiler/esbuild"` |
146
+ | Rollup | `import zodCompiler from "zod-compiler/rollup"` |
147
+ | Rolldown | `import zodCompiler from "zod-compiler/rolldown"` |
148
+ | rspack | `import zodCompiler from "zod-compiler/rspack"` |
149
+ | Bun | `import zodCompiler from "zod-compiler/bun"` |
150
+ | Farm | `import zodCompiler from "zod-compiler/farm"` |
151
+
152
+ ### Options
153
+
154
+ | Option | Type | Default | Description |
155
+ | -------------- | ----------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
156
+ | `autoDiscover` | `boolean` | `false` | Auto-detect all exported Zod schemas without `compile()` |
157
+ | `include` | `string[]` | — | Only process files matching these substrings |
158
+ | `exclude` | `string[]` | — | Skip files matching these substrings |
159
+ | `zodCompat` | `boolean` | `true` | Preserve Zod API via `Object.create()`. Set `false` for smaller output |
160
+ | `verbose` | `boolean` | `false` | Log per-schema compilation status during build |
161
+ | `apply` | `"build" \| "serve" \| "all"` | `"build"` | **Vite only**: when the plugin runs. Defaults to production builds only — dev servers and Vitest use the Zod fallback (correct, just uncompiled). Set `"all"` to also compile in dev/test |
162
+
163
+ ```typescript
164
+ zodCompiler({
165
+ autoDiscover: true,
166
+ include: ["src/schemas"],
167
+ verbose: true,
168
+ });
33
169
  ```
34
170
 
35
- ## Installation
36
- ```shell
37
- $ npm i --save zod-compiler
171
+ > **Note:** Vitest runs Vite in serve mode, so with the default `apply: "build"`
172
+ > the plugin is inactive during tests and validators fall back to Zod. Pass
173
+ > `apply: "all"` if your tests should exercise the compiled validators.
174
+
175
+ ### Bundle Size & Cross-File Dedup
176
+
177
+ Generated validators share a small runtime helper layer (`__mkv` validator
178
+ wrapper, issue factories like `__zaTS`/`__zaIT`, and well-known regexes for
179
+ `email`, `uuid`, `cuid`, `ipv4`, etc.).
180
+
181
+ On bundlers that support virtual modules — **Vite, Rollup, Rolldown, esbuild,
182
+ Farm, Bun** — the plugin imports these helpers from
183
+ `virtual:zod-compiler/runtime`, so the bundler emits a single bundle-wide copy
184
+ regardless of how many files reference them. webpack and rspack fall back to
185
+ self-contained file-level helpers (a few hundred bytes per file) since they
186
+ reject the `virtual:` URI scheme at the resolver layer.
187
+
188
+ The result: a 5-file project with 10 schemas all using `z.email()` and
189
+ `z.uuid()` produces a bundle where each shared regex appears exactly **once**.
190
+ Set `zodCompat: false` to additionally drop the original Zod schema reference
191
+ when you don't need `instanceof` / `.shape` access on the compiled output.
192
+
193
+ ### autoDiscover: Side Effects Warning
194
+
195
+ 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.
196
+
197
+ **Fix:** Use `include` to limit which files are scanned:
198
+
199
+ ```typescript
200
+ zodCompiler({
201
+ autoDiscover: true,
202
+ include: ["src/schemas", "src/validators"],
203
+ });
38
204
  ```
39
205
 
40
- Requires **Zod 3.x** and **TypeScript 5.x** to be installed.
206
+ ### autoDiscover vs compile()
207
+
208
+ | | autoDiscover | compile() |
209
+ | ---------------------------- | ----------------------------------- | ------------------------------------------- |
210
+ | Source code changes | None | Wrap each schema |
211
+ | `zod-compiler` import needed | No | Yes |
212
+ | What gets compiled | All exported Zod schemas | Only wrapped schemas |
213
+ | Build-time file execution | Files with `import ... from "zod"` | Files with `import ... from "zod-compiler"` |
214
+ | Best for | New projects, framework integration | Gradual adoption, selective optimization |
215
+
216
+ ## Framework Examples
217
+
218
+ ### tRPC
219
+
220
+ ```typescript
221
+ // src/schemas.ts
222
+ import { z } from "zod";
223
+
224
+ export const CreateUserSchema = z.object({
225
+ name: z.string().min(1).max(100),
226
+ email: z.email(),
227
+ age: z.number().int().min(0).max(150),
228
+ });
229
+
230
+ // src/router.ts
231
+ import { CreateUserSchema } from "./schemas";
232
+
233
+ export const appRouter = t.router({
234
+ createUser: t.procedure.input(CreateUserSchema).mutation(({ input }) => createUser(input)),
235
+ });
236
+ ```
237
+
238
+ With `autoDiscover: true`, `CreateUserSchema` is compiled at build time. The tRPC router uses the optimized version automatically. No `.input(compile(CreateUserSchema))` needed.
239
+
240
+ ### Hono
241
+
242
+ ```typescript
243
+ import { Hono } from "hono";
244
+ import { zValidator } from "@hono/zod-validator";
245
+ import { UserSchema } from "./schemas";
246
+
247
+ const app = new Hono();
248
+
249
+ app.post("/users", zValidator("json", UserSchema), (c) => {
250
+ const user = c.req.valid("json");
251
+ return c.json(user);
252
+ });
253
+ ```
254
+
255
+ ### React Hook Form
256
+
257
+ ```typescript
258
+ import { useForm } from "react-hook-form";
259
+ import { zodResolver } from "@hookform/resolvers/zod";
260
+ import { UserSchema } from "./schemas";
261
+
262
+ function UserForm() {
263
+ const form = useForm({
264
+ resolver: zodResolver(UserSchema),
265
+ });
266
+ // ...
267
+ }
268
+ ```
269
+
270
+ ### Any Standard Schema Consumer
271
+
272
+ zod-compiler compiled schemas implement [Standard Schema](https://standardschema.dev) via prototype chain. Any library that accepts Standard Schema validators works automatically.
273
+
274
+ ## Schema Diagnostics
275
+
276
+ Analyze your schemas before compiling — check coverage, Fast Path eligibility, and get actionable hints:
277
+
278
+ ```bash
279
+ npx zod-compiler check src/schemas.ts
280
+ ```
281
+
282
+ Output:
283
+
284
+ ```
285
+ src/schemas.ts
286
+
287
+ CreateUserSchema [Fast Path] 100% compiled (5 checks)
288
+ ├─ name: string (min_length, max_length)
289
+ ├─ email: string (string_format[email])
290
+ ├─ age: number (number_format[safeint], greater_than)
291
+ └─ role: enum
292
+
293
+ OrderSchema [Slow Path] 85% compiled (3 checks)
294
+ ├─ id: string (string_format[uuid])
295
+ └─ metadata: object
296
+ └─ audit: fallback(transform)
297
+ Hint: Consider z.pipe() to keep inner schema compilable
298
+
299
+ Summary: 2 schemas | 1 Fast Path, 1 Slow Path | 8/9 nodes (88.9%)
300
+ ```
301
+
302
+ ### CI Integration
303
+
304
+ ```bash
305
+ # JSON output
306
+ npx zod-compiler check src/schemas.ts --json
307
+
308
+ # Fail if any schema below 80% coverage
309
+ npx zod-compiler check src/schemas.ts --json --fail-under 80
310
+ ```
311
+
312
+ | Flag | Description |
313
+ | -------------------- | --------------------------------------- |
314
+ | `--json` | Structured JSON output |
315
+ | `--fail-under <pct>` | Exit code 1 if coverage below threshold |
316
+ | `--no-color` | Disable colored output |
317
+
318
+ ## What Gets Compiled
319
+
320
+ ### Fully Compiled (3-64x faster)
321
+
322
+ `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)
323
+
324
+ 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.
325
+
326
+ ### Falls Back to Zod (Still Works, Not Faster)
327
+
328
+ These types contain JavaScript closures that cannot be compiled to static code:
329
+
330
+ | Type | Why | Alternative |
331
+ | ------------------------ | ------------------------------------ | --------------------------------------- |
332
+ | `transform` | Runtime data transformation function | Use `z.pipe()` when possible |
333
+ | `refine` / `superRefine` | Custom validation closures | Use built-in checks when possible |
334
+ | `custom` | Arbitrary validation logic | — |
335
+ | `preprocess` | Input preprocessing function | Use `z.coerce` when possible |
336
+ | `lazy` (non-recursive) | Cannot resolve inner type | Use self-referencing lazy for recursion |
337
+
338
+ **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.
339
+
340
+ **Tip:** Run `npx zod-compiler check` to see exactly which parts of your schemas are compiled and which fall back.
341
+
342
+ ## Benchmarks
343
+
344
+ 5-way comparison: **Zod v3** vs **Zod v4** vs **zod-compiler** vs **[Typia](https://typia.io/)** vs **[AJV](https://ajv.js.org/)**
345
+
346
+ | Scenario | Zod v3 | Zod v4 | **zod-compiler** | Typia | AJV | vs Zod v4 |
347
+ | ----------------------------------- | ------ | ------ | ---------------- | ----- | ----- | --------- |
348
+ | simple string | 8.7M | 10.0M | **11.0M** | 11.0M | 11.1M | 1.1x |
349
+ | string (min/max) | 8.3M | 6.0M | **11.1M** | 11.3M | 9.5M | 1.8x |
350
+ | number (int+positive) | 8.2M | 5.8M | **10.9M** | 10.7M | 10.9M | 1.9x |
351
+ | enum | 8.0M | 9.5M | **10.6M** | 10.6M | 10.5M | 1.1x |
352
+ | bigint (min/max) | 8.0M | 6.0M | **10.9M** | — | — | 1.8x |
353
+ | tuple [string, int, bool] | 4.0M | 4.4M | **10.5M** | 10.8M | 10.5M | 2.4x |
354
+ | record\<string, number\> | 2.3M | 1.9M | **5.4M** | 7.5M | 9.4M | 2.8x |
355
+ | set\<string\> (5 items) | 2.7M | 1.6M | **9.8M** | — | — | 6.3x |
356
+ | set\<string\> (20 items) | 1.0M | 475K | **7.7M** | — | — | **16x** |
357
+ | map\<string, number\> (5 entries) | 1.5M | 946K | **8.5M** | — | — | 9.0x |
358
+ | map\<string, number\> (20 entries) | 490K | 238K | **5.2M** | — | — | **22x** |
359
+ | pipe (non-transform) | 6.3M | 3.8M | **10.8M** | — | — | 2.8x |
360
+ | discriminatedUnion (3 variants) | 2.3M | 2.9M | **9.8M** | 10.4M | 5.6M | 3.4x |
361
+ | medium object (valid) | 1.3M | 1.7M | **5.4M** | 7.3M | 5.0M | 3.1x |
362
+ | medium object (invalid) | 351K | 65K | **471K** | 2.1M | 5.6M | 7.3x |
363
+ | large object (10 items) | 82K | 111K | **4.0M** | 4.1M | 834K | **36x** |
364
+ | large object (100 items) | 9.0K | 11.6K | **676K** | 808K | 89K | **58x** |
365
+ | recursive tree (7 nodes) | 424K | 1.5M | **6.4M** | 8.1M | 3.1M | 4.1x |
366
+ | recursive tree (121 nodes) | 24K | 101K | **741K** | 1.4M | 250K | 7.4x |
367
+ | event log (combined) | 260K | 479K | **4.5M** | — | — | 9.4x |
368
+ | partial fallback obj (transform) | 817K | 1.4M | **3.3M** | — | — | 2.3x |
369
+ | partial fallback arr 10 (transform) | 88K | 139K | **841K** | — | — | 6.1x |
370
+ | partial fallback arr 50 (transform) | 18K | 28K | **175K** | — | — | 6.3x |
371
+
372
+ _ops/s, higher is better. "—" = not supported by the library. Measured with `vitest bench` on Apple M-series._
373
+
374
+ 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.
375
+
376
+ ```bash
377
+ pnpm bench # run locally
378
+ ```
379
+
380
+ ### Performance Architecture
381
+
382
+ For eligible schemas, zod-compiler generates a **two-phase validator**:
383
+
384
+ 1. **Fast Path** — A single `&&` expression chain that validates the entire input with zero allocations. Valid input returns immediately.
385
+ 2. **Slow Path** — Error-collecting validation that only runs when the Fast Path fails.
386
+
387
+ Additional optimizations: check ordering (cheap checks first), pre-compiled regex, Set-based enum lookups, small enum inlining (`===` for 1-3 values).
388
+
389
+ Run `npx zod-compiler check --json` to see which schemas qualify for Fast Path.
390
+
391
+ ## Acknowledgements
392
+
393
+ 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.
@@ -0,0 +1,9 @@
1
+ export interface CheckOptions {
2
+ inputs: string[];
3
+ json: boolean;
4
+ failUnder: number | undefined;
5
+ noColor: boolean;
6
+ autoDiscover: boolean;
7
+ }
8
+ export declare function runCheck(options: CheckOptions): Promise<void>;
9
+ //# sourceMappingURL=check.d.ts.map
@@ -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,33 @@
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
+ zodCompat?: boolean | undefined;
30
+ autoDiscover?: boolean | undefined;
31
+ }): Promise<GenerateFileResult | null>;
32
+ export declare function runGenerate(options: GenerateOptions): Promise<void>;
33
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAWA,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,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpC,GACA,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAwCpC;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CzE"}