@openclaw/feishu 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 (796) hide show
  1. package/assets/activity.svg +3 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/{accounts-cCMNFBKg.js → .setup/accounts-DmU0xYPx.mjs} +1 -1
  4. package/dist/{app-registration-BI99e_JI.js → .setup/app-registration-Bv4mvauR.mjs} +1 -1
  5. package/dist/{channel-HDnQAH4Z.js → .setup/channel-DsndN1sp.mjs} +93 -86
  6. package/dist/{channel.runtime-B-f6ajOp.js → .setup/channel.runtime-tihKUwVI.mjs} +32 -18
  7. package/dist/{chat-zhIPXu4X.js → .setup/chat-BlvUjdN9.mjs} +2 -2
  8. package/dist/{client-DMbIL3UH.js → .setup/client-DCwNVFZg.mjs} +128 -11
  9. package/dist/{conversation-id-VYgGQ-GX.js → .setup/conversation-id-H-lUayji.mjs} +49 -14
  10. package/dist/{monitor-EuNsFn2T.js → .setup/monitor-OTT7VckU.mjs} +7 -6
  11. package/dist/{monitor.account-CZ7EtqYS.js → .setup/monitor.account-D5j6WomE.mjs} +297 -127
  12. package/dist/{probe-D_SatdZl.js → .setup/probe-bdidyhAn.mjs} +2 -2
  13. package/dist/{reply-delivery-result-C3smdVzb.js → .setup/reply-delivery-result-CRIHpSze.mjs} +136 -118
  14. package/dist/.setup/runtime-setter-api-CG-RC4_r.mjs +3 -0
  15. package/dist/.setup/secret-contract-api-jmCkqVLc.mjs +3 -0
  16. package/dist/{security-audit-DKfR4Cv3.js → .setup/security-audit-CmiKKfU-.mjs} +1 -1
  17. package/dist/{session-conversation-DFCIvQK-.js → .setup/session-conversation-ZC6TC1zk.mjs} +1 -1
  18. package/dist/.setup/setup-api-VAUkwtTi.mjs +3 -0
  19. package/dist/{subagent-hooks-Buadpie_.js → .setup/subagent-hooks-BBfF1hZk.mjs} +3 -19
  20. package/dist/api.js +29 -15
  21. package/dist/channel-plugin-api.js +1 -1
  22. package/dist/contract-api.js +3 -3
  23. package/dist/doctor-contract-api.js +1 -1
  24. package/dist/runtime-api.js +1 -1
  25. package/dist/runtime-setter-api.js +1 -1
  26. package/dist/secret-contract-api.js +1 -1
  27. package/dist/security-contract-api.js +1 -1
  28. package/dist/session-binding-contract-api.js +1 -1
  29. package/dist/session-key-api.js +1 -1
  30. package/dist/setup-api.js +1 -1
  31. package/dist/setup-entry.js +4 -3
  32. package/dist/subagent-hooks-api.js +1 -1
  33. package/node_modules/@larksuiteoapi/node-sdk/es/index.js +199 -35
  34. package/node_modules/@larksuiteoapi/node-sdk/lib/index.js +199 -35
  35. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/CHANGELOG.md +62 -0
  36. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/README.md +233 -5
  37. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/axios.js +387 -89
  38. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/axios.min.js +3 -3
  39. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/axios.min.js.map +1 -1
  40. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/browser/axios.cjs +458 -98
  41. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/esm/axios.js +458 -98
  42. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/esm/axios.min.js +2 -2
  43. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  44. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/dist/node/axios.cjs +568 -116
  45. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/index.d.cts +4 -0
  46. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/index.d.ts +4 -0
  47. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/adapters/fetch.js +64 -11
  48. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/adapters/http.js +134 -50
  49. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/adapters/xhr.js +52 -3
  50. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/Axios.js +19 -14
  51. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/InterceptorManager.js +107 -8
  52. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/buildFullPath.js +1 -13
  53. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/dispatchRequest.js +8 -2
  54. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/mergeConfig.js +1 -1
  55. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/core/methodList.js +17 -0
  56. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/defaults/index.js +2 -1
  57. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/env/data.js +1 -1
  58. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/Http2Sessions.js +2 -0
  59. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/HttpStatusCode.js +11 -1
  60. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/fromDataURI.js +5 -4
  61. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/normalizeURLForProtocolCheck.js +24 -0
  62. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/progressEventReducer.js +1 -1
  63. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/resolveConfig.js +4 -2
  64. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/shouldBypassProxy.js +182 -6
  65. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/throttle.js +3 -2
  66. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/helpers/toFormData.js +14 -21
  67. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/lib/utils.js +134 -13
  68. package/node_modules/@larksuiteoapi/node-sdk/node_modules/axios/package.json +1 -1
  69. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/README.md +24 -17
  70. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/light/protobuf.js +124 -14
  71. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  72. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  73. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  74. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/minimal/protobuf.js +63 -9
  75. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
  76. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
  77. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
  78. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/protobuf.js +133 -18
  79. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  80. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  81. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  82. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/ext/descriptor.generated.d.ts +7 -0
  83. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/ext/descriptor.js +24 -0
  84. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/ext/protojson.js +14 -4
  85. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/ext/textformat.js +8 -4
  86. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/google/protobuf/descriptor.json +20 -1
  87. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/google/protobuf/descriptor.proto +14 -1
  88. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/index.d.ts +12 -0
  89. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/package.json +1 -1
  90. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/decoder.js +31 -2
  91. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/enum.js +10 -0
  92. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/object.js +5 -2
  93. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/parse.js +9 -4
  94. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/reader.js +61 -7
  95. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/type.js +10 -0
  96. package/node_modules/@larksuiteoapi/node-sdk/node_modules/protobufjs/src/wrappers.js +5 -1
  97. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/.github/THREAT_MODEL.md +3 -3
  98. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/CHANGELOG.md +15 -0
  99. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/README.md +19 -1
  100. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/dist/qs.js +21 -21
  101. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/eslint.config.mjs +1 -1
  102. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/lib/parse.js +3 -4
  103. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/lib/stringify.js +23 -8
  104. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/lib/utils.js +10 -3
  105. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/package.json +4 -4
  106. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/test/parse.js +192 -3
  107. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/test/stringify.js +317 -0
  108. package/node_modules/@larksuiteoapi/node-sdk/node_modules/qs/test/utils.js +12 -0
  109. package/node_modules/@larksuiteoapi/node-sdk/package.json +1 -1
  110. package/node_modules/@larksuiteoapi/node-sdk/types/index.d.ts +35 -0
  111. package/node_modules/micromark-extension-gfm-table/dev/lib/edit-map.d.ts +13 -0
  112. package/node_modules/micromark-extension-gfm-table/dev/lib/edit-map.d.ts.map +1 -1
  113. package/node_modules/micromark-extension-gfm-table/dev/lib/edit-map.js +35 -16
  114. package/node_modules/micromark-extension-gfm-table/dev/lib/html.js +5 -0
  115. package/node_modules/micromark-extension-gfm-table/dev/lib/syntax.js +26 -3
  116. package/node_modules/micromark-extension-gfm-table/lib/edit-map.d.ts +13 -0
  117. package/node_modules/micromark-extension-gfm-table/lib/edit-map.d.ts.map +1 -1
  118. package/node_modules/micromark-extension-gfm-table/lib/edit-map.js +37 -17
  119. package/node_modules/micromark-extension-gfm-table/lib/html.js +5 -0
  120. package/node_modules/micromark-extension-gfm-table/lib/syntax.js +29 -2
  121. package/node_modules/micromark-extension-gfm-table/package.json +6 -48
  122. package/node_modules/micromark-extension-gfm-table/readme.md +40 -40
  123. package/node_modules/typebox/build/compile/validator.d.mts +1 -1
  124. package/node_modules/typebox/build/compile/validator.mjs +1 -1
  125. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +7 -5
  126. package/node_modules/typebox/build/format/iri.mjs +5 -1
  127. package/node_modules/typebox/build/guard/emit.mjs +2 -4
  128. package/node_modules/typebox/build/guard/guard.mjs +6 -18
  129. package/node_modules/typebox/build/guard/string.mjs +16 -24
  130. package/node_modules/typebox/build/schema/build.mjs +2 -2
  131. package/node_modules/typebox/build/schema/check.mjs +1 -1
  132. package/node_modules/typebox/build/schema/compile.d.mts +3 -2
  133. package/node_modules/typebox/build/schema/compile.mjs +8 -8
  134. package/node_modules/typebox/build/schema/engine/_context.d.mts +6 -7
  135. package/node_modules/typebox/build/schema/engine/_context.mjs +23 -15
  136. package/node_modules/typebox/build/schema/engine/_functions.d.mts +2 -2
  137. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -1
  138. package/node_modules/typebox/build/schema/engine/_reducer.d.mts +3 -3
  139. package/node_modules/typebox/build/schema/engine/_refine.d.mts +5 -5
  140. package/node_modules/typebox/build/schema/engine/_refine.mjs +4 -7
  141. package/node_modules/typebox/build/schema/engine/_stack.d.mts +34 -16
  142. package/node_modules/typebox/build/schema/engine/_stack.mjs +148 -104
  143. package/node_modules/typebox/build/schema/engine/additionalItems.d.mts +4 -4
  144. package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +8 -8
  145. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +26 -18
  146. package/node_modules/typebox/build/schema/engine/allOf.d.mts +4 -4
  147. package/node_modules/typebox/build/schema/engine/allOf.mjs +3 -3
  148. package/node_modules/typebox/build/schema/engine/anyOf.d.mts +4 -4
  149. package/node_modules/typebox/build/schema/engine/anyOf.mjs +5 -10
  150. package/node_modules/typebox/build/schema/engine/boolean.d.mts +4 -4
  151. package/node_modules/typebox/build/schema/engine/boolean.mjs +2 -6
  152. package/node_modules/typebox/build/schema/engine/const.d.mts +4 -4
  153. package/node_modules/typebox/build/schema/engine/const.mjs +2 -6
  154. package/node_modules/typebox/build/schema/engine/contains.d.mts +4 -4
  155. package/node_modules/typebox/build/schema/engine/contains.mjs +2 -6
  156. package/node_modules/typebox/build/schema/engine/dependencies.d.mts +4 -4
  157. package/node_modules/typebox/build/schema/engine/dependencies.mjs +3 -6
  158. package/node_modules/typebox/build/schema/engine/dependentRequired.d.mts +4 -4
  159. package/node_modules/typebox/build/schema/engine/dependentRequired.mjs +2 -6
  160. package/node_modules/typebox/build/schema/engine/dependentSchemas.d.mts +4 -4
  161. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +4 -4
  162. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +11 -7
  163. package/node_modules/typebox/build/schema/engine/enum.d.mts +4 -4
  164. package/node_modules/typebox/build/schema/engine/enum.mjs +2 -6
  165. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.d.mts +4 -4
  166. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.mjs +2 -6
  167. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.d.mts +4 -4
  168. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.mjs +2 -6
  169. package/node_modules/typebox/build/schema/engine/format.d.mts +4 -4
  170. package/node_modules/typebox/build/schema/engine/format.mjs +2 -6
  171. package/node_modules/typebox/build/schema/engine/if.d.mts +4 -4
  172. package/node_modules/typebox/build/schema/engine/if.mjs +7 -15
  173. package/node_modules/typebox/build/schema/engine/items.d.mts +4 -4
  174. package/node_modules/typebox/build/schema/engine/items.mjs +1 -1
  175. package/node_modules/typebox/build/schema/engine/maxContains.d.mts +4 -4
  176. package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -6
  177. package/node_modules/typebox/build/schema/engine/maxItems.d.mts +4 -4
  178. package/node_modules/typebox/build/schema/engine/maxItems.mjs +2 -6
  179. package/node_modules/typebox/build/schema/engine/maxLength.d.mts +4 -4
  180. package/node_modules/typebox/build/schema/engine/maxLength.mjs +2 -6
  181. package/node_modules/typebox/build/schema/engine/maxProperties.d.mts +4 -4
  182. package/node_modules/typebox/build/schema/engine/maxProperties.mjs +2 -6
  183. package/node_modules/typebox/build/schema/engine/maximum.d.mts +4 -4
  184. package/node_modules/typebox/build/schema/engine/maximum.mjs +2 -6
  185. package/node_modules/typebox/build/schema/engine/minContains.d.mts +4 -4
  186. package/node_modules/typebox/build/schema/engine/minContains.mjs +2 -6
  187. package/node_modules/typebox/build/schema/engine/minItems.d.mts +5 -5
  188. package/node_modules/typebox/build/schema/engine/minItems.mjs +2 -6
  189. package/node_modules/typebox/build/schema/engine/minLength.d.mts +4 -4
  190. package/node_modules/typebox/build/schema/engine/minLength.mjs +2 -6
  191. package/node_modules/typebox/build/schema/engine/minProperties.d.mts +4 -4
  192. package/node_modules/typebox/build/schema/engine/minProperties.mjs +2 -6
  193. package/node_modules/typebox/build/schema/engine/minimum.d.mts +4 -4
  194. package/node_modules/typebox/build/schema/engine/minimum.mjs +2 -6
  195. package/node_modules/typebox/build/schema/engine/multipleOf.d.mts +4 -4
  196. package/node_modules/typebox/build/schema/engine/multipleOf.mjs +2 -6
  197. package/node_modules/typebox/build/schema/engine/not.d.mts +4 -4
  198. package/node_modules/typebox/build/schema/engine/not.mjs +4 -8
  199. package/node_modules/typebox/build/schema/engine/oneOf.d.mts +4 -4
  200. package/node_modules/typebox/build/schema/engine/oneOf.mjs +6 -11
  201. package/node_modules/typebox/build/schema/engine/pattern.d.mts +4 -4
  202. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -7
  203. package/node_modules/typebox/build/schema/engine/patternProperties.d.mts +4 -4
  204. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +1 -1
  205. package/node_modules/typebox/build/schema/engine/prefixItems.d.mts +4 -4
  206. package/node_modules/typebox/build/schema/engine/prefixItems.mjs +1 -1
  207. package/node_modules/typebox/build/schema/engine/properties.d.mts +4 -4
  208. package/node_modules/typebox/build/schema/engine/properties.mjs +1 -1
  209. package/node_modules/typebox/build/schema/engine/propertyNames.d.mts +4 -4
  210. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +4 -10
  211. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +4 -4
  212. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +11 -7
  213. package/node_modules/typebox/build/schema/engine/ref.d.mts +4 -4
  214. package/node_modules/typebox/build/schema/engine/ref.mjs +19 -15
  215. package/node_modules/typebox/build/schema/engine/required.d.mts +4 -4
  216. package/node_modules/typebox/build/schema/engine/required.mjs +2 -6
  217. package/node_modules/typebox/build/schema/engine/schema.d.mts +7 -7
  218. package/node_modules/typebox/build/schema/engine/schema.mjs +137 -133
  219. package/node_modules/typebox/build/schema/engine/type.d.mts +4 -4
  220. package/node_modules/typebox/build/schema/engine/type.mjs +2 -6
  221. package/node_modules/typebox/build/schema/engine/unevaluatedItems.d.mts +4 -4
  222. package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +5 -9
  223. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.d.mts +4 -4
  224. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +5 -9
  225. package/node_modules/typebox/build/schema/engine/uniqueItems.d.mts +4 -4
  226. package/node_modules/typebox/build/schema/engine/uniqueItems.mjs +2 -6
  227. package/node_modules/typebox/build/schema/errors.d.mts +2 -2
  228. package/node_modules/typebox/build/schema/errors.mjs +8 -14
  229. package/node_modules/typebox/build/schema/intern/index.d.mts +1 -0
  230. package/node_modules/typebox/build/schema/intern/index.mjs +1 -0
  231. package/node_modules/typebox/build/schema/intern/intern.d.mts +11 -0
  232. package/node_modules/typebox/build/schema/intern/intern.mjs +293 -0
  233. package/node_modules/typebox/build/schema/meta/draft_2019_09.d.mts +2 -0
  234. package/node_modules/typebox/build/schema/meta/draft_2019_09.mjs +288 -0
  235. package/node_modules/typebox/build/schema/meta/draft_2020_12.d.mts +2 -0
  236. package/node_modules/typebox/build/schema/meta/draft_2020_12.mjs +300 -0
  237. package/node_modules/typebox/build/schema/meta/draft_3.d.mts +2 -0
  238. package/node_modules/typebox/build/schema/meta/draft_3.mjs +143 -0
  239. package/node_modules/typebox/build/schema/meta/draft_4.d.mts +2 -0
  240. package/node_modules/typebox/build/schema/meta/draft_4.mjs +149 -0
  241. package/node_modules/typebox/build/schema/meta/draft_6.d.mts +2 -0
  242. package/node_modules/typebox/build/schema/meta/draft_6.mjs +155 -0
  243. package/node_modules/typebox/build/schema/meta/draft_7.d.mts +2 -0
  244. package/node_modules/typebox/build/schema/meta/draft_7.mjs +172 -0
  245. package/node_modules/typebox/build/schema/meta/index.d.mts +2 -0
  246. package/node_modules/typebox/build/schema/meta/index.mjs +2 -0
  247. package/node_modules/typebox/build/schema/meta/meta.d.mts +9 -0
  248. package/node_modules/typebox/build/schema/meta/meta.mjs +15 -0
  249. package/node_modules/typebox/build/schema/meta/schema.d.mts +6 -0
  250. package/node_modules/typebox/build/schema/meta/schema.mjs +1 -0
  251. package/node_modules/typebox/build/schema/parse.d.mts +1 -0
  252. package/node_modules/typebox/build/schema/parse.mjs +10 -5
  253. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +8 -3
  254. package/node_modules/typebox/build/schema/resolve/resolve.mjs +268 -139
  255. package/node_modules/typebox/build/schema/schema.d.mts +2 -0
  256. package/node_modules/typebox/build/schema/schema.mjs +2 -0
  257. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -12
  258. package/node_modules/typebox/build/value/errors/errors.mjs +2 -7
  259. package/node_modules/typebox/package.json +1 -1
  260. package/node_modules/typebox/readme.md +59 -89
  261. package/node_modules/zod/README.md +29 -2
  262. package/node_modules/zod/compile.cjs +96 -0
  263. package/node_modules/zod/compile.d.cts +1 -0
  264. package/node_modules/zod/compile.d.ts +1 -0
  265. package/node_modules/zod/compile.js +52 -0
  266. package/node_modules/zod/index.cjs +21 -2
  267. package/node_modules/zod/index.d.cts +1 -2
  268. package/node_modules/zod/index.d.ts +1 -2
  269. package/node_modules/zod/index.js +5 -2
  270. package/node_modules/zod/locales/index.cjs +19 -0
  271. package/node_modules/zod/mini/index.cjs +19 -0
  272. package/node_modules/zod/package.json +20 -8
  273. package/node_modules/zod/src/compile.ts +56 -0
  274. package/node_modules/zod/src/index.ts +5 -2
  275. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  276. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  277. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  278. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  279. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  280. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  281. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  282. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  283. package/node_modules/zod/src/v3/types.ts +5 -5
  284. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  285. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  286. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  287. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  288. package/node_modules/zod/src/v4/classic/external.ts +14 -9
  289. package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
  290. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  291. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  292. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  293. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  294. package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
  295. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  296. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  297. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
  298. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  299. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  300. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  301. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  302. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
  303. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  304. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  305. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  306. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  307. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  308. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  309. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  310. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  311. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
  312. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  313. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  314. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  315. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
  316. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  317. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  318. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  319. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  320. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  321. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  322. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  323. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  324. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  325. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  326. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  327. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  328. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  329. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  330. package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
  331. package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
  332. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  333. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  334. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  335. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  336. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  337. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  338. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  339. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  340. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
  341. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  342. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  343. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  344. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  345. package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
  346. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  347. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
  348. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
  349. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  350. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  351. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  352. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  353. package/node_modules/zod/src/v4/core/api.ts +87 -35
  354. package/node_modules/zod/src/v4/core/checks.ts +119 -146
  355. package/node_modules/zod/src/v4/core/compile.ts +2313 -0
  356. package/node_modules/zod/src/v4/core/core.ts +99 -22
  357. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  358. package/node_modules/zod/src/v4/core/errors.ts +113 -25
  359. package/node_modules/zod/src/v4/core/index.ts +3 -0
  360. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  361. package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
  362. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  363. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  364. package/node_modules/zod/src/v4/core/parse.ts +164 -50
  365. package/node_modules/zod/src/v4/core/regexes.ts +42 -15
  366. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  367. package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
  368. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  369. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  370. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  371. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  372. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  373. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  374. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  375. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  376. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  377. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  378. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  379. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  380. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  381. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  382. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  383. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  384. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  385. package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
  386. package/node_modules/zod/src/v4/core/util.ts +454 -157
  387. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  388. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  389. package/node_modules/zod/src/v4/index.ts +3 -3
  390. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  391. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  392. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  393. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  394. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  395. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  396. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  397. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  398. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  399. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  400. package/node_modules/zod/src/v4/locales/el.ts +3 -0
  401. package/node_modules/zod/src/v4/locales/en.ts +17 -4
  402. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  403. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  404. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  405. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  406. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  407. package/node_modules/zod/src/v4/locales/fr.ts +21 -14
  408. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  409. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  410. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  411. package/node_modules/zod/src/v4/locales/hr.ts +4 -0
  412. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  413. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  414. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  415. package/node_modules/zod/src/v4/locales/index.ts +11 -0
  416. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  417. package/node_modules/zod/src/v4/locales/it.ts +5 -0
  418. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  419. package/node_modules/zod/src/v4/locales/ka.ts +5 -0
  420. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  421. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  422. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  423. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  424. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  425. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  426. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  427. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  428. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  429. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  430. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  431. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  432. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  433. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  434. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  435. package/node_modules/zod/src/v4/locales/ro.ts +3 -0
  436. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  437. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  438. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  439. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  440. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  441. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  442. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  443. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  444. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  445. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  446. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  447. package/node_modules/zod/src/v4/locales/uz.ts +3 -0
  448. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  449. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  450. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  451. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  452. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  453. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  454. package/node_modules/zod/src/v4/mini/external.ts +12 -1
  455. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  456. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  457. package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
  458. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  459. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  460. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  461. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  462. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  463. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  464. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  465. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  466. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  467. package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
  468. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  469. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  470. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  471. package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
  472. package/node_modules/zod/v3/ZodError.cjs +41 -12
  473. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  474. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  475. package/node_modules/zod/v3/ZodError.js +22 -12
  476. package/node_modules/zod/v3/errors.cjs +19 -0
  477. package/node_modules/zod/v3/external.cjs +19 -0
  478. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  479. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  480. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  481. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  482. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  483. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  484. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  485. package/node_modules/zod/v3/index.cjs +19 -0
  486. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  487. package/node_modules/zod/v3/types.cjs +26 -5
  488. package/node_modules/zod/v3/types.js +7 -5
  489. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  490. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  491. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  492. package/node_modules/zod/v4/classic/checks.js +1 -1
  493. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  494. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  495. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  496. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  497. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  498. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  499. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  500. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  501. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  502. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  503. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  504. package/node_modules/zod/v4/classic/errors.js +43 -34
  505. package/node_modules/zod/v4/classic/external.cjs +51 -27
  506. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  507. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  508. package/node_modules/zod/v4/classic/external.js +5 -8
  509. package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
  510. package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
  511. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  512. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  513. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  514. package/node_modules/zod/v4/classic/in-out.js +36 -0
  515. package/node_modules/zod/v4/classic/index.cjs +21 -2
  516. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  517. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  518. package/node_modules/zod/v4/classic/index.js +2 -2
  519. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  520. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  521. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  522. package/node_modules/zod/v4/classic/iso.js +2 -17
  523. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  524. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  525. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  526. package/node_modules/zod/v4/classic/parse.js +1 -0
  527. package/node_modules/zod/v4/classic/schemas.cjs +591 -426
  528. package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
  529. package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
  530. package/node_modules/zod/v4/classic/schemas.js +564 -424
  531. package/node_modules/zod/v4/core/api.cjs +66 -24
  532. package/node_modules/zod/v4/core/api.d.cts +22 -12
  533. package/node_modules/zod/v4/core/api.d.ts +22 -12
  534. package/node_modules/zod/v4/core/api.js +44 -24
  535. package/node_modules/zod/v4/core/checks.cjs +88 -128
  536. package/node_modules/zod/v4/core/checks.d.cts +29 -13
  537. package/node_modules/zod/v4/core/checks.d.ts +29 -13
  538. package/node_modules/zod/v4/core/checks.js +68 -127
  539. package/node_modules/zod/v4/core/compile.cjs +1908 -0
  540. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  541. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  542. package/node_modules/zod/v4/core/compile.js +1858 -0
  543. package/node_modules/zod/v4/core/core.cjs +101 -19
  544. package/node_modules/zod/v4/core/core.d.cts +16 -4
  545. package/node_modules/zod/v4/core/core.d.ts +16 -4
  546. package/node_modules/zod/v4/core/core.js +83 -20
  547. package/node_modules/zod/v4/core/doc.cjs +31 -9
  548. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  549. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  550. package/node_modules/zod/v4/core/doc.js +12 -9
  551. package/node_modules/zod/v4/core/errors.cjs +126 -25
  552. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  553. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  554. package/node_modules/zod/v4/core/errors.js +107 -25
  555. package/node_modules/zod/v4/core/index.cjs +24 -1
  556. package/node_modules/zod/v4/core/index.d.cts +3 -0
  557. package/node_modules/zod/v4/core/index.d.ts +3 -0
  558. package/node_modules/zod/v4/core/index.js +3 -0
  559. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  560. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  561. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  562. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  563. package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
  564. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  565. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  566. package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
  567. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  568. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  569. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  570. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  571. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  572. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  573. package/node_modules/zod/v4/core/memoizer.js +311 -0
  574. package/node_modules/zod/v4/core/parse.cjs +148 -46
  575. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  576. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  577. package/node_modules/zod/v4/core/parse.js +127 -45
  578. package/node_modules/zod/v4/core/regexes.cjs +54 -17
  579. package/node_modules/zod/v4/core/regexes.d.cts +5 -0
  580. package/node_modules/zod/v4/core/regexes.d.ts +5 -0
  581. package/node_modules/zod/v4/core/regexes.js +32 -15
  582. package/node_modules/zod/v4/core/registries.cjs +19 -0
  583. package/node_modules/zod/v4/core/registries.js +2 -2
  584. package/node_modules/zod/v4/core/schemas.cjs +785 -386
  585. package/node_modules/zod/v4/core/schemas.d.cts +123 -34
  586. package/node_modules/zod/v4/core/schemas.d.ts +123 -34
  587. package/node_modules/zod/v4/core/schemas.js +753 -386
  588. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  589. package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
  590. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  591. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  592. package/node_modules/zod/v4/core/to-json-schema.js +247 -44
  593. package/node_modules/zod/v4/core/util.cjs +372 -157
  594. package/node_modules/zod/v4/core/util.d.cts +79 -1
  595. package/node_modules/zod/v4/core/util.d.ts +79 -1
  596. package/node_modules/zod/v4/core/util.js +341 -156
  597. package/node_modules/zod/v4/core/versions.cjs +21 -2
  598. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  599. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  600. package/node_modules/zod/v4/core/versions.js +2 -2
  601. package/node_modules/zod/v4/core/visit.cjs +214 -0
  602. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  603. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  604. package/node_modules/zod/v4/core/visit.js +169 -0
  605. package/node_modules/zod/v4/index.cjs +34 -5
  606. package/node_modules/zod/v4/index.d.cts +2 -2
  607. package/node_modules/zod/v4/index.d.ts +2 -2
  608. package/node_modules/zod/v4/index.js +3 -2
  609. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  610. package/node_modules/zod/v4/locales/ar.js +5 -0
  611. package/node_modules/zod/v4/locales/az.cjs +5 -0
  612. package/node_modules/zod/v4/locales/az.js +5 -0
  613. package/node_modules/zod/v4/locales/be.cjs +12 -0
  614. package/node_modules/zod/v4/locales/be.js +12 -0
  615. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  616. package/node_modules/zod/v4/locales/bg.js +5 -0
  617. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  618. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  619. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  620. package/node_modules/zod/v4/locales/bn.js +113 -0
  621. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  622. package/node_modules/zod/v4/locales/ca.js +5 -0
  623. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  624. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  625. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  626. package/node_modules/zod/v4/locales/ckb.js +133 -0
  627. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  628. package/node_modules/zod/v4/locales/cs.js +5 -0
  629. package/node_modules/zod/v4/locales/da.cjs +7 -2
  630. package/node_modules/zod/v4/locales/da.js +7 -2
  631. package/node_modules/zod/v4/locales/de.cjs +5 -0
  632. package/node_modules/zod/v4/locales/de.js +5 -0
  633. package/node_modules/zod/v4/locales/el.cjs +3 -0
  634. package/node_modules/zod/v4/locales/el.js +3 -0
  635. package/node_modules/zod/v4/locales/en.cjs +16 -4
  636. package/node_modules/zod/v4/locales/en.js +16 -4
  637. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  638. package/node_modules/zod/v4/locales/eo.js +5 -0
  639. package/node_modules/zod/v4/locales/es.cjs +4 -0
  640. package/node_modules/zod/v4/locales/es.js +4 -0
  641. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  642. package/node_modules/zod/v4/locales/fa.js +5 -0
  643. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  644. package/node_modules/zod/v4/locales/fi.js +5 -0
  645. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  646. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  647. package/node_modules/zod/v4/locales/fr.cjs +18 -14
  648. package/node_modules/zod/v4/locales/fr.js +18 -14
  649. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  650. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  651. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  652. package/node_modules/zod/v4/locales/gu.js +113 -0
  653. package/node_modules/zod/v4/locales/he.cjs +7 -0
  654. package/node_modules/zod/v4/locales/he.js +7 -0
  655. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  656. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  657. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  658. package/node_modules/zod/v4/locales/hi.js +111 -0
  659. package/node_modules/zod/v4/locales/hr.cjs +4 -0
  660. package/node_modules/zod/v4/locales/hr.js +4 -0
  661. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  662. package/node_modules/zod/v4/locales/hu.js +5 -0
  663. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  664. package/node_modules/zod/v4/locales/hy.js +11 -0
  665. package/node_modules/zod/v4/locales/id.cjs +5 -0
  666. package/node_modules/zod/v4/locales/id.js +5 -0
  667. package/node_modules/zod/v4/locales/index.cjs +43 -2
  668. package/node_modules/zod/v4/locales/index.d.cts +11 -0
  669. package/node_modules/zod/v4/locales/index.d.ts +11 -0
  670. package/node_modules/zod/v4/locales/index.js +11 -0
  671. package/node_modules/zod/v4/locales/is.cjs +5 -0
  672. package/node_modules/zod/v4/locales/is.js +5 -0
  673. package/node_modules/zod/v4/locales/it.cjs +5 -0
  674. package/node_modules/zod/v4/locales/it.js +5 -0
  675. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  676. package/node_modules/zod/v4/locales/ja.js +5 -0
  677. package/node_modules/zod/v4/locales/ka.cjs +5 -0
  678. package/node_modules/zod/v4/locales/ka.js +5 -0
  679. package/node_modules/zod/v4/locales/km.cjs +5 -0
  680. package/node_modules/zod/v4/locales/km.js +5 -0
  681. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  682. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  683. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  684. package/node_modules/zod/v4/locales/kn.js +116 -0
  685. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  686. package/node_modules/zod/v4/locales/ko.js +5 -0
  687. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  688. package/node_modules/zod/v4/locales/lt.js +4 -0
  689. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  690. package/node_modules/zod/v4/locales/mk.js +5 -0
  691. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  692. package/node_modules/zod/v4/locales/ms.js +5 -0
  693. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  694. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  695. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  696. package/node_modules/zod/v4/locales/ne.js +111 -0
  697. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  698. package/node_modules/zod/v4/locales/nl.js +5 -0
  699. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  700. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  701. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  702. package/node_modules/zod/v4/locales/nn.js +113 -0
  703. package/node_modules/zod/v4/locales/no.cjs +7 -2
  704. package/node_modules/zod/v4/locales/no.js +7 -2
  705. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  706. package/node_modules/zod/v4/locales/ota.js +5 -0
  707. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  708. package/node_modules/zod/v4/locales/pl.js +5 -0
  709. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  710. package/node_modules/zod/v4/locales/ps.js +5 -0
  711. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  712. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  713. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  714. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  715. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  716. package/node_modules/zod/v4/locales/pt.js +89 -55
  717. package/node_modules/zod/v4/locales/ro.cjs +3 -0
  718. package/node_modules/zod/v4/locales/ro.js +3 -0
  719. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  720. package/node_modules/zod/v4/locales/ru.js +12 -0
  721. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  722. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  723. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  724. package/node_modules/zod/v4/locales/sk.js +116 -0
  725. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  726. package/node_modules/zod/v4/locales/sl.js +5 -0
  727. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  728. package/node_modules/zod/v4/locales/sv.js +7 -2
  729. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  730. package/node_modules/zod/v4/locales/ta.js +5 -0
  731. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  732. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  733. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  734. package/node_modules/zod/v4/locales/tg.js +117 -0
  735. package/node_modules/zod/v4/locales/th.cjs +5 -0
  736. package/node_modules/zod/v4/locales/th.js +5 -0
  737. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  738. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  739. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  740. package/node_modules/zod/v4/locales/tk.js +107 -0
  741. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  742. package/node_modules/zod/v4/locales/tr.js +5 -0
  743. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  744. package/node_modules/zod/v4/locales/uk.js +5 -0
  745. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  746. package/node_modules/zod/v4/locales/ur.js +5 -0
  747. package/node_modules/zod/v4/locales/uz.cjs +3 -0
  748. package/node_modules/zod/v4/locales/uz.js +3 -0
  749. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  750. package/node_modules/zod/v4/locales/vi.js +5 -0
  751. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  752. package/node_modules/zod/v4/locales/yo.js +5 -0
  753. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  754. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  755. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  756. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  757. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  758. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  759. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  760. package/node_modules/zod/v4/mini/checks.js +1 -1
  761. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  762. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  763. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  764. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  765. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  766. package/node_modules/zod/v4/mini/external.cjs +33 -1
  767. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  768. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  769. package/node_modules/zod/v4/mini/external.js +3 -1
  770. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  771. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  772. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  773. package/node_modules/zod/v4/mini/in-out.js +36 -0
  774. package/node_modules/zod/v4/mini/index.cjs +19 -0
  775. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  776. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  777. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  778. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  779. package/node_modules/zod/v4/mini/parse.js +1 -1
  780. package/node_modules/zod/v4/mini/schemas.cjs +117 -53
  781. package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
  782. package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
  783. package/node_modules/zod/v4/mini/schemas.js +92 -51
  784. package/node_modules/zod/v4-mini/index.cjs +19 -0
  785. package/openclaw.plugin.json +25 -58
  786. package/package.json +11 -8
  787. package/dist/targets-BTQCYRZQ.js +0 -48
  788. package/node_modules/zod/src/v4/core/config.ts +0 -15
  789. /package/dist/{audio-preflight.runtime-BBfC9elv.js → .setup/audio-preflight.runtime-BBfC9elv.mjs} +0 -0
  790. /package/dist/{doctor-contract-w6FpMypv.js → .setup/doctor-contract-w6FpMypv.mjs} +0 -0
  791. /package/dist/{json-response-DXajw_FU.js → .setup/json-response-DXajw_FU.mjs} +0 -0
  792. /package/dist/{rolldown-runtime-8H4AJuhK.js → .setup/rolldown-runtime-8H4AJuhK.mjs} +0 -0
  793. /package/dist/{runtime-C5JxBWZp.js → .setup/runtime-C5JxBWZp.mjs} +0 -0
  794. /package/dist/{secret-contract-BCpDLdg9.js → .setup/secret-contract-BCpDLdg9.mjs} +0 -0
  795. /package/dist/{security-audit-shared-CK5rVR-1.js → .setup/security-audit-shared-CK5rVR-1.mjs} +0 -0
  796. /package/dist/{thread-bindings-BiL1wGqK.js → .setup/thread-bindings-BiL1wGqK.mjs} +0 -0
@@ -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
+ });