@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
@@ -54,6 +54,33 @@ test("number with constraints", () => {
54
54
  expect(() => schema.parse(47)).toThrow(); // not multiple of 5
55
55
  });
56
56
 
57
+ test("draft-04 boolean exclusive bounds do not emit a redundant inclusive bound", () => {
58
+ const schema = fromJSONSchema({
59
+ type: "number",
60
+ minimum: 5,
61
+ maximum: 10,
62
+ exclusiveMinimum: true,
63
+ exclusiveMaximum: true,
64
+ });
65
+ // exclusive on both ends: boundaries rejected, interior accepted
66
+ expect(() => schema.parse(5)).toThrow();
67
+ expect(() => schema.parse(10)).toThrow();
68
+ expect(schema.parse(7)).toBe(7);
69
+ // the dominated inclusive bound would otherwise report a second, weaker issue alongside the exclusive one
70
+ expect(schema.safeParse(4).error!.issues).toHaveLength(1);
71
+ expect(schema.safeParse(11).error!.issues).toHaveLength(1);
72
+ // the inclusive .min()/.max() must be skipped so only the exclusive checks remain
73
+ const checks = (schema as any)._zod.def.checks.map((c: any) => [
74
+ c._zod.def.check,
75
+ c._zod.def.value,
76
+ c._zod.def.inclusive,
77
+ ]);
78
+ expect(checks).toEqual([
79
+ ["greater_than", 5, false],
80
+ ["less_than", 10, false],
81
+ ]);
82
+ });
83
+
57
84
  test("integer schema", () => {
58
85
  const schema = fromJSONSchema({ type: "integer" });
59
86
  expect(schema.parse(42)).toBe(42);
@@ -127,11 +154,76 @@ test("tuple with prefixItems (draft-2020-12)", () => {
127
154
  type: "array",
128
155
  prefixItems: [{ type: "string" }, { type: "number" }],
129
156
  });
157
+ expect(schema.parse([])).toEqual([]);
158
+ expect(schema.parse(["hello"])).toEqual(["hello"]);
130
159
  expect(schema.parse(["hello", 42])).toEqual(["hello", 42]);
131
- expect(() => schema.parse(["hello"])).toThrow();
160
+ // no `items`, so the tail is unconstrained
161
+ expect(schema.parse(["hello", 42, "extra"])).toEqual(["hello", 42, "extra"]);
162
+ expect(() => schema.parse([1])).toThrow();
132
163
  expect(() => schema.parse(["hello", "world"])).toThrow();
133
164
  });
134
165
 
166
+ test("tuple with prefixItems and minItems (draft-2020-12)", () => {
167
+ const partialItems = fromJSONSchema({
168
+ $schema: "https://json-schema.org/draft/2020-12/schema",
169
+ type: "array",
170
+ prefixItems: [{ type: "string" }, { type: "number" }],
171
+ minItems: 1,
172
+ });
173
+ expect(() => partialItems.parse([])).toThrow();
174
+ expect(partialItems.parse(["hello"])).toEqual(["hello"]);
175
+
176
+ const allRequired = fromJSONSchema({
177
+ $schema: "https://json-schema.org/draft/2020-12/schema",
178
+ type: "array",
179
+ prefixItems: [{ type: "string" }, { type: "number" }],
180
+ minItems: 2,
181
+ });
182
+ expect(() => allRequired.parse(["hello"])).toThrow();
183
+ expect(allRequired.parse(["hello", 42])).toEqual(["hello", 42]);
184
+ });
185
+
186
+ test("tuple with prefixItems allows extra items by default (draft-2020-12)", () => {
187
+ const schema = fromJSONSchema({
188
+ $schema: "https://json-schema.org/draft/2020-12/schema",
189
+ type: "array",
190
+ prefixItems: [{ type: "string" }],
191
+ });
192
+ expect(schema.parse(["hello", 42, true])).toEqual(["hello", 42, true]);
193
+ });
194
+
195
+ test("tuple with prefixItems respects items schema (draft-2020-12)", () => {
196
+ const schema = fromJSONSchema({
197
+ $schema: "https://json-schema.org/draft/2020-12/schema",
198
+ type: "array",
199
+ prefixItems: [{ type: "string" }],
200
+ items: { type: "number" },
201
+ });
202
+ expect(schema.parse(["hello", 1, 2])).toEqual(["hello", 1, 2]);
203
+ expect(() => schema.parse(["hello", 1, "extra"])).toThrow();
204
+ });
205
+
206
+ test("tuple with prefixItems and items true allows extra items (draft-2020-12)", () => {
207
+ const schema = fromJSONSchema({
208
+ $schema: "https://json-schema.org/draft/2020-12/schema",
209
+ type: "array",
210
+ prefixItems: [{ type: "string" }, { type: "number" }],
211
+ items: true,
212
+ });
213
+ expect(schema.parse(["hello", 42, "extra", true])).toEqual(["hello", 42, "extra", true]);
214
+ });
215
+
216
+ test("tuple with prefixItems and items false rejects extra items (draft-2020-12)", () => {
217
+ const schema = fromJSONSchema({
218
+ $schema: "https://json-schema.org/draft/2020-12/schema",
219
+ type: "array",
220
+ prefixItems: [{ type: "string" }],
221
+ items: false,
222
+ });
223
+ expect(schema.parse(["hello"])).toEqual(["hello"]);
224
+ expect(() => schema.parse(["hello", 42])).toThrow();
225
+ });
226
+
135
227
  test("tuple with items array (draft-7)", () => {
136
228
  const schema = fromJSONSchema({
137
229
  $schema: "http://json-schema.org/draft-07/schema#",
@@ -139,10 +231,66 @@ test("tuple with items array (draft-7)", () => {
139
231
  items: [{ type: "string" }, { type: "number" }],
140
232
  additionalItems: false,
141
233
  });
234
+ expect(schema.parse([])).toEqual([]);
235
+ expect(schema.parse(["hello"])).toEqual(["hello"]);
142
236
  expect(schema.parse(["hello", 42])).toEqual(["hello", 42]);
237
+ expect(() => schema.parse([1])).toThrow();
238
+ expect(() => schema.parse(["hello", "world"])).toThrow();
143
239
  expect(() => schema.parse(["hello", 42, "extra"])).toThrow();
144
240
  });
145
241
 
242
+ test("tuple with items array and minItems (draft-7)", () => {
243
+ const partialItems = fromJSONSchema({
244
+ $schema: "http://json-schema.org/draft-07/schema#",
245
+ type: "array",
246
+ items: [{ type: "string" }, { type: "number" }],
247
+ additionalItems: false,
248
+ minItems: 1,
249
+ });
250
+ expect(() => partialItems.parse([])).toThrow();
251
+ expect(partialItems.parse(["hello"])).toEqual(["hello"]);
252
+
253
+ const allRequired = fromJSONSchema({
254
+ $schema: "http://json-schema.org/draft-07/schema#",
255
+ type: "array",
256
+ items: [{ type: "string" }, { type: "number" }],
257
+ additionalItems: false,
258
+ minItems: 2,
259
+ });
260
+ expect(() => allRequired.parse(["hello"])).toThrow();
261
+ expect(allRequired.parse(["hello", 42])).toEqual(["hello", 42]);
262
+ });
263
+
264
+ test("tuple with items array allows extra items by default (draft-7)", () => {
265
+ const schema = fromJSONSchema({
266
+ $schema: "http://json-schema.org/draft-07/schema#",
267
+ type: "array",
268
+ items: [{ type: "string" }],
269
+ });
270
+ expect(schema.parse(["hello", 42, true])).toEqual(["hello", 42, true]);
271
+ });
272
+
273
+ test("tuple with items array and additionalItems true allows extra items (draft-7)", () => {
274
+ const schema = fromJSONSchema({
275
+ $schema: "http://json-schema.org/draft-07/schema#",
276
+ type: "array",
277
+ items: [{ type: "string" }, { type: "number" }],
278
+ additionalItems: true,
279
+ });
280
+ expect(schema.parse(["hello", 42, "extra", true])).toEqual(["hello", 42, "extra", true]);
281
+ });
282
+
283
+ test("tuple with items array respects additionalItems schema (draft-7)", () => {
284
+ const schema = fromJSONSchema({
285
+ $schema: "http://json-schema.org/draft-07/schema#",
286
+ type: "array",
287
+ items: [{ type: "string" }],
288
+ additionalItems: { type: "number" },
289
+ });
290
+ expect(schema.parse(["hello", 1, 2])).toEqual(["hello", 1, 2]);
291
+ expect(() => schema.parse(["hello", 1, "extra"])).toThrow();
292
+ });
293
+
146
294
  test("enum schema", () => {
147
295
  const schema = fromJSONSchema({
148
296
  enum: ["red", "green", "blue"],
@@ -299,6 +447,15 @@ test("local $ref resolution", () => {
299
447
  expect(() => schema.parse({})).toThrow();
300
448
  });
301
449
 
450
+ test("local $ref resolution unescapes JSON Pointer tokens", () => {
451
+ // `~1` must be decoded before `~0`, so the id "a~1b" survives as itself and not as "a/b".
452
+ for (const id of ["Shared/User", "My~Model", "a~b/c", "a~1b"]) {
453
+ const inner = z.object({ name: z.string() }).meta({ id });
454
+ const schema = fromJSONSchema(z.toJSONSchema(z.object({ inner })));
455
+ expect(schema.parse({ inner: { name: "John" } })).toEqual({ inner: { name: "John" } });
456
+ }
457
+ });
458
+
302
459
  test("circular $ref with lazy", () => {
303
460
  const schema = fromJSONSchema({
304
461
  $defs: {
@@ -336,10 +493,156 @@ test("patternProperties", () => {
336
493
  expect(result.S_age).toBe("30");
337
494
  });
338
495
 
496
+ test("propertyNames with enum does not require keys", () => {
497
+ const schema = fromJSONSchema({
498
+ type: "object",
499
+ propertyNames: { enum: ["a", "b"] },
500
+ additionalProperties: { type: "string" },
501
+ });
502
+ expect(schema.parse({ a: "x" })).toEqual({ a: "x" });
503
+ expect(schema.parse({ b: "y" })).toEqual({ b: "y" });
504
+ expect(schema.parse({})).toEqual({});
505
+ expect(() => schema.parse({ c: "z" })).toThrow();
506
+ });
507
+
508
+ test("propertyNames with enum alongside properties", () => {
509
+ const schema = fromJSONSchema({
510
+ type: "object",
511
+ properties: { a: { type: "string" } },
512
+ propertyNames: { enum: ["a", "b"] },
513
+ additionalProperties: { type: "string" },
514
+ });
515
+ expect(schema.parse({ a: "x" })).toEqual({ a: "x" });
516
+ expect(schema.parse({})).toEqual({});
517
+ expect(() => schema.parse({ c: "z" })).toThrow();
518
+ expect(() => schema.parse({ a: "x", c: "z" })).toThrow();
519
+ });
520
+
521
+ test("propertyNames with enum still honors required", () => {
522
+ const schema = fromJSONSchema({
523
+ type: "object",
524
+ properties: { a: { type: "string" }, b: { type: "string" } },
525
+ required: ["a"],
526
+ propertyNames: { enum: ["a", "b"] },
527
+ additionalProperties: { type: "string" },
528
+ });
529
+ expect(schema.parse({ a: "x" })).toEqual({ a: "x" });
530
+ expect(schema.parse({ a: "x", b: "y" })).toEqual({ a: "x", b: "y" });
531
+ expect(() => schema.parse({})).toThrow();
532
+ expect(() => schema.parse({ b: "y" })).toThrow();
533
+ });
534
+
535
+ test("propertyNames does not apply additionalProperties to declared properties", () => {
536
+ const schema = fromJSONSchema({
537
+ type: "object",
538
+ properties: { a: { type: "number" } },
539
+ propertyNames: { enum: ["a", "b"] },
540
+ additionalProperties: { type: "string" },
541
+ });
542
+ expect(schema.parse({ a: 1 })).toEqual({ a: 1 });
543
+ expect(schema.parse({ a: 1, b: "x" })).toEqual({ a: 1, b: "x" });
544
+ expect(() => schema.parse({ b: 1 })).toThrow();
545
+ });
546
+
547
+ test("propertyNames alongside additionalProperties: false", () => {
548
+ const schema = fromJSONSchema({
549
+ type: "object",
550
+ properties: { a: { type: "string" } },
551
+ propertyNames: { enum: ["a", "b"] },
552
+ additionalProperties: false,
553
+ });
554
+ expect(schema.parse({ a: "x" })).toEqual({ a: "x" });
555
+ expect(() => schema.parse({ a: "x", b: "y" })).toThrow();
556
+ expect(() => schema.parse({ c: "z" })).toThrow();
557
+ });
558
+
559
+ test("propertyNames alongside patternProperties", () => {
560
+ const schema = fromJSONSchema({
561
+ type: "object",
562
+ patternProperties: { "^S_": { type: "string" } },
563
+ propertyNames: { type: "string", pattern: "^S_" },
564
+ });
565
+ expect(schema.parse({ S_a: "x" })).toEqual({ S_a: "x" });
566
+ expect(() => schema.parse({ S_a: 1 })).toThrow();
567
+ expect(() => schema.parse({ other: "x" })).toThrow();
568
+ });
569
+
570
+ test("propertyNames rejects keys the object parse would drop or synthesize", () => {
571
+ const schema = fromJSONSchema({ type: "object", propertyNames: { enum: ["a"] } });
572
+ // An object parse strips `__proto__`, so the guard has to see the raw input.
573
+ expect(() => schema.parse(JSON.parse('{"__proto__":1}'))).toThrow();
574
+
575
+ // A property `default` adds a key that was never in the instance.
576
+ const withDefault = fromJSONSchema({
577
+ type: "object",
578
+ properties: { AB: { type: "string", default: "x" } },
579
+ propertyNames: { type: "string", pattern: "^[a-z]+$" },
580
+ });
581
+ expect(withDefault.parse({})).toEqual({ AB: "x" });
582
+ });
583
+
584
+ test("propertyNames subschema without a type still constrains keys", () => {
585
+ const schema = fromJSONSchema({
586
+ type: "object",
587
+ propertyNames: { pattern: "^[A-Za-z_][A-Za-z0-9_]*$" },
588
+ });
589
+ expect(schema.parse({ valid_key: "x" })).toEqual({ valid_key: "x" });
590
+ expect(() => schema.parse({ "001 invalid": "x" })).toThrow();
591
+ });
592
+
593
+ test("boolean propertyNames", () => {
594
+ expect(() => fromJSONSchema({ type: "object", propertyNames: false }).parse({ a: 1 })).toThrow();
595
+ expect(fromJSONSchema({ type: "object", propertyNames: false }).parse({})).toEqual({});
596
+ expect(fromJSONSchema({ type: "object", propertyNames: true }).parse({ anything: 1 })).toEqual({ anything: 1 });
597
+ });
598
+
599
+ test("propertyNames metadata is not attached where it is inert", () => {
600
+ // Not an object: nothing enforces it, so it must not be advertised either.
601
+ expect(z.toJSONSchema(fromJSONSchema({ type: "string", propertyNames: { enum: ["a"] } }))).not.toHaveProperty(
602
+ "propertyNames"
603
+ );
604
+
605
+ // A $ref target is shared by every reference to it; metadata must not leak onto it.
606
+ const shared = z.toJSONSchema(
607
+ fromJSONSchema({
608
+ $defs: { N: { type: "object", properties: { v: { type: "string" } } } },
609
+ type: "object",
610
+ properties: { a: { $ref: "#/$defs/N", propertyNames: { enum: ["v"] } }, b: { $ref: "#/$defs/N" } },
611
+ })
612
+ ) as any;
613
+ expect(shared.properties.b).not.toHaveProperty("propertyNames");
614
+ });
615
+
616
+ test("propertyNames survives a toJSONSchema round trip", () => {
617
+ const roundTripped = z.toJSONSchema(
618
+ fromJSONSchema({
619
+ type: "object",
620
+ propertyNames: { enum: ["a", "b"] },
621
+ additionalProperties: { type: "string" },
622
+ })
623
+ ) as Record<string, unknown>;
624
+ expect(roundTripped.propertyNames).toEqual({ enum: ["a", "b"] });
625
+ expect(roundTripped.required).toBeUndefined();
626
+
627
+ // The key guard is a pipe; neither side may swallow the object it wraps.
628
+ for (const io of ["input", "output"] as const) {
629
+ const out = z.toJSONSchema(
630
+ fromJSONSchema({
631
+ type: "object",
632
+ properties: { a: { type: "string" } },
633
+ propertyNames: { enum: ["a", "b"] },
634
+ additionalProperties: { type: "string" },
635
+ }),
636
+ { io }
637
+ ) as Record<string, unknown>;
638
+ expect(out.type).toBe("object");
639
+ expect(out.properties).toEqual({ a: { type: "string" } });
640
+ expect(out.propertyNames).toEqual({ enum: ["a", "b"] });
641
+ }
642
+ });
643
+
339
644
  test("patternProperties with regular properties", () => {
340
- // Note: When patternProperties is combined with properties, the intersection
341
- // validates all keys against the pattern. This test uses a pattern that
342
- // matches the regular property name as well.
645
+ // Note: When patternProperties is combined with properties, the intersection validates all keys against the pattern. This test uses a pattern that matches the regular property name as well.
343
646
  const schema = fromJSONSchema({
344
647
  type: "object",
345
648
  properties: {
@@ -387,13 +690,55 @@ test("multiple overlapping patternProperties", () => {
387
690
  expect(() => schema.parse({ S_N: "ab" })).toThrow(); // too short for ^S_N pattern
388
691
  });
389
692
 
693
+ test("patternProperties with additionalProperties false", () => {
694
+ const schema = fromJSONSchema({
695
+ type: "object",
696
+ patternProperties: {
697
+ "^S_": { type: "string" },
698
+ },
699
+ additionalProperties: false,
700
+ });
701
+ expect(schema.parse({ S_name: "ok" })).toEqual({ S_name: "ok" });
702
+ expect(() => schema.parse({ X_A: false })).toThrow();
703
+ expect(() => schema.parse({ S_name: 1 })).toThrow();
704
+ });
705
+
706
+ test("patternProperties and properties with additionalProperties false", () => {
707
+ const schema = fromJSONSchema({
708
+ type: "object",
709
+ properties: {
710
+ name: { type: "string" },
711
+ },
712
+ patternProperties: {
713
+ "^S_": { type: "string" },
714
+ },
715
+ additionalProperties: false,
716
+ required: ["name"],
717
+ });
718
+ expect(schema.parse({ name: "ok", S_count: "1" })).toEqual({ name: "ok", S_count: "1" });
719
+ expect(() => schema.parse({ name: "ok", S_count: 1 })).toThrow();
720
+ expect(() => schema.parse({ name: "ok", other: "value" })).toThrow();
721
+ });
722
+
723
+ test("multiple patternProperties with additionalProperties false", () => {
724
+ const schema = fromJSONSchema({
725
+ type: "object",
726
+ patternProperties: {
727
+ "^S_": { type: "string" },
728
+ "^N_": { type: "number" },
729
+ },
730
+ additionalProperties: false,
731
+ });
732
+ expect(schema.parse({ S_a: "a", N_b: 1 })).toEqual({ S_a: "a", N_b: 1 });
733
+ expect(() => schema.parse({ S_a: "a", N_b: 1, other: "value" })).toThrow();
734
+ });
735
+
390
736
  test("default value", () => {
391
737
  const schema = fromJSONSchema({
392
738
  type: "string",
393
739
  default: "hello",
394
740
  });
395
- // Default is applied during parsing if value is missing/undefined
396
- // This depends on Zod's default behavior
741
+ // Default is applied during parsing if value is missing/undefined. This depends on Zod's default behavior
397
742
  expect(schema.parse("world")).toBe("world");
398
743
  });
399
744
 
@@ -457,6 +802,53 @@ test("string format - uuid", () => {
457
802
  expect(schema.parse(uuid)).toBe(uuid);
458
803
  });
459
804
 
805
+ test("string format - date-time", () => {
806
+ const schema = fromJSONSchema({
807
+ type: "string",
808
+ format: "date-time",
809
+ });
810
+ expect(schema.safeParse("2026-07-29T14:30:00Z").success).toBe(true);
811
+ expect(schema.safeParse("2026-07-29T16:30:00+02:00").success).toBe(true);
812
+ expect(schema.safeParse("2026-07-29T14:30:00").success).toBe(false);
813
+ expect(schema.safeParse("2026-07-29T16:30:00+0200").success).toBe(false);
814
+
815
+ const zuluOnly = fromJSONSchema({
816
+ type: "string",
817
+ format: "date-time",
818
+ pattern: "Z$",
819
+ });
820
+ expect(zuluOnly.safeParse("2026-07-29T14:30:00Z").success).toBe(true);
821
+ expect(zuluOnly.safeParse("2026-07-29T16:30:00+02:00").success).toBe(false);
822
+ expect(zuluOnly.safeParse("garbageZ").success).toBe(false);
823
+
824
+ const roundTripped = fromJSONSchema(z.toJSONSchema(z.iso.datetime({ offset: true })));
825
+ expect(roundTripped.safeParse("2026-07-29T16:30:00+02:00").success).toBe(true);
826
+ });
827
+
828
+ test("string format - time", () => {
829
+ const schema = fromJSONSchema({
830
+ type: "string",
831
+ format: "time",
832
+ });
833
+ // full-time, so seconds and an offset are both required
834
+ expect(schema.safeParse("14:30:00Z").success).toBe(true);
835
+ expect(schema.safeParse("16:30:00+02:00").success).toBe(true);
836
+ expect(schema.safeParse("16:30:00.123-05:30").success).toBe(true);
837
+ expect(schema.safeParse("14:30:00").success).toBe(false);
838
+ expect(schema.safeParse("14:30Z").success).toBe(false);
839
+ expect(schema.safeParse("16:30:00+0200").success).toBe(false);
840
+ expect(schema.safeParse("16:30:00+24:00").success).toBe(false);
841
+ });
842
+
843
+ test("string format - hostname", () => {
844
+ const schema = fromJSONSchema({
845
+ type: "string",
846
+ format: "hostname",
847
+ });
848
+ expect(schema.parse("example.com")).toBe("example.com");
849
+ expect(() => schema.parse("not a hostname!")).toThrow();
850
+ });
851
+
460
852
  test("exclusiveMinimum and exclusiveMaximum", () => {
461
853
  const schema = fromJSONSchema({
462
854
  type: "number",
@@ -648,8 +1040,7 @@ test("metadata on nested schemas", () => {
648
1040
  // Verify parent schema has its metadata
649
1041
  expect(customRegistry.get(parentSchema)?.title).toBe("User");
650
1042
 
651
- // We can't easily access nested schemas directly, but we can verify
652
- // the registry is being used correctly by checking a separate schema
1043
+ // We can't easily access nested schemas directly, but we can verify the registry is being used correctly by checking a separate schema
653
1044
  const simpleSchema = fromJSONSchema(
654
1045
  {
655
1046
  type: "string",
@@ -673,8 +1064,7 @@ test("no metadata added when no unrecognized keys", () => {
673
1064
  { registry: customRegistry }
674
1065
  );
675
1066
 
676
- // description is handled via .describe(), so it shouldn't be in metadata
677
- // All other keys are recognized, so no metadata should be added
1067
+ // description is handled via .describe(), so it shouldn't be in metadata. All other keys are recognized, so no metadata should be added
678
1068
  expect(customRegistry.get(schema)).toBeUndefined();
679
1069
  });
680
1070
 
@@ -893,3 +1283,185 @@ test("Date default is coerced to its JSON string form", () => {
893
1283
  const schema = fromJSONSchema({ type: "string", default: date as any });
894
1284
  expect(schema.parse(undefined)).toBe(date.toISOString());
895
1285
  });
1286
+
1287
+ // An object literal can't express an own "__proto__" key — `{ __proto__: x }` sets the literal's prototype instead. JSON.parse is both the realistic source of a JSON Schema and the only way to write these cases.
1288
+ test("required __proto__ property is represented in the shape but stripped during parsing", () => {
1289
+ const schema = fromJSONSchema(
1290
+ JSON.parse(`{
1291
+ "type": "object",
1292
+ "properties": { "__proto__": { "type": "string", "const": "admin" }, "role": { "type": "string" } },
1293
+ "required": ["__proto__", "role"]
1294
+ }`)
1295
+ );
1296
+
1297
+ expect(Object.prototype.hasOwnProperty.call((schema as z.ZodObject).shape, "__proto__")).toBe(true);
1298
+ expect(schema.parse({ role: "x" })).toEqual({ role: "x" });
1299
+ expect(schema.parse(JSON.parse(`{ "role": "x", "__proto__": "wrong" }`))).toEqual({ role: "x" });
1300
+ expect(schema.parse(JSON.parse(`{ "role": "x", "__proto__": "admin" }`))).toEqual({ role: "x" });
1301
+ });
1302
+
1303
+ test("__proto__ annotation key reaches the registry", () => {
1304
+ const registry = z.registry<Record<string, unknown>>();
1305
+ const schema = fromJSONSchema(JSON.parse(`{ "type": "string", "__proto__": { "custom": 1 } }`), { registry });
1306
+
1307
+ const meta = registry.get(schema)!;
1308
+ expect(Object.prototype.hasOwnProperty.call(meta, "__proto__")).toBe(true);
1309
+ expect(meta.__proto__).toEqual({ custom: 1 });
1310
+ });
1311
+
1312
+ test("minProperties and maxProperties count the raw input", () => {
1313
+ const schema = fromJSONSchema({
1314
+ type: "object",
1315
+ properties: { a: { type: "string" } },
1316
+ minProperties: 1,
1317
+ maxProperties: 2,
1318
+ });
1319
+ expect(schema.safeParse({ a: "x" }).success).toBe(true);
1320
+ expect(schema.safeParse({}).error!.issues[0]).toMatchObject({ code: "too_small", origin: "object", minimum: 1 });
1321
+ expect(schema.safeParse({ a: "x", b: 1, c: 2 }).error!.issues[0]).toMatchObject({
1322
+ code: "too_big",
1323
+ origin: "object",
1324
+ maximum: 2,
1325
+ });
1326
+ // raw input: a defaulted property does not satisfy the minimum, and a dropped __proto__ still counts
1327
+ const defaulted = fromJSONSchema({
1328
+ type: "object",
1329
+ properties: { a: { type: "string", default: "x" } },
1330
+ minProperties: 1,
1331
+ });
1332
+ expect(defaulted.safeParse({}).success).toBe(false);
1333
+ const capped = fromJSONSchema({ type: "object", maxProperties: 1 });
1334
+ expect(capped.safeParse(JSON.parse('{"__proto__":1,"a":1}')).success).toBe(false);
1335
+ expect(z.toJSONSchema(schema)).toMatchObject({ minProperties: 1, maxProperties: 2 });
1336
+ });
1337
+
1338
+ test("minProperties composes with propertyNames in one guard", () => {
1339
+ const schema = fromJSONSchema({ type: "object", propertyNames: { pattern: "^a" }, minProperties: 1 });
1340
+ expect(schema.safeParse({}).error!.issues[0]!.code).toBe("too_small");
1341
+ expect(schema.safeParse({ b: 1 }).error!.issues[0]!.code).toBe("invalid_key");
1342
+ expect(schema.safeParse({ a: 1 }).success).toBe(true);
1343
+ });
1344
+
1345
+ test("uniqueItems rejects structural duplicates", () => {
1346
+ const schema = fromJSONSchema({ type: "array", uniqueItems: true });
1347
+ expect(
1348
+ schema.safeParse([
1349
+ { a: 1, b: 2 },
1350
+ { b: 2, a: 1 },
1351
+ ]).error!.issues[0]
1352
+ ).toMatchObject({
1353
+ code: "custom",
1354
+ path: [1],
1355
+ });
1356
+ expect(schema.safeParse([1, "1", true, 1]).success).toBe(false);
1357
+ expect(schema.safeParse([{ a: 1 }, { a: 2 }, [1], [2]]).success).toBe(true);
1358
+ expect(z.toJSONSchema(schema)).toMatchObject({ uniqueItems: true });
1359
+ });
1360
+
1361
+ test("contains with minContains and maxContains", () => {
1362
+ const schema = fromJSONSchema({ type: "array", contains: { type: "integer" } });
1363
+ expect(schema.safeParse(["a"]).success).toBe(false);
1364
+ expect(schema.safeParse(["a", 1]).success).toBe(true);
1365
+ const bounded = fromJSONSchema({ type: "array", contains: { type: "integer" }, minContains: 2, maxContains: 3 });
1366
+ expect(bounded.safeParse([1, "a"]).success).toBe(false);
1367
+ expect(bounded.safeParse([1, 2, "a"]).success).toBe(true);
1368
+ expect(bounded.safeParse([1, 2, 3, 4]).success).toBe(false);
1369
+ // minContains: 0 accepts an array with no matches at all
1370
+ expect(fromJSONSchema({ type: "array", contains: { type: "integer" }, minContains: 0 }).safeParse([]).success).toBe(
1371
+ true
1372
+ );
1373
+ expect(z.toJSONSchema(bounded)).toMatchObject({ contains: { type: "integer" }, minContains: 2, maxContains: 3 });
1374
+ });
1375
+
1376
+ test("uniqueItems and contains see the raw instance, not the parsed output", () => {
1377
+ const items = { type: "object", properties: { a: { type: "string", default: "x" } } } as const;
1378
+ // no instance item carries `a`; the default must not synthesize the match
1379
+ const contains = fromJSONSchema({
1380
+ type: "array",
1381
+ items,
1382
+ contains: { type: "object", properties: { a: { const: "x" } }, required: ["a"] },
1383
+ });
1384
+ expect(contains.safeParse([{}]).success).toBe(false);
1385
+ expect(contains.safeParse([{ a: "x" }]).success).toBe(true);
1386
+ // the instance items differ; the default must not collapse them into duplicates
1387
+ const unique = fromJSONSchema({ type: "array", items, uniqueItems: true });
1388
+ expect(unique.safeParse([{ a: "x" }, {}]).success).toBe(true);
1389
+ expect(unique.safeParse([{}, {}]).error!.issues[0]).toMatchObject({ code: "custom", path: [1] });
1390
+ });
1391
+
1392
+ test("a guard keyword takes precedence over the length keywords", () => {
1393
+ const schema = fromJSONSchema({ type: "array", items: { type: "integer" }, minItems: 3, uniqueItems: true });
1394
+ // the guard runs on the input side of the pipe, so its issue aborts before minItems is reached
1395
+ expect(schema.safeParse([1, 1]).error!.issues.map((i) => i.code)).toEqual(["custom"]);
1396
+ expect(schema.safeParse([1, 2]).error!.issues.map((i) => i.code)).toEqual(["too_small"]);
1397
+ });
1398
+
1399
+ test("a guard keyword drops default and examples from the input-mode document", () => {
1400
+ // the guard is a transform on the pipe's input side, and toJSONSchema strips annotations from a transforming schema in input mode
1401
+ const schema = fromJSONSchema({ type: "array", uniqueItems: true, default: [], examples: [[1]] });
1402
+ expect(z.toJSONSchema(schema, { io: "input" })).not.toHaveProperty("default");
1403
+ expect(z.toJSONSchema(schema, { io: "output" })).toMatchObject({ default: [], examples: [[1]] });
1404
+ // without a guard keyword both modes carry them
1405
+ const plain = fromJSONSchema({ type: "array", default: [], examples: [[1]] });
1406
+ expect(z.toJSONSchema(plain, { io: "input" })).toMatchObject({ default: [], examples: [[1]] });
1407
+ });
1408
+
1409
+ test("uniqueItems equality follows JSON semantics", () => {
1410
+ const schema = fromJSONSchema({ type: "array", uniqueItems: true });
1411
+ expect(schema.safeParse([1, "1", true, null]).success).toBe(true);
1412
+ expect(schema.safeParse([{ a: undefined }, {}]).success).toBe(true);
1413
+ expect(
1414
+ schema.safeParse([
1415
+ [1, [2]],
1416
+ [1, [2]],
1417
+ ]).success
1418
+ ).toBe(false);
1419
+ expect(schema.safeParse([{ a: "b=c" }, { "a=b": "c" }]).success).toBe(true);
1420
+ // every duplicate is reported against the first element it matches
1421
+ expect(schema.safeParse([1, 1, 1]).error!.issues.map((i) => i.path[0])).toEqual([1, 2]);
1422
+ // a cycle cannot be compared, so it is never called a duplicate rather than hanging
1423
+ const cyclic: any = {};
1424
+ cyclic.self = cyclic;
1425
+ expect(schema.safeParse([cyclic, cyclic]).success).toBe(true);
1426
+ });
1427
+
1428
+ test("a carried subschema that references $defs is dropped rather than emitted dangling", () => {
1429
+ const schema = fromJSONSchema({
1430
+ type: "array",
1431
+ contains: { $ref: "#/$defs/Hit" },
1432
+ $defs: { Hit: { type: "object", properties: { id: { type: "string" } }, required: ["id"] } },
1433
+ });
1434
+ // enforcement is unaffected; only the round trip gives the keyword up
1435
+ expect(schema.safeParse([{ id: "a" }]).success).toBe(true);
1436
+ expect(schema.safeParse([{}]).success).toBe(false);
1437
+ expect(JSON.stringify(z.toJSONSchema(schema))).not.toContain("$ref");
1438
+ expect(z.toJSONSchema(schema)).not.toHaveProperty("contains");
1439
+ // an inline subschema is self-contained, so it still round-trips
1440
+ const inline = fromJSONSchema({ type: "array", contains: { type: "integer" } });
1441
+ expect(z.toJSONSchema(inline)).toMatchObject({ contains: { type: "integer" } });
1442
+ // only schema positions are walked, so a `$ref` key in instance data or an unknown annotation still travels
1443
+ for (const annotation of [{ default: { $ref: "literal" } }, { "x-note": { $ref: "literal" } }]) {
1444
+ const annotated = fromJSONSchema({ type: "array", contains: { type: "integer", ...annotation } });
1445
+ expect(annotated.safeParse(["x"]).success).toBe(false);
1446
+ expect(z.toJSONSchema(annotated)).toMatchObject({ contains: { type: "integer" } });
1447
+ }
1448
+ // draft-7 `dependencies` is a schema map; its array form names properties and holds no reference
1449
+ const dependent = fromJSONSchema({
1450
+ type: "array",
1451
+ contains: { type: "object", dependencies: { a: { $ref: "#/definitions/Hit" } } },
1452
+ definitions: { Hit: { type: "object" } },
1453
+ });
1454
+ expect(z.toJSONSchema(dependent)).not.toHaveProperty("contains");
1455
+ const named = fromJSONSchema({
1456
+ type: "array",
1457
+ contains: { type: "object", dependencies: { a: ["b"] } },
1458
+ });
1459
+ expect(z.toJSONSchema(named)).toMatchObject({ contains: { dependencies: { a: ["b"] } } });
1460
+ // a reference nested in a schema position is still caught
1461
+ const nested = fromJSONSchema({
1462
+ type: "array",
1463
+ contains: { type: "array", items: { $ref: "#/$defs/Hit" } },
1464
+ $defs: { Hit: { type: "string" } },
1465
+ });
1466
+ expect(z.toJSONSchema(nested)).not.toHaveProperty("contains");
1467
+ });