fullstacked 0.12.1-1359 → 0.12.1-1364

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 (335) hide show
  1. package/fullstacked_modules/@fullstacked/ai-agent/ai-agent.js +55352 -53576
  2. package/fullstacked_modules/@fullstacked/ai-agent/index.ts +0 -1
  3. package/fullstacked_modules/@fullstacked/ai-agent/lock.json +157 -152
  4. package/fullstacked_modules/@fullstacked/ai-agent/package.json +13 -13
  5. package/fullstacked_modules/@fullstacked/ai-agent/src/providers/ollama.ts +2 -2
  6. package/fullstacked_modules/@fullstacked/ui/index.js +6 -1
  7. package/fullstacked_modules/zod/README.md +4 -4
  8. package/fullstacked_modules/zod/index.cjs +2 -2
  9. package/fullstacked_modules/zod/index.d.cts +2 -2
  10. package/fullstacked_modules/zod/index.d.ts +2 -2
  11. package/fullstacked_modules/zod/index.js +2 -2
  12. package/fullstacked_modules/zod/locales/index.cjs +17 -0
  13. package/fullstacked_modules/zod/locales/index.d.cts +1 -0
  14. package/fullstacked_modules/zod/locales/index.d.ts +1 -0
  15. package/fullstacked_modules/zod/locales/index.js +1 -0
  16. package/fullstacked_modules/zod/locales/package.json +6 -0
  17. package/fullstacked_modules/zod/mini/index.cjs +17 -0
  18. package/fullstacked_modules/zod/mini/index.d.cts +1 -0
  19. package/fullstacked_modules/zod/mini/index.d.ts +1 -0
  20. package/fullstacked_modules/zod/mini/index.js +1 -0
  21. package/fullstacked_modules/zod/mini/package.json +6 -0
  22. package/fullstacked_modules/zod/package.json +29 -12
  23. package/fullstacked_modules/zod/src/index.ts +2 -2
  24. package/fullstacked_modules/zod/src/locales/index.ts +1 -0
  25. package/fullstacked_modules/zod/src/mini/index.ts +1 -0
  26. package/fullstacked_modules/zod/src/v3/ZodError.ts +1 -1
  27. package/fullstacked_modules/zod/src/v3/tests/object.test.ts +2 -2
  28. package/fullstacked_modules/zod/src/v3/tests/string.test.ts +2 -2
  29. package/fullstacked_modules/zod/src/v3/types.ts +3 -1
  30. package/fullstacked_modules/zod/src/v4/classic/checks.ts +1 -0
  31. package/fullstacked_modules/zod/src/v4/classic/compat.ts +4 -0
  32. package/fullstacked_modules/zod/src/v4/classic/errors.ts +9 -2
  33. package/fullstacked_modules/zod/src/v4/classic/external.ts +1 -1
  34. package/fullstacked_modules/zod/src/v4/classic/parse.ts +49 -0
  35. package/fullstacked_modules/zod/src/v4/classic/schemas.ts +224 -81
  36. package/fullstacked_modules/zod/src/v4/classic/tests/array.test.ts +6 -6
  37. package/fullstacked_modules/zod/src/v4/classic/tests/catch.test.ts +29 -5
  38. package/fullstacked_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  39. package/fullstacked_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
  40. package/fullstacked_modules/zod/src/v4/classic/tests/continuability.test.ts +1 -1
  41. package/fullstacked_modules/zod/src/v4/classic/tests/datetime.test.ts +6 -0
  42. package/fullstacked_modules/zod/src/v4/classic/tests/default.test.ts +52 -0
  43. package/fullstacked_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +42 -0
  44. package/fullstacked_modules/zod/src/v4/classic/tests/error-utils.test.ts +70 -2
  45. package/fullstacked_modules/zod/src/v4/classic/tests/file.test.ts +9 -4
  46. package/fullstacked_modules/zod/src/v4/classic/tests/firstparty.test.ts +4 -0
  47. package/fullstacked_modules/zod/src/v4/classic/tests/function.test.ts +71 -31
  48. package/fullstacked_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  49. package/fullstacked_modules/zod/src/v4/classic/tests/index.test.ts +15 -0
  50. package/fullstacked_modules/zod/src/v4/classic/tests/literal.test.ts +25 -0
  51. package/fullstacked_modules/zod/src/v4/classic/tests/nonoptional.test.ts +15 -0
  52. package/fullstacked_modules/zod/src/v4/classic/tests/number.test.ts +23 -0
  53. package/fullstacked_modules/zod/src/v4/classic/tests/object.test.ts +48 -2
  54. package/fullstacked_modules/zod/src/v4/classic/tests/optional.test.ts +13 -0
  55. package/fullstacked_modules/zod/src/v4/classic/tests/partial.test.ts +193 -0
  56. package/fullstacked_modules/zod/src/v4/classic/tests/pickomit.test.ts +5 -5
  57. package/fullstacked_modules/zod/src/v4/classic/tests/pipe.test.ts +25 -5
  58. package/fullstacked_modules/zod/src/v4/classic/tests/prefault.test.ts +37 -0
  59. package/fullstacked_modules/zod/src/v4/classic/tests/preprocess.test.ts +5 -21
  60. package/fullstacked_modules/zod/src/v4/classic/tests/record.test.ts +15 -1
  61. package/fullstacked_modules/zod/src/v4/classic/tests/recursive-types.test.ts +226 -0
  62. package/fullstacked_modules/zod/src/v4/classic/tests/refine.test.ts +78 -5
  63. package/fullstacked_modules/zod/src/v4/classic/tests/set.test.ts +5 -3
  64. package/fullstacked_modules/zod/src/v4/classic/tests/string-formats.test.ts +16 -0
  65. package/fullstacked_modules/zod/src/v4/classic/tests/string.test.ts +204 -5
  66. package/fullstacked_modules/zod/src/v4/classic/tests/stringbool.test.ts +40 -0
  67. package/fullstacked_modules/zod/src/v4/classic/tests/template-literal.test.ts +14 -9
  68. package/fullstacked_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +315 -7
  69. package/fullstacked_modules/zod/src/v4/classic/tests/transform.test.ts +111 -0
  70. package/fullstacked_modules/zod/src/v4/classic/tests/tuple.test.ts +2 -2
  71. package/fullstacked_modules/zod/src/v4/classic/tests/union.test.ts +90 -3
  72. package/fullstacked_modules/zod/src/v4/core/api.ts +160 -133
  73. package/fullstacked_modules/zod/src/v4/core/checks.ts +6 -2
  74. package/fullstacked_modules/zod/src/v4/core/core.ts +9 -28
  75. package/fullstacked_modules/zod/src/v4/core/doc.ts +2 -2
  76. package/fullstacked_modules/zod/src/v4/core/errors.ts +49 -60
  77. package/fullstacked_modules/zod/src/v4/core/index.ts +0 -1
  78. package/fullstacked_modules/zod/src/v4/core/json-schema.ts +7 -3
  79. package/fullstacked_modules/zod/src/v4/core/parse.ts +101 -0
  80. package/fullstacked_modules/zod/src/v4/core/regexes.ts +56 -14
  81. package/fullstacked_modules/zod/src/v4/core/registries.ts +5 -4
  82. package/fullstacked_modules/zod/src/v4/core/schemas.ts +705 -230
  83. package/fullstacked_modules/zod/src/v4/core/tests/extend.test.ts +18 -0
  84. package/fullstacked_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  85. package/fullstacked_modules/zod/src/v4/core/to-json-schema.ts +100 -33
  86. package/fullstacked_modules/zod/src/v4/core/util.ts +237 -102
  87. package/fullstacked_modules/zod/src/v4/core/versions.ts +2 -2
  88. package/fullstacked_modules/zod/src/v4/locales/bg.ts +136 -0
  89. package/fullstacked_modules/zod/src/v4/locales/da.ts +141 -0
  90. package/fullstacked_modules/zod/src/v4/locales/es.ts +44 -10
  91. package/fullstacked_modules/zod/src/v4/locales/index.ts +8 -0
  92. package/fullstacked_modules/zod/src/v4/locales/is.ts +127 -0
  93. package/fullstacked_modules/zod/src/v4/locales/ka.ts +138 -0
  94. package/fullstacked_modules/zod/src/v4/locales/kh.ts +3 -122
  95. package/fullstacked_modules/zod/src/v4/locales/km.ts +126 -0
  96. package/fullstacked_modules/zod/src/v4/locales/lt.ts +265 -0
  97. package/fullstacked_modules/zod/src/v4/locales/ua.ts +3 -122
  98. package/fullstacked_modules/zod/src/v4/locales/uk.ts +126 -0
  99. package/fullstacked_modules/zod/src/v4/locales/yo.ts +131 -0
  100. package/fullstacked_modules/zod/src/v4/mini/external.ts +1 -1
  101. package/fullstacked_modules/zod/src/v4/mini/parse.ts +14 -1
  102. package/fullstacked_modules/zod/src/v4/mini/schemas.ts +186 -40
  103. package/fullstacked_modules/zod/src/v4/mini/tests/assignability.test.ts +1 -1
  104. package/fullstacked_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
  105. package/fullstacked_modules/zod/src/v4/mini/tests/computed.test.ts +1 -1
  106. package/fullstacked_modules/zod/src/v4/mini/tests/error.test.ts +1 -1
  107. package/fullstacked_modules/zod/src/v4/mini/tests/index.test.ts +29 -1
  108. package/fullstacked_modules/zod/src/v4/mini/tests/number.test.ts +1 -1
  109. package/fullstacked_modules/zod/src/v4/mini/tests/object.test.ts +16 -1
  110. package/fullstacked_modules/zod/src/v4/mini/tests/prototypes.test.ts +1 -1
  111. package/fullstacked_modules/zod/src/v4/mini/tests/recursive-types.test.ts +1 -1
  112. package/fullstacked_modules/zod/src/v4/mini/tests/string.test.ts +17 -1
  113. package/fullstacked_modules/zod/v3/ZodError.cjs +1 -1
  114. package/fullstacked_modules/zod/v3/ZodError.d.cts +6 -6
  115. package/fullstacked_modules/zod/v3/ZodError.d.ts +6 -6
  116. package/fullstacked_modules/zod/v3/ZodError.js +1 -1
  117. package/fullstacked_modules/zod/v3/locales/en.cjs +1 -0
  118. package/fullstacked_modules/zod/v3/locales/en.d.cts +1 -1
  119. package/fullstacked_modules/zod/v3/package.json +6 -0
  120. package/fullstacked_modules/zod/v3/types.cjs +2 -0
  121. package/fullstacked_modules/zod/v3/types.d.cts +4 -1
  122. package/fullstacked_modules/zod/v3/types.d.ts +4 -1
  123. package/fullstacked_modules/zod/v3/types.js +2 -0
  124. package/fullstacked_modules/zod/v4/classic/checks.d.cts +1 -1
  125. package/fullstacked_modules/zod/v4/classic/checks.d.ts +1 -1
  126. package/fullstacked_modules/zod/v4/classic/compat.cjs +5 -1
  127. package/fullstacked_modules/zod/v4/classic/compat.d.cts +4 -0
  128. package/fullstacked_modules/zod/v4/classic/compat.d.ts +4 -0
  129. package/fullstacked_modules/zod/v4/classic/compat.js +4 -0
  130. package/fullstacked_modules/zod/v4/classic/errors.cjs +9 -2
  131. package/fullstacked_modules/zod/v4/classic/errors.js +9 -2
  132. package/fullstacked_modules/zod/v4/classic/external.cjs +2 -2
  133. package/fullstacked_modules/zod/v4/classic/external.d.cts +1 -1
  134. package/fullstacked_modules/zod/v4/classic/external.d.ts +1 -1
  135. package/fullstacked_modules/zod/v4/classic/external.js +1 -1
  136. package/fullstacked_modules/zod/v4/classic/package.json +6 -0
  137. package/fullstacked_modules/zod/v4/classic/parse.cjs +10 -1
  138. package/fullstacked_modules/zod/v4/classic/parse.d.cts +8 -0
  139. package/fullstacked_modules/zod/v4/classic/parse.d.ts +8 -0
  140. package/fullstacked_modules/zod/v4/classic/parse.js +9 -0
  141. package/fullstacked_modules/zod/v4/classic/schemas.cjs +90 -48
  142. package/fullstacked_modules/zod/v4/classic/schemas.d.cts +70 -27
  143. package/fullstacked_modules/zod/v4/classic/schemas.d.ts +70 -27
  144. package/fullstacked_modules/zod/v4/classic/schemas.js +81 -47
  145. package/fullstacked_modules/zod/v4/core/api.cjs +52 -31
  146. package/fullstacked_modules/zod/v4/core/api.d.cts +87 -76
  147. package/fullstacked_modules/zod/v4/core/api.d.ts +87 -76
  148. package/fullstacked_modules/zod/v4/core/api.js +50 -31
  149. package/fullstacked_modules/zod/v4/core/checks.cjs +4 -0
  150. package/fullstacked_modules/zod/v4/core/checks.d.cts +2 -2
  151. package/fullstacked_modules/zod/v4/core/checks.d.ts +2 -2
  152. package/fullstacked_modules/zod/v4/core/checks.js +4 -0
  153. package/fullstacked_modules/zod/v4/core/core.cjs +8 -1
  154. package/fullstacked_modules/zod/v4/core/core.d.cts +5 -2
  155. package/fullstacked_modules/zod/v4/core/core.d.ts +5 -2
  156. package/fullstacked_modules/zod/v4/core/core.js +6 -0
  157. package/fullstacked_modules/zod/v4/core/doc.d.cts +1 -1
  158. package/fullstacked_modules/zod/v4/core/doc.d.ts +1 -1
  159. package/fullstacked_modules/zod/v4/core/errors.cjs +6 -19
  160. package/fullstacked_modules/zod/v4/core/errors.d.cts +24 -22
  161. package/fullstacked_modules/zod/v4/core/errors.d.ts +24 -22
  162. package/fullstacked_modules/zod/v4/core/errors.js +6 -19
  163. package/fullstacked_modules/zod/v4/core/index.cjs +0 -1
  164. package/fullstacked_modules/zod/v4/core/index.d.cts +0 -1
  165. package/fullstacked_modules/zod/v4/core/index.d.ts +0 -1
  166. package/fullstacked_modules/zod/v4/core/index.js +0 -1
  167. package/fullstacked_modules/zod/v4/core/json-schema.d.cts +4 -3
  168. package/fullstacked_modules/zod/v4/core/json-schema.d.ts +4 -3
  169. package/fullstacked_modules/zod/v4/core/package.json +6 -0
  170. package/fullstacked_modules/zod/v4/core/parse.cjs +45 -1
  171. package/fullstacked_modules/zod/v4/core/parse.d.cts +24 -0
  172. package/fullstacked_modules/zod/v4/core/parse.d.ts +24 -0
  173. package/fullstacked_modules/zod/v4/core/parse.js +36 -0
  174. package/fullstacked_modules/zod/v4/core/regexes.cjs +49 -16
  175. package/fullstacked_modules/zod/v4/core/regexes.d.cts +18 -2
  176. package/fullstacked_modules/zod/v4/core/regexes.d.ts +18 -2
  177. package/fullstacked_modules/zod/v4/core/regexes.js +46 -14
  178. package/fullstacked_modules/zod/v4/core/registries.cjs +4 -3
  179. package/fullstacked_modules/zod/v4/core/registries.d.cts +2 -2
  180. package/fullstacked_modules/zod/v4/core/registries.d.ts +2 -2
  181. package/fullstacked_modules/zod/v4/core/registries.js +4 -3
  182. package/fullstacked_modules/zod/v4/core/schemas.cjs +409 -171
  183. package/fullstacked_modules/zod/v4/core/schemas.d.cts +88 -16
  184. package/fullstacked_modules/zod/v4/core/schemas.d.ts +88 -16
  185. package/fullstacked_modules/zod/v4/core/schemas.js +408 -170
  186. package/fullstacked_modules/zod/v4/core/to-json-schema.cjs +97 -31
  187. package/fullstacked_modules/zod/v4/core/to-json-schema.d.cts +5 -3
  188. package/fullstacked_modules/zod/v4/core/to-json-schema.d.ts +5 -3
  189. package/fullstacked_modules/zod/v4/core/to-json-schema.js +97 -31
  190. package/fullstacked_modules/zod/v4/core/util.cjs +220 -101
  191. package/fullstacked_modules/zod/v4/core/util.d.cts +14 -0
  192. package/fullstacked_modules/zod/v4/core/util.d.ts +14 -0
  193. package/fullstacked_modules/zod/v4/core/util.js +209 -101
  194. package/fullstacked_modules/zod/v4/core/versions.cjs +2 -2
  195. package/fullstacked_modules/zod/v4/core/versions.d.cts +1 -1
  196. package/fullstacked_modules/zod/v4/core/versions.d.ts +1 -1
  197. package/fullstacked_modules/zod/v4/core/versions.js +2 -2
  198. package/fullstacked_modules/zod/v4/locales/ar.cjs +1 -0
  199. package/fullstacked_modules/zod/v4/locales/ar.d.cts +2 -1
  200. package/fullstacked_modules/zod/v4/locales/az.cjs +1 -0
  201. package/fullstacked_modules/zod/v4/locales/az.d.cts +2 -1
  202. package/fullstacked_modules/zod/v4/locales/be.cjs +1 -0
  203. package/fullstacked_modules/zod/v4/locales/be.d.cts +2 -1
  204. package/fullstacked_modules/zod/v4/locales/bg.cjs +156 -0
  205. package/fullstacked_modules/zod/v4/locales/bg.d.cts +5 -0
  206. package/fullstacked_modules/zod/v4/locales/bg.d.ts +5 -0
  207. package/fullstacked_modules/zod/v4/locales/bg.js +128 -0
  208. package/fullstacked_modules/zod/v4/locales/ca.cjs +1 -0
  209. package/fullstacked_modules/zod/v4/locales/ca.d.cts +2 -1
  210. package/fullstacked_modules/zod/v4/locales/cs.cjs +1 -0
  211. package/fullstacked_modules/zod/v4/locales/cs.d.cts +2 -1
  212. package/fullstacked_modules/zod/v4/locales/da.cjs +158 -0
  213. package/fullstacked_modules/zod/v4/locales/da.d.cts +5 -0
  214. package/fullstacked_modules/zod/v4/locales/da.d.ts +4 -0
  215. package/fullstacked_modules/zod/v4/locales/da.js +131 -0
  216. package/fullstacked_modules/zod/v4/locales/de.cjs +1 -0
  217. package/fullstacked_modules/zod/v4/locales/de.d.cts +2 -1
  218. package/fullstacked_modules/zod/v4/locales/es.cjs +43 -10
  219. package/fullstacked_modules/zod/v4/locales/es.d.cts +2 -1
  220. package/fullstacked_modules/zod/v4/locales/es.js +42 -10
  221. package/fullstacked_modules/zod/v4/locales/fa.cjs +1 -0
  222. package/fullstacked_modules/zod/v4/locales/fa.d.cts +2 -1
  223. package/fullstacked_modules/zod/v4/locales/fi.cjs +1 -0
  224. package/fullstacked_modules/zod/v4/locales/fi.d.cts +2 -1
  225. package/fullstacked_modules/zod/v4/locales/fr-CA.cjs +1 -0
  226. package/fullstacked_modules/zod/v4/locales/fr-CA.d.cts +2 -1
  227. package/fullstacked_modules/zod/v4/locales/fr.cjs +1 -0
  228. package/fullstacked_modules/zod/v4/locales/fr.d.cts +2 -1
  229. package/fullstacked_modules/zod/v4/locales/he.cjs +1 -0
  230. package/fullstacked_modules/zod/v4/locales/he.d.cts +2 -1
  231. package/fullstacked_modules/zod/v4/locales/hu.cjs +1 -0
  232. package/fullstacked_modules/zod/v4/locales/hu.d.cts +2 -1
  233. package/fullstacked_modules/zod/v4/locales/id.cjs +1 -0
  234. package/fullstacked_modules/zod/v4/locales/id.d.cts +2 -1
  235. package/fullstacked_modules/zod/v4/locales/index.cjs +17 -1
  236. package/fullstacked_modules/zod/v4/locales/index.d.cts +8 -0
  237. package/fullstacked_modules/zod/v4/locales/index.d.ts +8 -0
  238. package/fullstacked_modules/zod/v4/locales/index.js +8 -0
  239. package/fullstacked_modules/zod/v4/locales/is.cjs +145 -0
  240. package/fullstacked_modules/zod/v4/locales/is.d.cts +5 -0
  241. package/fullstacked_modules/zod/v4/locales/is.d.ts +5 -0
  242. package/fullstacked_modules/zod/v4/locales/is.js +117 -0
  243. package/fullstacked_modules/zod/v4/locales/it.cjs +1 -0
  244. package/fullstacked_modules/zod/v4/locales/it.d.cts +2 -1
  245. package/fullstacked_modules/zod/v4/locales/ja.cjs +1 -0
  246. package/fullstacked_modules/zod/v4/locales/ja.d.cts +2 -1
  247. package/fullstacked_modules/zod/v4/locales/ka.cjs +153 -0
  248. package/fullstacked_modules/zod/v4/locales/ka.d.cts +5 -0
  249. package/fullstacked_modules/zod/v4/locales/ka.d.ts +5 -0
  250. package/fullstacked_modules/zod/v4/locales/ka.js +125 -0
  251. package/fullstacked_modules/zod/v4/locales/kh.cjs +6 -137
  252. package/fullstacked_modules/zod/v4/locales/kh.d.cts +2 -1
  253. package/fullstacked_modules/zod/v4/locales/kh.d.ts +1 -0
  254. package/fullstacked_modules/zod/v4/locales/kh.js +3 -115
  255. package/fullstacked_modules/zod/v4/locales/km.cjs +144 -0
  256. package/fullstacked_modules/zod/v4/locales/km.d.cts +5 -0
  257. package/fullstacked_modules/zod/v4/locales/km.d.ts +4 -0
  258. package/fullstacked_modules/zod/v4/locales/km.js +117 -0
  259. package/fullstacked_modules/zod/v4/locales/ko.cjs +1 -0
  260. package/fullstacked_modules/zod/v4/locales/ko.d.cts +2 -1
  261. package/fullstacked_modules/zod/v4/locales/lt.cjs +258 -0
  262. package/fullstacked_modules/zod/v4/locales/lt.d.cts +5 -0
  263. package/fullstacked_modules/zod/v4/locales/lt.d.ts +5 -0
  264. package/fullstacked_modules/zod/v4/locales/lt.js +230 -0
  265. package/fullstacked_modules/zod/v4/locales/mk.cjs +1 -0
  266. package/fullstacked_modules/zod/v4/locales/mk.d.cts +2 -1
  267. package/fullstacked_modules/zod/v4/locales/ms.cjs +1 -0
  268. package/fullstacked_modules/zod/v4/locales/ms.d.cts +2 -1
  269. package/fullstacked_modules/zod/v4/locales/nl.cjs +1 -0
  270. package/fullstacked_modules/zod/v4/locales/nl.d.cts +2 -1
  271. package/fullstacked_modules/zod/v4/locales/no.cjs +1 -0
  272. package/fullstacked_modules/zod/v4/locales/no.d.cts +2 -1
  273. package/fullstacked_modules/zod/v4/locales/ota.cjs +1 -0
  274. package/fullstacked_modules/zod/v4/locales/ota.d.cts +2 -1
  275. package/fullstacked_modules/zod/v4/locales/package.json +6 -0
  276. package/fullstacked_modules/zod/v4/locales/pl.cjs +1 -0
  277. package/fullstacked_modules/zod/v4/locales/pl.d.cts +2 -1
  278. package/fullstacked_modules/zod/v4/locales/ps.cjs +1 -0
  279. package/fullstacked_modules/zod/v4/locales/ps.d.cts +2 -1
  280. package/fullstacked_modules/zod/v4/locales/pt.cjs +1 -0
  281. package/fullstacked_modules/zod/v4/locales/pt.d.cts +2 -1
  282. package/fullstacked_modules/zod/v4/locales/ru.cjs +1 -0
  283. package/fullstacked_modules/zod/v4/locales/ru.d.cts +2 -1
  284. package/fullstacked_modules/zod/v4/locales/sl.cjs +1 -0
  285. package/fullstacked_modules/zod/v4/locales/sl.d.cts +2 -1
  286. package/fullstacked_modules/zod/v4/locales/sv.cjs +1 -0
  287. package/fullstacked_modules/zod/v4/locales/sv.d.cts +2 -1
  288. package/fullstacked_modules/zod/v4/locales/ta.cjs +1 -0
  289. package/fullstacked_modules/zod/v4/locales/ta.d.cts +2 -1
  290. package/fullstacked_modules/zod/v4/locales/th.cjs +1 -0
  291. package/fullstacked_modules/zod/v4/locales/th.d.cts +2 -1
  292. package/fullstacked_modules/zod/v4/locales/ua.cjs +6 -137
  293. package/fullstacked_modules/zod/v4/locales/ua.d.cts +2 -1
  294. package/fullstacked_modules/zod/v4/locales/ua.d.ts +1 -0
  295. package/fullstacked_modules/zod/v4/locales/ua.js +3 -115
  296. package/fullstacked_modules/zod/v4/locales/uk.cjs +144 -0
  297. package/fullstacked_modules/zod/v4/locales/uk.d.cts +5 -0
  298. package/fullstacked_modules/zod/v4/locales/uk.d.ts +4 -0
  299. package/fullstacked_modules/zod/v4/locales/uk.js +117 -0
  300. package/fullstacked_modules/zod/v4/locales/ur.cjs +1 -0
  301. package/fullstacked_modules/zod/v4/locales/ur.d.cts +2 -1
  302. package/fullstacked_modules/zod/v4/locales/vi.cjs +1 -0
  303. package/fullstacked_modules/zod/v4/locales/vi.d.cts +2 -1
  304. package/fullstacked_modules/zod/v4/locales/yo.cjs +142 -0
  305. package/fullstacked_modules/zod/v4/locales/yo.d.cts +5 -0
  306. package/fullstacked_modules/zod/v4/locales/yo.d.ts +4 -0
  307. package/fullstacked_modules/zod/v4/locales/yo.js +115 -0
  308. package/fullstacked_modules/zod/v4/locales/zh-CN.cjs +1 -0
  309. package/fullstacked_modules/zod/v4/locales/zh-CN.d.cts +2 -1
  310. package/fullstacked_modules/zod/v4/locales/zh-TW.cjs +1 -0
  311. package/fullstacked_modules/zod/v4/locales/zh-TW.d.cts +2 -1
  312. package/fullstacked_modules/zod/v4/mini/external.cjs +2 -2
  313. package/fullstacked_modules/zod/v4/mini/external.d.cts +1 -1
  314. package/fullstacked_modules/zod/v4/mini/external.d.ts +1 -1
  315. package/fullstacked_modules/zod/v4/mini/external.js +1 -1
  316. package/fullstacked_modules/zod/v4/mini/package.json +6 -0
  317. package/fullstacked_modules/zod/v4/mini/parse.cjs +9 -1
  318. package/fullstacked_modules/zod/v4/mini/parse.d.cts +1 -1
  319. package/fullstacked_modules/zod/v4/mini/parse.d.ts +1 -1
  320. package/fullstacked_modules/zod/v4/mini/parse.js +1 -1
  321. package/fullstacked_modules/zod/v4/mini/schemas.cjs +77 -24
  322. package/fullstacked_modules/zod/v4/mini/schemas.d.cts +56 -5
  323. package/fullstacked_modules/zod/v4/mini/schemas.d.ts +56 -5
  324. package/fullstacked_modules/zod/v4/mini/schemas.js +66 -23
  325. package/fullstacked_modules/zod/v4/package.json +6 -0
  326. package/fullstacked_modules/zod/v4-mini/package.json +6 -0
  327. package/index.js +1 -1
  328. package/package.json +1 -1
  329. package/fullstacked_modules/@fullstacked/ai-agent/story.txt +0 -7
  330. package/fullstacked_modules/@fullstacked/ai-agent/summary.txt +0 -7
  331. package/fullstacked_modules/zod/src/v4/core/function.ts +0 -176
  332. package/fullstacked_modules/zod/v4/core/function.cjs +0 -102
  333. package/fullstacked_modules/zod/v4/core/function.d.cts +0 -52
  334. package/fullstacked_modules/zod/v4/core/function.d.ts +0 -52
  335. package/fullstacked_modules/zod/v4/core/function.js +0 -75
@@ -145,3 +145,196 @@ test("partial with mask -- ignore falsy values", async () => {
145
145
  masked.parse({ country: "US" });
146
146
  await masked.parseAsync({ country: "US" });
147
147
  });
148
+
149
+ test("catch/prefault/default", () => {
150
+ const mySchema = z.object({
151
+ a: z.string().catch("catch value").optional(),
152
+ b: z.string().default("default value").optional(),
153
+ c: z.string().prefault("prefault value").optional(),
154
+ d: z.string().catch("catch value"),
155
+ e: z.string().default("default value"),
156
+ f: z.string().prefault("prefault value"),
157
+ });
158
+
159
+ expect(mySchema.parse({})).toMatchInlineSnapshot(`
160
+ {
161
+ "b": "default value",
162
+ "c": "prefault value",
163
+ "d": "catch value",
164
+ "e": "default value",
165
+ "f": "prefault value",
166
+ }
167
+ `);
168
+
169
+ expect(mySchema.parse({}, { jitless: true })).toMatchInlineSnapshot(`
170
+ {
171
+ "b": "default value",
172
+ "c": "prefault value",
173
+ "d": "catch value",
174
+ "e": "default value",
175
+ "f": "prefault value",
176
+ }
177
+ `);
178
+ });
179
+
180
+ test("handleOptionalObjectResult branches", () => {
181
+ const mySchema = z.object({
182
+ // Branch: input[key] === undefined, key not in input, caught error
183
+ caughtMissing: z.string().catch("caught").optional(),
184
+ // Branch: input[key] === undefined, key in input, caught error
185
+ caughtUndefined: z.string().catch("caught").optional(),
186
+ // Branch: input[key] === undefined, key not in input, validation issues
187
+ issueMissing: z.string().min(5).optional(),
188
+ // Branch: input[key] === undefined, key in input, validation issues
189
+ issueUndefined: z.string().min(5).optional(),
190
+ // Branch: input[key] === undefined, validation returns undefined
191
+ validUndefined: z.string().optional(),
192
+ // Branch: input[key] === undefined, non-undefined result (default/transform)
193
+ defaultValue: z.string().default("default").optional(),
194
+ // Branch: input[key] defined, caught error
195
+ caughtDefined: z.string().catch("caught").optional(),
196
+ // Branch: input[key] defined, validation issues
197
+ issueDefined: z.string().min(5).optional(),
198
+ // Branch: input[key] defined, validation returns undefined
199
+ validDefinedUndefined: z
200
+ .string()
201
+ .transform(() => undefined)
202
+ .optional(),
203
+ // Branch: input[key] defined, non-undefined value
204
+ validDefined: z.string().optional(),
205
+ });
206
+
207
+ // Test input[key] === undefined cases
208
+ const result1 = mySchema.parse(
209
+ {
210
+ // caughtMissing: not present (key not in input)
211
+ caughtUndefined: undefined, // key in input
212
+ // issueMissing: not present (key not in input)
213
+ issueUndefined: undefined, // key in input
214
+ validUndefined: undefined,
215
+ // defaultValue: not present, will get default
216
+ },
217
+ { jitless: true }
218
+ );
219
+
220
+ expect(result1).toEqual({
221
+ caughtUndefined: undefined,
222
+ issueUndefined: undefined,
223
+ validUndefined: undefined,
224
+ defaultValue: "default",
225
+ });
226
+
227
+ // Test input[key] defined cases (successful)
228
+ const result2 = mySchema.parse(
229
+ {
230
+ caughtDefined: 123, // invalid type, should catch
231
+ validDefinedUndefined: "test", // transforms to undefined
232
+ validDefined: "valid", // valid value
233
+ },
234
+ { jitless: true }
235
+ );
236
+
237
+ expect(result2).toEqual({
238
+ caughtDefined: "caught",
239
+ validDefinedUndefined: undefined,
240
+ validDefined: "valid",
241
+ defaultValue: "default",
242
+ });
243
+
244
+ // Test validation issues are properly reported (input[key] defined, validation fails)
245
+ expect(() =>
246
+ mySchema.parse(
247
+ {
248
+ issueDefined: "abc", // too short
249
+ },
250
+ { jitless: true }
251
+ )
252
+ ).toThrow();
253
+ });
254
+
255
+ test("fastpass vs non-fastpass consistency", () => {
256
+ const mySchema = z.object({
257
+ caughtMissing: z.string().catch("caught").optional(),
258
+ caughtUndefined: z.string().catch("caught").optional(),
259
+ issueMissing: z.string().min(5).optional(),
260
+ issueUndefined: z.string().min(5).optional(),
261
+ validUndefined: z.string().optional(),
262
+ defaultValue: z.string().default("default").optional(),
263
+ caughtDefined: z.string().catch("caught").optional(),
264
+ validDefinedUndefined: z
265
+ .string()
266
+ .transform(() => undefined)
267
+ .optional(),
268
+ validDefined: z.string().optional(),
269
+ });
270
+
271
+ const input = {
272
+ caughtUndefined: undefined,
273
+ issueUndefined: undefined,
274
+ validUndefined: undefined,
275
+ caughtDefined: 123,
276
+ validDefinedUndefined: "test",
277
+ validDefined: "valid",
278
+ };
279
+
280
+ // Test both paths produce identical results
281
+ const jitlessResult = mySchema.parse(input, { jitless: true });
282
+ const fastpassResult = mySchema.parse(input);
283
+
284
+ expect(jitlessResult).toEqual(fastpassResult);
285
+ expect(jitlessResult).toEqual({
286
+ caughtUndefined: undefined,
287
+ issueUndefined: undefined,
288
+ validUndefined: undefined,
289
+ defaultValue: "default",
290
+ caughtDefined: "caught",
291
+ validDefinedUndefined: undefined,
292
+ validDefined: "valid",
293
+ });
294
+ });
295
+
296
+ test("optional with check", () => {
297
+ const baseSchema = z
298
+ .string()
299
+ .optional()
300
+ .check(({ value, ...ctx }) => {
301
+ ctx.issues.push({
302
+ code: "custom",
303
+ input: value,
304
+ message: "message",
305
+ });
306
+ });
307
+
308
+ // this correctly fails
309
+ expect(baseSchema.safeParse(undefined)).toMatchInlineSnapshot(`
310
+ {
311
+ "error": [ZodError: [
312
+ {
313
+ "code": "custom",
314
+ "message": "message",
315
+ "path": []
316
+ }
317
+ ]],
318
+ "success": false,
319
+ }
320
+ `);
321
+
322
+ const schemaObject = z.object({
323
+ date: baseSchema,
324
+ });
325
+
326
+ expect(schemaObject.safeParse({ date: undefined })).toMatchInlineSnapshot(`
327
+ {
328
+ "error": [ZodError: [
329
+ {
330
+ "code": "custom",
331
+ "message": "message",
332
+ "path": [
333
+ "date"
334
+ ]
335
+ }
336
+ ]],
337
+ "success": false,
338
+ }
339
+ `);
340
+ });
@@ -114,14 +114,14 @@ test("pick/omit/required/partial - do not allow unknown keys", () => {
114
114
  age: z.number(),
115
115
  });
116
116
 
117
- expect(() => schema.pick({ name: true, asdf: true })).toThrow();
117
+ expect(() => schema.pick({ name: true, asdf: true }).safeParse({})).toThrow();
118
118
 
119
119
  // @ts-expect-error
120
- expect(() => schema.pick({ $unknown: true })).toThrow();
120
+ expect(() => schema.pick({ $unknown: true }).safeParse({})).toThrow();
121
121
  // @ts-expect-error
122
- expect(() => schema.omit({ $unknown: true })).toThrow();
122
+ expect(() => schema.omit({ $unknown: true }).safeParse({})).toThrow();
123
123
  // @ts-expect-error
124
- expect(() => schema.required({ $unknown: true })).toThrow();
124
+ expect(() => schema.required({ $unknown: true }).safeParse({})).toThrow();
125
125
  // @ts-expect-error
126
- expect(() => schema.partial({ $unknown: true })).toThrow();
126
+ expect(() => schema.partial({ $unknown: true }).safeParse({})).toThrow();
127
127
  });
@@ -45,11 +45,6 @@ test("continue on non-fatal errors", () => {
45
45
  "code": "custom",
46
46
  "path": [],
47
47
  "message": "A"
48
- },
49
- {
50
- "code": "custom",
51
- "path": [],
52
- "message": "B"
53
48
  }
54
49
  ]],
55
50
  "success": false,
@@ -79,3 +74,28 @@ test("break on fatal errors", () => {
79
74
  }
80
75
  `);
81
76
  });
77
+
78
+ test("reverse parsing with pipe", () => {
79
+ const schema = z.string().pipe(z.string());
80
+
81
+ // Reverse direction: default should NOT be applied
82
+ expect(z.safeDecode(schema, "asdf")).toMatchInlineSnapshot(`
83
+ {
84
+ "data": "asdf",
85
+ "success": true,
86
+ }
87
+ `);
88
+ expect(z.safeEncode(schema, "asdf")).toMatchInlineSnapshot(`
89
+ {
90
+ "data": "asdf",
91
+ "success": true,
92
+ }
93
+ `);
94
+ });
95
+
96
+ test("reverse parsing with pipe", () => {
97
+ const schema = z.string().transform((val) => val.length);
98
+
99
+ // should throw
100
+ expect(() => z.encode(schema, 1234)).toThrow();
101
+ });
@@ -35,3 +35,40 @@ test("prefault inside object", () => {
35
35
  email: string;
36
36
  }>();
37
37
  });
38
+
39
+ test("object schema with prefault should return shallow clone", () => {
40
+ const schema = z
41
+ .object({
42
+ a: z.string(),
43
+ })
44
+ .default({ a: "x" });
45
+ const result1 = schema.parse(undefined);
46
+ const result2 = schema.parse(undefined);
47
+ expect(result1).not.toBe(result2);
48
+ expect(result1).toEqual(result2);
49
+ });
50
+
51
+ test("direction-aware prefault", () => {
52
+ const schema = z.string().prefault("hello");
53
+
54
+ // Forward direction (regular parse): prefault should be applied
55
+ expect(schema.parse(undefined)).toBe("hello");
56
+
57
+ // Reverse direction (encode): prefault should NOT be applied, undefined should fail validation
58
+ expect(z.safeEncode(schema, undefined as any)).toMatchInlineSnapshot(`
59
+ {
60
+ "error": [ZodError: [
61
+ {
62
+ "expected": "string",
63
+ "code": "invalid_type",
64
+ "path": [],
65
+ "message": "Invalid input: expected string, received undefined"
66
+ }
67
+ ]],
68
+ "success": false,
69
+ }
70
+ `);
71
+
72
+ // But valid values should still work in reverse
73
+ expect(z.encode(schema, "world")).toBe("world");
74
+ });
@@ -73,17 +73,18 @@ test("preprocess ctx.addIssue with parse", () => {
73
73
  `);
74
74
  });
75
75
 
76
- test("preprocess ctx.addIssue non-fatal by default", () => {
76
+ test("preprocess ctx.addIssue fatal by default", () => {
77
77
  const schema = z.preprocess((data, ctx) => {
78
78
  ctx.addIssue({
79
79
  code: "custom",
80
80
  message: `custom error`,
81
81
  });
82
+
82
83
  return data;
83
84
  }, z.string());
84
85
  const result = schema.safeParse(1234);
85
86
 
86
- expect(result.error!.issues).toHaveLength(2);
87
+ expect(result.error!.issues).toHaveLength(1);
87
88
  expect(result).toMatchInlineSnapshot(`
88
89
  {
89
90
  "error": [ZodError: [
@@ -91,12 +92,6 @@ test("preprocess ctx.addIssue non-fatal by default", () => {
91
92
  "code": "custom",
92
93
  "message": "custom error",
93
94
  "path": []
94
- },
95
- {
96
- "expected": "string",
97
- "code": "invalid_type",
98
- "path": [],
99
- "message": "Invalid input: expected string, received number"
100
95
  }
101
96
  ]],
102
97
  "success": false,
@@ -175,7 +170,7 @@ test("z.NEVER in preprocess", () => {
175
170
  expectTypeOf<foo>().toEqualTypeOf<number>();
176
171
  const result = foo.safeParse(undefined);
177
172
 
178
- expect(result.error!.issues).toHaveLength(2);
173
+ expect(result.error!.issues).toHaveLength(1);
179
174
  expect(result).toMatchInlineSnapshot(`
180
175
  {
181
176
  "error": [ZodError: [
@@ -183,12 +178,6 @@ test("z.NEVER in preprocess", () => {
183
178
  "code": "custom",
184
179
  "message": "bad",
185
180
  "path": []
186
- },
187
- {
188
- "expected": "number",
189
- "code": "invalid_type",
190
- "path": [],
191
- "message": "Invalid input: expected number, received object"
192
181
  }
193
182
  ]],
194
183
  "success": false,
@@ -280,14 +269,9 @@ test("perform transform with non-fatal issues", () => {
280
269
  .transform((val) => val.length)
281
270
  .pipe(z.number())
282
271
  .refine((_) => false);
283
- expect(A.safeParse("asdfasdf").error!.issues).toHaveLength(2);
272
+ expect(A.safeParse("asdfasdf").error!.issues).toHaveLength(1);
284
273
  expect(A.safeParse("asdfasdf").error).toMatchInlineSnapshot(`
285
274
  [ZodError: [
286
- {
287
- "code": "custom",
288
- "path": [],
289
- "message": "Invalid input"
290
- },
291
275
  {
292
276
  "code": "custom",
293
277
  "path": [],
@@ -336,7 +336,21 @@ test("partial record", () => {
336
336
  type schema = z.infer<typeof schema>;
337
337
  expectTypeOf<schema>().toEqualTypeOf<Partial<Record<string, string>>>();
338
338
 
339
- const Keys = z.enum(["id", "name", "email"]).or(z.never());
339
+ const Keys = z.enum(["id", "name", "email"]); //.or(z.never());
340
340
  const Person = z.partialRecord(Keys, z.string());
341
341
  expectTypeOf<z.infer<typeof Person>>().toEqualTypeOf<Partial<Record<"id" | "name" | "email", string>>>();
342
+
343
+ Person.parse({
344
+ id: "123",
345
+ // name: "John",
346
+ // email: "john@example.com",
347
+ });
348
+
349
+ Person.parse({
350
+ // id: "123",
351
+ // name: "John",
352
+ email: "john@example.com",
353
+ });
354
+
355
+ expect(Person.def.keyType._zod.def.type).toEqual("enum");
342
356
  });
@@ -260,6 +260,127 @@ test("mutual recursion with meta", () => {
260
260
  expectTypeOf<B>().toEqualTypeOf<_B>();
261
261
  });
262
262
 
263
+ test("intersection with recursive types", () => {
264
+ const A = z.discriminatedUnion("type", [
265
+ z.object({
266
+ type: z.literal("CONTAINER"),
267
+ }),
268
+ z.object({
269
+ type: z.literal("SCREEN"),
270
+ config: z.object({ x: z.number(), y: z.number() }),
271
+ }),
272
+ ]);
273
+ // type A = z.infer<typeof A>;
274
+
275
+ const B = z.object({
276
+ get children() {
277
+ return z.array(C).optional();
278
+ },
279
+ });
280
+ // type B = z.infer<typeof B>;
281
+
282
+ const C = z.intersection(A, B);
283
+ type C = z.infer<typeof C>;
284
+
285
+ type _C = (
286
+ | {
287
+ type: "CONTAINER";
288
+ }
289
+ | {
290
+ type: "SCREEN";
291
+ config: {
292
+ x: number;
293
+ y: number;
294
+ };
295
+ }
296
+ ) & {
297
+ children?: _C[] | undefined;
298
+ };
299
+ expectTypeOf<C>().toEqualTypeOf<_C>();
300
+ });
301
+
302
+ test("object utilities with recursive types", () => {
303
+ const NodeBase = z.object({
304
+ id: z.string(),
305
+ name: z.string(),
306
+ get children() {
307
+ return z.array(Node).optional();
308
+ },
309
+ });
310
+
311
+ // Test extend
312
+ const NodeOne = NodeBase.extend({
313
+ name: z.literal("nodeOne"),
314
+ get children() {
315
+ return z.array(Node);
316
+ },
317
+ });
318
+
319
+ const NodeTwo = NodeBase.extend({
320
+ name: z.literal("nodeTwo"),
321
+ get children() {
322
+ return z.array(Node);
323
+ },
324
+ });
325
+
326
+ // Test pick
327
+ const PickedNode = NodeBase.pick({ id: true, name: true });
328
+
329
+ // Test omit
330
+ const OmittedNode = NodeBase.omit({ children: true });
331
+
332
+ // Test merge
333
+ const ExtraProps = {
334
+ metadata: z.string(),
335
+ get parent() {
336
+ return Node.optional();
337
+ },
338
+ };
339
+ const MergedNode = NodeBase.extend(ExtraProps);
340
+
341
+ // Test partial
342
+ const PartialNode = NodeBase.partial();
343
+ const PartialMaskedNode = NodeBase.partial({ name: true });
344
+
345
+ // Test required (assuming NodeBase has optional fields)
346
+ const OptionalNodeBase = z.object({
347
+ id: z.string().optional(),
348
+ name: z.string().optional(),
349
+ get children() {
350
+ return z.array(Node).optional();
351
+ },
352
+ });
353
+ const RequiredNode = OptionalNodeBase.required();
354
+ const RequiredMaskedNode = OptionalNodeBase.required({ id: true });
355
+
356
+ const Node = z.union([
357
+ NodeOne,
358
+ NodeTwo,
359
+ PickedNode,
360
+ OmittedNode,
361
+ MergedNode,
362
+ PartialNode,
363
+ PartialMaskedNode,
364
+ RequiredNode,
365
+ RequiredMaskedNode,
366
+ ]);
367
+ });
368
+
369
+ test("tuple with recursive types", () => {
370
+ const TaskListNodeSchema = z.strictObject({
371
+ type: z.literal("taskList"),
372
+ get content() {
373
+ return z.array(z.tuple([TaskListNodeSchema, z.union([TaskListNodeSchema])])).min(1);
374
+ },
375
+ });
376
+ type TaskListNodeSchema = z.infer<typeof TaskListNodeSchema>;
377
+ type _TaskListNodeSchema = {
378
+ type: "taskList";
379
+ content: [_TaskListNodeSchema, _TaskListNodeSchema][];
380
+ };
381
+ expectTypeOf<TaskListNodeSchema>().toEqualTypeOf<_TaskListNodeSchema>();
382
+ });
383
+
263
384
  test("recursion compatibility", () => {
264
385
  // array
265
386
  const A = z.object({
@@ -325,6 +446,68 @@ test("recursion compatibility", () => {
325
446
  });
326
447
  });
327
448
 
449
+ test("recursive object with .check()", () => {
450
+ const Category = z
451
+ .object({
452
+ id: z.string(),
453
+ name: z.string(),
454
+ get subcategories() {
455
+ return z.array(Category).optional();
456
+ },
457
+ })
458
+ .check((ctx) => {
459
+ // Check for duplicate IDs among direct subcategories
460
+ if (ctx.value.subcategories) {
461
+ const siblingIds = new Set<string>();
462
+ ctx.value.subcategories.forEach((sub, index) => {
463
+ if (siblingIds.has(sub.id)) {
464
+ ctx.issues.push({
465
+ code: "custom",
466
+ message: `Duplicate sibling ID found: ${sub.id}`,
467
+ path: ["subcategories", index, "id"],
468
+ input: ctx.value,
469
+ });
470
+ }
471
+ siblingIds.add(sub.id);
472
+ });
473
+ }
474
+ });
475
+
476
+ // Valid - siblings have unique IDs
477
+ const validData = {
478
+ id: "electronics",
479
+ name: "Electronics",
480
+ subcategories: [
481
+ {
482
+ id: "computers",
483
+ name: "Computers",
484
+ subcategories: [
485
+ { id: "laptops", name: "Laptops" },
486
+ { id: "desktops", name: "Desktops" },
487
+ ],
488
+ },
489
+ {
490
+ id: "phones",
491
+ name: "Phones",
492
+ },
493
+ ],
494
+ };
495
+
496
+ // Invalid - duplicate sibling IDs
497
+ const invalidData = {
498
+ id: "electronics",
499
+ name: "Electronics",
500
+ subcategories: [
501
+ { id: "computers", name: "Computers" },
502
+ { id: "phones", name: "Phones" },
503
+ { id: "computers", name: "Computers Again" }, // Duplicate at index 2
504
+ ],
505
+ };
506
+
507
+ expect(() => Category.parse(validData)).not.toThrow();
508
+ expect(() => Category.parse(invalidData)).toThrow();
509
+ });
510
+
328
511
  // biome-ignore lint: sadf
329
512
  export type RecursiveA = z.ZodUnion<
330
513
  [
@@ -354,3 +537,46 @@ export type RecursiveA = z.ZodUnion<
354
537
  }>,
355
538
  ]
356
539
  >;
540
+
541
+ test("recursive type with `id` meta", () => {
542
+ const AType = z.object({
543
+ type: z.literal("a"),
544
+ name: z.string(),
545
+ });
546
+
547
+ const BType = z.object({
548
+ type: z.literal("b"),
549
+ name: z.string(),
550
+ });
551
+
552
+ const CType = z.object({
553
+ type: z.literal("c"),
554
+ name: z.string(),
555
+ });
556
+
557
+ const Schema = z.object({
558
+ type: z.literal("special").meta({ description: "Type" }),
559
+ config: z.object({
560
+ title: z.string().meta({ description: "Title" }),
561
+ get elements() {
562
+ return z.array(z.discriminatedUnion("type", [AType, BType, CType])).meta({
563
+ id: "SpecialElements",
564
+ title: "SpecialElements",
565
+ description: "Array of elements",
566
+ });
567
+ },
568
+ }),
569
+ });
570
+
571
+ Schema.parse({
572
+ type: "special",
573
+ config: {
574
+ title: "Special",
575
+ elements: [
576
+ { type: "a", name: "John" },
577
+ { type: "b", name: "Jane" },
578
+ { type: "c", name: "Jim" },
579
+ ],
580
+ },
581
+ });
582
+ });