zod 4.0.0-beta.20250505T195954 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. package/README.md +208 -0
  2. package/index.cjs +33 -0
  3. package/index.d.cts +4 -0
  4. package/index.d.ts +4 -0
  5. package/index.js +4 -0
  6. package/locales/index.cjs +17 -0
  7. package/locales/index.d.cts +1 -0
  8. package/locales/index.d.ts +1 -0
  9. package/locales/index.js +1 -0
  10. package/mini/index.cjs +17 -0
  11. package/mini/index.d.cts +1 -0
  12. package/mini/index.d.ts +1 -0
  13. package/mini/index.js +1 -0
  14. package/package.json +87 -40
  15. package/src/index.ts +2 -3
  16. package/src/locales/index.ts +1 -0
  17. package/src/mini/index.ts +1 -0
  18. package/src/v3/ZodError.ts +330 -0
  19. package/src/v3/benchmarks/datetime.ts +58 -0
  20. package/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  21. package/src/v3/benchmarks/index.ts +59 -0
  22. package/src/v3/benchmarks/ipv4.ts +57 -0
  23. package/src/v3/benchmarks/object.ts +69 -0
  24. package/src/v3/benchmarks/primitives.ts +162 -0
  25. package/src/v3/benchmarks/realworld.ts +63 -0
  26. package/src/v3/benchmarks/string.ts +55 -0
  27. package/src/v3/benchmarks/union.ts +80 -0
  28. package/src/v3/errors.ts +13 -0
  29. package/src/v3/external.ts +6 -0
  30. package/src/v3/helpers/enumUtil.ts +17 -0
  31. package/src/v3/helpers/errorUtil.ts +8 -0
  32. package/src/v3/helpers/parseUtil.ts +176 -0
  33. package/src/v3/helpers/partialUtil.ts +34 -0
  34. package/src/v3/helpers/typeAliases.ts +2 -0
  35. package/src/v3/helpers/util.ts +224 -0
  36. package/src/v3/index.ts +4 -0
  37. package/src/v3/locales/en.ts +124 -0
  38. package/src/v3/standard-schema.ts +113 -0
  39. package/src/v3/tests/Mocker.ts +54 -0
  40. package/src/v3/tests/all-errors.test.ts +157 -0
  41. package/src/v3/tests/anyunknown.test.ts +28 -0
  42. package/src/v3/tests/array.test.ts +71 -0
  43. package/src/v3/tests/async-parsing.test.ts +388 -0
  44. package/src/v3/tests/async-refinements.test.ts +46 -0
  45. package/src/v3/tests/base.test.ts +29 -0
  46. package/src/v3/tests/bigint.test.ts +55 -0
  47. package/src/v3/tests/branded.test.ts +53 -0
  48. package/src/v3/tests/catch.test.ts +220 -0
  49. package/src/v3/tests/coerce.test.ts +133 -0
  50. package/src/v3/tests/complex.test.ts +56 -0
  51. package/src/v3/tests/custom.test.ts +31 -0
  52. package/src/v3/tests/date.test.ts +32 -0
  53. package/src/v3/tests/deepmasking.test.ts +186 -0
  54. package/src/v3/tests/default.test.ts +112 -0
  55. package/src/v3/tests/description.test.ts +33 -0
  56. package/src/v3/tests/discriminated-unions.test.ts +315 -0
  57. package/src/v3/tests/enum.test.ts +80 -0
  58. package/src/v3/tests/error.test.ts +551 -0
  59. package/src/v3/tests/firstparty.test.ts +87 -0
  60. package/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  61. package/src/v3/tests/function.test.ts +257 -0
  62. package/src/v3/tests/generics.test.ts +48 -0
  63. package/src/v3/tests/instanceof.test.ts +37 -0
  64. package/src/v3/tests/intersection.test.ts +110 -0
  65. package/src/v3/tests/language-server.source.ts +76 -0
  66. package/src/v3/tests/language-server.test.ts +207 -0
  67. package/src/v3/tests/literal.test.ts +36 -0
  68. package/src/v3/tests/map.test.ts +110 -0
  69. package/src/v3/tests/masking.test.ts +4 -0
  70. package/src/v3/tests/mocker.test.ts +19 -0
  71. package/src/v3/tests/nan.test.ts +21 -0
  72. package/src/v3/tests/nativeEnum.test.ts +87 -0
  73. package/src/v3/tests/nullable.test.ts +42 -0
  74. package/src/v3/tests/number.test.ts +176 -0
  75. package/src/v3/tests/object-augmentation.test.ts +29 -0
  76. package/src/v3/tests/object-in-es5-env.test.ts +29 -0
  77. package/src/v3/tests/object.test.ts +434 -0
  78. package/src/v3/tests/optional.test.ts +42 -0
  79. package/src/v3/tests/parseUtil.test.ts +23 -0
  80. package/src/v3/tests/parser.test.ts +41 -0
  81. package/src/v3/tests/partials.test.ts +243 -0
  82. package/src/v3/tests/pickomit.test.ts +111 -0
  83. package/src/v3/tests/pipeline.test.ts +29 -0
  84. package/src/v3/tests/preprocess.test.ts +186 -0
  85. package/src/v3/tests/primitive.test.ts +440 -0
  86. package/src/v3/tests/promise.test.ts +90 -0
  87. package/src/v3/tests/readonly.test.ts +194 -0
  88. package/src/v3/tests/record.test.ts +171 -0
  89. package/src/v3/tests/recursive.test.ts +197 -0
  90. package/src/v3/tests/refine.test.ts +313 -0
  91. package/src/v3/tests/safeparse.test.ts +27 -0
  92. package/src/v3/tests/set.test.ts +142 -0
  93. package/src/v3/tests/standard-schema.test.ts +83 -0
  94. package/src/v3/tests/string.test.ts +916 -0
  95. package/src/v3/tests/transformer.test.ts +233 -0
  96. package/src/v3/tests/tuple.test.ts +90 -0
  97. package/src/v3/tests/unions.test.ts +57 -0
  98. package/src/v3/tests/validations.test.ts +133 -0
  99. package/src/v3/tests/void.test.ts +15 -0
  100. package/src/v3/types.ts +5136 -0
  101. package/src/{checks.ts → v4/classic/checks.ts} +1 -1
  102. package/src/v4/classic/coerce.ts +27 -0
  103. package/src/{compat.ts → v4/classic/compat.ts} +3 -13
  104. package/src/v4/classic/errors.ts +75 -0
  105. package/src/v4/classic/external.ts +50 -0
  106. package/src/v4/classic/index.ts +5 -0
  107. package/src/{iso.ts → v4/classic/iso.ts} +1 -1
  108. package/src/{parse.ts → v4/classic/parse.ts} +13 -12
  109. package/src/{schemas.ts → v4/classic/schemas.ts} +430 -417
  110. package/src/v4/classic/tests/anyunknown.test.ts +26 -0
  111. package/src/v4/classic/tests/array.test.ts +264 -0
  112. package/src/v4/classic/tests/assignability.test.ts +210 -0
  113. package/src/v4/classic/tests/async-parsing.test.ts +381 -0
  114. package/src/v4/classic/tests/async-refinements.test.ts +68 -0
  115. package/src/v4/classic/tests/base.test.ts +7 -0
  116. package/src/v4/classic/tests/bigint.test.ts +54 -0
  117. package/src/v4/classic/tests/brand.test.ts +63 -0
  118. package/src/v4/classic/tests/catch.test.ts +252 -0
  119. package/src/v4/classic/tests/coalesce.test.ts +20 -0
  120. package/src/v4/classic/tests/coerce.test.ts +160 -0
  121. package/src/v4/classic/tests/continuability.test.ts +352 -0
  122. package/src/v4/classic/tests/custom.test.ts +40 -0
  123. package/src/v4/classic/tests/date.test.ts +31 -0
  124. package/src/v4/classic/tests/datetime.test.ts +296 -0
  125. package/src/v4/classic/tests/default.test.ts +313 -0
  126. package/src/v4/classic/tests/description.test.ts +32 -0
  127. package/src/v4/classic/tests/discriminated-unions.test.ts +619 -0
  128. package/src/v4/classic/tests/enum.test.ts +285 -0
  129. package/src/v4/classic/tests/error-utils.test.ts +552 -0
  130. package/src/v4/classic/tests/error.test.ts +711 -0
  131. package/src/v4/classic/tests/file.test.ts +91 -0
  132. package/src/v4/classic/tests/firstparty.test.ts +175 -0
  133. package/src/v4/classic/tests/function.test.ts +268 -0
  134. package/src/v4/classic/tests/generics.test.ts +72 -0
  135. package/src/v4/classic/tests/index.test.ts +829 -0
  136. package/src/v4/classic/tests/instanceof.test.ts +34 -0
  137. package/src/v4/classic/tests/intersection.test.ts +171 -0
  138. package/src/v4/classic/tests/json.test.ts +108 -0
  139. package/src/v4/classic/tests/lazy.test.ts +227 -0
  140. package/src/v4/classic/tests/literal.test.ts +92 -0
  141. package/src/v4/classic/tests/map.test.ts +196 -0
  142. package/src/v4/classic/tests/nan.test.ts +21 -0
  143. package/src/v4/classic/tests/nested-refine.test.ts +168 -0
  144. package/src/v4/classic/tests/nonoptional.test.ts +86 -0
  145. package/src/v4/classic/tests/nullable.test.ts +22 -0
  146. package/src/v4/classic/tests/number.test.ts +247 -0
  147. package/src/v4/classic/tests/object.test.ts +563 -0
  148. package/src/v4/classic/tests/optional.test.ts +123 -0
  149. package/src/v4/classic/tests/partial.test.ts +147 -0
  150. package/src/v4/classic/tests/pickomit.test.ts +127 -0
  151. package/src/v4/classic/tests/pipe.test.ts +81 -0
  152. package/src/v4/classic/tests/prefault.test.ts +37 -0
  153. package/src/v4/classic/tests/preprocess.test.ts +298 -0
  154. package/src/v4/classic/tests/primitive.test.ts +175 -0
  155. package/src/v4/classic/tests/promise.test.ts +81 -0
  156. package/src/v4/classic/tests/prototypes.test.ts +23 -0
  157. package/src/v4/classic/tests/readonly.test.ts +252 -0
  158. package/src/v4/classic/tests/record.test.ts +342 -0
  159. package/src/v4/classic/tests/recursive-types.test.ts +356 -0
  160. package/src/v4/classic/tests/refine.test.ts +532 -0
  161. package/src/v4/classic/tests/registries.test.ts +204 -0
  162. package/src/v4/classic/tests/set.test.ts +179 -0
  163. package/src/v4/classic/tests/standard-schema.test.ts +57 -0
  164. package/src/v4/classic/tests/string-formats.test.ts +109 -0
  165. package/src/v4/classic/tests/string.test.ts +881 -0
  166. package/src/v4/classic/tests/stringbool.test.ts +66 -0
  167. package/src/v4/classic/tests/template-literal.test.ts +758 -0
  168. package/src/v4/classic/tests/to-json-schema.test.ts +2314 -0
  169. package/src/v4/classic/tests/transform.test.ts +250 -0
  170. package/src/v4/classic/tests/tuple.test.ts +163 -0
  171. package/src/v4/classic/tests/union.test.ts +94 -0
  172. package/src/v4/classic/tests/validations.test.ts +283 -0
  173. package/src/v4/classic/tests/void.test.ts +12 -0
  174. package/src/v4/core/api.ts +1594 -0
  175. package/src/v4/core/checks.ts +1283 -0
  176. package/src/v4/core/config.ts +15 -0
  177. package/src/v4/core/core.ts +134 -0
  178. package/src/v4/core/doc.ts +44 -0
  179. package/src/v4/core/errors.ts +426 -0
  180. package/src/v4/core/function.ts +176 -0
  181. package/src/v4/core/index.ts +15 -0
  182. package/src/v4/core/json-schema.ts +143 -0
  183. package/src/v4/core/parse.ts +94 -0
  184. package/src/v4/core/regexes.ts +135 -0
  185. package/src/v4/core/registries.ts +96 -0
  186. package/src/v4/core/schemas.ts +3842 -0
  187. package/src/v4/core/standard-schema.ts +64 -0
  188. package/src/v4/core/tests/index.test.ts +46 -0
  189. package/src/v4/core/tests/locales/be.test.ts +124 -0
  190. package/src/v4/core/tests/locales/en.test.ts +22 -0
  191. package/src/v4/core/tests/locales/ru.test.ts +128 -0
  192. package/src/v4/core/tests/locales/tr.test.ts +69 -0
  193. package/src/v4/core/to-json-schema.ts +977 -0
  194. package/src/v4/core/util.ts +775 -0
  195. package/src/v4/core/versions.ts +5 -0
  196. package/src/v4/core/zsf.ts +323 -0
  197. package/src/v4/index.ts +4 -0
  198. package/src/v4/locales/ar.ts +125 -0
  199. package/src/v4/locales/az.ts +121 -0
  200. package/src/v4/locales/be.ts +184 -0
  201. package/src/v4/locales/ca.ts +127 -0
  202. package/src/v4/locales/cs.ts +142 -0
  203. package/src/v4/locales/de.ts +124 -0
  204. package/src/v4/locales/en.ts +127 -0
  205. package/src/v4/locales/eo.ts +125 -0
  206. package/src/v4/locales/es.ts +125 -0
  207. package/src/v4/locales/fa.ts +134 -0
  208. package/src/v4/locales/fi.ts +131 -0
  209. package/src/v4/locales/fr-CA.ts +126 -0
  210. package/src/v4/locales/fr.ts +124 -0
  211. package/src/v4/locales/he.ts +125 -0
  212. package/src/v4/locales/hu.ts +126 -0
  213. package/src/v4/locales/id.ts +125 -0
  214. package/src/v4/locales/index.ts +39 -0
  215. package/src/v4/locales/it.ts +125 -0
  216. package/src/v4/locales/ja.ts +122 -0
  217. package/src/v4/locales/kh.ts +126 -0
  218. package/src/v4/locales/ko.ts +131 -0
  219. package/src/v4/locales/mk.ts +127 -0
  220. package/src/v4/locales/ms.ts +124 -0
  221. package/src/v4/locales/nl.ts +126 -0
  222. package/src/v4/locales/no.ts +124 -0
  223. package/src/v4/locales/ota.ts +125 -0
  224. package/src/v4/locales/pl.ts +126 -0
  225. package/src/v4/locales/ps.ts +133 -0
  226. package/src/v4/locales/pt.ts +123 -0
  227. package/src/v4/locales/ru.ts +184 -0
  228. package/src/v4/locales/sl.ts +126 -0
  229. package/src/v4/locales/sv.ts +127 -0
  230. package/src/v4/locales/ta.ts +125 -0
  231. package/src/v4/locales/th.ts +126 -0
  232. package/src/v4/locales/tr.ts +121 -0
  233. package/src/v4/locales/ua.ts +126 -0
  234. package/src/v4/locales/ur.ts +126 -0
  235. package/src/v4/locales/vi.ts +125 -0
  236. package/src/v4/locales/zh-CN.ts +123 -0
  237. package/src/v4/locales/zh-TW.ts +125 -0
  238. package/src/v4/mini/checks.ts +32 -0
  239. package/src/v4/mini/coerce.ts +22 -0
  240. package/src/v4/mini/external.ts +40 -0
  241. package/src/v4/mini/index.ts +3 -0
  242. package/src/v4/mini/iso.ts +62 -0
  243. package/src/v4/mini/parse.ts +1 -0
  244. package/src/v4/mini/schemas.ts +1579 -0
  245. package/src/v4/mini/tests/assignability.test.ts +129 -0
  246. package/src/v4/mini/tests/brand.test.ts +51 -0
  247. package/src/v4/mini/tests/checks.test.ts +144 -0
  248. package/src/v4/mini/tests/computed.test.ts +36 -0
  249. package/src/v4/mini/tests/error.test.ts +22 -0
  250. package/src/v4/mini/tests/functions.test.ts +43 -0
  251. package/src/v4/mini/tests/index.test.ts +871 -0
  252. package/src/v4/mini/tests/number.test.ts +95 -0
  253. package/src/v4/mini/tests/object.test.ts +185 -0
  254. package/src/v4/mini/tests/prototypes.test.ts +43 -0
  255. package/src/v4/mini/tests/recursive-types.test.ts +275 -0
  256. package/src/v4/mini/tests/string.test.ts +299 -0
  257. package/src/v4-mini/index.ts +1 -0
  258. package/v3/ZodError.cjs +138 -0
  259. package/v3/ZodError.d.cts +164 -0
  260. package/v3/ZodError.d.ts +164 -0
  261. package/v3/ZodError.js +133 -0
  262. package/v3/errors.cjs +17 -0
  263. package/v3/errors.d.cts +5 -0
  264. package/v3/errors.d.ts +5 -0
  265. package/v3/errors.js +9 -0
  266. package/v3/external.cjs +22 -0
  267. package/v3/external.d.cts +6 -0
  268. package/v3/external.d.ts +6 -0
  269. package/v3/external.js +6 -0
  270. package/v3/helpers/enumUtil.cjs +2 -0
  271. package/v3/helpers/enumUtil.d.cts +8 -0
  272. package/v3/helpers/enumUtil.d.ts +8 -0
  273. package/v3/helpers/enumUtil.js +1 -0
  274. package/v3/helpers/errorUtil.cjs +9 -0
  275. package/v3/helpers/errorUtil.d.cts +9 -0
  276. package/v3/helpers/errorUtil.d.ts +9 -0
  277. package/v3/helpers/errorUtil.js +6 -0
  278. package/v3/helpers/parseUtil.cjs +124 -0
  279. package/v3/helpers/parseUtil.d.cts +78 -0
  280. package/v3/helpers/parseUtil.d.ts +78 -0
  281. package/v3/helpers/parseUtil.js +109 -0
  282. package/v3/helpers/partialUtil.cjs +2 -0
  283. package/v3/helpers/partialUtil.d.cts +8 -0
  284. package/v3/helpers/partialUtil.d.ts +8 -0
  285. package/v3/helpers/partialUtil.js +1 -0
  286. package/v3/helpers/typeAliases.cjs +2 -0
  287. package/v3/helpers/typeAliases.d.cts +2 -0
  288. package/v3/helpers/typeAliases.d.ts +2 -0
  289. package/v3/helpers/typeAliases.js +1 -0
  290. package/v3/helpers/util.cjs +137 -0
  291. package/v3/helpers/util.d.cts +85 -0
  292. package/v3/helpers/util.d.ts +85 -0
  293. package/v3/helpers/util.js +133 -0
  294. package/{dist/commonjs/index.js → v3/index.cjs} +2 -2
  295. package/v3/index.d.cts +4 -0
  296. package/v3/index.js +4 -0
  297. package/v3/locales/en.cjs +111 -0
  298. package/v3/locales/en.d.cts +3 -0
  299. package/v3/locales/en.d.ts +3 -0
  300. package/v3/locales/en.js +109 -0
  301. package/v3/standard-schema.cjs +2 -0
  302. package/v3/standard-schema.d.cts +102 -0
  303. package/v3/standard-schema.d.ts +102 -0
  304. package/v3/standard-schema.js +1 -0
  305. package/v3/types.cjs +3775 -0
  306. package/v3/types.d.cts +1031 -0
  307. package/v3/types.d.ts +1031 -0
  308. package/v3/types.js +3693 -0
  309. package/{dist/commonjs/checks.js → v4/classic/checks.cjs} +29 -29
  310. package/{dist/esm/checks.d.ts → v4/classic/checks.d.cts} +1 -1
  311. package/{dist/commonjs → v4/classic}/checks.d.ts +1 -1
  312. package/{dist/esm → v4/classic}/checks.js +1 -1
  313. package/{dist/commonjs/coerce.js → v4/classic/coerce.cjs} +2 -2
  314. package/v4/classic/coerce.d.cts +17 -0
  315. package/v4/classic/coerce.d.ts +17 -0
  316. package/{dist/esm → v4/classic}/coerce.js +1 -1
  317. package/{dist/commonjs/compat.js → v4/classic/compat.cjs} +5 -11
  318. package/{dist/esm/compat.d.ts → v4/classic/compat.d.cts} +4 -6
  319. package/{dist/commonjs → v4/classic}/compat.d.ts +3 -5
  320. package/{dist/esm → v4/classic}/compat.js +2 -8
  321. package/v4/classic/errors.cjs +67 -0
  322. package/{dist/commonjs/errors.d.ts → v4/classic/errors.d.cts} +8 -7
  323. package/{dist/esm → v4/classic}/errors.d.ts +8 -7
  324. package/v4/classic/errors.js +41 -0
  325. package/v4/classic/external.cjs +70 -0
  326. package/v4/classic/external.d.cts +13 -0
  327. package/v4/classic/external.d.ts +13 -0
  328. package/v4/classic/external.js +18 -0
  329. package/v4/classic/index.cjs +33 -0
  330. package/v4/classic/index.d.cts +4 -0
  331. package/{dist/commonjs/iso.js → v4/classic/iso.cjs} +2 -2
  332. package/{dist/esm/iso.d.ts → v4/classic/iso.d.cts} +2 -2
  333. package/{dist/commonjs → v4/classic}/iso.d.ts +1 -1
  334. package/{dist/esm → v4/classic}/iso.js +1 -1
  335. package/{dist/commonjs/parse.js → v4/classic/parse.cjs} +7 -9
  336. package/{dist/commonjs/parse.d.ts → v4/classic/parse.d.cts} +10 -4
  337. package/{dist/esm → v4/classic}/parse.d.ts +10 -4
  338. package/v4/classic/parse.js +6 -0
  339. package/{dist/commonjs/schemas.js → v4/classic/schemas.cjs} +167 -138
  340. package/{dist/esm/schemas.d.ts → v4/classic/schemas.d.cts} +176 -196
  341. package/{dist/commonjs → v4/classic}/schemas.d.ts +175 -195
  342. package/{dist/esm → v4/classic}/schemas.js +128 -102
  343. package/v4/core/api.cjs +1039 -0
  344. package/v4/core/api.d.cts +284 -0
  345. package/v4/core/api.d.ts +284 -0
  346. package/v4/core/api.js +906 -0
  347. package/v4/core/checks.cjs +591 -0
  348. package/v4/core/checks.d.cts +278 -0
  349. package/v4/core/checks.d.ts +278 -0
  350. package/v4/core/checks.js +565 -0
  351. package/v4/core/core.cjs +67 -0
  352. package/v4/core/core.d.cts +49 -0
  353. package/v4/core/core.d.ts +49 -0
  354. package/v4/core/core.js +61 -0
  355. package/v4/core/doc.cjs +39 -0
  356. package/v4/core/doc.d.cts +14 -0
  357. package/v4/core/doc.d.ts +14 -0
  358. package/v4/core/doc.js +35 -0
  359. package/v4/core/errors.cjs +226 -0
  360. package/v4/core/errors.d.cts +210 -0
  361. package/v4/core/errors.d.ts +210 -0
  362. package/v4/core/errors.js +195 -0
  363. package/v4/core/function.cjs +102 -0
  364. package/v4/core/function.d.cts +52 -0
  365. package/v4/core/function.d.ts +52 -0
  366. package/v4/core/function.js +75 -0
  367. package/v4/core/index.cjs +44 -0
  368. package/v4/core/index.d.cts +15 -0
  369. package/v4/core/index.d.ts +15 -0
  370. package/v4/core/index.js +15 -0
  371. package/v4/core/json-schema.cjs +2 -0
  372. package/v4/core/json-schema.d.cts +87 -0
  373. package/v4/core/json-schema.d.ts +87 -0
  374. package/v4/core/json-schema.js +1 -0
  375. package/v4/core/parse.cjs +87 -0
  376. package/v4/core/parse.d.cts +25 -0
  377. package/v4/core/parse.d.ts +25 -0
  378. package/v4/core/parse.js +57 -0
  379. package/v4/core/regexes.cjs +103 -0
  380. package/v4/core/regexes.d.cts +61 -0
  381. package/v4/core/regexes.d.ts +61 -0
  382. package/v4/core/regexes.js +95 -0
  383. package/v4/core/registries.cjs +56 -0
  384. package/v4/core/registries.d.cts +35 -0
  385. package/v4/core/registries.d.ts +35 -0
  386. package/v4/core/registries.js +51 -0
  387. package/v4/core/schemas.cjs +1748 -0
  388. package/v4/core/schemas.d.cts +1041 -0
  389. package/v4/core/schemas.d.ts +1041 -0
  390. package/v4/core/schemas.js +1717 -0
  391. package/v4/core/standard-schema.cjs +2 -0
  392. package/v4/core/standard-schema.d.cts +55 -0
  393. package/v4/core/standard-schema.d.ts +55 -0
  394. package/v4/core/standard-schema.js +1 -0
  395. package/v4/core/to-json-schema.cjs +854 -0
  396. package/v4/core/to-json-schema.d.cts +88 -0
  397. package/v4/core/to-json-schema.d.ts +88 -0
  398. package/v4/core/to-json-schema.js +849 -0
  399. package/v4/core/util.cjs +539 -0
  400. package/v4/core/util.d.cts +183 -0
  401. package/v4/core/util.d.ts +183 -0
  402. package/v4/core/util.js +493 -0
  403. package/v4/core/versions.cjs +8 -0
  404. package/v4/core/versions.d.cts +5 -0
  405. package/v4/core/versions.d.ts +5 -0
  406. package/v4/core/versions.js +5 -0
  407. package/v4/index.cjs +22 -0
  408. package/v4/index.d.cts +3 -0
  409. package/v4/index.d.ts +3 -0
  410. package/v4/index.js +3 -0
  411. package/v4/locales/ar.cjs +142 -0
  412. package/v4/locales/ar.d.cts +4 -0
  413. package/v4/locales/ar.d.ts +4 -0
  414. package/v4/locales/ar.js +116 -0
  415. package/v4/locales/az.cjs +141 -0
  416. package/v4/locales/az.d.cts +4 -0
  417. package/v4/locales/az.d.ts +4 -0
  418. package/v4/locales/az.js +115 -0
  419. package/v4/locales/be.cjs +190 -0
  420. package/v4/locales/be.d.cts +4 -0
  421. package/v4/locales/be.d.ts +4 -0
  422. package/v4/locales/be.js +164 -0
  423. package/v4/locales/ca.cjs +144 -0
  424. package/v4/locales/ca.d.cts +4 -0
  425. package/v4/locales/ca.d.ts +4 -0
  426. package/v4/locales/ca.js +118 -0
  427. package/v4/locales/cs.cjs +161 -0
  428. package/v4/locales/cs.d.cts +4 -0
  429. package/v4/locales/cs.d.ts +4 -0
  430. package/v4/locales/cs.js +135 -0
  431. package/v4/locales/de.cjs +142 -0
  432. package/v4/locales/de.d.cts +4 -0
  433. package/v4/locales/de.d.ts +4 -0
  434. package/v4/locales/de.js +116 -0
  435. package/v4/locales/en.cjs +145 -0
  436. package/v4/locales/en.d.cts +5 -0
  437. package/v4/locales/en.d.ts +5 -0
  438. package/v4/locales/en.js +117 -0
  439. package/v4/locales/eo.cjs +144 -0
  440. package/v4/locales/eo.d.cts +5 -0
  441. package/v4/locales/eo.d.ts +5 -0
  442. package/v4/locales/eo.js +116 -0
  443. package/v4/locales/es.cjs +143 -0
  444. package/v4/locales/es.d.cts +4 -0
  445. package/v4/locales/es.d.ts +4 -0
  446. package/v4/locales/es.js +117 -0
  447. package/v4/locales/fa.cjs +148 -0
  448. package/v4/locales/fa.d.cts +4 -0
  449. package/v4/locales/fa.d.ts +4 -0
  450. package/v4/locales/fa.js +122 -0
  451. package/v4/locales/fi.cjs +148 -0
  452. package/v4/locales/fi.d.cts +4 -0
  453. package/v4/locales/fi.d.ts +4 -0
  454. package/v4/locales/fi.js +122 -0
  455. package/v4/locales/fr-CA.cjs +143 -0
  456. package/v4/locales/fr-CA.d.cts +4 -0
  457. package/v4/locales/fr-CA.d.ts +4 -0
  458. package/v4/locales/fr-CA.js +117 -0
  459. package/v4/locales/fr.cjs +142 -0
  460. package/v4/locales/fr.d.cts +4 -0
  461. package/v4/locales/fr.d.ts +4 -0
  462. package/v4/locales/fr.js +116 -0
  463. package/v4/locales/he.cjs +143 -0
  464. package/v4/locales/he.d.cts +4 -0
  465. package/v4/locales/he.d.ts +4 -0
  466. package/v4/locales/he.js +117 -0
  467. package/v4/locales/hu.cjs +143 -0
  468. package/v4/locales/hu.d.cts +4 -0
  469. package/v4/locales/hu.d.ts +4 -0
  470. package/v4/locales/hu.js +117 -0
  471. package/v4/locales/id.cjs +142 -0
  472. package/v4/locales/id.d.cts +4 -0
  473. package/v4/locales/id.d.ts +4 -0
  474. package/v4/locales/id.js +116 -0
  475. package/v4/locales/index.cjs +84 -0
  476. package/v4/locales/index.d.cts +39 -0
  477. package/v4/locales/index.d.ts +39 -0
  478. package/v4/locales/index.js +39 -0
  479. package/v4/locales/it.cjs +143 -0
  480. package/v4/locales/it.d.cts +4 -0
  481. package/v4/locales/it.d.ts +4 -0
  482. package/v4/locales/it.js +117 -0
  483. package/v4/locales/ja.cjs +141 -0
  484. package/v4/locales/ja.d.cts +4 -0
  485. package/v4/locales/ja.d.ts +4 -0
  486. package/v4/locales/ja.js +115 -0
  487. package/v4/locales/kh.cjs +143 -0
  488. package/v4/locales/kh.d.cts +4 -0
  489. package/v4/locales/kh.d.ts +4 -0
  490. package/v4/locales/kh.js +117 -0
  491. package/v4/locales/ko.cjs +147 -0
  492. package/v4/locales/ko.d.cts +4 -0
  493. package/v4/locales/ko.d.ts +4 -0
  494. package/v4/locales/ko.js +121 -0
  495. package/v4/locales/mk.cjs +144 -0
  496. package/v4/locales/mk.d.cts +4 -0
  497. package/v4/locales/mk.d.ts +4 -0
  498. package/v4/locales/mk.js +118 -0
  499. package/v4/locales/ms.cjs +142 -0
  500. package/v4/locales/ms.d.cts +4 -0
  501. package/v4/locales/ms.d.ts +4 -0
  502. package/v4/locales/ms.js +116 -0
  503. package/v4/locales/nl.cjs +143 -0
  504. package/v4/locales/nl.d.cts +4 -0
  505. package/v4/locales/nl.d.ts +4 -0
  506. package/v4/locales/nl.js +117 -0
  507. package/v4/locales/no.cjs +142 -0
  508. package/v4/locales/no.d.cts +4 -0
  509. package/v4/locales/no.d.ts +4 -0
  510. package/v4/locales/no.js +116 -0
  511. package/v4/locales/ota.cjs +143 -0
  512. package/v4/locales/ota.d.cts +4 -0
  513. package/v4/locales/ota.d.ts +4 -0
  514. package/v4/locales/ota.js +117 -0
  515. package/v4/locales/pl.cjs +143 -0
  516. package/v4/locales/pl.d.cts +4 -0
  517. package/v4/locales/pl.d.ts +4 -0
  518. package/v4/locales/pl.js +117 -0
  519. package/v4/locales/ps.cjs +148 -0
  520. package/v4/locales/ps.d.cts +4 -0
  521. package/v4/locales/ps.d.ts +4 -0
  522. package/v4/locales/ps.js +122 -0
  523. package/v4/locales/pt.cjs +142 -0
  524. package/v4/locales/pt.d.cts +4 -0
  525. package/v4/locales/pt.d.ts +4 -0
  526. package/v4/locales/pt.js +116 -0
  527. package/v4/locales/ru.cjs +190 -0
  528. package/v4/locales/ru.d.cts +4 -0
  529. package/v4/locales/ru.d.ts +4 -0
  530. package/v4/locales/ru.js +164 -0
  531. package/v4/locales/sl.cjs +143 -0
  532. package/v4/locales/sl.d.cts +4 -0
  533. package/v4/locales/sl.d.ts +4 -0
  534. package/v4/locales/sl.js +117 -0
  535. package/v4/locales/sv.cjs +144 -0
  536. package/v4/locales/sv.d.cts +4 -0
  537. package/v4/locales/sv.d.ts +4 -0
  538. package/v4/locales/sv.js +118 -0
  539. package/v4/locales/ta.cjs +143 -0
  540. package/v4/locales/ta.d.cts +4 -0
  541. package/v4/locales/ta.d.ts +4 -0
  542. package/v4/locales/ta.js +117 -0
  543. package/v4/locales/th.cjs +143 -0
  544. package/v4/locales/th.d.cts +4 -0
  545. package/v4/locales/th.d.ts +4 -0
  546. package/v4/locales/th.js +117 -0
  547. package/v4/locales/tr.cjs +143 -0
  548. package/v4/locales/tr.d.cts +5 -0
  549. package/v4/locales/tr.d.ts +5 -0
  550. package/v4/locales/tr.js +115 -0
  551. package/v4/locales/ua.cjs +143 -0
  552. package/v4/locales/ua.d.cts +4 -0
  553. package/v4/locales/ua.d.ts +4 -0
  554. package/v4/locales/ua.js +117 -0
  555. package/v4/locales/ur.cjs +143 -0
  556. package/v4/locales/ur.d.cts +4 -0
  557. package/v4/locales/ur.d.ts +4 -0
  558. package/v4/locales/ur.js +117 -0
  559. package/v4/locales/vi.cjs +142 -0
  560. package/v4/locales/vi.d.cts +4 -0
  561. package/v4/locales/vi.d.ts +4 -0
  562. package/v4/locales/vi.js +116 -0
  563. package/v4/locales/zh-CN.cjs +142 -0
  564. package/v4/locales/zh-CN.d.cts +4 -0
  565. package/v4/locales/zh-CN.d.ts +4 -0
  566. package/v4/locales/zh-CN.js +116 -0
  567. package/v4/locales/zh-TW.cjs +143 -0
  568. package/v4/locales/zh-TW.d.cts +4 -0
  569. package/v4/locales/zh-TW.d.ts +4 -0
  570. package/v4/locales/zh-TW.js +117 -0
  571. package/v4/mini/checks.cjs +34 -0
  572. package/v4/mini/checks.d.cts +1 -0
  573. package/v4/mini/checks.d.ts +1 -0
  574. package/v4/mini/checks.js +1 -0
  575. package/{dist/commonjs/errors.js → v4/mini/coerce.cjs} +21 -25
  576. package/v4/mini/coerce.d.cts +7 -0
  577. package/v4/mini/coerce.d.ts +7 -0
  578. package/v4/mini/coerce.js +17 -0
  579. package/v4/mini/external.cjs +62 -0
  580. package/v4/mini/external.d.cts +11 -0
  581. package/v4/mini/external.d.ts +11 -0
  582. package/v4/mini/external.js +13 -0
  583. package/v4/mini/index.cjs +32 -0
  584. package/v4/mini/index.d.cts +3 -0
  585. package/v4/mini/index.d.ts +3 -0
  586. package/v4/mini/index.js +3 -0
  587. package/v4/mini/iso.cjs +60 -0
  588. package/v4/mini/iso.d.cts +22 -0
  589. package/v4/mini/iso.d.ts +22 -0
  590. package/v4/mini/iso.js +30 -0
  591. package/v4/mini/parse.cjs +8 -0
  592. package/v4/mini/parse.d.cts +1 -0
  593. package/v4/mini/parse.d.ts +1 -0
  594. package/v4/mini/parse.js +1 -0
  595. package/v4/mini/schemas.cjs +839 -0
  596. package/v4/mini/schemas.d.cts +356 -0
  597. package/v4/mini/schemas.d.ts +356 -0
  598. package/v4/mini/schemas.js +732 -0
  599. package/v4-mini/index.cjs +17 -0
  600. package/v4-mini/index.d.cts +1 -0
  601. package/v4-mini/index.d.ts +1 -0
  602. package/v4-mini/index.js +1 -0
  603. package/dist/commonjs/coerce.d.ts +0 -17
  604. package/dist/commonjs/external.d.ts +0 -8
  605. package/dist/commonjs/external.js +0 -58
  606. package/dist/commonjs/package.json +0 -3
  607. package/dist/esm/coerce.d.ts +0 -17
  608. package/dist/esm/errors.js +0 -24
  609. package/dist/esm/external.d.ts +0 -8
  610. package/dist/esm/external.js +0 -14
  611. package/dist/esm/package.json +0 -3
  612. package/dist/esm/parse.js +0 -8
  613. package/src/coerce.ts +0 -27
  614. package/src/errors.ts +0 -50
  615. package/src/external.ts +0 -30
  616. package/{dist/esm → v3}/index.d.ts +1 -1
  617. /package/{dist/commonjs → v4/classic}/index.d.ts +0 -0
  618. /package/{dist/esm → v4/classic}/index.js +0 -0
@@ -0,0 +1,71 @@
1
+ // @ts-ignore TS6133
2
+ import { expect, test } from "vitest";
3
+
4
+ import * as z from "zod/v3";
5
+ import { util } from "../helpers/util.js";
6
+
7
+ const minTwo = z.string().array().min(2);
8
+ const maxTwo = z.string().array().max(2);
9
+ const justTwo = z.string().array().length(2);
10
+ const intNum = z.string().array().nonempty();
11
+ const nonEmptyMax = z.string().array().nonempty().max(2);
12
+
13
+ type t1 = z.infer<typeof nonEmptyMax>;
14
+ util.assertEqual<[string, ...string[]], t1>(true);
15
+
16
+ type t2 = z.infer<typeof minTwo>;
17
+ util.assertEqual<string[], t2>(true);
18
+
19
+ test("passing validations", () => {
20
+ minTwo.parse(["a", "a"]);
21
+ minTwo.parse(["a", "a", "a"]);
22
+ maxTwo.parse(["a", "a"]);
23
+ maxTwo.parse(["a"]);
24
+ justTwo.parse(["a", "a"]);
25
+ intNum.parse(["a"]);
26
+ nonEmptyMax.parse(["a"]);
27
+ });
28
+
29
+ test("failing validations", () => {
30
+ expect(() => minTwo.parse(["a"])).toThrow();
31
+ expect(() => maxTwo.parse(["a", "a", "a"])).toThrow();
32
+ expect(() => justTwo.parse(["a"])).toThrow();
33
+ expect(() => justTwo.parse(["a", "a", "a"])).toThrow();
34
+ expect(() => intNum.parse([])).toThrow();
35
+ expect(() => nonEmptyMax.parse([])).toThrow();
36
+ expect(() => nonEmptyMax.parse(["a", "a", "a"])).toThrow();
37
+ });
38
+
39
+ test("parse empty array in nonempty", () => {
40
+ expect(() =>
41
+ z
42
+ .array(z.string())
43
+ .nonempty()
44
+ .parse([] as any)
45
+ ).toThrow();
46
+ });
47
+
48
+ test("get element", () => {
49
+ justTwo.element.parse("asdf");
50
+ expect(() => justTwo.element.parse(12)).toThrow();
51
+ });
52
+
53
+ test("continue parsing despite array size error", () => {
54
+ const schema = z.object({
55
+ people: z.string().array().min(2),
56
+ });
57
+
58
+ const result = schema.safeParse({
59
+ people: [123],
60
+ });
61
+ expect(result.success).toEqual(false);
62
+ if (!result.success) {
63
+ expect(result.error.issues.length).toEqual(2);
64
+ }
65
+ });
66
+
67
+ test("parse should fail given sparse array", () => {
68
+ const schema = z.array(z.string()).nonempty().min(1).max(3);
69
+
70
+ expect(() => schema.parse(new Array(3))).toThrow();
71
+ });
@@ -0,0 +1,388 @@
1
+ // @ts-ignore TS6133
2
+ import { expect, test } from "vitest";
3
+
4
+ import * as z from "zod/v3";
5
+
6
+ /// string
7
+ const stringSchema = z.string();
8
+
9
+ test("string async parse", async () => {
10
+ const goodData = "XXX";
11
+ const badData = 12;
12
+
13
+ const goodResult = await stringSchema.safeParseAsync(goodData);
14
+ expect(goodResult.success).toBe(true);
15
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
16
+
17
+ const badResult = await stringSchema.safeParseAsync(badData);
18
+ expect(badResult.success).toBe(false);
19
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
20
+ });
21
+
22
+ /// number
23
+ const numberSchema = z.number();
24
+ test("number async parse", async () => {
25
+ const goodData = 1234.2353;
26
+ const badData = "1234";
27
+
28
+ const goodResult = await numberSchema.safeParseAsync(goodData);
29
+ expect(goodResult.success).toBe(true);
30
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
31
+
32
+ const badResult = await numberSchema.safeParseAsync(badData);
33
+ expect(badResult.success).toBe(false);
34
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
35
+ });
36
+
37
+ /// bigInt
38
+ const bigIntSchema = z.bigint();
39
+ test("bigInt async parse", async () => {
40
+ const goodData = BigInt(145);
41
+ const badData = 134;
42
+
43
+ const goodResult = await bigIntSchema.safeParseAsync(goodData);
44
+ expect(goodResult.success).toBe(true);
45
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
46
+
47
+ const badResult = await bigIntSchema.safeParseAsync(badData);
48
+ expect(badResult.success).toBe(false);
49
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
50
+ });
51
+
52
+ /// boolean
53
+ const booleanSchema = z.boolean();
54
+ test("boolean async parse", async () => {
55
+ const goodData = true;
56
+ const badData = 1;
57
+
58
+ const goodResult = await booleanSchema.safeParseAsync(goodData);
59
+ expect(goodResult.success).toBe(true);
60
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
61
+
62
+ const badResult = await booleanSchema.safeParseAsync(badData);
63
+ expect(badResult.success).toBe(false);
64
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
65
+ });
66
+
67
+ /// date
68
+ const dateSchema = z.date();
69
+ test("date async parse", async () => {
70
+ const goodData = new Date();
71
+ const badData = new Date().toISOString();
72
+
73
+ const goodResult = await dateSchema.safeParseAsync(goodData);
74
+ expect(goodResult.success).toBe(true);
75
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
76
+
77
+ const badResult = await dateSchema.safeParseAsync(badData);
78
+ expect(badResult.success).toBe(false);
79
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
80
+ });
81
+
82
+ /// undefined
83
+ const undefinedSchema = z.undefined();
84
+ test("undefined async parse", async () => {
85
+ const goodData = undefined;
86
+ const badData = "XXX";
87
+
88
+ const goodResult = await undefinedSchema.safeParseAsync(goodData);
89
+ expect(goodResult.success).toBe(true);
90
+ if (goodResult.success) expect(goodResult.data).toEqual(undefined);
91
+
92
+ const badResult = await undefinedSchema.safeParseAsync(badData);
93
+ expect(badResult.success).toBe(false);
94
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
95
+ });
96
+
97
+ /// null
98
+ const nullSchema = z.null();
99
+ test("null async parse", async () => {
100
+ const goodData = null;
101
+ const badData = undefined;
102
+
103
+ const goodResult = await nullSchema.safeParseAsync(goodData);
104
+ expect(goodResult.success).toBe(true);
105
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
106
+
107
+ const badResult = await nullSchema.safeParseAsync(badData);
108
+ expect(badResult.success).toBe(false);
109
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
110
+ });
111
+
112
+ /// any
113
+ const anySchema = z.any();
114
+ test("any async parse", async () => {
115
+ const goodData = [{}];
116
+ // const badData = 'XXX';
117
+
118
+ const goodResult = await anySchema.safeParseAsync(goodData);
119
+ expect(goodResult.success).toBe(true);
120
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
121
+
122
+ // const badResult = await anySchema.safeParseAsync(badData);
123
+ // expect(badResult.success).toBe(false);
124
+ // if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
125
+ });
126
+
127
+ /// unknown
128
+ const unknownSchema = z.unknown();
129
+ test("unknown async parse", async () => {
130
+ const goodData = ["asdf", 124, () => {}];
131
+ // const badData = 'XXX';
132
+
133
+ const goodResult = await unknownSchema.safeParseAsync(goodData);
134
+ expect(goodResult.success).toBe(true);
135
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
136
+
137
+ // const badResult = await unknownSchema.safeParseAsync(badData);
138
+ // expect(badResult.success).toBe(false);
139
+ // if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
140
+ });
141
+
142
+ /// void
143
+ const voidSchema = z.void();
144
+ test("void async parse", async () => {
145
+ const goodData = undefined;
146
+ const badData = 0;
147
+
148
+ const goodResult = await voidSchema.safeParseAsync(goodData);
149
+ expect(goodResult.success).toBe(true);
150
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
151
+
152
+ const badResult = await voidSchema.safeParseAsync(badData);
153
+ expect(badResult.success).toBe(false);
154
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
155
+ });
156
+
157
+ /// array
158
+ const arraySchema = z.array(z.string());
159
+ test("array async parse", async () => {
160
+ const goodData = ["XXX"];
161
+ const badData = "XXX";
162
+
163
+ const goodResult = await arraySchema.safeParseAsync(goodData);
164
+ expect(goodResult.success).toBe(true);
165
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
166
+
167
+ const badResult = await arraySchema.safeParseAsync(badData);
168
+ expect(badResult.success).toBe(false);
169
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
170
+ });
171
+
172
+ /// object
173
+ const objectSchema = z.object({ string: z.string() });
174
+ test("object async parse", async () => {
175
+ const goodData = { string: "XXX" };
176
+ const badData = { string: 12 };
177
+
178
+ const goodResult = await objectSchema.safeParseAsync(goodData);
179
+ expect(goodResult.success).toBe(true);
180
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
181
+
182
+ const badResult = await objectSchema.safeParseAsync(badData);
183
+ expect(badResult.success).toBe(false);
184
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
185
+ });
186
+
187
+ /// union
188
+ const unionSchema = z.union([z.string(), z.undefined()]);
189
+ test("union async parse", async () => {
190
+ const goodData = undefined;
191
+ const badData = null;
192
+
193
+ const goodResult = await unionSchema.safeParseAsync(goodData);
194
+ expect(goodResult.success).toBe(true);
195
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
196
+
197
+ const badResult = await unionSchema.safeParseAsync(badData);
198
+ expect(badResult.success).toBe(false);
199
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
200
+ });
201
+
202
+ /// record
203
+ const recordSchema = z.record(z.object({}));
204
+ test("record async parse", async () => {
205
+ const goodData = { adsf: {}, asdf: {} };
206
+ const badData = [{}];
207
+
208
+ const goodResult = await recordSchema.safeParseAsync(goodData);
209
+ expect(goodResult.success).toBe(true);
210
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
211
+
212
+ const badResult = await recordSchema.safeParseAsync(badData);
213
+ expect(badResult.success).toBe(false);
214
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
215
+ });
216
+
217
+ /// function
218
+ const functionSchema = z.function();
219
+ test("function async parse", async () => {
220
+ const goodData = () => {};
221
+ const badData = "XXX";
222
+
223
+ const goodResult = await functionSchema.safeParseAsync(goodData);
224
+ expect(goodResult.success).toBe(true);
225
+ if (goodResult.success) expect(typeof goodResult.data).toEqual("function");
226
+
227
+ const badResult = await functionSchema.safeParseAsync(badData);
228
+ expect(badResult.success).toBe(false);
229
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
230
+ });
231
+
232
+ /// literal
233
+ const literalSchema = z.literal("asdf");
234
+ test("literal async parse", async () => {
235
+ const goodData = "asdf";
236
+ const badData = "asdff";
237
+
238
+ const goodResult = await literalSchema.safeParseAsync(goodData);
239
+ expect(goodResult.success).toBe(true);
240
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
241
+
242
+ const badResult = await literalSchema.safeParseAsync(badData);
243
+ expect(badResult.success).toBe(false);
244
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
245
+ });
246
+
247
+ /// enum
248
+ const enumSchema = z.enum(["fish", "whale"]);
249
+ test("enum async parse", async () => {
250
+ const goodData = "whale";
251
+ const badData = "leopard";
252
+
253
+ const goodResult = await enumSchema.safeParseAsync(goodData);
254
+ expect(goodResult.success).toBe(true);
255
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
256
+
257
+ const badResult = await enumSchema.safeParseAsync(badData);
258
+ expect(badResult.success).toBe(false);
259
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
260
+ });
261
+
262
+ /// nativeEnum
263
+ enum nativeEnumTest {
264
+ asdf = "qwer",
265
+ }
266
+ // @ts-ignore
267
+ const nativeEnumSchema = z.nativeEnum(nativeEnumTest);
268
+ test("nativeEnum async parse", async () => {
269
+ const goodData = nativeEnumTest.asdf;
270
+ const badData = "asdf";
271
+
272
+ const goodResult = await nativeEnumSchema.safeParseAsync(goodData);
273
+ expect(goodResult.success).toBe(true);
274
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
275
+
276
+ const badResult = await nativeEnumSchema.safeParseAsync(badData);
277
+ expect(badResult.success).toBe(false);
278
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
279
+ });
280
+
281
+ /// promise
282
+ const promiseSchema = z.promise(z.number());
283
+ test("promise async parse good", async () => {
284
+ const goodData = Promise.resolve(123);
285
+
286
+ const goodResult = await promiseSchema.safeParseAsync(goodData);
287
+ expect(goodResult.success).toBe(true);
288
+ if (goodResult.success) {
289
+ expect(goodResult.data).toBeInstanceOf(Promise);
290
+ const data = await goodResult.data;
291
+ expect(data).toEqual(123);
292
+ // expect(goodResult.data).resolves.toEqual(124);
293
+ // return goodResult.data;
294
+ } else {
295
+ throw new Error("success should be true");
296
+ }
297
+ });
298
+
299
+ test("promise async parse bad", async () => {
300
+ const badData = Promise.resolve("XXX");
301
+ const badResult = await promiseSchema.safeParseAsync(badData);
302
+ expect(badResult.success).toBe(true);
303
+ if (badResult.success) {
304
+ await expect(badResult.data).rejects.toBeInstanceOf(z.ZodError);
305
+ } else {
306
+ throw new Error("success should be true");
307
+ }
308
+ });
309
+
310
+ test("async validation non-empty strings", async () => {
311
+ const base = z.object({
312
+ hello: z.string().refine((x) => x && x.length > 0),
313
+ foo: z.string().refine((x) => x && x.length > 0),
314
+ });
315
+
316
+ const testval = { hello: "", foo: "" };
317
+ const result1 = base.safeParse(testval);
318
+ const result2 = base.safeParseAsync(testval);
319
+
320
+ const r1 = result1;
321
+ await result2.then((r2) => {
322
+ if (r1.success === false && r2.success === false) expect(r1.error.issues.length).toBe(r2.error.issues.length); // <--- r1 has length 2, r2 has length 1
323
+ });
324
+ });
325
+
326
+ test("async validation multiple errors 1", async () => {
327
+ const base = z.object({
328
+ hello: z.string(),
329
+ foo: z.number(),
330
+ });
331
+
332
+ const testval = { hello: 3, foo: "hello" };
333
+ const result1 = base.safeParse(testval);
334
+ const result2 = base.safeParseAsync(testval);
335
+
336
+ const r1 = result1;
337
+ await result2.then((r2) => {
338
+ if (r1.success === false && r2.success === false) expect(r2.error.issues.length).toBe(r1.error.issues.length);
339
+ });
340
+ });
341
+
342
+ test("async validation multiple errors 2", async () => {
343
+ const base = (is_async?: boolean) =>
344
+ z.object({
345
+ hello: z.string(),
346
+ foo: z.object({
347
+ bar: z.number().refine(is_async ? async () => false : () => false),
348
+ }),
349
+ });
350
+
351
+ const testval = { hello: 3, foo: { bar: 4 } };
352
+ const result1 = base().safeParse(testval);
353
+ const result2 = base(true).safeParseAsync(testval);
354
+
355
+ const r1 = result1;
356
+ await result2.then((r2) => {
357
+ if (r1.success === false && r2.success === false) expect(r2.error.issues.length).toBe(r1.error.issues.length);
358
+ });
359
+ });
360
+
361
+ test("ensure early async failure prevents follow-up refinement checks", async () => {
362
+ let count = 0;
363
+ const base = z.object({
364
+ hello: z.string(),
365
+ foo: z
366
+ .number()
367
+ .refine(async () => {
368
+ count++;
369
+ return true;
370
+ })
371
+ .refine(async () => {
372
+ count++;
373
+ return true;
374
+ }, "Good"),
375
+ });
376
+
377
+ const testval = { hello: "bye", foo: 3 };
378
+ const result = await base.safeParseAsync(testval);
379
+ if (result.success === false) {
380
+ expect(result.error.issues.length).toBe(1);
381
+ expect(count).toBe(1);
382
+ }
383
+
384
+ // await result.then((r) => {
385
+ // if (r.success === false) expect(r.error.issues.length).toBe(1);
386
+ // expect(count).toBe(2);
387
+ // });
388
+ });
@@ -0,0 +1,46 @@
1
+ // @ts-ignore TS6133
2
+ import { expect, test } from "vitest";
3
+
4
+ import * as z from "zod/v3";
5
+
6
+ test("parse async test", async () => {
7
+ const schema1 = z.string().refine(async (_val) => false);
8
+ expect(() => schema1.parse("asdf")).toThrow();
9
+
10
+ const schema2 = z.string().refine((_val) => Promise.resolve(true));
11
+ return await expect(() => schema2.parse("asdf")).toThrow();
12
+ });
13
+
14
+ test("parseAsync async test", async () => {
15
+ const schema1 = z.string().refine(async (_val) => true);
16
+ await schema1.parseAsync("asdf");
17
+
18
+ const schema2 = z.string().refine(async (_val) => false);
19
+ return await expect(schema2.parseAsync("asdf")).rejects.toBeDefined();
20
+ // expect(async () => await schema2.parseAsync('asdf')).toThrow();
21
+ });
22
+
23
+ test("parseAsync async test", async () => {
24
+ // expect.assertions(2);
25
+
26
+ const schema1 = z.string().refine((_val) => Promise.resolve(true));
27
+ const v1 = await schema1.parseAsync("asdf");
28
+ expect(v1).toEqual("asdf");
29
+
30
+ const schema2 = z.string().refine((_val) => Promise.resolve(false));
31
+ await expect(schema2.parseAsync("asdf")).rejects.toBeDefined();
32
+
33
+ const schema3 = z.string().refine((_val) => Promise.resolve(true));
34
+ await expect(schema3.parseAsync("asdf")).resolves.toEqual("asdf");
35
+ return await expect(schema3.parseAsync("qwer")).resolves.toEqual("qwer");
36
+ });
37
+
38
+ test("parseAsync async with value", async () => {
39
+ const schema1 = z.string().refine(async (val) => {
40
+ return val.length > 5;
41
+ });
42
+ await expect(schema1.parseAsync("asdf")).rejects.toBeDefined();
43
+
44
+ const v = await schema1.parseAsync("asdf123");
45
+ return await expect(v).toEqual("asdf123");
46
+ });
@@ -0,0 +1,29 @@
1
+ // @ts-ignore TS6133
2
+ import { expect, test } from "vitest";
3
+
4
+ import * as z from "zod/v3";
5
+ import { util } from "../helpers/util.js";
6
+
7
+ test("type guard", () => {
8
+ const stringToNumber = z.string().transform((arg) => arg.length);
9
+
10
+ const s1 = z.object({
11
+ stringToNumber,
12
+ });
13
+ type t1 = z.input<typeof s1>;
14
+
15
+ const data = { stringToNumber: "asdf" };
16
+ const parsed = s1.safeParse(data);
17
+ if (parsed.success) {
18
+ util.assertEqual<typeof data, t1>(true);
19
+ }
20
+ });
21
+
22
+ test("test this binding", () => {
23
+ const callback = (predicate: (val: string) => boolean) => {
24
+ return predicate("hello");
25
+ };
26
+
27
+ expect(callback((value) => z.string().safeParse(value).success)).toBe(true); // true
28
+ expect(callback((value) => z.string().safeParse(value).success)).toBe(true); // true
29
+ });
@@ -0,0 +1,55 @@
1
+ // @ts-ignore TS6133
2
+ import { expect, test } from "vitest";
3
+
4
+ import * as z from "zod/v3";
5
+
6
+ const gtFive = z.bigint().gt(BigInt(5));
7
+ const gteFive = z.bigint().gte(BigInt(5));
8
+ const ltFive = z.bigint().lt(BigInt(5));
9
+ const lteFive = z.bigint().lte(BigInt(5));
10
+ const positive = z.bigint().positive();
11
+ const negative = z.bigint().negative();
12
+ const nonnegative = z.bigint().nonnegative();
13
+ const nonpositive = z.bigint().nonpositive();
14
+ const multipleOfFive = z.bigint().multipleOf(BigInt(5));
15
+
16
+ test("passing validations", () => {
17
+ z.bigint().parse(BigInt(1));
18
+ z.bigint().parse(BigInt(0));
19
+ z.bigint().parse(BigInt(-1));
20
+ gtFive.parse(BigInt(6));
21
+ gteFive.parse(BigInt(5));
22
+ gteFive.parse(BigInt(6));
23
+ ltFive.parse(BigInt(4));
24
+ lteFive.parse(BigInt(5));
25
+ lteFive.parse(BigInt(4));
26
+ positive.parse(BigInt(3));
27
+ negative.parse(BigInt(-2));
28
+ nonnegative.parse(BigInt(0));
29
+ nonnegative.parse(BigInt(7));
30
+ nonpositive.parse(BigInt(0));
31
+ nonpositive.parse(BigInt(-12));
32
+ multipleOfFive.parse(BigInt(15));
33
+ });
34
+
35
+ test("failing validations", () => {
36
+ expect(() => gtFive.parse(BigInt(5))).toThrow();
37
+ expect(() => gteFive.parse(BigInt(4))).toThrow();
38
+ expect(() => ltFive.parse(BigInt(5))).toThrow();
39
+ expect(() => lteFive.parse(BigInt(6))).toThrow();
40
+ expect(() => positive.parse(BigInt(0))).toThrow();
41
+ expect(() => positive.parse(BigInt(-2))).toThrow();
42
+ expect(() => negative.parse(BigInt(0))).toThrow();
43
+ expect(() => negative.parse(BigInt(3))).toThrow();
44
+ expect(() => nonnegative.parse(BigInt(-1))).toThrow();
45
+ expect(() => nonpositive.parse(BigInt(1))).toThrow();
46
+ expect(() => multipleOfFive.parse(BigInt(13))).toThrow();
47
+ });
48
+
49
+ test("min max getters", () => {
50
+ expect(z.bigint().min(BigInt(5)).minValue).toEqual(BigInt(5));
51
+ expect(z.bigint().min(BigInt(5)).min(BigInt(10)).minValue).toEqual(BigInt(10));
52
+
53
+ expect(z.bigint().max(BigInt(5)).maxValue).toEqual(BigInt(5));
54
+ expect(z.bigint().max(BigInt(5)).max(BigInt(1)).maxValue).toEqual(BigInt(1));
55
+ });
@@ -0,0 +1,53 @@
1
+ // @ts-ignore TS6133
2
+ import { test } from "vitest";
3
+
4
+ import * as z from "zod/v3";
5
+ import { util } from "../helpers/util.js";
6
+
7
+ test("branded types", () => {
8
+ const mySchema = z
9
+ .object({
10
+ name: z.string(),
11
+ })
12
+ .brand<"superschema">();
13
+
14
+ // simple branding
15
+ type MySchema = z.infer<typeof mySchema>;
16
+ util.assertEqual<MySchema, { name: string } & { [z.BRAND]: { superschema: true } }>(true);
17
+
18
+ const doStuff = (arg: MySchema) => arg;
19
+ doStuff(mySchema.parse({ name: "hello there" }));
20
+
21
+ // inheritance
22
+ const extendedSchema = mySchema.brand<"subschema">();
23
+ type ExtendedSchema = z.infer<typeof extendedSchema>;
24
+ util.assertEqual<ExtendedSchema, { name: string } & z.BRAND<"superschema"> & z.BRAND<"subschema">>(true);
25
+
26
+ doStuff(extendedSchema.parse({ name: "hello again" }));
27
+
28
+ // number branding
29
+ const numberSchema = z.number().brand<42>();
30
+ type NumberSchema = z.infer<typeof numberSchema>;
31
+ util.assertEqual<NumberSchema, number & { [z.BRAND]: { 42: true } }>(true);
32
+
33
+ // symbol branding
34
+ const MyBrand: unique symbol = Symbol("hello");
35
+ type MyBrand = typeof MyBrand;
36
+ const symbolBrand = z.number().brand<"sup">().brand<typeof MyBrand>();
37
+ type SymbolBrand = z.infer<typeof symbolBrand>;
38
+ // number & { [z.BRAND]: { sup: true, [MyBrand]: true } }
39
+ util.assertEqual<SymbolBrand, number & z.BRAND<"sup"> & z.BRAND<MyBrand>>(true);
40
+
41
+ // keeping brands out of input types
42
+ const age = z.number().brand<"age">();
43
+
44
+ type Age = z.infer<typeof age>;
45
+ type AgeInput = z.input<typeof age>;
46
+
47
+ util.assertEqual<AgeInput, Age>(false);
48
+ util.assertEqual<number, AgeInput>(true);
49
+ util.assertEqual<number & z.BRAND<"age">, Age>(true);
50
+
51
+ // @ts-expect-error
52
+ doStuff({ name: "hello there!" });
53
+ });