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,381 @@
1
+ import { expect, test } from "vitest";
2
+
3
+ import * as z from "zod/v4";
4
+
5
+ /// string
6
+ const stringSchema = z.string();
7
+
8
+ test("string async parse", async () => {
9
+ const goodData = "XXX";
10
+ const badData = 12;
11
+
12
+ const goodResult = await stringSchema.safeParseAsync(goodData);
13
+ expect(goodResult.success).toBe(true);
14
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
15
+
16
+ const badResult = await stringSchema.safeParseAsync(badData);
17
+ expect(badResult.success).toBe(false);
18
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
19
+ });
20
+
21
+ /// number
22
+ const numberSchema = z.number();
23
+ test("number async parse", async () => {
24
+ const goodData = 1234.2353;
25
+ const badData = "1234";
26
+
27
+ const goodResult = await numberSchema.safeParseAsync(goodData);
28
+ expect(goodResult.success).toBe(true);
29
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
30
+
31
+ const badResult = await numberSchema.safeParseAsync(badData);
32
+ expect(badResult.success).toBe(false);
33
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
34
+ });
35
+
36
+ /// bigInt
37
+ const bigIntSchema = z.bigint();
38
+ test("bigInt async parse", async () => {
39
+ const goodData = BigInt(145);
40
+ const badData = 134;
41
+
42
+ const goodResult = await bigIntSchema.safeParseAsync(goodData);
43
+ expect(goodResult.success).toBe(true);
44
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
45
+
46
+ const badResult = await bigIntSchema.safeParseAsync(badData);
47
+ expect(badResult.success).toBe(false);
48
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
49
+ });
50
+
51
+ /// boolean
52
+ const booleanSchema = z.boolean();
53
+ test("boolean async parse", async () => {
54
+ const goodData = true;
55
+ const badData = 1;
56
+
57
+ const goodResult = await booleanSchema.safeParseAsync(goodData);
58
+ expect(goodResult.success).toBe(true);
59
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
60
+
61
+ const badResult = await booleanSchema.safeParseAsync(badData);
62
+ expect(badResult.success).toBe(false);
63
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
64
+ });
65
+
66
+ /// date
67
+ const dateSchema = z.date();
68
+ test("date async parse", async () => {
69
+ const goodData = new Date();
70
+ const badData = new Date().toISOString();
71
+
72
+ const goodResult = await dateSchema.safeParseAsync(goodData);
73
+ expect(goodResult.success).toBe(true);
74
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
75
+
76
+ const badResult = await dateSchema.safeParseAsync(badData);
77
+ expect(badResult.success).toBe(false);
78
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
79
+ });
80
+
81
+ /// undefined
82
+ const undefinedSchema = z.undefined();
83
+ test("undefined async parse", async () => {
84
+ const goodData = undefined;
85
+ const badData = "XXX";
86
+
87
+ const goodResult = await undefinedSchema.safeParseAsync(goodData);
88
+ expect(goodResult.success).toBe(true);
89
+ if (goodResult.success) expect(goodResult.data).toEqual(undefined);
90
+
91
+ const badResult = await undefinedSchema.safeParseAsync(badData);
92
+ expect(badResult.success).toBe(false);
93
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
94
+ });
95
+
96
+ /// null
97
+ const nullSchema = z.null();
98
+ test("null async parse", async () => {
99
+ const goodData = null;
100
+ const badData = undefined;
101
+
102
+ const goodResult = await nullSchema.safeParseAsync(goodData);
103
+ expect(goodResult.success).toBe(true);
104
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
105
+
106
+ const badResult = await nullSchema.safeParseAsync(badData);
107
+ expect(badResult.success).toBe(false);
108
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
109
+ });
110
+
111
+ /// any
112
+ const anySchema = z.any();
113
+ test("any async parse", async () => {
114
+ const goodData = [{}];
115
+ // const badData = 'XXX';
116
+
117
+ const goodResult = await anySchema.safeParseAsync(goodData);
118
+ expect(goodResult.success).toBe(true);
119
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
120
+
121
+ // const badResult = await anySchema.safeParseAsync(badData);
122
+ // expect(badResult.success).toBe(false);
123
+ // if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
124
+ });
125
+
126
+ /// unknown
127
+ const unknownSchema = z.unknown();
128
+ test("unknown async parse", async () => {
129
+ const goodData = ["asdf", 124, () => {}];
130
+ // const badData = 'XXX';
131
+
132
+ const goodResult = await unknownSchema.safeParseAsync(goodData);
133
+ expect(goodResult.success).toBe(true);
134
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
135
+
136
+ // const badResult = await unknownSchema.safeParseAsync(badData);
137
+ // expect(badResult.success).toBe(false);
138
+ // if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
139
+ });
140
+
141
+ /// void
142
+ const voidSchema = z.void();
143
+ test("void async parse", async () => {
144
+ const goodData = undefined;
145
+ const badData = 0;
146
+
147
+ const goodResult = await voidSchema.safeParseAsync(goodData);
148
+ expect(goodResult.success).toBe(true);
149
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
150
+
151
+ const badResult = await voidSchema.safeParseAsync(badData);
152
+ expect(badResult.success).toBe(false);
153
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
154
+ });
155
+
156
+ /// array
157
+ const arraySchema = z.array(z.string());
158
+ test("array async parse", async () => {
159
+ const goodData = ["XXX"];
160
+ const badData = "XXX";
161
+
162
+ const goodResult = await arraySchema.safeParseAsync(goodData);
163
+ expect(goodResult.success).toBe(true);
164
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
165
+
166
+ const badResult = await arraySchema.safeParseAsync(badData);
167
+ expect(badResult.success).toBe(false);
168
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
169
+ });
170
+
171
+ /// object
172
+ const objectSchema = z.object({ string: z.string() });
173
+ test("object async parse", async () => {
174
+ const goodData = { string: "XXX" };
175
+ const badData = { string: 12 };
176
+
177
+ const goodResult = await objectSchema.safeParseAsync(goodData);
178
+ expect(goodResult.success).toBe(true);
179
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
180
+
181
+ const badResult = await objectSchema.safeParseAsync(badData);
182
+ expect(badResult.success).toBe(false);
183
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
184
+ });
185
+
186
+ /// union
187
+ const unionSchema = z.union([z.string(), z.undefined()]);
188
+ test("union async parse", async () => {
189
+ const goodData = undefined;
190
+ const badData = null;
191
+
192
+ const goodResult = await unionSchema.safeParseAsync(goodData);
193
+ expect(goodResult.success).toBe(true);
194
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
195
+
196
+ const badResult = await unionSchema.safeParseAsync(badData);
197
+ expect(badResult.success).toBe(false);
198
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
199
+ });
200
+
201
+ /// record
202
+ const recordSchema = z.record(z.string(), z.object({}));
203
+ test("record async parse", async () => {
204
+ const goodData = { adsf: {}, asdf: {} };
205
+ const badData = [{}];
206
+
207
+ const goodResult = await recordSchema.safeParseAsync(goodData);
208
+ expect(goodResult.success).toBe(true);
209
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
210
+
211
+ const badResult = await recordSchema.safeParseAsync(badData);
212
+ expect(badResult.success).toBe(false);
213
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
214
+ });
215
+
216
+ /// function
217
+ // const functionSchema = z.function();
218
+ // test("function async parse", async () => {
219
+ // const goodData = () => {};
220
+ // const badData = "XXX";
221
+
222
+ // const goodResult = await functionSchema.safeParseAsync(goodData);
223
+ // expect(goodResult.success).toBe(true);
224
+ // if (goodResult.success) expect(typeof goodResult.data).toEqual("function");
225
+
226
+ // const badResult = await functionSchema.safeParseAsync(badData);
227
+ // expect(badResult.success).toBe(false);
228
+ // if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
229
+ // });
230
+
231
+ /// literal
232
+ const literalSchema = z.literal("asdf");
233
+ test("literal async parse", async () => {
234
+ const goodData = "asdf";
235
+ const badData = "asdff";
236
+
237
+ const goodResult = await literalSchema.safeParseAsync(goodData);
238
+ expect(goodResult.success).toBe(true);
239
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
240
+
241
+ const badResult = await literalSchema.safeParseAsync(badData);
242
+ expect(badResult.success).toBe(false);
243
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
244
+ });
245
+
246
+ /// enum
247
+ const enumSchema = z.enum(["fish", "whale"]);
248
+ test("enum async parse", async () => {
249
+ const goodData = "whale";
250
+ const badData = "leopard";
251
+
252
+ const goodResult = await enumSchema.safeParseAsync(goodData);
253
+ expect(goodResult.success).toBe(true);
254
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
255
+
256
+ const badResult = await enumSchema.safeParseAsync(badData);
257
+ expect(badResult.success).toBe(false);
258
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
259
+ });
260
+
261
+ /// nativeEnum
262
+ enum nativeEnumTest {
263
+ asdf = "qwer",
264
+ }
265
+ // @ts-ignore
266
+ const nativeEnumSchema = z.nativeEnum(nativeEnumTest);
267
+ test("nativeEnum async parse", async () => {
268
+ const goodData = nativeEnumTest.asdf;
269
+ const badData = "asdf";
270
+
271
+ const goodResult = await nativeEnumSchema.safeParseAsync(goodData);
272
+ expect(goodResult.success).toBe(true);
273
+ if (goodResult.success) expect(goodResult.data).toEqual(goodData);
274
+
275
+ const badResult = await nativeEnumSchema.safeParseAsync(badData);
276
+ expect(badResult.success).toBe(false);
277
+ if (!badResult.success) expect(badResult.error).toBeInstanceOf(z.ZodError);
278
+ });
279
+
280
+ /// promise
281
+ const promiseSchema = z.promise(z.number());
282
+ test("promise async parse good", async () => {
283
+ const goodData = Promise.resolve(123);
284
+
285
+ const goodResult = await promiseSchema.safeParseAsync(goodData);
286
+ expect(goodResult.success).toBe(true);
287
+ expect(typeof goodResult.data).toEqual("number");
288
+ expect(goodResult.data).toEqual(123);
289
+ });
290
+
291
+ test("promise async parse bad", async () => {
292
+ const badData = Promise.resolve("XXX");
293
+ const badResult = await promiseSchema.safeParseAsync(badData);
294
+ expect(badResult.success).toBe(false);
295
+ expect(badResult.error).toBeInstanceOf(z.ZodError);
296
+ });
297
+
298
+ test("async validation non-empty strings", async () => {
299
+ const base = z.object({
300
+ hello: z.string().refine((x) => x && x.length > 0),
301
+ foo: z.string().refine((x) => x && x.length > 0),
302
+ });
303
+
304
+ const testval = { hello: "", foo: "" };
305
+ const result1 = base.safeParse(testval);
306
+ const result2 = base.safeParseAsync(testval);
307
+
308
+ const r1 = result1;
309
+ await result2.then((r2) => {
310
+ expect(r1.error!.issues.length).toBe(r2.error!.issues.length);
311
+ });
312
+ });
313
+
314
+ test("async validation multiple errors 1", async () => {
315
+ const base = z.object({
316
+ hello: z.string(),
317
+ foo: z.number(),
318
+ });
319
+
320
+ const testval = { hello: 3, foo: "hello" };
321
+ const result1 = base.safeParse(testval);
322
+ const result2 = base.safeParseAsync(testval);
323
+
324
+ await result2.then((result2) => {
325
+ expect(result2.error!.issues.length).toBe(result1.error!.issues.length);
326
+ });
327
+ });
328
+
329
+ test("async validation multiple errors 2", async () => {
330
+ const base = (is_async?: boolean) =>
331
+ z.object({
332
+ hello: z.string(),
333
+ foo: z.object({
334
+ bar: z.number().refine(
335
+ is_async
336
+ ? async () =>
337
+ new Promise((resolve) => {
338
+ setTimeout(() => resolve(false), 500);
339
+ })
340
+ : () => false
341
+ ),
342
+ }),
343
+ });
344
+
345
+ const testval = { hello: 3, foo: { bar: 4 } };
346
+ const result1 = base().safeParse(testval);
347
+ const result2 = base(true).safeParseAsync(testval);
348
+
349
+ await result2.then((result2) => {
350
+ expect(result1.error!.issues.length).toBe(result2.error!.issues.length);
351
+ });
352
+ });
353
+
354
+ test("ensure early async failure prevents follow-up refinement checks", async () => {
355
+ let count = 0;
356
+ const base = z.object({
357
+ hello: z.string(),
358
+ foo: z
359
+ .number()
360
+ .refine(async () => {
361
+ count++;
362
+ return true;
363
+ })
364
+ .refine(async () => {
365
+ count++;
366
+ return true;
367
+ }, "Good"),
368
+ });
369
+
370
+ const testval = { hello: "bye", foo: 3 };
371
+ const result = await base.safeParseAsync(testval);
372
+ if (result.success === false) {
373
+ expect(result.error.issues.length).toBe(1);
374
+ expect(count).toBe(1);
375
+ }
376
+
377
+ // await result.then((r) => {
378
+ // if (r.success === false) expect(r.error.issues.length).toBe(1);
379
+ // expect(count).toBe(2);
380
+ // });
381
+ });
@@ -0,0 +1,68 @@
1
+ import { expect, test } from "vitest";
2
+
3
+ import * as z from "zod/v4";
4
+
5
+ test("async refine .parse()", async () => {
6
+ // throws ZodAsyncError
7
+ const s1 = z.string().refine(async (_val) => true);
8
+ expect(() => s1.safeParse("asdf")).toThrow();
9
+ });
10
+
11
+ test("async refine", async () => {
12
+ const s1 = z.string().refine(async (_val) => true);
13
+ const r1 = await s1.parseAsync("asdf");
14
+ expect(r1).toEqual("asdf");
15
+
16
+ const s2 = z.string().refine(async (_val) => false);
17
+ const r2 = await s2.safeParseAsync("asdf");
18
+ expect(r2.success).toBe(false);
19
+ expect(r2).toMatchInlineSnapshot(`
20
+ {
21
+ "error": [ZodError: [
22
+ {
23
+ "code": "custom",
24
+ "path": [],
25
+ "message": "Invalid input"
26
+ }
27
+ ]],
28
+ "success": false,
29
+ }
30
+ `);
31
+ });
32
+
33
+ test("async refine with Promises", async () => {
34
+ // expect.assertions(2);
35
+
36
+ const schema1 = z.string().refine((_val) => Promise.resolve(true));
37
+ const v1 = await schema1.parseAsync("asdf");
38
+ expect(v1).toEqual("asdf");
39
+
40
+ const schema2 = z.string().refine((_val) => Promise.resolve(false));
41
+ await expect(schema2.parseAsync("asdf")).rejects.toBeDefined();
42
+
43
+ const schema3 = z.string().refine((_val) => Promise.resolve(true));
44
+ await expect(schema3.parseAsync("asdf")).resolves.toEqual("asdf");
45
+ return await expect(schema3.parseAsync("qwer")).resolves.toEqual("qwer");
46
+ });
47
+
48
+ test("async refine that uses value", async () => {
49
+ const schema1 = z.string().refine(async (val) => {
50
+ return val.length > 5;
51
+ });
52
+
53
+ const r1 = await schema1.safeParseAsync("asdf");
54
+ expect(r1.success).toBe(false);
55
+ expect(r1.error).toMatchInlineSnapshot(`
56
+ [ZodError: [
57
+ {
58
+ "code": "custom",
59
+ "path": [],
60
+ "message": "Invalid input"
61
+ }
62
+ ]]
63
+ `);
64
+
65
+ const r2 = await schema1.safeParseAsync("asdf123");
66
+ expect(r2.success).toBe(true);
67
+ expect(r2.data).toEqual("asdf123");
68
+ });
@@ -0,0 +1,7 @@
1
+ import { expect, test } from "vitest";
2
+ import * as z from "zod/v4";
3
+
4
+ test("test this binding", () => {
5
+ const parse = z.string().parse;
6
+ expect(parse("asdf")).toBe("asdf");
7
+ });
@@ -0,0 +1,54 @@
1
+ import { expect, test } from "vitest";
2
+
3
+ import * as z from "zod/v4";
4
+
5
+ const gtFive = z.bigint().gt(BigInt(5));
6
+ const gteFive = z.bigint().gte(BigInt(5));
7
+ const ltFive = z.bigint().lt(BigInt(5));
8
+ const lteFive = z.bigint().lte(BigInt(5));
9
+ const positive = z.bigint().positive();
10
+ const negative = z.bigint().negative();
11
+ const nonnegative = z.bigint().nonnegative();
12
+ const nonpositive = z.bigint().nonpositive();
13
+ const multipleOfFive = z.bigint().multipleOf(BigInt(5));
14
+
15
+ test("passing validations", () => {
16
+ z.bigint().parse(BigInt(1));
17
+ z.bigint().parse(BigInt(0));
18
+ z.bigint().parse(BigInt(-1));
19
+ gtFive.parse(BigInt(6));
20
+ gteFive.parse(BigInt(5));
21
+ gteFive.parse(BigInt(6));
22
+ ltFive.parse(BigInt(4));
23
+ lteFive.parse(BigInt(5));
24
+ lteFive.parse(BigInt(4));
25
+ positive.parse(BigInt(3));
26
+ negative.parse(BigInt(-2));
27
+ nonnegative.parse(BigInt(0));
28
+ nonnegative.parse(BigInt(7));
29
+ nonpositive.parse(BigInt(0));
30
+ nonpositive.parse(BigInt(-12));
31
+ multipleOfFive.parse(BigInt(15));
32
+ });
33
+
34
+ test("failing validations", () => {
35
+ expect(() => gtFive.parse(BigInt(5))).toThrow();
36
+ expect(() => gteFive.parse(BigInt(4))).toThrow();
37
+ expect(() => ltFive.parse(BigInt(5))).toThrow();
38
+ expect(() => lteFive.parse(BigInt(6))).toThrow();
39
+ expect(() => positive.parse(BigInt(0))).toThrow();
40
+ expect(() => positive.parse(BigInt(-2))).toThrow();
41
+ expect(() => negative.parse(BigInt(0))).toThrow();
42
+ expect(() => negative.parse(BigInt(3))).toThrow();
43
+ expect(() => nonnegative.parse(BigInt(-1))).toThrow();
44
+ expect(() => nonpositive.parse(BigInt(1))).toThrow();
45
+ expect(() => multipleOfFive.parse(BigInt(13))).toThrow();
46
+ });
47
+
48
+ test("min max getters", () => {
49
+ expect(z.bigint().min(BigInt(5)).minValue).toEqual(BigInt(5));
50
+ expect(z.bigint().min(BigInt(5)).min(BigInt(10)).minValue).toEqual(BigInt(10));
51
+
52
+ expect(z.bigint().max(BigInt(5)).maxValue).toEqual(BigInt(5));
53
+ expect(z.bigint().max(BigInt(5)).max(BigInt(1)).maxValue).toEqual(BigInt(1));
54
+ });
@@ -0,0 +1,63 @@
1
+ import { expectTypeOf, test } from "vitest";
2
+ import * as z from "zod/v4";
3
+
4
+ test("branded types", () => {
5
+ const mySchema = z
6
+ .object({
7
+ name: z.string(),
8
+ })
9
+ .brand<"superschema">();
10
+
11
+ // simple branding
12
+ type MySchema = z.infer<typeof mySchema>;
13
+
14
+ expectTypeOf<MySchema>().toEqualTypeOf<{ name: string } & z.$brand<"superschema">>();
15
+
16
+ const doStuff = (arg: MySchema) => arg;
17
+ doStuff(mySchema.parse({ name: "hello there" }));
18
+
19
+ // inheritance
20
+ const extendedSchema = mySchema.brand<"subschema">();
21
+ type ExtendedSchema = z.infer<typeof extendedSchema>;
22
+ expectTypeOf<ExtendedSchema>().toEqualTypeOf<{ name: string } & z.BRAND<"superschema"> & z.BRAND<"subschema">>();
23
+
24
+ doStuff(extendedSchema.parse({ name: "hello again" }));
25
+
26
+ // number branding
27
+ const numberSchema = z.number().brand<42>();
28
+ type NumberSchema = z.infer<typeof numberSchema>;
29
+ expectTypeOf<NumberSchema>().toEqualTypeOf<number & { [z.$brand]: { 42: true } }>();
30
+
31
+ // symbol branding
32
+ const MyBrand: unique symbol = Symbol("hello");
33
+ type MyBrand = typeof MyBrand;
34
+ const symbolBrand = z.number().brand<"sup">().brand<typeof MyBrand>();
35
+ type SymbolBrand = z.infer<typeof symbolBrand>;
36
+ // number & { [z.BRAND]: { sup: true, [MyBrand]: true } }
37
+ expectTypeOf<SymbolBrand>().toEqualTypeOf<number & z.BRAND<"sup"> & z.BRAND<MyBrand>>();
38
+
39
+ // keeping brands out of input types
40
+ const age = z.number().brand<"age">();
41
+
42
+ type Age = z.infer<typeof age>;
43
+ type AgeInput = z.input<typeof age>;
44
+
45
+ expectTypeOf<AgeInput>().not.toEqualTypeOf<Age>();
46
+ expectTypeOf<number>().toEqualTypeOf<AgeInput>();
47
+ expectTypeOf<number & z.BRAND<"age">>().toEqualTypeOf<Age>();
48
+
49
+ // @ts-expect-error
50
+ doStuff({ name: "hello there!" });
51
+ });
52
+
53
+ test("$branded", () => {
54
+ const a = z.string().brand<"a">();
55
+
56
+ expectTypeOf<typeof a>().toEqualTypeOf<z.core.$ZodBranded<z.ZodString, "a">>();
57
+ });
58
+
59
+ test("branded record", () => {
60
+ const recordWithBrandedNumberKeys = z.record(z.string().brand("SomeBrand"), z.number());
61
+ type recordWithBrandedNumberKeys = z.infer<typeof recordWithBrandedNumberKeys>;
62
+ expectTypeOf<recordWithBrandedNumberKeys>().toEqualTypeOf<Record<string & z.core.$brand<"SomeBrand">, number>>();
63
+ });