ima2-gen 3.14.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (546) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/docs/API.md +2 -2
  3. package/docs/CLI.md +1 -1
  4. package/docs/CLI.zh-CN.md +1 -1
  5. package/docs/CLI.zh-TW.md +1 -1
  6. package/docs/migration/runtime-test-inventory.md +2 -1
  7. package/lib/agyArtifactRead.js +0 -3
  8. package/lib/assetLifecycle.js +1 -6
  9. package/lib/errors/providerMap.js +1 -0
  10. package/lib/mcp/downloadMediaResult.js +1 -6
  11. package/lib/naiImageAdapter.js +4 -9
  12. package/lib/naiSubscription.js +95 -0
  13. package/lib/pinnedHttpGet.js +15 -23
  14. package/lib/providers/adapters/api.js +55 -0
  15. package/lib/providers/adapters/atlascloud.js +66 -0
  16. package/lib/providers/adapters/comfy.js +76 -19
  17. package/lib/providers/adapters/gemini-api.js +55 -0
  18. package/lib/providers/adapters/googleExecution.js +26 -51
  19. package/lib/providers/adapters/grok-api.js +55 -0
  20. package/lib/providers/adapters/grokExecution.js +67 -112
  21. package/lib/providers/adapters/index.js +6 -0
  22. package/lib/providers/adapters/minimax.js +63 -0
  23. package/lib/providers/adapters/nai.js +55 -0
  24. package/lib/providers/adapters/openaiExecution.js +12 -37
  25. package/lib/providers/execution/index.js +10 -16
  26. package/lib/providers/execution/legacyClassic.js +5 -65
  27. package/lib/providers/execution/legacyEdit.js +2 -27
  28. package/lib/providers/execution/legacyMultimode.js +2 -31
  29. package/lib/providers/execution/legacyNode.js +2 -38
  30. package/lib/spriteAnchor.js +14 -24
  31. package/lib/spriteAtlasExport.js +8 -13
  32. package/lib/spriteCurationStore.js +4 -9
  33. package/lib/spriteRecipeStore.js +13 -76
  34. package/lib/spriteRowPipeline.js +5 -22
  35. package/node_modules/zod/README.md +27 -0
  36. package/node_modules/zod/compile.cjs +77 -0
  37. package/node_modules/zod/compile.d.cts +1 -0
  38. package/node_modules/zod/compile.d.ts +1 -0
  39. package/node_modules/zod/compile.js +52 -0
  40. package/node_modules/zod/index.cjs +2 -2
  41. package/node_modules/zod/index.d.cts +1 -2
  42. package/node_modules/zod/index.d.ts +1 -2
  43. package/node_modules/zod/index.js +5 -2
  44. package/node_modules/zod/package.json +13 -2
  45. package/node_modules/zod/src/compile.ts +56 -0
  46. package/node_modules/zod/src/index.ts +5 -2
  47. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  48. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  49. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  50. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  51. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  52. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  53. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  54. package/node_modules/zod/src/v3/types.ts +5 -5
  55. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  56. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  57. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  58. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  59. package/node_modules/zod/src/v4/classic/external.ts +12 -9
  60. package/node_modules/zod/src/v4/classic/from-json-schema.ts +140 -78
  61. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  62. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  63. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  64. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  65. package/node_modules/zod/src/v4/classic/schemas.ts +452 -262
  66. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  67. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  68. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +135 -0
  69. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +30 -1
  70. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  71. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  72. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  73. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +2 -2
  74. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  75. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +720 -0
  76. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  77. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  78. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  79. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  80. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  81. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  82. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +155 -13
  83. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +11 -0
  84. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  85. package/node_modules/zod/src/v4/classic/tests/error.test.ts +274 -6
  86. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +425 -10
  87. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  88. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  89. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  90. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  91. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  92. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +281 -0
  93. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +47 -0
  94. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  95. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +183 -0
  96. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  97. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  98. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  99. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  100. package/node_modules/zod/src/v4/classic/tests/number.test.ts +46 -9
  101. package/node_modules/zod/src/v4/classic/tests/object.test.ts +245 -12
  102. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +234 -0
  103. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  104. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  105. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  106. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  107. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  108. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +33 -2
  109. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  110. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  111. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  112. package/node_modules/zod/src/v4/classic/tests/string.test.ts +127 -5
  113. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  114. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +11 -2
  115. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1585 -173
  116. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  117. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  118. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +76 -0
  119. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  120. package/node_modules/zod/src/v4/core/api.ts +48 -12
  121. package/node_modules/zod/src/v4/core/checks.ts +57 -44
  122. package/node_modules/zod/src/v4/core/compile.ts +2188 -0
  123. package/node_modules/zod/src/v4/core/core.ts +98 -19
  124. package/node_modules/zod/src/v4/core/doc.ts +11 -7
  125. package/node_modules/zod/src/v4/core/errors.ts +115 -24
  126. package/node_modules/zod/src/v4/core/index.ts +3 -0
  127. package/node_modules/zod/src/v4/core/json-schema-generator.ts +6 -1
  128. package/node_modules/zod/src/v4/core/json-schema-processors.ts +257 -93
  129. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  130. package/node_modules/zod/src/v4/core/memoizer.ts +284 -0
  131. package/node_modules/zod/src/v4/core/parse.ts +131 -38
  132. package/node_modules/zod/src/v4/core/regexes.ts +30 -13
  133. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  134. package/node_modules/zod/src/v4/core/schemas.ts +759 -461
  135. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +969 -0
  136. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  137. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  138. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  139. package/node_modules/zod/src/v4/core/tests/compile.test.ts +1639 -0
  140. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  141. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  142. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  143. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  144. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  145. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  146. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +31 -0
  147. package/node_modules/zod/src/v4/core/to-json-schema.ts +275 -42
  148. package/node_modules/zod/src/v4/core/util.ts +268 -42
  149. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  150. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  151. package/node_modules/zod/src/v4/index.ts +3 -3
  152. package/node_modules/zod/src/v4/locales/ar.ts +3 -0
  153. package/node_modules/zod/src/v4/locales/az.ts +3 -0
  154. package/node_modules/zod/src/v4/locales/be.ts +10 -0
  155. package/node_modules/zod/src/v4/locales/bg.ts +3 -0
  156. package/node_modules/zod/src/v4/locales/bn.ts +121 -0
  157. package/node_modules/zod/src/v4/locales/ca.ts +3 -0
  158. package/node_modules/zod/src/v4/locales/ckb.ts +138 -0
  159. package/node_modules/zod/src/v4/locales/cs.ts +3 -0
  160. package/node_modules/zod/src/v4/locales/da.ts +5 -2
  161. package/node_modules/zod/src/v4/locales/de.ts +3 -0
  162. package/node_modules/zod/src/v4/locales/el.ts +1 -0
  163. package/node_modules/zod/src/v4/locales/en.ts +15 -4
  164. package/node_modules/zod/src/v4/locales/eo.ts +3 -0
  165. package/node_modules/zod/src/v4/locales/es.ts +2 -0
  166. package/node_modules/zod/src/v4/locales/fa.ts +3 -0
  167. package/node_modules/zod/src/v4/locales/fi.ts +3 -0
  168. package/node_modules/zod/src/v4/locales/fr-CA.ts +3 -0
  169. package/node_modules/zod/src/v4/locales/fr.ts +19 -14
  170. package/node_modules/zod/src/v4/locales/gu.ts +121 -0
  171. package/node_modules/zod/src/v4/locales/he.ts +6 -1
  172. package/node_modules/zod/src/v4/locales/hi.ts +124 -0
  173. package/node_modules/zod/src/v4/locales/hr.ts +2 -0
  174. package/node_modules/zod/src/v4/locales/hu.ts +3 -0
  175. package/node_modules/zod/src/v4/locales/hy.ts +9 -0
  176. package/node_modules/zod/src/v4/locales/id.ts +3 -0
  177. package/node_modules/zod/src/v4/locales/index.ts +10 -0
  178. package/node_modules/zod/src/v4/locales/is.ts +3 -0
  179. package/node_modules/zod/src/v4/locales/it.ts +3 -0
  180. package/node_modules/zod/src/v4/locales/ja.ts +3 -0
  181. package/node_modules/zod/src/v4/locales/ka.ts +3 -0
  182. package/node_modules/zod/src/v4/locales/km.ts +3 -0
  183. package/node_modules/zod/src/v4/locales/kn.ts +124 -0
  184. package/node_modules/zod/src/v4/locales/ko.ts +3 -0
  185. package/node_modules/zod/src/v4/locales/lt.ts +2 -0
  186. package/node_modules/zod/src/v4/locales/mk.ts +3 -0
  187. package/node_modules/zod/src/v4/locales/ms.ts +3 -0
  188. package/node_modules/zod/src/v4/locales/ne.ts +126 -0
  189. package/node_modules/zod/src/v4/locales/nl.ts +3 -0
  190. package/node_modules/zod/src/v4/locales/nn.ts +119 -0
  191. package/node_modules/zod/src/v4/locales/no.ts +5 -2
  192. package/node_modules/zod/src/v4/locales/ota.ts +3 -0
  193. package/node_modules/zod/src/v4/locales/pl.ts +3 -0
  194. package/node_modules/zod/src/v4/locales/ps.ts +3 -0
  195. package/node_modules/zod/src/v4/locales/pt-BR.ts +159 -0
  196. package/node_modules/zod/src/v4/locales/pt.ts +99 -58
  197. package/node_modules/zod/src/v4/locales/ro.ts +1 -0
  198. package/node_modules/zod/src/v4/locales/ru.ts +10 -0
  199. package/node_modules/zod/src/v4/locales/sk.ts +121 -0
  200. package/node_modules/zod/src/v4/locales/sl.ts +3 -0
  201. package/node_modules/zod/src/v4/locales/sv.ts +5 -2
  202. package/node_modules/zod/src/v4/locales/ta.ts +3 -0
  203. package/node_modules/zod/src/v4/locales/th.ts +3 -0
  204. package/node_modules/zod/src/v4/locales/tk.ts +111 -0
  205. package/node_modules/zod/src/v4/locales/tr.ts +3 -0
  206. package/node_modules/zod/src/v4/locales/uk.ts +3 -0
  207. package/node_modules/zod/src/v4/locales/ur.ts +3 -0
  208. package/node_modules/zod/src/v4/locales/uz.ts +1 -0
  209. package/node_modules/zod/src/v4/locales/vi.ts +3 -0
  210. package/node_modules/zod/src/v4/locales/yo.ts +3 -0
  211. package/node_modules/zod/src/v4/locales/zh-CN.ts +3 -0
  212. package/node_modules/zod/src/v4/locales/zh-TW.ts +3 -0
  213. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  214. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  215. package/node_modules/zod/src/v4/mini/external.ts +10 -1
  216. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  217. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  218. package/node_modules/zod/src/v4/mini/schemas.ts +135 -56
  219. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  220. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  221. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  222. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  223. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  224. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  225. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  226. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  227. package/node_modules/zod/src/v4/mini/tests/index.test.ts +72 -5
  228. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  229. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  230. package/node_modules/zod/src/v4/mini/tests/string.test.ts +21 -0
  231. package/node_modules/zod/v3/ZodError.cjs +22 -12
  232. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  233. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  234. package/node_modules/zod/v3/ZodError.js +22 -12
  235. package/node_modules/zod/v3/types.cjs +7 -5
  236. package/node_modules/zod/v3/types.js +7 -5
  237. package/node_modules/zod/v4/classic/checks.cjs +2 -1
  238. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  239. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  240. package/node_modules/zod/v4/classic/checks.js +1 -1
  241. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  242. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  243. package/node_modules/zod/v4/classic/deep-partial.cjs +39 -0
  244. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  245. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  246. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  247. package/node_modules/zod/v4/classic/errors.cjs +43 -34
  248. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  249. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  250. package/node_modules/zod/v4/classic/errors.js +43 -34
  251. package/node_modules/zod/v4/classic/external.cjs +30 -27
  252. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  253. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  254. package/node_modules/zod/v4/classic/external.js +5 -8
  255. package/node_modules/zod/v4/classic/from-json-schema.cjs +136 -75
  256. package/node_modules/zod/v4/classic/from-json-schema.js +136 -75
  257. package/node_modules/zod/v4/classic/in-out.cjs +63 -0
  258. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  259. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  260. package/node_modules/zod/v4/classic/in-out.js +36 -0
  261. package/node_modules/zod/v4/classic/index.cjs +2 -2
  262. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  263. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  264. package/node_modules/zod/v4/classic/index.js +2 -2
  265. package/node_modules/zod/v4/classic/iso.cjs +11 -22
  266. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  267. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  268. package/node_modules/zod/v4/classic/iso.js +2 -17
  269. package/node_modules/zod/v4/classic/parse.cjs +4 -1
  270. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  271. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  272. package/node_modules/zod/v4/classic/parse.js +1 -0
  273. package/node_modules/zod/v4/classic/schemas.cjs +498 -398
  274. package/node_modules/zod/v4/classic/schemas.d.cts +53 -18
  275. package/node_modules/zod/v4/classic/schemas.d.ts +53 -18
  276. package/node_modules/zod/v4/classic/schemas.js +492 -396
  277. package/node_modules/zod/v4/core/api.cjs +23 -4
  278. package/node_modules/zod/v4/core/api.d.cts +13 -9
  279. package/node_modules/zod/v4/core/api.d.ts +13 -9
  280. package/node_modules/zod/v4/core/api.js +21 -4
  281. package/node_modules/zod/v4/core/checks.cjs +37 -31
  282. package/node_modules/zod/v4/core/checks.d.cts +13 -13
  283. package/node_modules/zod/v4/core/checks.d.ts +13 -13
  284. package/node_modules/zod/v4/core/checks.js +37 -31
  285. package/node_modules/zod/v4/core/compile.cjs +1813 -0
  286. package/node_modules/zod/v4/core/compile.d.cts +51 -0
  287. package/node_modules/zod/v4/core/compile.d.ts +51 -0
  288. package/node_modules/zod/v4/core/compile.js +1783 -0
  289. package/node_modules/zod/v4/core/core.cjs +81 -18
  290. package/node_modules/zod/v4/core/core.d.cts +16 -4
  291. package/node_modules/zod/v4/core/core.d.ts +16 -4
  292. package/node_modules/zod/v4/core/core.js +82 -19
  293. package/node_modules/zod/v4/core/doc.cjs +5 -7
  294. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  295. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  296. package/node_modules/zod/v4/core/doc.js +5 -7
  297. package/node_modules/zod/v4/core/errors.cjs +110 -25
  298. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  299. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  300. package/node_modules/zod/v4/core/errors.js +110 -25
  301. package/node_modules/zod/v4/core/index.cjs +5 -1
  302. package/node_modules/zod/v4/core/index.d.cts +3 -0
  303. package/node_modules/zod/v4/core/index.d.ts +3 -0
  304. package/node_modules/zod/v4/core/index.js +3 -0
  305. package/node_modules/zod/v4/core/json-schema-generator.cjs +4 -0
  306. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  307. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  308. package/node_modules/zod/v4/core/json-schema-generator.js +4 -0
  309. package/node_modules/zod/v4/core/json-schema-processors.cjs +264 -95
  310. package/node_modules/zod/v4/core/json-schema-processors.js +243 -97
  311. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  312. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  313. package/node_modules/zod/v4/core/memoizer.cjs +272 -0
  314. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  315. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  316. package/node_modules/zod/v4/core/memoizer.js +265 -0
  317. package/node_modules/zod/v4/core/parse.cjs +96 -34
  318. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  319. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  320. package/node_modules/zod/v4/core/parse.js +94 -33
  321. package/node_modules/zod/v4/core/regexes.cjs +27 -15
  322. package/node_modules/zod/v4/core/regexes.d.cts +2 -0
  323. package/node_modules/zod/v4/core/regexes.d.ts +2 -0
  324. package/node_modules/zod/v4/core/regexes.js +24 -13
  325. package/node_modules/zod/v4/core/registries.js +2 -2
  326. package/node_modules/zod/v4/core/schemas.cjs +537 -326
  327. package/node_modules/zod/v4/core/schemas.d.cts +100 -31
  328. package/node_modules/zod/v4/core/schemas.d.ts +100 -31
  329. package/node_modules/zod/v4/core/schemas.js +526 -325
  330. package/node_modules/zod/v4/core/to-json-schema.cjs +242 -39
  331. package/node_modules/zod/v4/core/to-json-schema.d.cts +42 -3
  332. package/node_modules/zod/v4/core/to-json-schema.d.ts +42 -3
  333. package/node_modules/zod/v4/core/to-json-schema.js +241 -39
  334. package/node_modules/zod/v4/core/util.cjs +212 -31
  335. package/node_modules/zod/v4/core/util.d.cts +58 -1
  336. package/node_modules/zod/v4/core/util.d.ts +58 -1
  337. package/node_modules/zod/v4/core/util.js +202 -30
  338. package/node_modules/zod/v4/core/versions.cjs +2 -2
  339. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  340. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  341. package/node_modules/zod/v4/core/versions.js +2 -2
  342. package/node_modules/zod/v4/core/visit.cjs +195 -0
  343. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  344. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  345. package/node_modules/zod/v4/core/visit.js +169 -0
  346. package/node_modules/zod/v4/index.cjs +15 -5
  347. package/node_modules/zod/v4/index.d.cts +2 -2
  348. package/node_modules/zod/v4/index.d.ts +2 -2
  349. package/node_modules/zod/v4/index.js +3 -2
  350. package/node_modules/zod/v4/locales/ar.cjs +3 -0
  351. package/node_modules/zod/v4/locales/ar.js +3 -0
  352. package/node_modules/zod/v4/locales/az.cjs +3 -0
  353. package/node_modules/zod/v4/locales/az.js +3 -0
  354. package/node_modules/zod/v4/locales/be.cjs +10 -0
  355. package/node_modules/zod/v4/locales/be.js +10 -0
  356. package/node_modules/zod/v4/locales/bg.cjs +3 -0
  357. package/node_modules/zod/v4/locales/bg.js +3 -0
  358. package/node_modules/zod/v4/locales/bn.cjs +138 -0
  359. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  360. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  361. package/node_modules/zod/v4/locales/bn.js +111 -0
  362. package/node_modules/zod/v4/locales/ca.cjs +3 -0
  363. package/node_modules/zod/v4/locales/ca.js +3 -0
  364. package/node_modules/zod/v4/locales/ckb.cjs +158 -0
  365. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  366. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  367. package/node_modules/zod/v4/locales/ckb.js +131 -0
  368. package/node_modules/zod/v4/locales/cs.cjs +3 -0
  369. package/node_modules/zod/v4/locales/cs.js +3 -0
  370. package/node_modules/zod/v4/locales/da.cjs +5 -2
  371. package/node_modules/zod/v4/locales/da.js +5 -2
  372. package/node_modules/zod/v4/locales/de.cjs +3 -0
  373. package/node_modules/zod/v4/locales/de.js +3 -0
  374. package/node_modules/zod/v4/locales/el.cjs +1 -0
  375. package/node_modules/zod/v4/locales/el.js +1 -0
  376. package/node_modules/zod/v4/locales/en.cjs +14 -4
  377. package/node_modules/zod/v4/locales/en.js +14 -4
  378. package/node_modules/zod/v4/locales/eo.cjs +3 -0
  379. package/node_modules/zod/v4/locales/eo.js +3 -0
  380. package/node_modules/zod/v4/locales/es.cjs +2 -0
  381. package/node_modules/zod/v4/locales/es.js +2 -0
  382. package/node_modules/zod/v4/locales/fa.cjs +3 -0
  383. package/node_modules/zod/v4/locales/fa.js +3 -0
  384. package/node_modules/zod/v4/locales/fi.cjs +3 -0
  385. package/node_modules/zod/v4/locales/fi.js +3 -0
  386. package/node_modules/zod/v4/locales/fr-CA.cjs +3 -0
  387. package/node_modules/zod/v4/locales/fr-CA.js +3 -0
  388. package/node_modules/zod/v4/locales/fr.cjs +16 -14
  389. package/node_modules/zod/v4/locales/fr.js +16 -14
  390. package/node_modules/zod/v4/locales/gu.cjs +138 -0
  391. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  392. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  393. package/node_modules/zod/v4/locales/gu.js +111 -0
  394. package/node_modules/zod/v4/locales/he.cjs +5 -0
  395. package/node_modules/zod/v4/locales/he.js +5 -0
  396. package/node_modules/zod/v4/locales/hi.cjs +136 -0
  397. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  398. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  399. package/node_modules/zod/v4/locales/hi.js +109 -0
  400. package/node_modules/zod/v4/locales/hr.cjs +2 -0
  401. package/node_modules/zod/v4/locales/hr.js +2 -0
  402. package/node_modules/zod/v4/locales/hu.cjs +3 -0
  403. package/node_modules/zod/v4/locales/hu.js +3 -0
  404. package/node_modules/zod/v4/locales/hy.cjs +9 -0
  405. package/node_modules/zod/v4/locales/hy.js +9 -0
  406. package/node_modules/zod/v4/locales/id.cjs +3 -0
  407. package/node_modules/zod/v4/locales/id.js +3 -0
  408. package/node_modules/zod/v4/locales/index.cjs +22 -2
  409. package/node_modules/zod/v4/locales/index.d.cts +10 -0
  410. package/node_modules/zod/v4/locales/index.d.ts +10 -0
  411. package/node_modules/zod/v4/locales/index.js +10 -0
  412. package/node_modules/zod/v4/locales/is.cjs +3 -0
  413. package/node_modules/zod/v4/locales/is.js +3 -0
  414. package/node_modules/zod/v4/locales/it.cjs +3 -0
  415. package/node_modules/zod/v4/locales/it.js +3 -0
  416. package/node_modules/zod/v4/locales/ja.cjs +3 -0
  417. package/node_modules/zod/v4/locales/ja.js +3 -0
  418. package/node_modules/zod/v4/locales/ka.cjs +3 -0
  419. package/node_modules/zod/v4/locales/ka.js +3 -0
  420. package/node_modules/zod/v4/locales/km.cjs +3 -0
  421. package/node_modules/zod/v4/locales/km.js +3 -0
  422. package/node_modules/zod/v4/locales/kn.cjs +141 -0
  423. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  424. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  425. package/node_modules/zod/v4/locales/kn.js +114 -0
  426. package/node_modules/zod/v4/locales/ko.cjs +3 -0
  427. package/node_modules/zod/v4/locales/ko.js +3 -0
  428. package/node_modules/zod/v4/locales/lt.cjs +2 -0
  429. package/node_modules/zod/v4/locales/lt.js +2 -0
  430. package/node_modules/zod/v4/locales/mk.cjs +3 -0
  431. package/node_modules/zod/v4/locales/mk.js +3 -0
  432. package/node_modules/zod/v4/locales/ms.cjs +3 -0
  433. package/node_modules/zod/v4/locales/ms.js +3 -0
  434. package/node_modules/zod/v4/locales/ne.cjs +136 -0
  435. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  436. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  437. package/node_modules/zod/v4/locales/ne.js +109 -0
  438. package/node_modules/zod/v4/locales/nl.cjs +3 -0
  439. package/node_modules/zod/v4/locales/nl.js +3 -0
  440. package/node_modules/zod/v4/locales/nn.cjs +138 -0
  441. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  442. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  443. package/node_modules/zod/v4/locales/nn.js +111 -0
  444. package/node_modules/zod/v4/locales/no.cjs +5 -2
  445. package/node_modules/zod/v4/locales/no.js +5 -2
  446. package/node_modules/zod/v4/locales/ota.cjs +3 -0
  447. package/node_modules/zod/v4/locales/ota.js +3 -0
  448. package/node_modules/zod/v4/locales/pl.cjs +3 -0
  449. package/node_modules/zod/v4/locales/pl.js +3 -0
  450. package/node_modules/zod/v4/locales/ps.cjs +3 -0
  451. package/node_modules/zod/v4/locales/ps.js +3 -0
  452. package/node_modules/zod/v4/locales/pt-BR.cjs +168 -0
  453. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  454. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  455. package/node_modules/zod/v4/locales/pt-BR.js +141 -0
  456. package/node_modules/zod/v4/locales/pt.cjs +87 -55
  457. package/node_modules/zod/v4/locales/pt.js +87 -55
  458. package/node_modules/zod/v4/locales/ro.cjs +1 -0
  459. package/node_modules/zod/v4/locales/ro.js +1 -0
  460. package/node_modules/zod/v4/locales/ru.cjs +10 -0
  461. package/node_modules/zod/v4/locales/ru.js +10 -0
  462. package/node_modules/zod/v4/locales/sk.cjs +141 -0
  463. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  464. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  465. package/node_modules/zod/v4/locales/sk.js +114 -0
  466. package/node_modules/zod/v4/locales/sl.cjs +3 -0
  467. package/node_modules/zod/v4/locales/sl.js +3 -0
  468. package/node_modules/zod/v4/locales/sv.cjs +5 -2
  469. package/node_modules/zod/v4/locales/sv.js +5 -2
  470. package/node_modules/zod/v4/locales/ta.cjs +3 -0
  471. package/node_modules/zod/v4/locales/ta.js +3 -0
  472. package/node_modules/zod/v4/locales/th.cjs +3 -0
  473. package/node_modules/zod/v4/locales/th.js +3 -0
  474. package/node_modules/zod/v4/locales/tk.cjs +132 -0
  475. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  476. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  477. package/node_modules/zod/v4/locales/tk.js +105 -0
  478. package/node_modules/zod/v4/locales/tr.cjs +3 -0
  479. package/node_modules/zod/v4/locales/tr.js +3 -0
  480. package/node_modules/zod/v4/locales/uk.cjs +3 -0
  481. package/node_modules/zod/v4/locales/uk.js +3 -0
  482. package/node_modules/zod/v4/locales/ur.cjs +3 -0
  483. package/node_modules/zod/v4/locales/ur.js +3 -0
  484. package/node_modules/zod/v4/locales/uz.cjs +1 -0
  485. package/node_modules/zod/v4/locales/uz.js +1 -0
  486. package/node_modules/zod/v4/locales/vi.cjs +3 -0
  487. package/node_modules/zod/v4/locales/vi.js +3 -0
  488. package/node_modules/zod/v4/locales/yo.cjs +3 -0
  489. package/node_modules/zod/v4/locales/yo.js +3 -0
  490. package/node_modules/zod/v4/locales/zh-CN.cjs +3 -0
  491. package/node_modules/zod/v4/locales/zh-CN.js +3 -0
  492. package/node_modules/zod/v4/locales/zh-TW.cjs +3 -0
  493. package/node_modules/zod/v4/locales/zh-TW.js +3 -0
  494. package/node_modules/zod/v4/mini/checks.cjs +2 -1
  495. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  496. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  497. package/node_modules/zod/v4/mini/checks.js +1 -1
  498. package/node_modules/zod/v4/mini/deep-partial.cjs +39 -0
  499. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  500. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  501. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  502. package/node_modules/zod/v4/mini/external.cjs +12 -1
  503. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  504. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  505. package/node_modules/zod/v4/mini/external.js +3 -1
  506. package/node_modules/zod/v4/mini/in-out.cjs +63 -0
  507. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  508. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  509. package/node_modules/zod/v4/mini/in-out.js +36 -0
  510. package/node_modules/zod/v4/mini/parse.cjs +3 -1
  511. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  512. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  513. package/node_modules/zod/v4/mini/parse.js +1 -1
  514. package/node_modules/zod/v4/mini/schemas.cjs +75 -47
  515. package/node_modules/zod/v4/mini/schemas.d.cts +43 -13
  516. package/node_modules/zod/v4/mini/schemas.d.ts +43 -13
  517. package/node_modules/zod/v4/mini/schemas.js +71 -45
  518. package/package.json +5 -5
  519. package/routes/quota.js +29 -3
  520. package/ui/dist/.vite/manifest.json +61 -61
  521. package/ui/dist/assets/{AgentWorkspace-CL3MLv3l.js → AgentWorkspace-BulKz33A.js} +1 -1
  522. package/ui/dist/assets/{App-B9cEM6dJ.js → App-juOjrIgh.js} +3 -3
  523. package/ui/dist/assets/{AssetGenWorkspace-swWPvXrx.js → AssetGenWorkspace-8SYhS2Y2.js} +2 -2
  524. package/ui/dist/assets/{AssetsWorkspace-CRVeYU2F.js → AssetsWorkspace-Dxz-Xksp.js} +1 -1
  525. package/ui/dist/assets/{CardNewsWorkspace-BAOxWLKf.js → CardNewsWorkspace-DV4hpvKf.js} +1 -1
  526. package/ui/dist/assets/{GenerationRequestLogPanel-DZtYZm-D.js → GenerationRequestLogPanel-VFu4cAdd.js} +1 -1
  527. package/ui/dist/assets/{HomeWorkspace-BeZ1s0Jm.js → HomeWorkspace-D1UBgwRZ.js} +1 -1
  528. package/ui/dist/assets/{KeyingPanel-ZyBSXioh.js → KeyingPanel-GdUcaaJR.js} +1 -1
  529. package/ui/dist/assets/{NodeCanvas-BvvcCErf.js → NodeCanvas-B6zoJhHr.js} +3 -3
  530. package/ui/dist/assets/{PromptBuilderPanel-DBycmShA.js → PromptBuilderPanel-CJ56MEk2.js} +1 -1
  531. package/ui/dist/assets/{PromptImportDialog-ChvMv7ek.js → PromptImportDialog-DMFnggIT.js} +2 -2
  532. package/ui/dist/assets/{PromptImportDiscoverySection-60py7whH.js → PromptImportDiscoverySection-4KCIWmZ8.js} +1 -1
  533. package/ui/dist/assets/{PromptImportFolderSection-CCRh_-_7.js → PromptImportFolderSection-BjqopFX5.js} +1 -1
  534. package/ui/dist/assets/{PromptLibraryPanel-BFWQO8OT.js → PromptLibraryPanel-DwFK4ALC.js} +2 -2
  535. package/ui/dist/assets/SettingsWorkspace-BWcNnQ56.js +1 -0
  536. package/ui/dist/assets/{SpriteRecipeWorkspace-DRWdkmwU.js → SpriteRecipeWorkspace-Bsl_NZ3A.js} +1 -1
  537. package/ui/dist/assets/{index-7ngEOVxt.js → index-BWzT2RyM.js} +3 -3
  538. package/ui/dist/assets/{index-B5jy7ePg.css → index-C5zSMtGM.css} +1 -1
  539. package/ui/dist/assets/{index-gxh_02DQ.js → index-Cl5SnWLL.js} +7 -7
  540. package/ui/dist/assets/{pptxgen.es-OUNhQLEV.js → pptxgen.es-BslswdiL.js} +1 -1
  541. package/ui/dist/assets/{promptBuilderStore-BTUUzbBT.js → promptBuilderStore-Cl2q0Oe6.js} +1 -1
  542. package/ui/dist/assets/useAgentDialogFocus-B8niAv4W.js +1 -0
  543. package/ui/dist/index.html +2 -2
  544. package/node_modules/zod/src/v4/core/config.ts +0 -15
  545. package/ui/dist/assets/SettingsWorkspace-B5Ghsgdj.js +0 -1
  546. package/ui/dist/assets/useAgentDialogFocus-DSc2qY8p.js +0 -1
@@ -57,3 +57,30 @@ test("The callback's return value becomes the apply's return value.", () => {
57
57
  expect(result).toBe(symbol);
58
58
  expectTypeOf<typeof result>().toEqualTypeOf<symbol>();
59
59
  });
60
+
61
+ test("apply forwards extra args to the callback", () => {
62
+ const withDefault = <TSchema extends z.ZodType>(schema: TSchema, defaultValue: z.output<TSchema>) => {
63
+ return schema.nullish().transform((x) => x ?? defaultValue);
64
+ };
65
+
66
+ const schema = z.string().apply(withDefault, "default-id");
67
+
68
+ expect(schema.parse(undefined)).toBe("default-id");
69
+ expect(schema.parse(null)).toBe("default-id");
70
+ expect(schema.parse("value")).toBe("value");
71
+ expectTypeOf<z.infer<typeof schema>>().toEqualTypeOf<string>();
72
+ });
73
+
74
+ test("apply type-checks the extra args", () => {
75
+ const withMin = (schema: z.ZodString, n: number) => schema.min(n);
76
+
77
+ expect(z.string().apply(withMin, 3).parse("abcd")).toBe("abcd");
78
+ expectTypeOf(z.number().apply<z.ZodNumber>((schema) => schema.min(0))).toEqualTypeOf<z.ZodNumber>();
79
+
80
+ // @ts-expect-error wrong arg type
81
+ z.string().apply(withMin, "3");
82
+ // @ts-expect-error missing arg
83
+ z.string().apply(withMin);
84
+ // @ts-expect-error extra arg for a single-parameter callback
85
+ z.string().apply((schema: z.ZodString) => schema, 3);
86
+ });
@@ -51,7 +51,7 @@ test("array length", () => {
51
51
  "code": "too_small",
52
52
  "exact": true,
53
53
  "inclusive": true,
54
- "message": "Too small: expected array to have >=2 items",
54
+ "message": "Too small: expected array to have exactly 2 items",
55
55
  "minimum": 2,
56
56
  "origin": "array",
57
57
  "path": [],
@@ -68,7 +68,7 @@ test("array length", () => {
68
68
  "exact": true,
69
69
  "inclusive": true,
70
70
  "maximum": 2,
71
- "message": "Too big: expected array to have <=2 items",
71
+ "message": "Too big: expected array to have exactly 2 items",
72
72
  "origin": "array",
73
73
  "path": [],
74
74
  },
@@ -1,6 +1,7 @@
1
1
  import { expectTypeOf, test } from "vitest";
2
2
 
3
3
  import * as z from "zod/v4";
4
+ import * as core from "zod/v4/core";
4
5
 
5
6
  test("assignability", () => {
6
7
  // $ZodString
@@ -162,6 +163,140 @@ test("assignability", () => {
162
163
  z.file() satisfies z.ZodFile;
163
164
  });
164
165
 
166
+ test("toZod", () => {
167
+ type Company = {
168
+ id: string;
169
+ name: string;
170
+ webAddress: string | null;
171
+ };
172
+
173
+ const CompanySchema = z.object({
174
+ id: z.string(),
175
+ name: z.string(),
176
+ webAddress: z.string().url().nullable(),
177
+ });
178
+ const Company = z.toZod<Company>()(CompanySchema);
179
+
180
+ Company.shape.id.min(1);
181
+ expectTypeOf<z.output<typeof Company>>().toEqualTypeOf<Company>();
182
+
183
+ const CoreCompany = core.toZod<Company>()(CompanySchema);
184
+ expectTypeOf<core.output<typeof CoreCompany>>().toEqualTypeOf<Company>();
185
+
186
+ const UtilCompany = z.core.util.toZod<Company>()(CompanySchema);
187
+ expectTypeOf<z.output<typeof UtilCompany>>().toEqualTypeOf<Company>();
188
+
189
+ type Complex = {
190
+ kind: "company";
191
+ nested: {
192
+ founded: Date;
193
+ tags: string[];
194
+ };
195
+ scores: Record<"a" | "b", number>;
196
+ tuple: [string, number];
197
+ status: "active" | "inactive";
198
+ };
199
+
200
+ const Complex = z.toZod<Complex>()(
201
+ z.object({
202
+ kind: z.literal("company"),
203
+ nested: z.object({
204
+ founded: z.date(),
205
+ tags: z.array(z.string()),
206
+ }),
207
+ scores: z.record(z.enum(["a", "b"]), z.number()),
208
+ tuple: z.tuple([z.string(), z.number()]),
209
+ status: z.union([z.literal("active"), z.literal("inactive")]),
210
+ })
211
+ );
212
+ expectTypeOf<z.output<typeof Complex>>().toEqualTypeOf<Complex>();
213
+
214
+ type Items = {
215
+ items: { value: string }[];
216
+ };
217
+
218
+ const Items = z.toZod<Items>()(
219
+ z.object({
220
+ items: z.array(z.object({ value: z.string() })),
221
+ })
222
+ );
223
+ expectTypeOf<z.output<typeof Items>>().toEqualTypeOf<Items>();
224
+
225
+ type ReadonlyItem = Readonly<{
226
+ id: string;
227
+ }>;
228
+
229
+ const ReadonlyItem = z.toZod<ReadonlyItem>()(z.object({ id: z.string() }).readonly());
230
+ expectTypeOf<z.output<typeof ReadonlyItem>>().toEqualTypeOf<ReadonlyItem>();
231
+
232
+ const Transformed = z.toZod<{ count: number }>()(
233
+ z.object({
234
+ count: z.string().transform((value) => value.length),
235
+ })
236
+ );
237
+ expectTypeOf<z.input<typeof Transformed>>().toEqualTypeOf<{ count: string }>();
238
+ expectTypeOf<z.output<typeof Transformed>>().toEqualTypeOf<{ count: number }>();
239
+
240
+ z.toZod<Company>()(
241
+ // @ts-expect-error missing optional keys still fail exact output matching
242
+ z.object({
243
+ id: z.string(),
244
+ name: z.string(),
245
+ })
246
+ );
247
+
248
+ z.toZod<Company>()(
249
+ // @ts-expect-error extra keys fail exact output matching
250
+ z.object({
251
+ id: z.string(),
252
+ name: z.string(),
253
+ webAddress: z.string().url().nullable(),
254
+ extra: z.string(),
255
+ })
256
+ );
257
+
258
+ z.toZod<Company>()(
259
+ // @ts-expect-error wrong property output fails matching
260
+ z.object({
261
+ id: z.number(),
262
+ name: z.string(),
263
+ webAddress: z.string().url().nullable(),
264
+ })
265
+ );
266
+
267
+ z.toZod<ReadonlyItem>()(
268
+ // @ts-expect-error readonly output is required
269
+ z.object({
270
+ id: z.string(),
271
+ })
272
+ );
273
+
274
+ // @ts-expect-error any is only an exact match for any
275
+ z.toZod<string>()(z.any());
276
+
277
+ // @ts-expect-error toZod checks output, not input
278
+ z.toZod<string>()(z.string().transform((value) => value.length));
279
+
280
+ // Exact equality is deliberately the only mode. A bidirectional-assignability mode would accept both of the two cases above — `any` is assignable in both directions by construction, and `readonly` is not part of assignability — so it would silently drop the guarantees the rest of this test pins. The cost is the asymmetry below: an intersection target matches `.and()` but not `.safeExtend()`, and a flat target matches `.safeExtend()` but not `.and()`. Flattening the target with a mapped type switches which spelling matches rather than accepting both.
281
+ type Intersected = { a: number } & { b: string };
282
+ type Flatten<T> = { [K in keyof T]: T[K] } & {};
283
+ const viaAnd = z.object({ a: z.number() }).and(z.object({ b: z.string() }));
284
+ const viaExtend = z.object({ a: z.number() }).safeExtend({ b: z.string() });
285
+
286
+ z.toZod<Intersected>()(viaAnd);
287
+ z.toZod<{ a: number; b: string }>()(viaExtend);
288
+ z.toZod<Flatten<Intersected>>()(viaExtend);
289
+
290
+ // @ts-expect-error flattening the target does not make `.and()` match as well
291
+ z.toZod<Flatten<Intersected>>()(viaAnd);
292
+
293
+ // @ts-expect-error .safeExtend() produces a flat object type, not an intersection
294
+ z.toZod<Intersected>()(viaExtend);
295
+
296
+ // @ts-expect-error .and() produces an intersection, not a flat object type
297
+ z.toZod<{ a: number; b: string }>()(viaAnd);
298
+ });
299
+
165
300
  test("checks", () => {
166
301
  const _a: z.core.$ZodCheck = {} as any as z.core.$ZodChecks;
167
302
  const _b: z.core.$ZodCheck = {} as any as z.core.$ZodStringFormatChecks;
@@ -1,4 +1,4 @@
1
- import { expect, test } from "vitest";
1
+ import { expect, expectTypeOf, test } from "vitest";
2
2
 
3
3
  import * as z from "zod/v4";
4
4
 
@@ -52,3 +52,32 @@ test("min max getters", () => {
52
52
  expect(z.bigint().max(BigInt(5)).maxValue).toEqual(BigInt(5));
53
53
  expect(z.bigint().max(BigInt(5)).max(BigInt(1)).maxValue).toEqual(BigInt(1));
54
54
  });
55
+
56
+ test("bigint formats are distinct at the type level", () => {
57
+ expectTypeOf(z.int64()._zod.def.format).toEqualTypeOf<"int64">();
58
+ expectTypeOf(z.uint64()._zod.def.format).toEqualTypeOf<"uint64">();
59
+
60
+ z.int64() satisfies z.ZodBigIntFormat;
61
+ z.int64() satisfies z.ZodBigInt;
62
+
63
+ // @ts-expect-error a uint64 schema is not a ZodInt64
64
+ z.uint64() satisfies z.ZodInt64;
65
+ });
66
+
67
+ test("multipleOf(0n) does not throw from safeParse", () => {
68
+ // `value % 0n` throws RangeError, so the compiled path declines and the runtime reports the failure
69
+ const schema = z.bigint().multipleOf(BigInt(0));
70
+ const result = schema.safeParse(BigInt(10));
71
+ expect(result.success).toBe(false);
72
+ expect(result.error!.issues[0].code).toEqual("not_multiple_of");
73
+ expect(schema.safeParse(BigInt(0)).success).toBe(false);
74
+
75
+ // matches the number equivalent
76
+ expect(z.number().multipleOf(0).safeParse(10).success).toBe(false);
77
+ expect(z.number().multipleOf(0).safeParse(0).success).toBe(false);
78
+
79
+ // a zero divisor nested in an object must not break the surrounding parse
80
+ const obj = z.object({ a: z.bigint().multipleOf(BigInt(0)), b: z.bigint() });
81
+ expect(obj.safeParse({ a: BigInt(1), b: BigInt(2) }).success).toBe(false);
82
+ expect(obj.safeParse({ a: BigInt(1), b: 2 }).success).toBe(false);
83
+ });
@@ -253,6 +253,136 @@ test("ctx.input", () => {
253
253
  expect(schema.parse(123)).toEqual("123");
254
254
  });
255
255
 
256
+ test("ctx.value is the input to the catch, not what the inner schema made of it", async () => {
257
+ const seen: unknown[] = [];
258
+ const cb = (ctx: z.core.$ZodCatchCtx) => {
259
+ seen.push(ctx.value, ctx.input);
260
+ return -1;
261
+ };
262
+
263
+ expect(z.coerce.number().min(10).catch(cb).parse("5")).toBe(-1);
264
+ expect(
265
+ await z.coerce
266
+ .number()
267
+ .refine(async (n) => n >= 10)
268
+ .catch(cb)
269
+ .parseAsync("6")
270
+ ).toBe(-1);
271
+ expect(
272
+ z
273
+ .string()
274
+ .transform((s) => s.length)
275
+ .refine((n) => n > 10)
276
+ .catch(cb)
277
+ .parse("abc")
278
+ ).toBe(-1);
279
+
280
+ expect(seen).toEqual(["5", "5", "6", "6", "abc", "abc"]);
281
+ });
282
+
283
+ test("ctx.issues outlives the callback", () => {
284
+ let stashed!: z.core.$ZodRawIssue[];
285
+ z.string()
286
+ .min(10)
287
+ .catch((ctx) => {
288
+ stashed = ctx.issues;
289
+ return "fallback";
290
+ })
291
+ .parse("hi");
292
+
293
+ expect(stashed).toHaveLength(1);
294
+ expect(stashed[0].code).toBe("too_small");
295
+ });
296
+
297
+ test("catch ctx carries the rest of the payload through", () => {
298
+ let seen!: z.core.$ZodCatchCtx;
299
+ z.string()
300
+ .min(10)
301
+ .pipe(z.string())
302
+ .catch((ctx) => {
303
+ seen = ctx;
304
+ return "fallback";
305
+ })
306
+ .parse("hi");
307
+
308
+ expect(seen.aborted).toBe(true);
309
+ });
310
+
311
+ test("catch does not swallow an issue it did not cause", () => {
312
+ // A pipe hands its `out` schema the caller's issues array so an unrecognized key can survive to an enclosing intersection. The catch must not read that as its own inner failing.
313
+ const result = z.strictObject({ a: z.string() }).pipe(z.any().catch("CAUGHT")).safeParse({ a: "x", extra: 1 });
314
+
315
+ expect(result.success).toBe(false);
316
+ expect(result.error!.issues.map((i) => i.code)).toEqual(["unrecognized_keys"]);
317
+ });
318
+
319
+ test("catch does not break intersection reconciliation", () => {
320
+ // Forwarding the unrecognized key is what lets the intersection reconcile it. A catch that fired on it substituted its fallback into one side, and the merge threw out of safeParse.
321
+ const schema = z.intersection(
322
+ z.strictObject({ a: z.string() }).pipe(z.any().catch("CAUGHT")),
323
+ z.strictObject({ b: z.string() })
324
+ );
325
+
326
+ expect(schema.parse({ a: "x", b: "y" })).toEqual({ a: "x", b: "y" });
327
+ });
328
+
329
+ test("catch propagates a back-edge to whatever wraps it", () => {
330
+ // The memoizer marks a payload whose value is a node still being parsed. That mark has to survive the catch: an enclosing readonly must not freeze a half-built object, and the node's checks belong to the node itself rather than to the back-edge.
331
+ const Node: any = z.object({
332
+ get self() {
333
+ return z
334
+ .lazy(() => Node)
335
+ .catch(null)
336
+ .readonly()
337
+ .optional();
338
+ },
339
+ });
340
+ const cyclic: any = {};
341
+ cyclic.self = cyclic;
342
+ const frozen = Node.safeParse(cyclic);
343
+ expect(frozen.success).toBe(true);
344
+ expect(Object.keys(frozen.data)).toEqual(["self"]);
345
+
346
+ let checks = 0;
347
+ const Checked: any = z.object({
348
+ get self() {
349
+ return z
350
+ .lazy(() => Checked)
351
+ .catch(null)
352
+ .refine(() => {
353
+ checks++;
354
+ return true;
355
+ })
356
+ .optional();
357
+ },
358
+ });
359
+ const cyclic2: any = {};
360
+ cyclic2.self = cyclic2;
361
+ Checked.safeParse(cyclic2);
362
+ expect(checks).toBe(0);
363
+ });
364
+
365
+ test("a catch that fires does not rescue an issue from outside it", () => {
366
+ // The callback still runs and still computes its fallback — the inner schema really did fail. What it cannot do is answer for the unrecognized key the pipe forwarded past it, so the parse fails anyway.
367
+ let fired = 0;
368
+ const result = z
369
+ .strictObject({ a: z.string() })
370
+ .pipe(
371
+ z
372
+ .object({ a: z.string() })
373
+ .refine(() => false)
374
+ .catch(() => {
375
+ fired++;
376
+ return { a: "FALLBACK" };
377
+ })
378
+ )
379
+ .safeParse({ a: "x", extra: 1 });
380
+
381
+ expect(fired).toBe(1);
382
+ expect(result.success).toBe(false);
383
+ expect(result.error!.issues.map((i) => i.code)).toEqual(["unrecognized_keys"]);
384
+ });
385
+
256
386
  test("direction-aware catch", () => {
257
387
  const schema = z.string().catch("fallback");
258
388
 
@@ -324,3 +454,151 @@ test("optional clobbers catch through pipe boundaries", () => {
324
454
  .parse(123)
325
455
  ).toBe("X!");
326
456
  });
457
+
458
+ test("catch does not resurrect issues an inner optional already resolved", () => {
459
+ // `.catch()` reads issues off the payload it passed down, so an optional that resolved a failure without clearing that array let the failure resurface. The pipe rows matter: a pipe shares the array with a different payload object.
460
+ const chains: [string, () => z.ZodType][] = [
461
+ [
462
+ "prefault.optional",
463
+ () =>
464
+ z
465
+ .undefined()
466
+ .prefault(null as any)
467
+ .optional(),
468
+ ],
469
+ [
470
+ "default.optional",
471
+ () =>
472
+ z
473
+ .undefined()
474
+ .default(null as any)
475
+ .optional(),
476
+ ],
477
+ ["prefault.pipe.optional", () => z.string().prefault("abc").pipe(z.string().min(10)).optional()],
478
+ ["default.pipe.optional", () => z.string().default("abc").pipe(z.string().min(10)).optional()],
479
+ [
480
+ "prefault.optional.optional",
481
+ () =>
482
+ z
483
+ .undefined()
484
+ .prefault(null as any)
485
+ .optional()
486
+ .optional(),
487
+ ],
488
+ [
489
+ "prefault.pipe.optional.optional",
490
+ () => z.string().prefault("abc").pipe(z.string().min(10)).optional().optional(),
491
+ ],
492
+ ];
493
+
494
+ for (const [name, make] of chains) {
495
+ expect(make().safeParse(undefined).success, `${name} without catch`).toBe(true);
496
+ expect((make() as any).catch(null).safeParse(undefined).success, `${name} + catch(value)`).toBe(true);
497
+ expect((make() as any).catch(() => null).safeParse(undefined).success, `${name} + catch(callback)`).toBe(true);
498
+ }
499
+
500
+ expect(
501
+ z
502
+ .object({
503
+ a: z
504
+ .undefined()
505
+ .prefault(null as any)
506
+ .optional()
507
+ .catch(null as any),
508
+ })
509
+ .safeParse({ a: undefined }).success
510
+ ).toBe(true);
511
+
512
+ expect(z.string().catch("FB").parse(123)).toBe("FB");
513
+ expect(z.string().optional().safeParse(123).success).toBe(false);
514
+ });
515
+
516
+ test("resolving an optional's failure clears the abort flag with it", () => {
517
+ // A pipe marks the payload aborted when its `in` fails, and `util.aborted` tests that flag alone, so leaving it set skips every check after the optional.
518
+ const schema = z
519
+ .string()
520
+ .min(10)
521
+ .prefault("abc")
522
+ .pipe(z.string())
523
+ .optional()
524
+ .refine(() => false, "REFINE RAN");
525
+
526
+ const result = schema.safeParse(undefined);
527
+ expect(result.success).toBe(false);
528
+ expect(result.error!.issues[0]?.message).toBe("REFINE RAN");
529
+ });
530
+
531
+ test("catch clears the abort flag along with the issues", () => {
532
+ // Same as the optional case one wrapper over: a catch that clears only the issues leaves the flag set, skipping every check after it.
533
+ const schema = z
534
+ .string()
535
+ .min(10)
536
+ .pipe(z.string())
537
+ .catch("FB")
538
+ .refine(() => false, "REFINE RAN");
539
+
540
+ const result = schema.safeParse("abc");
541
+ expect(result.success).toBe(false);
542
+ expect(result.error!.issues[0]?.message).toBe("REFINE RAN");
543
+
544
+ expect(
545
+ z
546
+ .string()
547
+ .min(2)
548
+ .pipe(z.string())
549
+ .catch("FB")
550
+ .refine(() => false, "REFINE RAN")
551
+ .safeParse("abcdef").success
552
+ ).toBe(false);
553
+ expect(
554
+ z
555
+ .string()
556
+ .min(10)
557
+ .catch("FB")
558
+ .refine(() => false, "REFINE RAN")
559
+ .safeParse("abc").success
560
+ ).toBe(false);
561
+ });
562
+
563
+ test("catch clears the abort flag on the async branch too", () => {
564
+ // Reaching the async branch needs the catch's own inner to be async; an async refinement outside it leaves the inner sync.
565
+ const schema = z
566
+ .string()
567
+ .refine(async () => false, "INNER")
568
+ .pipe(z.string())
569
+ .catch("FB")
570
+ .refine(() => false, "REFINE RAN");
571
+
572
+ return expect(schema.safeParseAsync("abc")).resolves.toMatchObject({
573
+ success: false,
574
+ error: { issues: [{ message: "REFINE RAN" }] },
575
+ });
576
+ });
577
+
578
+ test("catch resolves the issues array itself, so an outer catch does not resurrect them", () => {
579
+ // A pipe runs its `out` on a payload sharing the caller's issues array, so a catch that rebinds its own reference leaves the caller's copy dirty.
580
+ const inner = z.string().pipe(z.string().min(10).catch("FB"));
581
+
582
+ expect(inner.safeParse("abc")).toMatchObject({ success: true, data: "FB" });
583
+ expect(inner.catch("FB2").safeParse("abc")).toMatchObject({ success: true, data: "FB" });
584
+
585
+ expect(z.string().catch("FB").parse(123)).toBe("FB");
586
+ expect(z.string().catch("FB").parse("ok")).toBe("ok");
587
+ expect(
588
+ z
589
+ .string()
590
+ .catch((ctx) => `n=${ctx.error.issues.length}`)
591
+ .parse(123)
592
+ ).toBe("n=1");
593
+ });
594
+
595
+ test("catch resolves the issues array on the async branch too", () => {
596
+ const inner = z.string().pipe(
597
+ z
598
+ .string()
599
+ .refine(async () => false, "INNER")
600
+ .catch("FB")
601
+ );
602
+
603
+ return expect(inner.catch("FB2").safeParseAsync("abc")).resolves.toMatchObject({ success: true, data: "FB" });
604
+ });
@@ -554,8 +554,7 @@ test("codec transform error handling", () => {
554
554
  expect(validResult.data).toEqual({ valid: "json" });
555
555
  }
556
556
 
557
- // Test invalid JSON that should create a single "invalid_format" issue
558
- // Verifies that the transform error aborts before reaching the output schema
557
+ // Test invalid JSON that should create a single "invalid_format" issue. Verifies that the transform error aborts before reaching the output schema
559
558
  const invalidResult = z.safeDecode(anyJSON, '{"invalid":,}');
560
559
  expect(invalidResult.success).toBe(false);
561
560
  if (!invalidResult.success) {
@@ -100,7 +100,7 @@ test("safe codec operations", () => {
100
100
  "message": "Invalid ISO datetime",
101
101
  "origin": "string",
102
102
  "path": [],
103
- "pattern": "/^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$/",
103
+ "pattern": "/^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$/",
104
104
  },
105
105
  ]
106
106
  `);
@@ -241,6 +241,7 @@ test("nested codec with object containing codec property", () => {
241
241
  `);
242
242
 
243
243
  // Test refinements at all levels
244
+
244
245
  // String validation (empty waypoint name)
245
246
  const emptyNameResult = z.safeDecode(waypointSchema, {
246
247
  name: "",
@@ -230,7 +230,7 @@ test("continuability", () => {
230
230
  "message": "Invalid emoji",
231
231
  "origin": "string",
232
232
  "path": [],
233
- "pattern": "/^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$/u",
233
+ "pattern": "/^[\\p{Extended_Pictographic}\\p{Emoji_Component}]+$/u",
234
234
  },
235
235
  {
236
236
  "code": "custom",
@@ -318,7 +318,7 @@ test("continuability", () => {
318
318
  "message": "Invalid ULID",
319
319
  "origin": "string",
320
320
  "path": [],
321
- "pattern": "/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/",
321
+ "pattern": "/^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/",
322
322
  },
323
323
  {
324
324
  "code": "custom",
@@ -0,0 +1,76 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import * as z from "zod";
3
+
4
+ describe("z.creditCard", () => {
5
+ // Luhn-valid PANs. The last four are the schemes an issuer allowlist would turn away — validation is shape plus Luhn only, so the BIN is never consulted.
6
+ const valid: [string, string][] = [
7
+ ["Visa", "4111111111111111"],
8
+ ["Visa (13)", "4007000000027"],
9
+ ["Mastercard", "5555555555554444"],
10
+ ["AmEx", "378282246310005"],
11
+ ["Discover", "6011111111111117"],
12
+ ["JCB", "3530111333300000"],
13
+ ["Diners Club", "30569309025904"],
14
+ ["UnionPay", "6200000000000005"],
15
+ ["Mir", "2200000000000004"],
16
+ ["Elo", "6362000000000009"],
17
+ ["Discover 644-649", "6450000000000002"],
18
+ ["Troy", "9792000000000003"],
19
+ ];
20
+
21
+ test.each(valid)("accepts %s", (_label, n) => {
22
+ expect(z.creditCard().parse(n)).toBe(n);
23
+ });
24
+
25
+ test("accepts single space or hyphen separators", () => {
26
+ expect(z.creditCard().parse("4111 1111 1111 1111")).toBe("4111 1111 1111 1111");
27
+ expect(z.creditCard().parse("4111-1111-1111-1111")).toBe("4111-1111-1111-1111");
28
+ });
29
+
30
+ test("rejects other separator shapes", () => {
31
+ for (const n of ["4111 1111 1111 1111", " 4111111111111111", "4111111111111111 ", "4111.1111.1111.1111"]) {
32
+ expect(() => z.creditCard().parse(n)).toThrow();
33
+ }
34
+ });
35
+
36
+ test("accepts the 12- and 19-digit length bounds", () => {
37
+ expect(z.creditCard().parse("400000000002")).toBe("400000000002");
38
+ expect(z.creditCard().parse("6250000000000000005")).toBe("6250000000000000005");
39
+ });
40
+
41
+ test("rejects Luhn-valid input outside 12-19 digits", () => {
42
+ expect(() => z.creditCard().parse("40000000006")).toThrow();
43
+ expect(() => z.creditCard().parse("40000000000000000002")).toThrow();
44
+ });
45
+
46
+ test("rejects when Luhn fails (right shape, wrong checksum)", () => {
47
+ expect(() => z.creditCard().parse("4111111111111112")).toThrow();
48
+ });
49
+
50
+ test("rejects non-digit input", () => {
51
+ expect(() => z.creditCard().parse("not-a-card")).toThrow();
52
+ expect(() => z.creditCard().parse("")).toThrow();
53
+ });
54
+
55
+ test("carries the shape regex as its JSON Schema pattern", () => {
56
+ // Luhn is not expressible as a pattern, so `pattern` covers length and separators only.
57
+ expect(z.toJSONSchema(z.creditCard())).toMatchObject({
58
+ format: "credit_card",
59
+ pattern: z.regexes.creditCard.source,
60
+ });
61
+ });
62
+
63
+ test("round-trips through JSON Schema with the checksum intact", () => {
64
+ const schema = z.fromJSONSchema(z.toJSONSchema(z.creditCard()));
65
+ expect(schema.safeParse("4111111111111111").success).toBe(true);
66
+ expect(schema.safeParse("4111111111111112").success).toBe(false);
67
+ });
68
+
69
+ test("error message references credit card", () => {
70
+ const result = z.creditCard().safeParse("not-a-card");
71
+ expect(result.success).toBe(false);
72
+ if (!result.success) {
73
+ expect(result.error.issues[0]?.message).toMatch(/credit card/i);
74
+ }
75
+ });
76
+ });