cross-seed 7.0.0-21 → 7.0.0-23

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 (785) hide show
  1. package/dist/action.js +7 -8
  2. package/dist/action.js.map +1 -1
  3. package/dist/arr.js +2 -2
  4. package/dist/arr.js.map +1 -1
  5. package/dist/bencode.d.ts +62 -0
  6. package/dist/bencode.js +248 -0
  7. package/dist/bencode.js.map +1 -0
  8. package/dist/clients/Deluge.d.ts +5 -10
  9. package/dist/clients/Deluge.js +115 -89
  10. package/dist/clients/Deluge.js.map +1 -1
  11. package/dist/clients/QBittorrent.d.ts +3 -0
  12. package/dist/clients/QBittorrent.js +43 -30
  13. package/dist/clients/QBittorrent.js.map +1 -1
  14. package/dist/clients/RTorrent.d.ts +3 -2
  15. package/dist/clients/RTorrent.js +120 -41
  16. package/dist/clients/RTorrent.js.map +1 -1
  17. package/dist/clients/TorrentClient.d.ts +3 -2
  18. package/dist/clients/TorrentClient.js +3 -5
  19. package/dist/clients/TorrentClient.js.map +1 -1
  20. package/dist/clients/Transmission.d.ts +1 -0
  21. package/dist/clients/Transmission.js +90 -40
  22. package/dist/clients/Transmission.js.map +1 -1
  23. package/dist/clients/qbittorrent-version.d.ts +6 -0
  24. package/dist/clients/qbittorrent-version.js +11 -0
  25. package/dist/clients/qbittorrent-version.js.map +1 -0
  26. package/dist/clients/scgi.d.ts +14 -0
  27. package/dist/clients/scgi.js +111 -0
  28. package/dist/clients/scgi.js.map +1 -0
  29. package/dist/cmd.js +1 -1
  30. package/dist/cmd.js.map +1 -1
  31. package/dist/configuration.js +49 -9
  32. package/dist/configuration.js.map +1 -1
  33. package/dist/constants.d.ts +10 -0
  34. package/dist/constants.js +12 -2
  35. package/dist/constants.js.map +1 -1
  36. package/dist/dataFiles.d.ts +1 -0
  37. package/dist/dataFiles.js +252 -60
  38. package/dist/dataFiles.js.map +1 -1
  39. package/dist/db.js +8 -4
  40. package/dist/db.js.map +1 -1
  41. package/dist/decide.js +8 -8
  42. package/dist/decide.js.map +1 -1
  43. package/dist/devLogin.js.map +1 -1
  44. package/dist/diff.js.map +1 -1
  45. package/dist/indexers.js +5 -4
  46. package/dist/indexers.js.map +1 -1
  47. package/dist/inject.js +5 -5
  48. package/dist/inject.js.map +1 -1
  49. package/dist/jobs.js +2 -1
  50. package/dist/jobs.js.map +1 -1
  51. package/dist/libraryInventory.d.ts +176 -0
  52. package/dist/libraryInventory.js +701 -0
  53. package/dist/libraryInventory.js.map +1 -0
  54. package/dist/logger.js +7 -5
  55. package/dist/logger.js.map +1 -1
  56. package/dist/migrations/09-clientAndDataSearchees.js +1 -0
  57. package/dist/migrations/09-clientAndDataSearchees.js.map +1 -1
  58. package/dist/migrations/17-api-key-settings-json.js +3 -1
  59. package/dist/migrations/17-api-key-settings-json.js.map +1 -1
  60. package/dist/migrations/18-library-inventory.d.ts +9 -0
  61. package/dist/migrations/18-library-inventory.js +48 -0
  62. package/dist/migrations/18-library-inventory.js.map +1 -0
  63. package/dist/migrations/19-library-files.d.ts +9 -0
  64. package/dist/migrations/19-library-files.js +26 -0
  65. package/dist/migrations/19-library-files.js.map +1 -0
  66. package/dist/migrations/migrations.d.ts +12 -5
  67. package/dist/migrations/migrations.js +5 -1
  68. package/dist/migrations/migrations.js.map +1 -1
  69. package/dist/parseTorrent.d.ts +1 -1
  70. package/dist/parseTorrent.js +18 -4
  71. package/dist/parseTorrent.js.map +1 -1
  72. package/dist/pipeline.js +12 -11
  73. package/dist/pipeline.js.map +1 -1
  74. package/dist/problems/linking.js +1 -1
  75. package/dist/problems/linking.js.map +1 -1
  76. package/dist/problems.js +2 -1
  77. package/dist/problems.js.map +1 -1
  78. package/dist/pushNotifier.js +10 -9
  79. package/dist/pushNotifier.js.map +1 -1
  80. package/dist/routes/baseApi.d.ts +8 -0
  81. package/dist/routes/baseApi.js +26 -52
  82. package/dist/routes/baseApi.js.map +1 -1
  83. package/dist/routes/devLogin.js +1 -0
  84. package/dist/routes/devLogin.js.map +1 -1
  85. package/dist/routes/indexerApi.js +1 -0
  86. package/dist/routes/indexerApi.js.map +1 -1
  87. package/dist/routes/staticFrontendPlugin.js +1 -0
  88. package/dist/routes/staticFrontendPlugin.js.map +1 -1
  89. package/dist/searchee.d.ts +14 -2
  90. package/dist/searchee.js +26 -9
  91. package/dist/searchee.js.map +1 -1
  92. package/dist/services/indexerService.js +8 -2
  93. package/dist/services/indexerService.js.map +1 -1
  94. package/dist/startup.d.ts +1 -0
  95. package/dist/startup.js +11 -4
  96. package/dist/startup.js.map +1 -1
  97. package/dist/torrent.js +302 -115
  98. package/dist/torrent.js.map +1 -1
  99. package/dist/torznab.d.ts +2 -2
  100. package/dist/torznab.js +15 -14
  101. package/dist/torznab.js.map +1 -1
  102. package/dist/trpc/routers/auth.js +1 -1
  103. package/dist/trpc/routers/auth.js.map +1 -1
  104. package/dist/trpc/routers/clients.js +8 -13
  105. package/dist/trpc/routers/clients.js.map +1 -1
  106. package/dist/trpc/routers/index.d.ts +51 -50
  107. package/dist/trpc/routers/index.js +2 -2
  108. package/dist/trpc/routers/index.js.map +1 -1
  109. package/dist/trpc/routers/jobs.js +1 -1
  110. package/dist/trpc/routers/jobs.js.map +1 -1
  111. package/dist/trpc/routers/library.d.ts +50 -0
  112. package/dist/trpc/routers/library.js +85 -0
  113. package/dist/trpc/routers/library.js.map +1 -0
  114. package/dist/trpc/routers/logs.js +6 -5
  115. package/dist/trpc/routers/logs.js.map +1 -1
  116. package/dist/trpc/routers/settings.js +78 -21
  117. package/dist/trpc/routers/settings.js.map +1 -1
  118. package/dist/trpc/routers/stats.d.ts +1 -0
  119. package/dist/trpc/routers/stats.js +11 -5
  120. package/dist/trpc/routers/stats.js.map +1 -1
  121. package/dist/userAuth.js +1 -1
  122. package/dist/userAuth.js.map +1 -1
  123. package/dist/utils/background.d.ts +7 -0
  124. package/dist/utils/background.js +14 -0
  125. package/dist/utils/background.js.map +1 -0
  126. package/dist/utils/logWatcher.js +3 -2
  127. package/dist/utils/logWatcher.js.map +1 -1
  128. package/dist/utils.d.ts +11 -1
  129. package/dist/utils.js +47 -8
  130. package/dist/utils.js.map +1 -1
  131. package/dist/webui/assets/DeleteOption-DkdJCiOu.js +1 -0
  132. package/dist/webui/assets/FieldInfo-rcCXc0d-.js +1 -0
  133. package/dist/webui/assets/Page-CKwSnUie.js +1 -0
  134. package/dist/webui/assets/array-field-DM2mAVqa.js +1 -0
  135. package/dist/webui/assets/badge-CLUazitN.js +1 -0
  136. package/dist/webui/assets/button-DoKPR9Fv.js +1 -0
  137. package/dist/webui/assets/check-BlfHpqkp.js +1 -0
  138. package/dist/webui/assets/clients-B5C80D0F.js +1 -0
  139. package/dist/webui/assets/connect-BM7yGLAl.js +2 -0
  140. package/dist/webui/assets/createLucideIcon-Cv-_CLkr.js +1 -0
  141. package/dist/webui/assets/debug-C8d57uIb.js +1 -0
  142. package/dist/webui/assets/directories-DkJnb01t.js +1 -0
  143. package/dist/webui/assets/dist-B7BqKb_s.js +1 -0
  144. package/dist/webui/assets/dist-CXZZv-cf.js +41 -0
  145. package/dist/webui/assets/dist-ChMQZgJB.js +1 -0
  146. package/dist/webui/assets/dist-DQ6Xm99Z.js +1 -0
  147. package/dist/webui/assets/duration-field-w-qiOS_S.js +1 -0
  148. package/dist/webui/assets/general-2HmkyF5T.js +1 -0
  149. package/dist/webui/assets/health-D6tv4ioy.js +1 -0
  150. package/dist/webui/assets/index-NlorOk2I.js +11 -0
  151. package/dist/webui/assets/index-UQKt4Igp.css +2 -0
  152. package/dist/webui/assets/input-BggK3IOz.js +1 -0
  153. package/dist/webui/assets/jobs-Do8vAIqy.js +1 -0
  154. package/dist/webui/assets/library-B1r1nAY-.js +1 -0
  155. package/dist/webui/assets/loader-circle-D988WNxu.js +1 -0
  156. package/dist/webui/assets/logs-_rm8bxf-.js +1 -0
  157. package/dist/webui/assets/number-field-CeKyqI7R.js +1 -0
  158. package/dist/webui/assets/react-dom-DtIef6y6.js +1 -0
  159. package/dist/webui/assets/required-indicator-Ba9NOQEP.js +1 -0
  160. package/dist/webui/assets/routes-Djgf7dZI.js +1 -0
  161. package/dist/webui/assets/search-DGY0ui92.js +1 -0
  162. package/dist/webui/assets/select-BzZ418Yt.js +1 -0
  163. package/dist/webui/assets/select-field-DsBowTDT.js +1 -0
  164. package/dist/webui/assets/settings-B4G8vHXc.js +1 -0
  165. package/dist/webui/assets/sidebar-Qy-rYdhU.js +5 -0
  166. package/dist/webui/assets/submit-button-Bx2Dvr03.js +1 -0
  167. package/dist/webui/assets/switch-CttdmVGp.js +1 -0
  168. package/dist/webui/assets/switch-field-p-JPVVvW.js +1 -0
  169. package/dist/webui/assets/table-Bs6CQscS.js +1 -0
  170. package/dist/webui/assets/{test-tube-CbcievIk.js → test-tube-DD9Yz2bZ.js} +1 -1
  171. package/dist/webui/assets/text-field-B0a3dEGb.js +1 -0
  172. package/dist/webui/assets/time-KFQKyrl-.js +1 -0
  173. package/dist/webui/assets/trackers-DG-YCaaO.js +7 -0
  174. package/dist/webui/assets/{trash-D083IWKI.js → trash-PHXIGUCt.js} +1 -1
  175. package/dist/webui/assets/use-settings-form-submit-CDmMUcwW.js +57 -0
  176. package/dist/webui/assets/useSelector-BoN-mufS.js +2 -0
  177. package/dist/webui/assets/utils-P-unlvb4.js +1 -0
  178. package/dist/webui/assets/with-selector-fbK2t2oY.js +1 -0
  179. package/dist/webui/index.html +12 -14
  180. package/node_modules/@cross-seed/shared/dist/tsconfig.tsbuildinfo +1 -1
  181. package/node_modules/@cross-seed/shared/package.json +6 -2
  182. package/node_modules/zod/README.md +30 -20
  183. package/node_modules/zod/compile.cjs +96 -0
  184. package/node_modules/zod/compile.d.cts +1 -0
  185. package/node_modules/zod/compile.d.ts +1 -0
  186. package/node_modules/zod/compile.js +52 -0
  187. package/node_modules/zod/index.cjs +21 -2
  188. package/node_modules/zod/index.d.cts +1 -2
  189. package/node_modules/zod/index.d.ts +1 -2
  190. package/node_modules/zod/index.js +5 -2
  191. package/node_modules/zod/locales/index.cjs +19 -0
  192. package/node_modules/zod/locales/package.json +2 -1
  193. package/node_modules/zod/mini/index.cjs +19 -0
  194. package/node_modules/zod/mini/package.json +2 -1
  195. package/node_modules/zod/package.json +20 -8
  196. package/node_modules/zod/src/compile.ts +56 -0
  197. package/node_modules/zod/src/index.ts +5 -2
  198. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  199. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  200. package/node_modules/zod/src/v3/tests/all-errors.test.ts +3 -3
  201. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  202. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  203. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  204. package/node_modules/zod/src/v3/tests/object.test.ts +8 -11
  205. package/node_modules/zod/src/v3/tests/partials.test.ts +3 -3
  206. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  207. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  208. package/node_modules/zod/src/v3/types.ts +5 -5
  209. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  210. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  211. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  212. package/node_modules/zod/src/v4/classic/errors.ts +60 -45
  213. package/node_modules/zod/src/v4/classic/external.ts +15 -9
  214. package/node_modules/zod/src/v4/classic/from-json-schema.ts +389 -88
  215. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  216. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  217. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  218. package/node_modules/zod/src/v4/classic/parse.ts +16 -10
  219. package/node_modules/zod/src/v4/classic/schemas.ts +863 -335
  220. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  221. package/node_modules/zod/src/v4/classic/tests/array.test.ts +29 -2
  222. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +192 -0
  223. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  224. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +328 -0
  225. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  226. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +144 -2
  227. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +4 -4
  228. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  229. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  230. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  231. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +31 -17
  232. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  233. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  234. package/node_modules/zod/src/v4/classic/tests/default.test.ts +90 -0
  235. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +221 -0
  236. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +291 -10
  237. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  238. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +324 -2
  239. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  240. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +743 -10
  241. package/node_modules/zod/src/v4/classic/tests/function.test.ts +37 -6
  242. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +32 -0
  243. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  244. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  245. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  246. package/node_modules/zod/src/v4/classic/tests/index.test.ts +23 -4
  247. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  248. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  249. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  250. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  251. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +39 -0
  252. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  253. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  254. package/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
  255. package/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
  256. package/node_modules/zod/src/v4/classic/tests/map.test.ts +19 -0
  257. package/node_modules/zod/src/v4/classic/tests/number.test.ts +138 -7
  258. package/node_modules/zod/src/v4/classic/tests/object.test.ts +378 -12
  259. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  260. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +156 -13
  261. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +71 -1
  262. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +71 -1
  263. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +44 -0
  264. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +69 -0
  265. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  266. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  267. package/node_modules/zod/src/v4/classic/tests/record.test.ts +269 -16
  268. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +126 -1
  269. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  270. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +123 -0
  271. package/node_modules/zod/src/v4/classic/tests/set.test.ts +15 -0
  272. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  273. package/node_modules/zod/src/v4/classic/tests/string.test.ts +269 -4
  274. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  275. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +48 -7
  276. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1948 -205
  277. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +17 -0
  278. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +330 -2
  279. package/node_modules/zod/src/v4/classic/tests/union.test.ts +93 -2
  280. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  281. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  282. package/node_modules/zod/src/v4/core/api.ts +111 -34
  283. package/node_modules/zod/src/v4/core/checks.ts +120 -147
  284. package/node_modules/zod/src/v4/core/compile.ts +2322 -0
  285. package/node_modules/zod/src/v4/core/core.ts +116 -24
  286. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  287. package/node_modules/zod/src/v4/core/errors.ts +138 -43
  288. package/node_modules/zod/src/v4/core/index.ts +3 -0
  289. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  290. package/node_modules/zod/src/v4/core/json-schema-processors.ts +440 -173
  291. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  292. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  293. package/node_modules/zod/src/v4/core/parse.ts +167 -53
  294. package/node_modules/zod/src/v4/core/regexes.ts +50 -16
  295. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  296. package/node_modules/zod/src/v4/core/schemas.ts +1219 -531
  297. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  298. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  299. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  300. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  301. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  302. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  303. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  304. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  305. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +214 -0
  306. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  307. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
  308. package/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
  309. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  310. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  311. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  312. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +22 -0
  313. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  314. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +58 -0
  315. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  316. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  317. package/node_modules/zod/src/v4/core/to-json-schema.ts +288 -44
  318. package/node_modules/zod/src/v4/core/util.ts +506 -179
  319. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  320. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  321. package/node_modules/zod/src/v4/index.ts +3 -3
  322. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  323. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  324. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  325. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  326. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  327. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  328. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  329. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  330. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  331. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  332. package/node_modules/zod/src/v4/locales/el.ts +124 -0
  333. package/node_modules/zod/src/v4/locales/en.ts +21 -4
  334. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  335. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  336. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  337. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  338. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  339. package/node_modules/zod/src/v4/locales/fr.ts +41 -18
  340. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  341. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  342. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  343. package/node_modules/zod/src/v4/locales/hr.ts +135 -0
  344. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  345. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  346. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  347. package/node_modules/zod/src/v4/locales/index.ts +14 -0
  348. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  349. package/node_modules/zod/src/v4/locales/it.ts +6 -1
  350. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  351. package/node_modules/zod/src/v4/locales/ka.ts +13 -8
  352. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  353. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  354. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  355. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  356. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  357. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  358. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  359. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  360. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  361. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  362. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  363. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  364. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  365. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  366. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  367. package/node_modules/zod/src/v4/locales/ro.ts +132 -0
  368. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  369. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  370. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  371. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  372. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  373. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  374. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  375. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  376. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  377. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  378. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  379. package/node_modules/zod/src/v4/locales/uz.ts +4 -0
  380. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  381. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  382. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  383. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  384. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  385. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  386. package/node_modules/zod/src/v4/mini/external.ts +13 -1
  387. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  388. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  389. package/node_modules/zod/src/v4/mini/schemas.ts +214 -79
  390. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  391. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  392. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  393. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +54 -1
  394. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  395. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  396. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  397. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  398. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  399. package/node_modules/zod/src/v4/mini/tests/index.test.ts +187 -4
  400. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  401. package/node_modules/zod/src/v4/mini/tests/object.test.ts +74 -9
  402. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +67 -1
  403. package/node_modules/zod/src/v4/mini/tests/string.test.ts +49 -0
  404. package/node_modules/zod/v3/ZodError.cjs +41 -12
  405. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  406. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  407. package/node_modules/zod/v3/ZodError.js +22 -12
  408. package/node_modules/zod/v3/errors.cjs +19 -0
  409. package/node_modules/zod/v3/external.cjs +19 -0
  410. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  411. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  412. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  413. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  414. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  415. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  416. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  417. package/node_modules/zod/v3/index.cjs +19 -0
  418. package/node_modules/zod/v3/package.json +2 -1
  419. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  420. package/node_modules/zod/v3/types.cjs +26 -5
  421. package/node_modules/zod/v3/types.js +7 -5
  422. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  423. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  424. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  425. package/node_modules/zod/v4/classic/checks.js +1 -1
  426. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  427. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  428. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  429. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  430. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  431. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  432. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  433. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  434. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  435. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  436. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  437. package/node_modules/zod/v4/classic/errors.js +44 -35
  438. package/node_modules/zod/v4/classic/external.cjs +51 -27
  439. package/node_modules/zod/v4/classic/external.d.cts +6 -2
  440. package/node_modules/zod/v4/classic/external.d.ts +6 -2
  441. package/node_modules/zod/v4/classic/external.js +5 -8
  442. package/node_modules/zod/v4/classic/from-json-schema.cjs +394 -78
  443. package/node_modules/zod/v4/classic/from-json-schema.js +375 -78
  444. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  445. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  446. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  447. package/node_modules/zod/v4/classic/in-out.js +36 -0
  448. package/node_modules/zod/v4/classic/index.cjs +21 -2
  449. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  450. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  451. package/node_modules/zod/v4/classic/index.js +2 -2
  452. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  453. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  454. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  455. package/node_modules/zod/v4/classic/iso.js +2 -17
  456. package/node_modules/zod/v4/classic/package.json +2 -1
  457. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  458. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  459. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  460. package/node_modules/zod/v4/classic/parse.js +1 -0
  461. package/node_modules/zod/v4/classic/schemas.cjs +629 -225
  462. package/node_modules/zod/v4/classic/schemas.d.cts +104 -27
  463. package/node_modules/zod/v4/classic/schemas.d.ts +104 -27
  464. package/node_modules/zod/v4/classic/schemas.js +601 -223
  465. package/node_modules/zod/v4/core/api.cjs +73 -26
  466. package/node_modules/zod/v4/core/api.d.cts +40 -9
  467. package/node_modules/zod/v4/core/api.d.ts +40 -9
  468. package/node_modules/zod/v4/core/api.js +51 -26
  469. package/node_modules/zod/v4/core/checks.cjs +88 -128
  470. package/node_modules/zod/v4/core/checks.d.cts +30 -14
  471. package/node_modules/zod/v4/core/checks.d.ts +30 -14
  472. package/node_modules/zod/v4/core/checks.js +68 -127
  473. package/node_modules/zod/v4/core/compile.cjs +1916 -0
  474. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  475. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  476. package/node_modules/zod/v4/core/compile.js +1866 -0
  477. package/node_modules/zod/v4/core/core.cjs +104 -20
  478. package/node_modules/zod/v4/core/core.d.cts +16 -4
  479. package/node_modules/zod/v4/core/core.d.ts +16 -4
  480. package/node_modules/zod/v4/core/core.js +87 -22
  481. package/node_modules/zod/v4/core/doc.cjs +31 -9
  482. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  483. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  484. package/node_modules/zod/v4/core/doc.js +12 -9
  485. package/node_modules/zod/v4/core/errors.cjs +146 -42
  486. package/node_modules/zod/v4/core/errors.d.cts +5 -0
  487. package/node_modules/zod/v4/core/errors.d.ts +5 -0
  488. package/node_modules/zod/v4/core/errors.js +127 -42
  489. package/node_modules/zod/v4/core/index.cjs +24 -1
  490. package/node_modules/zod/v4/core/index.d.cts +3 -0
  491. package/node_modules/zod/v4/core/index.d.ts +3 -0
  492. package/node_modules/zod/v4/core/index.js +3 -0
  493. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  494. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  495. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  496. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  497. package/node_modules/zod/v4/core/json-schema-processors.cjs +454 -173
  498. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  499. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  500. package/node_modules/zod/v4/core/json-schema-processors.js +413 -175
  501. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  502. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  503. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  504. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  505. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  506. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  507. package/node_modules/zod/v4/core/memoizer.js +311 -0
  508. package/node_modules/zod/v4/core/package.json +2 -1
  509. package/node_modules/zod/v4/core/parse.cjs +151 -49
  510. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  511. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  512. package/node_modules/zod/v4/core/parse.js +130 -48
  513. package/node_modules/zod/v4/core/regexes.cjs +61 -18
  514. package/node_modules/zod/v4/core/regexes.d.cts +11 -0
  515. package/node_modules/zod/v4/core/regexes.d.ts +11 -0
  516. package/node_modules/zod/v4/core/regexes.js +39 -16
  517. package/node_modules/zod/v4/core/registries.cjs +19 -0
  518. package/node_modules/zod/v4/core/registries.js +2 -2
  519. package/node_modules/zod/v4/core/schemas.cjs +957 -382
  520. package/node_modules/zod/v4/core/schemas.d.cts +154 -25
  521. package/node_modules/zod/v4/core/schemas.d.ts +154 -25
  522. package/node_modules/zod/v4/core/schemas.js +925 -382
  523. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  524. package/node_modules/zod/v4/core/to-json-schema.cjs +275 -40
  525. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  526. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  527. package/node_modules/zod/v4/core/to-json-schema.js +253 -39
  528. package/node_modules/zod/v4/core/util.cjs +428 -174
  529. package/node_modules/zod/v4/core/util.d.cts +82 -1
  530. package/node_modules/zod/v4/core/util.d.ts +82 -1
  531. package/node_modules/zod/v4/core/util.js +397 -175
  532. package/node_modules/zod/v4/core/versions.cjs +21 -2
  533. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  534. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  535. package/node_modules/zod/v4/core/versions.js +2 -2
  536. package/node_modules/zod/v4/core/visit.cjs +214 -0
  537. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  538. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  539. package/node_modules/zod/v4/core/visit.js +169 -0
  540. package/node_modules/zod/v4/index.cjs +34 -5
  541. package/node_modules/zod/v4/index.d.cts +2 -2
  542. package/node_modules/zod/v4/index.d.ts +2 -2
  543. package/node_modules/zod/v4/index.js +3 -2
  544. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  545. package/node_modules/zod/v4/locales/ar.js +5 -0
  546. package/node_modules/zod/v4/locales/az.cjs +5 -0
  547. package/node_modules/zod/v4/locales/az.js +5 -0
  548. package/node_modules/zod/v4/locales/be.cjs +12 -0
  549. package/node_modules/zod/v4/locales/be.js +12 -0
  550. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  551. package/node_modules/zod/v4/locales/bg.js +5 -0
  552. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  553. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  554. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  555. package/node_modules/zod/v4/locales/bn.js +113 -0
  556. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  557. package/node_modules/zod/v4/locales/ca.js +5 -0
  558. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  559. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  560. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  561. package/node_modules/zod/v4/locales/ckb.js +133 -0
  562. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  563. package/node_modules/zod/v4/locales/cs.js +5 -0
  564. package/node_modules/zod/v4/locales/da.cjs +7 -2
  565. package/node_modules/zod/v4/locales/da.js +7 -2
  566. package/node_modules/zod/v4/locales/de.cjs +5 -0
  567. package/node_modules/zod/v4/locales/de.js +5 -0
  568. package/node_modules/zod/v4/locales/el.cjs +139 -0
  569. package/node_modules/zod/v4/locales/el.d.cts +5 -0
  570. package/node_modules/zod/v4/locales/el.d.ts +4 -0
  571. package/node_modules/zod/v4/locales/el.js +112 -0
  572. package/node_modules/zod/v4/locales/en.cjs +20 -4
  573. package/node_modules/zod/v4/locales/en.js +20 -4
  574. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  575. package/node_modules/zod/v4/locales/eo.js +5 -0
  576. package/node_modules/zod/v4/locales/es.cjs +4 -0
  577. package/node_modules/zod/v4/locales/es.js +4 -0
  578. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  579. package/node_modules/zod/v4/locales/fa.js +5 -0
  580. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  581. package/node_modules/zod/v4/locales/fi.js +5 -0
  582. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  583. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  584. package/node_modules/zod/v4/locales/fr.cjs +38 -17
  585. package/node_modules/zod/v4/locales/fr.js +38 -17
  586. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  587. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  588. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  589. package/node_modules/zod/v4/locales/gu.js +113 -0
  590. package/node_modules/zod/v4/locales/he.cjs +7 -0
  591. package/node_modules/zod/v4/locales/he.js +7 -0
  592. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  593. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  594. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  595. package/node_modules/zod/v4/locales/hi.js +111 -0
  596. package/node_modules/zod/v4/locales/hr.cjs +153 -0
  597. package/node_modules/zod/v4/locales/hr.d.cts +5 -0
  598. package/node_modules/zod/v4/locales/hr.d.ts +4 -0
  599. package/node_modules/zod/v4/locales/hr.js +126 -0
  600. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  601. package/node_modules/zod/v4/locales/hu.js +5 -0
  602. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  603. package/node_modules/zod/v4/locales/hy.js +11 -0
  604. package/node_modules/zod/v4/locales/id.cjs +5 -0
  605. package/node_modules/zod/v4/locales/id.js +5 -0
  606. package/node_modules/zod/v4/locales/index.cjs +49 -1
  607. package/node_modules/zod/v4/locales/index.d.cts +14 -0
  608. package/node_modules/zod/v4/locales/index.d.ts +14 -0
  609. package/node_modules/zod/v4/locales/index.js +14 -0
  610. package/node_modules/zod/v4/locales/is.cjs +5 -0
  611. package/node_modules/zod/v4/locales/is.js +5 -0
  612. package/node_modules/zod/v4/locales/it.cjs +6 -1
  613. package/node_modules/zod/v4/locales/it.js +6 -1
  614. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  615. package/node_modules/zod/v4/locales/ja.js +5 -0
  616. package/node_modules/zod/v4/locales/ka.cjs +13 -8
  617. package/node_modules/zod/v4/locales/ka.js +13 -8
  618. package/node_modules/zod/v4/locales/km.cjs +5 -0
  619. package/node_modules/zod/v4/locales/km.js +5 -0
  620. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  621. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  622. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  623. package/node_modules/zod/v4/locales/kn.js +116 -0
  624. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  625. package/node_modules/zod/v4/locales/ko.js +5 -0
  626. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  627. package/node_modules/zod/v4/locales/lt.js +4 -0
  628. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  629. package/node_modules/zod/v4/locales/mk.js +5 -0
  630. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  631. package/node_modules/zod/v4/locales/ms.js +5 -0
  632. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  633. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  634. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  635. package/node_modules/zod/v4/locales/ne.js +111 -0
  636. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  637. package/node_modules/zod/v4/locales/nl.js +5 -0
  638. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  639. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  640. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  641. package/node_modules/zod/v4/locales/nn.js +113 -0
  642. package/node_modules/zod/v4/locales/no.cjs +7 -2
  643. package/node_modules/zod/v4/locales/no.js +7 -2
  644. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  645. package/node_modules/zod/v4/locales/ota.js +5 -0
  646. package/node_modules/zod/v4/locales/package.json +2 -1
  647. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  648. package/node_modules/zod/v4/locales/pl.js +5 -0
  649. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  650. package/node_modules/zod/v4/locales/ps.js +5 -0
  651. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  652. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  653. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  654. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  655. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  656. package/node_modules/zod/v4/locales/pt.js +89 -55
  657. package/node_modules/zod/v4/locales/ro.cjs +149 -0
  658. package/node_modules/zod/v4/locales/ro.d.cts +5 -0
  659. package/node_modules/zod/v4/locales/ro.d.ts +4 -0
  660. package/node_modules/zod/v4/locales/ro.js +122 -0
  661. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  662. package/node_modules/zod/v4/locales/ru.js +12 -0
  663. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  664. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  665. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  666. package/node_modules/zod/v4/locales/sk.js +116 -0
  667. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  668. package/node_modules/zod/v4/locales/sl.js +5 -0
  669. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  670. package/node_modules/zod/v4/locales/sv.js +7 -2
  671. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  672. package/node_modules/zod/v4/locales/ta.js +5 -0
  673. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  674. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  675. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  676. package/node_modules/zod/v4/locales/tg.js +117 -0
  677. package/node_modules/zod/v4/locales/th.cjs +5 -0
  678. package/node_modules/zod/v4/locales/th.js +5 -0
  679. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  680. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  681. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  682. package/node_modules/zod/v4/locales/tk.js +107 -0
  683. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  684. package/node_modules/zod/v4/locales/tr.js +5 -0
  685. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  686. package/node_modules/zod/v4/locales/uk.js +5 -0
  687. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  688. package/node_modules/zod/v4/locales/ur.js +5 -0
  689. package/node_modules/zod/v4/locales/uz.cjs +4 -0
  690. package/node_modules/zod/v4/locales/uz.js +4 -0
  691. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  692. package/node_modules/zod/v4/locales/vi.js +5 -0
  693. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  694. package/node_modules/zod/v4/locales/yo.js +5 -0
  695. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  696. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  697. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  698. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  699. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  700. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  701. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  702. package/node_modules/zod/v4/mini/checks.js +1 -1
  703. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  704. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  705. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  706. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  707. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  708. package/node_modules/zod/v4/mini/external.cjs +33 -1
  709. package/node_modules/zod/v4/mini/external.d.cts +6 -2
  710. package/node_modules/zod/v4/mini/external.d.ts +6 -2
  711. package/node_modules/zod/v4/mini/external.js +3 -1
  712. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  713. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  714. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  715. package/node_modules/zod/v4/mini/in-out.js +36 -0
  716. package/node_modules/zod/v4/mini/index.cjs +19 -0
  717. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  718. package/node_modules/zod/v4/mini/package.json +2 -1
  719. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  720. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  721. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  722. package/node_modules/zod/v4/mini/parse.js +1 -1
  723. package/node_modules/zod/v4/mini/schemas.cjs +151 -50
  724. package/node_modules/zod/v4/mini/schemas.d.cts +75 -22
  725. package/node_modules/zod/v4/mini/schemas.d.ts +75 -22
  726. package/node_modules/zod/v4/mini/schemas.js +125 -48
  727. package/node_modules/zod/v4/package.json +2 -1
  728. package/node_modules/zod/v4-mini/index.cjs +19 -0
  729. package/node_modules/zod/v4-mini/package.json +2 -1
  730. package/package.json +16 -14
  731. package/dist/trpc/routers/searchees.d.ts +0 -51
  732. package/dist/trpc/routers/searchees.js +0 -156
  733. package/dist/trpc/routers/searchees.js.map +0 -1
  734. package/dist/webui/assets/ClientOnly-CzZIsGML.js +0 -1
  735. package/dist/webui/assets/DeleteOption-dxKSbv6N.js +0 -1
  736. package/dist/webui/assets/FieldInfo-FLjtPgL4.js +0 -1
  737. package/dist/webui/assets/Page-C7KClZ28.js +0 -1
  738. package/dist/webui/assets/array-field-DGB7Lbh7.js +0 -1
  739. package/dist/webui/assets/badge-hukNSIir.js +0 -1
  740. package/dist/webui/assets/button-1cIaa9Lf.js +0 -1
  741. package/dist/webui/assets/check-CUrWQ2C7.js +0 -1
  742. package/dist/webui/assets/chevron-down-CVVogpPh.js +0 -1
  743. package/dist/webui/assets/clients-CHdgqO4r.js +0 -1
  744. package/dist/webui/assets/connect-Cr6Q3W8U.js +0 -2
  745. package/dist/webui/assets/createLucideIcon-zYRS_Hrv.js +0 -1
  746. package/dist/webui/assets/debug-CEmoQ2W_.js +0 -1
  747. package/dist/webui/assets/directories-CNuHKfHz.js +0 -1
  748. package/dist/webui/assets/dist-Bbmh5Du9.js +0 -1
  749. package/dist/webui/assets/dist-DhH_lYkz.js +0 -1
  750. package/dist/webui/assets/dist-DzdkRn7I.js +0 -1
  751. package/dist/webui/assets/dist-b2njvUJz.js +0 -41
  752. package/dist/webui/assets/dist-d-Lt00zD.js +0 -1
  753. package/dist/webui/assets/duration-field-CnlQcr37.js +0 -1
  754. package/dist/webui/assets/form-context-B-ekdUc0.js +0 -1
  755. package/dist/webui/assets/form-validation-context-CPAPOloL.js +0 -1
  756. package/dist/webui/assets/general-Cs8dEydJ.js +0 -1
  757. package/dist/webui/assets/health-DugF7R6A.js +0 -1
  758. package/dist/webui/assets/index-DhV1H9AB.css +0 -2
  759. package/dist/webui/assets/index-DinSQfHc.js +0 -11
  760. package/dist/webui/assets/input-CsfmMUT5.js +0 -1
  761. package/dist/webui/assets/jobs-Cr1xWWzM.js +0 -1
  762. package/dist/webui/assets/library-BNsctrbc.js +0 -1
  763. package/dist/webui/assets/loader-circle-BQbzoYGJ.js +0 -1
  764. package/dist/webui/assets/logs-C1l3cu_j.js +0 -1
  765. package/dist/webui/assets/number-field-Ce3QdLSz.js +0 -1
  766. package/dist/webui/assets/react-dom-mEftaaxx.js +0 -1
  767. package/dist/webui/assets/required-indicator-BXf2UzTH.js +0 -1
  768. package/dist/webui/assets/routes-Bw2nXmFg.js +0 -1
  769. package/dist/webui/assets/search-D9W5vk_0.js +0 -1
  770. package/dist/webui/assets/select-CZn10WME.js +0 -1
  771. package/dist/webui/assets/select-field-DozTirAZ.js +0 -1
  772. package/dist/webui/assets/settings-BXbhXNDK.js +0 -1
  773. package/dist/webui/assets/sidebar-y9WJu7Jw.js +0 -5
  774. package/dist/webui/assets/submit-button-CBOzR0f_.js +0 -1
  775. package/dist/webui/assets/switch-D4S9As9u.js +0 -1
  776. package/dist/webui/assets/switch-field-2E9ctvy_.js +0 -1
  777. package/dist/webui/assets/table-B1Y18B60.js +0 -1
  778. package/dist/webui/assets/text-field-DV4EP-I8.js +0 -1
  779. package/dist/webui/assets/time-DjUFOA4D.js +0 -1
  780. package/dist/webui/assets/trackers-ULhLxA6-.js +0 -7
  781. package/dist/webui/assets/use-settings-form-submit-D87nmJRy.js +0 -79
  782. package/dist/webui/assets/useBaseQuery-BvrWhgOK.js +0 -1
  783. package/dist/webui/assets/useRouterState-CZfD5Xdv.js +0 -1
  784. package/dist/webui/assets/useStore-CusP06SD.js +0 -1
  785. package/node_modules/zod/src/v4/core/config.ts +0 -15
@@ -338,6 +338,66 @@ describe("superRefine functionality", () => {
338
338
  }
339
339
  });
340
340
 
341
+ test("should preserve explicit nullish issue input", () => {
342
+ const schema = z.string().superRefine((_, ctx) => {
343
+ ctx.addIssue({ code: "custom", message: "default" });
344
+ ctx.addIssue({ code: "custom", message: "null", input: null });
345
+ ctx.addIssue({ code: "custom", message: "undefined", input: undefined });
346
+ });
347
+
348
+ const result = schema.safeParse("sensitive", { reportInput: true });
349
+ expect(result.success).toEqual(false);
350
+ if (!result.success) {
351
+ expect(result.error.issues).toHaveLength(3);
352
+ expect(result.error.issues[0].input).toEqual("sensitive");
353
+ expect(result.error.issues[1].input).toEqual(null);
354
+ expect(result.error.issues[2]).toHaveProperty("input");
355
+ expect(result.error.issues[2].input).toEqual(undefined);
356
+ }
357
+ });
358
+
359
+ test("should keep issue input aligned with the issue path", () => {
360
+ const nested = z.object({ a: z.string().nullable() }).superRefine((val, ctx) => {
361
+ if (val.a === null) ctx.addIssue({ code: "custom", path: ["a"], input: val.a, message: "no null" });
362
+ });
363
+
364
+ const direct = nested.safeParse({ a: null }, { reportInput: true });
365
+ expect(direct.success).toEqual(false);
366
+ if (!direct.success) {
367
+ expect(direct.error.issues[0].path).toEqual(["a"]);
368
+ expect(direct.error.issues[0].input).toEqual(null);
369
+ }
370
+
371
+ // Forwarding a nested parse's issues must not overwrite their input with the outer payload.
372
+ const inner = z.object({ x: z.string() });
373
+ const forwarding = z.unknown().superRefine((val, ctx) => {
374
+ const result = inner.safeParse(val, { reportInput: true });
375
+ if (!result.success) {
376
+ for (const iss of result.error.issues) {
377
+ ctx.addIssue({ code: "custom", path: iss.path, input: iss.input, message: iss.message });
378
+ }
379
+ }
380
+ });
381
+
382
+ const forwarded = forwarding.safeParse({}, { reportInput: true });
383
+ expect(forwarded.success).toEqual(false);
384
+ if (!forwarded.success) {
385
+ expect(forwarded.error.issues[0].path).toEqual(["x"]);
386
+ expect(forwarded.error.issues[0]).toHaveProperty("input");
387
+ expect(forwarded.error.issues[0].input).toEqual(undefined);
388
+ }
389
+ });
390
+
391
+ test("should surface an explicit undefined input to the error map", () => {
392
+ const schema = z.object({ a: z.string().optional() }).superRefine((val, ctx) => {
393
+ if (!val.a) ctx.addIssue({ code: "custom", path: ["a"], input: val.a });
394
+ });
395
+
396
+ const result = schema.safeParse({}, { error: (iss) => (iss.input === undefined ? "Required" : "Invalid") });
397
+ expect(result.success).toEqual(false);
398
+ if (!result.success) expect(result.error.issues[0].message).toEqual("Required");
399
+ });
400
+
341
401
  test("should respect fatal flag in superRefine", () => {
342
402
  const schema = z
343
403
  .string()
@@ -414,6 +474,69 @@ describe("chained refinements", () => {
414
474
  };
415
475
  expect(objectSchema.parse(validData)).toEqual(validData);
416
476
  });
477
+
478
+ test("should run superRefine validation even when base schema validation fails when 'when' is defined and returns true", () => {
479
+ const baseSchema = z.object({
480
+ foo: z.number(),
481
+ bar: z.number(),
482
+ });
483
+
484
+ const schema = baseSchema.superRefine(
485
+ (data, ctx) => {
486
+ if (data.foo > 10) {
487
+ ctx.addIssue({
488
+ code: "custom",
489
+ message: "foo must be less than 10",
490
+ });
491
+ }
492
+ },
493
+ {
494
+ when: ({ value }) => baseSchema.pick({ foo: true }).safeParse(value).success,
495
+ }
496
+ );
497
+
498
+ const result = schema.safeParse({
499
+ foo: 11,
500
+ });
501
+ expect(result.success).toEqual(false);
502
+
503
+ if (!result.success) {
504
+ expect(result.error.issues.length).toEqual(2);
505
+ expect(result.error.issues[0].message).toEqual("Invalid input: expected number, received undefined");
506
+ expect(result.error.issues[1].message).toEqual("foo must be less than 10");
507
+ }
508
+ });
509
+
510
+ test("should not run superRefine validation when 'when' is defined and returns false", () => {
511
+ const baseSchema = z.object({
512
+ foo: z.number(),
513
+ bar: z.number(),
514
+ });
515
+
516
+ const schema = baseSchema.superRefine(
517
+ (data, ctx) => {
518
+ if (data.foo > 10) {
519
+ ctx.addIssue({
520
+ code: "custom",
521
+ message: "foo must be less than 10",
522
+ });
523
+ }
524
+ },
525
+ {
526
+ when: ({ value }) => baseSchema.safeParse(value).success,
527
+ }
528
+ );
529
+
530
+ const result = schema.safeParse({
531
+ foo: 11,
532
+ });
533
+ expect(result.success).toEqual(false);
534
+
535
+ if (!result.success) {
536
+ expect(result.error.issues.length).toEqual(1);
537
+ expect(result.error.issues[0].message).toEqual("Invalid input: expected number, received undefined");
538
+ }
539
+ });
417
540
  });
418
541
 
419
542
  describe("type refinement with type guards", () => {
@@ -83,6 +83,21 @@ test("failing when set is bigger than max() ", () => {
83
83
  expect(result.success).toEqual(false);
84
84
  expect(result.error!.issues.length).toEqual(1);
85
85
  expect(result.error!.issues[0].code).toEqual("too_big");
86
+ expect(
87
+ z
88
+ .set(z.string())
89
+ .max(1)
90
+ .safeParse(new Set([1, 2])).error!.issues
91
+ ).toMatchObject([{ code: "too_big" }]);
92
+ });
93
+
94
+ test("failing when set does not match size() ", () => {
95
+ expect(justTwo.safeParse(new Set(["one"])).error!.issues[0].message).toEqual(
96
+ "Too small: expected set to have exactly 2 items"
97
+ );
98
+ expect(justTwo.safeParse(new Set(["one", "two", "three"])).error!.issues[0].message).toEqual(
99
+ "Too big: expected set to have exactly 2 items"
100
+ );
86
101
  });
87
102
 
88
103
  test("doesn’t throw when an empty set is given", () => {
@@ -132,3 +132,22 @@ test("z.toJSONSchema() returns StandardJSONSchemaV1", async () => {
132
132
  }
133
133
  `);
134
134
  });
135
+
136
+ test("a failing validate reports the same issues as safeParse, without a ZodError", async () => {
137
+ const schema = z.object({ name: z.string().min(3), age: z.number().refine(async (n) => n > 0) });
138
+ const input = { name: "ab", age: -1 };
139
+ const result = (await schema["~standard"].validate(input)) as { issues: unknown[] };
140
+ expect(result.issues).toEqual((await schema.safeParseAsync(input)).error!.issues);
141
+ expect(result).not.toHaveProperty("error");
142
+ const sync = z.string().min(3)["~standard"].validate("ab") as { issues: unknown[] };
143
+ expect(sync.issues).toEqual(z.string().min(3).safeParse("ab").error!.issues);
144
+ });
145
+
146
+ test("a synchronously throwing check rejects through ~standard instead of throwing", async () => {
147
+ const schema = z.string().refine(() => {
148
+ throw new Error("boom");
149
+ });
150
+ const result = schema["~standard"].validate("abc");
151
+ expect(result).toBeInstanceOf(Promise);
152
+ await expect(result as Promise<unknown>).rejects.toThrow("boom");
153
+ });
@@ -1,5 +1,5 @@
1
1
  import { randomBytes } from "node:crypto";
2
- import { expect, test } from "vitest";
2
+ import { expect, expectTypeOf, test } from "vitest";
3
3
 
4
4
  import * as z from "zod/v4";
5
5
 
@@ -12,6 +12,63 @@ const includesFromIndex2 = z.string().includes("includes", { position: 2 });
12
12
  const startsWith = z.string().startsWith("startsWith");
13
13
  const endsWith = z.string().endsWith("endsWith");
14
14
 
15
+ test("string factory checks", async () => {
16
+ const schema = z.string({ checks: [z.minLength(1), z.maxLength(3)] as const });
17
+ const chained = z.string().min(1).max(3);
18
+ expectTypeOf<z.output<typeof schema>>().toEqualTypeOf<string>();
19
+ for (const value of ["", "ab", "abcd", 1, undefined]) {
20
+ expect(z.validate(schema, value)).toBe(z.validate(chained, value));
21
+ expect(schema.safeParse(value)).toEqual(chained.safeParse(value));
22
+ }
23
+ expect(z.toJSONSchema(schema)).toEqual(z.toJSONSchema(chained));
24
+ expect(schema.minLength).toBe(1);
25
+ expect(schema.maxLength).toBe(3);
26
+ expect(schema._zod.parent).toBeUndefined();
27
+ expect([...schema._zod.traits]).toEqual([...chained._zod.traits]);
28
+ const extended = schema.max(2);
29
+ expect(extended._zod.parent).toBe(schema);
30
+ expect(z.validate(schema, "abc")).toBe(true);
31
+ expect(z.validate(extended, "abc")).toBe(false);
32
+ const coerce = z.coerce.string({ checks: [z.minLength(2)] });
33
+ expect(coerce.parse(12)).toBe("12");
34
+ expect(z.validate(coerce, 1)).toBe(false);
35
+ const asyncSchema = z.string({
36
+ checks: [
37
+ z.check<string>(async (ctx) => {
38
+ if (ctx.value !== "ok") ctx.issues.push({ code: "custom", input: ctx.value });
39
+ }),
40
+ ],
41
+ });
42
+ expect(await asyncSchema.safeParseAsync("ok")).toEqual({ success: true, data: "ok" });
43
+ expect((await asyncSchema.safeParseAsync("bad")).success).toBe(false);
44
+ // @ts-expect-error numeric checks cannot validate strings
45
+ z.string({ checks: [z.gte(1)] });
46
+ });
47
+
48
+ test("factory checks snapshot caller arrays", () => {
49
+ for (const factory of [z.string, z.coerce.string]) {
50
+ for (const initial of [[], [z.minLength(1)]]) {
51
+ const schema = factory({ checks: initial });
52
+ let reads = 0;
53
+ const getterSchema = factory({
54
+ get checks() {
55
+ if (++reads > 1) throw new Error("checks read twice");
56
+ return initial;
57
+ },
58
+ });
59
+ expect(reads).toBe(1);
60
+ expect(z.validate(getterSchema, "long")).toBe(true);
61
+ const before = z.toJSONSchema(schema);
62
+ initial.push(z.minLength(10));
63
+ expect(schema._zod.def.checks).not.toBe(initial);
64
+ expect(z.validate(schema, "long")).toBe(true);
65
+ expect(z.validate(z.compile(schema), "long")).toBe(true);
66
+ expect(z.toJSONSchema(schema)).toEqual(before);
67
+ expect(z.validate(schema.check(z.minLength(2)), "long")).toBe(true);
68
+ }
69
+ }
70
+ });
71
+
15
72
  test("length checks", () => {
16
73
  minFive.parse("12345");
17
74
  minFive.parse("123456");
@@ -217,6 +274,14 @@ test("base64 validations", () => {
217
274
  "?QmFzZTY0IGVuY29kaW5nIGlzIGZ1bg==", // Invalid character '?'
218
275
  ".MTIzND2Nzg5MC4=", // Invalid character '.'
219
276
  "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo", // Missing padding
277
+ // Whitespace is not part of canonical base64 (RFC 4648 §3.3) — atob() strips whitespace internally before validating, so the length check alone would accept "123 " etc.
278
+ "123 ", // bypasses length-mod-4 via trailing whitespace
279
+ "SGVsbG8gV29ybGQ= ", // trailing space
280
+ " SGVsbG8gV29ybGQ=", // leading space
281
+ "SGVsbG8gV29ybGQ=\n", // trailing newline
282
+ "SGVs bG8gV29ybGQ=", // internal space
283
+ "SGVs\nbG8gV29ybGQ=", // internal newline
284
+ "SGVs\tbG8gV29ybGQ=", // internal tab
220
285
  ];
221
286
 
222
287
  for (const str of invalidBase64Strings) {
@@ -256,6 +321,7 @@ test("base64url validations", () => {
256
321
 
257
322
  const invalidBase64URLStrings = [
258
323
  "w7/Dv8O+w74K", // Has + and / characters (is base64)
324
+ "A", // Invalid length (1 mod 4 carries no whole byte)
259
325
  "12345", // Invalid length (not a multiple of 4 characters when adding allowed number of padding characters)
260
326
  "12345===", // Not padded correctly
261
327
  "!UGF0aWVuY2UgaXMgdGhlIGtleSB0byBzdWNjZXNz", // Invalid character '!'
@@ -283,6 +349,18 @@ test("big base64 and base64url", () => {
283
349
  z.base64().parse(bigbase64);
284
350
  const bigbase64url = randomBytes(1024 * 1024 * 10).toString("base64url");
285
351
  z.base64url().parse(bigbase64url);
352
+
353
+ // template literals compose def.pattern and test it on every parse; the quantified block forms overflowed the regex stack here
354
+ expect(z.templateLiteral(["id-", z.base64()]).safeParse(`id-${bigbase64}`).success).toBe(true);
355
+ expect(z.templateLiteral(["id-", z.base64url()]).safeParse(`id-${bigbase64url}`).success).toBe(true);
356
+ });
357
+
358
+ test("template literal composes base64 without alternation leaks", () => {
359
+ // the ^$| alternation in regexes.base64 used to leak: "AAAA" matched with the prefix dropped and "id-AAAA" was rejected
360
+ const tl = z.templateLiteral(["id-", z.base64()]);
361
+ expect(tl.safeParse("id-AAAA").success).toBe(true);
362
+ expect(tl.safeParse("id-").success).toBe(true);
363
+ expect(tl.safeParse("AAAA").success).toBe(false);
286
364
  });
287
365
 
288
366
  function makeJwt(header: object, payload: object) {
@@ -376,6 +454,44 @@ test("url trims whitespace", () => {
376
454
  expect(url.parse("https://example.com/path")).toBe("https://example.com/path");
377
455
  });
378
456
 
457
+ test("url returns the string the parser validated", () => {
458
+ // The URL parser deletes ASCII tab, LF and CR instead of failing, so `new URL()` reports on a string that is not the one it was given. The host is the consequential case: this validated example.com and used to hand back a URL naming a different host.
459
+ expect(z.url().parse("https://exa\nmple.com")).toBe("https://example.com");
460
+ expect(z.url().parse("https://exa\tmple.com")).toBe("https://example.com");
461
+ expect(z.url().parse("https://exa\rmple.com")).toBe("https://example.com");
462
+ expect(z.httpUrl().parse("https://exa\nmple.com")).toBe("https://example.com");
463
+ expect(z.url({ hostname: /^a\.com$/ }).parse("https://a\n.com")).toBe("https://a.com");
464
+ expect(z.url().parse("https://example.com/a\nb?c=\td#e")).toBe("https://example.com/ab?c=d#e");
465
+
466
+ // Nothing that parsed before stops parsing, and normalize still wins where it applies.
467
+ expect(z.url().parse("https://example.com/path")).toBe("https://example.com/path");
468
+ expect(z.url({ normalize: true }).parse("https://exa\nmple.com")).toBe("https://example.com/");
469
+ });
470
+
471
+ test("ipv6 and cidrv6 reject anything outside the address alphabet", () => {
472
+ // `new URL("http://[...]")` parses an authority rather than an address, so a delimiter re-splits it and the parser validates something else entirely.
473
+ expect(z.ipv6().safeParse("::@1\\").success).toBe(false); // used to validate against the host 0.0.0.1
474
+ expect(z.ipv6().safeParse("::]/1").success).toBe(false);
475
+ expect(z.ipv6().safeParse("@[::1").success).toBe(false);
476
+ expect(z.cidrv6().safeParse("::@1\\/64").success).toBe(false);
477
+
478
+ for (const c of ["\t", "\n", "\r"]) {
479
+ expect(z.ipv6().safeParse(`2001:db8::${c}1`).success).toBe(false);
480
+ expect(z.ipv6().safeParse(`::1${c}`).success).toBe(false);
481
+ expect(z.cidrv6().safeParse(`::1${c}/64`).success).toBe(false);
482
+ }
483
+
484
+ // A rejection has to surface as an issue, not just success: false.
485
+ const result = z.ipv6().safeParse("::1\n");
486
+ expect(result.success).toBe(false);
487
+ expect(result.error!.issues[0]).toMatchObject({ code: "invalid_format", format: "ipv6" });
488
+
489
+ expect(z.ipv6().parse("2001:db8::1")).toBe("2001:db8::1");
490
+ expect(z.ipv6().parse("::ffff:192.0.2.1")).toBe("::ffff:192.0.2.1");
491
+ expect(z.ipv6().parse("2001:DB8::1")).toBe("2001:DB8::1");
492
+ expect(z.cidrv6().parse("::ffff:192.0.2.1/96")).toBe("::ffff:192.0.2.1/96");
493
+ });
494
+
379
495
  test("url normalize flag", () => {
380
496
  const normalizeUrl = z.url({ normalize: true });
381
497
  const preserveUrl = z.url(); // normalize: false/undefined by default
@@ -420,7 +536,7 @@ test("httpurl", () => {
420
536
  const httpUrl = z.url({
421
537
  protocol: /^https?$/,
422
538
  hostname: z.regexes.domain,
423
- // /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/
539
+ // /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,63}$/
424
540
  });
425
541
 
426
542
  httpUrl.parse("https://example.com");
@@ -454,6 +570,22 @@ test("httpurl", () => {
454
570
  ).toThrow();
455
571
  expect(() => httpUrl.parse("http://asdf.c")).toThrow();
456
572
  expect(() => httpUrl.parse("mailto:asdf@lckj.com")).toThrow();
573
+ // total host length over the RFC 1035 limit of 253 chars (built from valid-length labels)
574
+ const longHost = `${`${"a".repeat(50)}.`.repeat(5)}com`; // 5 * 51 + 3 = 258 chars
575
+ expect(longHost.length).toBeGreaterThan(253);
576
+ expect(() => httpUrl.parse(`http://${longHost}`)).toThrow();
577
+ // TLD over the 63-char label limit
578
+ expect(() => httpUrl.parse(`http://example.${"a".repeat(64)}`)).toThrow();
579
+ // a host at exactly the 253-char limit is still accepted, one char more is not
580
+ const maxHost = `${`${"a".repeat(61)}.`.repeat(4)}aaaaa`; // 4 * 62 + 5 = 253 chars
581
+ httpUrl.parse(`http://${maxHost}`);
582
+ expect(() => httpUrl.parse(`http://${maxHost}a`)).toThrow();
583
+ // missing // after protocol
584
+ expect(() => httpUrl.parse("http:example.com")).toThrow();
585
+ expect(() => httpUrl.parse("https:example.com")).toThrow();
586
+ // missing one /
587
+ expect(() => httpUrl.parse("https:/www.google.com")).toThrow();
588
+ expect(() => httpUrl.parse("http:/example.com")).toThrow();
457
589
  });
458
590
 
459
591
  test("url error overrides", () => {
@@ -477,6 +609,7 @@ test("url error overrides", () => {
477
609
  test("emoji validations", () => {
478
610
  const emoji = z.string().emoji();
479
611
 
612
+ emoji.parse("🦰🦱🦲🦳"); // both Extended_Pictographic and Emoji_Component
480
613
  emoji.parse("👋👋👋👋");
481
614
  emoji.parse("🍺👩‍🚀🫡");
482
615
  emoji.parse("💚💙💜💛❤️");
@@ -489,6 +622,18 @@ test("emoji validations", () => {
489
622
  expect(() => emoji.parse("😀 is an emoji")).toThrow();
490
623
  expect(() => emoji.parse("😀stuff")).toThrow();
491
624
  expect(() => emoji.parse("stuff😀")).toThrow();
625
+
626
+ emoji.parse("1\u{FE0F}\u{20E3}"); // keycap sequences stay valid
627
+ emoji.parse("#\u{FE0F}\u{20E3}");
628
+
629
+ // `\p{Emoji_Component}` alone covers ASCII digits, "#", "*", ZWJ, variation selectors and skin tone modifiers; none is an emoji without a base, so a component-only string is not one either
630
+ expect(() => emoji.parse("123")).toThrow();
631
+ expect(() => emoji.parse("#")).toThrow();
632
+ expect(() => emoji.parse("*")).toThrow();
633
+ expect(() => emoji.parse("\u{200D}")).toThrow();
634
+ expect(() => emoji.parse("\u{FE0F}")).toThrow();
635
+ expect(() => emoji.parse("\u{1F3FD}")).toThrow();
636
+ expect(() => emoji.parse("1\u{FE0F}")).toThrow();
492
637
  });
493
638
 
494
639
  test("nanoid", () => {
@@ -598,6 +743,26 @@ test("bad guid", () => {
598
743
  }
599
744
  });
600
745
 
746
+ test("nanoid custom length", () => {
747
+ const nanoid64 = z.nanoid({ length: 64 });
748
+ nanoid64.parse("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_");
749
+ expect(nanoid64.safeParse("lfNZluvAxMkf7Q8C5H-QS")).toMatchObject({ success: false });
750
+
751
+ // the deprecated method and the default length both still work
752
+ expect(z.string().nanoid({ length: 10 }).safeParse("IRFa-VaY2b")).toMatchObject({ success: true });
753
+ expect(z.nanoid().safeParse("lfNZluvAxMkf7Q8C5H-QS")).toMatchObject({ success: true });
754
+
755
+ expect(z.nanoid({ length: 64, error: "custom error" }).safeParse("abc").error!.issues[0].message).toEqual(
756
+ "custom error"
757
+ );
758
+ });
759
+
760
+ test("nanoid rejects a length that is not a positive integer", () => {
761
+ expect(() => z.nanoid({ length: 0 })).toThrow("Invalid nanoid length: 0");
762
+ expect(() => z.nanoid({ length: -1 })).toThrow("Invalid nanoid length: -1");
763
+ expect(() => z.nanoid({ length: 1.5 })).toThrow("Invalid nanoid length: 1.5");
764
+ });
765
+
601
766
  test("cuid", () => {
602
767
  const cuid = z.string().cuid();
603
768
  cuid.parse("ckopqwooh000001la8mbi2im9");
@@ -611,12 +776,26 @@ test("cuid", () => {
611
776
  "origin": "string",
612
777
  "code": "invalid_format",
613
778
  "format": "cuid",
614
- "pattern": "/^[cC][^\\\\s-]{8,}$/",
779
+ "pattern": "/^[cC][0-9a-z]{6,}$/",
615
780
  "path": [],
616
781
  "message": "Invalid cuid"
617
782
  }
618
783
  ]]
619
784
  `);
785
+
786
+ // Strings containing non-base36 characters that the old denylist regex
787
+ // (/^[cC][^\s-]{8,}$/) accepted. The new regex restricts the body to
788
+ // [0-9a-z], matching the actual CUID v1 base36 format. See #3621.
789
+ const previouslyAcceptedNonCuids = [
790
+ "cly63t164000245zw008pggon';select1;", // SQLi-shaped (no whitespace, no hyphen)
791
+ "c<script>alert(1)</script>aaaaaa", // XSS-shaped
792
+ "c{};alert(1)//", // bracket / curly chars
793
+ "C0123_45678", // underscore is not base36
794
+ "cAAAAAAAAA", // uppercase letters in body are not base36 (CUIDs are lowercase)
795
+ ];
796
+ for (const s of previouslyAcceptedNonCuids) {
797
+ expect(cuid.safeParse(s).success).toBe(false);
798
+ }
620
799
  });
621
800
 
622
801
  test("cuid2", () => {
@@ -653,6 +832,12 @@ test("ulid", () => {
653
832
  const caseInsensitive = ulid.safeParse("01arZ3nDeKTsV4RRffQ69G5FAV");
654
833
  expect(caseInsensitive.success).toEqual(true);
655
834
 
835
+ // first char is capped at 7: the spec's largest ULID is 7ZZZZZZZZZZZZZZZZZZZZZZZZZ, so 8-9 and every letter overflow 2^48-1
836
+ expect(ulid.safeParse("7ZZZZZZZZZZZZZZZZZZZZZZZZZ").success).toEqual(true);
837
+ for (const first of ["8", "9", "A", "Z", "z"]) {
838
+ expect(ulid.safeParse(`${first}AAAAAAAAAAAAAAAAAAAAAAAAA`).success).toEqual(false);
839
+ }
840
+
656
841
  expect(result.error!.issues[0].message).toEqual("Invalid ULID");
657
842
  expect(result.error).toMatchInlineSnapshot(`
658
843
  [ZodError: [
@@ -660,7 +845,7 @@ test("ulid", () => {
660
845
  "origin": "string",
661
846
  "code": "invalid_format",
662
847
  "format": "ulid",
663
- "pattern": "/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/",
848
+ "pattern": "/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/",
664
849
  "path": [],
665
850
  "message": "Invalid ULID"
666
851
  }
@@ -811,6 +996,66 @@ test("min max getters", () => {
811
996
  expect(z.string().maxLength).toEqual(null);
812
997
  });
813
998
 
999
+ test("boundary cases with zero length", () => {
1000
+ // Test length(0) - only empty string should pass
1001
+ const lengthZero = z.string().length(0);
1002
+ expect(lengthZero.parse("")).toEqual("");
1003
+ expect(() => lengthZero.parse("a")).toThrow();
1004
+
1005
+ // Test min(0) - all strings including empty should pass
1006
+ const minZero = z.string().min(0);
1007
+ expect(minZero.parse("")).toEqual("");
1008
+ expect(minZero.parse("a")).toEqual("a");
1009
+ expect(minZero.parse("hello")).toEqual("hello");
1010
+
1011
+ // Test max(0) - only empty string should pass
1012
+ const maxZero = z.string().max(0);
1013
+ expect(maxZero.parse("")).toEqual("");
1014
+ expect(() => maxZero.parse("a")).toThrow();
1015
+ expect(() => maxZero.parse("hello")).toThrow();
1016
+ });
1017
+
1018
+ test("length checks count Unicode code points, not UTF-16 code units", () => {
1019
+ // "\u{1F600}" is one code point but two UTF-16 code units
1020
+ const five = "\u{1F600}\u{1F600}\u{1F600}\u{1F600}\u{1F600}";
1021
+ expect(z.string().max(5).safeParse(five).success).toBe(true);
1022
+ expect(
1023
+ z
1024
+ .string()
1025
+ .max(5)
1026
+ .safeParse(five + "\u{1F600}").success
1027
+ ).toBe(false);
1028
+ expect(z.string().min(5).safeParse(five).success).toBe(true);
1029
+ expect(z.string().min(5).safeParse("\u{1F600}\u{1F600}\u{1F600}\u{1F600}").success).toBe(false);
1030
+ expect(z.string().length(5).safeParse(five).success).toBe(true);
1031
+ expect(z.string().length(1).safeParse("\u{1F600}").success).toBe(true);
1032
+ expect(z.string().nonempty().safeParse("\u{1F600}").success).toBe(true);
1033
+
1034
+ // code points, not graphemes: a combining mark and a ZWJ sequence each stay several
1035
+ expect(z.string().length(2).safeParse("e\u0301").success).toBe(true);
1036
+ expect(z.string().length(3).safeParse("\u{1F9D1}\u200D\u{1F37C}").success).toBe(true);
1037
+
1038
+ // an unpaired surrogate is its own code point
1039
+ expect(z.string().length(1).safeParse("\uD83D").success).toBe(true);
1040
+ expect(z.string().length(2).safeParse("\uDE00\uD83D").success).toBe(true);
1041
+
1042
+ // the reported bound is still the declared one
1043
+ expect(
1044
+ z
1045
+ .string()
1046
+ .max(5)
1047
+ .safeParse(five + "\u{1F600}").error!.issues[0]
1048
+ ).toMatchObject({
1049
+ code: "too_big",
1050
+ maximum: 5,
1051
+ origin: "string",
1052
+ });
1053
+
1054
+ // other lengthables keep counting elements
1055
+ expect(z.array(z.string()).max(2).safeParse(["a", "b", "c"]).success).toBe(false);
1056
+ expect(z.array(z.string()).length(2).safeParse(["\u{1F600}", "\u{1F600}"]).success).toBe(true);
1057
+ });
1058
+
814
1059
  test("trim", () => {
815
1060
  expect(z.string().trim().min(2).parse(" 12 ")).toEqual("12");
816
1061
 
@@ -1005,6 +1250,14 @@ test("CIDR v6 validation", () => {
1005
1250
  expect(cidrV6.safeParse("fe80::/10").success).toBe(true);
1006
1251
  expect(cidrV6.safeParse("::1/128").success).toBe(true);
1007
1252
  expect(cidrV6.safeParse("2001:0db8:85a3::/64").success).toBe(true);
1253
+ expect(cidrV6.safeParse("2001:db8:1::/48").success).toBe(true);
1254
+ expect(cidrV6.safeParse("2001:db8:85a3::8a2e:370:7334/64").success).toBe(true);
1255
+ expect(cidrV6.safeParse("2001:db8:85a3:0:0:8a2e:370:7334/64").success).toBe(true);
1256
+
1257
+ const pattern = new RegExp(z.toJSONSchema(cidrV6).pattern as string);
1258
+ for (const input of ["2001:db8::/32", "2001:db8:1::/48", "2001:0db8:85a3::/64", "fe80::/10", "::/0"]) {
1259
+ expect(pattern.test(input)).toBe(true);
1260
+ }
1008
1261
 
1009
1262
  // Invalid CIDR v6 addresses
1010
1263
  expect(cidrV6.safeParse("2001:db8::").success).toBe(false); // Missing prefix
@@ -1093,6 +1346,18 @@ test("hostname", () => {
1093
1346
  expect(() => hostname.parse("example..com")).toThrow();
1094
1347
  });
1095
1348
 
1349
+ test("currency code", () => {
1350
+ const currency = z.currencyCode();
1351
+ for (const code of ["USD", "EUR", "XXX", "XCG", "XAD"]) expect(currency.parse(code)).toBe(code);
1352
+ for (const input of ["", "usd", "US", "USDX", " USD", "ANG", "BGN"])
1353
+ expect(currency.safeParse(input).success).toBe(false);
1354
+ expect(currency.safeParse("usd").error!.issues[0]).toMatchObject({
1355
+ code: "invalid_format",
1356
+ format: "currency_code",
1357
+ message: "Invalid currency code",
1358
+ });
1359
+ });
1360
+
1096
1361
  test("hash validation", () => {
1097
1362
  // MD5 tests
1098
1363
  const md5hex = z.hash("md5");
@@ -104,3 +104,21 @@ test("z.stringbool codec round trip", () => {
104
104
  const encodedFalse = z.encode(schema, decodedFalse);
105
105
  expect(encodedFalse).toEqual("disabled"); // First element of falsy array
106
106
  });
107
+
108
+ test("z.stringbool exposes truthy/falsy/case via _zod.bag", () => {
109
+ const a = z.stringbool();
110
+ expect(a._zod.bag.truthy).toEqual(["true", "1", "yes", "on", "y", "enabled"]);
111
+ expect(a._zod.bag.falsy).toEqual(["false", "0", "no", "off", "n", "disabled"]);
112
+ expect(a._zod.bag.case).toEqual("insensitive");
113
+
114
+ // values are normalized when case-insensitive
115
+ const b = z.stringbool({ truthy: ["Y", "yes"], falsy: ["N"] });
116
+ expect(b._zod.bag.truthy).toEqual(["y", "yes"]);
117
+ expect(b._zod.bag.falsy).toEqual(["n"]);
118
+ expect(b._zod.bag.case).toEqual("insensitive");
119
+
120
+ const c = z.stringbool({ truthy: ["Y"], falsy: ["N"], case: "sensitive" });
121
+ expect(c._zod.bag.truthy).toEqual(["Y"]);
122
+ expect(c._zod.bag.falsy).toEqual(["N"]);
123
+ expect(c._zod.bag.case).toEqual("sensitive");
124
+ });