@openclaw/firecrawl-plugin 2026.9.4 → 2026.9.6

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 (676) hide show
  1. package/assets/activity.svg +31 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/{firecrawl-client-BPFpIblh.js → .setup/firecrawl-client-hBjAoE8s.mjs} +25 -26
  4. package/dist/{firecrawl-fetch-provider-CIpxLKLq.js → .setup/firecrawl-fetch-provider-DH8FdBjV.mjs} +1 -1
  5. package/dist/{firecrawl-search-provider-80szkO8A.js → .setup/firecrawl-search-provider-8H0Cu9l0.mjs} +1 -1
  6. package/dist/api.js +1 -1
  7. package/dist/index.js +3 -3
  8. package/dist/web-fetch-contract-api.js +1 -1
  9. package/dist/web-fetch-provider.js +1 -1
  10. package/dist/web-search-contract-api.js +1 -1
  11. package/dist/web-search-provider.js +1 -1
  12. package/node_modules/typebox/build/compile/validator.d.mts +1 -1
  13. package/node_modules/typebox/build/compile/validator.mjs +1 -1
  14. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +7 -5
  15. package/node_modules/typebox/build/format/iri.mjs +5 -1
  16. package/node_modules/typebox/build/guard/emit.mjs +2 -4
  17. package/node_modules/typebox/build/guard/guard.mjs +6 -18
  18. package/node_modules/typebox/build/guard/string.mjs +16 -24
  19. package/node_modules/typebox/build/schema/build.mjs +2 -2
  20. package/node_modules/typebox/build/schema/check.mjs +1 -1
  21. package/node_modules/typebox/build/schema/compile.d.mts +3 -2
  22. package/node_modules/typebox/build/schema/compile.mjs +8 -8
  23. package/node_modules/typebox/build/schema/engine/_context.d.mts +6 -7
  24. package/node_modules/typebox/build/schema/engine/_context.mjs +23 -15
  25. package/node_modules/typebox/build/schema/engine/_functions.d.mts +2 -2
  26. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -1
  27. package/node_modules/typebox/build/schema/engine/_reducer.d.mts +3 -3
  28. package/node_modules/typebox/build/schema/engine/_refine.d.mts +5 -5
  29. package/node_modules/typebox/build/schema/engine/_refine.mjs +4 -7
  30. package/node_modules/typebox/build/schema/engine/_stack.d.mts +34 -16
  31. package/node_modules/typebox/build/schema/engine/_stack.mjs +148 -104
  32. package/node_modules/typebox/build/schema/engine/additionalItems.d.mts +4 -4
  33. package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +8 -8
  34. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +26 -18
  35. package/node_modules/typebox/build/schema/engine/allOf.d.mts +4 -4
  36. package/node_modules/typebox/build/schema/engine/allOf.mjs +3 -3
  37. package/node_modules/typebox/build/schema/engine/anyOf.d.mts +4 -4
  38. package/node_modules/typebox/build/schema/engine/anyOf.mjs +5 -10
  39. package/node_modules/typebox/build/schema/engine/boolean.d.mts +4 -4
  40. package/node_modules/typebox/build/schema/engine/boolean.mjs +2 -6
  41. package/node_modules/typebox/build/schema/engine/const.d.mts +4 -4
  42. package/node_modules/typebox/build/schema/engine/const.mjs +2 -6
  43. package/node_modules/typebox/build/schema/engine/contains.d.mts +4 -4
  44. package/node_modules/typebox/build/schema/engine/contains.mjs +2 -6
  45. package/node_modules/typebox/build/schema/engine/dependencies.d.mts +4 -4
  46. package/node_modules/typebox/build/schema/engine/dependencies.mjs +3 -6
  47. package/node_modules/typebox/build/schema/engine/dependentRequired.d.mts +4 -4
  48. package/node_modules/typebox/build/schema/engine/dependentRequired.mjs +2 -6
  49. package/node_modules/typebox/build/schema/engine/dependentSchemas.d.mts +4 -4
  50. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +4 -4
  51. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +11 -7
  52. package/node_modules/typebox/build/schema/engine/enum.d.mts +4 -4
  53. package/node_modules/typebox/build/schema/engine/enum.mjs +2 -6
  54. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.d.mts +4 -4
  55. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.mjs +2 -6
  56. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.d.mts +4 -4
  57. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.mjs +2 -6
  58. package/node_modules/typebox/build/schema/engine/format.d.mts +4 -4
  59. package/node_modules/typebox/build/schema/engine/format.mjs +2 -6
  60. package/node_modules/typebox/build/schema/engine/if.d.mts +4 -4
  61. package/node_modules/typebox/build/schema/engine/if.mjs +7 -15
  62. package/node_modules/typebox/build/schema/engine/items.d.mts +4 -4
  63. package/node_modules/typebox/build/schema/engine/items.mjs +1 -1
  64. package/node_modules/typebox/build/schema/engine/maxContains.d.mts +4 -4
  65. package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -6
  66. package/node_modules/typebox/build/schema/engine/maxItems.d.mts +4 -4
  67. package/node_modules/typebox/build/schema/engine/maxItems.mjs +2 -6
  68. package/node_modules/typebox/build/schema/engine/maxLength.d.mts +4 -4
  69. package/node_modules/typebox/build/schema/engine/maxLength.mjs +2 -6
  70. package/node_modules/typebox/build/schema/engine/maxProperties.d.mts +4 -4
  71. package/node_modules/typebox/build/schema/engine/maxProperties.mjs +2 -6
  72. package/node_modules/typebox/build/schema/engine/maximum.d.mts +4 -4
  73. package/node_modules/typebox/build/schema/engine/maximum.mjs +2 -6
  74. package/node_modules/typebox/build/schema/engine/minContains.d.mts +4 -4
  75. package/node_modules/typebox/build/schema/engine/minContains.mjs +2 -6
  76. package/node_modules/typebox/build/schema/engine/minItems.d.mts +5 -5
  77. package/node_modules/typebox/build/schema/engine/minItems.mjs +2 -6
  78. package/node_modules/typebox/build/schema/engine/minLength.d.mts +4 -4
  79. package/node_modules/typebox/build/schema/engine/minLength.mjs +2 -6
  80. package/node_modules/typebox/build/schema/engine/minProperties.d.mts +4 -4
  81. package/node_modules/typebox/build/schema/engine/minProperties.mjs +2 -6
  82. package/node_modules/typebox/build/schema/engine/minimum.d.mts +4 -4
  83. package/node_modules/typebox/build/schema/engine/minimum.mjs +2 -6
  84. package/node_modules/typebox/build/schema/engine/multipleOf.d.mts +4 -4
  85. package/node_modules/typebox/build/schema/engine/multipleOf.mjs +2 -6
  86. package/node_modules/typebox/build/schema/engine/not.d.mts +4 -4
  87. package/node_modules/typebox/build/schema/engine/not.mjs +4 -8
  88. package/node_modules/typebox/build/schema/engine/oneOf.d.mts +4 -4
  89. package/node_modules/typebox/build/schema/engine/oneOf.mjs +6 -11
  90. package/node_modules/typebox/build/schema/engine/pattern.d.mts +4 -4
  91. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -7
  92. package/node_modules/typebox/build/schema/engine/patternProperties.d.mts +4 -4
  93. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +1 -1
  94. package/node_modules/typebox/build/schema/engine/prefixItems.d.mts +4 -4
  95. package/node_modules/typebox/build/schema/engine/prefixItems.mjs +1 -1
  96. package/node_modules/typebox/build/schema/engine/properties.d.mts +4 -4
  97. package/node_modules/typebox/build/schema/engine/properties.mjs +1 -1
  98. package/node_modules/typebox/build/schema/engine/propertyNames.d.mts +4 -4
  99. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +4 -10
  100. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +4 -4
  101. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +11 -7
  102. package/node_modules/typebox/build/schema/engine/ref.d.mts +4 -4
  103. package/node_modules/typebox/build/schema/engine/ref.mjs +19 -15
  104. package/node_modules/typebox/build/schema/engine/required.d.mts +4 -4
  105. package/node_modules/typebox/build/schema/engine/required.mjs +2 -6
  106. package/node_modules/typebox/build/schema/engine/schema.d.mts +7 -7
  107. package/node_modules/typebox/build/schema/engine/schema.mjs +137 -133
  108. package/node_modules/typebox/build/schema/engine/type.d.mts +4 -4
  109. package/node_modules/typebox/build/schema/engine/type.mjs +2 -6
  110. package/node_modules/typebox/build/schema/engine/unevaluatedItems.d.mts +4 -4
  111. package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +5 -9
  112. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.d.mts +4 -4
  113. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +5 -9
  114. package/node_modules/typebox/build/schema/engine/uniqueItems.d.mts +4 -4
  115. package/node_modules/typebox/build/schema/engine/uniqueItems.mjs +2 -6
  116. package/node_modules/typebox/build/schema/errors.d.mts +2 -2
  117. package/node_modules/typebox/build/schema/errors.mjs +8 -14
  118. package/node_modules/typebox/build/schema/intern/index.d.mts +1 -0
  119. package/node_modules/typebox/build/schema/intern/index.mjs +1 -0
  120. package/node_modules/typebox/build/schema/intern/intern.d.mts +11 -0
  121. package/node_modules/typebox/build/schema/intern/intern.mjs +293 -0
  122. package/node_modules/typebox/build/schema/meta/draft_2019_09.d.mts +2 -0
  123. package/node_modules/typebox/build/schema/meta/draft_2019_09.mjs +288 -0
  124. package/node_modules/typebox/build/schema/meta/draft_2020_12.d.mts +2 -0
  125. package/node_modules/typebox/build/schema/meta/draft_2020_12.mjs +300 -0
  126. package/node_modules/typebox/build/schema/meta/draft_3.d.mts +2 -0
  127. package/node_modules/typebox/build/schema/meta/draft_3.mjs +143 -0
  128. package/node_modules/typebox/build/schema/meta/draft_4.d.mts +2 -0
  129. package/node_modules/typebox/build/schema/meta/draft_4.mjs +149 -0
  130. package/node_modules/typebox/build/schema/meta/draft_6.d.mts +2 -0
  131. package/node_modules/typebox/build/schema/meta/draft_6.mjs +155 -0
  132. package/node_modules/typebox/build/schema/meta/draft_7.d.mts +2 -0
  133. package/node_modules/typebox/build/schema/meta/draft_7.mjs +172 -0
  134. package/node_modules/typebox/build/schema/meta/index.d.mts +2 -0
  135. package/node_modules/typebox/build/schema/meta/index.mjs +2 -0
  136. package/node_modules/typebox/build/schema/meta/meta.d.mts +9 -0
  137. package/node_modules/typebox/build/schema/meta/meta.mjs +15 -0
  138. package/node_modules/typebox/build/schema/meta/schema.d.mts +6 -0
  139. package/node_modules/typebox/build/schema/meta/schema.mjs +1 -0
  140. package/node_modules/typebox/build/schema/parse.d.mts +1 -0
  141. package/node_modules/typebox/build/schema/parse.mjs +10 -5
  142. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +8 -3
  143. package/node_modules/typebox/build/schema/resolve/resolve.mjs +268 -139
  144. package/node_modules/typebox/build/schema/schema.d.mts +2 -0
  145. package/node_modules/typebox/build/schema/schema.mjs +2 -0
  146. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -12
  147. package/node_modules/typebox/build/value/errors/errors.mjs +2 -7
  148. package/node_modules/typebox/package.json +1 -1
  149. package/node_modules/typebox/readme.md +59 -89
  150. package/node_modules/zod/README.md +29 -2
  151. package/node_modules/zod/compile.cjs +96 -0
  152. package/node_modules/zod/compile.d.cts +1 -0
  153. package/node_modules/zod/compile.d.ts +1 -0
  154. package/node_modules/zod/compile.js +52 -0
  155. package/node_modules/zod/index.cjs +21 -2
  156. package/node_modules/zod/index.d.cts +1 -2
  157. package/node_modules/zod/index.d.ts +1 -2
  158. package/node_modules/zod/index.js +5 -2
  159. package/node_modules/zod/locales/index.cjs +19 -0
  160. package/node_modules/zod/mini/index.cjs +19 -0
  161. package/node_modules/zod/package.json +20 -8
  162. package/node_modules/zod/src/compile.ts +56 -0
  163. package/node_modules/zod/src/index.ts +5 -2
  164. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  165. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  166. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  167. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  168. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  169. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  170. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  171. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  172. package/node_modules/zod/src/v3/types.ts +5 -5
  173. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  174. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  175. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  176. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  177. package/node_modules/zod/src/v4/classic/external.ts +14 -9
  178. package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
  179. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  180. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  181. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  182. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  183. package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
  184. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  185. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  186. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
  187. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  188. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  189. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  190. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  191. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
  192. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  193. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  194. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  195. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  196. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  197. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  198. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  199. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  200. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
  201. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  202. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  203. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  204. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
  205. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  206. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  207. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  208. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  209. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  210. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  211. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  212. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  213. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  214. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  215. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  216. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  217. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  218. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  219. package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
  220. package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
  221. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  222. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  223. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  224. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  225. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  226. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  227. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  228. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  229. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
  230. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  231. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  232. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  233. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  234. package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
  235. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  236. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
  237. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
  238. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  239. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  240. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  241. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  242. package/node_modules/zod/src/v4/core/api.ts +87 -35
  243. package/node_modules/zod/src/v4/core/checks.ts +119 -146
  244. package/node_modules/zod/src/v4/core/compile.ts +2313 -0
  245. package/node_modules/zod/src/v4/core/core.ts +99 -22
  246. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  247. package/node_modules/zod/src/v4/core/errors.ts +113 -25
  248. package/node_modules/zod/src/v4/core/index.ts +3 -0
  249. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  250. package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
  251. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  252. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  253. package/node_modules/zod/src/v4/core/parse.ts +164 -50
  254. package/node_modules/zod/src/v4/core/regexes.ts +42 -15
  255. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  256. package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
  257. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  258. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  259. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  260. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  261. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  262. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  263. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  264. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  265. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  266. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  267. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  268. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  269. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  270. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  271. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  272. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  273. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  274. package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
  275. package/node_modules/zod/src/v4/core/util.ts +454 -157
  276. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  277. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  278. package/node_modules/zod/src/v4/index.ts +3 -3
  279. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  280. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  281. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  282. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  283. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  284. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  285. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  286. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  287. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  288. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  289. package/node_modules/zod/src/v4/locales/el.ts +3 -0
  290. package/node_modules/zod/src/v4/locales/en.ts +17 -4
  291. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  292. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  293. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  294. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  295. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  296. package/node_modules/zod/src/v4/locales/fr.ts +21 -14
  297. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  298. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  299. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  300. package/node_modules/zod/src/v4/locales/hr.ts +4 -0
  301. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  302. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  303. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  304. package/node_modules/zod/src/v4/locales/index.ts +11 -0
  305. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  306. package/node_modules/zod/src/v4/locales/it.ts +5 -0
  307. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  308. package/node_modules/zod/src/v4/locales/ka.ts +5 -0
  309. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  310. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  311. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  312. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  313. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  314. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  315. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  316. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  317. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  318. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  319. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  320. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  321. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  322. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  323. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  324. package/node_modules/zod/src/v4/locales/ro.ts +3 -0
  325. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  326. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  327. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  328. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  329. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  330. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  331. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  332. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  333. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  334. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  335. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  336. package/node_modules/zod/src/v4/locales/uz.ts +3 -0
  337. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  338. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  339. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  340. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  341. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  342. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  343. package/node_modules/zod/src/v4/mini/external.ts +12 -1
  344. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  345. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  346. package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
  347. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  348. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  349. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  350. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  351. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  352. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  353. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  354. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  355. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  356. package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
  357. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  358. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  359. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  360. package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
  361. package/node_modules/zod/v3/ZodError.cjs +41 -12
  362. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  363. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  364. package/node_modules/zod/v3/ZodError.js +22 -12
  365. package/node_modules/zod/v3/errors.cjs +19 -0
  366. package/node_modules/zod/v3/external.cjs +19 -0
  367. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  368. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  369. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  370. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  371. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  372. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  373. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  374. package/node_modules/zod/v3/index.cjs +19 -0
  375. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  376. package/node_modules/zod/v3/types.cjs +26 -5
  377. package/node_modules/zod/v3/types.js +7 -5
  378. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  379. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  380. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  381. package/node_modules/zod/v4/classic/checks.js +1 -1
  382. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  383. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  384. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  385. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  386. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  387. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  388. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  389. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  390. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  391. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  392. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  393. package/node_modules/zod/v4/classic/errors.js +43 -34
  394. package/node_modules/zod/v4/classic/external.cjs +51 -27
  395. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  396. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  397. package/node_modules/zod/v4/classic/external.js +5 -8
  398. package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
  399. package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
  400. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  401. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  402. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  403. package/node_modules/zod/v4/classic/in-out.js +36 -0
  404. package/node_modules/zod/v4/classic/index.cjs +21 -2
  405. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  406. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  407. package/node_modules/zod/v4/classic/index.js +2 -2
  408. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  409. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  410. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  411. package/node_modules/zod/v4/classic/iso.js +2 -17
  412. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  413. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  414. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  415. package/node_modules/zod/v4/classic/parse.js +1 -0
  416. package/node_modules/zod/v4/classic/schemas.cjs +591 -426
  417. package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
  418. package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
  419. package/node_modules/zod/v4/classic/schemas.js +564 -424
  420. package/node_modules/zod/v4/core/api.cjs +66 -24
  421. package/node_modules/zod/v4/core/api.d.cts +22 -12
  422. package/node_modules/zod/v4/core/api.d.ts +22 -12
  423. package/node_modules/zod/v4/core/api.js +44 -24
  424. package/node_modules/zod/v4/core/checks.cjs +88 -128
  425. package/node_modules/zod/v4/core/checks.d.cts +29 -13
  426. package/node_modules/zod/v4/core/checks.d.ts +29 -13
  427. package/node_modules/zod/v4/core/checks.js +68 -127
  428. package/node_modules/zod/v4/core/compile.cjs +1908 -0
  429. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  430. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  431. package/node_modules/zod/v4/core/compile.js +1858 -0
  432. package/node_modules/zod/v4/core/core.cjs +101 -19
  433. package/node_modules/zod/v4/core/core.d.cts +16 -4
  434. package/node_modules/zod/v4/core/core.d.ts +16 -4
  435. package/node_modules/zod/v4/core/core.js +83 -20
  436. package/node_modules/zod/v4/core/doc.cjs +31 -9
  437. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  438. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  439. package/node_modules/zod/v4/core/doc.js +12 -9
  440. package/node_modules/zod/v4/core/errors.cjs +126 -25
  441. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  442. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  443. package/node_modules/zod/v4/core/errors.js +107 -25
  444. package/node_modules/zod/v4/core/index.cjs +24 -1
  445. package/node_modules/zod/v4/core/index.d.cts +3 -0
  446. package/node_modules/zod/v4/core/index.d.ts +3 -0
  447. package/node_modules/zod/v4/core/index.js +3 -0
  448. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  449. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  450. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  451. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  452. package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
  453. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  454. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  455. package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
  456. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  457. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  458. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  459. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  460. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  461. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  462. package/node_modules/zod/v4/core/memoizer.js +311 -0
  463. package/node_modules/zod/v4/core/parse.cjs +148 -46
  464. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  465. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  466. package/node_modules/zod/v4/core/parse.js +127 -45
  467. package/node_modules/zod/v4/core/regexes.cjs +54 -17
  468. package/node_modules/zod/v4/core/regexes.d.cts +5 -0
  469. package/node_modules/zod/v4/core/regexes.d.ts +5 -0
  470. package/node_modules/zod/v4/core/regexes.js +32 -15
  471. package/node_modules/zod/v4/core/registries.cjs +19 -0
  472. package/node_modules/zod/v4/core/registries.js +2 -2
  473. package/node_modules/zod/v4/core/schemas.cjs +785 -386
  474. package/node_modules/zod/v4/core/schemas.d.cts +123 -34
  475. package/node_modules/zod/v4/core/schemas.d.ts +123 -34
  476. package/node_modules/zod/v4/core/schemas.js +753 -386
  477. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  478. package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
  479. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  480. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  481. package/node_modules/zod/v4/core/to-json-schema.js +247 -44
  482. package/node_modules/zod/v4/core/util.cjs +372 -157
  483. package/node_modules/zod/v4/core/util.d.cts +79 -1
  484. package/node_modules/zod/v4/core/util.d.ts +79 -1
  485. package/node_modules/zod/v4/core/util.js +341 -156
  486. package/node_modules/zod/v4/core/versions.cjs +21 -2
  487. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  488. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  489. package/node_modules/zod/v4/core/versions.js +2 -2
  490. package/node_modules/zod/v4/core/visit.cjs +214 -0
  491. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  492. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  493. package/node_modules/zod/v4/core/visit.js +169 -0
  494. package/node_modules/zod/v4/index.cjs +34 -5
  495. package/node_modules/zod/v4/index.d.cts +2 -2
  496. package/node_modules/zod/v4/index.d.ts +2 -2
  497. package/node_modules/zod/v4/index.js +3 -2
  498. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  499. package/node_modules/zod/v4/locales/ar.js +5 -0
  500. package/node_modules/zod/v4/locales/az.cjs +5 -0
  501. package/node_modules/zod/v4/locales/az.js +5 -0
  502. package/node_modules/zod/v4/locales/be.cjs +12 -0
  503. package/node_modules/zod/v4/locales/be.js +12 -0
  504. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  505. package/node_modules/zod/v4/locales/bg.js +5 -0
  506. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  507. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  508. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  509. package/node_modules/zod/v4/locales/bn.js +113 -0
  510. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  511. package/node_modules/zod/v4/locales/ca.js +5 -0
  512. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  513. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  514. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  515. package/node_modules/zod/v4/locales/ckb.js +133 -0
  516. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  517. package/node_modules/zod/v4/locales/cs.js +5 -0
  518. package/node_modules/zod/v4/locales/da.cjs +7 -2
  519. package/node_modules/zod/v4/locales/da.js +7 -2
  520. package/node_modules/zod/v4/locales/de.cjs +5 -0
  521. package/node_modules/zod/v4/locales/de.js +5 -0
  522. package/node_modules/zod/v4/locales/el.cjs +3 -0
  523. package/node_modules/zod/v4/locales/el.js +3 -0
  524. package/node_modules/zod/v4/locales/en.cjs +16 -4
  525. package/node_modules/zod/v4/locales/en.js +16 -4
  526. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  527. package/node_modules/zod/v4/locales/eo.js +5 -0
  528. package/node_modules/zod/v4/locales/es.cjs +4 -0
  529. package/node_modules/zod/v4/locales/es.js +4 -0
  530. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  531. package/node_modules/zod/v4/locales/fa.js +5 -0
  532. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  533. package/node_modules/zod/v4/locales/fi.js +5 -0
  534. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  535. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  536. package/node_modules/zod/v4/locales/fr.cjs +18 -14
  537. package/node_modules/zod/v4/locales/fr.js +18 -14
  538. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  539. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  540. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  541. package/node_modules/zod/v4/locales/gu.js +113 -0
  542. package/node_modules/zod/v4/locales/he.cjs +7 -0
  543. package/node_modules/zod/v4/locales/he.js +7 -0
  544. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  545. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  546. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  547. package/node_modules/zod/v4/locales/hi.js +111 -0
  548. package/node_modules/zod/v4/locales/hr.cjs +4 -0
  549. package/node_modules/zod/v4/locales/hr.js +4 -0
  550. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  551. package/node_modules/zod/v4/locales/hu.js +5 -0
  552. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  553. package/node_modules/zod/v4/locales/hy.js +11 -0
  554. package/node_modules/zod/v4/locales/id.cjs +5 -0
  555. package/node_modules/zod/v4/locales/id.js +5 -0
  556. package/node_modules/zod/v4/locales/index.cjs +43 -2
  557. package/node_modules/zod/v4/locales/index.d.cts +11 -0
  558. package/node_modules/zod/v4/locales/index.d.ts +11 -0
  559. package/node_modules/zod/v4/locales/index.js +11 -0
  560. package/node_modules/zod/v4/locales/is.cjs +5 -0
  561. package/node_modules/zod/v4/locales/is.js +5 -0
  562. package/node_modules/zod/v4/locales/it.cjs +5 -0
  563. package/node_modules/zod/v4/locales/it.js +5 -0
  564. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  565. package/node_modules/zod/v4/locales/ja.js +5 -0
  566. package/node_modules/zod/v4/locales/ka.cjs +5 -0
  567. package/node_modules/zod/v4/locales/ka.js +5 -0
  568. package/node_modules/zod/v4/locales/km.cjs +5 -0
  569. package/node_modules/zod/v4/locales/km.js +5 -0
  570. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  571. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  572. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  573. package/node_modules/zod/v4/locales/kn.js +116 -0
  574. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  575. package/node_modules/zod/v4/locales/ko.js +5 -0
  576. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  577. package/node_modules/zod/v4/locales/lt.js +4 -0
  578. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  579. package/node_modules/zod/v4/locales/mk.js +5 -0
  580. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  581. package/node_modules/zod/v4/locales/ms.js +5 -0
  582. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  583. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  584. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  585. package/node_modules/zod/v4/locales/ne.js +111 -0
  586. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  587. package/node_modules/zod/v4/locales/nl.js +5 -0
  588. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  589. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  590. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  591. package/node_modules/zod/v4/locales/nn.js +113 -0
  592. package/node_modules/zod/v4/locales/no.cjs +7 -2
  593. package/node_modules/zod/v4/locales/no.js +7 -2
  594. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  595. package/node_modules/zod/v4/locales/ota.js +5 -0
  596. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  597. package/node_modules/zod/v4/locales/pl.js +5 -0
  598. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  599. package/node_modules/zod/v4/locales/ps.js +5 -0
  600. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  601. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  602. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  603. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  604. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  605. package/node_modules/zod/v4/locales/pt.js +89 -55
  606. package/node_modules/zod/v4/locales/ro.cjs +3 -0
  607. package/node_modules/zod/v4/locales/ro.js +3 -0
  608. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  609. package/node_modules/zod/v4/locales/ru.js +12 -0
  610. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  611. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  612. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  613. package/node_modules/zod/v4/locales/sk.js +116 -0
  614. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  615. package/node_modules/zod/v4/locales/sl.js +5 -0
  616. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  617. package/node_modules/zod/v4/locales/sv.js +7 -2
  618. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  619. package/node_modules/zod/v4/locales/ta.js +5 -0
  620. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  621. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  622. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  623. package/node_modules/zod/v4/locales/tg.js +117 -0
  624. package/node_modules/zod/v4/locales/th.cjs +5 -0
  625. package/node_modules/zod/v4/locales/th.js +5 -0
  626. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  627. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  628. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  629. package/node_modules/zod/v4/locales/tk.js +107 -0
  630. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  631. package/node_modules/zod/v4/locales/tr.js +5 -0
  632. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  633. package/node_modules/zod/v4/locales/uk.js +5 -0
  634. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  635. package/node_modules/zod/v4/locales/ur.js +5 -0
  636. package/node_modules/zod/v4/locales/uz.cjs +3 -0
  637. package/node_modules/zod/v4/locales/uz.js +3 -0
  638. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  639. package/node_modules/zod/v4/locales/vi.js +5 -0
  640. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  641. package/node_modules/zod/v4/locales/yo.js +5 -0
  642. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  643. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  644. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  645. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  646. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  647. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  648. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  649. package/node_modules/zod/v4/mini/checks.js +1 -1
  650. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  651. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  652. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  653. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  654. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  655. package/node_modules/zod/v4/mini/external.cjs +33 -1
  656. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  657. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  658. package/node_modules/zod/v4/mini/external.js +3 -1
  659. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  660. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  661. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  662. package/node_modules/zod/v4/mini/in-out.js +36 -0
  663. package/node_modules/zod/v4/mini/index.cjs +19 -0
  664. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  665. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  666. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  667. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  668. package/node_modules/zod/v4/mini/parse.js +1 -1
  669. package/node_modules/zod/v4/mini/schemas.cjs +117 -53
  670. package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
  671. package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
  672. package/node_modules/zod/v4/mini/schemas.js +92 -51
  673. package/node_modules/zod/v4-mini/index.cjs +19 -0
  674. package/openclaw.plugin.json +15 -1
  675. package/package.json +9 -7
  676. package/node_modules/zod/src/v4/core/config.ts +0 -15
@@ -1,18 +1,130 @@
1
1
  import type * as checks from "./checks.js";
2
2
  import type * as JSONSchema from "./json-schema.js";
3
+ import * as regexes from "./regexes.js";
3
4
  import type { $ZodRegistry } from "./registries.js";
5
+ import { base64Charset, base64urlCharset } from "./schemas.js";
4
6
  import type * as schemas from "./schemas.js";
5
7
  import {
8
+ type ProcessParams,
6
9
  type Processor,
7
10
  type RegistryToJSONSchemaParams,
11
+ type Seen,
12
+ type ToJSONSchemaContext,
8
13
  type ToJSONSchemaParams,
9
14
  type ZodStandardJSONSchemaPayload,
10
15
  extractDefs,
11
16
  finalize,
17
+ handleUnrepresentable,
12
18
  initializeContext,
13
- process,
19
+ processSchema,
14
20
  } from "./to-json-schema.js";
15
- import { getEnumValues } from "./util.js";
21
+ import { BIGINT_FORMAT_RANGES, NUMBER_FORMAT_RANGES, assignProp, getEnumValues } from "./util.js";
22
+
23
+ // ==================== CHECK AGGREGATION ====================
24
+
25
+ // constraint metadata comes from folding `def.checks` here, not from trusting `_zod.bag`: the bag is written by each check's own `onattach` in chain order, which has repeatedly produced order-dependent and lossy values (#6550). runtime checks are a conjunction, so every merge below is the conjunction's — tightest bound wins, patterns union, divisors collect, mime lists intersect
26
+ type Bound = number | bigint | Date;
27
+
28
+ interface CheckAggregate<N extends Bound = Bound> {
29
+ minimum?: N;
30
+ maximum?: N;
31
+ exclusiveMinimum?: N;
32
+ exclusiveMaximum?: N;
33
+ multipleOf?: number[];
34
+ format?: string;
35
+ // ORed across formats: any integer format keeps the conjunction integer, whatever format lands last
36
+ isInt?: boolean;
37
+ patterns?: Set<RegExp>;
38
+ mime?: string[];
39
+ contentEncoding?: string;
40
+ // a datetime that drops the offset or the seconds accepts what `date-time` forbids, so the keyword is withheld
41
+ laxFormat?: boolean;
42
+ }
43
+
44
+ const narrowMin = (agg: CheckAggregate, key: "minimum" | "exclusiveMinimum", value: Bound): void => {
45
+ if (agg[key] === undefined || value > agg[key]) agg[key] = value;
46
+ };
47
+ const narrowMax = (agg: CheckAggregate, key: "maximum" | "exclusiveMaximum", value: Bound): void => {
48
+ if (agg[key] === undefined || value < agg[key]) agg[key] = value;
49
+ };
50
+ const narrowBoth = (agg: CheckAggregate, value: number): void => {
51
+ narrowMin(agg, "minimum", value);
52
+ narrowMax(agg, "maximum", value);
53
+ };
54
+ const addDivisor = (agg: CheckAggregate, value: number): void => {
55
+ agg.multipleOf ??= [];
56
+ if (!agg.multipleOf.includes(value)) agg.multipleOf.push(value);
57
+ };
58
+ const addPattern = (agg: CheckAggregate, pattern: RegExp): void => {
59
+ agg.patterns ??= new Set();
60
+ agg.patterns.add(pattern);
61
+ };
62
+ const intersectMime = (agg: CheckAggregate, mime: string[]): void => {
63
+ agg.mime = agg.mime ? agg.mime.filter((m) => mime.includes(m)) : [...mime];
64
+ };
65
+ // last-wins, matching the bag's historical write order; the flag keeps an integer format from being lost to a later float one
66
+ const setFormat = (agg: CheckAggregate, format: string): void => {
67
+ agg.format = format;
68
+ if (format.includes("int")) agg.isInt = true;
69
+ };
70
+
71
+ type Contributor = (agg: CheckAggregate, def: any) => void;
72
+ const minContributor: Contributor = (agg, def) => narrowMin(agg, "minimum", def.minimum);
73
+ const maxContributor: Contributor = (agg, def) => narrowMax(agg, "maximum", def.maximum);
74
+ const formatContributor =
75
+ (ranges: Record<string, [Bound, Bound]>): Contributor =>
76
+ (agg, def) => {
77
+ setFormat(agg, def.format);
78
+ const [minimum, maximum] = ranges[def.format]!;
79
+ narrowMin(agg, "minimum", minimum);
80
+ narrowMax(agg, "maximum", maximum);
81
+ };
82
+
83
+ const contributors: Record<string, Contributor> = {
84
+ greater_than: (agg, def) => narrowMin(agg, def.inclusive ? "minimum" : "exclusiveMinimum", def.value),
85
+ less_than: (agg, def) => narrowMax(agg, def.inclusive ? "maximum" : "exclusiveMaximum", def.value),
86
+ multiple_of: (agg, def) => addDivisor(agg, def.value),
87
+ number_format: formatContributor(NUMBER_FORMAT_RANGES),
88
+ bigint_format: formatContributor(BIGINT_FORMAT_RANGES),
89
+ min_length: minContributor,
90
+ max_length: maxContributor,
91
+ length_equals: (agg, def) => narrowBoth(agg, def.length),
92
+ min_size: minContributor,
93
+ max_size: maxContributor,
94
+ size_equals: (agg, def) => narrowBoth(agg, def.size),
95
+ string_format: (agg, def) => {
96
+ setFormat(agg, def.format);
97
+ if (def.pattern) addPattern(agg, def.pattern);
98
+ if (def.format === "base64" || def.format === "base64url") agg.contentEncoding = def.format;
99
+ if (def.local || def.precision === -1) agg.laxFormat = true;
100
+ },
101
+ mime_type: (agg, def) => intersectMime(agg, def.mime),
102
+ };
103
+
104
+ export function aggregateChecks<N extends Bound = Bound>(schema: schemas.$ZodType): CheckAggregate<N> {
105
+ const agg: CheckAggregate = {};
106
+ const def = schema._zod.def;
107
+ // a format schema is its own first check, same rule as $ZodType init
108
+ const list: checks.$ZodCheck[] = schema._zod.traits.has("$ZodCheck")
109
+ ? [schema as unknown as checks.$ZodCheck, ...(def.checks ?? [])]
110
+ : (def.checks ?? []);
111
+ for (const ch of list) contributors[ch._zod.def.check]?.(agg, ch._zod.def);
112
+
113
+ // reconcile with the bag so third-party onattach contributions still land; first-party residue is never tighter than the fold, so merging it back is idempotent for one and additive for the other
114
+ const bag = schema._zod.bag as Omit<CheckAggregate, "multipleOf"> & { multipleOf?: number };
115
+ if (bag.minimum !== undefined) narrowMin(agg, "minimum", bag.minimum);
116
+ if (bag.exclusiveMinimum !== undefined) narrowMin(agg, "exclusiveMinimum", bag.exclusiveMinimum);
117
+ if (bag.maximum !== undefined) narrowMax(agg, "maximum", bag.maximum);
118
+ if (bag.exclusiveMaximum !== undefined) narrowMax(agg, "exclusiveMaximum", bag.exclusiveMaximum);
119
+ if (bag.multipleOf !== undefined) addDivisor(agg, bag.multipleOf);
120
+ if (bag.format !== undefined) {
121
+ agg.format ??= bag.format;
122
+ if (bag.format.includes("int")) agg.isInt = true;
123
+ }
124
+ if (bag.mime) intersectMime(agg, bag.mime);
125
+ for (const pattern of bag.patterns ?? []) addPattern(agg, pattern);
126
+ return agg as CheckAggregate<N>;
127
+ }
16
128
 
17
129
  const formatMap: Partial<Record<checks.$ZodStringFormats, string | undefined>> = {
18
130
  guid: "uuid",
@@ -24,11 +136,17 @@ const formatMap: Partial<Record<checks.$ZodStringFormats, string | undefined>> =
24
136
 
25
137
  // ==================== SIMPLE TYPE PROCESSORS ====================
26
138
 
139
+ // the runtime patterns are lax so parse paths never overflow the regex stack; the emitted schema swaps in the exact block forms, which zod itself never executes
140
+ const exactPatterns: Map<RegExp, RegExp> = new Map([
141
+ [base64Charset, regexes.base64],
142
+ [base64urlCharset, regexes.base64url],
143
+ ]);
144
+ const exactPattern = (p: RegExp): RegExp => exactPatterns.get(p) ?? p;
145
+
27
146
  export const stringProcessor: Processor<schemas.$ZodString> = (schema, ctx, _json, _params) => {
28
147
  const json = _json as JSONSchema.StringSchema;
29
148
  json.type = "string";
30
- const { minimum, maximum, format, patterns, contentEncoding } = schema._zod
31
- .bag as schemas.$ZodStringInternals<unknown>["bag"];
149
+ const { minimum, maximum, format, patterns, contentEncoding, laxFormat } = aggregateChecks(schema);
32
150
  if (typeof minimum === "number") json.minLength = minimum;
33
151
  if (typeof maximum === "number") json.maxLength = maximum;
34
152
  // custom pattern overrides format
@@ -36,19 +154,18 @@ export const stringProcessor: Processor<schemas.$ZodString> = (schema, ctx, _jso
36
154
  json.format = formatMap[format as checks.$ZodStringFormats] ?? format;
37
155
  if (json.format === "") delete json.format; // empty format is not valid
38
156
 
39
- // JSON Schema format: "time" requires a full time with offset or Z
40
- // z.iso.time() does not include timezone information, so format: "time" should never be used
41
- if (format === "time") {
157
+ // `z.iso.time()` is never full-time, and `laxFormat` carries the datetime shapes that also accept what their keyword forbids
158
+ if (format === "time" || laxFormat) {
42
159
  delete json.format;
43
160
  }
44
161
  }
45
162
  if (contentEncoding) json.contentEncoding = contentEncoding;
46
163
  if (patterns && patterns.size > 0) {
47
- const regexes = [...patterns];
48
- if (regexes.length === 1) json.pattern = regexes[0]!.source;
49
- else if (regexes.length > 1) {
164
+ const patternList = [...patterns].map(exactPattern);
165
+ if (patternList.length === 1) json.pattern = patternList[0]!.source;
166
+ else if (patternList.length > 1) {
50
167
  json.allOf = [
51
- ...regexes.map((regex) => ({
168
+ ...patternList.map((regex) => ({
52
169
  ...(ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0"
53
170
  ? ({ type: "string" } as const)
54
171
  : {}),
@@ -59,11 +176,10 @@ export const stringProcessor: Processor<schemas.$ZodString> = (schema, ctx, _jso
59
176
  }
60
177
  };
61
178
 
62
- export const numberProcessor: Processor<schemas.$ZodNumber> = (schema, ctx, _json, _params) => {
179
+ export const numberProcessor: Processor<schemas.$ZodNumber> = (schema, ctx, _json, params) => {
63
180
  const json = _json as JSONSchema.NumberSchema | JSONSchema.IntegerSchema;
64
- const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;
65
- if (typeof format === "string" && format.includes("int")) json.type = "integer";
66
- else json.type = "number";
181
+ const { minimum, maximum, multipleOf, exclusiveMaximum, exclusiveMinimum, isInt } = aggregateChecks<number>(schema);
182
+ json.type = isInt ? "integer" : "number";
67
183
 
68
184
  // when both minimum and exclusiveMinimum exist, pick the more restrictive one
69
185
  const exMin = typeof exclusiveMinimum === "number" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);
@@ -92,23 +208,37 @@ export const numberProcessor: Processor<schemas.$ZodNumber> = (schema, ctx, _jso
92
208
  json.maximum = maximum;
93
209
  }
94
210
 
95
- if (typeof multipleOf === "number") json.multipleOf = multipleOf;
211
+ if (multipleOf) {
212
+ // JSON Schema requires a divisor strictly greater than zero, and a non-finite one does not survive JSON at all. A negative divisor accepts exactly what its absolute value accepts, so it still maps; zero, NaN and Infinity have no keyword form.
213
+ const divisors = new Set<number>();
214
+ for (const divisor of multipleOf) {
215
+ if (Number.isFinite(divisor) && divisor !== 0) divisors.add(Math.abs(divisor));
216
+ else
217
+ handleUnrepresentable(
218
+ schema,
219
+ ctx,
220
+ json,
221
+ params,
222
+ `A multipleOf divisor of ${divisor} cannot be represented in JSON Schema`
223
+ );
224
+ }
225
+ // chained divisors are a conjunction the keyword cannot carry alone, so extras ride an allOf, same as stacked patterns
226
+ const [first, ...rest] = divisors;
227
+ if (first !== undefined) json.multipleOf = first;
228
+ if (rest.length) json.allOf = [...(json.allOf ?? []), ...rest.map((m) => ({ multipleOf: m }))];
229
+ }
96
230
  };
97
231
 
98
232
  export const booleanProcessor: Processor<schemas.$ZodBoolean> = (_schema, _ctx, json, _params) => {
99
233
  (json as JSONSchema.BooleanSchema).type = "boolean";
100
234
  };
101
235
 
102
- export const bigintProcessor: Processor<schemas.$ZodBigInt> = (_schema, ctx, _json, _params) => {
103
- if (ctx.unrepresentable === "throw") {
104
- throw new Error("BigInt cannot be represented in JSON Schema");
105
- }
236
+ export const bigintProcessor: Processor<schemas.$ZodBigInt> = (schema, ctx, json, params) => {
237
+ handleUnrepresentable(schema, ctx, json, params, "BigInt cannot be represented in JSON Schema");
106
238
  };
107
239
 
108
- export const symbolProcessor: Processor<schemas.$ZodSymbol> = (_schema, ctx, _json, _params) => {
109
- if (ctx.unrepresentable === "throw") {
110
- throw new Error("Symbols cannot be represented in JSON Schema");
111
- }
240
+ export const symbolProcessor: Processor<schemas.$ZodSymbol> = (schema, ctx, json, params) => {
241
+ handleUnrepresentable(schema, ctx, json, params, "Symbols cannot be represented in JSON Schema");
112
242
  };
113
243
 
114
244
  export const nullProcessor: Processor<schemas.$ZodNull> = (_schema, ctx, json, _params) => {
@@ -121,16 +251,12 @@ export const nullProcessor: Processor<schemas.$ZodNull> = (_schema, ctx, json, _
121
251
  }
122
252
  };
123
253
 
124
- export const undefinedProcessor: Processor<schemas.$ZodUndefined> = (_schema, ctx, _json, _params) => {
125
- if (ctx.unrepresentable === "throw") {
126
- throw new Error("Undefined cannot be represented in JSON Schema");
127
- }
254
+ export const undefinedProcessor: Processor<schemas.$ZodUndefined> = (schema, ctx, json, params) => {
255
+ handleUnrepresentable(schema, ctx, json, params, "Undefined cannot be represented in JSON Schema");
128
256
  };
129
257
 
130
- export const voidProcessor: Processor<schemas.$ZodVoid> = (_schema, ctx, _json, _params) => {
131
- if (ctx.unrepresentable === "throw") {
132
- throw new Error("Void cannot be represented in JSON Schema");
133
- }
258
+ export const voidProcessor: Processor<schemas.$ZodVoid> = (schema, ctx, json, params) => {
259
+ handleUnrepresentable(schema, ctx, json, params, "Void cannot be represented in JSON Schema");
134
260
  };
135
261
 
136
262
  export const neverProcessor: Processor<schemas.$ZodNever> = (_schema, _ctx, json, _params) => {
@@ -145,37 +271,46 @@ export const unknownProcessor: Processor<schemas.$ZodUnknown> = (_schema, _ctx,
145
271
  // empty schema accepts anything
146
272
  };
147
273
 
148
- export const dateProcessor: Processor<schemas.$ZodDate> = (_schema, ctx, _json, _params) => {
149
- if (ctx.unrepresentable === "throw") {
150
- throw new Error("Date cannot be represented in JSON Schema");
151
- }
274
+ export const dateProcessor: Processor<schemas.$ZodDate> = (schema, ctx, json, params) => {
275
+ handleUnrepresentable(schema, ctx, json, params, "Date cannot be represented in JSON Schema");
152
276
  };
153
277
 
154
278
  export const enumProcessor: Processor<schemas.$ZodEnum> = (schema, _ctx, json, _params) => {
155
279
  const def = schema._zod.def as schemas.$ZodEnumDef;
156
280
  const values = getEnumValues(def.entries);
281
+
282
+ // an empty enum accepts nothing, same as z.never()
283
+ if (values.length === 0) {
284
+ json.not = {};
285
+ return;
286
+ }
287
+
157
288
  // Number enums can have both string and number values
158
289
  if (values.every((v) => typeof v === "number")) json.type = "number";
159
290
  if (values.every((v) => typeof v === "string")) json.type = "string";
160
291
  json.enum = values;
161
292
  };
162
293
 
163
- export const literalProcessor: Processor<schemas.$ZodLiteral> = (schema, ctx, json, _params) => {
294
+ export const literalProcessor: Processor<schemas.$ZodLiteral> = (schema, ctx, json, params) => {
164
295
  const def = schema._zod.def as schemas.$ZodLiteralDef<any>;
296
+
297
+ // a literal with no values accepts nothing, same as z.never()
298
+ if (def.values.length === 0) {
299
+ json.not = {};
300
+ return;
301
+ }
302
+
165
303
  const vals: (string | number | boolean | null)[] = [];
166
304
  for (const val of def.values) {
167
305
  if (val === undefined) {
168
- if (ctx.unrepresentable === "throw") {
169
- throw new Error("Literal `undefined` cannot be represented in JSON Schema");
170
- } else {
171
- // do not add to vals
172
- }
306
+ // a custom schema replaces the whole literal, so there is nothing left to accumulate
307
+ if (handleUnrepresentable(schema, ctx, json, params, "Literal `undefined` cannot be represented in JSON Schema"))
308
+ return;
309
+ // otherwise do not add to vals
173
310
  } else if (typeof val === "bigint") {
174
- if (ctx.unrepresentable === "throw") {
175
- throw new Error("BigInt literals cannot be represented in JSON Schema");
176
- } else {
177
- vals.push(Number(val));
178
- }
311
+ if (handleUnrepresentable(schema, ctx, json, params, "BigInt literals cannot be represented in JSON Schema"))
312
+ return;
313
+ vals.push(Number(val));
179
314
  } else {
180
315
  vals.push(val);
181
316
  }
@@ -199,10 +334,8 @@ export const literalProcessor: Processor<schemas.$ZodLiteral> = (schema, ctx, js
199
334
  }
200
335
  };
201
336
 
202
- export const nanProcessor: Processor<schemas.$ZodNaN> = (_schema, ctx, _json, _params) => {
203
- if (ctx.unrepresentable === "throw") {
204
- throw new Error("NaN cannot be represented in JSON Schema");
205
- }
337
+ export const nanProcessor: Processor<schemas.$ZodNaN> = (schema, ctx, json, params) => {
338
+ handleUnrepresentable(schema, ctx, json, params, "NaN cannot be represented in JSON Schema");
206
339
  };
207
340
 
208
341
  export const templateLiteralProcessor: Processor<schemas.$ZodTemplateLiteral> = (schema, _ctx, json, _params) => {
@@ -215,60 +348,43 @@ export const templateLiteralProcessor: Processor<schemas.$ZodTemplateLiteral> =
215
348
 
216
349
  export const fileProcessor: Processor<schemas.$ZodFile> = (schema, _ctx, json, _params) => {
217
350
  const _json = json as JSONSchema.StringSchema;
218
- const file: JSONSchema.StringSchema = {
219
- type: "string",
220
- format: "binary",
221
- contentEncoding: "binary",
222
- };
351
+ _json.type = "string";
352
+ _json.format = "binary";
353
+ _json.contentEncoding = "binary";
223
354
 
224
- const { minimum, maximum, mime } = schema._zod.bag as schemas.$ZodFileInternals["bag"];
225
- if (minimum !== undefined) file.minLength = minimum;
226
- if (maximum !== undefined) file.maxLength = maximum;
227
- if (mime) {
228
- if (mime.length === 1) {
229
- file.contentMediaType = mime[0]!;
230
- Object.assign(_json, file);
231
- } else {
232
- Object.assign(_json, file); // shared props at root
233
- _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs
234
- }
235
- } else {
236
- Object.assign(_json, file);
237
- }
355
+ const { minimum, maximum, mime } = aggregateChecks<number>(schema);
356
+ if (minimum !== undefined) _json.minLength = minimum;
357
+ if (maximum !== undefined) _json.maxLength = maximum;
358
+ if (!mime) return;
359
+ // an empty intersection means the mime checks share no value, so nothing passes at runtime; `anyOf` must be non-empty, so the false schema is `not: {}`
360
+ if (mime.length === 0) _json.not = {};
361
+ else if (mime.length === 1) _json.contentMediaType = mime[0]!;
362
+ // only contentMediaType differs, so the shared props stay at the root
363
+ else _json.anyOf = mime.map((m) => ({ contentMediaType: m }));
238
364
  };
239
365
 
240
366
  export const successProcessor: Processor<schemas.$ZodSuccess> = (_schema, _ctx, json, _params) => {
241
367
  (json as JSONSchema.BooleanSchema).type = "boolean";
242
368
  };
243
369
 
244
- export const customProcessor: Processor<schemas.$ZodCustom> = (_schema, ctx, _json, _params) => {
245
- if (ctx.unrepresentable === "throw") {
246
- throw new Error("Custom types cannot be represented in JSON Schema");
247
- }
370
+ export const customProcessor: Processor<schemas.$ZodCustom> = (schema, ctx, json, params) => {
371
+ handleUnrepresentable(schema, ctx, json, params, "Custom types cannot be represented in JSON Schema");
248
372
  };
249
373
 
250
- export const functionProcessor: Processor<schemas.$ZodFunction> = (_schema, ctx, _json, _params) => {
251
- if (ctx.unrepresentable === "throw") {
252
- throw new Error("Function types cannot be represented in JSON Schema");
253
- }
374
+ export const functionProcessor: Processor<schemas.$ZodFunction> = (schema, ctx, json, params) => {
375
+ handleUnrepresentable(schema, ctx, json, params, "Function types cannot be represented in JSON Schema");
254
376
  };
255
377
 
256
- export const transformProcessor: Processor<schemas.$ZodTransform> = (_schema, ctx, _json, _params) => {
257
- if (ctx.unrepresentable === "throw") {
258
- throw new Error("Transforms cannot be represented in JSON Schema");
259
- }
378
+ export const transformProcessor: Processor<schemas.$ZodTransform> = (schema, ctx, json, params) => {
379
+ handleUnrepresentable(schema, ctx, json, params, "Transforms cannot be represented in JSON Schema");
260
380
  };
261
381
 
262
- export const mapProcessor: Processor<schemas.$ZodMap> = (_schema, ctx, _json, _params) => {
263
- if (ctx.unrepresentable === "throw") {
264
- throw new Error("Map cannot be represented in JSON Schema");
265
- }
382
+ export const mapProcessor: Processor<schemas.$ZodMap> = (schema, ctx, json, params) => {
383
+ handleUnrepresentable(schema, ctx, json, params, "Map cannot be represented in JSON Schema");
266
384
  };
267
385
 
268
- export const setProcessor: Processor<schemas.$ZodSet> = (_schema, ctx, _json, _params) => {
269
- if (ctx.unrepresentable === "throw") {
270
- throw new Error("Set cannot be represented in JSON Schema");
271
- }
386
+ export const setProcessor: Processor<schemas.$ZodSet> = (schema, ctx, json, params) => {
387
+ handleUnrepresentable(schema, ctx, json, params, "Set cannot be represented in JSON Schema");
272
388
  };
273
389
 
274
390
  // ==================== COMPOSITE TYPE PROCESSORS ====================
@@ -276,46 +392,73 @@ export const setProcessor: Processor<schemas.$ZodSet> = (_schema, ctx, _json, _p
276
392
  export const arrayProcessor: Processor<schemas.$ZodArray> = (schema, ctx, _json, params) => {
277
393
  const json = _json as JSONSchema.ArraySchema;
278
394
  const def = schema._zod.def as schemas.$ZodArrayDef;
279
- const { minimum, maximum } = schema._zod.bag;
395
+ const { minimum, maximum } = aggregateChecks(schema);
280
396
  if (typeof minimum === "number") json.minItems = minimum;
281
397
  if (typeof maximum === "number") json.maxItems = maximum;
282
398
 
283
399
  json.type = "array";
284
- json.items = process(def.element, ctx as any, {
400
+ json.items = processSchema(def.element, ctx as any, {
285
401
  ...params,
286
402
  path: [...params.path, "items"],
287
403
  });
288
404
  };
289
405
 
406
+ // Transform and catch set `optin = "optional"` at runtime so the parser lets them observe an
407
+ // absent key, but their declared input type stays required. An input JSON Schema describes the
408
+ // declared type, so resolve past them to the schema that actually carries the optionality.
409
+ // Used by both `objectProcessor` (for `required`) and `tupleProcessor` (for `minItems`); see
410
+ // wiki/optionality.md, "The JSON Schema emitter reads the *static* value".
411
+ function inputOptin(schema: schemas.$ZodType): "optional" | "defaulted" | undefined {
412
+ const def = schema._zod.def;
413
+ if (def.type === "pipe" && (def as schemas.$ZodPipeDef).in._zod.traits.has("$ZodTransform")) {
414
+ return inputOptin((def as schemas.$ZodPipeDef).out);
415
+ }
416
+ if (def.type === "catch") {
417
+ return inputOptin((def as schemas.$ZodCatchDef).innerType);
418
+ }
419
+ return schema._zod.optin;
420
+ }
421
+
290
422
  export const objectProcessor: Processor<schemas.$ZodObject> = (schema, ctx, _json, params) => {
291
423
  const json = _json as JSONSchema.ObjectSchema;
292
424
  const def = schema._zod.def as schemas.$ZodObjectDef;
425
+ const shape = def.shape;
426
+
427
+ // dropping it while still emitting `additionalProperties: false` would emit a schema that rejects data this one requires
428
+ const symbolKeys = Object.getOwnPropertySymbols(shape);
429
+ if (
430
+ symbolKeys.length &&
431
+ handleUnrepresentable(schema, ctx, json, params, "Symbol keys cannot be represented in JSON Schema")
432
+ ) {
433
+ return;
434
+ }
435
+
293
436
  json.type = "object";
294
437
  json.properties = {};
295
- const shape = def.shape;
296
438
 
297
439
  for (const key in shape) {
298
- json.properties[key] = process(shape[key]!, ctx as any, {
299
- ...params,
300
- path: [...params.path, "properties", key],
301
- });
440
+ // assignProp so a __proto__ key becomes an own property instead of hitting the inherited setter on the plain {} we build into
441
+ assignProp(
442
+ json.properties,
443
+ key,
444
+ processSchema(shape[key]!, ctx as any, {
445
+ ...params,
446
+ path: [...params.path, "properties", key],
447
+ })
448
+ );
302
449
  }
303
450
 
304
451
  // required keys
305
- const allKeys = new Set(Object.keys(shape));
306
- const requiredKeys = new Set(
307
- [...allKeys].filter((key) => {
308
- const v = def.shape[key]!._zod;
309
- if (ctx.io === "input") {
310
- return v.optin === undefined;
311
- } else {
312
- return v.optout === undefined;
313
- }
314
- })
315
- );
452
+ const requiredKeys: string[] = [];
453
+ for (const key of Object.keys(shape)) {
454
+ const field = def.shape[key]!;
455
+ if (ctx.io === "input" ? inputOptin(field) === undefined : field._zod.optout === undefined) {
456
+ requiredKeys.push(key);
457
+ }
458
+ }
316
459
 
317
- if (requiredKeys.size > 0) {
318
- json.required = Array.from(requiredKeys);
460
+ if (requiredKeys.length > 0) {
461
+ json.required = requiredKeys;
319
462
  }
320
463
 
321
464
  // catchall
@@ -326,7 +469,7 @@ export const objectProcessor: Processor<schemas.$ZodObject> = (schema, ctx, _jso
326
469
  // regular
327
470
  if (ctx.io === "output") json.additionalProperties = false;
328
471
  } else if (def.catchall) {
329
- json.additionalProperties = process(def.catchall, ctx as any, {
472
+ json.additionalProperties = processSchema(def.catchall, ctx as any, {
330
473
  ...params,
331
474
  path: [...params.path, "additionalProperties"],
332
475
  });
@@ -335,11 +478,10 @@ export const objectProcessor: Processor<schemas.$ZodObject> = (schema, ctx, _jso
335
478
 
336
479
  export const unionProcessor: Processor<schemas.$ZodUnion> = (schema, ctx, json, params) => {
337
480
  const def = schema._zod.def as schemas.$ZodUnionDef;
338
- // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)
339
- // This includes both z.xor() and discriminated unions
481
+ // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches). This includes both z.xor() and discriminated unions
340
482
  const isExclusive = def.inclusive === false;
341
483
  const options = def.options.map((x, i) =>
342
- process(x, ctx as any, {
484
+ processSchema(x, ctx as any, {
343
485
  ...params,
344
486
  path: [...params.path, isExclusive ? "oneOf" : "anyOf", i],
345
487
  })
@@ -353,11 +495,11 @@ export const unionProcessor: Processor<schemas.$ZodUnion> = (schema, ctx, json,
353
495
 
354
496
  export const intersectionProcessor: Processor<schemas.$ZodIntersection> = (schema, ctx, json, params) => {
355
497
  const def = schema._zod.def as schemas.$ZodIntersectionDef;
356
- const a = process(def.left, ctx as any, {
498
+ const a = processSchema(def.left, ctx as any, {
357
499
  ...params,
358
500
  path: [...params.path, "allOf", 0],
359
501
  });
360
- const b = process(def.right, ctx as any, {
502
+ const b = processSchema(def.right, ctx as any, {
361
503
  ...params,
362
504
  path: [...params.path, "allOf", 1],
363
505
  });
@@ -368,6 +510,8 @@ export const intersectionProcessor: Processor<schemas.$ZodIntersection> = (schem
368
510
  ...(isSimpleIntersection(b) ? (b.allOf as any[]) : [b]),
369
511
  ];
370
512
  json.allOf = allOf;
513
+ // Recorded innermost first, so a nested intersection has already folded by the time this one is considered. The array is the handle rather than the schema, because a wrapper that inherits this schema shares the same array; `finalize` folds every object holding it. See `foldIntersection`.
514
+ ctx.intersections.push(allOf);
371
515
  };
372
516
 
373
517
  export const tupleProcessor: Processor<schemas.$ZodTuple> = (schema, ctx, _json, params) => {
@@ -380,23 +524,37 @@ export const tupleProcessor: Processor<schemas.$ZodTuple> = (schema, ctx, _json,
380
524
  ctx.target === "draft-2020-12" ? "items" : ctx.target === "openapi-3.0" ? "items" : "additionalItems";
381
525
 
382
526
  const prefixItems = def.items.map((x, i) =>
383
- process(x, ctx as any, {
527
+ processSchema(x, ctx as any, {
384
528
  ...params,
385
529
  path: [...params.path, prefixPath, i],
386
530
  })
387
531
  );
388
532
  const rest = def.rest
389
- ? process(def.rest, ctx as any, {
533
+ ? processSchema(def.rest, ctx as any, {
390
534
  ...params,
391
535
  path: [...params.path, restPath, ...(ctx.target === "openapi-3.0" ? [def.items.length] : [])],
392
536
  })
393
537
  : null;
394
538
 
539
+ let minItems = def.items.length;
540
+ while (minItems > 0) {
541
+ const item = def.items[minItems - 1] as schemas.$ZodType;
542
+ const optional = ctx.io === "input" ? inputOptin(item) !== undefined : item._zod.optout === "optional";
543
+ if (!optional) break;
544
+ minItems--;
545
+ }
546
+ const maxItems = def.items.length;
547
+ const isClosed = !def.rest;
548
+
395
549
  if (ctx.target === "draft-2020-12") {
396
550
  json.prefixItems = prefixItems;
397
- if (rest) {
551
+ if (isClosed) {
552
+ json.items = false;
553
+ } else if (rest) {
398
554
  json.items = rest;
399
555
  }
556
+ if (minItems > 0) json.minItems = minItems;
557
+ if (isClosed) json.maxItems = maxItems;
400
558
  } else if (ctx.target === "openapi-3.0") {
401
559
  json.items = {
402
560
  anyOf: prefixItems,
@@ -405,57 +563,139 @@ export const tupleProcessor: Processor<schemas.$ZodTuple> = (schema, ctx, _json,
405
563
  if (rest) {
406
564
  json.items.anyOf!.push(rest);
407
565
  }
408
- json.minItems = prefixItems.length;
409
- if (!rest) {
410
- json.maxItems = prefixItems.length;
411
- }
566
+ if (minItems > 0) json.minItems = minItems;
567
+ if (isClosed) json.maxItems = maxItems;
412
568
  } else {
413
569
  json.items = prefixItems;
414
- if (rest) {
570
+ if (isClosed) {
571
+ json.additionalItems = false;
572
+ } else if (rest) {
415
573
  json.additionalItems = rest;
416
574
  }
575
+ if (minItems > 0) json.minItems = minItems;
576
+ if (isClosed) json.maxItems = maxItems;
417
577
  }
418
578
 
419
- // length
420
- const { minimum, maximum } = schema._zod.bag as {
421
- minimum?: number;
422
- maximum?: number;
423
- };
579
+ // explicit user-defined length checks take precedence
580
+ const { minimum, maximum } = aggregateChecks(schema);
424
581
  if (typeof minimum === "number") json.minItems = minimum;
425
582
  if (typeof maximum === "number") json.maxItems = maximum;
426
583
  };
427
584
 
585
+ /** JSON object keys are always strings, so a numeric record key schema is re-expressed over the
586
+ * numeric-string form the record parser matches. Deferred to `finalize`, after the flatten: a key
587
+ * behind a wrapper only carries its own `type` before then, and a union key only has its branches.
588
+ *
589
+ * A numeric bound cannot apply to a property name, so `minimum` and its siblings are dropped rather
590
+ * than carried over: keeping them beside `type: "string"` reproduces the match-nothing schema this
591
+ * exists to fix. A key that carries one therefore emits wider than the record parses — `z.record(z.number().min(5), V)`
592
+ * accepts `"3"` — which is the deliberate trade, since throwing on it would reject an ordinary schema
593
+ * outright. */
594
+ function stringifyKeyNames(
595
+ bySchema: Map<JSONSchema.BaseSchema, Seen>,
596
+ json: JSONSchema.BaseSchema,
597
+ visited: Set<JSONSchema.BaseSchema>
598
+ ): JSONSchema.BaseSchema {
599
+ // an extracted key that rewrites cannot go on sharing its definition — the string form a key position needs is not the number form every other reference wants — so it inlines. One that does not rewrite keeps the `$ref`.
600
+ if (json.$ref) {
601
+ // a recursive key holds its own reference inside its definition, so a node already on the path is left alone rather than resolved again
602
+ if (visited.has(json)) return json;
603
+ visited.add(json);
604
+ const def = bySchema.get(json)?.def;
605
+ if (!def) return json;
606
+ const inlined = stringifyKeyNames(bySchema, def, visited);
607
+ return inlined === def ? json : inlined;
608
+ }
609
+
610
+ for (const keyword of ["anyOf", "oneOf"] as const) {
611
+ const branches = json[keyword];
612
+ if (!Array.isArray(branches)) continue;
613
+ const mapped = branches.map((branch) => stringifyKeyNames(bySchema, branch, visited));
614
+ // rebuilding regardless would detach a key that had nothing to re-express, dropping its `$ref` and leaking the internal `id`
615
+ if (mapped.some((branch, i) => branch !== branches[i])) json = { ...json, [keyword]: mapped };
616
+ }
617
+
618
+ // a member that already admits a string leaves the key unconstrained, so the node's own type re-expresses only when every member is numeric
619
+ const types = Array.isArray(json.type) ? json.type : [json.type];
620
+ const numericType = !types.includes("string") && types.some((t) => t === "number" || t === "integer");
621
+ // a heterogeneous key carries no type at all, so its numeric members are caught here instead
622
+ const values = json.enum ?? (json.const !== undefined ? [json.const] : undefined);
623
+ if (!numericType && !values?.some((v) => typeof v === "number")) return json;
624
+
625
+ const { minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, format, id, ...rest } = json;
626
+ if (rest.enum) rest.enum = rest.enum.map((v) => (typeof v === "number" ? String(v) : v));
627
+ else if (typeof rest.const === "number") rest.const = String(rest.const);
628
+ // a heterogeneous key keeps its absent type: the stringified members already say what a key may be
629
+ if (!numericType) return rest;
630
+ rest.type = "string";
631
+ if (!values) rest.pattern = (types.includes("number") ? regexes.number : regexes.integer).source;
632
+ return rest;
633
+ }
634
+
635
+ /** Every record of one conversion, so the carriers are found in a single pass rather than once per record. */
636
+ const pendingRecords = new WeakMap<ToJSONSchemaContext, schemas.$ZodType[]>();
637
+
638
+ function rewriteKeyNames(ctx: ToJSONSchemaContext): void {
639
+ // an extracted key is resolved by the object `extractToDef` left in its place, so the map is built once rather than searched per reference. `_zod.toJSONSchema` can hand the same object to two schemas, so the first entry carrying a body wins, as a search would have found it.
640
+ const bySchema = new Map<JSONSchema.BaseSchema, Seen>();
641
+ for (const entry of ctx.seen.values()) {
642
+ if (entry.def && !bySchema.has(entry.schema)) bySchema.set(entry.schema, entry);
643
+ }
644
+
645
+ const rewrites = new Map<JSONSchema.BaseSchema, JSONSchema.BaseSchema>();
646
+ for (const record of pendingRecords.get(ctx) ?? []) {
647
+ const seen = ctx.seen.get(record);
648
+ const names = (seen?.def ?? seen?.schema)?.propertyNames;
649
+ if (!names || names === true || rewrites.has(names)) continue;
650
+ const rewritten = stringifyKeyNames(bySchema, names, new Set());
651
+ if (rewritten !== names) rewrites.set(names, rewritten);
652
+ }
653
+ if (!rewrites.size) return;
654
+
655
+ // the flatten has already copied each record's own properties onto every wrapper by reference, and an extracted body is another such copy, so every carrier holding a rewritten key is updated together
656
+ for (const entry of ctx.seen.values()) {
657
+ for (const carrier of [entry.schema, entry.def]) {
658
+ const rewritten = carrier && rewrites.get(carrier.propertyNames as JSONSchema.BaseSchema);
659
+ if (rewritten) carrier!.propertyNames = rewritten;
660
+ }
661
+ }
662
+ }
663
+
428
664
  export const recordProcessor: Processor<schemas.$ZodRecord> = (schema, ctx, _json, params) => {
429
665
  const json = _json as JSONSchema.ObjectSchema;
430
666
  const def = schema._zod.def as schemas.$ZodRecordDef;
431
667
  json.type = "object";
432
668
 
433
- // For looseRecord with regex patterns, use patternProperties
434
- // This correctly represents "only validate keys matching the pattern" semantics
435
- // and composes well with allOf (intersections)
669
+ // For looseRecord with regex patterns, use patternProperties. This correctly represents "only validate keys matching the pattern" semantics and composes well with allOf (intersections)
436
670
  const keyType = def.keyType as schemas.$ZodTypes;
437
- const keyBag = keyType._zod.bag as schemas.$ZodStringInternals<unknown>["bag"] | undefined;
438
- const patterns = keyBag?.patterns;
671
+ const patterns = aggregateChecks(keyType).patterns;
439
672
 
440
673
  if (def.mode === "loose" && patterns && patterns.size > 0) {
441
674
  // Use patternProperties for looseRecord with regex patterns
442
- const valueSchema = process(def.valueType, ctx as any, {
675
+ const valueSchema = processSchema(def.valueType, ctx as any, {
443
676
  ...params,
444
677
  path: [...params.path, "patternProperties", "*"],
445
678
  });
446
679
  json.patternProperties = {};
447
680
  for (const pattern of patterns) {
448
- json.patternProperties[pattern.source] = valueSchema;
681
+ assignProp(json.patternProperties, exactPattern(pattern).source, valueSchema);
449
682
  }
450
683
  } else {
451
684
  // Default behavior: use propertyNames + additionalProperties
452
685
  if (ctx.target === "draft-07" || ctx.target === "draft-2020-12") {
453
- json.propertyNames = process(def.keyType, ctx as any, {
686
+ json.propertyNames = processSchema(def.keyType, ctx as any, {
454
687
  ...params,
455
688
  path: [...params.path, "propertyNames"],
456
689
  });
690
+ let pending = pendingRecords.get(ctx);
691
+ if (!pending) {
692
+ pending = [];
693
+ pendingRecords.set(ctx, pending);
694
+ ctx.deferred.push(() => rewriteKeyNames(ctx));
695
+ }
696
+ pending.push(schema);
457
697
  }
458
- json.additionalProperties = process(def.valueType, ctx as any, {
698
+ json.additionalProperties = processSchema(def.valueType, ctx as any, {
459
699
  ...params,
460
700
  path: [...params.path, "additionalProperties"],
461
701
  });
@@ -463,20 +703,22 @@ export const recordProcessor: Processor<schemas.$ZodRecord> = (schema, ctx, _jso
463
703
 
464
704
  // Add required for keys with discrete values (enum, literal, etc.)
465
705
  const keyValues = keyType._zod.values;
466
- if (keyValues) {
706
+ // Every key shares one value schema, so an optional-in value makes the whole key set omittable on input. Output keeps them: the exhaustive branch assigns every key, even one whose value came back undefined.
707
+ const omittableOnInput = ctx.io === "input" && inputOptin(def.valueType as schemas.$ZodType) !== undefined;
708
+ if (keyValues && !def.partial && !omittableOnInput) {
467
709
  const validKeyValues = [...keyValues].filter(
468
710
  (v): v is string | number => typeof v === "string" || typeof v === "number"
469
711
  );
470
712
 
471
713
  if (validKeyValues.length > 0) {
472
- json.required = validKeyValues as string[];
714
+ json.required = validKeyValues.map(String);
473
715
  }
474
716
  }
475
717
  };
476
718
 
477
719
  export const nullableProcessor: Processor<schemas.$ZodNullable> = (schema, ctx, json, params) => {
478
720
  const def = schema._zod.def as schemas.$ZodNullableDef;
479
- const inner = process(def.innerType, ctx as any, params);
721
+ const inner = processSchema(def.innerType, ctx as any, params);
480
722
  const seen = ctx.seen.get(schema)!;
481
723
  if (ctx.target === "openapi-3.0") {
482
724
  seen.ref = def.innerType;
@@ -488,37 +730,63 @@ export const nullableProcessor: Processor<schemas.$ZodNullable> = (schema, ctx,
488
730
 
489
731
  export const nonoptionalProcessor: Processor<schemas.$ZodNonOptional> = (schema, ctx, _json, params) => {
490
732
  const def = schema._zod.def as schemas.$ZodNonOptionalDef;
491
- process(def.innerType, ctx as any, params);
733
+ processSchema(def.innerType, ctx as any, params);
492
734
  const seen = ctx.seen.get(schema)!;
493
735
  seen.ref = def.innerType;
494
736
  };
495
737
 
738
+ /** Round-trips a default value through JSON so the emitted schema is guaranteed to be valid JSON.
739
+ * A BigInt has no reliable encoding, so it goes through `unrepresentable` like any other
740
+ * unrepresentable value. Returns a sentinel when the caller must not write a default of its own. */
741
+ const UNREPRESENTABLE_DEFAULT = Symbol();
742
+ function serializeDefaultValue(
743
+ value: unknown,
744
+ schema: schemas.$ZodType,
745
+ ctx: ToJSONSchemaContext,
746
+ json: JSONSchema.BaseSchema,
747
+ params: ProcessParams
748
+ ): any {
749
+ let unrepresentable = false;
750
+ const serialized = JSON.stringify(value, (_, val) => {
751
+ if (typeof val !== "bigint") return val;
752
+ unrepresentable = true;
753
+ return null;
754
+ });
755
+ if (!unrepresentable) return JSON.parse(serialized);
756
+ handleUnrepresentable(schema, ctx, json, params, "BigInt defaults cannot be represented in JSON Schema");
757
+ return UNREPRESENTABLE_DEFAULT;
758
+ }
759
+
496
760
  export const defaultProcessor: Processor<schemas.$ZodDefault> = (schema, ctx, json, params) => {
497
761
  const def = schema._zod.def as schemas.$ZodDefaultDef;
498
- process(def.innerType, ctx as any, params);
762
+ processSchema(def.innerType, ctx as any, params);
499
763
  const seen = ctx.seen.get(schema)!;
500
764
  seen.ref = def.innerType;
501
- json.default = JSON.parse(JSON.stringify(def.defaultValue));
765
+ const value = serializeDefaultValue(def.defaultValue, schema, ctx as ToJSONSchemaContext, json, params);
766
+ if (value !== UNREPRESENTABLE_DEFAULT) json.default = value;
502
767
  };
503
768
 
504
769
  export const prefaultProcessor: Processor<schemas.$ZodPrefault> = (schema, ctx, json, params) => {
505
770
  const def = schema._zod.def as schemas.$ZodPrefaultDef;
506
- process(def.innerType, ctx as any, params);
771
+ processSchema(def.innerType, ctx as any, params);
507
772
  const seen = ctx.seen.get(schema)!;
508
773
  seen.ref = def.innerType;
509
- if (ctx.io === "input") json._prefault = JSON.parse(JSON.stringify(def.defaultValue));
774
+ if (ctx.io !== "input") return;
775
+ const value = serializeDefaultValue(def.defaultValue, schema, ctx as ToJSONSchemaContext, json, params);
776
+ if (value !== UNREPRESENTABLE_DEFAULT) json._prefault = value;
510
777
  };
511
778
 
512
779
  export const catchProcessor: Processor<schemas.$ZodCatch> = (schema, ctx, json, params) => {
513
780
  const def = schema._zod.def as schemas.$ZodCatchDef;
514
- process(def.innerType, ctx as any, params);
781
+ processSchema(def.innerType, ctx as any, params);
515
782
  const seen = ctx.seen.get(schema)!;
516
783
  seen.ref = def.innerType;
517
784
  let catchValue: any;
518
785
  try {
519
786
  catchValue = def.catchValue(undefined as any);
520
787
  } catch {
521
- throw new Error("Dynamic catch values are not supported in JSON Schema");
788
+ handleUnrepresentable(schema, ctx, json, params, "Dynamic catch values are not supported in JSON Schema");
789
+ return;
522
790
  }
523
791
  json.default = catchValue;
524
792
  };
@@ -527,14 +795,14 @@ export const pipeProcessor: Processor<schemas.$ZodPipe> = (schema, ctx, _json, p
527
795
  const def = schema._zod.def as schemas.$ZodPipeDef;
528
796
  const inIsTransform = def.in._zod.traits.has("$ZodTransform");
529
797
  const innerType = ctx.io === "input" ? (inIsTransform ? def.out : def.in) : def.out;
530
- process(innerType, ctx as any, params);
798
+ processSchema(innerType, ctx as any, params);
531
799
  const seen = ctx.seen.get(schema)!;
532
800
  seen.ref = innerType;
533
801
  };
534
802
 
535
803
  export const readonlyProcessor: Processor<schemas.$ZodReadonly> = (schema, ctx, json, params) => {
536
804
  const def = schema._zod.def as schemas.$ZodReadonlyDef;
537
- process(def.innerType, ctx as any, params);
805
+ processSchema(def.innerType, ctx as any, params);
538
806
  const seen = ctx.seen.get(schema)!;
539
807
  seen.ref = def.innerType;
540
808
  json.readOnly = true;
@@ -542,21 +810,21 @@ export const readonlyProcessor: Processor<schemas.$ZodReadonly> = (schema, ctx,
542
810
 
543
811
  export const promiseProcessor: Processor<schemas.$ZodPromise> = (schema, ctx, _json, params) => {
544
812
  const def = schema._zod.def as schemas.$ZodPromiseDef;
545
- process(def.innerType, ctx as any, params);
813
+ processSchema(def.innerType, ctx as any, params);
546
814
  const seen = ctx.seen.get(schema)!;
547
815
  seen.ref = def.innerType;
548
816
  };
549
817
 
550
818
  export const optionalProcessor: Processor<schemas.$ZodOptional> = (schema, ctx, _json, params) => {
551
819
  const def = schema._zod.def as schemas.$ZodOptionalDef;
552
- process(def.innerType, ctx as any, params);
820
+ processSchema(def.innerType, ctx as any, params);
553
821
  const seen = ctx.seen.get(schema)!;
554
822
  seen.ref = def.innerType;
555
823
  };
556
824
 
557
825
  export const lazyProcessor: Processor<schemas.$ZodLazy> = (schema, ctx, _json, params) => {
558
826
  const innerType = (schema as schemas.$ZodLazy)._zod.innerType;
559
- process(innerType, ctx as any, params);
827
+ processSchema(innerType, ctx as any, params);
560
828
  const seen = ctx.seen.get(schema)!;
561
829
  seen.ref = innerType;
562
830
  };
@@ -628,7 +896,7 @@ export function toJSONSchema(
628
896
  // First pass: process all schemas to build the seen map
629
897
  for (const entry of registry._idmap.entries()) {
630
898
  const [_, schema] = entry;
631
- process(schema, ctx as any);
899
+ processSchema(schema, ctx as any);
632
900
  }
633
901
 
634
902
  const schemas: Record<string, JSONSchema.BaseSchema> = {};
@@ -645,7 +913,7 @@ export function toJSONSchema(
645
913
  for (const entry of registry._idmap.entries()) {
646
914
  const [key, schema] = entry;
647
915
  extractDefs(ctx as any, schema);
648
- schemas[key] = finalize(ctx as any, schema);
916
+ assignProp(schemas, key, finalize(ctx as any, schema));
649
917
  }
650
918
 
651
919
  if (Object.keys(defs).length > 0) {
@@ -660,7 +928,7 @@ export function toJSONSchema(
660
928
 
661
929
  // Single schema case
662
930
  const ctx = initializeContext({ ...params, processors: allProcessors });
663
- process(input, ctx as any);
931
+ processSchema(input, ctx as any);
664
932
  extractDefs(ctx as any, input);
665
933
  return finalize(ctx as any, input);
666
934
  }