@openclaw/buzz 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 (575) hide show
  1. package/assets/activity.svg +3 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/{adapter.runtime-CaDdxQ2C.js → .setup/adapter.runtime-FIC9NMFI.mjs} +3 -3
  4. package/dist/{channel-C6rro-f7.js → .setup/channel-qV8kQiPi.mjs} +203 -105
  5. package/dist/.setup/directory-config-CzHz6fzo.mjs +43 -0
  6. package/dist/{room-membership-a8IHfdgL.js → .setup/room-membership-tqLQznFE.mjs} +1 -1
  7. package/dist/{secret-contract-DNuqbK64.js → .setup/secret-contract-DjibkTDL.mjs} +1 -1
  8. package/dist/.setup/secret-contract-api-DcFDI-eR.mjs +3 -0
  9. package/dist/.setup/setup-plugin-api-DI8WfvKQ.mjs +47 -0
  10. package/dist/.setup/setup-plugin-api-H-XWBzaF.mjs +2 -0
  11. package/dist/{setup-surface-DDUmAluL.js → .setup/setup-surface-DOHxdPor.mjs} +3 -3
  12. package/dist/api.js +2 -2
  13. package/dist/channel-plugin-api.js +1 -1
  14. package/dist/directory-contract-api.js +1 -1
  15. package/dist/qa-runner-api.js +1 -1
  16. package/dist/secret-contract-api.js +1 -1
  17. package/dist/setup-entry.js +3 -2
  18. package/dist/setup-plugin-api.js +1 -46
  19. package/node_modules/nostr-tools/lib/cjs/abstract-pool.js +3 -1
  20. package/node_modules/nostr-tools/lib/cjs/abstract-pool.js.map +2 -2
  21. package/node_modules/nostr-tools/lib/cjs/abstract-relay.js +3 -1
  22. package/node_modules/nostr-tools/lib/cjs/abstract-relay.js.map +2 -2
  23. package/node_modules/nostr-tools/lib/cjs/index.js +3 -1
  24. package/node_modules/nostr-tools/lib/cjs/index.js.map +2 -2
  25. package/node_modules/nostr-tools/lib/cjs/nip46.js +3 -1
  26. package/node_modules/nostr-tools/lib/cjs/nip46.js.map +2 -2
  27. package/node_modules/nostr-tools/lib/cjs/pool.js +3 -1
  28. package/node_modules/nostr-tools/lib/cjs/pool.js.map +2 -2
  29. package/node_modules/nostr-tools/lib/cjs/relay.js +3 -1
  30. package/node_modules/nostr-tools/lib/cjs/relay.js.map +2 -2
  31. package/node_modules/nostr-tools/lib/esm/abstract-pool.js +3 -1
  32. package/node_modules/nostr-tools/lib/esm/abstract-pool.js.map +2 -2
  33. package/node_modules/nostr-tools/lib/esm/abstract-relay.js +3 -1
  34. package/node_modules/nostr-tools/lib/esm/abstract-relay.js.map +2 -2
  35. package/node_modules/nostr-tools/lib/esm/index.js +3 -1
  36. package/node_modules/nostr-tools/lib/esm/index.js.map +2 -2
  37. package/node_modules/nostr-tools/lib/esm/nip46.js +3 -1
  38. package/node_modules/nostr-tools/lib/esm/nip46.js.map +2 -2
  39. package/node_modules/nostr-tools/lib/esm/pool.js +3 -1
  40. package/node_modules/nostr-tools/lib/esm/pool.js.map +2 -2
  41. package/node_modules/nostr-tools/lib/esm/relay.js +3 -1
  42. package/node_modules/nostr-tools/lib/esm/relay.js.map +2 -2
  43. package/node_modules/nostr-tools/lib/nostr.bundle.js +3 -1
  44. package/node_modules/nostr-tools/lib/nostr.bundle.js.map +2 -2
  45. package/node_modules/nostr-tools/package.json +1 -1
  46. package/node_modules/zod/README.md +29 -2
  47. package/node_modules/zod/compile.cjs +96 -0
  48. package/node_modules/zod/compile.d.cts +1 -0
  49. package/node_modules/zod/compile.d.ts +1 -0
  50. package/node_modules/zod/compile.js +52 -0
  51. package/node_modules/zod/index.cjs +21 -2
  52. package/node_modules/zod/index.d.cts +1 -2
  53. package/node_modules/zod/index.d.ts +1 -2
  54. package/node_modules/zod/index.js +5 -2
  55. package/node_modules/zod/locales/index.cjs +19 -0
  56. package/node_modules/zod/mini/index.cjs +19 -0
  57. package/node_modules/zod/package.json +20 -8
  58. package/node_modules/zod/src/compile.ts +56 -0
  59. package/node_modules/zod/src/index.ts +5 -2
  60. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  61. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  62. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  63. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  64. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  65. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  66. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  67. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  68. package/node_modules/zod/src/v3/types.ts +5 -5
  69. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  70. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  71. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  72. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  73. package/node_modules/zod/src/v4/classic/external.ts +14 -9
  74. package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
  75. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  76. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  77. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  78. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  79. package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
  80. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  81. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  82. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
  83. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  84. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  85. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  86. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  87. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
  88. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  89. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  90. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  91. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  92. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  93. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  94. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  95. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  96. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
  97. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  98. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  99. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  100. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
  101. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  102. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  103. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  104. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  105. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  106. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  107. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  108. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  109. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  110. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  111. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  112. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  113. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  114. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  115. package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
  116. package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
  117. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  118. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  119. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  120. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  121. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  122. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  123. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  124. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  125. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
  126. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  127. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  128. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  129. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  130. package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
  131. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  132. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
  133. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
  134. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  135. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  136. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  137. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  138. package/node_modules/zod/src/v4/core/api.ts +87 -35
  139. package/node_modules/zod/src/v4/core/checks.ts +119 -146
  140. package/node_modules/zod/src/v4/core/compile.ts +2313 -0
  141. package/node_modules/zod/src/v4/core/core.ts +99 -22
  142. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  143. package/node_modules/zod/src/v4/core/errors.ts +113 -25
  144. package/node_modules/zod/src/v4/core/index.ts +3 -0
  145. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  146. package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
  147. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  148. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  149. package/node_modules/zod/src/v4/core/parse.ts +164 -50
  150. package/node_modules/zod/src/v4/core/regexes.ts +42 -15
  151. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  152. package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
  153. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  154. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  155. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  156. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  157. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  158. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  159. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  160. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  161. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  162. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  163. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  164. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  165. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  166. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  167. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  168. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  169. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  170. package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
  171. package/node_modules/zod/src/v4/core/util.ts +454 -157
  172. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  173. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  174. package/node_modules/zod/src/v4/index.ts +3 -3
  175. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  176. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  177. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  178. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  179. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  180. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  181. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  182. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  183. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  184. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  185. package/node_modules/zod/src/v4/locales/el.ts +3 -0
  186. package/node_modules/zod/src/v4/locales/en.ts +17 -4
  187. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  188. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  189. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  190. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  191. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  192. package/node_modules/zod/src/v4/locales/fr.ts +21 -14
  193. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  194. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  195. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  196. package/node_modules/zod/src/v4/locales/hr.ts +4 -0
  197. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  198. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  199. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  200. package/node_modules/zod/src/v4/locales/index.ts +11 -0
  201. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  202. package/node_modules/zod/src/v4/locales/it.ts +5 -0
  203. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  204. package/node_modules/zod/src/v4/locales/ka.ts +5 -0
  205. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  206. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  207. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  208. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  209. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  210. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  211. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  212. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  213. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  214. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  215. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  216. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  217. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  218. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  219. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  220. package/node_modules/zod/src/v4/locales/ro.ts +3 -0
  221. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  222. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  223. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  224. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  225. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  226. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  227. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  228. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  229. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  230. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  231. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  232. package/node_modules/zod/src/v4/locales/uz.ts +3 -0
  233. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  234. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  235. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  236. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  237. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  238. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  239. package/node_modules/zod/src/v4/mini/external.ts +12 -1
  240. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  241. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  242. package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
  243. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  244. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  245. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  246. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  247. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  248. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  249. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  250. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  251. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  252. package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
  253. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  254. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  255. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  256. package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
  257. package/node_modules/zod/v3/ZodError.cjs +41 -12
  258. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  259. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  260. package/node_modules/zod/v3/ZodError.js +22 -12
  261. package/node_modules/zod/v3/errors.cjs +19 -0
  262. package/node_modules/zod/v3/external.cjs +19 -0
  263. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  264. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  265. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  266. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  267. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  268. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  269. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  270. package/node_modules/zod/v3/index.cjs +19 -0
  271. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  272. package/node_modules/zod/v3/types.cjs +26 -5
  273. package/node_modules/zod/v3/types.js +7 -5
  274. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  275. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  276. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  277. package/node_modules/zod/v4/classic/checks.js +1 -1
  278. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  279. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  280. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  281. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  282. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  283. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  284. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  285. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  286. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  287. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  288. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  289. package/node_modules/zod/v4/classic/errors.js +43 -34
  290. package/node_modules/zod/v4/classic/external.cjs +51 -27
  291. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  292. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  293. package/node_modules/zod/v4/classic/external.js +5 -8
  294. package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
  295. package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
  296. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  297. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  298. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  299. package/node_modules/zod/v4/classic/in-out.js +36 -0
  300. package/node_modules/zod/v4/classic/index.cjs +21 -2
  301. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  302. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  303. package/node_modules/zod/v4/classic/index.js +2 -2
  304. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  305. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  306. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  307. package/node_modules/zod/v4/classic/iso.js +2 -17
  308. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  309. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  310. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  311. package/node_modules/zod/v4/classic/parse.js +1 -0
  312. package/node_modules/zod/v4/classic/schemas.cjs +591 -426
  313. package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
  314. package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
  315. package/node_modules/zod/v4/classic/schemas.js +564 -424
  316. package/node_modules/zod/v4/core/api.cjs +66 -24
  317. package/node_modules/zod/v4/core/api.d.cts +22 -12
  318. package/node_modules/zod/v4/core/api.d.ts +22 -12
  319. package/node_modules/zod/v4/core/api.js +44 -24
  320. package/node_modules/zod/v4/core/checks.cjs +88 -128
  321. package/node_modules/zod/v4/core/checks.d.cts +29 -13
  322. package/node_modules/zod/v4/core/checks.d.ts +29 -13
  323. package/node_modules/zod/v4/core/checks.js +68 -127
  324. package/node_modules/zod/v4/core/compile.cjs +1908 -0
  325. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  326. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  327. package/node_modules/zod/v4/core/compile.js +1858 -0
  328. package/node_modules/zod/v4/core/core.cjs +101 -19
  329. package/node_modules/zod/v4/core/core.d.cts +16 -4
  330. package/node_modules/zod/v4/core/core.d.ts +16 -4
  331. package/node_modules/zod/v4/core/core.js +83 -20
  332. package/node_modules/zod/v4/core/doc.cjs +31 -9
  333. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  334. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  335. package/node_modules/zod/v4/core/doc.js +12 -9
  336. package/node_modules/zod/v4/core/errors.cjs +126 -25
  337. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  338. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  339. package/node_modules/zod/v4/core/errors.js +107 -25
  340. package/node_modules/zod/v4/core/index.cjs +24 -1
  341. package/node_modules/zod/v4/core/index.d.cts +3 -0
  342. package/node_modules/zod/v4/core/index.d.ts +3 -0
  343. package/node_modules/zod/v4/core/index.js +3 -0
  344. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  345. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  346. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  347. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  348. package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
  349. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  350. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  351. package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
  352. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  353. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  354. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  355. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  356. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  357. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  358. package/node_modules/zod/v4/core/memoizer.js +311 -0
  359. package/node_modules/zod/v4/core/parse.cjs +148 -46
  360. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  361. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  362. package/node_modules/zod/v4/core/parse.js +127 -45
  363. package/node_modules/zod/v4/core/regexes.cjs +54 -17
  364. package/node_modules/zod/v4/core/regexes.d.cts +5 -0
  365. package/node_modules/zod/v4/core/regexes.d.ts +5 -0
  366. package/node_modules/zod/v4/core/regexes.js +32 -15
  367. package/node_modules/zod/v4/core/registries.cjs +19 -0
  368. package/node_modules/zod/v4/core/registries.js +2 -2
  369. package/node_modules/zod/v4/core/schemas.cjs +785 -386
  370. package/node_modules/zod/v4/core/schemas.d.cts +123 -34
  371. package/node_modules/zod/v4/core/schemas.d.ts +123 -34
  372. package/node_modules/zod/v4/core/schemas.js +753 -386
  373. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  374. package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
  375. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  376. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  377. package/node_modules/zod/v4/core/to-json-schema.js +247 -44
  378. package/node_modules/zod/v4/core/util.cjs +372 -157
  379. package/node_modules/zod/v4/core/util.d.cts +79 -1
  380. package/node_modules/zod/v4/core/util.d.ts +79 -1
  381. package/node_modules/zod/v4/core/util.js +341 -156
  382. package/node_modules/zod/v4/core/versions.cjs +21 -2
  383. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  384. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  385. package/node_modules/zod/v4/core/versions.js +2 -2
  386. package/node_modules/zod/v4/core/visit.cjs +214 -0
  387. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  388. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  389. package/node_modules/zod/v4/core/visit.js +169 -0
  390. package/node_modules/zod/v4/index.cjs +34 -5
  391. package/node_modules/zod/v4/index.d.cts +2 -2
  392. package/node_modules/zod/v4/index.d.ts +2 -2
  393. package/node_modules/zod/v4/index.js +3 -2
  394. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  395. package/node_modules/zod/v4/locales/ar.js +5 -0
  396. package/node_modules/zod/v4/locales/az.cjs +5 -0
  397. package/node_modules/zod/v4/locales/az.js +5 -0
  398. package/node_modules/zod/v4/locales/be.cjs +12 -0
  399. package/node_modules/zod/v4/locales/be.js +12 -0
  400. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  401. package/node_modules/zod/v4/locales/bg.js +5 -0
  402. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  403. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  404. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  405. package/node_modules/zod/v4/locales/bn.js +113 -0
  406. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  407. package/node_modules/zod/v4/locales/ca.js +5 -0
  408. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  409. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  410. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  411. package/node_modules/zod/v4/locales/ckb.js +133 -0
  412. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  413. package/node_modules/zod/v4/locales/cs.js +5 -0
  414. package/node_modules/zod/v4/locales/da.cjs +7 -2
  415. package/node_modules/zod/v4/locales/da.js +7 -2
  416. package/node_modules/zod/v4/locales/de.cjs +5 -0
  417. package/node_modules/zod/v4/locales/de.js +5 -0
  418. package/node_modules/zod/v4/locales/el.cjs +3 -0
  419. package/node_modules/zod/v4/locales/el.js +3 -0
  420. package/node_modules/zod/v4/locales/en.cjs +16 -4
  421. package/node_modules/zod/v4/locales/en.js +16 -4
  422. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  423. package/node_modules/zod/v4/locales/eo.js +5 -0
  424. package/node_modules/zod/v4/locales/es.cjs +4 -0
  425. package/node_modules/zod/v4/locales/es.js +4 -0
  426. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  427. package/node_modules/zod/v4/locales/fa.js +5 -0
  428. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  429. package/node_modules/zod/v4/locales/fi.js +5 -0
  430. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  431. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  432. package/node_modules/zod/v4/locales/fr.cjs +18 -14
  433. package/node_modules/zod/v4/locales/fr.js +18 -14
  434. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  435. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  436. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  437. package/node_modules/zod/v4/locales/gu.js +113 -0
  438. package/node_modules/zod/v4/locales/he.cjs +7 -0
  439. package/node_modules/zod/v4/locales/he.js +7 -0
  440. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  441. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  442. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  443. package/node_modules/zod/v4/locales/hi.js +111 -0
  444. package/node_modules/zod/v4/locales/hr.cjs +4 -0
  445. package/node_modules/zod/v4/locales/hr.js +4 -0
  446. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  447. package/node_modules/zod/v4/locales/hu.js +5 -0
  448. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  449. package/node_modules/zod/v4/locales/hy.js +11 -0
  450. package/node_modules/zod/v4/locales/id.cjs +5 -0
  451. package/node_modules/zod/v4/locales/id.js +5 -0
  452. package/node_modules/zod/v4/locales/index.cjs +43 -2
  453. package/node_modules/zod/v4/locales/index.d.cts +11 -0
  454. package/node_modules/zod/v4/locales/index.d.ts +11 -0
  455. package/node_modules/zod/v4/locales/index.js +11 -0
  456. package/node_modules/zod/v4/locales/is.cjs +5 -0
  457. package/node_modules/zod/v4/locales/is.js +5 -0
  458. package/node_modules/zod/v4/locales/it.cjs +5 -0
  459. package/node_modules/zod/v4/locales/it.js +5 -0
  460. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  461. package/node_modules/zod/v4/locales/ja.js +5 -0
  462. package/node_modules/zod/v4/locales/ka.cjs +5 -0
  463. package/node_modules/zod/v4/locales/ka.js +5 -0
  464. package/node_modules/zod/v4/locales/km.cjs +5 -0
  465. package/node_modules/zod/v4/locales/km.js +5 -0
  466. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  467. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  468. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  469. package/node_modules/zod/v4/locales/kn.js +116 -0
  470. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  471. package/node_modules/zod/v4/locales/ko.js +5 -0
  472. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  473. package/node_modules/zod/v4/locales/lt.js +4 -0
  474. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  475. package/node_modules/zod/v4/locales/mk.js +5 -0
  476. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  477. package/node_modules/zod/v4/locales/ms.js +5 -0
  478. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  479. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  480. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  481. package/node_modules/zod/v4/locales/ne.js +111 -0
  482. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  483. package/node_modules/zod/v4/locales/nl.js +5 -0
  484. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  485. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  486. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  487. package/node_modules/zod/v4/locales/nn.js +113 -0
  488. package/node_modules/zod/v4/locales/no.cjs +7 -2
  489. package/node_modules/zod/v4/locales/no.js +7 -2
  490. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  491. package/node_modules/zod/v4/locales/ota.js +5 -0
  492. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  493. package/node_modules/zod/v4/locales/pl.js +5 -0
  494. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  495. package/node_modules/zod/v4/locales/ps.js +5 -0
  496. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  497. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  498. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  499. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  500. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  501. package/node_modules/zod/v4/locales/pt.js +89 -55
  502. package/node_modules/zod/v4/locales/ro.cjs +3 -0
  503. package/node_modules/zod/v4/locales/ro.js +3 -0
  504. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  505. package/node_modules/zod/v4/locales/ru.js +12 -0
  506. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  507. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  508. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  509. package/node_modules/zod/v4/locales/sk.js +116 -0
  510. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  511. package/node_modules/zod/v4/locales/sl.js +5 -0
  512. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  513. package/node_modules/zod/v4/locales/sv.js +7 -2
  514. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  515. package/node_modules/zod/v4/locales/ta.js +5 -0
  516. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  517. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  518. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  519. package/node_modules/zod/v4/locales/tg.js +117 -0
  520. package/node_modules/zod/v4/locales/th.cjs +5 -0
  521. package/node_modules/zod/v4/locales/th.js +5 -0
  522. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  523. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  524. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  525. package/node_modules/zod/v4/locales/tk.js +107 -0
  526. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  527. package/node_modules/zod/v4/locales/tr.js +5 -0
  528. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  529. package/node_modules/zod/v4/locales/uk.js +5 -0
  530. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  531. package/node_modules/zod/v4/locales/ur.js +5 -0
  532. package/node_modules/zod/v4/locales/uz.cjs +3 -0
  533. package/node_modules/zod/v4/locales/uz.js +3 -0
  534. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  535. package/node_modules/zod/v4/locales/vi.js +5 -0
  536. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  537. package/node_modules/zod/v4/locales/yo.js +5 -0
  538. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  539. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  540. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  541. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  542. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  543. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  544. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  545. package/node_modules/zod/v4/mini/checks.js +1 -1
  546. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  547. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  548. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  549. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  550. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  551. package/node_modules/zod/v4/mini/external.cjs +33 -1
  552. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  553. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  554. package/node_modules/zod/v4/mini/external.js +3 -1
  555. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  556. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  557. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  558. package/node_modules/zod/v4/mini/in-out.js +36 -0
  559. package/node_modules/zod/v4/mini/index.cjs +19 -0
  560. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  561. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  562. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  563. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  564. package/node_modules/zod/v4/mini/parse.js +1 -1
  565. package/node_modules/zod/v4/mini/schemas.cjs +117 -53
  566. package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
  567. package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
  568. package/node_modules/zod/v4/mini/schemas.js +92 -51
  569. package/node_modules/zod/v4-mini/index.cjs +19 -0
  570. package/openclaw.plugin.json +12 -28
  571. package/package.json +9 -7
  572. package/dist/directory-config-B0shiBa4.js +0 -33
  573. package/node_modules/zod/src/v4/core/config.ts +0 -15
  574. /package/dist/{message-event-X_aBiM1X.js → .setup/message-event-X_aBiM1X.mjs} +0 -0
  575. /package/dist/{types-CeupBG0P.js → .setup/types-CeupBG0P.mjs} +0 -0
@@ -264,18 +264,66 @@ test("valid discriminator value, invalid data", () => {
264
264
  });
265
265
 
266
266
  test("wrong schema - missing discriminator", () => {
267
- // @ts-expect-error missing discriminator property
268
- z.discriminatedUnion("type", [z.object({ value: z.string() })]);
267
+ // An option whose properties can be listed is checked when the union is constructed.
268
+ expect(() => z.discriminatedUnion("type", [z.object({ value: z.string() })])).toThrow(
269
+ /Invalid discriminated union option at index "0"/
270
+ );
271
+ expect(() =>
272
+ z.discriminatedUnion("type", [z.object({ type: z.literal("a"), a: z.string() }), z.object({ b: z.string() })])
273
+ ).toThrow(/Invalid discriminated union option at index "1"/);
269
274
 
270
- try {
271
- z.discriminatedUnion("type", [
272
- z.object({ type: z.literal("a"), a: z.string() }),
273
- z.object({ b: z.string() }) as any,
274
- ])._zod.propValues;
275
- throw new Error();
276
- } catch (e: any) {
277
- expect(e.message.includes("Invalid discriminated union option")).toBe(true);
278
- }
275
+ // An option whose shape cannot be listed without resolving it — a pipe here — is left to the lookup map, and fails on the first object parsed.
276
+ const viaPipe = z.discriminatedUnion("type", [
277
+ z.object({ value: z.literal("x") }).pipe(z.object({ value: z.literal("x") })),
278
+ ]);
279
+ expect(() => viaPipe.safeParse({ value: "x" })).toThrow(/Invalid discriminated union option at index "0"/);
280
+ });
281
+
282
+ test("the construction check follows shape through both of its phases", () => {
283
+ // `shape` answers from the object the caller passed until the first read, then from a frozen copy. A key list derived at either moment would disagree with it at the other and reject an option that does carry the discriminator.
284
+ const mutatedBeforeRead: Record<string, z.ZodType> = { value: z.string() };
285
+ const A = z.object(mutatedBeforeRead);
286
+ mutatedBeforeRead.type = z.literal("a");
287
+ expect(
288
+ z.discriminatedUnion("type", [A, z.object({ type: z.literal("b") })]).parse({ type: "a", value: "x" })
289
+ ).toEqual({ type: "a", value: "x" });
290
+
291
+ const mutatedAfterRead: Record<string, z.ZodType> = { type: z.literal("a"), value: z.string() };
292
+ const B = z.object(mutatedAfterRead);
293
+ B.parse({ type: "a", value: "x" });
294
+ delete mutatedAfterRead.type;
295
+ expect(() => z.discriminatedUnion("type", [B])).not.toThrow();
296
+ });
297
+
298
+ test("deriving a schema neither clobbers nor is inherited by the source", () => {
299
+ // `.describe()` and friends reuse the def by identity, so the source keeps its own check.
300
+ const A = z.object({ value: z.literal("x") });
301
+ A.describe("just documenting this");
302
+ expect(() => z.discriminatedUnion("type", [A])).toThrow(/Invalid discriminated union option/);
303
+ expect(() => z.discriminatedUnion("type", [A.describe("d")])).toThrow(/Invalid discriminated union option/);
304
+
305
+ // A def rebuilt by a builder is a different object, so it inherits nothing and is left to the lookup map.
306
+ const Base = z.object({ status: z.literal("failed"), message: z.string() });
307
+ expect(() => z.discriminatedUnion("code", [Base.extend({ code: z.literal(400) })])).not.toThrow();
308
+ });
309
+
310
+ test("mutually-recursive getter options are checked without resolving them", () => {
311
+ // `Object.keys` lists a shape's keys without invoking them, so the check sees `child` without running the getter that references the union being constructed.
312
+ const variantA = z.object({
313
+ kind: z.literal("a"),
314
+ get child() {
315
+ return tree.optional();
316
+ },
317
+ });
318
+ const variantB = z.object({
319
+ kind: z.literal("b"),
320
+ get sibling() {
321
+ return tree.optional();
322
+ },
323
+ });
324
+ const tree = z.discriminatedUnion("kind", [variantA, variantB]);
325
+
326
+ expect(tree.parse({ kind: "a", child: { kind: "b" } })).toEqual({ kind: "a", child: { kind: "b" } });
279
327
  });
280
328
 
281
329
  // removed to account for unions of unions
@@ -687,8 +735,208 @@ test("encode with codec discriminator", () => {
687
735
  const decoded = schema.decode({ type: 1, value: "hello" });
688
736
  expect(decoded).toEqual({ type: "one", value: "hello" });
689
737
 
690
- // encode (backward) should also work — the discriminator values differ
691
- // between forward (1, 2) and backward ("one", "two") directions
738
+ // encode (backward) should also work — the discriminator values differ between forward (1, 2) and backward ("one", "two") directions
692
739
  const encoded = z.encode(schema, { type: "one", value: "hello" });
693
740
  expect(encoded).toEqual({ type: 1, value: "hello" });
694
741
  });
742
+
743
+ test("nested encoding does not select a sibling from forward discriminator values", async () => {
744
+ const tag = (value: "a" | "b") =>
745
+ z.codec(z.literal(value).default(value), z.undefined(), {
746
+ decode: () => undefined,
747
+ encode: () => value,
748
+ });
749
+ const inner = z.discriminatedUnion("type", [
750
+ z.object({ type: tag("a"), value: z.literal("a") }),
751
+ z.object({ type: tag("b"), value: z.literal("b") }),
752
+ ]);
753
+ const outer = z.discriminatedUnion("type", [inner, z.object({ type: z.undefined(), value: z.string() })]);
754
+ for (const value of ["a", "b"] as const) {
755
+ const input = { type: undefined, value };
756
+ const expected = { type: value, value };
757
+ expect(z.encode(inner, input)).toEqual(expected);
758
+ expect(z.encode(outer, input)).toEqual(expected);
759
+ expect(await z.encodeAsync(outer, input)).toEqual(expected);
760
+ }
761
+ });
762
+
763
+ test("getDiscriminatedOption", () => {
764
+ const fruit = z.object({ type: z.literal("fruit"), seeds: z.boolean() });
765
+ const veg = z.object({ type: z.literal("vegetable"), leafy: z.boolean() });
766
+ const schema = z.discriminatedUnion("type", [fruit, veg]);
767
+
768
+ expect(z.getDiscriminatedOption(schema, "fruit")).toBe(fruit);
769
+ expect(z.getDiscriminatedOption(schema, "vegetable")).toBe(veg);
770
+
771
+ // The result is narrowed to the one member, not the union of all of them.
772
+ expectTypeOf(z.getDiscriminatedOption(schema, "fruit")).toEqualTypeOf<typeof fruit>();
773
+ expectTypeOf(z.getDiscriminatedOption(schema, "vegetable")).toEqualTypeOf<typeof veg>();
774
+ // @ts-expect-error — "unknown" is not a declared discriminator value
775
+ z.getDiscriminatedOption(schema, "unknown");
776
+ });
777
+
778
+ test("getDiscriminatedOption — multi-value members and non-string discriminators", () => {
779
+ const a = z.object({ type: z.literal(["x", "y"]), payload: z.string() });
780
+ const b = z.object({ type: z.literal("z"), payload: z.number() });
781
+ const multi = z.discriminatedUnion("type", [a, b]);
782
+ expect(z.getDiscriminatedOption(multi, "x")).toBe(a);
783
+ expect(z.getDiscriminatedOption(multi, "y")).toBe(a);
784
+ expect(z.getDiscriminatedOption(multi, "z")).toBe(b);
785
+
786
+ const num = z.object({ type: z.literal(1) });
787
+ const bool = z.object({ type: z.literal(true) });
788
+ const nul = z.object({ type: z.null() });
789
+ const mixed = z.discriminatedUnion("type", [num, bool, nul]);
790
+ expect(z.getDiscriminatedOption(mixed, 1)).toBe(num);
791
+ expect(z.getDiscriminatedOption(mixed, true)).toBe(bool);
792
+ expect(z.getDiscriminatedOption(mixed, null)).toBe(nul);
793
+
794
+ // An omittable discriminator claims undefined, so it resolves like any other value.
795
+ const opt = z.object({ type: z.literal("a").optional(), a: z.string() });
796
+ const req = z.object({ type: z.literal("b"), b: z.string() });
797
+ expect(z.getDiscriminatedOption(z.discriminatedUnion("type", [opt, req]), undefined)).toBe(opt);
798
+ });
799
+
800
+ test("getDiscriminatedOption caches in the bag and costs nothing until called", () => {
801
+ const schema = z.discriminatedUnion("type", [z.object({ type: z.literal("a") }), z.object({ type: z.literal("b") })]);
802
+
803
+ expect(schema._zod.bag.optionsMap).toBeUndefined();
804
+ expect(z.getDiscriminatedOption(schema, "a")).toBe(schema.options[0]);
805
+ const map = schema._zod.bag.optionsMap;
806
+ expect(map).toBeInstanceOf(Map);
807
+ expect(z.getDiscriminatedOption(schema, "b")).toBe(schema.options[1]);
808
+ expect(schema._zod.bag.optionsMap).toBe(map);
809
+
810
+ // A clone recomputes rather than inheriting the cache.
811
+ expect(schema.clone()._zod.bag.optionsMap).toBeUndefined();
812
+ });
813
+
814
+ test.each(["__proto__", "constructor", "toString", "hasOwnProperty", "valueOf"])(
815
+ "Object.prototype discriminator name: %s",
816
+ (key) => {
817
+ const first = z.object({ [key]: z.literal("a"), value: z.string() });
818
+ const second = z.object({ [key]: z.literal("b"), value: z.number() });
819
+ const schema = z.discriminatedUnion(key, [first, second]);
820
+
821
+ expect(schema._zod.propValues?.[key]).toEqual(new Set(["a", "b"]));
822
+
823
+ const input = Object.fromEntries([
824
+ [key, "a"],
825
+ ["value", "ok"],
826
+ ]);
827
+ const parsed: any = schema.parse(input);
828
+ expect(Object.prototype.hasOwnProperty.call(parsed, key)).toBe(key !== "__proto__");
829
+ if (key !== "__proto__") expect(parsed[key]).toBe("a");
830
+ expect(parsed.value).toBe("ok");
831
+ }
832
+ );
833
+
834
+ test("an omittable discriminator claims undefined", () => {
835
+ const omittable = [
836
+ z.exactOptional(z.literal("a")),
837
+ z.optional(z.literal("a")),
838
+ z.literal("a").default("a"),
839
+ z.literal("a").prefault("a"),
840
+ z.literal("a").catch("a"),
841
+ ];
842
+ for (const k of omittable) {
843
+ expect(z.object({ k })._zod.propValues.k).toEqual(new Set(["a", undefined]));
844
+ }
845
+
846
+ // one option omits the key: it claims undefined, so an absent key routes there and the union agrees
847
+ const options = [
848
+ z.object({ k: z.exactOptional(z.literal("a")), x: z.string() }),
849
+ z.object({ k: z.literal("b"), y: z.number() }),
850
+ ] as const;
851
+ expect(z.discriminatedUnion("k", options).safeParse({ x: "s" }).success).toEqual(true);
852
+ expect(z.union(options).safeParse({ x: "s" }).success).toEqual(true);
853
+ expect(z.discriminatedUnion("k", options).safeParse({ k: "b", y: 1 }).success).toEqual(true);
854
+
855
+ // ambiguous absence does not prevent explicit tags from routing
856
+ for (const k of omittable) {
857
+ const schema = z.discriminatedUnion("k", [z.object({ k }), z.object({ k: z.exactOptional(z.literal("c")) })]);
858
+ expect(schema.parse({ k: "a" })).toEqual({ k: "a" });
859
+ expect(schema.parse({ k: "c" })).toEqual({ k: "c" });
860
+ expect(schema.safeParse({}).success).toBe(false);
861
+ }
862
+ });
863
+
864
+ test("defaulted discriminators preserve tagged parsing without guessing a member", async () => {
865
+ const a = z.object({ type: z.literal("a").default("a"), x: z.number().positive() });
866
+ const b = z.object({ type: z.literal("b").default("b"), y: z.string() });
867
+ const c = z.object({ type: z.literal("c").default("c"), z: z.boolean() });
868
+ for (const options of [
869
+ [a, b, c],
870
+ [c, b, a],
871
+ ] as const) {
872
+ const schema = z.discriminatedUnion("type", options);
873
+ for (const input of [a.parse({ x: 1 }), b.parse({ y: "s" }), c.parse({ z: true })]) {
874
+ expect(schema.parse(input)).toEqual(input);
875
+ expect((await schema.safeParseAsync(input)).success).toBe(true);
876
+ }
877
+ for (const input of [{ x: 1, y: "s", z: true }, { type: undefined }, { type: "other" }, { type: "a", x: -1 }]) {
878
+ expect(schema.safeParse(input).success).toBe(false);
879
+ expect((await schema.safeParseAsync(input)).success).toBe(false);
880
+ }
881
+ const result = schema.safeParse({});
882
+ expect(result.error?.issues[0]).toMatchObject({
883
+ code: "invalid_union",
884
+ path: ["type"],
885
+ options: options.map((o) => o.shape.type.unwrap().value),
886
+ });
887
+ expect(z.getDiscriminatedOption(schema, "a")).toBe(a);
888
+ }
889
+ const unique = z.discriminatedUnion("type", [a, b.safeExtend({ type: b.shape.type.unwrap() })]);
890
+ expect(unique.parse({ x: 1 })).toEqual({ type: "a", x: 1 });
891
+ });
892
+
893
+ test("undefined collisions are value-based and discriminator lookup rejects ambiguity", () => {
894
+ const a = z.object({ type: z.literal("a").optional() });
895
+ const absent = z.object({ type: z.undefined() });
896
+ for (const options of [
897
+ [a, absent],
898
+ [absent, a],
899
+ [absent, absent, a],
900
+ ] as const) {
901
+ const schema = z.discriminatedUnion("type", options);
902
+ expect(schema.parse({ type: "a" })).toEqual({ type: "a" });
903
+ expect(schema.safeParse({}).success).toBe(false);
904
+ expect(() => z.getDiscriminatedOption(schema, undefined)).toThrow('Ambiguous discriminator value "undefined"');
905
+ }
906
+ const unique = z.discriminatedUnion("type", [absent, z.object({ type: z.literal("a") })]);
907
+ expect(unique.parse({ type: undefined })).toEqual({ type: undefined });
908
+ expect(z.getDiscriminatedOption(unique, undefined)).toBe(absent);
909
+ });
910
+
911
+ test("non-undefined discriminator collisions remain schema errors", () => {
912
+ for (const tag of [z.literal("a").default("a"), z.literal(["a", "b"]), z.literal("a").nullable()]) {
913
+ const schema = z.discriminatedUnion("type", [z.object({ type: tag }), z.object({ type: tag })]);
914
+ expect(() => schema.safeParse({ type: "a" })).toThrow(/Duplicate discriminator value/);
915
+ expect(() => z.encode(schema, { type: "a" })).toThrow(/Duplicate discriminator value/);
916
+ expect(() => z.getDiscriminatedOption(schema, "a")).toThrow(/Duplicate discriminator value/);
917
+ }
918
+ const nullable = z.discriminatedUnion("type", [
919
+ z.object({ type: z.literal("a").nullable() }),
920
+ z.object({ type: z.literal("b").nullable() }),
921
+ ]);
922
+ expect(() => nullable.safeParse({ type: "a" })).toThrow('Duplicate discriminator value "null"');
923
+ });
924
+
925
+ test("nested defaulted unions only advertise routable discriminator values", () => {
926
+ const a = z.object({ type: z.literal("a").default("a"), group: z.literal("inner") });
927
+ const b = z.object({ type: z.literal("b").default("b"), group: z.literal("inner") });
928
+ const inner = z.discriminatedUnion("type", [a, b]);
929
+ const c = z.object({ type: z.literal("c").default("c"), group: z.literal("outer") });
930
+ expect(inner._zod.propValues.type).toEqual(new Set(["a", "b"]));
931
+ for (const schema of [
932
+ z.discriminatedUnion("type", [z.lazy(() => inner), c]),
933
+ z.discriminatedUnion("group", [inner, c]),
934
+ ]) {
935
+ expect(schema.parse({ type: "a", group: "inner" })).toEqual({ type: "a", group: "inner" });
936
+ expect(schema.parse({ group: "outer" })).toEqual({ type: "c", group: "outer" });
937
+ expect(schema.safeParse({ group: "inner" }).success).toBe(false);
938
+ }
939
+ const fallback = z.discriminatedUnion("type", [a, b], { unionFallback: true });
940
+ expect(fallback._zod.propValues.type.has(undefined)).toBe(true);
941
+ expect(fallback.parse({ group: "inner" })).toEqual({ type: "a", group: "inner" });
942
+ });
@@ -87,6 +87,15 @@ test("enum from non-const inputs", () => {
87
87
 
88
88
  test("get options", () => {
89
89
  expect(z.enum(["tuna", "trout"]).options).toEqual(["tuna", "trout"]);
90
+
91
+ enum Fish {
92
+ Tuna = 0,
93
+ Trout = 1,
94
+ }
95
+
96
+ // numeric enums carry reverse-mapping keys; options lists only what parse accepts
97
+ expect(z.enum(Fish).options).toEqual([Fish.Tuna, Fish.Trout]);
98
+ expect(z.enum(Fish).safeParse("Tuna").success).toEqual(false);
90
99
  });
91
100
 
92
101
  test("readonly enum", () => {
@@ -160,6 +169,17 @@ test("exclude", () => {
160
169
  expectTypeOf<z.infer<typeof EmptyFoodEnum>>().toEqualTypeOf<never>();
161
170
  });
162
171
 
172
+ test("empty enum matches nothing", () => {
173
+ const Empty = z.enum([]);
174
+ expect(Empty._zod.pattern.test("")).toEqual(false);
175
+ expect(z.templateLiteral(["", Empty]).safeParse("").success).toEqual(false);
176
+ expect(z.templateLiteral(["", z.object({}).keyof()]).safeParse("").success).toEqual(false);
177
+
178
+ expect(z.toJSONSchema(Empty)).toMatchObject({ not: {} });
179
+
180
+ expect(z.templateLiteral(["", z.enum([""])]).safeParse("").success).toEqual(true);
181
+ });
182
+
163
183
  test("error map inheritance", () => {
164
184
  const foods = ["Pasta", "Pizza", "Tacos", "Burgers", "Salad"] as const;
165
185
  const FoodEnum = z.enum(foods, { error: () => "This is not food!" });
@@ -658,8 +658,7 @@ test("z.formatError nested union preserves parent path", () => {
658
658
  expect(formatted.parent._errors).toContain("Expected string");
659
659
  });
660
660
  test("z.treeifyError nested union preserves parent path", () => {
661
- // When a nested invalid_union appears inside another invalid_union,
662
- // the inner errors must stay nested under their parent path, not flatten to root.
661
+ // When a nested invalid_union appears inside another invalid_union, the inner errors must stay nested under their parent path, not flatten to root.
663
662
  const syntheticError = new z.ZodError([
664
663
  {
665
664
  code: "invalid_union",
@@ -805,3 +804,114 @@ test("z.treeifyError nested union with real schema", () => {
805
804
  }
806
805
  }
807
806
  });
807
+
808
+ const prototypePropertyNames = ["__proto__", "constructor", "toString", "hasOwnProperty", "valueOf"] as const;
809
+
810
+ test.each(prototypePropertyNames)("z.formatError handles Object.prototype property path: %s", (name) => {
811
+ const schema = z.object({ data: z.string() }).superRefine((_, ctx) => {
812
+ ctx.addIssue({ code: "custom", message: "invalid value", path: [name] });
813
+ });
814
+ const result = schema.safeParse({ data: "hello" });
815
+ expect(result.success).toBe(false);
816
+ const formatted = z.formatError(result.error!);
817
+ expect(Object.prototype.hasOwnProperty.call(formatted, name)).toBe(true);
818
+ expect(Object.getPrototypeOf(formatted)).toBe(Object.prototype);
819
+ expect((formatted as any)[name]._errors).toEqual(["invalid value"]);
820
+ });
821
+
822
+ test.each(prototypePropertyNames)("z.treeifyError handles Object.prototype property path: %s", (name) => {
823
+ const schema = z.object({ data: z.string() }).superRefine((_, ctx) => {
824
+ ctx.addIssue({ code: "custom", message: "invalid value", path: [name] });
825
+ });
826
+ const result = schema.safeParse({ data: "hello" });
827
+ expect(result.success).toBe(false);
828
+ const tree = z.treeifyError(result.error!);
829
+ expect(Object.prototype.hasOwnProperty.call(tree.properties, name)).toBe(true);
830
+ expect(Object.getPrototypeOf(tree.properties)).toBe(Object.prototype);
831
+ expect((tree as any).properties[name].errors).toEqual(["invalid value"]);
832
+ });
833
+
834
+ test.each(prototypePropertyNames)("z.flattenError handles Object.prototype property path: %s", (name) => {
835
+ const schema = z.object({ data: z.string() }).superRefine((_, ctx) => {
836
+ ctx.addIssue({ code: "custom", message: "invalid value", path: [name] });
837
+ });
838
+ const result = schema.safeParse({ data: "hello" });
839
+ expect(result.success).toBe(false);
840
+ const { fieldErrors } = z.flattenError(result.error!);
841
+ expect(Object.prototype.hasOwnProperty.call(fieldErrors, name)).toBe(true);
842
+ expect(Object.getPrototypeOf(fieldErrors)).toBe(Object.prototype);
843
+ expect((fieldErrors as any)[name]).toEqual(["invalid value"]);
844
+ });
845
+
846
+ /** The "__proto__" node must be a real own data property, not the inherited accessor. */
847
+ const protoNode = (obj: any) => Object.getOwnPropertyDescriptor(obj, "__proto__")!.value;
848
+
849
+ test("error formatters merge sibling issues under a __proto__ path", () => {
850
+ const schema = z.string().check((ctx) => {
851
+ ctx.issues.push({ code: "custom", message: "a", path: ["__proto__", "x"], input: ctx.value });
852
+ ctx.issues.push({ code: "custom", message: "b", path: ["__proto__", "y"], input: ctx.value });
853
+ });
854
+ const error = schema.safeParse("hello").error!;
855
+
856
+ const formatted = protoNode(z.formatError(error));
857
+ expect(formatted.x._errors).toEqual(["a"]);
858
+ expect(formatted.y._errors).toEqual(["b"]);
859
+
860
+ const tree = protoNode((z.treeifyError(error) as any).properties);
861
+ expect(tree.properties.x.errors).toEqual(["a"]);
862
+ expect(tree.properties.y.errors).toEqual(["b"]);
863
+
864
+ expect(({} as any).x).toBeUndefined();
865
+ expect(({} as any).y).toBeUndefined();
866
+ });
867
+
868
+ test("error formatting leaves Object.prototype untouched for input-derived keys", () => {
869
+ const record = z.record(z.string(), z.string()).safeParse(JSON.parse('{"toString": 1}'));
870
+ expect(record.success).toBe(false);
871
+ expect((z.formatError(record.error!) as any).toString._errors).toHaveLength(1);
872
+
873
+ const entries = new Map(Object.entries(JSON.parse('{"__proto__": {"pwn": 1}}')));
874
+ const result = z.map(z.string(), z.object({ pwn: z.string() })).safeParse(entries);
875
+ expect(result.success).toBe(false);
876
+ expect(protoNode(z.formatError(result.error!)).pwn._errors).toHaveLength(1);
877
+ expect(protoNode((z.treeifyError(result.error!) as any).properties).properties.pwn.errors).toHaveLength(1);
878
+ expect(({} as any).pwn).toBeUndefined();
879
+ });
880
+
881
+ test("formatError handles an input-derived _errors path", () => {
882
+ const schema = z.object({ parent: z.record(z.string(), z.string()) });
883
+ const result = schema.safeParse({ parent: { _errors: 1 } });
884
+ expect(result.success).toBe(false);
885
+
886
+ const formatted = z.formatError(result.error!);
887
+ expect(formatted.parent?._errors).toEqual(["Invalid input: expected string, received number"]);
888
+
889
+ const nested = z
890
+ .object({ parent: z.record(z.string(), z.object({ child: z.string() })) })
891
+ .safeParse({ parent: { _errors: { child: 1 } } });
892
+ expect(nested.success).toBe(false);
893
+ expect((z.formatError(nested.error!) as any).parent.child._errors).toEqual([
894
+ "Invalid input: expected string, received number",
895
+ ]);
896
+ });
897
+
898
+ test("error walkers handle path elements named after inherited methods", () => {
899
+ // "toString" and "constructor" are truthy on the prototype, so a plain lookup finds
900
+ // the inherited function instead of creating a node, and the push then throws.
901
+ for (const [schema, input] of [
902
+ [z.object({ toString: z.string() }), { toString: 1 }],
903
+ [z.object({ constructor: z.string() }), { constructor: 1 }],
904
+ [z.object({ toString: z.string(), constructor: z.string() }), { toString: 1, constructor: 2 }],
905
+ ] as const) {
906
+ const result = (schema as any).safeParse(input);
907
+ expect(result.success).toBe(false);
908
+
909
+ const formatted = z.formatError(result.error) as any;
910
+ const tree = z.treeifyError(result.error) as any;
911
+ for (const key of Object.keys(input)) {
912
+ expect(formatted[key]._errors).toHaveLength(1);
913
+ expect(tree.properties[key].errors).toHaveLength(1);
914
+ expect(Object.prototype.hasOwnProperty.call(formatted, key)).toBe(true);
915
+ }
916
+ }
917
+ });