@openclaw/firecrawl-plugin 2026.9.4 → 2026.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. package/assets/activity.svg +31 -0
  2. package/assets/icon.png +0 -0
  3. package/dist/{firecrawl-client-BPFpIblh.js → .setup/firecrawl-client-hBjAoE8s.mjs} +25 -26
  4. package/dist/{firecrawl-fetch-provider-CIpxLKLq.js → .setup/firecrawl-fetch-provider-DH8FdBjV.mjs} +1 -1
  5. package/dist/{firecrawl-search-provider-80szkO8A.js → .setup/firecrawl-search-provider-8H0Cu9l0.mjs} +1 -1
  6. package/dist/api.js +1 -1
  7. package/dist/index.js +3 -3
  8. package/dist/web-fetch-contract-api.js +1 -1
  9. package/dist/web-fetch-provider.js +1 -1
  10. package/dist/web-search-contract-api.js +1 -1
  11. package/dist/web-search-provider.js +1 -1
  12. package/node_modules/typebox/build/compile/validator.d.mts +1 -1
  13. package/node_modules/typebox/build/compile/validator.mjs +1 -1
  14. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +7 -5
  15. package/node_modules/typebox/build/format/iri.mjs +5 -1
  16. package/node_modules/typebox/build/guard/emit.mjs +2 -4
  17. package/node_modules/typebox/build/guard/guard.mjs +6 -18
  18. package/node_modules/typebox/build/guard/string.mjs +16 -24
  19. package/node_modules/typebox/build/schema/build.mjs +2 -2
  20. package/node_modules/typebox/build/schema/check.mjs +1 -1
  21. package/node_modules/typebox/build/schema/compile.d.mts +3 -2
  22. package/node_modules/typebox/build/schema/compile.mjs +8 -8
  23. package/node_modules/typebox/build/schema/engine/_context.d.mts +6 -7
  24. package/node_modules/typebox/build/schema/engine/_context.mjs +23 -15
  25. package/node_modules/typebox/build/schema/engine/_functions.d.mts +2 -2
  26. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -1
  27. package/node_modules/typebox/build/schema/engine/_reducer.d.mts +3 -3
  28. package/node_modules/typebox/build/schema/engine/_refine.d.mts +5 -5
  29. package/node_modules/typebox/build/schema/engine/_refine.mjs +4 -7
  30. package/node_modules/typebox/build/schema/engine/_stack.d.mts +34 -16
  31. package/node_modules/typebox/build/schema/engine/_stack.mjs +148 -104
  32. package/node_modules/typebox/build/schema/engine/additionalItems.d.mts +4 -4
  33. package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +8 -8
  34. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +26 -18
  35. package/node_modules/typebox/build/schema/engine/allOf.d.mts +4 -4
  36. package/node_modules/typebox/build/schema/engine/allOf.mjs +3 -3
  37. package/node_modules/typebox/build/schema/engine/anyOf.d.mts +4 -4
  38. package/node_modules/typebox/build/schema/engine/anyOf.mjs +5 -10
  39. package/node_modules/typebox/build/schema/engine/boolean.d.mts +4 -4
  40. package/node_modules/typebox/build/schema/engine/boolean.mjs +2 -6
  41. package/node_modules/typebox/build/schema/engine/const.d.mts +4 -4
  42. package/node_modules/typebox/build/schema/engine/const.mjs +2 -6
  43. package/node_modules/typebox/build/schema/engine/contains.d.mts +4 -4
  44. package/node_modules/typebox/build/schema/engine/contains.mjs +2 -6
  45. package/node_modules/typebox/build/schema/engine/dependencies.d.mts +4 -4
  46. package/node_modules/typebox/build/schema/engine/dependencies.mjs +3 -6
  47. package/node_modules/typebox/build/schema/engine/dependentRequired.d.mts +4 -4
  48. package/node_modules/typebox/build/schema/engine/dependentRequired.mjs +2 -6
  49. package/node_modules/typebox/build/schema/engine/dependentSchemas.d.mts +4 -4
  50. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +4 -4
  51. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +11 -7
  52. package/node_modules/typebox/build/schema/engine/enum.d.mts +4 -4
  53. package/node_modules/typebox/build/schema/engine/enum.mjs +2 -6
  54. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.d.mts +4 -4
  55. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.mjs +2 -6
  56. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.d.mts +4 -4
  57. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.mjs +2 -6
  58. package/node_modules/typebox/build/schema/engine/format.d.mts +4 -4
  59. package/node_modules/typebox/build/schema/engine/format.mjs +2 -6
  60. package/node_modules/typebox/build/schema/engine/if.d.mts +4 -4
  61. package/node_modules/typebox/build/schema/engine/if.mjs +7 -15
  62. package/node_modules/typebox/build/schema/engine/items.d.mts +4 -4
  63. package/node_modules/typebox/build/schema/engine/items.mjs +1 -1
  64. package/node_modules/typebox/build/schema/engine/maxContains.d.mts +4 -4
  65. package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -6
  66. package/node_modules/typebox/build/schema/engine/maxItems.d.mts +4 -4
  67. package/node_modules/typebox/build/schema/engine/maxItems.mjs +2 -6
  68. package/node_modules/typebox/build/schema/engine/maxLength.d.mts +4 -4
  69. package/node_modules/typebox/build/schema/engine/maxLength.mjs +2 -6
  70. package/node_modules/typebox/build/schema/engine/maxProperties.d.mts +4 -4
  71. package/node_modules/typebox/build/schema/engine/maxProperties.mjs +2 -6
  72. package/node_modules/typebox/build/schema/engine/maximum.d.mts +4 -4
  73. package/node_modules/typebox/build/schema/engine/maximum.mjs +2 -6
  74. package/node_modules/typebox/build/schema/engine/minContains.d.mts +4 -4
  75. package/node_modules/typebox/build/schema/engine/minContains.mjs +2 -6
  76. package/node_modules/typebox/build/schema/engine/minItems.d.mts +5 -5
  77. package/node_modules/typebox/build/schema/engine/minItems.mjs +2 -6
  78. package/node_modules/typebox/build/schema/engine/minLength.d.mts +4 -4
  79. package/node_modules/typebox/build/schema/engine/minLength.mjs +2 -6
  80. package/node_modules/typebox/build/schema/engine/minProperties.d.mts +4 -4
  81. package/node_modules/typebox/build/schema/engine/minProperties.mjs +2 -6
  82. package/node_modules/typebox/build/schema/engine/minimum.d.mts +4 -4
  83. package/node_modules/typebox/build/schema/engine/minimum.mjs +2 -6
  84. package/node_modules/typebox/build/schema/engine/multipleOf.d.mts +4 -4
  85. package/node_modules/typebox/build/schema/engine/multipleOf.mjs +2 -6
  86. package/node_modules/typebox/build/schema/engine/not.d.mts +4 -4
  87. package/node_modules/typebox/build/schema/engine/not.mjs +4 -8
  88. package/node_modules/typebox/build/schema/engine/oneOf.d.mts +4 -4
  89. package/node_modules/typebox/build/schema/engine/oneOf.mjs +6 -11
  90. package/node_modules/typebox/build/schema/engine/pattern.d.mts +4 -4
  91. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -7
  92. package/node_modules/typebox/build/schema/engine/patternProperties.d.mts +4 -4
  93. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +1 -1
  94. package/node_modules/typebox/build/schema/engine/prefixItems.d.mts +4 -4
  95. package/node_modules/typebox/build/schema/engine/prefixItems.mjs +1 -1
  96. package/node_modules/typebox/build/schema/engine/properties.d.mts +4 -4
  97. package/node_modules/typebox/build/schema/engine/properties.mjs +1 -1
  98. package/node_modules/typebox/build/schema/engine/propertyNames.d.mts +4 -4
  99. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +4 -10
  100. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +4 -4
  101. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +11 -7
  102. package/node_modules/typebox/build/schema/engine/ref.d.mts +4 -4
  103. package/node_modules/typebox/build/schema/engine/ref.mjs +19 -15
  104. package/node_modules/typebox/build/schema/engine/required.d.mts +4 -4
  105. package/node_modules/typebox/build/schema/engine/required.mjs +2 -6
  106. package/node_modules/typebox/build/schema/engine/schema.d.mts +7 -7
  107. package/node_modules/typebox/build/schema/engine/schema.mjs +137 -133
  108. package/node_modules/typebox/build/schema/engine/type.d.mts +4 -4
  109. package/node_modules/typebox/build/schema/engine/type.mjs +2 -6
  110. package/node_modules/typebox/build/schema/engine/unevaluatedItems.d.mts +4 -4
  111. package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +5 -9
  112. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.d.mts +4 -4
  113. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +5 -9
  114. package/node_modules/typebox/build/schema/engine/uniqueItems.d.mts +4 -4
  115. package/node_modules/typebox/build/schema/engine/uniqueItems.mjs +2 -6
  116. package/node_modules/typebox/build/schema/errors.d.mts +2 -2
  117. package/node_modules/typebox/build/schema/errors.mjs +8 -14
  118. package/node_modules/typebox/build/schema/intern/index.d.mts +1 -0
  119. package/node_modules/typebox/build/schema/intern/index.mjs +1 -0
  120. package/node_modules/typebox/build/schema/intern/intern.d.mts +11 -0
  121. package/node_modules/typebox/build/schema/intern/intern.mjs +293 -0
  122. package/node_modules/typebox/build/schema/meta/draft_2019_09.d.mts +2 -0
  123. package/node_modules/typebox/build/schema/meta/draft_2019_09.mjs +288 -0
  124. package/node_modules/typebox/build/schema/meta/draft_2020_12.d.mts +2 -0
  125. package/node_modules/typebox/build/schema/meta/draft_2020_12.mjs +300 -0
  126. package/node_modules/typebox/build/schema/meta/draft_3.d.mts +2 -0
  127. package/node_modules/typebox/build/schema/meta/draft_3.mjs +143 -0
  128. package/node_modules/typebox/build/schema/meta/draft_4.d.mts +2 -0
  129. package/node_modules/typebox/build/schema/meta/draft_4.mjs +149 -0
  130. package/node_modules/typebox/build/schema/meta/draft_6.d.mts +2 -0
  131. package/node_modules/typebox/build/schema/meta/draft_6.mjs +155 -0
  132. package/node_modules/typebox/build/schema/meta/draft_7.d.mts +2 -0
  133. package/node_modules/typebox/build/schema/meta/draft_7.mjs +172 -0
  134. package/node_modules/typebox/build/schema/meta/index.d.mts +2 -0
  135. package/node_modules/typebox/build/schema/meta/index.mjs +2 -0
  136. package/node_modules/typebox/build/schema/meta/meta.d.mts +9 -0
  137. package/node_modules/typebox/build/schema/meta/meta.mjs +15 -0
  138. package/node_modules/typebox/build/schema/meta/schema.d.mts +6 -0
  139. package/node_modules/typebox/build/schema/meta/schema.mjs +1 -0
  140. package/node_modules/typebox/build/schema/parse.d.mts +1 -0
  141. package/node_modules/typebox/build/schema/parse.mjs +10 -5
  142. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +8 -3
  143. package/node_modules/typebox/build/schema/resolve/resolve.mjs +268 -139
  144. package/node_modules/typebox/build/schema/schema.d.mts +2 -0
  145. package/node_modules/typebox/build/schema/schema.mjs +2 -0
  146. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -12
  147. package/node_modules/typebox/build/value/errors/errors.mjs +2 -7
  148. package/node_modules/typebox/package.json +1 -1
  149. package/node_modules/typebox/readme.md +59 -89
  150. package/node_modules/zod/README.md +29 -2
  151. package/node_modules/zod/compile.cjs +96 -0
  152. package/node_modules/zod/compile.d.cts +1 -0
  153. package/node_modules/zod/compile.d.ts +1 -0
  154. package/node_modules/zod/compile.js +52 -0
  155. package/node_modules/zod/index.cjs +21 -2
  156. package/node_modules/zod/index.d.cts +1 -2
  157. package/node_modules/zod/index.d.ts +1 -2
  158. package/node_modules/zod/index.js +5 -2
  159. package/node_modules/zod/locales/index.cjs +19 -0
  160. package/node_modules/zod/mini/index.cjs +19 -0
  161. package/node_modules/zod/package.json +20 -8
  162. package/node_modules/zod/src/compile.ts +56 -0
  163. package/node_modules/zod/src/index.ts +5 -2
  164. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  165. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  166. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  167. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  168. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  169. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  170. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  171. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  172. package/node_modules/zod/src/v3/types.ts +5 -5
  173. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  174. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  175. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  176. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  177. package/node_modules/zod/src/v4/classic/external.ts +14 -9
  178. package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
  179. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  180. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  181. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  182. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  183. package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
  184. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  185. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  186. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
  187. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  188. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  189. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  190. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  191. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
  192. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  193. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  194. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  195. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  196. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  197. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  198. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  199. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  200. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
  201. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  202. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  203. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  204. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
  205. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  206. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  207. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  208. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  209. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  210. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  211. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  212. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  213. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  214. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  215. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  216. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  217. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  218. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  219. package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
  220. package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
  221. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  222. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  223. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  224. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  225. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  226. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  227. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  228. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  229. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
  230. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  231. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  232. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  233. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  234. package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
  235. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  236. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
  237. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
  238. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  239. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  240. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  241. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  242. package/node_modules/zod/src/v4/core/api.ts +87 -35
  243. package/node_modules/zod/src/v4/core/checks.ts +119 -146
  244. package/node_modules/zod/src/v4/core/compile.ts +2313 -0
  245. package/node_modules/zod/src/v4/core/core.ts +99 -22
  246. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  247. package/node_modules/zod/src/v4/core/errors.ts +113 -25
  248. package/node_modules/zod/src/v4/core/index.ts +3 -0
  249. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  250. package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
  251. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  252. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  253. package/node_modules/zod/src/v4/core/parse.ts +164 -50
  254. package/node_modules/zod/src/v4/core/regexes.ts +42 -15
  255. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  256. package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
  257. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  258. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  259. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  260. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  261. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  262. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  263. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  264. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  265. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  266. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  267. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  268. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  269. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  270. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  271. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  272. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  273. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  274. package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
  275. package/node_modules/zod/src/v4/core/util.ts +454 -157
  276. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  277. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  278. package/node_modules/zod/src/v4/index.ts +3 -3
  279. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  280. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  281. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  282. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  283. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  284. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  285. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  286. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  287. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  288. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  289. package/node_modules/zod/src/v4/locales/el.ts +3 -0
  290. package/node_modules/zod/src/v4/locales/en.ts +17 -4
  291. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  292. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  293. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  294. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  295. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  296. package/node_modules/zod/src/v4/locales/fr.ts +21 -14
  297. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  298. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  299. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  300. package/node_modules/zod/src/v4/locales/hr.ts +4 -0
  301. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  302. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  303. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  304. package/node_modules/zod/src/v4/locales/index.ts +11 -0
  305. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  306. package/node_modules/zod/src/v4/locales/it.ts +5 -0
  307. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  308. package/node_modules/zod/src/v4/locales/ka.ts +5 -0
  309. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  310. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  311. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  312. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  313. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  314. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  315. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  316. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  317. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  318. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  319. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  320. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  321. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  322. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  323. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  324. package/node_modules/zod/src/v4/locales/ro.ts +3 -0
  325. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  326. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  327. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  328. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  329. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  330. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  331. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  332. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  333. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  334. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  335. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  336. package/node_modules/zod/src/v4/locales/uz.ts +3 -0
  337. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  338. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  339. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  340. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  341. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  342. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  343. package/node_modules/zod/src/v4/mini/external.ts +12 -1
  344. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  345. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  346. package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
  347. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  348. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  349. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  350. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  351. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  352. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  353. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  354. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  355. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  356. package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
  357. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  358. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  359. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  360. package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
  361. package/node_modules/zod/v3/ZodError.cjs +41 -12
  362. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  363. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  364. package/node_modules/zod/v3/ZodError.js +22 -12
  365. package/node_modules/zod/v3/errors.cjs +19 -0
  366. package/node_modules/zod/v3/external.cjs +19 -0
  367. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  368. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  369. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  370. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  371. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  372. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  373. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  374. package/node_modules/zod/v3/index.cjs +19 -0
  375. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  376. package/node_modules/zod/v3/types.cjs +26 -5
  377. package/node_modules/zod/v3/types.js +7 -5
  378. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  379. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  380. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  381. package/node_modules/zod/v4/classic/checks.js +1 -1
  382. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  383. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  384. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  385. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  386. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  387. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  388. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  389. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  390. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  391. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  392. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  393. package/node_modules/zod/v4/classic/errors.js +43 -34
  394. package/node_modules/zod/v4/classic/external.cjs +51 -27
  395. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  396. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  397. package/node_modules/zod/v4/classic/external.js +5 -8
  398. package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
  399. package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
  400. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  401. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  402. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  403. package/node_modules/zod/v4/classic/in-out.js +36 -0
  404. package/node_modules/zod/v4/classic/index.cjs +21 -2
  405. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  406. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  407. package/node_modules/zod/v4/classic/index.js +2 -2
  408. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  409. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  410. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  411. package/node_modules/zod/v4/classic/iso.js +2 -17
  412. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  413. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  414. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  415. package/node_modules/zod/v4/classic/parse.js +1 -0
  416. package/node_modules/zod/v4/classic/schemas.cjs +591 -426
  417. package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
  418. package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
  419. package/node_modules/zod/v4/classic/schemas.js +564 -424
  420. package/node_modules/zod/v4/core/api.cjs +66 -24
  421. package/node_modules/zod/v4/core/api.d.cts +22 -12
  422. package/node_modules/zod/v4/core/api.d.ts +22 -12
  423. package/node_modules/zod/v4/core/api.js +44 -24
  424. package/node_modules/zod/v4/core/checks.cjs +88 -128
  425. package/node_modules/zod/v4/core/checks.d.cts +29 -13
  426. package/node_modules/zod/v4/core/checks.d.ts +29 -13
  427. package/node_modules/zod/v4/core/checks.js +68 -127
  428. package/node_modules/zod/v4/core/compile.cjs +1908 -0
  429. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  430. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  431. package/node_modules/zod/v4/core/compile.js +1858 -0
  432. package/node_modules/zod/v4/core/core.cjs +101 -19
  433. package/node_modules/zod/v4/core/core.d.cts +16 -4
  434. package/node_modules/zod/v4/core/core.d.ts +16 -4
  435. package/node_modules/zod/v4/core/core.js +83 -20
  436. package/node_modules/zod/v4/core/doc.cjs +31 -9
  437. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  438. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  439. package/node_modules/zod/v4/core/doc.js +12 -9
  440. package/node_modules/zod/v4/core/errors.cjs +126 -25
  441. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  442. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  443. package/node_modules/zod/v4/core/errors.js +107 -25
  444. package/node_modules/zod/v4/core/index.cjs +24 -1
  445. package/node_modules/zod/v4/core/index.d.cts +3 -0
  446. package/node_modules/zod/v4/core/index.d.ts +3 -0
  447. package/node_modules/zod/v4/core/index.js +3 -0
  448. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  449. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  450. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  451. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  452. package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
  453. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  454. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  455. package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
  456. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  457. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  458. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  459. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  460. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  461. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  462. package/node_modules/zod/v4/core/memoizer.js +311 -0
  463. package/node_modules/zod/v4/core/parse.cjs +148 -46
  464. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  465. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  466. package/node_modules/zod/v4/core/parse.js +127 -45
  467. package/node_modules/zod/v4/core/regexes.cjs +54 -17
  468. package/node_modules/zod/v4/core/regexes.d.cts +5 -0
  469. package/node_modules/zod/v4/core/regexes.d.ts +5 -0
  470. package/node_modules/zod/v4/core/regexes.js +32 -15
  471. package/node_modules/zod/v4/core/registries.cjs +19 -0
  472. package/node_modules/zod/v4/core/registries.js +2 -2
  473. package/node_modules/zod/v4/core/schemas.cjs +785 -386
  474. package/node_modules/zod/v4/core/schemas.d.cts +123 -34
  475. package/node_modules/zod/v4/core/schemas.d.ts +123 -34
  476. package/node_modules/zod/v4/core/schemas.js +753 -386
  477. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  478. package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
  479. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  480. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  481. package/node_modules/zod/v4/core/to-json-schema.js +247 -44
  482. package/node_modules/zod/v4/core/util.cjs +372 -157
  483. package/node_modules/zod/v4/core/util.d.cts +79 -1
  484. package/node_modules/zod/v4/core/util.d.ts +79 -1
  485. package/node_modules/zod/v4/core/util.js +341 -156
  486. package/node_modules/zod/v4/core/versions.cjs +21 -2
  487. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  488. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  489. package/node_modules/zod/v4/core/versions.js +2 -2
  490. package/node_modules/zod/v4/core/visit.cjs +214 -0
  491. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  492. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  493. package/node_modules/zod/v4/core/visit.js +169 -0
  494. package/node_modules/zod/v4/index.cjs +34 -5
  495. package/node_modules/zod/v4/index.d.cts +2 -2
  496. package/node_modules/zod/v4/index.d.ts +2 -2
  497. package/node_modules/zod/v4/index.js +3 -2
  498. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  499. package/node_modules/zod/v4/locales/ar.js +5 -0
  500. package/node_modules/zod/v4/locales/az.cjs +5 -0
  501. package/node_modules/zod/v4/locales/az.js +5 -0
  502. package/node_modules/zod/v4/locales/be.cjs +12 -0
  503. package/node_modules/zod/v4/locales/be.js +12 -0
  504. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  505. package/node_modules/zod/v4/locales/bg.js +5 -0
  506. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  507. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  508. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  509. package/node_modules/zod/v4/locales/bn.js +113 -0
  510. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  511. package/node_modules/zod/v4/locales/ca.js +5 -0
  512. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  513. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  514. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  515. package/node_modules/zod/v4/locales/ckb.js +133 -0
  516. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  517. package/node_modules/zod/v4/locales/cs.js +5 -0
  518. package/node_modules/zod/v4/locales/da.cjs +7 -2
  519. package/node_modules/zod/v4/locales/da.js +7 -2
  520. package/node_modules/zod/v4/locales/de.cjs +5 -0
  521. package/node_modules/zod/v4/locales/de.js +5 -0
  522. package/node_modules/zod/v4/locales/el.cjs +3 -0
  523. package/node_modules/zod/v4/locales/el.js +3 -0
  524. package/node_modules/zod/v4/locales/en.cjs +16 -4
  525. package/node_modules/zod/v4/locales/en.js +16 -4
  526. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  527. package/node_modules/zod/v4/locales/eo.js +5 -0
  528. package/node_modules/zod/v4/locales/es.cjs +4 -0
  529. package/node_modules/zod/v4/locales/es.js +4 -0
  530. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  531. package/node_modules/zod/v4/locales/fa.js +5 -0
  532. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  533. package/node_modules/zod/v4/locales/fi.js +5 -0
  534. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  535. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  536. package/node_modules/zod/v4/locales/fr.cjs +18 -14
  537. package/node_modules/zod/v4/locales/fr.js +18 -14
  538. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  539. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  540. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  541. package/node_modules/zod/v4/locales/gu.js +113 -0
  542. package/node_modules/zod/v4/locales/he.cjs +7 -0
  543. package/node_modules/zod/v4/locales/he.js +7 -0
  544. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  545. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  546. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  547. package/node_modules/zod/v4/locales/hi.js +111 -0
  548. package/node_modules/zod/v4/locales/hr.cjs +4 -0
  549. package/node_modules/zod/v4/locales/hr.js +4 -0
  550. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  551. package/node_modules/zod/v4/locales/hu.js +5 -0
  552. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  553. package/node_modules/zod/v4/locales/hy.js +11 -0
  554. package/node_modules/zod/v4/locales/id.cjs +5 -0
  555. package/node_modules/zod/v4/locales/id.js +5 -0
  556. package/node_modules/zod/v4/locales/index.cjs +43 -2
  557. package/node_modules/zod/v4/locales/index.d.cts +11 -0
  558. package/node_modules/zod/v4/locales/index.d.ts +11 -0
  559. package/node_modules/zod/v4/locales/index.js +11 -0
  560. package/node_modules/zod/v4/locales/is.cjs +5 -0
  561. package/node_modules/zod/v4/locales/is.js +5 -0
  562. package/node_modules/zod/v4/locales/it.cjs +5 -0
  563. package/node_modules/zod/v4/locales/it.js +5 -0
  564. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  565. package/node_modules/zod/v4/locales/ja.js +5 -0
  566. package/node_modules/zod/v4/locales/ka.cjs +5 -0
  567. package/node_modules/zod/v4/locales/ka.js +5 -0
  568. package/node_modules/zod/v4/locales/km.cjs +5 -0
  569. package/node_modules/zod/v4/locales/km.js +5 -0
  570. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  571. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  572. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  573. package/node_modules/zod/v4/locales/kn.js +116 -0
  574. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  575. package/node_modules/zod/v4/locales/ko.js +5 -0
  576. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  577. package/node_modules/zod/v4/locales/lt.js +4 -0
  578. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  579. package/node_modules/zod/v4/locales/mk.js +5 -0
  580. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  581. package/node_modules/zod/v4/locales/ms.js +5 -0
  582. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  583. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  584. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  585. package/node_modules/zod/v4/locales/ne.js +111 -0
  586. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  587. package/node_modules/zod/v4/locales/nl.js +5 -0
  588. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  589. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  590. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  591. package/node_modules/zod/v4/locales/nn.js +113 -0
  592. package/node_modules/zod/v4/locales/no.cjs +7 -2
  593. package/node_modules/zod/v4/locales/no.js +7 -2
  594. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  595. package/node_modules/zod/v4/locales/ota.js +5 -0
  596. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  597. package/node_modules/zod/v4/locales/pl.js +5 -0
  598. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  599. package/node_modules/zod/v4/locales/ps.js +5 -0
  600. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  601. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  602. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  603. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  604. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  605. package/node_modules/zod/v4/locales/pt.js +89 -55
  606. package/node_modules/zod/v4/locales/ro.cjs +3 -0
  607. package/node_modules/zod/v4/locales/ro.js +3 -0
  608. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  609. package/node_modules/zod/v4/locales/ru.js +12 -0
  610. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  611. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  612. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  613. package/node_modules/zod/v4/locales/sk.js +116 -0
  614. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  615. package/node_modules/zod/v4/locales/sl.js +5 -0
  616. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  617. package/node_modules/zod/v4/locales/sv.js +7 -2
  618. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  619. package/node_modules/zod/v4/locales/ta.js +5 -0
  620. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  621. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  622. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  623. package/node_modules/zod/v4/locales/tg.js +117 -0
  624. package/node_modules/zod/v4/locales/th.cjs +5 -0
  625. package/node_modules/zod/v4/locales/th.js +5 -0
  626. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  627. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  628. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  629. package/node_modules/zod/v4/locales/tk.js +107 -0
  630. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  631. package/node_modules/zod/v4/locales/tr.js +5 -0
  632. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  633. package/node_modules/zod/v4/locales/uk.js +5 -0
  634. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  635. package/node_modules/zod/v4/locales/ur.js +5 -0
  636. package/node_modules/zod/v4/locales/uz.cjs +3 -0
  637. package/node_modules/zod/v4/locales/uz.js +3 -0
  638. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  639. package/node_modules/zod/v4/locales/vi.js +5 -0
  640. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  641. package/node_modules/zod/v4/locales/yo.js +5 -0
  642. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  643. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  644. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  645. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  646. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  647. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  648. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  649. package/node_modules/zod/v4/mini/checks.js +1 -1
  650. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  651. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  652. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  653. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  654. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  655. package/node_modules/zod/v4/mini/external.cjs +33 -1
  656. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  657. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  658. package/node_modules/zod/v4/mini/external.js +3 -1
  659. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  660. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  661. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  662. package/node_modules/zod/v4/mini/in-out.js +36 -0
  663. package/node_modules/zod/v4/mini/index.cjs +19 -0
  664. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  665. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  666. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  667. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  668. package/node_modules/zod/v4/mini/parse.js +1 -1
  669. package/node_modules/zod/v4/mini/schemas.cjs +117 -53
  670. package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
  671. package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
  672. package/node_modules/zod/v4/mini/schemas.js +92 -51
  673. package/node_modules/zod/v4-mini/index.cjs +19 -0
  674. package/openclaw.plugin.json +15 -1
  675. package/package.json +9 -7
  676. package/node_modules/zod/src/v4/core/config.ts +0 -15
@@ -23,11 +23,24 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.$ZodTuple = exports.$ZodIntersection = exports.$ZodDiscriminatedUnion = exports.$ZodXor = exports.$ZodUnion = exports.$ZodObjectJIT = exports.$ZodObject = exports.$ZodArray = exports.$ZodDate = exports.$ZodVoid = exports.$ZodNever = exports.$ZodUnknown = exports.$ZodAny = exports.$ZodNull = exports.$ZodUndefined = exports.$ZodSymbol = exports.$ZodBigIntFormat = exports.$ZodBigInt = exports.$ZodBoolean = exports.$ZodNumberFormat = exports.$ZodNumber = exports.$ZodCustomStringFormat = exports.$ZodJWT = exports.$ZodE164 = exports.$ZodBase64URL = exports.$ZodBase64 = exports.$ZodCIDRv6 = exports.$ZodCIDRv4 = exports.$ZodMAC = exports.$ZodIPv6 = exports.$ZodIPv4 = exports.$ZodISODuration = exports.$ZodISOTime = exports.$ZodISODate = exports.$ZodISODateTime = exports.$ZodKSUID = exports.$ZodXID = exports.$ZodULID = exports.$ZodCUID2 = exports.$ZodCUID = exports.$ZodNanoID = exports.$ZodEmoji = exports.$ZodURL = exports.$ZodEmail = exports.$ZodUUID = exports.$ZodGUID = exports.$ZodStringFormat = exports.$ZodString = exports.clone = exports.$ZodType = void 0;
27
- exports.$ZodCustom = exports.$ZodLazy = exports.$ZodPromise = exports.$ZodFunction = exports.$ZodTemplateLiteral = exports.$ZodReadonly = exports.$ZodPreprocess = exports.$ZodCodec = exports.$ZodPipe = exports.$ZodNaN = exports.$ZodCatch = exports.$ZodSuccess = exports.$ZodNonOptional = exports.$ZodPrefault = exports.$ZodDefault = exports.$ZodNullable = exports.$ZodExactOptional = exports.$ZodOptional = exports.$ZodTransform = exports.$ZodFile = exports.$ZodLiteral = exports.$ZodEnum = exports.$ZodSet = exports.$ZodMap = exports.$ZodRecord = void 0;
26
+ exports.$ZodObject = exports.$ZodArray = exports.$ZodDate = exports.$ZodVoid = exports.$ZodNever = exports.$ZodUnknown = exports.$ZodAny = exports.$ZodNull = exports.$ZodUndefined = exports.$ZodSymbol = exports.$ZodBigIntFormat = exports.$ZodBigInt = exports.$ZodBoolean = exports.$ZodNumberFormat = exports.$ZodNumber = exports.$ZodCustomStringFormat = exports.$ZodJWT = exports.$ZodIBAN = exports.$ZodCreditCard = exports.$ZodE164 = exports.$ZodBase64URL = exports.base64urlCharset = exports.$ZodBase64 = exports.base64Charset = exports.$ZodCIDRv6 = exports.$ZodCIDRv4 = exports.$ZodMAC = exports.$ZodIPv6 = exports.$ZodIPv4 = exports.$ZodISODuration = exports.$ZodISOTime = exports.$ZodISODate = exports.$ZodISODateTime = exports.$ZodKSUID = exports.$ZodXID = exports.$ZodULID = exports.$ZodCUID2 = exports.$ZodCUID = exports.$ZodNanoID = exports.$ZodEmoji = exports.$ZodURL = exports.URL_UNPARSEABLE = exports.URL_BAD_FORMAT = exports.$ZodEmail = exports.$ZodUUID = exports.$ZodGUID = exports.$ZodStringFormat = exports.$ZodString = exports.clone = exports.$ZodType = void 0;
27
+ exports.$ZodCustom = exports.$ZodLazy = exports.$ZodPromise = exports.$ZodFunction = exports.$ZodTemplateLiteral = exports.$ZodReadonly = exports.$ZodPreprocess = exports.$ZodCodec = exports.$ZodPipe = exports.$ZodNaN = exports.$ZodCatch = exports.$ZodSuccess = exports.$ZodNonOptional = exports.$ZodPrefault = exports.$ZodDefault = exports.$ZodNullable = exports.$ZodExactOptional = exports.$ZodOptional = exports.$ZodTransform = exports.$ZodFile = exports.$ZodLiteral = exports.$ZodEnum = exports.$ZodSet = exports.$ZodMap = exports.$ZodRecord = exports.$ZodTuple = exports.$ZodIntersection = exports.$ZodDiscriminatedUnion = exports.$ZodXor = exports.$ZodUnion = exports.$ZodObjectJIT = void 0;
28
+ exports.standardProps = standardProps;
29
+ exports.canParseURL = canParseURL;
30
+ exports.validateURL = validateURL;
31
+ exports.parseURLObject = parseURLObject;
32
+ exports.stripTabAndNewline = stripTabAndNewline;
33
+ exports.urlHostnameOk = urlHostnameOk;
34
+ exports.urlProtocolOk = urlProtocolOk;
35
+ exports.isValidIPv6 = isValidIPv6;
36
+ exports.isValidCIDRv6 = isValidCIDRv6;
28
37
  exports.isValidBase64 = isValidBase64;
29
38
  exports.isValidBase64URL = isValidBase64URL;
39
+ exports.isValidCreditCard = isValidCreditCard;
40
+ exports.isValidIBAN = isValidIBAN;
30
41
  exports.isValidJWT = isValidJWT;
42
+ exports.getDiscriminatedOption = getDiscriminatedOption;
43
+ exports.mergeValues = mergeValues;
31
44
  const checks = __importStar(require("./checks.cjs"));
32
45
  const core = __importStar(require("./core.cjs"));
33
46
  const doc_js_1 = require("./doc.cjs");
@@ -41,19 +54,20 @@ exports.$ZodType = core.$constructor("$ZodType", (inst, def) => {
41
54
  inst._zod.def = def; // set _def property
42
55
  inst._zod.bag = inst._zod.bag || {}; // initialize _bag object
43
56
  inst._zod.version = versions_js_1.version;
44
- const checks = [...(inst._zod.def.checks ?? [])];
57
+ const defChecks = inst._zod.def.checks;
45
58
  // if inst is itself a checks.$ZodCheck, run it as a check
46
- if (inst._zod.traits.has("$ZodCheck")) {
47
- checks.unshift(inst);
48
- }
59
+ const checks = inst._zod.traits.has("$ZodCheck")
60
+ ? [inst, ...(defChecks ?? [])]
61
+ : defChecks?.length
62
+ ? [...defChecks]
63
+ : [];
49
64
  for (const ch of checks) {
50
65
  for (const fn of ch._zod.onattach) {
51
66
  fn(inst);
52
67
  }
53
68
  }
54
69
  if (checks.length === 0) {
55
- // deferred initializer
56
- // inst._zod.parse is not yet defined
70
+ // deferred initializer inst._zod.parse is not yet defined
57
71
  (_a = inst._zod).deferred ?? (_a.deferred = []);
58
72
  inst._zod.deferred?.push(() => {
59
73
  inst._zod.run = inst._zod.parse;
@@ -61,6 +75,8 @@ exports.$ZodType = core.$constructor("$ZodType", (inst, def) => {
61
75
  }
62
76
  else {
63
77
  const runChecks = (payload, checks, ctx) => {
78
+ if (payload.memo)
79
+ return payload;
64
80
  let isAborted = util.aborted(payload);
65
81
  let asyncResult;
66
82
  for (const ch of checks) {
@@ -85,6 +101,7 @@ exports.$ZodType = core.$constructor("$ZodType", (inst, def) => {
85
101
  const nextLen = payload.issues.length;
86
102
  if (nextLen === currLen)
87
103
  return;
104
+ util.attachSchema(payload.issues, currLen, inst);
88
105
  if (!isAborted)
89
106
  isAborted = util.aborted(payload, currLen);
90
107
  });
@@ -93,6 +110,7 @@ exports.$ZodType = core.$constructor("$ZodType", (inst, def) => {
93
110
  const nextLen = payload.issues.length;
94
111
  if (nextLen === currLen)
95
112
  continue;
113
+ util.attachSchema(payload.issues, currLen, inst);
96
114
  if (!isAborted)
97
115
  isAborted = util.aborted(payload, currLen);
98
116
  }
@@ -124,8 +142,7 @@ exports.$ZodType = core.$constructor("$ZodType", (inst, def) => {
124
142
  return inst._zod.parse(payload, ctx);
125
143
  }
126
144
  if (ctx.direction === "backward") {
127
- // run canary
128
- // initial pass (no checks)
145
+ // run canary initial pass (no checks)
129
146
  const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });
130
147
  if (canary instanceof Promise) {
131
148
  return canary.then((canary) => {
@@ -144,26 +161,45 @@ exports.$ZodType = core.$constructor("$ZodType", (inst, def) => {
144
161
  return runChecks(result, checks, ctx);
145
162
  };
146
163
  }
147
- // Lazy initialize ~standard to avoid creating objects for every schema
148
- util.defineLazy(inst, "~standard", () => ({
164
+ }, {
165
+ // Wrappers extend this by installing a richer factory over it; reading it eagerly would defeat the laziness.
166
+ get "~standard"() {
167
+ return util.hide(this, "~standard", standardProps(this));
168
+ },
169
+ set "~standard"(value) {
170
+ util.own(this, "~standard", value);
171
+ },
172
+ });
173
+ /** The Standard Schema surface for `inst`. Shared so wrappers can extend it without forcing it. */
174
+ // a Standard Schema result only reports issues, so a failure finalizes them straight off the raw payload: no ZodError, and no lazy result to read through
175
+ const toStandardResult = (r, ctx) => r.issues.length ? { issues: r.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())) } : { value: r.value };
176
+ async function validateAsync(inst, value) {
177
+ const ctx = { async: true };
178
+ return toStandardResult((await inst._zod.run({ value, issues: [] }, ctx)), ctx);
179
+ }
180
+ function standardProps(inst) {
181
+ return {
149
182
  validate: (value) => {
183
+ const ctx = { async: false };
150
184
  try {
151
- const r = (0, parse_js_1.safeParse)(inst, value);
152
- return r.success ? { value: r.data } : { issues: r.error?.issues };
153
- }
154
- catch (_) {
155
- return (0, parse_js_1.safeParseAsync)(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));
185
+ const r = inst._zod.run({ value, issues: [] }, ctx);
186
+ if (!(r instanceof Promise))
187
+ return toStandardResult(r, ctx);
156
188
  }
189
+ catch (_) { }
190
+ // async function so a synchronously throwing check rejects instead of escaping validate
191
+ return validateAsync(inst, value);
157
192
  },
158
193
  vendor: "zod",
159
194
  version: 1,
160
- }));
161
- });
195
+ };
196
+ }
162
197
  var util_js_1 = require("./util.cjs");
163
198
  Object.defineProperty(exports, "clone", { enumerable: true, get: function () { return util_js_1.clone; } });
164
199
  exports.$ZodString = core.$constructor("$ZodString", (inst, def) => {
165
200
  exports.$ZodType.init(inst, def);
166
- inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);
201
+ // a format's own pattern, else unbounded; a template literal derives the check-aware form itself
202
+ inst._zod.pattern = def.pattern ?? regexes.anyString;
167
203
  inst._zod.parse = (payload, _) => {
168
204
  if (def.coerce)
169
205
  try {
@@ -215,66 +251,115 @@ exports.$ZodEmail = core.$constructor("$ZodEmail", (inst, def) => {
215
251
  def.pattern ?? (def.pattern = regexes.email);
216
252
  exports.$ZodStringFormat.init(inst, def);
217
253
  });
254
+ /** The `://` guard rejected the input before the URL constructor saw it. */
255
+ exports.URL_BAD_FORMAT = 1;
256
+ /** The URL parser rejected the input. */
257
+ exports.URL_UNPARSEABLE = 2;
258
+ function canParseURL(input) {
259
+ try {
260
+ if (typeof URL !== "undefined" && typeof URL.canParse === "function")
261
+ return URL.canParse(input);
262
+ new URL(input);
263
+ return true;
264
+ }
265
+ catch {
266
+ return false;
267
+ }
268
+ }
269
+ function validateURL(trimmed, def) {
270
+ if (!("normalize" in def) && !("hostname" in def) && !("protocol" in def)) {
271
+ return canParseURL(trimmed) || exports.URL_UNPARSEABLE;
272
+ }
273
+ return parseURLObject(trimmed, def);
274
+ }
275
+ /** Parses a URL while preserving the non-normalizing HTTP guard. */
276
+ function parseURLObject(trimmed, def) {
277
+ // When normalize is off, require :// for http/https URLs. This prevents strings like "http:example.com" or "https:/path" from being silently accepted
278
+ if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source && !/^https?:\/\//i.test(trimmed)) {
279
+ return exports.URL_BAD_FORMAT;
280
+ }
281
+ try {
282
+ if (typeof URL !== "undefined") {
283
+ const URLStatic = URL;
284
+ if (typeof URLStatic.parse === "function")
285
+ return URLStatic.parse(trimmed) ?? exports.URL_UNPARSEABLE;
286
+ }
287
+ // @ts-ignore
288
+ return new URL(trimmed);
289
+ }
290
+ catch {
291
+ return exports.URL_UNPARSEABLE;
292
+ }
293
+ }
294
+ const asciiTabOrNewline = /[\t\n\r]/g;
295
+ /** The URL parser deletes every ASCII tab, LF and CR from its input before it parses, so `new URL("https://exa\nmple.com")` reports on `example.com`. Applying the same deletion to the returned value closes the half of that divergence which can move the host; the parser's other rewrite, stripping C0 controls at the edges, cannot. */
296
+ function stripTabAndNewline(value) {
297
+ return value.replace(asciiTabOrNewline, "");
298
+ }
299
+ function urlHostnameOk(url, hostname) {
300
+ hostname.lastIndex = 0;
301
+ return hostname.test(url.hostname);
302
+ }
303
+ function urlProtocolOk(url, protocol) {
304
+ protocol.lastIndex = 0;
305
+ return protocol.test(url.protocol.endsWith(":") ? url.protocol.slice(0, -1) : url.protocol);
306
+ }
218
307
  exports.$ZodURL = core.$constructor("$ZodURL", (inst, def) => {
219
308
  exports.$ZodStringFormat.init(inst, def);
220
309
  inst._zod.check = (payload) => {
221
310
  try {
222
311
  // Trim whitespace from input
223
312
  const trimmed = payload.value.trim();
224
- // When normalize is off, require :// for http/https URLs
225
- // This prevents strings like "http:example.com" or "https:/path" from being silently accepted
226
- if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source) {
227
- if (!/^https?:\/\//i.test(trimmed)) {
228
- payload.issues.push({
229
- code: "invalid_format",
230
- format: "url",
231
- note: "Invalid URL format",
232
- input: payload.value,
233
- inst,
234
- continue: !def.abort,
235
- });
236
- return;
237
- }
313
+ const url = validateURL(trimmed, def);
314
+ if (url === exports.URL_BAD_FORMAT) {
315
+ payload.issues.push({
316
+ code: "invalid_format",
317
+ format: "url",
318
+ note: "Invalid URL format",
319
+ input: payload.value,
320
+ inst,
321
+ continue: !def.abort,
322
+ });
323
+ return;
238
324
  }
239
- // @ts-ignore
240
- const url = new URL(trimmed);
241
- if (def.hostname) {
242
- def.hostname.lastIndex = 0;
243
- if (!def.hostname.test(url.hostname)) {
244
- payload.issues.push({
245
- code: "invalid_format",
246
- format: "url",
247
- note: "Invalid hostname",
248
- pattern: def.hostname.source,
249
- input: payload.value,
250
- inst,
251
- continue: !def.abort,
252
- });
253
- }
325
+ if (url === exports.URL_UNPARSEABLE) {
326
+ payload.issues.push({
327
+ code: "invalid_format",
328
+ format: "url",
329
+ input: payload.value,
330
+ inst,
331
+ continue: !def.abort,
332
+ });
333
+ return;
254
334
  }
255
- if (def.protocol) {
256
- def.protocol.lastIndex = 0;
257
- if (!def.protocol.test(url.protocol.endsWith(":") ? url.protocol.slice(0, -1) : url.protocol)) {
258
- payload.issues.push({
259
- code: "invalid_format",
260
- format: "url",
261
- note: "Invalid protocol",
262
- pattern: def.protocol.source,
263
- input: payload.value,
264
- inst,
265
- continue: !def.abort,
266
- });
267
- }
335
+ if (url === true) {
336
+ payload.value = stripTabAndNewline(trimmed);
337
+ return;
268
338
  }
269
- // Set the output value based on normalize flag
270
- if (def.normalize) {
271
- // Use normalized URL
272
- payload.value = url.href;
339
+ if (def.hostname && !urlHostnameOk(url, def.hostname)) {
340
+ payload.issues.push({
341
+ code: "invalid_format",
342
+ format: "url",
343
+ note: "Invalid hostname",
344
+ pattern: def.hostname.source,
345
+ input: payload.value,
346
+ inst,
347
+ continue: !def.abort,
348
+ });
273
349
  }
274
- else {
275
- // Preserve the original input (trimmed)
276
- payload.value = trimmed;
350
+ if (def.protocol && !urlProtocolOk(url, def.protocol)) {
351
+ payload.issues.push({
352
+ code: "invalid_format",
353
+ format: "url",
354
+ note: "Invalid protocol",
355
+ pattern: def.protocol.source,
356
+ input: payload.value,
357
+ inst,
358
+ continue: !def.abort,
359
+ });
277
360
  }
361
+ // Set the output value based on normalize flag
362
+ payload.value = def.normalize ? url.href : stripTabAndNewline(trimmed);
278
363
  return;
279
364
  }
280
365
  catch (_) {
@@ -293,7 +378,9 @@ exports.$ZodEmoji = core.$constructor("$ZodEmoji", (inst, def) => {
293
378
  exports.$ZodStringFormat.init(inst, def);
294
379
  });
295
380
  exports.$ZodNanoID = core.$constructor("$ZodNanoID", (inst, def) => {
296
- def.pattern ?? (def.pattern = regexes.nanoid);
381
+ if (def.length !== undefined && (!Number.isInteger(def.length) || def.length < 1))
382
+ throw new Error(`Invalid nanoid length: ${def.length}`);
383
+ def.pattern ?? (def.pattern = def.length === undefined ? regexes.nanoid : regexes.nanoidOfLength(def.length));
297
384
  exports.$ZodStringFormat.init(inst, def);
298
385
  });
299
386
  /**
@@ -340,19 +427,19 @@ exports.$ZodISODuration = core.$constructor("$ZodISODuration", (inst, def) => {
340
427
  exports.$ZodIPv4 = core.$constructor("$ZodIPv4", (inst, def) => {
341
428
  def.pattern ?? (def.pattern = regexes.ipv4);
342
429
  exports.$ZodStringFormat.init(inst, def);
343
- inst._zod.bag.format = `ipv4`;
344
430
  });
431
+ /** An IPv6 address is written with hex digits, colons and dots, and nothing else. The guard is what makes the check below an IPv6 check: `new URL("http://[...]")` parses an authority, not an address, so `@` and `\` re-delimit it and `"::@1\\"` validates against the host `0.0.0.1`. The URL parser also deletes ASCII tab, LF and CR rather than failing, which is how `"::1\n"` validated as `::1`. */
432
+ const ipv6Alphabet = /^[0-9a-fA-F:.]+$/;
433
+ function isValidIPv6(value) {
434
+ if (!ipv6Alphabet.test(value))
435
+ return false;
436
+ return canParseURL(`http://[${value}]`);
437
+ }
345
438
  exports.$ZodIPv6 = core.$constructor("$ZodIPv6", (inst, def) => {
346
439
  def.pattern ?? (def.pattern = regexes.ipv6);
347
440
  exports.$ZodStringFormat.init(inst, def);
348
- inst._zod.bag.format = `ipv6`;
349
441
  inst._zod.check = (payload) => {
350
- try {
351
- // @ts-ignore
352
- new URL(`http://[${payload.value}]`);
353
- // return;
354
- }
355
- catch {
442
+ if (!isValidIPv6(payload.value)) {
356
443
  payload.issues.push({
357
444
  code: "invalid_format",
358
445
  format: "ipv6",
@@ -366,32 +453,30 @@ exports.$ZodIPv6 = core.$constructor("$ZodIPv6", (inst, def) => {
366
453
  exports.$ZodMAC = core.$constructor("$ZodMAC", (inst, def) => {
367
454
  def.pattern ?? (def.pattern = regexes.mac(def.delimiter));
368
455
  exports.$ZodStringFormat.init(inst, def);
369
- inst._zod.bag.format = `mac`;
370
456
  });
371
457
  exports.$ZodCIDRv4 = core.$constructor("$ZodCIDRv4", (inst, def) => {
372
458
  def.pattern ?? (def.pattern = regexes.cidrv4);
373
459
  exports.$ZodStringFormat.init(inst, def);
374
460
  });
461
+ function isValidCIDRv6(value) {
462
+ const parts = value.split("/");
463
+ if (parts.length !== 2)
464
+ return false;
465
+ const [address, prefix] = parts;
466
+ if (!prefix)
467
+ return false;
468
+ const prefixNum = Number(prefix);
469
+ if (`${prefixNum}` !== prefix)
470
+ return false;
471
+ if (prefixNum < 0 || prefixNum > 128)
472
+ return false;
473
+ return isValidIPv6(address);
474
+ }
375
475
  exports.$ZodCIDRv6 = core.$constructor("$ZodCIDRv6", (inst, def) => {
376
476
  def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation
377
477
  exports.$ZodStringFormat.init(inst, def);
378
478
  inst._zod.check = (payload) => {
379
- const parts = payload.value.split("/");
380
- try {
381
- if (parts.length !== 2)
382
- throw new Error();
383
- const [address, prefix] = parts;
384
- if (!prefix)
385
- throw new Error();
386
- const prefixNum = Number(prefix);
387
- if (`${prefixNum}` !== prefix)
388
- throw new Error();
389
- if (prefixNum < 0 || prefixNum > 128)
390
- throw new Error();
391
- // @ts-ignore
392
- new URL(`http://[${address}]`);
393
- }
394
- catch {
479
+ if (!isValidCIDRv6(payload.value)) {
395
480
  payload.issues.push({
396
481
  code: "invalid_format",
397
482
  format: "cidrv6",
@@ -420,10 +505,11 @@ function isValidBase64(data) {
420
505
  return false;
421
506
  }
422
507
  }
508
+ // lax on purpose: the quantified regexes.base64 overflows the regex stack on multi-MB input and its leading ^$| alternation leaks through template-literal composition; isValidBase64 enforces length and padding
509
+ exports.base64Charset = /^[0-9a-zA-Z+/]*={0,2}$/;
423
510
  exports.$ZodBase64 = core.$constructor("$ZodBase64", (inst, def) => {
424
- def.pattern ?? (def.pattern = regexes.base64);
511
+ def.pattern ?? (def.pattern = exports.base64Charset);
425
512
  exports.$ZodStringFormat.init(inst, def);
426
- inst._zod.bag.contentEncoding = "base64";
427
513
  inst._zod.check = (payload) => {
428
514
  if (isValidBase64(payload.value))
429
515
  return;
@@ -436,18 +522,19 @@ exports.$ZodBase64 = core.$constructor("$ZodBase64", (inst, def) => {
436
522
  });
437
523
  };
438
524
  });
439
- ////////////////////////////// ZodBase64 //////////////////////////////
525
+ ////////////////////////////// ZodBase64URL //////////////////////////////
526
+ // lax on purpose: the quantified regexes.base64url overflows the regex stack on multi-MB input; isValidBase64 enforces length on the padded string
527
+ exports.base64urlCharset = /^[A-Za-z0-9_-]*$/;
440
528
  function isValidBase64URL(data) {
441
- if (!regexes.base64url.test(data))
529
+ if (!exports.base64urlCharset.test(data))
442
530
  return false;
443
531
  const base64 = data.replace(/[-_]/g, (c) => (c === "-" ? "+" : "/"));
444
532
  const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, "=");
445
533
  return isValidBase64(padded);
446
534
  }
447
535
  exports.$ZodBase64URL = core.$constructor("$ZodBase64URL", (inst, def) => {
448
- def.pattern ?? (def.pattern = regexes.base64url);
536
+ def.pattern ?? (def.pattern = exports.base64urlCharset);
449
537
  exports.$ZodStringFormat.init(inst, def);
450
- inst._zod.bag.contentEncoding = "base64url";
451
538
  inst._zod.check = (payload) => {
452
539
  if (isValidBase64URL(payload.value))
453
540
  return;
@@ -464,6 +551,77 @@ exports.$ZodE164 = core.$constructor("$ZodE164", (inst, def) => {
464
551
  def.pattern ?? (def.pattern = regexes.e164);
465
552
  exports.$ZodStringFormat.init(inst, def);
466
553
  });
554
+ ////////////////////////////// ZodCreditCard //////////////////////////////
555
+ const CC_SANITIZE = /[- ]/g;
556
+ /** Luhn checksum on a digit-only string. Adapted from valibot (MIT). */
557
+ function isLuhnAlgo(digits) {
558
+ let length = digits.length;
559
+ let bit = 1;
560
+ let sum = 0;
561
+ while (length) {
562
+ const value = digits.charCodeAt(--length) - 48;
563
+ bit ^= 1;
564
+ sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value] : value;
565
+ }
566
+ return sum % 10 === 0;
567
+ }
568
+ function isValidCreditCard(input) {
569
+ if (!regexes.creditCard.test(input))
570
+ return false;
571
+ return isLuhnAlgo(input.replace(CC_SANITIZE, ""));
572
+ }
573
+ exports.$ZodCreditCard = core.$constructor("$ZodCreditCard", (inst, def) => {
574
+ // Shape only — the Luhn check below is not expressible as a pattern, so consumers of `pattern` (JSON Schema, template literals) get the length and separator rules alone.
575
+ def.pattern ?? (def.pattern = regexes.creditCard);
576
+ exports.$ZodStringFormat.init(inst, def);
577
+ inst._zod.check = (payload) => {
578
+ if (isValidCreditCard(payload.value))
579
+ return;
580
+ payload.issues.push({
581
+ code: "invalid_format",
582
+ format: "credit_card",
583
+ input: payload.value,
584
+ inst,
585
+ continue: !def.abort,
586
+ });
587
+ };
588
+ });
589
+ ////////////////////////////// ZodIBAN //////////////////////////////
590
+ // iso 7064 mod 97-10 checksum without BigInt
591
+ function isIso7064Mod97(iban) {
592
+ let remainder = 0;
593
+ const len = iban.length;
594
+ for (let i = 4; i < len; i++) {
595
+ const code = iban.charCodeAt(i);
596
+ remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;
597
+ }
598
+ for (let i = 0; i < 4; i++) {
599
+ const code = iban.charCodeAt(i);
600
+ remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;
601
+ }
602
+ return remainder === 1;
603
+ }
604
+ function isValidIBAN(input) {
605
+ if (!regexes.iban.test(input))
606
+ return false;
607
+ return isIso7064Mod97(input);
608
+ }
609
+ exports.$ZodIBAN = core.$constructor("$ZodIBAN", (inst, def) => {
610
+ // shape only — checksum is not expressible as a pattern
611
+ def.pattern ?? (def.pattern = regexes.iban);
612
+ exports.$ZodStringFormat.init(inst, def);
613
+ inst._zod.check = (payload) => {
614
+ if (isValidIBAN(payload.value))
615
+ return;
616
+ payload.issues.push({
617
+ code: "invalid_format",
618
+ format: "iban",
619
+ input: payload.value,
620
+ inst,
621
+ continue: !def.abort,
622
+ });
623
+ };
624
+ });
467
625
  ////////////////////////////// ZodJWT //////////////////////////////
468
626
  function isValidJWT(token, algorithm = null) {
469
627
  try {
@@ -517,7 +675,7 @@ exports.$ZodCustomStringFormat = core.$constructor("$ZodCustomStringFormat", (in
517
675
  });
518
676
  exports.$ZodNumber = core.$constructor("$ZodNumber", (inst, def) => {
519
677
  exports.$ZodType.init(inst, def);
520
- inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;
678
+ inst._zod.pattern = regexes.number;
521
679
  inst._zod.parse = (payload, _ctx) => {
522
680
  if (def.coerce)
523
681
  try {
@@ -532,7 +690,7 @@ exports.$ZodNumber = core.$constructor("$ZodNumber", (inst, def) => {
532
690
  ? Number.isNaN(input)
533
691
  ? "NaN"
534
692
  : !Number.isFinite(input)
535
- ? "Infinity"
693
+ ? String(input)
536
694
  : undefined
537
695
  : undefined;
538
696
  payload.issues.push({
@@ -710,6 +868,8 @@ function handleArrayResult(result, final, index) {
710
868
  }
711
869
  exports.$ZodArray = core.$constructor("$ZodArray", (inst, def) => {
712
870
  exports.$ZodType.init(inst, def);
871
+ const memo = core.globalConfig.memoizer;
872
+ memo?.attach(inst);
713
873
  inst._zod.parse = (payload, ctx) => {
714
874
  const input = payload.value;
715
875
  if (!Array.isArray(input)) {
@@ -721,8 +881,9 @@ exports.$ZodArray = core.$constructor("$ZodArray", (inst, def) => {
721
881
  });
722
882
  return payload;
723
883
  }
724
- payload.value = Array(input.length);
884
+ payload.value = memo ? memo.alloc(inst, payload, Array(input.length), ctx) : Array(input.length);
725
885
  const proms = [];
886
+ const abortEarly = ctx?.abortEarly;
726
887
  for (let i = 0; i < input.length; i++) {
727
888
  const item = input[i];
728
889
  const result = def.element._zod.run({
@@ -734,6 +895,9 @@ exports.$ZodArray = core.$constructor("$ZodArray", (inst, def) => {
734
895
  }
735
896
  else {
736
897
  handleArrayResult(result, payload, i);
898
+ // the element's payload is authoritative here, since handleArrayResult forwards every issue; an object's is not, because it drops a failed absent optional
899
+ if (abortEarly && result.issues.length !== 0 && util.aborted(result))
900
+ break;
737
901
  }
738
902
  }
739
903
  if (proms.length) {
@@ -742,16 +906,21 @@ exports.$ZodArray = core.$constructor("$ZodArray", (inst, def) => {
742
906
  return payload; //handleArrayResultsAsync(parseResults, final);
743
907
  };
744
908
  });
745
- function handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) {
909
+ function handlePropertyResult(result, final, key, input, optin, optout) {
746
910
  const isPresent = key in input;
911
+ const isOptionalOut = optout === "optional";
912
+ // The middle rung means "absence permitted, nothing supplied in its place", so an absent key contributes nothing — whatever the schema made of `undefined` is invented, not substituted. Only `optional` reaches this with a value: `defaulted` substitutes, and a schema that isn't optional-out has to keep the key.
913
+ if (!isPresent && isOptionalOut && optin === "optional") {
914
+ return;
915
+ }
747
916
  if (result.issues.length) {
748
917
  // For optional-in/out schemas, ignore errors on absent keys.
749
- if (isOptionalIn && isOptionalOut && !isPresent) {
918
+ if (optin !== undefined && isOptionalOut && !isPresent) {
750
919
  return;
751
920
  }
752
921
  final.issues.push(...util.prefixIssues(key, result.issues));
753
922
  }
754
- if (!isPresent && !isOptionalIn) {
923
+ if (!isPresent && optin === undefined) {
755
924
  if (!result.issues.length) {
756
925
  final.issues.push({
757
926
  code: "invalid_type",
@@ -763,7 +932,7 @@ function handlePropertyResult(result, final, key, input, isOptionalIn, isOptiona
763
932
  return;
764
933
  }
765
934
  if (result.value === undefined) {
766
- if (isPresent) {
935
+ if (isPresent || (optin === "defaulted" && !isOptionalOut)) {
767
936
  final.value[key] = undefined;
768
937
  }
769
938
  }
@@ -771,46 +940,64 @@ function handlePropertyResult(result, final, key, input, isOptionalIn, isOptiona
771
940
  final.value[key] = result.value;
772
941
  }
773
942
  }
943
+ // one shared instance; a fresh [] per schema cost 56 bytes retained
944
+ const NO_SYMBOL_KEYS = [];
774
945
  function normalizeDef(def) {
775
946
  const keys = Object.keys(def.shape);
776
- for (const k of keys) {
947
+ const ownSymbols = Object.getOwnPropertySymbols(def.shape);
948
+ const symbolKeys = ownSymbols.length ? ownSymbols : NO_SYMBOL_KEYS;
949
+ // aliases `keys` when there are no symbols, so a string-only shape keeps one array
950
+ const allKeys = symbolKeys.length ? [...keys, ...symbolKeys] : keys;
951
+ for (const k of allKeys) {
777
952
  if (!def.shape?.[k]?._zod?.traits?.has("$ZodType")) {
778
- throw new Error(`Invalid element at key "${k}": expected a Zod schema`);
953
+ throw new Error(`Invalid element at key "${String(k)}": expected a Zod schema`);
779
954
  }
780
955
  }
781
956
  const okeys = util.optionalKeys(def.shape);
782
957
  return {
783
958
  ...def,
784
- keys,
959
+ allKeys,
960
+ symbolKeys,
961
+ // string-only: handleCatchall matches it against `for...in`, which never yields a symbol
785
962
  keySet: new Set(keys),
786
963
  numKeys: keys.length,
787
964
  optionalKeys: new Set(okeys),
788
965
  };
789
966
  }
790
- function handleCatchall(proms, input, payload, ctx, def, inst) {
967
+ function handleCatchall(proms, input, payload, ctx, def, inst, abortEarly) {
791
968
  const unrecognized = [];
792
969
  const keySet = def.keySet;
793
970
  const _catchall = def.catchall._zod;
794
971
  const t = _catchall.def.type;
795
- const isOptionalIn = _catchall.optin === "optional";
796
- const isOptionalOut = _catchall.optout === "optional";
972
+ const optin = _catchall.optin;
973
+ const optout = _catchall.optout;
974
+ // starts at 0, not the current length: the shape phase already ran and may have aborted
975
+ let seen = 0;
797
976
  for (const key in input) {
798
- // skip __proto__ so it can't replace the result prototype via the
799
- // assignment setter on the plain {} we build into
800
- if (key === "__proto__")
801
- continue;
977
+ if (abortEarly && payload.issues.length !== seen) {
978
+ if (util.aborted(payload, seen))
979
+ break;
980
+ seen = payload.issues.length;
981
+ }
982
+ // Must precede the __proto__ branch: a declared key is not unrecognized, even though the shape loop deliberately strips __proto__ from the parsed output.
802
983
  if (keySet.has(key))
803
984
  continue;
985
+ // Don't copy an undeclared __proto__ into the result; assignment to a plain {} would replace the result prototype. But in strict mode it is still an unknown key, so report it before skipping.
986
+ if (key === "__proto__") {
987
+ if (t === "never")
988
+ unrecognized.push(key);
989
+ continue;
990
+ }
804
991
  if (t === "never") {
805
992
  unrecognized.push(key);
806
993
  continue;
807
994
  }
808
995
  const r = _catchall.run({ value: input[key], issues: [] }, ctx);
809
996
  if (r instanceof Promise) {
810
- proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));
997
+ proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));
811
998
  }
812
999
  else {
813
- handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);
1000
+ handlePropertyResult(r, payload, key, input, optin, optout);
814
1001
  }
815
1002
  }
816
1003
  if (unrecognized.length) {
@@ -819,6 +1006,8 @@ function handleCatchall(proms, input, payload, ctx, def, inst) {
819
1006
  keys: unrecognized,
820
1007
  input,
821
1008
  inst,
1009
+ // Describes the shape of the input, not the validity of the parsed value, so it never aborts. The parse still fails; the schema's own checks just get to run first, and an enclosing intersection can reconcile the key against a sibling operand.
1010
+ continue: true,
822
1011
  });
823
1012
  }
824
1013
  if (!proms.length)
@@ -830,30 +1019,35 @@ function handleCatchall(proms, input, payload, ctx, def, inst) {
830
1019
  exports.$ZodObject = core.$constructor("$ZodObject", (inst, def) => {
831
1020
  // requires cast because technically $ZodObject doesn't extend
832
1021
  exports.$ZodType.init(inst, def);
833
- // const sh = def.shape;
834
1022
  const desc = Object.getOwnPropertyDescriptor(def, "shape");
835
- if (!desc?.get) {
836
- const sh = def.shape;
837
- Object.defineProperty(def, "shape", {
838
- get: () => {
839
- const newSh = { ...sh };
840
- Object.defineProperty(def, "shape", {
841
- value: newSh,
842
- });
843
- return newSh;
844
- },
845
- });
1023
+ // a cloned def carries its source's accessor, which knows the shape it answers from; adopting that keeps the clone's keys readable without running it
1024
+ const sh = desc?.get ? desc.get.raw : (def.shape ?? {});
1025
+ if (sh) {
1026
+ // Freezes the shape on first read, so its getters resolve once and every later read sees the same schemas.
1027
+ const get = () => {
1028
+ const newSh = { ...sh };
1029
+ Object.defineProperty(def, "shape", { value: newSh });
1030
+ get.raw = newSh;
1031
+ return newSh;
1032
+ };
1033
+ get.raw = sh;
1034
+ Object.defineProperty(def, "shape", { get });
846
1035
  }
847
1036
  const _normalized = util.cached(() => normalizeDef(def));
848
- util.defineLazy(inst._zod, "propValues", () => {
849
- const shape = def.shape;
1037
+ util.defineLazyInternal(inst, "propValues", (zod) => {
1038
+ const shape = zod.def.shape;
850
1039
  const propValues = {};
851
1040
  for (const key in shape) {
852
1041
  const field = shape[key]._zod;
853
1042
  if (field.values) {
854
- propValues[key] ?? (propValues[key] = new Set());
1043
+ if (!Object.prototype.hasOwnProperty.call(propValues, key)) {
1044
+ util.assignProp(propValues, key, new Set());
1045
+ }
855
1046
  for (const v of field.values)
856
1047
  propValues[key].add(v);
1048
+ // An omittable slot reads back as undefined at a discriminator lookup, so it has to claim undefined: two options that can both omit the key are not discriminable on it.
1049
+ if (field.optin !== undefined)
1050
+ propValues[key].add(undefined);
857
1051
  }
858
1052
  }
859
1053
  return propValues;
@@ -861,6 +1055,8 @@ exports.$ZodObject = core.$constructor("$ZodObject", (inst, def) => {
861
1055
  const isObject = util.isObject;
862
1056
  const catchall = def.catchall;
863
1057
  let value;
1058
+ const memo = core.globalConfig.memoizer;
1059
+ memo?.attach(inst);
864
1060
  inst._zod.parse = (payload, ctx) => {
865
1061
  value ?? (value = _normalized.value);
866
1062
  const input = payload.value;
@@ -873,25 +1069,34 @@ exports.$ZodObject = core.$constructor("$ZodObject", (inst, def) => {
873
1069
  });
874
1070
  return payload;
875
1071
  }
876
- payload.value = {};
1072
+ payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};
877
1073
  const proms = [];
878
1074
  const shape = value.shape;
879
- for (const key of value.keys) {
1075
+ const abortEarly = ctx?.abortEarly;
1076
+ let seen = payload.issues.length;
1077
+ for (const key of value.allKeys) {
1078
+ if (abortEarly && payload.issues.length !== seen) {
1079
+ if (util.aborted(payload, seen))
1080
+ break;
1081
+ seen = payload.issues.length;
1082
+ }
1083
+ if (key === "__proto__")
1084
+ continue;
880
1085
  const el = shape[key];
881
- const isOptionalIn = el._zod.optin === "optional";
882
- const isOptionalOut = el._zod.optout === "optional";
1086
+ const optin = el._zod.optin;
1087
+ const optout = el._zod.optout;
883
1088
  const r = el._zod.run({ value: input[key], issues: [] }, ctx);
884
1089
  if (r instanceof Promise) {
885
- proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));
1090
+ proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));
886
1091
  }
887
1092
  else {
888
- handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);
1093
+ handlePropertyResult(r, payload, key, input, optin, optout);
889
1094
  }
890
1095
  }
891
1096
  if (!catchall) {
892
1097
  return proms.length ? Promise.all(proms).then(() => payload) : payload;
893
1098
  }
894
- return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);
1099
+ return handleCatchall(proms, input, payload, ctx, _normalized.value, inst, abortEarly === true);
895
1100
  };
896
1101
  });
897
1102
  exports.$ZodObjectJIT = core.$constructor("$ZodObjectJIT", (inst, def) => {
@@ -899,58 +1104,65 @@ exports.$ZodObjectJIT = core.$constructor("$ZodObjectJIT", (inst, def) => {
899
1104
  exports.$ZodObject.init(inst, def);
900
1105
  const superParse = inst._zod.parse;
901
1106
  const _normalized = util.cached(() => normalizeDef(def));
1107
+ const memo = core.globalConfig.memoizer;
902
1108
  const generateFastpass = (shape) => {
903
- const doc = new doc_js_1.Doc(["shape", "payload", "ctx"]);
904
1109
  const normalized = _normalized.value;
905
- const parseStr = (key) => {
906
- const k = util.esc(key);
907
- return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;
908
- };
1110
+ const syms = normalized.symbolKeys;
1111
+ // a symbol has no source literal, so it is read as `syms[i]` off the closed-over scope
1112
+ const doc = new doc_js_1.Doc(["payload", "ctx"], { shape, inst, memo, syms });
1113
+ const parseStr = (k) => `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;
1114
+ // prefixes in place, like util.prefixIssues. newResult must land before the early return: a catchall runs after this and would otherwise write onto the caller's input
1115
+ const prefixStr = (id, k) => `
1116
+ let ${id}_ab = false;
1117
+ for (let i = 0; i < ${id}.issues.length; i++) {
1118
+ const iss = ${id}.issues[i];
1119
+ iss.path = iss.path ? [${k}, ...iss.path] : [${k}];
1120
+ payload.issues.push(iss);
1121
+ if (iss.continue !== true) ${id}_ab = true;
1122
+ }
1123
+ if (${id}_ab && ctx && ctx.abortEarly) {
1124
+ payload.value = newResult;
1125
+ return payload;
1126
+ }`;
909
1127
  doc.write(`const input = payload.value;`);
910
1128
  const ids = Object.create(null);
911
1129
  let counter = 0;
912
- for (const key of normalized.keys) {
1130
+ for (const key of normalized.allKeys) {
913
1131
  ids[key] = `key_${counter++}`;
914
1132
  }
915
1133
  // A: preserve key order {
916
- doc.write(`const newResult = {};`);
917
- for (const key of normalized.keys) {
1134
+ doc.write(memo ? `const newResult = memo.alloc(inst, payload, {}, ctx);` : `const newResult = {};`);
1135
+ for (const key of normalized.allKeys) {
1136
+ if (key === "__proto__")
1137
+ continue;
918
1138
  const id = ids[key];
919
- const k = util.esc(key);
1139
+ const k = typeof key === "symbol" ? `syms[${syms.indexOf(key)}]` : util.esc(key);
1140
+ const isPresent = `${k} in input`;
920
1141
  const schema = shape[key];
921
- const isOptionalIn = schema?._zod?.optin === "optional";
1142
+ const optin = schema?._zod?.optin;
1143
+ const isOptionalIn = optin !== undefined;
922
1144
  const isOptionalOut = schema?._zod?.optout === "optional";
923
- doc.write(`const ${id} = ${parseStr(key)};`);
1145
+ doc.write(`const ${id} = ${parseStr(k)};`);
924
1146
  if (isOptionalIn && isOptionalOut) {
925
- // For optional-in/out schemas, ignore errors on absent keys
1147
+ // For optional-in/out schemas, ignore errors on absent keys — and, like the interpreted path, drop the value produced alongside them. The middle rung goes further: it permits absence without supplying anything in its place, so an absent key contributes nothing at all.
1148
+ const assign = optin === "optional" ? `${id}_present` : `${id}.value !== undefined || ${id}_present`;
926
1149
  doc.write(`
927
- if (${id}.issues.length) {
928
- if (${k} in input) {
929
- payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
930
- ...iss,
931
- path: iss.path ? [${k}, ...iss.path] : [${k}]
932
- })));
1150
+ const ${id}_present = ${isPresent};
1151
+ if (!${id}.issues.length || ${id}_present) {
1152
+ if (${id}.issues.length) {${prefixStr(id, k)}
933
1153
  }
934
- }
935
-
936
- if (${id}.value === undefined) {
937
- if (${k} in input) {
938
- newResult[${k}] = undefined;
1154
+
1155
+ if (${assign}) {
1156
+ newResult[${k}] = ${id}.value;
939
1157
  }
940
- } else {
941
- newResult[${k}] = ${id}.value;
942
1158
  }
943
-
1159
+
944
1160
  `);
945
1161
  }
946
1162
  else if (!isOptionalIn) {
947
1163
  doc.write(`
948
- const ${id}_present = ${k} in input;
949
- if (${id}.issues.length) {
950
- payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
951
- ...iss,
952
- path: iss.path ? [${k}, ...iss.path] : [${k}]
953
- })));
1164
+ const ${id}_present = ${isPresent};
1165
+ if (${id}.issues.length) {${prefixStr(id, k)}
954
1166
  }
955
1167
  if (!${id}_present && !${id}.issues.length) {
956
1168
  payload.issues.push({
@@ -959,42 +1171,39 @@ exports.$ZodObjectJIT = core.$constructor("$ZodObjectJIT", (inst, def) => {
959
1171
  input: undefined,
960
1172
  path: [${k}]
961
1173
  });
1174
+ if (ctx && ctx.abortEarly) {
1175
+ payload.value = newResult;
1176
+ return payload;
1177
+ }
962
1178
  }
963
1179
 
964
1180
  if (${id}_present) {
965
- if (${id}.value === undefined) {
966
- newResult[${k}] = undefined;
967
- } else {
968
- newResult[${k}] = ${id}.value;
969
- }
1181
+ newResult[${k}] = ${id}.value;
970
1182
  }
971
1183
 
972
1184
  `);
973
1185
  }
974
1186
  else {
975
1187
  doc.write(`
976
- if (${id}.issues.length) {
977
- payload.issues = payload.issues.concat(${id}.issues.map(iss => ({
978
- ...iss,
979
- path: iss.path ? [${k}, ...iss.path] : [${k}]
980
- })));
981
- }
982
-
983
- if (${id}.value === undefined) {
984
- if (${k} in input) {
985
- newResult[${k}] = undefined;
986
- }
987
- } else {
1188
+ if (${id}.issues.length) {${prefixStr(id, k)}
1189
+ }
1190
+ `);
1191
+ if (optin === "defaulted") {
1192
+ doc.write(`newResult[${k}] = ${id}.value;`);
1193
+ }
1194
+ else {
1195
+ doc.write(`
1196
+ if (${id}.value !== undefined || ${isPresent}) {
988
1197
  newResult[${k}] = ${id}.value;
989
1198
  }
990
-
991
1199
  `);
1200
+ }
992
1201
  }
993
1202
  }
994
1203
  doc.write(`payload.value = newResult;`);
995
1204
  doc.write(`return payload;`);
996
- const fn = doc.compile();
997
- return (payload, ctx) => fn(shape, payload, ctx);
1205
+ // closing `shape` in is what pays: turbofan specializes the parser against that one shape object, so every `shape[k]._zod.run` folds to a known callee. as a parameter it stays a generic load and measures 13% slower even with the forwarding frame gone
1206
+ return doc.compile();
998
1207
  };
999
1208
  let fastpass;
1000
1209
  const isObject = util.isObject;
@@ -1022,7 +1231,7 @@ exports.$ZodObjectJIT = core.$constructor("$ZodObjectJIT", (inst, def) => {
1022
1231
  payload = fastpass(payload, ctx);
1023
1232
  if (!catchall)
1024
1233
  return payload;
1025
- return handleCatchall([], input, payload, ctx, value, inst);
1234
+ return handleCatchall([], input, payload, ctx, value, inst, ctx?.abortEarly === true);
1026
1235
  }
1027
1236
  return superParse(payload, ctx);
1028
1237
  };
@@ -1049,17 +1258,21 @@ function handleUnionResults(results, final, inst, ctx) {
1049
1258
  }
1050
1259
  exports.$ZodUnion = core.$constructor("$ZodUnion", (inst, def) => {
1051
1260
  exports.$ZodType.init(inst, def);
1052
- util.defineLazy(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : undefined);
1053
- util.defineLazy(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : undefined);
1054
- util.defineLazy(inst._zod, "values", () => {
1055
- if (def.options.every((o) => o._zod.values)) {
1056
- return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));
1261
+ util.defineLazyInternal(inst, "optin", (zod) => zod.def.options.some((o) => o._zod.optin === "defaulted")
1262
+ ? "defaulted"
1263
+ : zod.def.options.some((o) => o._zod.optin !== undefined)
1264
+ ? "optional"
1265
+ : undefined);
1266
+ util.defineLazyInternal(inst, "optout", (zod) => zod.def.options.some((o) => o._zod.optout === "optional") ? "optional" : undefined);
1267
+ util.defineLazyInternal(inst, "values", (zod) => {
1268
+ if (zod.def.options.every((o) => o._zod.values)) {
1269
+ return new Set(zod.def.options.flatMap((option) => Array.from(option._zod.values)));
1057
1270
  }
1058
1271
  return undefined;
1059
1272
  });
1060
- util.defineLazy(inst._zod, "pattern", () => {
1061
- if (def.options.every((o) => o._zod.pattern)) {
1062
- const patterns = def.options.map((o) => o._zod.pattern);
1273
+ util.defineLazyInternal(inst, "pattern", (zod) => {
1274
+ if (zod.def.options.every((o) => o._zod.pattern)) {
1275
+ const patterns = zod.def.options.map((o) => o._zod.pattern);
1063
1276
  return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join("|")})$`);
1064
1277
  }
1065
1278
  return undefined;
@@ -1094,12 +1307,16 @@ exports.$ZodUnion = core.$constructor("$ZodUnion", (inst, def) => {
1094
1307
  };
1095
1308
  });
1096
1309
  function handleExclusiveUnionResults(results, final, inst, ctx) {
1097
- const successes = results.filter((r) => r.issues.length === 0);
1098
- if (successes.length === 1) {
1099
- final.value = successes[0].value;
1310
+ const matches = [];
1311
+ for (let i = 0; i < results.length; i++) {
1312
+ if (results[i].issues.length === 0)
1313
+ matches.push(i);
1314
+ }
1315
+ if (matches.length === 1) {
1316
+ final.value = results[matches[0]].value;
1100
1317
  return final;
1101
1318
  }
1102
- if (successes.length === 0) {
1319
+ if (matches.length === 0) {
1103
1320
  // No matches - same as regular union
1104
1321
  final.issues.push({
1105
1322
  code: "invalid_union",
@@ -1116,6 +1333,7 @@ function handleExclusiveUnionResults(results, final, inst, ctx) {
1116
1333
  inst,
1117
1334
  errors: [],
1118
1335
  inclusive: false,
1336
+ matches,
1119
1337
  });
1120
1338
  }
1121
1339
  return final;
@@ -1150,44 +1368,75 @@ exports.$ZodXor = core.$constructor("$ZodXor", (inst, def) => {
1150
1368
  });
1151
1369
  };
1152
1370
  });
1371
+ /** Returns the option whose discriminator claims `value`, or throws if ambiguous. */
1372
+ function getDiscriminatedOption(union, value) {
1373
+ const internals = union._zod;
1374
+ let map = internals.bag.optionsMap;
1375
+ if (!map) {
1376
+ map = discriminatorMap(internals.def);
1377
+ internals.bag.optionsMap = map;
1378
+ }
1379
+ const option = map.get(value);
1380
+ if (option === null)
1381
+ throw new Error(`Ambiguous discriminator value "${String(value)}"`);
1382
+ return option;
1383
+ }
1384
+ function discriminatorMap(def) {
1385
+ const map = new Map();
1386
+ for (const option of def.options) {
1387
+ const values = option._zod.propValues?.[def.discriminator];
1388
+ if (!values || values.size === 0)
1389
+ throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`);
1390
+ for (const value of values) {
1391
+ if (map.has(value)) {
1392
+ if (value !== undefined)
1393
+ throw new Error(`Duplicate discriminator value "${String(value)}"`);
1394
+ // keep the collision marked so a later member cannot reclaim it
1395
+ map.set(value, null);
1396
+ }
1397
+ else {
1398
+ map.set(value, option);
1399
+ }
1400
+ }
1401
+ }
1402
+ return map;
1403
+ }
1153
1404
  exports.$ZodDiscriminatedUnion =
1154
1405
  /*@__PURE__*/
1155
1406
  core.$constructor("$ZodDiscriminatedUnion", (inst, def) => {
1156
1407
  def.inclusive = false;
1157
1408
  exports.$ZodUnion.init(inst, def);
1158
1409
  const _super = inst._zod.parse;
1159
- util.defineLazy(inst._zod, "propValues", () => {
1410
+ util.defineLazyInternal(inst, "propValues", (zod) => {
1160
1411
  const propValues = {};
1161
- for (const option of def.options) {
1412
+ let undefinedCount = 0;
1413
+ for (const option of zod.def.options) {
1162
1414
  const pv = option._zod.propValues;
1163
1415
  if (!pv || Object.keys(pv).length === 0)
1164
- throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`);
1416
+ throw new Error(`Invalid discriminated union option at index "${zod.def.options.indexOf(option)}"`);
1417
+ if (pv[zod.def.discriminator]?.has(undefined))
1418
+ undefinedCount++;
1165
1419
  for (const [k, v] of Object.entries(pv)) {
1166
- if (!propValues[k])
1167
- propValues[k] = new Set();
1420
+ if (!Object.prototype.hasOwnProperty.call(propValues, k)) {
1421
+ util.assignProp(propValues, k, new Set());
1422
+ }
1168
1423
  for (const val of v) {
1169
1424
  propValues[k].add(val);
1170
1425
  }
1171
1426
  }
1172
1427
  }
1428
+ if (!zod.def.unionFallback && undefinedCount > 1)
1429
+ propValues[zod.def.discriminator]?.delete(undefined);
1173
1430
  return propValues;
1174
1431
  });
1175
- const disc = util.cached(() => {
1176
- const opts = def.options;
1177
- const map = new Map();
1178
- for (const o of opts) {
1179
- const values = o._zod.propValues?.[def.discriminator];
1180
- if (!values || values.size === 0)
1181
- throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`);
1182
- for (const v of values) {
1183
- if (map.has(v)) {
1184
- throw new Error(`Duplicate discriminator value "${String(v)}"`);
1185
- }
1186
- map.set(v, o);
1187
- }
1432
+ // Checked now rather than in the lookup map below, so an option that lacks the discriminator fails at the `discriminatedUnion` call instead of on the first object parsed. Options whose shape cannot be enumerated without resolving it — pipes and lazies — are left to the map.
1433
+ def.options.forEach((option, i) => {
1434
+ const propShape = util.rawShape(option._zod.def);
1435
+ if (propShape && !Object.prototype.hasOwnProperty.call(propShape, def.discriminator)) {
1436
+ throw new Error(`Invalid discriminated union option at index "${i}"`);
1188
1437
  }
1189
- return map;
1190
1438
  });
1439
+ const disc = util.cached(() => discriminatorMap(def));
1191
1440
  inst._zod.parse = (payload, ctx) => {
1192
1441
  const input = payload.value;
1193
1442
  if (!util.isObject(input)) {
@@ -1199,14 +1448,15 @@ core.$constructor("$ZodDiscriminatedUnion", (inst, def) => {
1199
1448
  });
1200
1449
  return payload;
1201
1450
  }
1202
- const opt = disc.value.get(input?.[def.discriminator]);
1203
- if (opt) {
1451
+ const value = input?.[def.discriminator];
1452
+ const opt = disc.value.get(value);
1453
+ // forward metadata cannot choose an encoder for an absent tag
1454
+ if (opt && (value !== undefined || ctx.direction !== "backward")) {
1204
1455
  return opt._zod.run(payload, ctx);
1205
1456
  }
1206
1457
  // Fall back to union matching when the fast discriminator path fails:
1207
1458
  // - explicitly enabled via unionFallback, or
1208
- // - during backward direction (encode), since codec-based discriminators
1209
- // have different values in forward vs backward directions
1459
+ // - during backward direction (encode), since codec-based discriminators have different values in forward vs backward directions
1210
1460
  if (def.unionFallback || ctx.direction === "backward") {
1211
1461
  return _super(payload, ctx);
1212
1462
  }
@@ -1216,7 +1466,7 @@ core.$constructor("$ZodDiscriminatedUnion", (inst, def) => {
1216
1466
  errors: [],
1217
1467
  note: "No matching discriminator",
1218
1468
  discriminator: def.discriminator,
1219
- options: Array.from(disc.value.keys()),
1469
+ options: Array.from(disc.value.keys()).filter((value) => disc.value.get(value) !== null),
1220
1470
  input,
1221
1471
  path: [def.discriminator],
1222
1472
  inst,
@@ -1252,7 +1502,11 @@ function mergeValues(a, b) {
1252
1502
  const bKeys = Object.keys(b);
1253
1503
  const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);
1254
1504
  const newObj = { ...a, ...b };
1505
+ if (Object.prototype.hasOwnProperty.call(newObj, "__proto__"))
1506
+ delete newObj.__proto__;
1255
1507
  for (const key of sharedKeys) {
1508
+ if (key === "__proto__")
1509
+ continue;
1256
1510
  const sharedValue = mergeValues(a[key], b[key]);
1257
1511
  if (!sharedValue.valid) {
1258
1512
  return {
@@ -1286,43 +1540,55 @@ function mergeValues(a, b) {
1286
1540
  return { valid: false, mergeErrorPath: [] };
1287
1541
  }
1288
1542
  function handleIntersectionResults(result, left, right) {
1289
- // Track which side(s) report each key as unrecognized
1543
+ // Track which side(s) reject each key. A key rejection is reported only when BOTH sides reject it, so a key owned by one branch survives the other's key schema. strictObject reports these as unrecognized_keys; a record with an open key schema reports one invalid_key per key.
1290
1544
  const unrecKeys = new Map();
1291
1545
  let unrecIssue;
1292
- for (const iss of left.issues) {
1293
- if (iss.code === "unrecognized_keys") {
1546
+ const keyIssues = new Map();
1547
+ const collect = (iss, side) => {
1548
+ let keys;
1549
+ if (iss.code === "unrecognized_keys" && !iss.path?.length) {
1294
1550
  unrecIssue ?? (unrecIssue = iss);
1295
- for (const k of iss.keys) {
1296
- if (!unrecKeys.has(k))
1297
- unrecKeys.set(k, {});
1298
- unrecKeys.get(k).l = true;
1299
- }
1551
+ keys = iss.keys;
1552
+ }
1553
+ else if (iss.code === "invalid_key" && iss.origin === "record" && iss.path?.length === 1) {
1554
+ const k = String(iss.path[0]);
1555
+ if (!keyIssues.has(k))
1556
+ keyIssues.set(k, iss);
1557
+ keys = [k];
1300
1558
  }
1301
1559
  else {
1302
- result.issues.push(iss);
1560
+ return false;
1303
1561
  }
1562
+ for (const k of keys) {
1563
+ if (!unrecKeys.has(k))
1564
+ unrecKeys.set(k, {});
1565
+ unrecKeys.get(k)[side] = true;
1566
+ }
1567
+ return true;
1568
+ };
1569
+ for (const iss of left.issues) {
1570
+ if (!collect(iss, "l"))
1571
+ result.issues.push(iss);
1304
1572
  }
1305
1573
  for (const iss of right.issues) {
1306
- if (iss.code === "unrecognized_keys") {
1307
- for (const k of iss.keys) {
1308
- if (!unrecKeys.has(k))
1309
- unrecKeys.set(k, {});
1310
- unrecKeys.get(k).r = true;
1311
- }
1312
- }
1313
- else {
1574
+ if (!collect(iss, "r"))
1314
1575
  result.issues.push(iss);
1315
- }
1316
1576
  }
1317
- // Report only keys unrecognized by BOTH sides
1577
+ // Report only keys rejected by BOTH sides
1318
1578
  const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);
1319
- if (bothKeys.length && unrecIssue) {
1320
- result.issues.push({ ...unrecIssue, keys: bothKeys });
1579
+ if (bothKeys.length) {
1580
+ const aggregated = unrecIssue ? bothKeys.filter((k) => unrecIssue.keys.includes(k)) : [];
1581
+ if (aggregated.length)
1582
+ result.issues.push({ ...unrecIssue, keys: aggregated });
1583
+ for (const k of bothKeys) {
1584
+ if (!aggregated.includes(k) && keyIssues.has(k))
1585
+ result.issues.push(keyIssues.get(k));
1586
+ }
1321
1587
  }
1322
- if (util.aborted(result))
1323
- return result;
1324
1588
  const merged = mergeValues(left.value, right.value);
1325
1589
  if (!merged.valid) {
1590
+ if (util.aborted(result))
1591
+ return result;
1326
1592
  throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);
1327
1593
  }
1328
1594
  result.value = merged.data;
@@ -1331,6 +1597,8 @@ function handleIntersectionResults(result, left, right) {
1331
1597
  exports.$ZodTuple = core.$constructor("$ZodTuple", (inst, def) => {
1332
1598
  exports.$ZodType.init(inst, def);
1333
1599
  const items = def.items;
1600
+ const memo = core.globalConfig.memoizer;
1601
+ memo?.attach(inst);
1334
1602
  inst._zod.parse = (payload, ctx) => {
1335
1603
  const input = payload.value;
1336
1604
  if (!Array.isArray(input)) {
@@ -1342,7 +1610,7 @@ exports.$ZodTuple = core.$constructor("$ZodTuple", (inst, def) => {
1342
1610
  });
1343
1611
  return payload;
1344
1612
  }
1345
- payload.value = [];
1613
+ payload.value = memo ? memo.alloc(inst, payload, [], ctx) : [];
1346
1614
  const proms = [];
1347
1615
  const optinStart = getTupleOptStart(items, "optin");
1348
1616
  const optoutStart = getTupleOptStart(items, "optout");
@@ -1369,11 +1637,11 @@ exports.$ZodTuple = core.$constructor("$ZodTuple", (inst, def) => {
1369
1637
  });
1370
1638
  }
1371
1639
  }
1372
- // Run every item in parallel, collecting results into an indexed
1373
- // array. The post-processing in `handleTupleResults` walks them in
1374
- // order so it can decide whether an absent optional-output error can
1375
- // truncate the tail or must be reported to preserve required output.
1640
+ // Run every item in parallel, collecting results into an indexed array. The post-processing in `handleTupleResults` walks them in order so it can decide whether an absent optional-output error can truncate the tail or must be reported to preserve required output.
1376
1641
  const itemResults = new Array(items.length);
1642
+ // only tracked when there is a rest loop to skip
1643
+ const abortEarly = def.rest ? ctx?.abortEarly : undefined;
1644
+ let itemAborted = false;
1377
1645
  for (let i = 0; i < items.length; i++) {
1378
1646
  const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);
1379
1647
  if (r instanceof Promise) {
@@ -1383,12 +1651,21 @@ exports.$ZodTuple = core.$constructor("$ZodTuple", (inst, def) => {
1383
1651
  }
1384
1652
  else {
1385
1653
  itemResults[i] = r;
1654
+ if (abortEarly && !itemAborted && r.issues.length)
1655
+ itemAborted = util.aborted(r);
1386
1656
  }
1387
1657
  }
1388
- if (def.rest) {
1658
+ // sound because rest is non-empty exactly when every fixed index is present, the one case handleTupleResults cannot discard an item's issues
1659
+ if (def.rest && !itemAborted) {
1389
1660
  let i = items.length - 1;
1390
1661
  const rest = input.slice(items.length);
1662
+ let seen = payload.issues.length;
1391
1663
  for (const el of rest) {
1664
+ if (abortEarly && payload.issues.length !== seen) {
1665
+ if (util.aborted(payload, seen))
1666
+ break;
1667
+ seen = payload.issues.length;
1668
+ }
1392
1669
  i++;
1393
1670
  const result = def.rest._zod.run({ value: el, issues: [] }, ctx);
1394
1671
  if (result instanceof Promise) {
@@ -1407,7 +1684,9 @@ exports.$ZodTuple = core.$constructor("$ZodTuple", (inst, def) => {
1407
1684
  });
1408
1685
  function getTupleOptStart(items, key) {
1409
1686
  for (let i = items.length - 1; i >= 0; i--) {
1410
- if (items[i]._zod[key] !== "optional")
1687
+ // optin is a three-rung ladder so any rung above `undefined` permits an absent slot; optout stays two-valued.
1688
+ const omittable = key === "optin" ? items[i]._zod.optin !== undefined : items[i]._zod.optout === "optional";
1689
+ if (!omittable)
1411
1690
  return i + 1;
1412
1691
  }
1413
1692
  return 0;
@@ -1419,12 +1698,15 @@ function handleTupleResult(result, final, index) {
1419
1698
  final.value[index] = result.value;
1420
1699
  }
1421
1700
  function handleTupleResults(itemResults, final, items, input, optoutStart) {
1422
- // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional
1423
- // rule, but only after `optoutStart`: the first index where the output
1424
- // tuple tail can be absent.
1701
+ // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional rule, but only after `optoutStart`: the first index where the output tuple tail can be absent.
1425
1702
  for (let i = 0; i < items.length; i++) {
1426
1703
  const r = itemResults[i];
1427
1704
  const isPresent = i < input.length;
1705
+ // The array analog of `handlePropertyResult`'s absent-key early return: the middle rung permits absence without supplying anything in its place, so the tail truncates here instead of materializing whatever the item made of `undefined`.
1706
+ if (!isPresent && i >= optoutStart && items[i]._zod.optin === "optional") {
1707
+ final.value.length = i;
1708
+ break;
1709
+ }
1428
1710
  if (r.issues.length) {
1429
1711
  if (!isPresent && i >= optoutStart) {
1430
1712
  final.value.length = i;
@@ -1452,6 +1734,8 @@ function handleTupleResults(itemResults, final, items, input, optoutStart) {
1452
1734
  }
1453
1735
  exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1454
1736
  exports.$ZodType.init(inst, def);
1737
+ const memo = core.globalConfig.memoizer;
1738
+ memo?.attach(inst);
1455
1739
  inst._zod.parse = (payload, ctx) => {
1456
1740
  const input = payload.value;
1457
1741
  if (!util.isPlainObject(input)) {
@@ -1463,14 +1747,18 @@ exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1463
1747
  });
1464
1748
  return payload;
1465
1749
  }
1750
+ // no guard in either loop below: a record's invalid_key aborts but an enclosing intersection can reconcile it, so a stopped loop hides keys the sibling does not own and the intersection then rejects nothing
1466
1751
  const proms = [];
1467
1752
  const values = def.keyType._zod.values;
1468
- if (values) {
1469
- payload.value = {};
1753
+ if (values && !def.partial) {
1754
+ payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};
1470
1755
  const recordKeys = new Set();
1471
1756
  for (const key of values) {
1472
1757
  if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") {
1473
1758
  recordKeys.add(typeof key === "number" ? key.toString() : key);
1759
+ // A declared __proto__ is stripped but is not an unrecognized key.
1760
+ if (key === "__proto__")
1761
+ continue;
1474
1762
  const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
1475
1763
  if (keyResult instanceof Promise) {
1476
1764
  throw new Error("Async schemas not supported in object keys currently");
@@ -1487,6 +1775,8 @@ exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1487
1775
  continue;
1488
1776
  }
1489
1777
  const outKey = keyResult.value;
1778
+ if (outKey === "__proto__")
1779
+ continue;
1490
1780
  const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);
1491
1781
  if (result instanceof Promise) {
1492
1782
  proms.push(result.then((result) => {
@@ -1507,8 +1797,16 @@ exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1507
1797
  let unrecognized;
1508
1798
  for (const key in input) {
1509
1799
  if (!recordKeys.has(key)) {
1510
- unrecognized = unrecognized ?? [];
1511
- unrecognized.push(key);
1800
+ if (def.mode === "loose") {
1801
+ // skip __proto__ so it can't replace the result prototype via the assignment setter on the plain {} we build into
1802
+ if (key === "__proto__")
1803
+ continue;
1804
+ payload.value[key] = input[key];
1805
+ }
1806
+ else {
1807
+ unrecognized = unrecognized ?? [];
1808
+ unrecognized.push(key);
1809
+ }
1512
1810
  }
1513
1811
  }
1514
1812
  if (unrecognized && unrecognized.length > 0) {
@@ -1517,11 +1815,14 @@ exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1517
1815
  input,
1518
1816
  inst,
1519
1817
  keys: unrecognized,
1818
+ continue: true,
1520
1819
  });
1521
1820
  }
1522
1821
  }
1523
1822
  else {
1524
- payload.value = {};
1823
+ payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};
1824
+ // An enumerable key schema declares which keys the record owns, so a key outside the set is unrecognized. A non-enumerable one (regex, refine) is a constraint every key must satisfy, so a failing key is invalid. Only the former is reconcilable against the other side of an intersection.
1825
+ let unrecognized;
1525
1826
  // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()
1526
1827
  for (const key of Reflect.ownKeys(input)) {
1527
1828
  if (key === "__proto__")
@@ -1532,8 +1833,7 @@ exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1532
1833
  if (keyResult instanceof Promise) {
1533
1834
  throw new Error("Async schemas not supported in object keys currently");
1534
1835
  }
1535
- // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)
1536
- // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals
1836
+ // Numeric string fallback: if key is a numeric string and failed, retry with Number(key). This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals
1537
1837
  const checkNumericKey = typeof key === "string" && regexes.number.test(key) && keyResult.issues.length;
1538
1838
  if (checkNumericKey) {
1539
1839
  const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);
@@ -1549,6 +1849,10 @@ exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1549
1849
  // Pass through unchanged
1550
1850
  payload.value[key] = input[key];
1551
1851
  }
1852
+ else if (values) {
1853
+ unrecognized = unrecognized ?? [];
1854
+ unrecognized.push(key);
1855
+ }
1552
1856
  else {
1553
1857
  // Default "strict" behavior: error on invalid key
1554
1858
  payload.issues.push({
@@ -1562,22 +1866,35 @@ exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1562
1866
  }
1563
1867
  continue;
1564
1868
  }
1869
+ // the guard above tests the raw input key, but the key schema can normalize an ordinary key into __proto__; re-check the key we actually write under
1870
+ const outKey = keyResult.value;
1871
+ if (outKey === "__proto__")
1872
+ continue;
1565
1873
  const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);
1566
1874
  if (result instanceof Promise) {
1567
1875
  proms.push(result.then((result) => {
1568
1876
  if (result.issues.length) {
1569
1877
  payload.issues.push(...util.prefixIssues(key, result.issues));
1570
1878
  }
1571
- payload.value[keyResult.value] = result.value;
1879
+ payload.value[outKey] = result.value;
1572
1880
  }));
1573
1881
  }
1574
1882
  else {
1575
1883
  if (result.issues.length) {
1576
1884
  payload.issues.push(...util.prefixIssues(key, result.issues));
1577
1885
  }
1578
- payload.value[keyResult.value] = result.value;
1886
+ payload.value[outKey] = result.value;
1579
1887
  }
1580
1888
  }
1889
+ if (unrecognized && unrecognized.length > 0) {
1890
+ payload.issues.push({
1891
+ code: "unrecognized_keys",
1892
+ input,
1893
+ inst,
1894
+ keys: unrecognized,
1895
+ continue: true,
1896
+ });
1897
+ }
1581
1898
  }
1582
1899
  if (proms.length) {
1583
1900
  return Promise.all(proms).then(() => payload);
@@ -1587,6 +1904,8 @@ exports.$ZodRecord = core.$constructor("$ZodRecord", (inst, def) => {
1587
1904
  });
1588
1905
  exports.$ZodMap = core.$constructor("$ZodMap", (inst, def) => {
1589
1906
  exports.$ZodType.init(inst, def);
1907
+ const memo = core.globalConfig.memoizer;
1908
+ memo?.attach(inst);
1590
1909
  inst._zod.parse = (payload, ctx) => {
1591
1910
  const input = payload.value;
1592
1911
  if (!(input instanceof Map)) {
@@ -1599,8 +1918,15 @@ exports.$ZodMap = core.$constructor("$ZodMap", (inst, def) => {
1599
1918
  return payload;
1600
1919
  }
1601
1920
  const proms = [];
1602
- payload.value = new Map();
1921
+ payload.value = memo ? memo.alloc(inst, payload, new Map(), ctx) : new Map();
1922
+ const abortEarly = ctx?.abortEarly;
1923
+ let seen = payload.issues.length;
1603
1924
  for (const [key, value] of input) {
1925
+ if (abortEarly && payload.issues.length !== seen) {
1926
+ if (util.aborted(payload, seen))
1927
+ break;
1928
+ seen = payload.issues.length;
1929
+ }
1604
1930
  const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);
1605
1931
  const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);
1606
1932
  if (keyResult instanceof Promise || valueResult instanceof Promise) {
@@ -1651,6 +1977,8 @@ function handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {
1651
1977
  }
1652
1978
  exports.$ZodSet = core.$constructor("$ZodSet", (inst, def) => {
1653
1979
  exports.$ZodType.init(inst, def);
1980
+ const memo = core.globalConfig.memoizer;
1981
+ memo?.attach(inst);
1654
1982
  inst._zod.parse = (payload, ctx) => {
1655
1983
  const input = payload.value;
1656
1984
  if (!(input instanceof Set)) {
@@ -1663,8 +1991,15 @@ exports.$ZodSet = core.$constructor("$ZodSet", (inst, def) => {
1663
1991
  return payload;
1664
1992
  }
1665
1993
  const proms = [];
1666
- payload.value = new Set();
1994
+ payload.value = memo ? memo.alloc(inst, payload, new Set(), ctx) : new Set();
1995
+ const abortEarly = ctx?.abortEarly;
1996
+ let seen = payload.issues.length;
1667
1997
  for (const item of input) {
1998
+ if (abortEarly && payload.issues.length !== seen) {
1999
+ if (util.aborted(payload, seen))
2000
+ break;
2001
+ seen = payload.issues.length;
2002
+ }
1668
2003
  const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);
1669
2004
  if (result instanceof Promise) {
1670
2005
  proms.push(result.then((result) => handleSetResult(result, payload)));
@@ -1688,10 +2023,11 @@ exports.$ZodEnum = core.$constructor("$ZodEnum", (inst, def) => {
1688
2023
  const values = util.getEnumValues(def.entries);
1689
2024
  const valuesSet = new Set(values);
1690
2025
  inst._zod.values = valuesSet;
1691
- inst._zod.pattern = new RegExp(`^(${values
1692
- .filter((k) => util.propertyKeyTypes.has(typeof k))
1693
- .map((o) => (typeof o === "string" ? util.escapeRegex(o) : o.toString()))
1694
- .join("|")})$`);
2026
+ util.defineLazyInternal(inst, "pattern", (zod) => {
2027
+ const patternValues = util.getEnumValues(zod.def.entries).filter((k) => util.propertyKeyTypes.has(typeof k));
2028
+ // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches ""
2029
+ return new RegExp(patternValues.length ? `^(${patternValues.map((o) => util.escapeRegex(o.toString())).join("|")})$` : "^[^\\s\\S]$");
2030
+ });
1695
2031
  inst._zod.parse = (payload, _ctx) => {
1696
2032
  const input = payload.value;
1697
2033
  if (valuesSet.has(input)) {
@@ -1708,14 +2044,17 @@ exports.$ZodEnum = core.$constructor("$ZodEnum", (inst, def) => {
1708
2044
  });
1709
2045
  exports.$ZodLiteral = core.$constructor("$ZodLiteral", (inst, def) => {
1710
2046
  exports.$ZodType.init(inst, def);
1711
- if (def.values.length === 0) {
1712
- throw new Error("Cannot create literal schema with no valid values");
1713
- }
1714
2047
  const values = new Set(def.values);
1715
2048
  inst._zod.values = values;
1716
- inst._zod.pattern = new RegExp(`^(${def.values
1717
- .map((o) => (typeof o === "string" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))
1718
- .join("|")})$`);
2049
+ util.defineLazyInternal(inst, "pattern", (zod) => {
2050
+ const vals = zod.def.values;
2051
+ // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches ""
2052
+ return new RegExp(vals.length
2053
+ ? `^(${vals
2054
+ .map((o) => typeof o === "string" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o))
2055
+ .join("|")})$`
2056
+ : "^[^\\s\\S]$");
2057
+ });
1719
2058
  inst._zod.parse = (payload, _ctx) => {
1720
2059
  const input = payload.value;
1721
2060
  if (values.has(input)) {
@@ -1749,6 +2088,7 @@ exports.$ZodFile = core.$constructor("$ZodFile", (inst, def) => {
1749
2088
  exports.$ZodTransform = core.$constructor("$ZodTransform", (inst, def) => {
1750
2089
  exports.$ZodType.init(inst, def);
1751
2090
  inst._zod.optin = "optional";
2091
+ core.globalConfig.memoizer?.guard(inst);
1752
2092
  inst._zod.parse = (payload, ctx) => {
1753
2093
  if (ctx.direction === "backward") {
1754
2094
  throw new core.$ZodEncodeError(inst.constructor.name);
@@ -1758,7 +2098,6 @@ exports.$ZodTransform = core.$constructor("$ZodTransform", (inst, def) => {
1758
2098
  const output = _out instanceof Promise ? _out : Promise.resolve(_out);
1759
2099
  return output.then((output) => {
1760
2100
  payload.value = output;
1761
- payload.fallback = true;
1762
2101
  return payload;
1763
2102
  });
1764
2103
  }
@@ -1766,37 +2105,37 @@ exports.$ZodTransform = core.$constructor("$ZodTransform", (inst, def) => {
1766
2105
  throw new core.$ZodAsyncError();
1767
2106
  }
1768
2107
  payload.value = _out;
1769
- payload.fallback = true;
1770
2108
  return payload;
1771
2109
  };
1772
2110
  });
1773
- function handleOptionalResult(result, input) {
1774
- if (input === undefined && (result.issues.length || result.fallback)) {
1775
- return { issues: [], value: undefined };
1776
- }
1777
- return result;
2111
+ function handleOptionalResult(payload, result) {
2112
+ // A substituting schema that still failed has no usable answer; yield undefined. Its issues are simply dropped: it ran on a payload of its own, so there is no shared array to truncate and nothing of the caller's to lose with it.
2113
+ payload.value = result.issues.length ? undefined : result.value;
2114
+ return payload;
1778
2115
  }
1779
2116
  exports.$ZodOptional = core.$constructor("$ZodOptional", (inst, def) => {
1780
2117
  exports.$ZodType.init(inst, def);
1781
- inst._zod.optin = "optional";
2118
+ // .optional() propagates absence rather than substituting for it, so a defaulted inner keeps its rung.
2119
+ util.defineLazyInternal(inst, "optin", (zod) => zod.def.innerType._zod.optin === "defaulted" ? "defaulted" : "optional");
1782
2120
  inst._zod.optout = "optional";
1783
- util.defineLazy(inst._zod, "values", () => {
1784
- return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;
2121
+ util.defineLazyInternal(inst, "values", (zod) => {
2122
+ const values = zod.def.innerType._zod.values;
2123
+ return values ? new Set([...values, undefined]) : undefined;
1785
2124
  });
1786
- util.defineLazy(inst._zod, "pattern", () => {
1787
- const pattern = def.innerType._zod.pattern;
2125
+ util.defineLazyInternal(inst, "pattern", (zod) => {
2126
+ const pattern = zod.def.innerType._zod.pattern;
1788
2127
  return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;
1789
2128
  });
1790
2129
  inst._zod.parse = (payload, ctx) => {
1791
- if (def.innerType._zod.optin === "optional") {
1792
- const input = payload.value;
1793
- const result = def.innerType._zod.run(payload, ctx);
1794
- if (result instanceof Promise)
1795
- return result.then((r) => handleOptionalResult(r, input));
1796
- return handleOptionalResult(result, input);
1797
- }
1798
2130
  if (payload.value === undefined) {
1799
- return payload;
2131
+ // Only the top rung substitutes a value for absence; everything else leaves it intact, which is what .optional() means.
2132
+ if (def.innerType._zod.optin !== "defaulted")
2133
+ return payload;
2134
+ // Its own payload, for the same reason $ZodCatch gets one: a pipe forwards an unrecognized key through the caller's issues array, and this must not read that as the substituting schema failing and drop it.
2135
+ const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);
2136
+ if (result instanceof Promise)
2137
+ return result.then((result) => handleOptionalResult(payload, result));
2138
+ return handleOptionalResult(payload, result);
1800
2139
  }
1801
2140
  return def.innerType._zod.run(payload, ctx);
1802
2141
  };
@@ -1805,8 +2144,8 @@ exports.$ZodExactOptional = core.$constructor("$ZodExactOptional", (inst, def) =
1805
2144
  // Call parent init - inherits optin/optout = "optional"
1806
2145
  exports.$ZodOptional.init(inst, def);
1807
2146
  // Override values/pattern to NOT add undefined
1808
- util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
1809
- util.defineLazy(inst._zod, "pattern", () => def.innerType._zod.pattern);
2147
+ util.defineLazyInternal(inst, "values", (zod) => zod.def.innerType._zod.values);
2148
+ util.defineLazyInternal(inst, "pattern", (zod) => zod.def.innerType._zod.pattern);
1810
2149
  // Override parse to just delegate (no undefined handling)
1811
2150
  inst._zod.parse = (payload, ctx) => {
1812
2151
  return def.innerType._zod.run(payload, ctx);
@@ -1814,14 +2153,14 @@ exports.$ZodExactOptional = core.$constructor("$ZodExactOptional", (inst, def) =
1814
2153
  });
1815
2154
  exports.$ZodNullable = core.$constructor("$ZodNullable", (inst, def) => {
1816
2155
  exports.$ZodType.init(inst, def);
1817
- util.defineLazy(inst._zod, "optin", () => def.innerType._zod.optin);
1818
- util.defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
1819
- util.defineLazy(inst._zod, "pattern", () => {
1820
- const pattern = def.innerType._zod.pattern;
2156
+ util.defineLazyInternal(inst, "optin", (zod) => zod.def.innerType._zod.optin);
2157
+ util.defineLazyInternal(inst, "optout", (zod) => zod.def.innerType._zod.optout);
2158
+ util.defineLazyInternal(inst, "pattern", (zod) => {
2159
+ const pattern = zod.def.innerType._zod.pattern;
1821
2160
  return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;
1822
2161
  });
1823
- util.defineLazy(inst._zod, "values", () => {
1824
- return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;
2162
+ util.defineLazyInternal(inst, "values", (zod) => {
2163
+ return zod.def.innerType._zod.values ? new Set([...zod.def.innerType._zod.values, null]) : undefined;
1825
2164
  });
1826
2165
  inst._zod.parse = (payload, ctx) => {
1827
2166
  // Forward direction (decode): allow null to pass through
@@ -1833,8 +2172,8 @@ exports.$ZodNullable = core.$constructor("$ZodNullable", (inst, def) => {
1833
2172
  exports.$ZodDefault = core.$constructor("$ZodDefault", (inst, def) => {
1834
2173
  exports.$ZodType.init(inst, def);
1835
2174
  // inst._zod.qin = "true";
1836
- inst._zod.optin = "optional";
1837
- util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
2175
+ inst._zod.optin = "defaulted";
2176
+ util.defineLazyInternal(inst, "values", (zod) => zod.def.innerType._zod.values);
1838
2177
  inst._zod.parse = (payload, ctx) => {
1839
2178
  if (ctx.direction === "backward") {
1840
2179
  return def.innerType._zod.run(payload, ctx);
@@ -1863,8 +2202,8 @@ function handleDefaultResult(payload, def) {
1863
2202
  }
1864
2203
  exports.$ZodPrefault = core.$constructor("$ZodPrefault", (inst, def) => {
1865
2204
  exports.$ZodType.init(inst, def);
1866
- inst._zod.optin = "optional";
1867
- util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
2205
+ inst._zod.optin = "defaulted";
2206
+ util.defineLazyInternal(inst, "values", (zod) => zod.def.innerType._zod.values);
1868
2207
  inst._zod.parse = (payload, ctx) => {
1869
2208
  if (ctx.direction === "backward") {
1870
2209
  return def.innerType._zod.run(payload, ctx);
@@ -1878,8 +2217,8 @@ exports.$ZodPrefault = core.$constructor("$ZodPrefault", (inst, def) => {
1878
2217
  });
1879
2218
  exports.$ZodNonOptional = core.$constructor("$ZodNonOptional", (inst, def) => {
1880
2219
  exports.$ZodType.init(inst, def);
1881
- util.defineLazy(inst._zod, "values", () => {
1882
- const v = def.innerType._zod.values;
2220
+ util.defineLazyInternal(inst, "values", (zod) => {
2221
+ const v = zod.def.innerType._zod.values;
1883
2222
  return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;
1884
2223
  });
1885
2224
  inst._zod.parse = (payload, ctx) => {
@@ -1918,47 +2257,40 @@ exports.$ZodSuccess = core.$constructor("$ZodSuccess", (inst, def) => {
1918
2257
  return payload;
1919
2258
  };
1920
2259
  });
2260
+ function handleCatchResult(payload, result, def, ctx) {
2261
+ if (!result.issues.length) {
2262
+ payload.value = result.value;
2263
+ // The value carries up, so the flag describing it has to carry with it: a back-edge into a node still being parsed must not be frozen by an enclosing readonly, and its checks belong to the node itself. Guarded so the ordinary case adds no own property.
2264
+ if (result.memo)
2265
+ payload.memo = true;
2266
+ return payload;
2267
+ }
2268
+ // Spread the inner's own payload, not ours: `value` has to stay the input the catch was handed, and the inner ran on a payload of its own so its issues are already private to this call.
2269
+ payload.value = def.catchValue({
2270
+ ...result,
2271
+ value: payload.value,
2272
+ error: {
2273
+ issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),
2274
+ },
2275
+ input: payload.value,
2276
+ });
2277
+ return payload;
2278
+ }
1921
2279
  exports.$ZodCatch = core.$constructor("$ZodCatch", (inst, def) => {
1922
2280
  exports.$ZodType.init(inst, def);
1923
- inst._zod.optin = "optional";
1924
- util.defineLazy(inst._zod, "optout", () => def.innerType._zod.optout);
1925
- util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
2281
+ util.defineLazyInternal(inst, "optin", (zod) => zod.def.innerType._zod.optin === "defaulted" ? "defaulted" : "optional");
2282
+ util.defineLazyInternal(inst, "optout", (zod) => zod.def.innerType._zod.optout);
2283
+ util.defineLazyInternal(inst, "values", (zod) => zod.def.innerType._zod.values);
1926
2284
  inst._zod.parse = (payload, ctx) => {
1927
2285
  if (ctx.direction === "backward") {
1928
2286
  return def.innerType._zod.run(payload, ctx);
1929
2287
  }
1930
2288
  // Forward direction (decode): apply catch logic
1931
- const result = def.innerType._zod.run(payload, ctx);
2289
+ const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);
1932
2290
  if (result instanceof Promise) {
1933
- return result.then((result) => {
1934
- payload.value = result.value;
1935
- if (result.issues.length) {
1936
- payload.value = def.catchValue({
1937
- ...payload,
1938
- error: {
1939
- issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),
1940
- },
1941
- input: payload.value,
1942
- });
1943
- payload.issues = [];
1944
- payload.fallback = true;
1945
- }
1946
- return payload;
1947
- });
2291
+ return result.then((result) => handleCatchResult(payload, result, def, ctx));
1948
2292
  }
1949
- payload.value = result.value;
1950
- if (result.issues.length) {
1951
- payload.value = def.catchValue({
1952
- ...payload,
1953
- error: {
1954
- issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),
1955
- },
1956
- input: payload.value,
1957
- });
1958
- payload.issues = [];
1959
- payload.fallback = true;
1960
- }
1961
- return payload;
2293
+ return handleCatchResult(payload, result, def, ctx);
1962
2294
  };
1963
2295
  });
1964
2296
  exports.$ZodNaN = core.$constructor("$ZodNaN", (inst, def) => {
@@ -1978,10 +2310,10 @@ exports.$ZodNaN = core.$constructor("$ZodNaN", (inst, def) => {
1978
2310
  });
1979
2311
  exports.$ZodPipe = core.$constructor("$ZodPipe", (inst, def) => {
1980
2312
  exports.$ZodType.init(inst, def);
1981
- util.defineLazy(inst._zod, "values", () => def.in._zod.values);
1982
- util.defineLazy(inst._zod, "optin", () => def.in._zod.optin);
1983
- util.defineLazy(inst._zod, "optout", () => def.out._zod.optout);
1984
- util.defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
2313
+ util.defineLazyInternal(inst, "values", (zod) => zod.def.in._zod.values);
2314
+ util.defineLazyInternal(inst, "optin", (zod) => zod.def.in._zod.optin);
2315
+ util.defineLazyInternal(inst, "optout", (zod) => zod.def.out._zod.optout);
2316
+ util.defineLazyInternal(inst, "propValues", (zod) => zod.def.in._zod.propValues);
1985
2317
  inst._zod.parse = (payload, ctx) => {
1986
2318
  if (ctx.direction === "backward") {
1987
2319
  const right = def.out._zod.run(payload, ctx);
@@ -1998,19 +2330,20 @@ exports.$ZodPipe = core.$constructor("$ZodPipe", (inst, def) => {
1998
2330
  };
1999
2331
  });
2000
2332
  function handlePipeResult(left, next, ctx) {
2001
- if (left.issues.length) {
2333
+ // Any issue stops the pipe, so a failing refinement never feeds its transform. An unrecognized key is the exception: it describes the input's extra properties, not the value being piped, and an enclosing intersection may yet reconcile it.
2334
+ if (left.issues.some((iss) => iss.code !== "unrecognized_keys")) {
2002
2335
  // prevent further checks
2003
2336
  left.aborted = true;
2004
2337
  return left;
2005
2338
  }
2006
- return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);
2339
+ return next._zod.run({ value: left.value, issues: left.issues }, ctx);
2007
2340
  }
2008
2341
  exports.$ZodCodec = core.$constructor("$ZodCodec", (inst, def) => {
2009
2342
  exports.$ZodType.init(inst, def);
2010
- util.defineLazy(inst._zod, "values", () => def.in._zod.values);
2011
- util.defineLazy(inst._zod, "optin", () => def.in._zod.optin);
2012
- util.defineLazy(inst._zod, "optout", () => def.out._zod.optout);
2013
- util.defineLazy(inst._zod, "propValues", () => def.in._zod.propValues);
2343
+ util.defineLazyInternal(inst, "values", (zod) => zod.def.in._zod.values);
2344
+ util.defineLazyInternal(inst, "optin", (zod) => zod.def.in._zod.optin);
2345
+ util.defineLazyInternal(inst, "optout", (zod) => zod.def.out._zod.optout);
2346
+ util.defineLazyInternal(inst, "propValues", (zod) => zod.def.in._zod.propValues);
2014
2347
  inst._zod.parse = (payload, ctx) => {
2015
2348
  const direction = ctx.direction || "forward";
2016
2349
  if (direction === "forward") {
@@ -2064,10 +2397,10 @@ exports.$ZodPreprocess = core.$constructor("$ZodPreprocess", (inst, def) => {
2064
2397
  });
2065
2398
  exports.$ZodReadonly = core.$constructor("$ZodReadonly", (inst, def) => {
2066
2399
  exports.$ZodType.init(inst, def);
2067
- util.defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues);
2068
- util.defineLazy(inst._zod, "values", () => def.innerType._zod.values);
2069
- util.defineLazy(inst._zod, "optin", () => def.innerType?._zod?.optin);
2070
- util.defineLazy(inst._zod, "optout", () => def.innerType?._zod?.optout);
2400
+ util.defineLazyInternal(inst, "propValues", (zod) => zod.def.innerType._zod.propValues);
2401
+ util.defineLazyInternal(inst, "values", (zod) => zod.def.innerType._zod.values);
2402
+ util.defineLazyInternal(inst, "optin", (zod) => zod.def.innerType?._zod?.optin);
2403
+ util.defineLazyInternal(inst, "optout", (zod) => zod.def.innerType?._zod?.optout);
2071
2404
  inst._zod.parse = (payload, ctx) => {
2072
2405
  if (ctx.direction === "backward") {
2073
2406
  return def.innerType._zod.run(payload, ctx);
@@ -2080,25 +2413,72 @@ exports.$ZodReadonly = core.$constructor("$ZodReadonly", (inst, def) => {
2080
2413
  };
2081
2414
  });
2082
2415
  function handleReadonlyResult(payload) {
2083
- payload.value = Object.freeze(payload.value);
2416
+ // A repeat visit hands back a node that is still being built; freezing it here would make the rest of its keys fail to assign.
2417
+ if (!payload.memo)
2418
+ payload.value = Object.freeze(payload.value);
2084
2419
  return payload;
2085
2420
  }
2421
+ // a leaf's pattern source with its own checks folded in: the last pattern-carrying check wins, else length bounds narrow the catch-all, else an integer format narrows the number form. the fold lives here instead of on `_zod.pattern` so a bundle without template literals never pays for it
2422
+ function leafPattern(schema) {
2423
+ const def = schema._zod.def;
2424
+ let pattern = def.pattern;
2425
+ let isInt = !!def.format?.includes("int");
2426
+ let minimum;
2427
+ let maximum;
2428
+ for (const ch of def.checks ?? []) {
2429
+ const d = ch._zod.def;
2430
+ if (d.pattern)
2431
+ pattern = d.pattern;
2432
+ isInt || (isInt = !!d.format?.includes("int"));
2433
+ const lo = d.minimum ?? d.length;
2434
+ const hi = d.maximum ?? d.length;
2435
+ if (lo !== undefined && (minimum === undefined || lo > minimum))
2436
+ minimum = lo;
2437
+ if (hi !== undefined && (maximum === undefined || hi < maximum))
2438
+ maximum = hi;
2439
+ }
2440
+ if (pattern)
2441
+ return pattern.source;
2442
+ // an empty range matches nothing at runtime, and `{8,5}` is not a legal quantifier
2443
+ if (minimum !== undefined && maximum !== undefined && minimum > maximum)
2444
+ return "(?!)";
2445
+ if (minimum !== undefined || maximum !== undefined)
2446
+ return regexes.string({ minimum, maximum }).source;
2447
+ const own = schema._zod.pattern;
2448
+ return (isInt && own === regexes.number ? regexes.integer : own)?.source;
2449
+ }
2450
+ // a part's pattern source. a wrapper's pattern embeds its inner pattern's source verbatim, so the folded form is substituted in place without knowing the wrapper's own composition; a union's options are joined the way the union builds its own pattern
2451
+ function partPattern(schema) {
2452
+ const def = schema._zod.def;
2453
+ const own = schema._zod.pattern?.source;
2454
+ // lazy resolves its inner on the internals, not the def
2455
+ const inner = def.innerType ?? schema._zod.innerType;
2456
+ if (inner) {
2457
+ const before = inner._zod.pattern?.source;
2458
+ const after = partPattern(inner);
2459
+ if (own && before && after && after !== before) {
2460
+ return own.replace(util.cleanRegex(before), () => util.cleanRegex(after));
2461
+ }
2462
+ return own;
2463
+ }
2464
+ if (def.options) {
2465
+ const sources = def.options.map(partPattern);
2466
+ if (sources.every(Boolean))
2467
+ return `^(${sources.map((s) => util.cleanRegex(s)).join("|")})$`;
2468
+ }
2469
+ return leafPattern(schema);
2470
+ }
2086
2471
  exports.$ZodTemplateLiteral = core.$constructor("$ZodTemplateLiteral", (inst, def) => {
2087
2472
  exports.$ZodType.init(inst, def);
2088
2473
  const regexParts = [];
2089
2474
  for (const part of def.parts) {
2090
2475
  if (typeof part === "object" && part !== null) {
2091
2476
  // is Zod schema
2092
- if (!part._zod.pattern) {
2093
- // if (!source)
2477
+ const source = partPattern(part);
2478
+ if (!source) {
2094
2479
  throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);
2095
2480
  }
2096
- const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;
2097
- if (!source)
2098
- throw new Error(`Invalid template literal part: ${part._zod.traits}`);
2099
- const start = source.startsWith("^") ? 1 : 0;
2100
- const end = source.endsWith("$") ? source.length - 1 : source.length;
2101
- regexParts.push(source.slice(start, end));
2481
+ regexParts.push(util.cleanRegex(source));
2102
2482
  }
2103
2483
  else if (part === null || util.primitiveTypes.has(typeof part)) {
2104
2484
  regexParts.push(util.escapeRegex(`${part}`));
@@ -2134,33 +2514,35 @@ exports.$ZodTemplateLiteral = core.$constructor("$ZodTemplateLiteral", (inst, de
2134
2514
  });
2135
2515
  exports.$ZodFunction = core.$constructor("$ZodFunction", (inst, def) => {
2136
2516
  exports.$ZodType.init(inst, def);
2137
- inst._def = def;
2517
+ // Defined, not assigned: the classic prototype exposes `_def` as a getter with no setter.
2518
+ Object.defineProperty(inst, "_def", { value: def });
2138
2519
  inst._zod.def = def;
2139
2520
  inst.implement = (func) => {
2140
2521
  if (typeof func !== "function") {
2141
2522
  throw new Error("implement() must be called with a function");
2142
2523
  }
2143
- return function (...args) {
2524
+ // Defined inline so the closure stays anonymous: binding it to a `const` first names it, which costs 256 bytes per implemented function.
2525
+ return Object.defineProperty(function (...args) {
2144
2526
  const parsedArgs = inst._def.input ? (0, parse_js_1.parse)(inst._def.input, args) : args;
2145
2527
  const result = Reflect.apply(func, this, parsedArgs);
2146
2528
  if (inst._def.output) {
2147
2529
  return (0, parse_js_1.parse)(inst._def.output, result);
2148
2530
  }
2149
2531
  return result;
2150
- };
2532
+ }, "_zod", { value: inst._zod, enumerable: false });
2151
2533
  };
2152
2534
  inst.implementAsync = (func) => {
2153
2535
  if (typeof func !== "function") {
2154
2536
  throw new Error("implementAsync() must be called with a function");
2155
2537
  }
2156
- return async function (...args) {
2538
+ return Object.defineProperty(async function (...args) {
2157
2539
  const parsedArgs = inst._def.input ? await (0, parse_js_1.parseAsync)(inst._def.input, args) : args;
2158
2540
  const result = await Reflect.apply(func, this, parsedArgs);
2159
2541
  if (inst._def.output) {
2160
2542
  return await (0, parse_js_1.parseAsync)(inst._def.output, result);
2161
2543
  }
2162
2544
  return result;
2163
- };
2545
+ }, "_zod", { value: inst._zod, enumerable: false });
2164
2546
  };
2165
2547
  inst._zod.parse = (payload, _ctx) => {
2166
2548
  if (typeof payload.value !== "function") {
@@ -2219,19 +2601,17 @@ exports.$ZodPromise = core.$constructor("$ZodPromise", (inst, def) => {
2219
2601
  });
2220
2602
  exports.$ZodLazy = core.$constructor("$ZodLazy", (inst, def) => {
2221
2603
  exports.$ZodType.init(inst, def);
2222
- // Cache the resolved inner type on the shared `def` so all clones of this
2223
- // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,
2224
- // preserving identity for cycle detection on recursive schemas.
2604
+ // Cache the resolved inner type on the shared `def` so all clones of this lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance, preserving identity for cycle detection on recursive schemas.
2225
2605
  util.defineLazy(inst._zod, "innerType", () => {
2226
2606
  const d = def;
2227
2607
  if (!d._cachedInner)
2228
2608
  d._cachedInner = def.getter();
2229
2609
  return d._cachedInner;
2230
2610
  });
2231
- util.defineLazy(inst._zod, "pattern", () => inst._zod.innerType?._zod?.pattern);
2232
- util.defineLazy(inst._zod, "propValues", () => inst._zod.innerType?._zod?.propValues);
2233
- util.defineLazy(inst._zod, "optin", () => inst._zod.innerType?._zod?.optin ?? undefined);
2234
- util.defineLazy(inst._zod, "optout", () => inst._zod.innerType?._zod?.optout ?? undefined);
2611
+ util.defineLazyInternal(inst, "pattern", (zod) => zod.innerType?._zod?.pattern);
2612
+ util.defineLazyInternal(inst, "propValues", (zod) => zod.innerType?._zod?.propValues);
2613
+ util.defineLazyInternal(inst, "optin", (zod) => zod.innerType?._zod?.optin ?? undefined);
2614
+ util.defineLazyInternal(inst, "optout", (zod) => zod.innerType?._zod?.optout ?? undefined);
2235
2615
  inst._zod.parse = (payload, ctx) => {
2236
2616
  const inner = inst._zod.innerType;
2237
2617
  return inner._zod.run(payload, ctx);
@@ -2268,3 +2648,22 @@ function handleRefineResult(result, payload, input, inst) {
2268
2648
  payload.issues.push(util.issue(_iss));
2269
2649
  }
2270
2650
  }
2651
+
2652
+ // seal-cjs-exports
2653
+ (function () {
2654
+ var keys = Object.getOwnPropertyNames(exports);
2655
+ for (var i = 0; i < keys.length; i++) {
2656
+ var desc = Object.getOwnPropertyDescriptor(exports, keys[i]);
2657
+ if (!desc || !desc.get || !desc.configurable) continue;
2658
+ var value;
2659
+ try {
2660
+ value = desc.get();
2661
+ } catch (e) {
2662
+ continue;
2663
+ }
2664
+ // a circular require may not have settled this one yet, so leave it live
2665
+ if (value === undefined) continue;
2666
+ Object.defineProperty(exports, keys[i], { value: value, writable: false, enumerable: desc.enumerable, configurable: false });
2667
+ }
2668
+ Object.freeze(exports);
2669
+ })();