@cabloy/zod 4.3.6

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 (701) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +208 -0
  3. package/index.cjs +33 -0
  4. package/index.d.cts +4 -0
  5. package/index.d.ts +4 -0
  6. package/index.js +4 -0
  7. package/locales/index.cjs +17 -0
  8. package/locales/index.d.cts +1 -0
  9. package/locales/index.d.ts +1 -0
  10. package/locales/index.js +1 -0
  11. package/locales/package.json +7 -0
  12. package/mini/index.cjs +32 -0
  13. package/mini/index.d.cts +3 -0
  14. package/mini/index.d.ts +3 -0
  15. package/mini/index.js +3 -0
  16. package/mini/package.json +7 -0
  17. package/package.json +135 -0
  18. package/src/index.ts +4 -0
  19. package/src/locales/index.ts +1 -0
  20. package/src/mini/index.ts +3 -0
  21. package/src/v3/ZodError.ts +330 -0
  22. package/src/v3/benchmarks/datetime.ts +58 -0
  23. package/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  24. package/src/v3/benchmarks/index.ts +59 -0
  25. package/src/v3/benchmarks/ipv4.ts +57 -0
  26. package/src/v3/benchmarks/object.ts +69 -0
  27. package/src/v3/benchmarks/primitives.ts +162 -0
  28. package/src/v3/benchmarks/realworld.ts +63 -0
  29. package/src/v3/benchmarks/string.ts +55 -0
  30. package/src/v3/benchmarks/union.ts +80 -0
  31. package/src/v3/errors.ts +13 -0
  32. package/src/v3/external.ts +6 -0
  33. package/src/v3/helpers/enumUtil.ts +17 -0
  34. package/src/v3/helpers/errorUtil.ts +8 -0
  35. package/src/v3/helpers/parseUtil.ts +176 -0
  36. package/src/v3/helpers/partialUtil.ts +34 -0
  37. package/src/v3/helpers/typeAliases.ts +2 -0
  38. package/src/v3/helpers/util.ts +224 -0
  39. package/src/v3/index.ts +4 -0
  40. package/src/v3/locales/en.ts +124 -0
  41. package/src/v3/standard-schema.ts +113 -0
  42. package/src/v3/tests/Mocker.ts +54 -0
  43. package/src/v3/tests/all-errors.test.ts +157 -0
  44. package/src/v3/tests/anyunknown.test.ts +28 -0
  45. package/src/v3/tests/array.test.ts +71 -0
  46. package/src/v3/tests/async-parsing.test.ts +388 -0
  47. package/src/v3/tests/async-refinements.test.ts +46 -0
  48. package/src/v3/tests/base.test.ts +29 -0
  49. package/src/v3/tests/bigint.test.ts +55 -0
  50. package/src/v3/tests/branded.test.ts +53 -0
  51. package/src/v3/tests/catch.test.ts +220 -0
  52. package/src/v3/tests/coerce.test.ts +133 -0
  53. package/src/v3/tests/complex.test.ts +70 -0
  54. package/src/v3/tests/custom.test.ts +31 -0
  55. package/src/v3/tests/date.test.ts +32 -0
  56. package/src/v3/tests/deepmasking.test.ts +186 -0
  57. package/src/v3/tests/default.test.ts +112 -0
  58. package/src/v3/tests/description.test.ts +33 -0
  59. package/src/v3/tests/discriminated-unions.test.ts +315 -0
  60. package/src/v3/tests/enum.test.ts +80 -0
  61. package/src/v3/tests/error.test.ts +551 -0
  62. package/src/v3/tests/firstparty.test.ts +87 -0
  63. package/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  64. package/src/v3/tests/function.test.ts +261 -0
  65. package/src/v3/tests/generics.test.ts +48 -0
  66. package/src/v3/tests/instanceof.test.ts +37 -0
  67. package/src/v3/tests/intersection.test.ts +110 -0
  68. package/src/v3/tests/language-server.source.ts +76 -0
  69. package/src/v3/tests/language-server.test.ts +207 -0
  70. package/src/v3/tests/literal.test.ts +36 -0
  71. package/src/v3/tests/map.test.ts +110 -0
  72. package/src/v3/tests/masking.test.ts +4 -0
  73. package/src/v3/tests/mocker.test.ts +19 -0
  74. package/src/v3/tests/nan.test.ts +24 -0
  75. package/src/v3/tests/nativeEnum.test.ts +87 -0
  76. package/src/v3/tests/nullable.test.ts +42 -0
  77. package/src/v3/tests/number.test.ts +176 -0
  78. package/src/v3/tests/object-augmentation.test.ts +29 -0
  79. package/src/v3/tests/object-in-es5-env.test.ts +29 -0
  80. package/src/v3/tests/object.test.ts +434 -0
  81. package/src/v3/tests/optional.test.ts +42 -0
  82. package/src/v3/tests/parseUtil.test.ts +23 -0
  83. package/src/v3/tests/parser.test.ts +41 -0
  84. package/src/v3/tests/partials.test.ts +243 -0
  85. package/src/v3/tests/pickomit.test.ts +111 -0
  86. package/src/v3/tests/pipeline.test.ts +29 -0
  87. package/src/v3/tests/preprocess.test.ts +186 -0
  88. package/src/v3/tests/primitive.test.ts +440 -0
  89. package/src/v3/tests/promise.test.ts +90 -0
  90. package/src/v3/tests/readonly.test.ts +194 -0
  91. package/src/v3/tests/record.test.ts +171 -0
  92. package/src/v3/tests/recursive.test.ts +197 -0
  93. package/src/v3/tests/refine.test.ts +313 -0
  94. package/src/v3/tests/safeparse.test.ts +27 -0
  95. package/src/v3/tests/set.test.ts +142 -0
  96. package/src/v3/tests/standard-schema.test.ts +83 -0
  97. package/src/v3/tests/string.test.ts +916 -0
  98. package/src/v3/tests/transformer.test.ts +233 -0
  99. package/src/v3/tests/tuple.test.ts +90 -0
  100. package/src/v3/tests/unions.test.ts +57 -0
  101. package/src/v3/tests/validations.test.ts +133 -0
  102. package/src/v3/tests/void.test.ts +15 -0
  103. package/src/v3/types.ts +5138 -0
  104. package/src/v4/classic/checks.ts +32 -0
  105. package/src/v4/classic/coerce.ts +27 -0
  106. package/src/v4/classic/compat.ts +70 -0
  107. package/src/v4/classic/errors.ts +82 -0
  108. package/src/v4/classic/external.ts +51 -0
  109. package/src/v4/classic/from-json-schema.ts +643 -0
  110. package/src/v4/classic/index.ts +5 -0
  111. package/src/v4/classic/iso.ts +90 -0
  112. package/src/v4/classic/parse.ts +82 -0
  113. package/src/v4/classic/schemas.ts +2409 -0
  114. package/src/v4/classic/tests/anyunknown.test.ts +26 -0
  115. package/src/v4/classic/tests/apply.test.ts +59 -0
  116. package/src/v4/classic/tests/array.test.ts +264 -0
  117. package/src/v4/classic/tests/assignability.test.ts +210 -0
  118. package/src/v4/classic/tests/async-parsing.test.ts +381 -0
  119. package/src/v4/classic/tests/async-refinements.test.ts +68 -0
  120. package/src/v4/classic/tests/base.test.ts +7 -0
  121. package/src/v4/classic/tests/bigint.test.ts +54 -0
  122. package/src/v4/classic/tests/brand.test.ts +106 -0
  123. package/src/v4/classic/tests/catch.test.ts +276 -0
  124. package/src/v4/classic/tests/coalesce.test.ts +20 -0
  125. package/src/v4/classic/tests/codec-examples.test.ts +573 -0
  126. package/src/v4/classic/tests/codec.test.ts +562 -0
  127. package/src/v4/classic/tests/coerce.test.ts +160 -0
  128. package/src/v4/classic/tests/continuability.test.ts +374 -0
  129. package/src/v4/classic/tests/custom.test.ts +40 -0
  130. package/src/v4/classic/tests/date.test.ts +62 -0
  131. package/src/v4/classic/tests/datetime.test.ts +302 -0
  132. package/src/v4/classic/tests/default.test.ts +365 -0
  133. package/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  134. package/src/v4/classic/tests/description.test.ts +32 -0
  135. package/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
  136. package/src/v4/classic/tests/enum.test.ts +285 -0
  137. package/src/v4/classic/tests/error-utils.test.ts +595 -0
  138. package/src/v4/classic/tests/error.test.ts +711 -0
  139. package/src/v4/classic/tests/file.test.ts +96 -0
  140. package/src/v4/classic/tests/firstparty.test.ts +179 -0
  141. package/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  142. package/src/v4/classic/tests/from-json-schema.test.ts +734 -0
  143. package/src/v4/classic/tests/function.test.ts +360 -0
  144. package/src/v4/classic/tests/generics.test.ts +72 -0
  145. package/src/v4/classic/tests/hash.test.ts +68 -0
  146. package/src/v4/classic/tests/index.test.ts +939 -0
  147. package/src/v4/classic/tests/instanceof.test.ts +60 -0
  148. package/src/v4/classic/tests/intersection.test.ts +198 -0
  149. package/src/v4/classic/tests/json.test.ts +109 -0
  150. package/src/v4/classic/tests/lazy.test.ts +227 -0
  151. package/src/v4/classic/tests/literal.test.ts +117 -0
  152. package/src/v4/classic/tests/locales_ka.test.ts +29 -0
  153. package/src/v4/classic/tests/map.test.ts +330 -0
  154. package/src/v4/classic/tests/nan.test.ts +21 -0
  155. package/src/v4/classic/tests/nested-refine.test.ts +168 -0
  156. package/src/v4/classic/tests/nonoptional.test.ts +101 -0
  157. package/src/v4/classic/tests/nullable.test.ts +22 -0
  158. package/src/v4/classic/tests/number.test.ts +311 -0
  159. package/src/v4/classic/tests/object.test.ts +640 -0
  160. package/src/v4/classic/tests/optional.test.ts +223 -0
  161. package/src/v4/classic/tests/partial.test.ts +427 -0
  162. package/src/v4/classic/tests/pickomit.test.ts +211 -0
  163. package/src/v4/classic/tests/pipe.test.ts +101 -0
  164. package/src/v4/classic/tests/prefault.test.ts +74 -0
  165. package/src/v4/classic/tests/preprocess.test.ts +282 -0
  166. package/src/v4/classic/tests/primitive.test.ts +175 -0
  167. package/src/v4/classic/tests/promise.test.ts +81 -0
  168. package/src/v4/classic/tests/prototypes.test.ts +23 -0
  169. package/src/v4/classic/tests/readonly.test.ts +252 -0
  170. package/src/v4/classic/tests/record.test.ts +632 -0
  171. package/src/v4/classic/tests/recursive-types.test.ts +582 -0
  172. package/src/v4/classic/tests/refine.test.ts +570 -0
  173. package/src/v4/classic/tests/registries.test.ts +243 -0
  174. package/src/v4/classic/tests/set.test.ts +181 -0
  175. package/src/v4/classic/tests/standard-schema.test.ts +134 -0
  176. package/src/v4/classic/tests/string-formats.test.ts +125 -0
  177. package/src/v4/classic/tests/string.test.ts +1200 -0
  178. package/src/v4/classic/tests/stringbool.test.ts +106 -0
  179. package/src/v4/classic/tests/template-literal.test.ts +771 -0
  180. package/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  181. package/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
  182. package/src/v4/classic/tests/transform.test.ts +361 -0
  183. package/src/v4/classic/tests/tuple.test.ts +183 -0
  184. package/src/v4/classic/tests/union.test.ts +219 -0
  185. package/src/v4/classic/tests/url.test.ts +13 -0
  186. package/src/v4/classic/tests/validations.test.ts +283 -0
  187. package/src/v4/classic/tests/void.test.ts +12 -0
  188. package/src/v4/core/api.ts +1798 -0
  189. package/src/v4/core/checks.ts +1293 -0
  190. package/src/v4/core/config.ts +15 -0
  191. package/src/v4/core/core.ts +138 -0
  192. package/src/v4/core/doc.ts +44 -0
  193. package/src/v4/core/errors.ts +448 -0
  194. package/src/v4/core/index.ts +16 -0
  195. package/src/v4/core/json-schema-generator.ts +126 -0
  196. package/src/v4/core/json-schema-processors.ts +667 -0
  197. package/src/v4/core/json-schema.ts +147 -0
  198. package/src/v4/core/parse.ts +195 -0
  199. package/src/v4/core/regexes.ts +185 -0
  200. package/src/v4/core/registries.ts +105 -0
  201. package/src/v4/core/schemas.ts +4562 -0
  202. package/src/v4/core/standard-schema.ts +159 -0
  203. package/src/v4/core/tests/extend.test.ts +59 -0
  204. package/src/v4/core/tests/index.test.ts +46 -0
  205. package/src/v4/core/tests/locales/be.test.ts +124 -0
  206. package/src/v4/core/tests/locales/en.test.ts +22 -0
  207. package/src/v4/core/tests/locales/es.test.ts +181 -0
  208. package/src/v4/core/tests/locales/he.test.ts +379 -0
  209. package/src/v4/core/tests/locales/hr.test.ts +163 -0
  210. package/src/v4/core/tests/locales/nl.test.ts +46 -0
  211. package/src/v4/core/tests/locales/ru.test.ts +128 -0
  212. package/src/v4/core/tests/locales/tr.test.ts +69 -0
  213. package/src/v4/core/tests/locales/uz.test.ts +105 -0
  214. package/src/v4/core/tests/record-constructor.test.ts +67 -0
  215. package/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  216. package/src/v4/core/to-json-schema.ts +613 -0
  217. package/src/v4/core/util.ts +984 -0
  218. package/src/v4/core/versions.ts +5 -0
  219. package/src/v4/core/zsf.ts +323 -0
  220. package/src/v4/index.ts +4 -0
  221. package/src/v4/locales/ar.ts +115 -0
  222. package/src/v4/locales/az.ts +111 -0
  223. package/src/v4/locales/be.ts +176 -0
  224. package/src/v4/locales/bg.ts +128 -0
  225. package/src/v4/locales/ca.ts +116 -0
  226. package/src/v4/locales/cs.ts +118 -0
  227. package/src/v4/locales/da.ts +123 -0
  228. package/src/v4/locales/de.ts +116 -0
  229. package/src/v4/locales/en.ts +119 -0
  230. package/src/v4/locales/eo.ts +118 -0
  231. package/src/v4/locales/es.ts +141 -0
  232. package/src/v4/locales/fa.ts +126 -0
  233. package/src/v4/locales/fi.ts +121 -0
  234. package/src/v4/locales/fr-CA.ts +116 -0
  235. package/src/v4/locales/fr.ts +116 -0
  236. package/src/v4/locales/he.ts +246 -0
  237. package/src/v4/locales/hr.ts +131 -0
  238. package/src/v4/locales/hu.ts +117 -0
  239. package/src/v4/locales/hy.ts +164 -0
  240. package/src/v4/locales/id.ts +115 -0
  241. package/src/v4/locales/index.ts +50 -0
  242. package/src/v4/locales/is.ts +119 -0
  243. package/src/v4/locales/it.ts +116 -0
  244. package/src/v4/locales/ja.ts +114 -0
  245. package/src/v4/locales/ka.ts +123 -0
  246. package/src/v4/locales/kh.ts +7 -0
  247. package/src/v4/locales/km.ts +119 -0
  248. package/src/v4/locales/ko.ts +121 -0
  249. package/src/v4/locales/lt.ts +239 -0
  250. package/src/v4/locales/mk.ts +118 -0
  251. package/src/v4/locales/ms.ts +115 -0
  252. package/src/v4/locales/nl.ts +121 -0
  253. package/src/v4/locales/no.ts +116 -0
  254. package/src/v4/locales/ota.ts +117 -0
  255. package/src/v4/locales/pl.ts +118 -0
  256. package/src/v4/locales/ps.ts +126 -0
  257. package/src/v4/locales/pt.ts +116 -0
  258. package/src/v4/locales/ru.ts +176 -0
  259. package/src/v4/locales/sl.ts +118 -0
  260. package/src/v4/locales/sv.ts +119 -0
  261. package/src/v4/locales/ta.ts +118 -0
  262. package/src/v4/locales/th.ts +119 -0
  263. package/src/v4/locales/tr.ts +111 -0
  264. package/src/v4/locales/ua.ts +7 -0
  265. package/src/v4/locales/uk.ts +117 -0
  266. package/src/v4/locales/ur.ts +119 -0
  267. package/src/v4/locales/uz.ts +117 -0
  268. package/src/v4/locales/vi.ts +117 -0
  269. package/src/v4/locales/yo.ts +124 -0
  270. package/src/v4/locales/zh-CN.ts +116 -0
  271. package/src/v4/locales/zh-TW.ts +115 -0
  272. package/src/v4/mini/checks.ts +32 -0
  273. package/src/v4/mini/coerce.ts +27 -0
  274. package/src/v4/mini/external.ts +40 -0
  275. package/src/v4/mini/index.ts +3 -0
  276. package/src/v4/mini/iso.ts +66 -0
  277. package/src/v4/mini/parse.ts +14 -0
  278. package/src/v4/mini/schemas.ts +1916 -0
  279. package/src/v4/mini/tests/apply.test.ts +24 -0
  280. package/src/v4/mini/tests/assignability.test.ts +129 -0
  281. package/src/v4/mini/tests/brand.test.ts +94 -0
  282. package/src/v4/mini/tests/checks.test.ts +144 -0
  283. package/src/v4/mini/tests/codec.test.ts +529 -0
  284. package/src/v4/mini/tests/computed.test.ts +36 -0
  285. package/src/v4/mini/tests/error.test.ts +22 -0
  286. package/src/v4/mini/tests/functions.test.ts +5 -0
  287. package/src/v4/mini/tests/index.test.ts +963 -0
  288. package/src/v4/mini/tests/number.test.ts +95 -0
  289. package/src/v4/mini/tests/object.test.ts +227 -0
  290. package/src/v4/mini/tests/prototypes.test.ts +43 -0
  291. package/src/v4/mini/tests/recursive-types.test.ts +275 -0
  292. package/src/v4/mini/tests/standard-schema.test.ts +50 -0
  293. package/src/v4/mini/tests/string.test.ts +347 -0
  294. package/src/v4-mini/index.ts +3 -0
  295. package/v3/ZodError.cjs +138 -0
  296. package/v3/ZodError.d.cts +164 -0
  297. package/v3/ZodError.d.ts +164 -0
  298. package/v3/ZodError.js +133 -0
  299. package/v3/errors.cjs +17 -0
  300. package/v3/errors.d.cts +5 -0
  301. package/v3/errors.d.ts +5 -0
  302. package/v3/errors.js +9 -0
  303. package/v3/external.cjs +22 -0
  304. package/v3/external.d.cts +6 -0
  305. package/v3/external.d.ts +6 -0
  306. package/v3/external.js +6 -0
  307. package/v3/helpers/enumUtil.cjs +2 -0
  308. package/v3/helpers/enumUtil.d.cts +8 -0
  309. package/v3/helpers/enumUtil.d.ts +8 -0
  310. package/v3/helpers/enumUtil.js +1 -0
  311. package/v3/helpers/errorUtil.cjs +9 -0
  312. package/v3/helpers/errorUtil.d.cts +9 -0
  313. package/v3/helpers/errorUtil.d.ts +9 -0
  314. package/v3/helpers/errorUtil.js +6 -0
  315. package/v3/helpers/parseUtil.cjs +124 -0
  316. package/v3/helpers/parseUtil.d.cts +78 -0
  317. package/v3/helpers/parseUtil.d.ts +78 -0
  318. package/v3/helpers/parseUtil.js +109 -0
  319. package/v3/helpers/partialUtil.cjs +2 -0
  320. package/v3/helpers/partialUtil.d.cts +8 -0
  321. package/v3/helpers/partialUtil.d.ts +8 -0
  322. package/v3/helpers/partialUtil.js +1 -0
  323. package/v3/helpers/typeAliases.cjs +2 -0
  324. package/v3/helpers/typeAliases.d.cts +2 -0
  325. package/v3/helpers/typeAliases.d.ts +2 -0
  326. package/v3/helpers/typeAliases.js +1 -0
  327. package/v3/helpers/util.cjs +137 -0
  328. package/v3/helpers/util.d.cts +85 -0
  329. package/v3/helpers/util.d.ts +85 -0
  330. package/v3/helpers/util.js +133 -0
  331. package/v3/index.cjs +33 -0
  332. package/v3/index.d.cts +4 -0
  333. package/v3/index.d.ts +4 -0
  334. package/v3/index.js +4 -0
  335. package/v3/locales/en.cjs +112 -0
  336. package/v3/locales/en.d.cts +3 -0
  337. package/v3/locales/en.d.ts +3 -0
  338. package/v3/locales/en.js +109 -0
  339. package/v3/package.json +7 -0
  340. package/v3/standard-schema.cjs +2 -0
  341. package/v3/standard-schema.d.cts +102 -0
  342. package/v3/standard-schema.d.ts +102 -0
  343. package/v3/standard-schema.js +1 -0
  344. package/v3/types.cjs +3777 -0
  345. package/v3/types.d.cts +1034 -0
  346. package/v3/types.d.ts +1034 -0
  347. package/v3/types.js +3695 -0
  348. package/v4/classic/checks.cjs +33 -0
  349. package/v4/classic/checks.d.cts +1 -0
  350. package/v4/classic/checks.d.ts +1 -0
  351. package/v4/classic/checks.js +1 -0
  352. package/v4/classic/coerce.cjs +47 -0
  353. package/v4/classic/coerce.d.cts +17 -0
  354. package/v4/classic/coerce.d.ts +17 -0
  355. package/v4/classic/coerce.js +17 -0
  356. package/v4/classic/compat.cjs +61 -0
  357. package/v4/classic/compat.d.cts +50 -0
  358. package/v4/classic/compat.d.ts +50 -0
  359. package/v4/classic/compat.js +31 -0
  360. package/v4/classic/errors.cjs +74 -0
  361. package/v4/classic/errors.d.cts +30 -0
  362. package/v4/classic/errors.d.ts +30 -0
  363. package/v4/classic/errors.js +48 -0
  364. package/v4/classic/external.cjs +73 -0
  365. package/v4/classic/external.d.cts +15 -0
  366. package/v4/classic/external.d.ts +15 -0
  367. package/v4/classic/external.js +20 -0
  368. package/v4/classic/from-json-schema.cjs +610 -0
  369. package/v4/classic/from-json-schema.d.cts +12 -0
  370. package/v4/classic/from-json-schema.d.ts +12 -0
  371. package/v4/classic/from-json-schema.js +584 -0
  372. package/v4/classic/index.cjs +33 -0
  373. package/v4/classic/index.d.cts +4 -0
  374. package/v4/classic/index.d.ts +4 -0
  375. package/v4/classic/index.js +4 -0
  376. package/v4/classic/iso.cjs +60 -0
  377. package/v4/classic/iso.d.cts +22 -0
  378. package/v4/classic/iso.d.ts +22 -0
  379. package/v4/classic/iso.js +30 -0
  380. package/v4/classic/package.json +7 -0
  381. package/v4/classic/parse.cjs +41 -0
  382. package/v4/classic/parse.d.cts +31 -0
  383. package/v4/classic/parse.d.ts +31 -0
  384. package/v4/classic/parse.js +15 -0
  385. package/v4/classic/schemas.cjs +1272 -0
  386. package/v4/classic/schemas.d.cts +739 -0
  387. package/v4/classic/schemas.d.ts +739 -0
  388. package/v4/classic/schemas.js +1157 -0
  389. package/v4/core/api.cjs +1222 -0
  390. package/v4/core/api.d.cts +304 -0
  391. package/v4/core/api.d.ts +304 -0
  392. package/v4/core/api.js +1082 -0
  393. package/v4/core/checks.cjs +601 -0
  394. package/v4/core/checks.d.cts +278 -0
  395. package/v4/core/checks.d.ts +278 -0
  396. package/v4/core/checks.js +575 -0
  397. package/v4/core/core.cjs +83 -0
  398. package/v4/core/core.d.cts +70 -0
  399. package/v4/core/core.d.ts +70 -0
  400. package/v4/core/core.js +76 -0
  401. package/v4/core/doc.cjs +39 -0
  402. package/v4/core/doc.d.cts +14 -0
  403. package/v4/core/doc.d.ts +14 -0
  404. package/v4/core/doc.js +35 -0
  405. package/v4/core/errors.cjs +213 -0
  406. package/v4/core/errors.d.cts +220 -0
  407. package/v4/core/errors.d.ts +220 -0
  408. package/v4/core/errors.js +182 -0
  409. package/v4/core/index.cjs +47 -0
  410. package/v4/core/index.d.cts +16 -0
  411. package/v4/core/index.d.ts +16 -0
  412. package/v4/core/index.js +16 -0
  413. package/v4/core/json-schema-generator.cjs +99 -0
  414. package/v4/core/json-schema-generator.d.cts +65 -0
  415. package/v4/core/json-schema-generator.d.ts +65 -0
  416. package/v4/core/json-schema-generator.js +95 -0
  417. package/v4/core/json-schema-processors.cjs +648 -0
  418. package/v4/core/json-schema-processors.d.cts +49 -0
  419. package/v4/core/json-schema-processors.d.ts +49 -0
  420. package/v4/core/json-schema-processors.js +605 -0
  421. package/v4/core/json-schema.cjs +2 -0
  422. package/v4/core/json-schema.d.cts +88 -0
  423. package/v4/core/json-schema.d.ts +88 -0
  424. package/v4/core/json-schema.js +1 -0
  425. package/v4/core/package.json +7 -0
  426. package/v4/core/parse.cjs +131 -0
  427. package/v4/core/parse.d.cts +49 -0
  428. package/v4/core/parse.d.ts +49 -0
  429. package/v4/core/parse.js +93 -0
  430. package/v4/core/regexes.cjs +167 -0
  431. package/v4/core/regexes.d.cts +80 -0
  432. package/v4/core/regexes.d.ts +80 -0
  433. package/v4/core/regexes.js +134 -0
  434. package/v4/core/registries.cjs +56 -0
  435. package/v4/core/registries.d.cts +35 -0
  436. package/v4/core/registries.d.ts +35 -0
  437. package/v4/core/registries.js +51 -0
  438. package/v4/core/schemas.cjs +2147 -0
  439. package/v4/core/schemas.d.cts +1147 -0
  440. package/v4/core/schemas.d.ts +1147 -0
  441. package/v4/core/schemas.js +2115 -0
  442. package/v4/core/standard-schema.cjs +2 -0
  443. package/v4/core/standard-schema.d.cts +126 -0
  444. package/v4/core/standard-schema.d.ts +126 -0
  445. package/v4/core/standard-schema.js +1 -0
  446. package/v4/core/to-json-schema.cjs +446 -0
  447. package/v4/core/to-json-schema.d.cts +114 -0
  448. package/v4/core/to-json-schema.d.ts +114 -0
  449. package/v4/core/to-json-schema.js +437 -0
  450. package/v4/core/util.cjs +729 -0
  451. package/v4/core/util.d.cts +201 -0
  452. package/v4/core/util.d.ts +201 -0
  453. package/v4/core/util.js +668 -0
  454. package/v4/core/versions.cjs +8 -0
  455. package/v4/core/versions.d.cts +5 -0
  456. package/v4/core/versions.d.ts +5 -0
  457. package/v4/core/versions.js +5 -0
  458. package/v4/index.cjs +22 -0
  459. package/v4/index.d.cts +3 -0
  460. package/v4/index.d.ts +3 -0
  461. package/v4/index.js +3 -0
  462. package/v4/locales/ar.cjs +133 -0
  463. package/v4/locales/ar.d.cts +5 -0
  464. package/v4/locales/ar.d.ts +4 -0
  465. package/v4/locales/ar.js +106 -0
  466. package/v4/locales/az.cjs +132 -0
  467. package/v4/locales/az.d.cts +5 -0
  468. package/v4/locales/az.d.ts +4 -0
  469. package/v4/locales/az.js +105 -0
  470. package/v4/locales/be.cjs +183 -0
  471. package/v4/locales/be.d.cts +5 -0
  472. package/v4/locales/be.d.ts +4 -0
  473. package/v4/locales/be.js +156 -0
  474. package/v4/locales/bg.cjs +147 -0
  475. package/v4/locales/bg.d.cts +5 -0
  476. package/v4/locales/bg.d.ts +4 -0
  477. package/v4/locales/bg.js +120 -0
  478. package/v4/locales/ca.cjs +134 -0
  479. package/v4/locales/ca.d.cts +5 -0
  480. package/v4/locales/ca.d.ts +4 -0
  481. package/v4/locales/ca.js +107 -0
  482. package/v4/locales/cs.cjs +138 -0
  483. package/v4/locales/cs.d.cts +5 -0
  484. package/v4/locales/cs.d.ts +4 -0
  485. package/v4/locales/cs.js +111 -0
  486. package/v4/locales/da.cjs +142 -0
  487. package/v4/locales/da.d.cts +5 -0
  488. package/v4/locales/da.d.ts +4 -0
  489. package/v4/locales/da.js +115 -0
  490. package/v4/locales/de.cjs +135 -0
  491. package/v4/locales/de.d.cts +5 -0
  492. package/v4/locales/de.d.ts +4 -0
  493. package/v4/locales/de.js +108 -0
  494. package/v4/locales/en.cjs +136 -0
  495. package/v4/locales/en.d.cts +5 -0
  496. package/v4/locales/en.d.ts +4 -0
  497. package/v4/locales/en.js +109 -0
  498. package/v4/locales/eo.cjs +136 -0
  499. package/v4/locales/eo.d.cts +5 -0
  500. package/v4/locales/eo.d.ts +4 -0
  501. package/v4/locales/eo.js +109 -0
  502. package/v4/locales/es.cjs +159 -0
  503. package/v4/locales/es.d.cts +5 -0
  504. package/v4/locales/es.d.ts +4 -0
  505. package/v4/locales/es.js +132 -0
  506. package/v4/locales/fa.cjs +141 -0
  507. package/v4/locales/fa.d.cts +5 -0
  508. package/v4/locales/fa.d.ts +4 -0
  509. package/v4/locales/fa.js +114 -0
  510. package/v4/locales/fi.cjs +139 -0
  511. package/v4/locales/fi.d.cts +5 -0
  512. package/v4/locales/fi.d.ts +4 -0
  513. package/v4/locales/fi.js +112 -0
  514. package/v4/locales/fr-CA.cjs +134 -0
  515. package/v4/locales/fr-CA.d.cts +5 -0
  516. package/v4/locales/fr-CA.d.ts +4 -0
  517. package/v4/locales/fr-CA.js +107 -0
  518. package/v4/locales/fr.cjs +135 -0
  519. package/v4/locales/fr.d.cts +5 -0
  520. package/v4/locales/fr.d.ts +4 -0
  521. package/v4/locales/fr.js +108 -0
  522. package/v4/locales/he.cjs +241 -0
  523. package/v4/locales/he.d.cts +5 -0
  524. package/v4/locales/he.d.ts +4 -0
  525. package/v4/locales/he.js +214 -0
  526. package/v4/locales/hr.cjs +149 -0
  527. package/v4/locales/hr.d.cts +5 -0
  528. package/v4/locales/hr.d.ts +4 -0
  529. package/v4/locales/hr.js +122 -0
  530. package/v4/locales/hu.cjs +135 -0
  531. package/v4/locales/hu.d.cts +5 -0
  532. package/v4/locales/hu.d.ts +4 -0
  533. package/v4/locales/hu.js +108 -0
  534. package/v4/locales/hy.cjs +174 -0
  535. package/v4/locales/hy.d.cts +5 -0
  536. package/v4/locales/hy.d.ts +4 -0
  537. package/v4/locales/hy.js +147 -0
  538. package/v4/locales/id.cjs +133 -0
  539. package/v4/locales/id.d.cts +5 -0
  540. package/v4/locales/id.d.ts +4 -0
  541. package/v4/locales/id.js +106 -0
  542. package/v4/locales/index.cjs +106 -0
  543. package/v4/locales/index.d.cts +50 -0
  544. package/v4/locales/index.d.ts +50 -0
  545. package/v4/locales/index.js +50 -0
  546. package/v4/locales/is.cjs +136 -0
  547. package/v4/locales/is.d.cts +5 -0
  548. package/v4/locales/is.d.ts +4 -0
  549. package/v4/locales/is.js +109 -0
  550. package/v4/locales/it.cjs +135 -0
  551. package/v4/locales/it.d.cts +5 -0
  552. package/v4/locales/it.d.ts +4 -0
  553. package/v4/locales/it.js +108 -0
  554. package/v4/locales/ja.cjs +134 -0
  555. package/v4/locales/ja.d.cts +5 -0
  556. package/v4/locales/ja.d.ts +4 -0
  557. package/v4/locales/ja.js +107 -0
  558. package/v4/locales/ka.cjs +139 -0
  559. package/v4/locales/ka.d.cts +5 -0
  560. package/v4/locales/ka.d.ts +4 -0
  561. package/v4/locales/ka.js +112 -0
  562. package/v4/locales/kh.cjs +12 -0
  563. package/v4/locales/kh.d.cts +5 -0
  564. package/v4/locales/kh.d.ts +5 -0
  565. package/v4/locales/kh.js +5 -0
  566. package/v4/locales/km.cjs +137 -0
  567. package/v4/locales/km.d.cts +5 -0
  568. package/v4/locales/km.d.ts +4 -0
  569. package/v4/locales/km.js +110 -0
  570. package/v4/locales/ko.cjs +138 -0
  571. package/v4/locales/ko.d.cts +5 -0
  572. package/v4/locales/ko.d.ts +4 -0
  573. package/v4/locales/ko.js +111 -0
  574. package/v4/locales/lt.cjs +230 -0
  575. package/v4/locales/lt.d.cts +5 -0
  576. package/v4/locales/lt.d.ts +4 -0
  577. package/v4/locales/lt.js +203 -0
  578. package/v4/locales/mk.cjs +136 -0
  579. package/v4/locales/mk.d.cts +5 -0
  580. package/v4/locales/mk.d.ts +4 -0
  581. package/v4/locales/mk.js +109 -0
  582. package/v4/locales/ms.cjs +134 -0
  583. package/v4/locales/ms.d.cts +5 -0
  584. package/v4/locales/ms.d.ts +4 -0
  585. package/v4/locales/ms.js +107 -0
  586. package/v4/locales/nl.cjs +137 -0
  587. package/v4/locales/nl.d.cts +5 -0
  588. package/v4/locales/nl.d.ts +4 -0
  589. package/v4/locales/nl.js +110 -0
  590. package/v4/locales/no.cjs +135 -0
  591. package/v4/locales/no.d.cts +5 -0
  592. package/v4/locales/no.d.ts +4 -0
  593. package/v4/locales/no.js +108 -0
  594. package/v4/locales/ota.cjs +136 -0
  595. package/v4/locales/ota.d.cts +5 -0
  596. package/v4/locales/ota.d.ts +4 -0
  597. package/v4/locales/ota.js +109 -0
  598. package/v4/locales/package.json +7 -0
  599. package/v4/locales/pl.cjs +136 -0
  600. package/v4/locales/pl.d.cts +5 -0
  601. package/v4/locales/pl.d.ts +4 -0
  602. package/v4/locales/pl.js +109 -0
  603. package/v4/locales/ps.cjs +141 -0
  604. package/v4/locales/ps.d.cts +5 -0
  605. package/v4/locales/ps.d.ts +4 -0
  606. package/v4/locales/ps.js +114 -0
  607. package/v4/locales/pt.cjs +135 -0
  608. package/v4/locales/pt.d.cts +5 -0
  609. package/v4/locales/pt.d.ts +4 -0
  610. package/v4/locales/pt.js +108 -0
  611. package/v4/locales/ru.cjs +183 -0
  612. package/v4/locales/ru.d.cts +5 -0
  613. package/v4/locales/ru.d.ts +4 -0
  614. package/v4/locales/ru.js +156 -0
  615. package/v4/locales/sl.cjs +136 -0
  616. package/v4/locales/sl.d.cts +5 -0
  617. package/v4/locales/sl.d.ts +4 -0
  618. package/v4/locales/sl.js +109 -0
  619. package/v4/locales/sv.cjs +137 -0
  620. package/v4/locales/sv.d.cts +5 -0
  621. package/v4/locales/sv.d.ts +4 -0
  622. package/v4/locales/sv.js +110 -0
  623. package/v4/locales/ta.cjs +137 -0
  624. package/v4/locales/ta.d.cts +5 -0
  625. package/v4/locales/ta.d.ts +4 -0
  626. package/v4/locales/ta.js +110 -0
  627. package/v4/locales/th.cjs +137 -0
  628. package/v4/locales/th.d.cts +5 -0
  629. package/v4/locales/th.d.ts +4 -0
  630. package/v4/locales/th.js +110 -0
  631. package/v4/locales/tr.cjs +132 -0
  632. package/v4/locales/tr.d.cts +5 -0
  633. package/v4/locales/tr.d.ts +4 -0
  634. package/v4/locales/tr.js +105 -0
  635. package/v4/locales/ua.cjs +12 -0
  636. package/v4/locales/ua.d.cts +5 -0
  637. package/v4/locales/ua.d.ts +5 -0
  638. package/v4/locales/ua.js +5 -0
  639. package/v4/locales/uk.cjs +135 -0
  640. package/v4/locales/uk.d.cts +5 -0
  641. package/v4/locales/uk.d.ts +4 -0
  642. package/v4/locales/uk.js +108 -0
  643. package/v4/locales/ur.cjs +137 -0
  644. package/v4/locales/ur.d.cts +5 -0
  645. package/v4/locales/ur.d.ts +4 -0
  646. package/v4/locales/ur.js +110 -0
  647. package/v4/locales/uz.cjs +137 -0
  648. package/v4/locales/uz.d.cts +5 -0
  649. package/v4/locales/uz.d.ts +4 -0
  650. package/v4/locales/uz.js +110 -0
  651. package/v4/locales/vi.cjs +135 -0
  652. package/v4/locales/vi.d.cts +5 -0
  653. package/v4/locales/vi.d.ts +4 -0
  654. package/v4/locales/vi.js +108 -0
  655. package/v4/locales/yo.cjs +134 -0
  656. package/v4/locales/yo.d.cts +5 -0
  657. package/v4/locales/yo.d.ts +4 -0
  658. package/v4/locales/yo.js +107 -0
  659. package/v4/locales/zh-CN.cjs +136 -0
  660. package/v4/locales/zh-CN.d.cts +5 -0
  661. package/v4/locales/zh-CN.d.ts +4 -0
  662. package/v4/locales/zh-CN.js +109 -0
  663. package/v4/locales/zh-TW.cjs +134 -0
  664. package/v4/locales/zh-TW.d.cts +5 -0
  665. package/v4/locales/zh-TW.d.ts +4 -0
  666. package/v4/locales/zh-TW.js +107 -0
  667. package/v4/mini/checks.cjs +34 -0
  668. package/v4/mini/checks.d.cts +1 -0
  669. package/v4/mini/checks.d.ts +1 -0
  670. package/v4/mini/checks.js +1 -0
  671. package/v4/mini/coerce.cjs +52 -0
  672. package/v4/mini/coerce.d.cts +7 -0
  673. package/v4/mini/coerce.d.ts +7 -0
  674. package/v4/mini/coerce.js +22 -0
  675. package/v4/mini/external.cjs +63 -0
  676. package/v4/mini/external.d.cts +12 -0
  677. package/v4/mini/external.d.ts +12 -0
  678. package/v4/mini/external.js +14 -0
  679. package/v4/mini/index.cjs +32 -0
  680. package/v4/mini/index.d.cts +3 -0
  681. package/v4/mini/index.d.ts +3 -0
  682. package/v4/mini/index.js +3 -0
  683. package/v4/mini/iso.cjs +64 -0
  684. package/v4/mini/iso.d.cts +22 -0
  685. package/v4/mini/iso.d.ts +22 -0
  686. package/v4/mini/iso.js +34 -0
  687. package/v4/mini/package.json +7 -0
  688. package/v4/mini/parse.cjs +16 -0
  689. package/v4/mini/parse.d.cts +1 -0
  690. package/v4/mini/parse.d.ts +1 -0
  691. package/v4/mini/parse.js +1 -0
  692. package/v4/mini/schemas.cjs +1046 -0
  693. package/v4/mini/schemas.d.cts +427 -0
  694. package/v4/mini/schemas.d.ts +427 -0
  695. package/v4/mini/schemas.js +925 -0
  696. package/v4/package.json +7 -0
  697. package/v4-mini/index.cjs +32 -0
  698. package/v4-mini/index.d.cts +3 -0
  699. package/v4-mini/index.d.ts +3 -0
  700. package/v4-mini/index.js +3 -0
  701. package/v4-mini/package.json +7 -0
@@ -0,0 +1,643 @@
1
+ import type * as JSONSchema from "../core/json-schema.js";
2
+ import { type $ZodRegistry, globalRegistry } from "../core/registries.js";
3
+ import * as _checks from "./checks.js";
4
+ import * as _iso from "./iso.js";
5
+ import * as _schemas from "./schemas.js";
6
+ import type { ZodNumber, ZodString, ZodType } from "./schemas.js";
7
+
8
+ // Local z object to avoid circular dependency with ../index.js
9
+ const z = {
10
+ ..._schemas,
11
+ ..._checks,
12
+ iso: _iso,
13
+ };
14
+
15
+ type JSONSchemaVersion = "draft-2020-12" | "draft-7" | "draft-4" | "openapi-3.0";
16
+
17
+ interface FromJSONSchemaParams {
18
+ defaultTarget?: JSONSchemaVersion;
19
+ registry?: $ZodRegistry<any>;
20
+ }
21
+
22
+ interface ConversionContext {
23
+ version: JSONSchemaVersion;
24
+ defs: Record<string, JSONSchema.JSONSchema>;
25
+ refs: Map<string, ZodType>;
26
+ processing: Set<string>;
27
+ rootSchema: JSONSchema.JSONSchema;
28
+ registry: $ZodRegistry<any>;
29
+ }
30
+
31
+ // Keys that are recognized and handled by the conversion logic
32
+ const RECOGNIZED_KEYS = new Set([
33
+ // Schema identification
34
+ "$schema",
35
+ "$ref",
36
+ "$defs",
37
+ "definitions",
38
+ // Core schema keywords
39
+ "$id",
40
+ "id",
41
+ "$comment",
42
+ "$anchor",
43
+ "$vocabulary",
44
+ "$dynamicRef",
45
+ "$dynamicAnchor",
46
+ // Type
47
+ "type",
48
+ "enum",
49
+ "const",
50
+ // Composition
51
+ "anyOf",
52
+ "oneOf",
53
+ "allOf",
54
+ "not",
55
+ // Object
56
+ "properties",
57
+ "required",
58
+ "additionalProperties",
59
+ "patternProperties",
60
+ "propertyNames",
61
+ "minProperties",
62
+ "maxProperties",
63
+ // Array
64
+ "items",
65
+ "prefixItems",
66
+ "additionalItems",
67
+ "minItems",
68
+ "maxItems",
69
+ "uniqueItems",
70
+ "contains",
71
+ "minContains",
72
+ "maxContains",
73
+ // String
74
+ "minLength",
75
+ "maxLength",
76
+ "pattern",
77
+ "format",
78
+ // Number
79
+ "minimum",
80
+ "maximum",
81
+ "exclusiveMinimum",
82
+ "exclusiveMaximum",
83
+ "multipleOf",
84
+ // Already handled metadata
85
+ "description",
86
+ "default",
87
+ // Content
88
+ "contentEncoding",
89
+ "contentMediaType",
90
+ "contentSchema",
91
+ // Unsupported (error-throwing)
92
+ "unevaluatedItems",
93
+ "unevaluatedProperties",
94
+ "if",
95
+ "then",
96
+ "else",
97
+ "dependentSchemas",
98
+ "dependentRequired",
99
+ // OpenAPI
100
+ "nullable",
101
+ "readOnly",
102
+ ]);
103
+
104
+ function detectVersion(schema: JSONSchema.JSONSchema, defaultTarget?: JSONSchemaVersion): JSONSchemaVersion {
105
+ const $schema = schema.$schema;
106
+
107
+ if ($schema === "https://json-schema.org/draft/2020-12/schema") {
108
+ return "draft-2020-12";
109
+ }
110
+ if ($schema === "http://json-schema.org/draft-07/schema#") {
111
+ return "draft-7";
112
+ }
113
+ if ($schema === "http://json-schema.org/draft-04/schema#") {
114
+ return "draft-4";
115
+ }
116
+
117
+ // Use defaultTarget if provided, otherwise default to draft-2020-12
118
+ return defaultTarget ?? "draft-2020-12";
119
+ }
120
+
121
+ function resolveRef(ref: string, ctx: ConversionContext): JSONSchema.JSONSchema {
122
+ if (!ref.startsWith("#")) {
123
+ throw new Error("External $ref is not supported, only local refs (#/...) are allowed");
124
+ }
125
+
126
+ const path = ref.slice(1).split("/").filter(Boolean);
127
+
128
+ // Handle root reference "#"
129
+ if (path.length === 0) {
130
+ return ctx.rootSchema;
131
+ }
132
+
133
+ const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions";
134
+
135
+ if (path[0] === defsKey) {
136
+ const key = path[1];
137
+ if (!key || !ctx.defs[key]) {
138
+ throw new Error(`Reference not found: ${ref}`);
139
+ }
140
+ return ctx.defs[key]!;
141
+ }
142
+
143
+ throw new Error(`Reference not found: ${ref}`);
144
+ }
145
+
146
+ function convertBaseSchema(schema: JSONSchema.JSONSchema, ctx: ConversionContext): ZodType {
147
+ // Handle unsupported features
148
+ if (schema.not !== undefined) {
149
+ // Special case: { not: {} } represents never
150
+ if (typeof schema.not === "object" && Object.keys(schema.not).length === 0) {
151
+ return z.never();
152
+ }
153
+ throw new Error("not is not supported in Zod (except { not: {} } for never)");
154
+ }
155
+ if (schema.unevaluatedItems !== undefined) {
156
+ throw new Error("unevaluatedItems is not supported");
157
+ }
158
+ if (schema.unevaluatedProperties !== undefined) {
159
+ throw new Error("unevaluatedProperties is not supported");
160
+ }
161
+ if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {
162
+ throw new Error("Conditional schemas (if/then/else) are not supported");
163
+ }
164
+ if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {
165
+ throw new Error("dependentSchemas and dependentRequired are not supported");
166
+ }
167
+
168
+ // Handle $ref
169
+ if (schema.$ref) {
170
+ const refPath = schema.$ref;
171
+ if (ctx.refs.has(refPath)) {
172
+ return ctx.refs.get(refPath)!;
173
+ }
174
+
175
+ if (ctx.processing.has(refPath)) {
176
+ // Circular reference - use lazy
177
+ return z.lazy(() => {
178
+ if (!ctx.refs.has(refPath)) {
179
+ throw new Error(`Circular reference not resolved: ${refPath}`);
180
+ }
181
+ return ctx.refs.get(refPath)!;
182
+ });
183
+ }
184
+
185
+ ctx.processing.add(refPath);
186
+ const resolved = resolveRef(refPath, ctx);
187
+ const zodSchema = convertSchema(resolved, ctx);
188
+ ctx.refs.set(refPath, zodSchema);
189
+ ctx.processing.delete(refPath);
190
+ return zodSchema;
191
+ }
192
+
193
+ // Handle enum
194
+ if (schema.enum !== undefined) {
195
+ const enumValues = schema.enum;
196
+
197
+ // Special case: OpenAPI 3.0 null representation { type: "string", nullable: true, enum: [null] }
198
+ if (
199
+ ctx.version === "openapi-3.0" &&
200
+ schema.nullable === true &&
201
+ enumValues.length === 1 &&
202
+ enumValues[0] === null
203
+ ) {
204
+ return z.null();
205
+ }
206
+
207
+ if (enumValues.length === 0) {
208
+ return z.never();
209
+ }
210
+ if (enumValues.length === 1) {
211
+ return z.literal(enumValues[0]!);
212
+ }
213
+ // Check if all values are strings
214
+ if (enumValues.every((v) => typeof v === "string")) {
215
+ return z.enum(enumValues as [string, ...string[]]);
216
+ }
217
+ // Mixed types - use union of literals
218
+ const literalSchemas = enumValues.map((v) => z.literal(v));
219
+ if (literalSchemas.length < 2) {
220
+ return literalSchemas[0]!;
221
+ }
222
+ return z.union([literalSchemas[0]!, literalSchemas[1]!, ...literalSchemas.slice(2)] as [
223
+ ZodType,
224
+ ZodType,
225
+ ...ZodType[],
226
+ ]);
227
+ }
228
+
229
+ // Handle const
230
+ if (schema.const !== undefined) {
231
+ return z.literal(schema.const);
232
+ }
233
+
234
+ // Handle type
235
+ const type = schema.type;
236
+
237
+ if (Array.isArray(type)) {
238
+ // Expand type array into anyOf union
239
+ const typeSchemas = type.map((t) => {
240
+ const typeSchema: JSONSchema.JSONSchema = { ...schema, type: t };
241
+ return convertBaseSchema(typeSchema, ctx);
242
+ });
243
+ if (typeSchemas.length === 0) {
244
+ return z.never();
245
+ }
246
+ if (typeSchemas.length === 1) {
247
+ return typeSchemas[0]!;
248
+ }
249
+ return z.union(typeSchemas as [ZodType, ZodType, ...ZodType[]]);
250
+ }
251
+
252
+ if (!type) {
253
+ // No type specified - empty schema (any)
254
+ return z.any();
255
+ }
256
+
257
+ let zodSchema: ZodType;
258
+
259
+ switch (type) {
260
+ case "string": {
261
+ let stringSchema: ZodString = z.string();
262
+
263
+ // Apply format using .check() with Zod format functions
264
+ if (schema.format) {
265
+ const format = schema.format;
266
+ // Map common formats to Zod check functions
267
+ if (format === "email") {
268
+ stringSchema = stringSchema.check(z.email());
269
+ } else if (format === "uri" || format === "uri-reference") {
270
+ stringSchema = stringSchema.check(z.url());
271
+ } else if (format === "uuid" || format === "guid") {
272
+ stringSchema = stringSchema.check(z.uuid());
273
+ } else if (format === "date-time") {
274
+ stringSchema = stringSchema.check(z.iso.datetime());
275
+ } else if (format === "date") {
276
+ stringSchema = stringSchema.check(z.iso.date());
277
+ } else if (format === "time") {
278
+ stringSchema = stringSchema.check(z.iso.time());
279
+ } else if (format === "duration") {
280
+ stringSchema = stringSchema.check(z.iso.duration());
281
+ } else if (format === "ipv4") {
282
+ stringSchema = stringSchema.check(z.ipv4());
283
+ } else if (format === "ipv6") {
284
+ stringSchema = stringSchema.check(z.ipv6());
285
+ } else if (format === "mac") {
286
+ stringSchema = stringSchema.check(z.mac());
287
+ } else if (format === "cidr") {
288
+ stringSchema = stringSchema.check(z.cidrv4());
289
+ } else if (format === "cidr-v6") {
290
+ stringSchema = stringSchema.check(z.cidrv6());
291
+ } else if (format === "base64") {
292
+ stringSchema = stringSchema.check(z.base64());
293
+ } else if (format === "base64url") {
294
+ stringSchema = stringSchema.check(z.base64url());
295
+ } else if (format === "e164") {
296
+ stringSchema = stringSchema.check(z.e164());
297
+ } else if (format === "jwt") {
298
+ stringSchema = stringSchema.check(z.jwt());
299
+ } else if (format === "emoji") {
300
+ stringSchema = stringSchema.check(z.emoji());
301
+ } else if (format === "nanoid") {
302
+ stringSchema = stringSchema.check(z.nanoid());
303
+ } else if (format === "cuid") {
304
+ stringSchema = stringSchema.check(z.cuid());
305
+ } else if (format === "cuid2") {
306
+ stringSchema = stringSchema.check(z.cuid2());
307
+ } else if (format === "ulid") {
308
+ stringSchema = stringSchema.check(z.ulid());
309
+ } else if (format === "xid") {
310
+ stringSchema = stringSchema.check(z.xid());
311
+ } else if (format === "ksuid") {
312
+ stringSchema = stringSchema.check(z.ksuid());
313
+ }
314
+ // Note: json-string format is not currently supported by Zod
315
+ // Custom formats are ignored - keep as plain string
316
+ }
317
+
318
+ // Apply constraints
319
+ if (typeof schema.minLength === "number") {
320
+ stringSchema = stringSchema.min(schema.minLength);
321
+ }
322
+ if (typeof schema.maxLength === "number") {
323
+ stringSchema = stringSchema.max(schema.maxLength);
324
+ }
325
+ if (schema.pattern) {
326
+ // JSON Schema patterns are not implicitly anchored (match anywhere in string)
327
+ stringSchema = stringSchema.regex(new RegExp(schema.pattern));
328
+ }
329
+
330
+ zodSchema = stringSchema;
331
+ break;
332
+ }
333
+
334
+ case "number":
335
+ case "integer": {
336
+ let numberSchema: ZodNumber = type === "integer" ? z.number().int() : z.number();
337
+
338
+ // Apply constraints
339
+ if (typeof schema.minimum === "number") {
340
+ numberSchema = numberSchema.min(schema.minimum);
341
+ }
342
+ if (typeof schema.maximum === "number") {
343
+ numberSchema = numberSchema.max(schema.maximum);
344
+ }
345
+ if (typeof schema.exclusiveMinimum === "number") {
346
+ numberSchema = numberSchema.gt(schema.exclusiveMinimum);
347
+ } else if (schema.exclusiveMinimum === true && typeof schema.minimum === "number") {
348
+ numberSchema = numberSchema.gt(schema.minimum);
349
+ }
350
+ if (typeof schema.exclusiveMaximum === "number") {
351
+ numberSchema = numberSchema.lt(schema.exclusiveMaximum);
352
+ } else if (schema.exclusiveMaximum === true && typeof schema.maximum === "number") {
353
+ numberSchema = numberSchema.lt(schema.maximum);
354
+ }
355
+ if (typeof schema.multipleOf === "number") {
356
+ numberSchema = numberSchema.multipleOf(schema.multipleOf);
357
+ }
358
+
359
+ zodSchema = numberSchema;
360
+ break;
361
+ }
362
+
363
+ case "boolean": {
364
+ zodSchema = z.boolean();
365
+ break;
366
+ }
367
+
368
+ case "null": {
369
+ zodSchema = z.null();
370
+ break;
371
+ }
372
+
373
+ case "object": {
374
+ const shape: Record<string, ZodType> = {};
375
+ const properties = schema.properties || {};
376
+ const requiredSet = new Set(schema.required || []);
377
+
378
+ // Convert properties - mark optional ones
379
+ for (const [key, propSchema] of Object.entries(properties)) {
380
+ const propZodSchema = convertSchema(propSchema as JSONSchema.JSONSchema, ctx);
381
+ // If not in required array, make it optional
382
+ shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();
383
+ }
384
+
385
+ // Handle propertyNames
386
+ if (schema.propertyNames) {
387
+ const keySchema = convertSchema(schema.propertyNames, ctx) as ZodString;
388
+ const valueSchema =
389
+ schema.additionalProperties && typeof schema.additionalProperties === "object"
390
+ ? convertSchema(schema.additionalProperties as JSONSchema.JSONSchema, ctx)
391
+ : z.any();
392
+
393
+ // Case A: No properties (pure record)
394
+ if (Object.keys(shape).length === 0) {
395
+ zodSchema = z.record(keySchema, valueSchema);
396
+ break;
397
+ }
398
+
399
+ // Case B: With properties (intersection of object and looseRecord)
400
+ const objectSchema = z.object(shape).passthrough();
401
+ const recordSchema = z.looseRecord(keySchema, valueSchema);
402
+ zodSchema = z.intersection(objectSchema, recordSchema);
403
+ break;
404
+ }
405
+
406
+ // Handle patternProperties
407
+ if (schema.patternProperties) {
408
+ // patternProperties: keys matching pattern must satisfy corresponding schema
409
+ // Use loose records so non-matching keys pass through
410
+ const patternProps = schema.patternProperties;
411
+ const patternKeys = Object.keys(patternProps);
412
+ const looseRecords: ZodType[] = [];
413
+
414
+ for (const pattern of patternKeys) {
415
+ const patternValue = convertSchema(patternProps[pattern] as JSONSchema.JSONSchema, ctx);
416
+ const keySchema = z.string().regex(new RegExp(pattern));
417
+ looseRecords.push(z.looseRecord(keySchema, patternValue));
418
+ }
419
+
420
+ // Build intersection: object schema + all pattern property records
421
+ const schemasToIntersect: ZodType[] = [];
422
+ if (Object.keys(shape).length > 0) {
423
+ // Use passthrough so patternProperties can validate additional keys
424
+ schemasToIntersect.push(z.object(shape).passthrough());
425
+ }
426
+ schemasToIntersect.push(...looseRecords);
427
+
428
+ if (schemasToIntersect.length === 0) {
429
+ zodSchema = z.object({}).passthrough();
430
+ } else if (schemasToIntersect.length === 1) {
431
+ zodSchema = schemasToIntersect[0]!;
432
+ } else {
433
+ // Chain intersections: (A & B) & C & D ...
434
+ let result = z.intersection(schemasToIntersect[0]!, schemasToIntersect[1]!);
435
+ for (let i = 2; i < schemasToIntersect.length; i++) {
436
+ result = z.intersection(result, schemasToIntersect[i]!);
437
+ }
438
+ zodSchema = result;
439
+ }
440
+ break;
441
+ }
442
+
443
+ // Handle additionalProperties
444
+ // In JSON Schema, additionalProperties defaults to true (allow any extra properties)
445
+ // In Zod, objects strip unknown keys by default, so we need to handle this explicitly
446
+ const objectSchema = z.object(shape);
447
+ if (schema.additionalProperties === false) {
448
+ // Strict mode - no extra properties allowed
449
+ zodSchema = objectSchema.strict();
450
+ } else if (typeof schema.additionalProperties === "object") {
451
+ // Extra properties must match the specified schema
452
+ zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties as JSONSchema.JSONSchema, ctx));
453
+ } else {
454
+ // additionalProperties is true or undefined - allow any extra properties (passthrough)
455
+ zodSchema = objectSchema.passthrough();
456
+ }
457
+ break;
458
+ }
459
+
460
+ case "array": {
461
+ // TODO: uniqueItems is not supported
462
+ // TODO: contains/minContains/maxContains are not supported
463
+ // Check if this is a tuple (prefixItems or items as array)
464
+ const prefixItems = schema.prefixItems;
465
+ const items = schema.items;
466
+
467
+ if (prefixItems && Array.isArray(prefixItems)) {
468
+ // Tuple with prefixItems (draft-2020-12)
469
+ const tupleItems = prefixItems.map((item) => convertSchema(item as JSONSchema.JSONSchema, ctx));
470
+ const rest =
471
+ items && typeof items === "object" && !Array.isArray(items)
472
+ ? convertSchema(items as JSONSchema.JSONSchema, ctx)
473
+ : undefined;
474
+ if (rest) {
475
+ zodSchema = z.tuple(tupleItems as [ZodType, ...ZodType[]]).rest(rest);
476
+ } else {
477
+ zodSchema = z.tuple(tupleItems as [ZodType, ...ZodType[]]);
478
+ }
479
+ // Apply minItems/maxItems constraints to tuples
480
+ if (typeof schema.minItems === "number") {
481
+ zodSchema = (zodSchema as any).check(z.minLength(schema.minItems));
482
+ }
483
+ if (typeof schema.maxItems === "number") {
484
+ zodSchema = (zodSchema as any).check(z.maxLength(schema.maxItems));
485
+ }
486
+ } else if (Array.isArray(items)) {
487
+ // Tuple with items array (draft-7)
488
+ const tupleItems = items.map((item) => convertSchema(item as JSONSchema.JSONSchema, ctx));
489
+ const rest =
490
+ schema.additionalItems && typeof schema.additionalItems === "object"
491
+ ? convertSchema(schema.additionalItems as JSONSchema.JSONSchema, ctx)
492
+ : undefined; // additionalItems: false means no rest, handled by default tuple behavior
493
+ if (rest) {
494
+ zodSchema = z.tuple(tupleItems as [ZodType, ...ZodType[]]).rest(rest);
495
+ } else {
496
+ zodSchema = z.tuple(tupleItems as [ZodType, ...ZodType[]]);
497
+ }
498
+ // Apply minItems/maxItems constraints to tuples
499
+ if (typeof schema.minItems === "number") {
500
+ zodSchema = (zodSchema as any).check(z.minLength(schema.minItems));
501
+ }
502
+ if (typeof schema.maxItems === "number") {
503
+ zodSchema = (zodSchema as any).check(z.maxLength(schema.maxItems));
504
+ }
505
+ } else if (items !== undefined) {
506
+ // Regular array
507
+ const element = convertSchema(items as JSONSchema.JSONSchema, ctx);
508
+ let arraySchema = z.array(element);
509
+
510
+ // Apply constraints
511
+ if (typeof schema.minItems === "number") {
512
+ arraySchema = (arraySchema as any).min(schema.minItems);
513
+ }
514
+ if (typeof schema.maxItems === "number") {
515
+ arraySchema = (arraySchema as any).max(schema.maxItems);
516
+ }
517
+
518
+ zodSchema = arraySchema;
519
+ } else {
520
+ // No items specified - array of any
521
+ zodSchema = z.array(z.any());
522
+ }
523
+ break;
524
+ }
525
+
526
+ default:
527
+ throw new Error(`Unsupported type: ${type}`);
528
+ }
529
+
530
+ // Apply metadata
531
+ if (schema.description) {
532
+ zodSchema = zodSchema.describe(schema.description);
533
+ }
534
+ if (schema.default !== undefined) {
535
+ zodSchema = (zodSchema as any).default(schema.default);
536
+ }
537
+
538
+ return zodSchema;
539
+ }
540
+
541
+ function convertSchema(schema: JSONSchema.JSONSchema | boolean, ctx: ConversionContext): ZodType {
542
+ if (typeof schema === "boolean") {
543
+ return schema ? z.any() : z.never();
544
+ }
545
+
546
+ // Convert base schema first (ignoring composition keywords)
547
+ let baseSchema = convertBaseSchema(schema, ctx);
548
+ const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;
549
+
550
+ // Process composition keywords LAST (they can appear together)
551
+ // Handle anyOf - wrap base schema with union
552
+ if (schema.anyOf && Array.isArray(schema.anyOf)) {
553
+ const options = schema.anyOf.map((s) => convertSchema(s, ctx));
554
+ const anyOfUnion = z.union(options as [ZodType, ZodType, ...ZodType[]]);
555
+ baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;
556
+ }
557
+
558
+ // Handle oneOf - exclusive union (exactly one must match)
559
+ if (schema.oneOf && Array.isArray(schema.oneOf)) {
560
+ const options = schema.oneOf.map((s) => convertSchema(s, ctx));
561
+ const oneOfUnion = z.xor(options as [ZodType, ZodType, ...ZodType[]]);
562
+ baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;
563
+ }
564
+
565
+ // Handle allOf - wrap base schema with intersection
566
+ if (schema.allOf && Array.isArray(schema.allOf)) {
567
+ if (schema.allOf.length === 0) {
568
+ baseSchema = hasExplicitType ? baseSchema : z.any();
569
+ } else {
570
+ let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0]!, ctx);
571
+ const startIdx = hasExplicitType ? 0 : 1;
572
+ for (let i = startIdx; i < schema.allOf.length; i++) {
573
+ result = z.intersection(result, convertSchema(schema.allOf[i]!, ctx));
574
+ }
575
+ baseSchema = result;
576
+ }
577
+ }
578
+
579
+ // Handle nullable (OpenAPI 3.0)
580
+ if (schema.nullable === true && ctx.version === "openapi-3.0") {
581
+ baseSchema = z.nullable(baseSchema);
582
+ }
583
+
584
+ // Handle readOnly
585
+ if (schema.readOnly === true) {
586
+ baseSchema = z.readonly(baseSchema);
587
+ }
588
+
589
+ // Collect metadata: core schema keywords and unrecognized keys
590
+ const extraMeta: Record<string, unknown> = {};
591
+
592
+ // Core schema keywords that should be captured as metadata
593
+ const coreMetadataKeys = ["$id", "id", "$comment", "$anchor", "$vocabulary", "$dynamicRef", "$dynamicAnchor"];
594
+ for (const key of coreMetadataKeys) {
595
+ if (key in schema) {
596
+ extraMeta[key] = schema[key];
597
+ }
598
+ }
599
+
600
+ // Content keywords - store as metadata
601
+ const contentMetadataKeys = ["contentEncoding", "contentMediaType", "contentSchema"];
602
+ for (const key of contentMetadataKeys) {
603
+ if (key in schema) {
604
+ extraMeta[key] = schema[key];
605
+ }
606
+ }
607
+
608
+ // Unrecognized keys (custom metadata)
609
+ for (const key of Object.keys(schema)) {
610
+ if (!RECOGNIZED_KEYS.has(key)) {
611
+ extraMeta[key] = schema[key];
612
+ }
613
+ }
614
+
615
+ if (Object.keys(extraMeta).length > 0) {
616
+ ctx.registry.add(baseSchema, extraMeta);
617
+ }
618
+
619
+ return baseSchema;
620
+ }
621
+
622
+ /**
623
+ * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */
624
+ export function fromJSONSchema(schema: JSONSchema.JSONSchema | boolean, params?: FromJSONSchemaParams): ZodType {
625
+ // Handle boolean schemas
626
+ if (typeof schema === "boolean") {
627
+ return schema ? z.any() : z.never();
628
+ }
629
+
630
+ const version = detectVersion(schema, params?.defaultTarget);
631
+ const defs = (schema.$defs || schema.definitions || {}) as Record<string, JSONSchema.JSONSchema>;
632
+
633
+ const ctx: ConversionContext = {
634
+ version,
635
+ defs,
636
+ refs: new Map(),
637
+ processing: new Set(),
638
+ rootSchema: schema,
639
+ registry: params?.registry ?? globalRegistry,
640
+ };
641
+
642
+ return convertSchema(schema, ctx);
643
+ }
@@ -0,0 +1,5 @@
1
+ import * as z from "./external.js";
2
+
3
+ export { z };
4
+ export * from "./external.js";
5
+ export default z;