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.
Files changed (451) 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 +34 -0
  8. package/dist/cli/commands/generate.d.ts.map +1 -0
  9. package/dist/cli/commands/generate.js +135 -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 +163 -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 +15 -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 +12 -0
  396. package/dist/loader.d.ts.map +1 -0
  397. package/dist/loader.js +76 -0
  398. package/dist/loader.js.map +1 -0
  399. package/dist/unplugin/bun.d.ts +3 -0
  400. package/dist/unplugin/bun.d.ts.map +1 -0
  401. package/dist/unplugin/bun.js +3 -0
  402. package/dist/unplugin/bun.js.map +1 -0
  403. package/dist/unplugin/esbuild.d.ts +3 -0
  404. package/dist/unplugin/esbuild.d.ts.map +1 -0
  405. package/dist/unplugin/esbuild.js +3 -0
  406. package/dist/unplugin/esbuild.js.map +1 -0
  407. package/dist/unplugin/farm.d.ts +3 -0
  408. package/dist/unplugin/farm.d.ts.map +1 -0
  409. package/dist/unplugin/farm.js +3 -0
  410. package/dist/unplugin/farm.js.map +1 -0
  411. package/dist/unplugin/index.d.ts +4 -0
  412. package/dist/unplugin/index.d.ts.map +1 -0
  413. package/dist/unplugin/index.js +75 -0
  414. package/dist/unplugin/index.js.map +1 -0
  415. package/dist/unplugin/rolldown.d.ts +3 -0
  416. package/dist/unplugin/rolldown.d.ts.map +1 -0
  417. package/dist/unplugin/rolldown.js +3 -0
  418. package/dist/unplugin/rolldown.js.map +1 -0
  419. package/dist/unplugin/rollup.d.ts +3 -0
  420. package/dist/unplugin/rollup.d.ts.map +1 -0
  421. package/dist/unplugin/rollup.js +3 -0
  422. package/dist/unplugin/rollup.js.map +1 -0
  423. package/dist/unplugin/rspack.d.ts +3 -0
  424. package/dist/unplugin/rspack.d.ts.map +1 -0
  425. package/dist/unplugin/rspack.js +3 -0
  426. package/dist/unplugin/rspack.js.map +1 -0
  427. package/dist/unplugin/transform.d.ts +36 -0
  428. package/dist/unplugin/transform.d.ts.map +1 -0
  429. package/dist/unplugin/transform.js +285 -0
  430. package/dist/unplugin/transform.js.map +1 -0
  431. package/dist/unplugin/types.d.ts +54 -0
  432. package/dist/unplugin/types.d.ts.map +1 -0
  433. package/dist/unplugin/types.js +19 -0
  434. package/dist/unplugin/types.js.map +1 -0
  435. package/dist/unplugin/virtual.d.ts +24 -0
  436. package/dist/unplugin/virtual.d.ts.map +1 -0
  437. package/dist/unplugin/virtual.js +62 -0
  438. package/dist/unplugin/virtual.js.map +1 -0
  439. package/dist/unplugin/vite.d.ts +3 -0
  440. package/dist/unplugin/vite.d.ts.map +1 -0
  441. package/dist/unplugin/vite.js +3 -0
  442. package/dist/unplugin/vite.js.map +1 -0
  443. package/dist/unplugin/webpack.d.ts +3 -0
  444. package/dist/unplugin/webpack.d.ts.map +1 -0
  445. package/dist/unplugin/webpack.js +3 -0
  446. package/dist/unplugin/webpack.js.map +1 -0
  447. package/package.json +110 -51
  448. package/dist/index.mjs +0 -2539
  449. package/dist/standalone.d.ts +0 -386
  450. package/dist/standalone.js +0 -540
  451. 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 })],
13
12
  });
13
+ ```
14
14
 
15
- // ❌ slow!
16
- const { success, data, error } = schema.safeParse(input);
15
+ ```typescript
16
+ // src/schemas.ts write plain Zod, nothing else
17
+ import { z } from "zod";
17
18
 
18
- // 🚀
19
- import zc from 'zod-compiler';
20
- const compiledSchema = zc.compile(schema);
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
- const { success, data, error } = compiledSchema.safeParse(input);
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
- ### 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
- // };
29
+ ## Install
30
+
31
+ ```bash
32
+ npm install zod-compiler zod@^4
33
33
  ```
34
34
 
35
- ## Installation
36
- ```shell
37
- $ npm i --save zod-compiler
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
- Requires **Zod 3.x** and **TypeScript 5.x** to be installed.
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,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,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"}