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
@@ -50,74 +50,6 @@ test("flat inference", () => {
50
50
  expectTypeOf<typeof readonlyPromise._output>().toEqualTypeOf<Promise<string>>();
51
51
  });
52
52
 
53
- // test("deep inference", () => {
54
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[0]>>().toEqualTypeOf<string>();
55
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[1]>>().toEqualTypeOf<number>();
56
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[2]>>().toEqualTypeOf<number>();
57
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[3]>>().toEqualTypeOf<bigint>();
58
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[4]>>().toEqualTypeOf<boolean>();
59
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[5]>>().toEqualTypeOf<Date>();
60
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[6]>>().toEqualTypeOf<undefined>();
61
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[7]>>().toEqualTypeOf<null>();
62
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[8]>>().toEqualTypeOf<any>();
63
- // expectTypeOf<
64
- // z.infer<(typeof deepReadonlySchemas_0)[9]>
65
- // >().toEqualTypeOf<Readonly<unknown>>();
66
- // expectTypeOf<z.infer<(typeof deepReadonlySchemas_0)[10]>>().toEqualTypeOf<void>();
67
- // expectTypeOf<
68
- // z.infer<(typeof deepReadonlySchemas_0)[11]>
69
- // >().toEqualTypeOf<(args_0: string, args_1: number, ...args_2: unknown[]) => unknown>();
70
- // expectTypeOf<
71
- // z.infer<(typeof deepReadonlySchemas_0)[12]>
72
- // >().toEqualTypeOf<readonly string[]>();
73
- // expectTypeOf<
74
- // z.infer<(typeof deepReadonlySchemas_0)[13]>
75
- // >().toEqualTypeOf<readonly [string, number]>();
76
- // expectTypeOf<
77
- // z.infer<(typeof deepReadonlySchemas_0)[14]>
78
- // >().toEqualTypeOf<ReadonlyMap<string, Date>>();
79
- // expectTypeOf<
80
- // z.infer<(typeof deepReadonlySchemas_0)[15]>
81
- // >().toEqualTypeOf<ReadonlySet<Promise<string>>>();
82
- // expectTypeOf<
83
- // z.infer<(typeof deepReadonlySchemas_0)[16]>
84
- // >().toEqualTypeOf<Readonly<Record<string, string>>>();
85
- // expectTypeOf<
86
- // z.infer<(typeof deepReadonlySchemas_0)[17]>
87
- // >().toEqualTypeOf<Readonly<Record<string, number>>>();
88
- // expectTypeOf<
89
- // z.infer<(typeof deepReadonlySchemas_0)[18]>
90
- // >().toEqualTypeOf<{ readonly a: string; readonly 1: number }>();
91
- // expectTypeOf<
92
- // z.infer<(typeof deepReadonlySchemas_0)[19]>
93
- // >().toEqualTypeOf<Readonly<testEnum>>();
94
- // expectTypeOf<
95
- // z.infer<(typeof deepReadonlySchemas_0)[20]>
96
- // >().toEqualTypeOf<Promise<string>>();
97
-
98
- // expectTypeOf<
99
- // z.infer<typeof crazyDeepReadonlySchema>
100
- // >().toEqualTypeOf<ReadonlyMap<
101
- // ReadonlySet<readonly [string, number]>,
102
- // {
103
- // readonly a: {
104
- // readonly [x: string]: readonly any[];
105
- // };
106
- // readonly b: {
107
- // readonly c: {
108
- // readonly d: {
109
- // readonly e: {
110
- // readonly f: {
111
- // readonly g?: {};
112
- // };
113
- // };
114
- // };
115
- // };
116
- // };
117
- // }
118
- // >>();
119
- // });
120
-
121
53
  test("object freezing", async () => {
122
54
  expect(Object.isFrozen(z.array(z.string()).readonly().parse(["a"]))).toBe(true);
123
55
  expect(Object.isFrozen(z.tuple([z.string(), z.number()]).readonly().parse(["a", 1]))).toBe(true);
@@ -76,6 +76,37 @@ test("enum exhaustiveness", () => {
76
76
  `);
77
77
  });
78
78
 
79
+ test("optional-in value type", () => {
80
+ const defaulted = z.record(z.enum(["Tuna", "Salmon"]), z.string().default("unknown"));
81
+ expectTypeOf<z.input<typeof defaulted>>().toEqualTypeOf<Partial<Record<"Tuna" | "Salmon", string | undefined>>>();
82
+ expectTypeOf<z.output<typeof defaulted>>().toEqualTypeOf<Record<"Tuna" | "Salmon", string>>();
83
+ expect(defaulted.parse({ Tuna: "asdf" })).toEqual({ Tuna: "asdf", Salmon: "unknown" });
84
+
85
+ const prefaulted = z.record(z.enum(["Tuna", "Salmon"]), z.string().prefault("unknown"));
86
+ expectTypeOf<z.input<typeof prefaulted>>().toEqualTypeOf<Partial<Record<"Tuna" | "Salmon", string | undefined>>>();
87
+ expect(prefaulted.parse({ Tuna: "asdf" })).toEqual({ Tuna: "asdf", Salmon: "unknown" });
88
+
89
+ const optional = z.record(z.enum(["Tuna", "Salmon"]), z.string().optional());
90
+ expectTypeOf<z.input<typeof optional>>().toEqualTypeOf<Partial<Record<"Tuna" | "Salmon", string | undefined>>>();
91
+ // toStrictEqual, not toEqual: an exhaustive record assigns every key, and toEqual cannot tell an absent key from one holding undefined.
92
+ expect(optional.parse({ Tuna: "asdf" })).toStrictEqual({ Tuna: "asdf", Salmon: undefined });
93
+
94
+ // A value that needs a slot keeps the key required, and a non-enumerable key stays an index signature either way.
95
+ const required = z.record(z.enum(["Tuna", "Salmon"]), z.string());
96
+ expectTypeOf<z.input<typeof required>>().toEqualTypeOf<Record<"Tuna" | "Salmon", string>>();
97
+ const indexed = z.record(z.string(), z.string().default("unknown"));
98
+ expectTypeOf<z.input<typeof indexed>>().toEqualTypeOf<Record<string, string | undefined>>();
99
+
100
+ // A catch and a preprocess pipe declare no static optin, so the key stays required even where the parser can fill it. The static predicate and the one the JSON Schema emitter uses resolve these differently, and the two have to keep agreeing.
101
+ const caught = z.record(z.enum(["Tuna", "Salmon"]), z.string().catch("unknown"));
102
+ expectTypeOf<z.input<typeof caught>>().toEqualTypeOf<Record<"Tuna" | "Salmon", string>>();
103
+ const preprocessed = z.record(
104
+ z.enum(["Tuna", "Salmon"]),
105
+ z.preprocess((v) => v, z.string())
106
+ );
107
+ expectTypeOf<z.input<typeof preprocessed>>().toEqualTypeOf<Record<"Tuna" | "Salmon", unknown>>();
108
+ });
109
+
79
110
  test("typescript enum exhaustiveness", () => {
80
111
  enum BigFish {
81
112
  Tuna = 0,
@@ -272,6 +303,67 @@ test("union exhaustiveness", () => {
272
303
  `);
273
304
  });
274
305
 
306
+ test("applies transforms on the key schema (#5296)", () => {
307
+ const single = z.record(
308
+ z.literal("a").transform(() => "b" as const),
309
+ z.string()
310
+ );
311
+ expect(single.parse({ a: "John" })).toEqual({ b: "John" });
312
+
313
+ const multi = z.record(
314
+ z.literal(["a", "b"]).transform((k) => k.toUpperCase()),
315
+ z.number()
316
+ );
317
+ expect(multi.parse({ a: 1, b: 2 })).toEqual({ A: 1, B: 2 });
318
+
319
+ // required-key semantics still hold when the keyType has a known value set
320
+ expect(multi.safeParse({ a: 1 }).success).toBe(false);
321
+
322
+ const en = z.record(
323
+ z.enum(["a", "b"]).transform((k) => k.toUpperCase()),
324
+ z.number()
325
+ );
326
+ expect(en.parse({ a: 1, b: 2 })).toEqual({ A: 1, B: 2 });
327
+
328
+ // matches partialRecord, which already applied transforms
329
+ const part = z.partialRecord(
330
+ z.literal("a").transform(() => "b" as const),
331
+ z.string()
332
+ );
333
+ expect(part.parse({ a: "John" })).toEqual({ b: "John" });
334
+ });
335
+
336
+ test("surfaces key schema refinement failures as invalid_key", () => {
337
+ // refine rejects "b" but it's still in the literal's value set
338
+ const schema = z.record(
339
+ z.literal(["a", "b"]).refine((k) => k === "a", { message: "only 'a' is allowed" }),
340
+ z.string()
341
+ );
342
+
343
+ expect(schema.safeParse({ a: "ok", b: "nope" })).toMatchInlineSnapshot(`
344
+ {
345
+ "error": [ZodError: [
346
+ {
347
+ "code": "invalid_key",
348
+ "origin": "record",
349
+ "issues": [
350
+ {
351
+ "code": "custom",
352
+ "path": [],
353
+ "message": "only 'a' is allowed"
354
+ }
355
+ ],
356
+ "path": [
357
+ "b"
358
+ ],
359
+ "message": "Invalid key in record"
360
+ }
361
+ ]],
362
+ "success": false,
363
+ }
364
+ `);
365
+ });
366
+
275
367
  test("string record parse - pass", () => {
276
368
  const schema = z.record(z.string(), z.boolean());
277
369
  schema.parse({
@@ -341,6 +433,44 @@ test("is not vulnerable to prototype pollution", async () => {
341
433
  }
342
434
  });
343
435
 
436
+ test("key schema cannot normalize an input key into __proto__", async () => {
437
+ const value = z.object({ a: z.string() });
438
+ const payload = { a: "evil" };
439
+ const wire = (key: string) => JSON.parse(JSON.stringify({ [key]: payload }));
440
+
441
+ const cases = [
442
+ [z.record(z.string().toLowerCase(), value), wire("__PROTO__")],
443
+ [z.record(z.string().trim(), value), wire(" __proto__ ")],
444
+ [z.record(z.string().normalize("NFKC"), value), wire("__proto__")],
445
+ [
446
+ z.record(
447
+ z.string().transform((s) => s.slice(2)),
448
+ value
449
+ ),
450
+ wire("x:__proto__"),
451
+ ],
452
+ ] as const;
453
+
454
+ for (const [schema, data] of cases) {
455
+ const result = schema.parse(data);
456
+ expect(Object.getPrototypeOf(result)).toBe(Object.prototype);
457
+ expect(Object.keys(result)).toEqual([]);
458
+ expect((result as any).a).toBeUndefined();
459
+
460
+ expect(Object.getPrototypeOf(await schema.parseAsync(data))).toBe(Object.prototype);
461
+ }
462
+
463
+ // an async value schema takes the promise write path
464
+ const asyncValue = z.record(
465
+ z.string().toLowerCase(),
466
+ value.refine(async () => true)
467
+ );
468
+ expect(Object.getPrototypeOf(await asyncValue.parseAsync(wire("__PROTO__")))).toBe(Object.prototype);
469
+
470
+ // ordinary normalization still lands as an own key
471
+ expect(z.record(z.string().toLowerCase(), value).parse({ KEY: payload })).toEqual({ key: payload });
472
+ });
473
+
344
474
  test("dont remove undefined values", () => {
345
475
  const result1 = z.record(z.string(), z.any()).parse({ foo: undefined });
346
476
 
@@ -462,24 +592,12 @@ test("partialRecord with z.literal([key, ...])", () => {
462
592
  {
463
593
  "error": [ZodError: [
464
594
  {
465
- "code": "invalid_key",
466
- "origin": "record",
467
- "issues": [
468
- {
469
- "code": "invalid_value",
470
- "values": [
471
- "id",
472
- "name",
473
- "email"
474
- ],
475
- "path": [],
476
- "message": "Invalid option: expected one of \\"id\\"|\\"name\\"|\\"email\\""
477
- }
478
- ],
479
- "path": [
595
+ "code": "unrecognized_keys",
596
+ "keys": [
480
597
  "foo"
481
598
  ],
482
- "message": "Invalid key in record"
599
+ "path": [],
600
+ "message": "Unrecognized key: \\"foo\\""
483
601
  }
484
602
  ]],
485
603
  "success": false,
@@ -532,6 +650,45 @@ test("looseRecord passes through non-matching keys", () => {
532
650
  expect(schema.parse({ other: "value" })).toEqual({ other: "value" });
533
651
  });
534
652
 
653
+ test("looseRecord with closed key schema passes through unrecognized keys", () => {
654
+ const enumSchema = z.looseRecord(z.enum(["foo", "bar"]), z.any());
655
+ expect(enumSchema.parse({ foo: 123, bar: {}, baz: null })).toEqual({
656
+ foo: 123,
657
+ bar: {},
658
+ baz: null,
659
+ });
660
+
661
+ const literalSchema = z.looseRecord(z.literal(["foo", "bar"]), z.any());
662
+ expect(literalSchema.parse({ foo: 123, bar: {}, baz: null })).toEqual({
663
+ foo: 123,
664
+ bar: {},
665
+ baz: null,
666
+ });
667
+
668
+ // Recognized keys are still validated
669
+ const validated = z.looseRecord(z.enum(["foo", "bar"]), z.string());
670
+ expect(validated.parse({ foo: "ok", bar: "ok", baz: 123 })).toEqual({
671
+ foo: "ok",
672
+ bar: "ok",
673
+ baz: 123,
674
+ });
675
+ expect(() => validated.parse({ foo: 123 })).toThrow();
676
+ });
677
+
678
+ test("record with closed key schema still rejects unrecognized keys", () => {
679
+ const schema = z.record(z.enum(["foo", "bar"]), z.any());
680
+ expect(schema.safeParse({ foo: 123, bar: {}, baz: null }).success).toBe(false);
681
+ });
682
+
683
+ // __proto__ in input must not replace the prototype of the parsed object via the assignment setter on the result {}. https://github.com/colinhacks/zod/security/advisories/GHSA-r34p-xfmx-58wv
684
+ test("looseRecord with closed key schema drops __proto__", () => {
685
+ const schema = z.looseRecord(z.enum(["foo", "bar"]), z.any());
686
+ const parsed = schema.parse(JSON.parse('{"foo":1,"bar":2,"__proto__":{"isAdmin":true}}'));
687
+ expect(Object.keys(parsed)).toEqual(["foo", "bar"]);
688
+ expect((parsed as any).isAdmin).toBeUndefined();
689
+ expect(Object.getPrototypeOf(parsed)).toBe(Object.prototype);
690
+ });
691
+
535
692
  test("intersection of loose records", () => {
536
693
  const schema = z.intersection(
537
694
  z.object({ name: z.string() }).passthrough(),
@@ -630,3 +787,99 @@ test("numeric string keys", () => {
630
787
  );
631
788
  expect(transformedSchema.parse({ 5: "five", 10: "ten" })).toEqual({ 10: "five", 20: "ten" });
632
789
  });
790
+
791
+ test("v3-compat single-arg form: z.record(valueType)", () => {
792
+ // single arg should default keyType to z.string() and use the arg as valueType
793
+ const schema = (z.record as any)(z.number());
794
+ expect(schema.keyType._zod.def.type).toEqual("string");
795
+ expect(schema.valueType._zod.def.type).toEqual("number");
796
+
797
+ expect(schema.parse({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });
798
+ expect(schema.safeParse({ a: "x" }).success).toBe(false);
799
+
800
+ // params still flow through in the single-arg form
801
+ const withMessage = (z.record as any)(z.number(), "must be a number record");
802
+ expect(withMessage.keyType._zod.def.type).toEqual("string");
803
+ expect(withMessage.valueType._zod.def.type).toEqual("number");
804
+
805
+ // toJSONSchema should produce a well-formed schema (regression: previously produced additionalProperties from undefined valueType, crashing process())
806
+ const json = z.toJSONSchema(schema);
807
+ expect(json).toMatchObject({
808
+ type: "object",
809
+ propertyNames: { type: "string" },
810
+ additionalProperties: { type: "number" },
811
+ });
812
+ });
813
+
814
+ test("__proto__ in a finite key set is stripped", () => {
815
+ const data = JSON.parse('{"__proto__":{"a":"declared"},"b":{"a":"good"}}');
816
+
817
+ for (const schema of [
818
+ z.record(z.enum(["__proto__", "b"]), z.object({ a: z.string() })),
819
+ z.record(z.literal(["__proto__", "b"]), z.object({ a: z.string() })),
820
+ ]) {
821
+ const parsed: any = schema.parse(data);
822
+ expect(Object.getPrototypeOf(parsed)).toBe(Object.prototype);
823
+ expect(Object.prototype.hasOwnProperty.call(parsed, "__proto__")).toBe(false);
824
+ expect(Object.keys(parsed)).toEqual(["b"]);
825
+ expect(parsed.a).toBeUndefined();
826
+ }
827
+
828
+ expect(({} as any).a).toBeUndefined();
829
+ });
830
+
831
+ test("a raw __proto__ input key stays skipped in loose mode", () => {
832
+ const parsed: any = z.looseRecord(z.iso.datetime(), z.unknown()).parse(JSON.parse('{"__proto__":{"a":1}}'));
833
+
834
+ expect(Object.getPrototypeOf(parsed)).toBe(Object.prototype);
835
+ expect(Object.prototype.hasOwnProperty.call(parsed, "__proto__")).toBe(false);
836
+ });
837
+
838
+ test("partialRecord strips a declared __proto__ key", () => {
839
+ const schema = z.partialRecord(z.enum(["__proto__", "b"]), z.string());
840
+ const parsed: any = schema.parse(Object.fromEntries([["__proto__", "declared"]]));
841
+
842
+ expect(Object.getPrototypeOf(parsed)).toBe(Object.prototype);
843
+ expect(Object.prototype.hasOwnProperty.call(parsed, "__proto__")).toBe(false);
844
+ expect(parsed).toEqual({});
845
+ expect(schema.parse({})).toEqual({});
846
+ expect(schema.safeParse({ other: "x" }).success).toBe(false);
847
+ });
848
+
849
+ test("partialRecord strips a declared __proto__ key in loose mode", () => {
850
+ const key = z.enum(["__proto__"]).refine(() => false);
851
+ const schema = z.partialRecord(key, z.unknown(), { mode: "loose" });
852
+ const value = { marker: true };
853
+ const parsed: any = schema.parse(Object.fromEntries([["__proto__", value]]));
854
+
855
+ expect(Object.getPrototypeOf(parsed)).toBe(Object.prototype);
856
+ expect(Object.prototype.hasOwnProperty.call(parsed, "__proto__")).toBe(false);
857
+ expect(parsed).toEqual({});
858
+ expect(parsed.marker).toBeUndefined();
859
+ });
860
+
861
+ test("partial is internal to partialRecord", () => {
862
+ // @ts-expect-error partial is not a public record parameter
863
+ z.record(z.enum(["a"]), z.string(), { partial: true });
864
+
865
+ const schema = z.partialRecord(z.enum(["a"]), z.string(), { partial: false } as any);
866
+ expect(schema.parse({})).toEqual({});
867
+ });
868
+
869
+ test("partialRecord strips a declared __proto__ key before transforms", () => {
870
+ const schema = z.partialRecord(
871
+ z.literal("__proto__").transform(() => "safe" as const),
872
+ z.string()
873
+ );
874
+
875
+ expect(schema.parse(Object.fromEntries([["__proto__", "value"]]))).toEqual({});
876
+ });
877
+
878
+ test("a finite __proto__ key is ignored whether present or missing", () => {
879
+ const schema = z.record(z.enum(["__proto__"]), z.string());
880
+ const parsed: any = schema.parse({});
881
+
882
+ expect(Object.getPrototypeOf(parsed)).toBe(Object.prototype);
883
+ expect(Object.prototype.hasOwnProperty.call(parsed, "__proto__")).toBe(false);
884
+ expect(schema.parse(Object.fromEntries([["__proto__", 123]]))).toEqual({});
885
+ });
@@ -1,6 +1,51 @@
1
1
  import { expect, expectTypeOf, test } from "vitest";
2
2
  import { z } from "zod/v4";
3
3
 
4
+ test("recursive object schema type aliases", () => {
5
+ type ObjectField = z.ZodObject<{ [k: string]: ObjectField }>;
6
+ type MixedField = z.ZodString | z.ZodObject<{ [k: string]: MixedField }>;
7
+ expectTypeOf<ObjectField>().toExtend<z.ZodType>();
8
+ expectTypeOf<MixedField>().toExtend<z.ZodType>();
9
+
10
+ type ObjectValue = { [k: string]: ObjectValue };
11
+ type MixedValue = string | { [k: string]: MixedValue };
12
+ expectTypeOf<z.input<ObjectField>>().toEqualTypeOf<ObjectValue>();
13
+ expectTypeOf<z.output<ObjectField>>().toEqualTypeOf<ObjectValue>();
14
+ expectTypeOf<z.input<MixedField>>().toEqualTypeOf<MixedValue>();
15
+ expectTypeOf<z.output<MixedField>>().toEqualTypeOf<MixedValue>();
16
+
17
+ const schema: MixedField = z.object({ name: z.string(), nested: z.object({ name: z.string() }) });
18
+ expect(schema.parse({ name: "a", nested: { name: "b", extra: true } })).toEqual({
19
+ name: "a",
20
+ nested: { name: "b" },
21
+ });
22
+ expect(schema.safeParse({ name: "a", nested: { name: 123 } }).success).toBe(false);
23
+
24
+ type CoreField = z.core.$ZodString<string> | z.core.$ZodObject<{ [k: string]: CoreField }>;
25
+ expectTypeOf<z.input<CoreField>>().toEqualTypeOf<MixedValue>();
26
+ expectTypeOf<z.output<CoreField>>().toEqualTypeOf<MixedValue>();
27
+ });
28
+
29
+ test("recursive object aliases preserve distinct input and output", () => {
30
+ type Field = z.ZodPipe<z.ZodString, z.ZodTransform<number, string>> | z.ZodObject<{ [k: string]: Field }>;
31
+ type Input = string | { [k: string]: Input };
32
+ type Output = number | { [k: string]: Output };
33
+ expectTypeOf<z.input<Field>>().toEqualTypeOf<Input>();
34
+ expectTypeOf<z.output<Field>>().toEqualTypeOf<Output>();
35
+ const schema: Field = z.object({ nested: z.object({ length: z.string().transform((s) => s.length) }) });
36
+ expect(schema.parse({ nested: { length: "abc" } })).toEqual({ nested: { length: 3 } });
37
+ expect(schema.safeParse({ nested: { length: 3 } }).success).toBe(false);
38
+ });
39
+
40
+ test("indexed object inference preserves string keys", () => {
41
+ type Indexed = z.ZodObject<Record<string, z.ZodString>>;
42
+ type Recursive = z.ZodObject<Record<string, Recursive>>;
43
+ expectTypeOf<keyof z.input<Indexed>>().toEqualTypeOf<string>();
44
+ expectTypeOf<keyof z.output<Indexed>>().toEqualTypeOf<string>();
45
+ expectTypeOf<keyof z.input<Recursive>>().toEqualTypeOf<string>();
46
+ expectTypeOf<keyof z.output<Recursive>>().toEqualTypeOf<string>();
47
+ });
48
+
4
49
  test("recursion with z.lazy", () => {
5
50
  const data = {
6
51
  name: "I",
@@ -135,6 +180,10 @@ test("pick and omit with getter", () => {
135
180
  }
136
181
  expectTypeOf<Category>().toEqualTypeOf<_Category>();
137
182
 
183
+ // Shape should not surface `readonly` modifiers from getter-defined keys. object/strictObject/looseObject all pass shape through util.Writeable<T>.
184
+ type Shape = (typeof Category)["shape"];
185
+ expectTypeOf<Shape>().toEqualTypeOf<{ name: z.ZodString; subcategories: z.ZodArray<typeof Category> }>();
186
+
138
187
  const PickedCategory = Category.pick({ name: true });
139
188
  const OmittedCategory = Category.omit({ subcategories: true });
140
189
 
@@ -148,6 +197,50 @@ test("pick and omit with getter", () => {
148
197
  expect(() => OmittedCategory.parse({ name: "test", subcategories: [] })).toThrow();
149
198
  });
150
199
 
200
+ test("shape stays writeable through extend/safeExtend/partial/required", () => {
201
+ const Base = z.object({ name: z.string() });
202
+
203
+ const Extended = Base.extend({
204
+ get sub() {
205
+ return z.array(Extended);
206
+ },
207
+ });
208
+ type ExtendedShape = (typeof Extended)["shape"];
209
+ expectTypeOf<ExtendedShape>().toEqualTypeOf<{
210
+ name: z.ZodString;
211
+ sub: z.ZodArray<typeof Extended>;
212
+ }>();
213
+
214
+ const SafeExt = Base.safeExtend({ extra: z.string() } as const);
215
+ type SafeExtShape = (typeof SafeExt)["shape"];
216
+ expectTypeOf<SafeExtShape>().toEqualTypeOf<{
217
+ name: z.ZodString;
218
+ extra: z.ZodString;
219
+ }>();
220
+
221
+ const FromConst = Base.extend({ a: z.string(), b: z.number() } as const);
222
+ type FromConstShape = (typeof FromConst)["shape"];
223
+ expectTypeOf<FromConstShape>().toEqualTypeOf<{
224
+ name: z.ZodString;
225
+ a: z.ZodString;
226
+ b: z.ZodNumber;
227
+ }>();
228
+
229
+ const PartialExtended = Extended.partial();
230
+ type PartialShape = (typeof PartialExtended)["shape"];
231
+ expectTypeOf<PartialShape>().toEqualTypeOf<{
232
+ name: z.ZodOptional<z.ZodString>;
233
+ sub: z.ZodOptional<z.ZodArray<typeof Extended>>;
234
+ }>();
235
+
236
+ const RequiredExtended = Extended.required();
237
+ type RequiredShape = (typeof RequiredExtended)["shape"];
238
+ expectTypeOf<RequiredShape>().toEqualTypeOf<{
239
+ name: z.ZodNonOptional<z.ZodString>;
240
+ sub: z.ZodNonOptional<z.ZodArray<typeof Extended>>;
241
+ }>();
242
+ });
243
+
151
244
  test("deferred self-recursion", () => {
152
245
  const Feature = z.object({
153
246
  title: z.string(),
@@ -508,7 +601,7 @@ test("recursive object with .check()", () => {
508
601
  expect(() => Category.parse(invalidData)).toThrow();
509
602
  });
510
603
 
511
- // biome-ignore lint: sadf
604
+ // biome-ignore lint/suspicious/noExportsInTest: unexported it trips noUnusedVariables instead
512
605
  export type RecursiveA = z.ZodUnion<
513
606
  [
514
607
  z.ZodObject<{
@@ -580,3 +673,35 @@ test("recursive type with `id` meta", () => {
580
673
  },
581
674
  });
582
675
  });
676
+
677
+ test("mutual recursion through discriminatedUnion getter", () => {
678
+ const variantA = z.object({
679
+ kind: z.literal("a"),
680
+ get child() {
681
+ return tree.optional();
682
+ },
683
+ });
684
+
685
+ const variantB = z.object({
686
+ kind: z.literal("b"),
687
+ get sibling() {
688
+ return tree.optional();
689
+ },
690
+ });
691
+
692
+ const tree = z.discriminatedUnion("kind", [variantA, variantB]);
693
+
694
+ type _Tree = { kind: "a"; child?: _Tree | undefined } | { kind: "b"; sibling?: _Tree | undefined };
695
+
696
+ const treeUnion = z.union([variantA, variantB]);
697
+
698
+ expectTypeOf<z.input<typeof tree>>().toEqualTypeOf<_Tree>();
699
+ expectTypeOf<z.input<typeof tree>>().not.toBeAny();
700
+ expectTypeOf<z.input<typeof tree>>().toEqualTypeOf<z.input<typeof treeUnion>>();
701
+
702
+ expect(tree.parse({ kind: "a", child: { kind: "b", sibling: { kind: "a" } } })).toEqual({
703
+ kind: "a",
704
+ child: { kind: "b", sibling: { kind: "a" } },
705
+ });
706
+ expect(() => tree.parse({ kind: "c" })).toThrow();
707
+ });
@@ -0,0 +1,68 @@
1
+ import { checkSync } from "recheck";
2
+ import { expect, test } from "vitest";
3
+ import * as z from "zod/v4";
4
+
5
+ const { regexes } = z.core;
6
+
7
+ /** Every pattern `core/regexes.ts` ships, with the parameterized ones materialized across their argument space. */
8
+ function allPatterns(): [string, RegExp][] {
9
+ const patterns: [string, RegExp][] = [];
10
+ for (const [name, value] of Object.entries(regexes)) {
11
+ if (value instanceof RegExp) patterns.push([name, value]);
12
+ }
13
+
14
+ patterns.push(
15
+ ["emoji()", regexes.emoji()],
16
+ ["mac()", regexes.mac()],
17
+ ["mac('-')", regexes.mac("-")],
18
+ ["uuid()", regexes.uuid()],
19
+ ["string()", regexes.string()],
20
+ ["string({min,max})", regexes.string({ minimum: 1, maximum: 10 })]
21
+ );
22
+ for (const version of [1, 2, 3, 4, 5, 6, 7, 8]) patterns.push([`uuid(${version})`, regexes.uuid(version)]);
23
+ for (const precision of [null, -1, 0, 3, 6]) {
24
+ patterns.push([`time(${precision})`, regexes.time({ precision })]);
25
+ for (const local of [false, true]) {
26
+ for (const offset of [false, true]) {
27
+ patterns.push([`datetime(${precision},${local},${offset})`, regexes.datetime({ precision, local, offset })]);
28
+ }
29
+ }
30
+ }
31
+ return patterns;
32
+ }
33
+
34
+ test("no built-in pattern is ReDoS-vulnerable", () => {
35
+ const patterns = allPatterns();
36
+ // Guards against the reflection above silently going empty if the module layout changes.
37
+ expect(patterns.length).toBeGreaterThan(80);
38
+
39
+ const vulnerable: string[] = [];
40
+ for (const [name, pattern] of patterns) {
41
+ // Flags are load-bearing. Without "u" the checker reads `\p{...}` as a literal `p{...}` and reports an exponential pattern as safe.
42
+ const result = checkSync(pattern.source, pattern.flags);
43
+ // "unknown" means the checker gave up, not that the pattern is vulnerable.
44
+ if (result.status !== "vulnerable") continue;
45
+ // The fuzz checker derives "vulnerable" from how long an attack string runs, so CPU contention from parallel test files can flip a safe pattern. Confirm with a budget large enough that only real backtracking can exhaust it.
46
+ const confirmed = checkSync(pattern.source, pattern.flags, { attackTimeout: 10_000 });
47
+ if (confirmed.status === "vulnerable") vulnerable.push(`${name}: ${pattern.source}`);
48
+ }
49
+ expect(vulnerable).toEqual([]);
50
+ }, 60000);
51
+
52
+ test("emoji rejects a backtracking payload in linear time", () => {
53
+ // U+1F9B0-U+1F9B3 are the only code points in both \p{Extended_Pictographic} and \p{Emoji_Component}. A failing match over them used to backtrack exponentially: 26 of them took ~1.9s, and each additional character roughly doubled it.
54
+ const schema = z.emoji();
55
+ const payload = `${"🦰".repeat(26)} `;
56
+
57
+ // Warm up first, then take the best of three: a cold first call is dominated by JIT and can cost hundreds of times the steady-state match on a loaded machine.
58
+ expect(schema.safeParse(payload).success).toBe(false);
59
+ let best = Number.POSITIVE_INFINITY;
60
+ for (let i = 0; i < 3; i++) {
61
+ const start = performance.now();
62
+ schema.safeParse(payload);
63
+ best = Math.min(best, performance.now() - start);
64
+ }
65
+
66
+ // The linear pattern matches in well under a millisecond, so this budget leaves three orders of magnitude of headroom for CPU contention while still catching the exponential regression.
67
+ expect(best).toBeLessThan(500);
68
+ });