zod-compiler 1.23.0 → 1.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/README.md +9 -6
  2. package/dist/cli/commands/check.d.ts +10 -7
  3. package/dist/cli/commands/check.d.ts.map +1 -1
  4. package/dist/cli/commands/check.js +125 -148
  5. package/dist/cli/commands/check.js.map +1 -1
  6. package/dist/cli/commands/generate.d.ts +22 -19
  7. package/dist/cli/commands/generate.d.ts.map +1 -1
  8. package/dist/cli/commands/generate.js +102 -133
  9. package/dist/cli/commands/generate.js.map +1 -1
  10. package/dist/cli/commands/watch.d.ts +17 -15
  11. package/dist/cli/commands/watch.d.ts.map +1 -1
  12. package/dist/cli/commands/watch.js +126 -154
  13. package/dist/cli/commands/watch.js.map +1 -1
  14. package/dist/cli/emitter.d.ts +19 -16
  15. package/dist/cli/emitter.d.ts.map +1 -1
  16. package/dist/cli/emitter.js +55 -71
  17. package/dist/cli/emitter.js.map +1 -1
  18. package/dist/cli/errors.d.ts +4 -1
  19. package/dist/cli/errors.d.ts.map +1 -1
  20. package/dist/cli/errors.js +6 -2
  21. package/dist/cli/errors.js.map +1 -1
  22. package/dist/cli/index.d.ts +1 -3
  23. package/dist/cli/index.js +147 -160
  24. package/dist/cli/index.js.map +1 -1
  25. package/dist/cli/logger.d.ts +18 -15
  26. package/dist/cli/logger.d.ts.map +1 -1
  27. package/dist/cli/logger.js +38 -37
  28. package/dist/cli/logger.js.map +1 -1
  29. package/dist/core/codegen/build-path.d.ts +7 -41
  30. package/dist/core/codegen/build-path.d.ts.map +1 -1
  31. package/dist/core/codegen/build-path.js +481 -570
  32. package/dist/core/codegen/build-path.js.map +1 -1
  33. package/dist/core/codegen/context.d.ts +256 -253
  34. package/dist/core/codegen/context.d.ts.map +1 -1
  35. package/dist/core/codegen/context.js +363 -437
  36. package/dist/core/codegen/context.js.map +1 -1
  37. package/dist/core/codegen/dedupe.d.ts +22 -56
  38. package/dist/core/codegen/dedupe.d.ts.map +1 -1
  39. package/dist/core/codegen/dedupe.js +150 -242
  40. package/dist/core/codegen/dedupe.js.map +1 -1
  41. package/dist/core/codegen/emit-issue.d.ts +44 -68
  42. package/dist/core/codegen/emit-issue.d.ts.map +1 -1
  43. package/dist/core/codegen/emit-issue.js +76 -108
  44. package/dist/core/codegen/emit-issue.js.map +1 -1
  45. package/dist/core/codegen/emit.d.ts +4 -1
  46. package/dist/core/codegen/emit.d.ts.map +1 -1
  47. package/dist/core/codegen/emit.js +16 -13
  48. package/dist/core/codegen/emit.js.map +1 -1
  49. package/dist/core/codegen/fast-path.d.ts +7 -12
  50. package/dist/core/codegen/fast-path.d.ts.map +1 -1
  51. package/dist/core/codegen/fast-path.js +116 -145
  52. package/dist/core/codegen/fast-path.js.map +1 -1
  53. package/dist/core/codegen/fast-size.d.ts +12 -26
  54. package/dist/core/codegen/fast-size.d.ts.map +1 -1
  55. package/dist/core/codegen/fast-size.js +169 -244
  56. package/dist/core/codegen/fast-size.js.map +1 -1
  57. package/dist/core/codegen/index.d.ts +25 -23
  58. package/dist/core/codegen/index.d.ts.map +1 -1
  59. package/dist/core/codegen/index.js +239 -405
  60. package/dist/core/codegen/index.js.map +1 -1
  61. package/dist/core/codegen/issue-decls.d.ts +15 -12
  62. package/dist/core/codegen/issue-decls.d.ts.map +1 -1
  63. package/dist/core/codegen/issue-decls.js +131 -162
  64. package/dist/core/codegen/issue-decls.js.map +1 -1
  65. package/dist/core/codegen/regex-unroll.d.ts +4 -1
  66. package/dist/core/codegen/regex-unroll.d.ts.map +1 -1
  67. package/dist/core/codegen/regex-unroll.js +173 -197
  68. package/dist/core/codegen/regex-unroll.js.map +1 -1
  69. package/dist/core/codegen/schemas/any.d.ts +7 -4
  70. package/dist/core/codegen/schemas/any.d.ts.map +1 -1
  71. package/dist/core/codegen/schemas/any.js +8 -4
  72. package/dist/core/codegen/schemas/any.js.map +1 -1
  73. package/dist/core/codegen/schemas/array.d.ts +8 -5
  74. package/dist/core/codegen/schemas/array.d.ts.map +1 -1
  75. package/dist/core/codegen/schemas/array.js +77 -95
  76. package/dist/core/codegen/schemas/array.js.map +1 -1
  77. package/dist/core/codegen/schemas/bigint.d.ts +7 -4
  78. package/dist/core/codegen/schemas/bigint.d.ts.map +1 -1
  79. package/dist/core/codegen/schemas/bigint.js +44 -56
  80. package/dist/core/codegen/schemas/bigint.js.map +1 -1
  81. package/dist/core/codegen/schemas/boolean.d.ts +7 -4
  82. package/dist/core/codegen/schemas/boolean.d.ts.map +1 -1
  83. package/dist/core/codegen/schemas/boolean.js +12 -11
  84. package/dist/core/codegen/schemas/boolean.js.map +1 -1
  85. package/dist/core/codegen/schemas/catch.d.ts +8 -5
  86. package/dist/core/codegen/schemas/catch.d.ts.map +1 -1
  87. package/dist/core/codegen/schemas/catch.js +23 -23
  88. package/dist/core/codegen/schemas/catch.js.map +1 -1
  89. package/dist/core/codegen/schemas/date.d.ts +7 -4
  90. package/dist/core/codegen/schemas/date.d.ts.map +1 -1
  91. package/dist/core/codegen/schemas/date.js +49 -68
  92. package/dist/core/codegen/schemas/date.js.map +1 -1
  93. package/dist/core/codegen/schemas/default.d.ts +9 -6
  94. package/dist/core/codegen/schemas/default.d.ts.map +1 -1
  95. package/dist/core/codegen/schemas/default.js +29 -27
  96. package/dist/core/codegen/schemas/default.js.map +1 -1
  97. package/dist/core/codegen/schemas/discriminated-union.d.ts +12 -10
  98. package/dist/core/codegen/schemas/discriminated-union.d.ts.map +1 -1
  99. package/dist/core/codegen/schemas/discriminated-union.js +153 -178
  100. package/dist/core/codegen/schemas/discriminated-union.js.map +1 -1
  101. package/dist/core/codegen/schemas/effect.d.ts +9 -6
  102. package/dist/core/codegen/schemas/effect.d.ts.map +1 -1
  103. package/dist/core/codegen/schemas/effect.js +54 -67
  104. package/dist/core/codegen/schemas/effect.js.map +1 -1
  105. package/dist/core/codegen/schemas/enum.d.ts +7 -4
  106. package/dist/core/codegen/schemas/enum.d.ts.map +1 -1
  107. package/dist/core/codegen/schemas/enum.js +15 -21
  108. package/dist/core/codegen/schemas/enum.js.map +1 -1
  109. package/dist/core/codegen/schemas/fallback.d.ts +6 -3
  110. package/dist/core/codegen/schemas/fallback.d.ts.map +1 -1
  111. package/dist/core/codegen/schemas/fallback.js +14 -13
  112. package/dist/core/codegen/schemas/fallback.js.map +1 -1
  113. package/dist/core/codegen/schemas/file.d.ts +7 -4
  114. package/dist/core/codegen/schemas/file.d.ts.map +1 -1
  115. package/dist/core/codegen/schemas/file.js +51 -57
  116. package/dist/core/codegen/schemas/file.js.map +1 -1
  117. package/dist/core/codegen/schemas/intersection.d.ts +8 -5
  118. package/dist/core/codegen/schemas/intersection.d.ts.map +1 -1
  119. package/dist/core/codegen/schemas/intersection.js +16 -13
  120. package/dist/core/codegen/schemas/intersection.js.map +1 -1
  121. package/dist/core/codegen/schemas/literal.d.ts +7 -4
  122. package/dist/core/codegen/schemas/literal.d.ts.map +1 -1
  123. package/dist/core/codegen/schemas/literal.js +20 -23
  124. package/dist/core/codegen/schemas/literal.js.map +1 -1
  125. package/dist/core/codegen/schemas/map.d.ts +8 -5
  126. package/dist/core/codegen/schemas/map.d.ts.map +1 -1
  127. package/dist/core/codegen/schemas/map.js +61 -67
  128. package/dist/core/codegen/schemas/map.js.map +1 -1
  129. package/dist/core/codegen/schemas/nan.d.ts +7 -4
  130. package/dist/core/codegen/schemas/nan.d.ts.map +1 -1
  131. package/dist/core/codegen/schemas/nan.js +8 -4
  132. package/dist/core/codegen/schemas/nan.js.map +1 -1
  133. package/dist/core/codegen/schemas/never.d.ts +7 -4
  134. package/dist/core/codegen/schemas/never.d.ts.map +1 -1
  135. package/dist/core/codegen/schemas/never.js +8 -4
  136. package/dist/core/codegen/schemas/never.js.map +1 -1
  137. package/dist/core/codegen/schemas/null.d.ts +7 -4
  138. package/dist/core/codegen/schemas/null.d.ts.map +1 -1
  139. package/dist/core/codegen/schemas/null.js +8 -4
  140. package/dist/core/codegen/schemas/null.js.map +1 -1
  141. package/dist/core/codegen/schemas/nullable.d.ts +8 -5
  142. package/dist/core/codegen/schemas/nullable.d.ts.map +1 -1
  143. package/dist/core/codegen/schemas/nullable.js +8 -5
  144. package/dist/core/codegen/schemas/nullable.js.map +1 -1
  145. package/dist/core/codegen/schemas/number.d.ts +7 -4
  146. package/dist/core/codegen/schemas/number.d.ts.map +1 -1
  147. package/dist/core/codegen/schemas/number.js +120 -176
  148. package/dist/core/codegen/schemas/number.js.map +1 -1
  149. package/dist/core/codegen/schemas/object.d.ts +8 -5
  150. package/dist/core/codegen/schemas/object.d.ts.map +1 -1
  151. package/dist/core/codegen/schemas/object.js +144 -231
  152. package/dist/core/codegen/schemas/object.js.map +1 -1
  153. package/dist/core/codegen/schemas/optional.d.ts +9 -6
  154. package/dist/core/codegen/schemas/optional.d.ts.map +1 -1
  155. package/dist/core/codegen/schemas/optional.js +23 -31
  156. package/dist/core/codegen/schemas/optional.js.map +1 -1
  157. package/dist/core/codegen/schemas/pipe.d.ts +8 -5
  158. package/dist/core/codegen/schemas/pipe.d.ts.map +1 -1
  159. package/dist/core/codegen/schemas/pipe.js +20 -27
  160. package/dist/core/codegen/schemas/pipe.js.map +1 -1
  161. package/dist/core/codegen/schemas/readonly.d.ts +8 -5
  162. package/dist/core/codegen/schemas/readonly.d.ts.map +1 -1
  163. package/dist/core/codegen/schemas/readonly.js +8 -5
  164. package/dist/core/codegen/schemas/readonly.js.map +1 -1
  165. package/dist/core/codegen/schemas/record.d.ts +8 -5
  166. package/dist/core/codegen/schemas/record.d.ts.map +1 -1
  167. package/dist/core/codegen/schemas/record.js +52 -65
  168. package/dist/core/codegen/schemas/record.js.map +1 -1
  169. package/dist/core/codegen/schemas/recursive-ref.d.ts +9 -6
  170. package/dist/core/codegen/schemas/recursive-ref.d.ts.map +1 -1
  171. package/dist/core/codegen/schemas/recursive-ref.js +44 -44
  172. package/dist/core/codegen/schemas/recursive-ref.js.map +1 -1
  173. package/dist/core/codegen/schemas/set.d.ts +8 -5
  174. package/dist/core/codegen/schemas/set.d.ts.map +1 -1
  175. package/dist/core/codegen/schemas/set.js +61 -73
  176. package/dist/core/codegen/schemas/set.js.map +1 -1
  177. package/dist/core/codegen/schemas/string-bool.d.ts +6 -3
  178. package/dist/core/codegen/schemas/string-bool.d.ts.map +1 -1
  179. package/dist/core/codegen/schemas/string-bool.js +22 -23
  180. package/dist/core/codegen/schemas/string-bool.js.map +1 -1
  181. package/dist/core/codegen/schemas/string.d.ts +8 -5
  182. package/dist/core/codegen/schemas/string.d.ts.map +1 -1
  183. package/dist/core/codegen/schemas/string.js +168 -207
  184. package/dist/core/codegen/schemas/string.js.map +1 -1
  185. package/dist/core/codegen/schemas/symbol.d.ts +7 -4
  186. package/dist/core/codegen/schemas/symbol.d.ts.map +1 -1
  187. package/dist/core/codegen/schemas/symbol.js +8 -4
  188. package/dist/core/codegen/schemas/symbol.js.map +1 -1
  189. package/dist/core/codegen/schemas/template-literal.d.ts +7 -4
  190. package/dist/core/codegen/schemas/template-literal.d.ts.map +1 -1
  191. package/dist/core/codegen/schemas/template-literal.js +12 -13
  192. package/dist/core/codegen/schemas/template-literal.js.map +1 -1
  193. package/dist/core/codegen/schemas/tuple.d.ts +8 -5
  194. package/dist/core/codegen/schemas/tuple.d.ts.map +1 -1
  195. package/dist/core/codegen/schemas/tuple.js +84 -94
  196. package/dist/core/codegen/schemas/tuple.js.map +1 -1
  197. package/dist/core/codegen/schemas/undefined.d.ts +7 -4
  198. package/dist/core/codegen/schemas/undefined.d.ts.map +1 -1
  199. package/dist/core/codegen/schemas/undefined.js +8 -4
  200. package/dist/core/codegen/schemas/undefined.js.map +1 -1
  201. package/dist/core/codegen/schemas/union.d.ts +8 -5
  202. package/dist/core/codegen/schemas/union.d.ts.map +1 -1
  203. package/dist/core/codegen/schemas/union.js +49 -69
  204. package/dist/core/codegen/schemas/union.js.map +1 -1
  205. package/dist/core/codegen/schemas/unknown.d.ts +7 -4
  206. package/dist/core/codegen/schemas/unknown.d.ts.map +1 -1
  207. package/dist/core/codegen/schemas/unknown.js +8 -4
  208. package/dist/core/codegen/schemas/unknown.js.map +1 -1
  209. package/dist/core/codegen/schemas/void.d.ts +7 -4
  210. package/dist/core/codegen/schemas/void.d.ts.map +1 -1
  211. package/dist/core/codegen/schemas/void.js +8 -4
  212. package/dist/core/codegen/schemas/void.js.map +1 -1
  213. package/dist/core/codegen/slow-path.d.ts +7 -4
  214. package/dist/core/codegen/slow-path.d.ts.map +1 -1
  215. package/dist/core/codegen/slow-path.js +71 -96
  216. package/dist/core/codegen/slow-path.js.map +1 -1
  217. package/dist/core/codegen/well-known-regex.d.ts +22 -19
  218. package/dist/core/codegen/well-known-regex.d.ts.map +1 -1
  219. package/dist/core/codegen/well-known-regex.js +127 -96
  220. package/dist/core/codegen/well-known-regex.js.map +1 -1
  221. package/dist/core/compile.d.ts +7 -4
  222. package/dist/core/compile.d.ts.map +1 -1
  223. package/dist/core/compile.js +48 -48
  224. package/dist/core/compile.js.map +1 -1
  225. package/dist/core/diagnostic.d.ts +38 -39
  226. package/dist/core/diagnostic.d.ts.map +1 -1
  227. package/dist/core/diagnostic.js +140 -164
  228. package/dist/core/diagnostic.js.map +1 -1
  229. package/dist/core/extract/checks.d.ts +18 -15
  230. package/dist/core/extract/checks.d.ts.map +1 -1
  231. package/dist/core/extract/checks.js +318 -311
  232. package/dist/core/extract/checks.js.map +1 -1
  233. package/dist/core/extract/effects.d.ts +13 -10
  234. package/dist/core/extract/effects.d.ts.map +1 -1
  235. package/dist/core/extract/effects.js +153 -222
  236. package/dist/core/extract/effects.js.map +1 -1
  237. package/dist/core/extract/extractors/any.d.ts +5 -2
  238. package/dist/core/extract/extractors/any.d.ts.map +1 -1
  239. package/dist/core/extract/extractors/any.js +5 -1
  240. package/dist/core/extract/extractors/any.js.map +1 -1
  241. package/dist/core/extract/extractors/array.d.ts +6 -3
  242. package/dist/core/extract/extractors/array.d.ts.map +1 -1
  243. package/dist/core/extract/extractors/array.js +25 -20
  244. package/dist/core/extract/extractors/array.js.map +1 -1
  245. package/dist/core/extract/extractors/bigint.d.ts +6 -3
  246. package/dist/core/extract/extractors/bigint.d.ts.map +1 -1
  247. package/dist/core/extract/extractors/bigint.js +66 -64
  248. package/dist/core/extract/extractors/bigint.js.map +1 -1
  249. package/dist/core/extract/extractors/boolean.d.ts +5 -2
  250. package/dist/core/extract/extractors/boolean.d.ts.map +1 -1
  251. package/dist/core/extract/extractors/boolean.js +7 -3
  252. package/dist/core/extract/extractors/boolean.js.map +1 -1
  253. package/dist/core/extract/extractors/catch.d.ts +6 -3
  254. package/dist/core/extract/extractors/catch.d.ts.map +1 -1
  255. package/dist/core/extract/extractors/catch.js +26 -17
  256. package/dist/core/extract/extractors/catch.js.map +1 -1
  257. package/dist/core/extract/extractors/date.d.ts +6 -3
  258. package/dist/core/extract/extractors/date.d.ts.map +1 -1
  259. package/dist/core/extract/extractors/date.js +42 -46
  260. package/dist/core/extract/extractors/date.js.map +1 -1
  261. package/dist/core/extract/extractors/default.d.ts +6 -3
  262. package/dist/core/extract/extractors/default.d.ts.map +1 -1
  263. package/dist/core/extract/extractors/default.js +20 -14
  264. package/dist/core/extract/extractors/default.js.map +1 -1
  265. package/dist/core/extract/extractors/enum.d.ts +5 -2
  266. package/dist/core/extract/extractors/enum.d.ts.map +1 -1
  267. package/dist/core/extract/extractors/enum.js +12 -13
  268. package/dist/core/extract/extractors/enum.js.map +1 -1
  269. package/dist/core/extract/extractors/file.d.ts +6 -3
  270. package/dist/core/extract/extractors/file.d.ts.map +1 -1
  271. package/dist/core/extract/extractors/file.js +34 -28
  272. package/dist/core/extract/extractors/file.js.map +1 -1
  273. package/dist/core/extract/extractors/intersection.d.ts +5 -2
  274. package/dist/core/extract/extractors/intersection.d.ts.map +1 -1
  275. package/dist/core/extract/extractors/intersection.js +13 -11
  276. package/dist/core/extract/extractors/intersection.js.map +1 -1
  277. package/dist/core/extract/extractors/lazy.d.ts +6 -3
  278. package/dist/core/extract/extractors/lazy.d.ts.map +1 -1
  279. package/dist/core/extract/extractors/lazy.js +21 -30
  280. package/dist/core/extract/extractors/lazy.js.map +1 -1
  281. package/dist/core/extract/extractors/literal.d.ts +5 -2
  282. package/dist/core/extract/extractors/literal.d.ts.map +1 -1
  283. package/dist/core/extract/extractors/literal.js +8 -1
  284. package/dist/core/extract/extractors/literal.js.map +1 -1
  285. package/dist/core/extract/extractors/map.d.ts +6 -3
  286. package/dist/core/extract/extractors/map.d.ts.map +1 -1
  287. package/dist/core/extract/extractors/map.js +10 -4
  288. package/dist/core/extract/extractors/map.js.map +1 -1
  289. package/dist/core/extract/extractors/nan.d.ts +5 -2
  290. package/dist/core/extract/extractors/nan.d.ts.map +1 -1
  291. package/dist/core/extract/extractors/nan.js +5 -1
  292. package/dist/core/extract/extractors/nan.js.map +1 -1
  293. package/dist/core/extract/extractors/never.d.ts +5 -2
  294. package/dist/core/extract/extractors/never.d.ts.map +1 -1
  295. package/dist/core/extract/extractors/never.js +5 -1
  296. package/dist/core/extract/extractors/never.js.map +1 -1
  297. package/dist/core/extract/extractors/null.d.ts +5 -2
  298. package/dist/core/extract/extractors/null.d.ts.map +1 -1
  299. package/dist/core/extract/extractors/null.js +5 -1
  300. package/dist/core/extract/extractors/null.js.map +1 -1
  301. package/dist/core/extract/extractors/nullable.d.ts +5 -2
  302. package/dist/core/extract/extractors/nullable.d.ts.map +1 -1
  303. package/dist/core/extract/extractors/nullable.js +7 -3
  304. package/dist/core/extract/extractors/nullable.js.map +1 -1
  305. package/dist/core/extract/extractors/number.d.ts +6 -3
  306. package/dist/core/extract/extractors/number.d.ts.map +1 -1
  307. package/dist/core/extract/extractors/number.js +35 -35
  308. package/dist/core/extract/extractors/number.js.map +1 -1
  309. package/dist/core/extract/extractors/object.d.ts +6 -3
  310. package/dist/core/extract/extractors/object.d.ts.map +1 -1
  311. package/dist/core/extract/extractors/object.js +49 -76
  312. package/dist/core/extract/extractors/object.js.map +1 -1
  313. package/dist/core/extract/extractors/optional.d.ts +5 -2
  314. package/dist/core/extract/extractors/optional.d.ts.map +1 -1
  315. package/dist/core/extract/extractors/optional.js +10 -12
  316. package/dist/core/extract/extractors/optional.js.map +1 -1
  317. package/dist/core/extract/extractors/pipe.d.ts +6 -3
  318. package/dist/core/extract/extractors/pipe.d.ts.map +1 -1
  319. package/dist/core/extract/extractors/pipe.js +40 -41
  320. package/dist/core/extract/extractors/pipe.js.map +1 -1
  321. package/dist/core/extract/extractors/readonly.d.ts +5 -2
  322. package/dist/core/extract/extractors/readonly.d.ts.map +1 -1
  323. package/dist/core/extract/extractors/readonly.js +10 -6
  324. package/dist/core/extract/extractors/readonly.js.map +1 -1
  325. package/dist/core/extract/extractors/record.d.ts +6 -3
  326. package/dist/core/extract/extractors/record.d.ts.map +1 -1
  327. package/dist/core/extract/extractors/record.js +24 -35
  328. package/dist/core/extract/extractors/record.js.map +1 -1
  329. package/dist/core/extract/extractors/set.d.ts +6 -3
  330. package/dist/core/extract/extractors/set.d.ts.map +1 -1
  331. package/dist/core/extract/extractors/set.js +36 -30
  332. package/dist/core/extract/extractors/set.js.map +1 -1
  333. package/dist/core/extract/extractors/string-bool.d.ts +7 -4
  334. package/dist/core/extract/extractors/string-bool.d.ts.map +1 -1
  335. package/dist/core/extract/extractors/string-bool.js +66 -84
  336. package/dist/core/extract/extractors/string-bool.js.map +1 -1
  337. package/dist/core/extract/extractors/string.d.ts +6 -3
  338. package/dist/core/extract/extractors/string.d.ts.map +1 -1
  339. package/dist/core/extract/extractors/string.js +34 -37
  340. package/dist/core/extract/extractors/string.js.map +1 -1
  341. package/dist/core/extract/extractors/symbol.d.ts +5 -2
  342. package/dist/core/extract/extractors/symbol.d.ts.map +1 -1
  343. package/dist/core/extract/extractors/symbol.js +5 -1
  344. package/dist/core/extract/extractors/symbol.js.map +1 -1
  345. package/dist/core/extract/extractors/template-literal.d.ts +6 -3
  346. package/dist/core/extract/extractors/template-literal.d.ts.map +1 -1
  347. package/dist/core/extract/extractors/template-literal.js +11 -6
  348. package/dist/core/extract/extractors/template-literal.js.map +1 -1
  349. package/dist/core/extract/extractors/tuple.d.ts +6 -3
  350. package/dist/core/extract/extractors/tuple.d.ts.map +1 -1
  351. package/dist/core/extract/extractors/tuple.js +10 -4
  352. package/dist/core/extract/extractors/tuple.js.map +1 -1
  353. package/dist/core/extract/extractors/undefined.d.ts +5 -2
  354. package/dist/core/extract/extractors/undefined.d.ts.map +1 -1
  355. package/dist/core/extract/extractors/undefined.js +5 -1
  356. package/dist/core/extract/extractors/undefined.js.map +1 -1
  357. package/dist/core/extract/extractors/union.d.ts +6 -3
  358. package/dist/core/extract/extractors/union.d.ts.map +1 -1
  359. package/dist/core/extract/extractors/union.js +38 -64
  360. package/dist/core/extract/extractors/union.js.map +1 -1
  361. package/dist/core/extract/extractors/unknown.d.ts +5 -2
  362. package/dist/core/extract/extractors/unknown.d.ts.map +1 -1
  363. package/dist/core/extract/extractors/unknown.js +5 -1
  364. package/dist/core/extract/extractors/unknown.js.map +1 -1
  365. package/dist/core/extract/extractors/void.d.ts +5 -2
  366. package/dist/core/extract/extractors/void.d.ts.map +1 -1
  367. package/dist/core/extract/extractors/void.js +5 -1
  368. package/dist/core/extract/extractors/void.js.map +1 -1
  369. package/dist/core/extract/fallback.d.ts +6 -3
  370. package/dist/core/extract/fallback.d.ts.map +1 -1
  371. package/dist/core/extract/fallback.js +21 -7
  372. package/dist/core/extract/fallback.js.map +1 -1
  373. package/dist/core/extract/index.d.ts +6 -4
  374. package/dist/core/extract/index.d.ts.map +1 -1
  375. package/dist/core/extract/index.js +15 -15
  376. package/dist/core/extract/index.js.map +1 -1
  377. package/dist/core/extract/registry.d.ts +39 -36
  378. package/dist/core/extract/registry.d.ts.map +1 -1
  379. package/dist/core/extract/registry.js +96 -123
  380. package/dist/core/extract/registry.js.map +1 -1
  381. package/dist/core/extract/types.d.ts +124 -120
  382. package/dist/core/extract/types.d.ts.map +1 -1
  383. package/dist/core/extract/types.js +0 -1
  384. package/dist/core/iife.d.ts +14 -15
  385. package/dist/core/iife.d.ts.map +1 -1
  386. package/dist/core/iife.js +182 -206
  387. package/dist/core/iife.js.map +1 -1
  388. package/dist/core/pipeline.d.ts +33 -30
  389. package/dist/core/pipeline.d.ts.map +1 -1
  390. package/dist/core/pipeline.js +67 -74
  391. package/dist/core/pipeline.js.map +1 -1
  392. package/dist/core/types.d.ts +430 -427
  393. package/dist/core/types.d.ts.map +1 -1
  394. package/dist/core/types.js +0 -5
  395. package/dist/discovery.d.ts +8 -5
  396. package/dist/discovery.d.ts.map +1 -1
  397. package/dist/discovery.js +31 -32
  398. package/dist/discovery.js.map +1 -1
  399. package/dist/index.d.ts +4 -4
  400. package/dist/index.js +2 -2
  401. package/dist/jit.d.ts +15 -42
  402. package/dist/jit.d.ts.map +1 -1
  403. package/dist/jit.js +187 -216
  404. package/dist/jit.js.map +1 -1
  405. package/dist/loader.d.ts +14 -11
  406. package/dist/loader.d.ts.map +1 -1
  407. package/dist/loader.js +226 -258
  408. package/dist/loader.js.map +1 -1
  409. package/dist/static-filter.d.ts +4 -1
  410. package/dist/static-filter.d.ts.map +1 -1
  411. package/dist/static-filter.js +240 -367
  412. package/dist/static-filter.js.map +1 -1
  413. package/dist/swc.d.ts +38 -35
  414. package/dist/swc.d.ts.map +1 -1
  415. package/dist/swc.js +83 -76
  416. package/dist/swc.js.map +1 -1
  417. package/dist/unplugin/bun.d.ts +5 -2
  418. package/dist/unplugin/bun.d.ts.map +1 -1
  419. package/dist/unplugin/bun.js +5 -1
  420. package/dist/unplugin/bun.js.map +1 -1
  421. package/dist/unplugin/dep-graph.d.ts +10 -7
  422. package/dist/unplugin/dep-graph.d.ts.map +1 -1
  423. package/dist/unplugin/dep-graph.js +216 -252
  424. package/dist/unplugin/dep-graph.js.map +1 -1
  425. package/dist/unplugin/disk-cache.d.ts +121 -92
  426. package/dist/unplugin/disk-cache.d.ts.map +1 -1
  427. package/dist/unplugin/disk-cache.js +425 -444
  428. package/dist/unplugin/disk-cache.js.map +1 -1
  429. package/dist/unplugin/edits.d.ts +15 -12
  430. package/dist/unplugin/edits.d.ts.map +1 -1
  431. package/dist/unplugin/edits.js +24 -37
  432. package/dist/unplugin/edits.js.map +1 -1
  433. package/dist/unplugin/esbuild.d.ts +5 -2
  434. package/dist/unplugin/esbuild.d.ts.map +1 -1
  435. package/dist/unplugin/esbuild.js +5 -1
  436. package/dist/unplugin/esbuild.js.map +1 -1
  437. package/dist/unplugin/farm.d.ts +5 -2
  438. package/dist/unplugin/farm.d.ts.map +1 -1
  439. package/dist/unplugin/farm.js +5 -1
  440. package/dist/unplugin/farm.js.map +1 -1
  441. package/dist/unplugin/hoist-compile.d.ts +14 -42
  442. package/dist/unplugin/hoist-compile.d.ts.map +1 -1
  443. package/dist/unplugin/hoist-compile.js +67 -112
  444. package/dist/unplugin/hoist-compile.js.map +1 -1
  445. package/dist/unplugin/hoist.d.ts +56 -54
  446. package/dist/unplugin/hoist.d.ts.map +1 -1
  447. package/dist/unplugin/hoist.js +945 -1170
  448. package/dist/unplugin/hoist.js.map +1 -1
  449. package/dist/unplugin/index.d.ts +5 -3
  450. package/dist/unplugin/index.d.ts.map +1 -1
  451. package/dist/unplugin/index.js +175 -250
  452. package/dist/unplugin/index.js.map +1 -1
  453. package/dist/unplugin/rolldown.d.ts +5 -2
  454. package/dist/unplugin/rolldown.d.ts.map +1 -1
  455. package/dist/unplugin/rolldown.js +5 -1
  456. package/dist/unplugin/rolldown.js.map +1 -1
  457. package/dist/unplugin/rollup.d.ts +5 -2
  458. package/dist/unplugin/rollup.d.ts.map +1 -1
  459. package/dist/unplugin/rollup.js +5 -1
  460. package/dist/unplugin/rollup.js.map +1 -1
  461. package/dist/unplugin/rsbuild.d.ts +6 -3
  462. package/dist/unplugin/rsbuild.d.ts.map +1 -1
  463. package/dist/unplugin/rsbuild.js +15 -11
  464. package/dist/unplugin/rsbuild.js.map +1 -1
  465. package/dist/unplugin/rspack.d.ts +5 -2
  466. package/dist/unplugin/rspack.d.ts.map +1 -1
  467. package/dist/unplugin/rspack.js +5 -1
  468. package/dist/unplugin/rspack.js.map +1 -1
  469. package/dist/unplugin/transform.d.ts +30 -27
  470. package/dist/unplugin/transform.d.ts.map +1 -1
  471. package/dist/unplugin/transform.js +433 -620
  472. package/dist/unplugin/transform.js.map +1 -1
  473. package/dist/unplugin/types.d.ts +189 -184
  474. package/dist/unplugin/types.d.ts.map +1 -1
  475. package/dist/unplugin/types.js +22 -18
  476. package/dist/unplugin/types.js.map +1 -1
  477. package/dist/unplugin/virtual.d.ts +11 -8
  478. package/dist/unplugin/virtual.d.ts.map +1 -1
  479. package/dist/unplugin/virtual.js +65 -83
  480. package/dist/unplugin/virtual.js.map +1 -1
  481. package/dist/unplugin/vite.d.ts +5 -2
  482. package/dist/unplugin/vite.d.ts.map +1 -1
  483. package/dist/unplugin/vite.js +5 -1
  484. package/dist/unplugin/vite.js.map +1 -1
  485. package/dist/unplugin/webpack.d.ts +5 -2
  486. package/dist/unplugin/webpack.d.ts.map +1 -1
  487. package/dist/unplugin/webpack.js +5 -1
  488. package/dist/unplugin/webpack.js.map +1 -1
  489. package/package.json +23 -14
  490. package/dist/cli/index.d.ts.map +0 -1
  491. package/dist/core/extract/types.js.map +0 -1
  492. package/dist/core/types.js.map +0 -1
  493. package/dist/index.d.ts.map +0 -1
  494. package/dist/index.js.map +0 -1
@@ -1,231 +1,207 @@
1
+ //#region src/core/codegen/regex-unroll.ts
1
2
  /**
2
- * Bounded-repeat unrolling for `.test()` regexes.
3
- *
4
- * V8's irregexp compiles a counted quantifier (`[0-9a-fA-F]{12}`) into a
5
- * backtrack-capable loop carrying a counter register, but compiles the same
6
- * atom written out (`[0-9a-fA-F][0-9a-fA-F]…`) into straight-line matching
7
- * code. Rewriting one into the other is purely structural — the language the
8
- * pattern accepts is unchanged — and is worth a lot on exactly the string
9
- * formats everyday schemas lean on:
10
- *
11
- * z.uuid() 3.1x z.guid() 3.4x z.ksuid() 2.7x
12
- * z.xid() 2.2x z.ulid() 2.1x z.base64() 2.1x
13
- * z.nanoid() 1.9x z.e164() 1.5x z.iso.date() 1.3x
14
- *
15
- * Measured on V8 13.x (node 24). The win starts at `{4}` (1.28x) and grows
16
- * with the count (2.7x at `{64}`); `{2}`/`{3}` are a wash, which is what
17
- * {@link MIN_REPEAT} encodes.
18
- *
19
- * The rewrite applies only to quantifiers whose atom is a SINGLE CHARACTER
20
- * matcher — a character class, an escape, or a literal character. A group's
21
- * repeat is left alone: unrolling it would duplicate capture groups and
22
- * renumber every backreference after it. Anything the scanner cannot account
23
- * for exactly makes the whole transform bail (`null`), leaving the original
24
- * pattern in place.
25
- *
26
- * Callers must keep reporting the ORIGINAL source in issues — the rewritten
27
- * regex's `toString()` would otherwise leak into `pattern:` and diverge from
28
- * zod. See `emitRegexSourceString`.
29
- */
3
+ * Bounded-repeat unrolling for `.test()` regexes.
4
+ *
5
+ * V8's irregexp compiles a counted quantifier (`[0-9a-fA-F]{12}`) into a
6
+ * backtrack-capable loop carrying a counter register, but compiles the same
7
+ * atom written out (`[0-9a-fA-F][0-9a-fA-F]…`) into straight-line matching
8
+ * code. Rewriting one into the other is purely structural — the language the
9
+ * pattern accepts is unchanged — and is worth a lot on exactly the string
10
+ * formats everyday schemas lean on:
11
+ *
12
+ * z.uuid() 3.1x z.guid() 3.4x z.ksuid() 2.7x
13
+ * z.xid() 2.2x z.ulid() 2.1x z.base64() 2.1x
14
+ * z.nanoid() 1.9x z.e164() 1.5x z.iso.date() 1.3x
15
+ *
16
+ * Measured on V8 13.x (node 24). The win starts at `{4}` (1.28x) and grows
17
+ * with the count (2.7x at `{64}`); `{2}`/`{3}` are a wash, which is what
18
+ * {@link MIN_REPEAT} encodes.
19
+ *
20
+ * The rewrite applies only to quantifiers whose atom is a SINGLE CHARACTER
21
+ * matcher — a character class, an escape, or a literal character. A group's
22
+ * repeat is left alone: unrolling it would duplicate capture groups and
23
+ * renumber every backreference after it. Anything the scanner cannot account
24
+ * for exactly makes the whole transform bail (`null`), leaving the original
25
+ * pattern in place.
26
+ *
27
+ * Callers must keep reporting the ORIGINAL source in issues — the rewritten
28
+ * regex's `toString()` would otherwise leak into `pattern:` and diverge from
29
+ * zod. See `emitRegexSourceString`.
30
+ */
30
31
  /**
31
- * Smallest mandatory repeat count worth unrolling. Below this the counter loop
32
- * and the straight-line form measure the same (0.97-1.00x), so leaving the
33
- * pattern untouched keeps generated output smaller for no speed cost.
34
- */
32
+ * Smallest mandatory repeat count worth unrolling. Below this the counter loop
33
+ * and the straight-line form measure the same (0.97-1.00x), so leaving the
34
+ * pattern untouched keeps generated output smaller for no speed cost.
35
+ */
35
36
  const MIN_REPEAT = 4;
36
37
  /**
37
- * Largest repeat count unrolled. A `{500}` would expand to a pattern longer
38
- * than anything it could save, so it keeps the counter loop.
39
- */
38
+ * Largest repeat count unrolled. A `{500}` would expand to a pattern longer
39
+ * than anything it could save, so it keeps the counter loop.
40
+ */
40
41
  const MAX_REPEAT = 64;
41
42
  /** Largest `max - min` optional tail expanded (`{6,14}` → 6 copies + 8 `?` copies). */
42
43
  const MAX_OPTIONAL = 32;
43
44
  /**
44
- * Total characters the rewrite may add across a whole pattern. Once spent,
45
- * later quantifiers are copied verbatim — the rewrite degrades gradually
46
- * instead of failing, and emitted size stays bounded for hand-written patterns.
47
- */
48
- const GROWTH_BUDGET = 2_048;
45
+ * Total characters the rewrite may add across a whole pattern. Once spent,
46
+ * later quantifiers are copied verbatim — the rewrite degrades gradually
47
+ * instead of failing, and emitted size stays bounded for hand-written patterns.
48
+ */
49
+ const GROWTH_BUDGET = 2048;
49
50
  /** Characters that begin something other than a literal single-character atom. */
50
- const NON_ATOM = new Set(["^", "$", "|", "(", ")", "*", "+", "?"]);
51
+ const NON_ATOM = /* @__PURE__ */ new Set([
52
+ "^",
53
+ "$",
54
+ "|",
55
+ "(",
56
+ ")",
57
+ "*",
58
+ "+",
59
+ "?"
60
+ ]);
51
61
  /**
52
- * Rewrite bounded repeats of single-character atoms into explicit repetition.
53
- * Returns `null` when nothing changed or the pattern could not be scanned
54
- * exactly (in which case the caller keeps the original source).
55
- */
56
- export function unrollRepeats(source) {
57
- let out = "";
58
- let index = 0;
59
- /** Offset in `out` where the most recent atom starts, or -1 when the preceding construct is not a single-character atom. */
60
- let atomOffset = -1;
61
- let budget = GROWTH_BUDGET;
62
- let changed = false;
63
- while (index < source.length) {
64
- const char = source[index];
65
- if (char === "\\") {
66
- const end = readEscape(source, index);
67
- if (end === null)
68
- return null;
69
- atomOffset = out.length;
70
- out += source.slice(index, end);
71
- index = end;
72
- continue;
73
- }
74
- if (char === "[") {
75
- const end = readClass(source, index);
76
- if (end === null)
77
- return null;
78
- atomOffset = out.length;
79
- out += source.slice(index, end);
80
- index = end;
81
- continue;
82
- }
83
- if (char === "{") {
84
- const quantifier = readQuantifier(source, index);
85
- if (quantifier !== null) {
86
- const expansion =
87
- // A lazy quantifier (`{n,m}?`) prefers the shortest match; the
88
- // unrolled form's `?` copies are greedy, so it is left alone.
89
- source[quantifier.end] === "?" || atomOffset < 0
90
- ? null
91
- : expand(out.slice(atomOffset), quantifier, budget);
92
- if (expansion === null) {
93
- out += source.slice(index, quantifier.end);
94
- }
95
- else {
96
- budget -= expansion.length - (out.length - atomOffset);
97
- out = out.slice(0, atomOffset) + expansion;
98
- changed = true;
99
- }
100
- // A quantifier cannot itself be quantified, so whatever follows starts
101
- // a fresh atom.
102
- atomOffset = -1;
103
- index = quantifier.end;
104
- continue;
105
- }
106
- // Not a valid quantifier — an unescaped `{` is a literal in Annex B.
107
- }
108
- atomOffset = NON_ATOM.has(char) || isSurrogate(char) ? -1 : out.length;
109
- out += char;
110
- index += 1;
111
- }
112
- return changed ? out : null;
62
+ * Rewrite bounded repeats of single-character atoms into explicit repetition.
63
+ * Returns `null` when nothing changed or the pattern could not be scanned
64
+ * exactly (in which case the caller keeps the original source).
65
+ */
66
+ function unrollRepeats(source) {
67
+ let out = "";
68
+ let index = 0;
69
+ /** Offset in `out` where the most recent atom starts, or -1 when the preceding construct is not a single-character atom. */
70
+ let atomOffset = -1;
71
+ let budget = GROWTH_BUDGET;
72
+ let changed = false;
73
+ while (index < source.length) {
74
+ const char = source[index];
75
+ if (char === "\\") {
76
+ const end = readEscape(source, index);
77
+ if (end === null) return null;
78
+ atomOffset = out.length;
79
+ out += source.slice(index, end);
80
+ index = end;
81
+ continue;
82
+ }
83
+ if (char === "[") {
84
+ const end = readClass(source, index);
85
+ if (end === null) return null;
86
+ atomOffset = out.length;
87
+ out += source.slice(index, end);
88
+ index = end;
89
+ continue;
90
+ }
91
+ if (char === "{") {
92
+ const quantifier = readQuantifier(source, index);
93
+ if (quantifier !== null) {
94
+ const expansion = source[quantifier.end] === "?" || atomOffset < 0 ? null : expand(out.slice(atomOffset), quantifier, budget);
95
+ if (expansion === null) out += source.slice(index, quantifier.end);
96
+ else {
97
+ budget -= expansion.length - (out.length - atomOffset);
98
+ out = out.slice(0, atomOffset) + expansion;
99
+ changed = true;
100
+ }
101
+ atomOffset = -1;
102
+ index = quantifier.end;
103
+ continue;
104
+ }
105
+ }
106
+ atomOffset = NON_ATOM.has(char) || isSurrogate(char) ? -1 : out.length;
107
+ out += char;
108
+ index += 1;
109
+ }
110
+ return changed ? out : null;
113
111
  }
114
112
  /** Repeated-atom form of `atom{min,max}`, or null when it is not worth (or safe to) expand. */
115
113
  function expand(atom, { min, max }, budget) {
116
- if (min < MIN_REPEAT || min > MAX_REPEAT)
117
- return null;
118
- const optional = max === Infinity ? 0 : max - min;
119
- if (optional > MAX_OPTIONAL)
120
- return null;
121
- const mandatory = atom.repeat(min);
122
- const tail = max === Infinity ? `${atom}*` : `${atom}?`.repeat(optional);
123
- const expansion = mandatory + tail;
124
- // `atom{min,max}` is being replaced by `expansion`; charge the difference.
125
- if (expansion.length - atom.length > budget)
126
- return null;
127
- return expansion;
114
+ if (min < MIN_REPEAT || min > MAX_REPEAT) return null;
115
+ const optional = max === Infinity ? 0 : max - min;
116
+ if (optional > MAX_OPTIONAL) return null;
117
+ const expansion = atom.repeat(min) + (max === Infinity ? `${atom}*` : `${atom}?`.repeat(optional));
118
+ if (expansion.length - atom.length > budget) return null;
119
+ return expansion;
128
120
  }
129
121
  /** True for a lone UTF-16 surrogate code unit, which is never treated as its own atom. */
130
122
  function isSurrogate(char) {
131
- const code = char.charCodeAt(0);
132
- return code >= 0xd8_00 && code <= 0xdf_ff;
123
+ const code = char.charCodeAt(0);
124
+ return code >= 55296 && code <= 57343;
133
125
  }
134
126
  /**
135
- * End offset (exclusive) of the escape sequence starting at `start`, or null
136
- * when the sequence is not one whose extent is unambiguous.
137
- *
138
- * Everything here hinges on the caller only passing FLAG-LESS patterns, where
139
- * Annex B's "identity escape" fallback makes several sequences mean something
140
- * other than they would under `u`: `\p{L}` is the letter `p` followed by three
141
- * literal characters, not a property escape, and `\uZZZZ` is `u` followed by
142
- * four literal `Z`s. Consuming those as one atom would attach a following
143
- * quantifier to the wrong character, so the well-formed fixed-width escapes
144
- * are recognised exactly and every ambiguous form bails.
145
- */
127
+ * End offset (exclusive) of the escape sequence starting at `start`, or null
128
+ * when the sequence is not one whose extent is unambiguous.
129
+ *
130
+ * Everything here hinges on the caller only passing FLAG-LESS patterns, where
131
+ * Annex B's "identity escape" fallback makes several sequences mean something
132
+ * other than they would under `u`: `\p{L}` is the letter `p` followed by three
133
+ * literal characters, not a property escape, and `\uZZZZ` is `u` followed by
134
+ * four literal `Z`s. Consuming those as one atom would attach a following
135
+ * quantifier to the wrong character, so the well-formed fixed-width escapes
136
+ * are recognised exactly and every ambiguous form bails.
137
+ */
146
138
  function readEscape(source, start) {
147
- const next = source[start + 1];
148
- if (next === undefined)
149
- return null;
150
- // Property escapes and named backreferences read differently with and
151
- // without the `u` flag — never worth resolving for the sake of a rewrite.
152
- if (next === "p" || next === "P" || next === "k")
153
- return null;
154
- // `\12` may be backreference 12 or backreference 1 followed by a literal 2,
155
- // depending on how many groups the pattern has.
156
- if (next >= "0" && next <= "9") {
157
- const after = source[start + 2];
158
- return after !== undefined && after >= "0" && after <= "9" ? null : start + 2;
159
- }
160
- if (next === "u")
161
- return fixedWidth(source, start, 4, isHexDigit);
162
- if (next === "x")
163
- return fixedWidth(source, start, 2, isHexDigit);
164
- if (next === "c")
165
- return fixedWidth(source, start, 1, isAsciiLetter);
166
- // Character-class escapes (`\d`, `\w`, `\s`), control escapes (`\n`, `\t`)
167
- // and identity escapes (`\.`, `\\`, `\{`) are all one character wide.
168
- return start + 2;
139
+ const next = source[start + 1];
140
+ if (next === void 0) return null;
141
+ if (next === "p" || next === "P" || next === "k") return null;
142
+ if (next >= "0" && next <= "9") {
143
+ const after = source[start + 2];
144
+ return after !== void 0 && after >= "0" && after <= "9" ? null : start + 2;
145
+ }
146
+ if (next === "u") return fixedWidth(source, start, 4, isHexDigit);
147
+ if (next === "x") return fixedWidth(source, start, 2, isHexDigit);
148
+ if (next === "c") return fixedWidth(source, start, 1, isAsciiLetter);
149
+ return start + 2;
169
150
  }
170
151
  /** End offset of `\<kind>` plus exactly `width` chars satisfying `valid`, or null. */
171
152
  function fixedWidth(source, start, width, valid) {
172
- const end = start + 2 + width;
173
- if (end > source.length)
174
- return null;
175
- for (let index = start + 2; index < end; index++) {
176
- if (!valid(source[index]))
177
- return null;
178
- }
179
- return end;
153
+ const end = start + 2 + width;
154
+ if (end > source.length) return null;
155
+ for (let index = start + 2; index < end; index++) if (!valid(source[index])) return null;
156
+ return end;
180
157
  }
181
158
  function isHexDigit(char) {
182
- return /[0-9a-fA-F]/.test(char);
159
+ return /[0-9a-fA-F]/.test(char);
183
160
  }
184
161
  function isAsciiLetter(char) {
185
- return /[a-zA-Z]/.test(char);
162
+ return /[a-zA-Z]/.test(char);
186
163
  }
187
164
  /**
188
- * End offset (exclusive) of the character class starting at `start`, or null
189
- * when unterminated. The first unescaped `]` closes the class — `[]]` is an
190
- * empty class followed by a literal `]`, not a class containing `]`.
191
- */
165
+ * End offset (exclusive) of the character class starting at `start`, or null
166
+ * when unterminated. The first unescaped `]` closes the class — `[]]` is an
167
+ * empty class followed by a literal `]`, not a class containing `]`.
168
+ */
192
169
  function readClass(source, start) {
193
- let index = start + 1;
194
- if (source[index] === "^")
195
- index += 1;
196
- while (index < source.length) {
197
- const char = source[index];
198
- if (char === "\\") {
199
- const end = readEscape(source, index);
200
- if (end === null)
201
- return null;
202
- index = end;
203
- continue;
204
- }
205
- // A `v`-mode nested class would need its own nesting rules; callers only
206
- // pass flag-less patterns, where `[` inside a class is a literal.
207
- if (char === "]")
208
- return index + 1;
209
- index += 1;
210
- }
211
- return null;
170
+ let index = start + 1;
171
+ if (source[index] === "^") index += 1;
172
+ while (index < source.length) {
173
+ const char = source[index];
174
+ if (char === "\\") {
175
+ const end = readEscape(source, index);
176
+ if (end === null) return null;
177
+ index = end;
178
+ continue;
179
+ }
180
+ if (char === "]") return index + 1;
181
+ index += 1;
182
+ }
183
+ return null;
212
184
  }
213
185
  /**
214
- * Parse `{n}`, `{n,}` or `{n,m}` at `start`. Returns null when the braces do
215
- * not form a quantifier, which Annex B treats as literal `{` characters.
216
- */
186
+ * Parse `{n}`, `{n,}` or `{n,m}` at `start`. Returns null when the braces do
187
+ * not form a quantifier, which Annex B treats as literal `{` characters.
188
+ */
217
189
  function readQuantifier(source, start) {
218
- const close = source.indexOf("}", start);
219
- if (close === -1)
220
- return null;
221
- const body = source.slice(start + 1, close);
222
- const match = /^(\d+)(?:,(\d*))?$/.exec(body);
223
- if (!match)
224
- return null;
225
- const min = Number(match[1]);
226
- const max = match[2] === undefined ? min : match[2] === "" ? Infinity : Number(match[2]);
227
- if (max < min)
228
- return null;
229
- return { end: close + 1, max, min };
190
+ const close = source.indexOf("}", start);
191
+ if (close === -1) return null;
192
+ const body = source.slice(start + 1, close);
193
+ const match = /^(\d+)(?:,(\d*))?$/.exec(body);
194
+ if (!match) return null;
195
+ const min = Number(match[1]);
196
+ const max = match[2] === void 0 ? min : match[2] === "" ? Infinity : Number(match[2]);
197
+ if (max < min) return null;
198
+ return {
199
+ end: close + 1,
200
+ max,
201
+ min
202
+ };
230
203
  }
204
+ //#endregion
205
+ export { unrollRepeats };
206
+
231
207
  //# sourceMappingURL=regex-unroll.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"regex-unroll.js","sourceRoot":"","sources":["../../../src/core/codegen/regex-unroll.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"regex-unroll.js","names":[],"sources":["../../../src/core/codegen/regex-unroll.ts"],"sourcesContent":["/**\n * Bounded-repeat unrolling for `.test()` regexes.\n *\n * V8's irregexp compiles a counted quantifier (`[0-9a-fA-F]{12}`) into a\n * backtrack-capable loop carrying a counter register, but compiles the same\n * atom written out (`[0-9a-fA-F][0-9a-fA-F]…`) into straight-line matching\n * code. Rewriting one into the other is purely structural — the language the\n * pattern accepts is unchanged — and is worth a lot on exactly the string\n * formats everyday schemas lean on:\n *\n * z.uuid() 3.1x z.guid() 3.4x z.ksuid() 2.7x\n * z.xid() 2.2x z.ulid() 2.1x z.base64() 2.1x\n * z.nanoid() 1.9x z.e164() 1.5x z.iso.date() 1.3x\n *\n * Measured on V8 13.x (node 24). The win starts at `{4}` (1.28x) and grows\n * with the count (2.7x at `{64}`); `{2}`/`{3}` are a wash, which is what\n * {@link MIN_REPEAT} encodes.\n *\n * The rewrite applies only to quantifiers whose atom is a SINGLE CHARACTER\n * matcher — a character class, an escape, or a literal character. A group's\n * repeat is left alone: unrolling it would duplicate capture groups and\n * renumber every backreference after it. Anything the scanner cannot account\n * for exactly makes the whole transform bail (`null`), leaving the original\n * pattern in place.\n *\n * Callers must keep reporting the ORIGINAL source in issues — the rewritten\n * regex's `toString()` would otherwise leak into `pattern:` and diverge from\n * zod. See `emitRegexSourceString`.\n */\n\n/**\n * Smallest mandatory repeat count worth unrolling. Below this the counter loop\n * and the straight-line form measure the same (0.97-1.00x), so leaving the\n * pattern untouched keeps generated output smaller for no speed cost.\n */\nconst MIN_REPEAT = 4;\n\n/**\n * Largest repeat count unrolled. A `{500}` would expand to a pattern longer\n * than anything it could save, so it keeps the counter loop.\n */\nconst MAX_REPEAT = 64;\n\n/** Largest `max - min` optional tail expanded (`{6,14}` → 6 copies + 8 `?` copies). */\nconst MAX_OPTIONAL = 32;\n\n/**\n * Total characters the rewrite may add across a whole pattern. Once spent,\n * later quantifiers are copied verbatim — the rewrite degrades gradually\n * instead of failing, and emitted size stays bounded for hand-written patterns.\n */\nconst GROWTH_BUDGET = 2_048;\n\n/** Characters that begin something other than a literal single-character atom. */\nconst NON_ATOM = new Set([\"^\", \"$\", \"|\", \"(\", \")\", \"*\", \"+\", \"?\"]);\n\n/**\n * Rewrite bounded repeats of single-character atoms into explicit repetition.\n * Returns `null` when nothing changed or the pattern could not be scanned\n * exactly (in which case the caller keeps the original source).\n */\nexport function unrollRepeats(source: string): string | null {\n let out = \"\";\n let index = 0;\n /** Offset in `out` where the most recent atom starts, or -1 when the preceding construct is not a single-character atom. */\n let atomOffset = -1;\n let budget = GROWTH_BUDGET;\n let changed = false;\n\n while (index < source.length) {\n const char = source[index] as string;\n\n if (char === \"\\\\\") {\n const end = readEscape(source, index);\n if (end === null) return null;\n atomOffset = out.length;\n out += source.slice(index, end);\n index = end;\n continue;\n }\n\n if (char === \"[\") {\n const end = readClass(source, index);\n if (end === null) return null;\n atomOffset = out.length;\n out += source.slice(index, end);\n index = end;\n continue;\n }\n\n if (char === \"{\") {\n const quantifier = readQuantifier(source, index);\n if (quantifier !== null) {\n const expansion =\n // A lazy quantifier (`{n,m}?`) prefers the shortest match; the\n // unrolled form's `?` copies are greedy, so it is left alone.\n source[quantifier.end] === \"?\" || atomOffset < 0\n ? null\n : expand(out.slice(atomOffset), quantifier, budget);\n if (expansion === null) {\n out += source.slice(index, quantifier.end);\n } else {\n budget -= expansion.length - (out.length - atomOffset);\n out = out.slice(0, atomOffset) + expansion;\n changed = true;\n }\n // A quantifier cannot itself be quantified, so whatever follows starts\n // a fresh atom.\n atomOffset = -1;\n index = quantifier.end;\n continue;\n }\n // Not a valid quantifier — an unescaped `{` is a literal in Annex B.\n }\n\n atomOffset = NON_ATOM.has(char) || isSurrogate(char) ? -1 : out.length;\n out += char;\n index += 1;\n }\n\n return changed ? out : null;\n}\n\n/** Repeated-atom form of `atom{min,max}`, or null when it is not worth (or safe to) expand. */\nfunction expand(\n atom: string,\n { min, max }: { max: number; min: number },\n budget: number,\n): string | null {\n if (min < MIN_REPEAT || min > MAX_REPEAT) return null;\n const optional = max === Infinity ? 0 : max - min;\n if (optional > MAX_OPTIONAL) return null;\n const mandatory = atom.repeat(min);\n const tail = max === Infinity ? `${atom}*` : `${atom}?`.repeat(optional);\n const expansion = mandatory + tail;\n // `atom{min,max}` is being replaced by `expansion`; charge the difference.\n if (expansion.length - atom.length > budget) return null;\n return expansion;\n}\n\n/** True for a lone UTF-16 surrogate code unit, which is never treated as its own atom. */\nfunction isSurrogate(char: string): boolean {\n const code = char.charCodeAt(0);\n return code >= 0xd8_00 && code <= 0xdf_ff;\n}\n\n/**\n * End offset (exclusive) of the escape sequence starting at `start`, or null\n * when the sequence is not one whose extent is unambiguous.\n *\n * Everything here hinges on the caller only passing FLAG-LESS patterns, where\n * Annex B's \"identity escape\" fallback makes several sequences mean something\n * other than they would under `u`: `\\p{L}` is the letter `p` followed by three\n * literal characters, not a property escape, and `\\uZZZZ` is `u` followed by\n * four literal `Z`s. Consuming those as one atom would attach a following\n * quantifier to the wrong character, so the well-formed fixed-width escapes\n * are recognised exactly and every ambiguous form bails.\n */\nfunction readEscape(source: string, start: number): number | null {\n const next = source[start + 1];\n if (next === undefined) return null;\n\n // Property escapes and named backreferences read differently with and\n // without the `u` flag — never worth resolving for the sake of a rewrite.\n if (next === \"p\" || next === \"P\" || next === \"k\") return null;\n\n // `\\12` may be backreference 12 or backreference 1 followed by a literal 2,\n // depending on how many groups the pattern has.\n if (next >= \"0\" && next <= \"9\") {\n const after = source[start + 2];\n return after !== undefined && after >= \"0\" && after <= \"9\" ? null : start + 2;\n }\n\n if (next === \"u\") return fixedWidth(source, start, 4, isHexDigit);\n if (next === \"x\") return fixedWidth(source, start, 2, isHexDigit);\n if (next === \"c\") return fixedWidth(source, start, 1, isAsciiLetter);\n\n // Character-class escapes (`\\d`, `\\w`, `\\s`), control escapes (`\\n`, `\\t`)\n // and identity escapes (`\\.`, `\\\\`, `\\{`) are all one character wide.\n return start + 2;\n}\n\n/** End offset of `\\<kind>` plus exactly `width` chars satisfying `valid`, or null. */\nfunction fixedWidth(\n source: string,\n start: number,\n width: number,\n valid: (char: string) => boolean,\n): number | null {\n const end = start + 2 + width;\n if (end > source.length) return null;\n for (let index = start + 2; index < end; index++) {\n if (!valid(source[index] as string)) return null;\n }\n return end;\n}\n\nfunction isHexDigit(char: string): boolean {\n return /[0-9a-fA-F]/.test(char);\n}\n\nfunction isAsciiLetter(char: string): boolean {\n return /[a-zA-Z]/.test(char);\n}\n\n/**\n * End offset (exclusive) of the character class starting at `start`, or null\n * when unterminated. The first unescaped `]` closes the class — `[]]` is an\n * empty class followed by a literal `]`, not a class containing `]`.\n */\nfunction readClass(source: string, start: number): number | null {\n let index = start + 1;\n if (source[index] === \"^\") index += 1;\n while (index < source.length) {\n const char = source[index];\n if (char === \"\\\\\") {\n const end = readEscape(source, index);\n if (end === null) return null;\n index = end;\n continue;\n }\n // A `v`-mode nested class would need its own nesting rules; callers only\n // pass flag-less patterns, where `[` inside a class is a literal.\n if (char === \"]\") return index + 1;\n index += 1;\n }\n return null;\n}\n\n/**\n * Parse `{n}`, `{n,}` or `{n,m}` at `start`. Returns null when the braces do\n * not form a quantifier, which Annex B treats as literal `{` characters.\n */\nfunction readQuantifier(\n source: string,\n start: number,\n): { end: number; max: number; min: number } | null {\n const close = source.indexOf(\"}\", start);\n if (close === -1) return null;\n const body = source.slice(start + 1, close);\n const match = /^(\\d+)(?:,(\\d*))?$/.exec(body);\n if (!match) return null;\n const min = Number(match[1]);\n const max =\n match[2] === undefined ? min : match[2] === \"\" ? Infinity : Number(match[2] as string);\n if (max < min) return null;\n return { end: close + 1, max, min };\n}\n"],"mappings":"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"}
@@ -1,5 +1,8 @@
1
- import type { AnyIR } from "../../types.js";
2
- import type { FastGen, SlowGen } from "../context.js";
3
- export declare function slowAny(_ir: AnyIR, _g: SlowGen): string;
4
- export declare function fastAny(_ir: AnyIR, _g: FastGen): string | null;
1
+ import { AnyIR } from "../../types.js";
2
+ import { FastGen, SlowGen } from "../context.js";
3
+ //#region src/core/codegen/schemas/any.d.ts
4
+ declare function slowAny(_ir: AnyIR, _g: SlowGen): string;
5
+ declare function fastAny(_ir: AnyIR, _g: FastGen): string | null;
6
+ //#endregion
7
+ export { fastAny, slowAny };
5
8
  //# sourceMappingURL=any.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"any.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/any.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEtD,wBAAgB,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE9D"}
1
+ {"version":3,"file":"any.d.ts","names":[],"sources":["../../../../src/core/codegen/schemas/any.ts"],"mappings":";;;iBAGgB,QAAQ,KAAK,OAAO,IAAI;iBAIxB,QAAQ,KAAK,OAAO,IAAI"}
@@ -1,7 +1,11 @@
1
- export function slowAny(_ir, _g) {
2
- return "";
1
+ //#region src/core/codegen/schemas/any.ts
2
+ function slowAny(_ir, _g) {
3
+ return "";
3
4
  }
4
- export function fastAny(_ir, _g) {
5
- return "true";
5
+ function fastAny(_ir, _g) {
6
+ return "true";
6
7
  }
8
+ //#endregion
9
+ export { fastAny, slowAny };
10
+
7
11
  //# sourceMappingURL=any.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"any.js","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/any.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,OAAO,CAAC,GAAU,EAAE,EAAW;IAC7C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAU,EAAE,EAAW;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"any.js","names":[],"sources":["../../../../src/core/codegen/schemas/any.ts"],"sourcesContent":["import type { AnyIR } from \"../../types.js\";\nimport type { FastGen, SlowGen } from \"../context.js\";\n\nexport function slowAny(_ir: AnyIR, _g: SlowGen): string {\n return \"\";\n}\n\nexport function fastAny(_ir: AnyIR, _g: FastGen): string | null {\n return \"true\";\n}\n"],"mappings":";AAGA,SAAgB,QAAQ,KAAY,IAAqB;CACvD,OAAO;AACT;AAEA,SAAgB,QAAQ,KAAY,IAA4B;CAC9D,OAAO;AACT"}
@@ -1,7 +1,10 @@
1
- import type { ArrayIR, SchemaIR } from "../../types.js";
2
- import type { FastGen, SlowGen } from "../context.js";
3
- export declare function slowArray(ir: SchemaIR & {
4
- type: "array";
1
+ import { ArrayIR, SchemaIR } from "../../types.js";
2
+ import { FastGen, SlowGen } from "../context.js";
3
+ //#region src/core/codegen/schemas/array.d.ts
4
+ declare function slowArray(ir: SchemaIR & {
5
+ type: "array";
5
6
  }, g: SlowGen): string;
6
- export declare function fastArray(ir: ArrayIR, g: FastGen): string | null;
7
+ declare function fastArray(ir: ArrayIR, g: FastGen): string | null;
8
+ //#endregion
9
+ export { fastArray, slowArray };
7
10
  //# sourceMappingURL=array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../../src/core/codegen/schemas/array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAW,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AActD,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CA4E9E;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA4ChE"}
1
+ {"version":3,"file":"array.d.ts","names":[],"sources":["../../../../src/core/codegen/schemas/array.ts"],"mappings":";;;iBAegB,UAAU,IAAI;EAAa;GAAiB,GAAG;iBA8E/C,UAAU,IAAI,SAAS,GAAG"}