fullstacked 0.12.1-1359 → 0.12.1-1366

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
@@ -0,0 +1,573 @@
1
+ import { expect, test } from "vitest";
2
+ import * as z from "zod/v4";
3
+
4
+ // ============================================================================
5
+ // stringToNumber
6
+ // ============================================================================
7
+
8
+ const stringToNumber = () =>
9
+ z.codec(z.string(), z.number(), {
10
+ decode: (str) => Number.parseFloat(str),
11
+ encode: (num) => num.toString(),
12
+ });
13
+
14
+ test("stringToNumber codec", () => {
15
+ const codec = stringToNumber();
16
+
17
+ // Test decode
18
+ expect(z.decode(codec, "42.5")).toBe(42.5);
19
+ expect(z.decode(codec, "0")).toBe(0);
20
+ expect(z.decode(codec, "-123.456")).toBe(-123.456);
21
+
22
+ // Test encode
23
+ expect(z.encode(codec, 42.5)).toBe("42.5");
24
+ expect(z.encode(codec, 0)).toBe("0");
25
+ expect(z.encode(codec, -123.456)).toBe("-123.456");
26
+
27
+ // Test round trip
28
+ const original = "3.14159";
29
+ const roundTrip = z.encode(codec, z.decode(codec, original));
30
+ expect(roundTrip).toBe("3.14159");
31
+ });
32
+
33
+ // ============================================================================
34
+ // stringToInt
35
+ // ============================================================================
36
+
37
+ const stringToInt = () =>
38
+ z.codec(z.string(), z.int(), {
39
+ decode: (str) => Number.parseInt(str, 10),
40
+ encode: (num) => num.toString(),
41
+ });
42
+
43
+ test("stringToInt codec", () => {
44
+ const codec = stringToInt();
45
+
46
+ // Test decode
47
+ expect(z.decode(codec, "42")).toBe(42);
48
+ expect(z.decode(codec, "0")).toBe(0);
49
+ expect(z.decode(codec, "-123")).toBe(-123);
50
+
51
+ // Test encode
52
+ expect(z.encode(codec, 42)).toBe("42");
53
+ expect(z.encode(codec, 0)).toBe("0");
54
+ expect(z.encode(codec, -123)).toBe("-123");
55
+
56
+ // Test round trip
57
+ const original = "999";
58
+ const roundTrip = z.encode(codec, z.decode(codec, original));
59
+ expect(roundTrip).toBe("999");
60
+ });
61
+
62
+ // ============================================================================
63
+ // stringToBigInt
64
+ // ============================================================================
65
+
66
+ const stringToBigInt = () =>
67
+ z.codec(z.string(), z.bigint(), {
68
+ decode: (str) => BigInt(str),
69
+ encode: (bigint) => bigint.toString(),
70
+ });
71
+
72
+ test("stringToBigInt codec", () => {
73
+ const codec = stringToBigInt();
74
+
75
+ // Test decode
76
+ expect(z.decode(codec, "123456789012345678901234567890")).toBe(123456789012345678901234567890n);
77
+ expect(z.decode(codec, "0")).toBe(0n);
78
+ expect(z.decode(codec, "-999")).toBe(-999n);
79
+
80
+ // Test encode
81
+ expect(z.encode(codec, 123456789012345678901234567890n)).toBe("123456789012345678901234567890");
82
+ expect(z.encode(codec, 0n)).toBe("0");
83
+ expect(z.encode(codec, -999n)).toBe("-999");
84
+
85
+ // Test round trip
86
+ const original = "987654321098765432109876543210";
87
+ const roundTrip = z.encode(codec, z.decode(codec, original));
88
+ expect(roundTrip).toBe("987654321098765432109876543210");
89
+ });
90
+
91
+ // ============================================================================
92
+ // numberToBigInt
93
+ // ============================================================================
94
+
95
+ const numberToBigInt = () =>
96
+ z.codec(z.int(), z.bigint(), {
97
+ decode: (num) => BigInt(num),
98
+ encode: (bigint) => Number(bigint),
99
+ });
100
+
101
+ test("numberToBigInt codec", () => {
102
+ const codec = numberToBigInt();
103
+
104
+ // Test decode
105
+ expect(z.decode(codec, 42)).toBe(42n);
106
+ expect(z.decode(codec, 0)).toBe(0n);
107
+ expect(z.decode(codec, -123)).toBe(-123n);
108
+
109
+ // Test encode
110
+ expect(z.encode(codec, 42n)).toBe(42);
111
+ expect(z.encode(codec, 0n)).toBe(0);
112
+ expect(z.encode(codec, -123n)).toBe(-123);
113
+
114
+ // Test round trip
115
+ const original = 999;
116
+ const roundTrip = z.encode(codec, z.decode(codec, original));
117
+ expect(roundTrip).toBe(999);
118
+ });
119
+
120
+ // ============================================================================
121
+ // isoDatetimeToDate
122
+ // ============================================================================
123
+
124
+ const isoDatetimeToDate = () =>
125
+ z.codec(z.iso.datetime(), z.date(), {
126
+ decode: (isoString) => new Date(isoString),
127
+ encode: (date) => date.toISOString(),
128
+ });
129
+
130
+ test("isoDatetimeToDate codec", () => {
131
+ const codec = isoDatetimeToDate();
132
+
133
+ // Test decode
134
+ const decoded = z.decode(codec, "2024-01-15T10:30:00.000Z");
135
+ expect(decoded).toBeInstanceOf(Date);
136
+ expect(decoded.getTime()).toBe(1705314600000);
137
+
138
+ // Test encode
139
+ const date = new Date("2024-01-15T10:30:00.000Z");
140
+ expect(z.encode(codec, date)).toBe("2024-01-15T10:30:00.000Z");
141
+
142
+ // Test round trip
143
+ const original = "2024-12-25T15:45:30.123Z";
144
+ const roundTrip = z.encode(codec, z.decode(codec, original));
145
+ expect(roundTrip).toBe("2024-12-25T15:45:30.123Z");
146
+ });
147
+
148
+ // ============================================================================
149
+ // epochSecondsToDate
150
+ // ============================================================================
151
+
152
+ const epochSecondsToDate = () =>
153
+ z.codec(z.int().min(0), z.date(), {
154
+ decode: (seconds) => new Date(seconds * 1000),
155
+ encode: (date) => Math.floor(date.getTime() / 1000),
156
+ });
157
+
158
+ test("epochSecondsToDate codec", () => {
159
+ const codec = epochSecondsToDate();
160
+
161
+ // Test decode
162
+ const decoded = z.decode(codec, 1705314600);
163
+ expect(decoded).toBeInstanceOf(Date);
164
+ expect(decoded.getTime()).toBe(1705314600000);
165
+
166
+ // Test encode
167
+ const date = new Date(1705314600000);
168
+ expect(z.encode(codec, date)).toBe(1705314600);
169
+
170
+ // Test round trip
171
+ const original = 1640995200; // 2022-01-01 00:00:00 UTC
172
+ const roundTrip = z.encode(codec, z.decode(codec, original));
173
+ expect(roundTrip).toBe(1640995200);
174
+ });
175
+
176
+ // ============================================================================
177
+ // epochMillisToDate
178
+ // ============================================================================
179
+
180
+ const epochMillisToDate = () =>
181
+ z.codec(z.int().min(0), z.date(), {
182
+ decode: (millis) => new Date(millis),
183
+ encode: (date) => date.getTime(),
184
+ });
185
+
186
+ test("epochMillisToDate codec", () => {
187
+ const codec = epochMillisToDate();
188
+
189
+ // Test decode
190
+ const decoded = z.decode(codec, 1705314600000);
191
+ expect(decoded).toBeInstanceOf(Date);
192
+ expect(decoded.getTime()).toBe(1705314600000);
193
+
194
+ // Test encode
195
+ const date = new Date(1705314600000);
196
+ expect(z.encode(codec, date)).toBe(1705314600000);
197
+
198
+ // Test round trip
199
+ const original = 1640995200123; // 2022-01-01 00:00:00.123 UTC
200
+ const roundTrip = z.encode(codec, z.decode(codec, original));
201
+ expect(roundTrip).toBe(1640995200123);
202
+ });
203
+
204
+ // ============================================================================
205
+ // json
206
+ // ============================================================================
207
+
208
+ const jsonCodec = <T extends z.core.$ZodType>(schema: T) =>
209
+ z.codec(z.string(), schema, {
210
+ decode: (jsonString, ctx) => {
211
+ try {
212
+ return JSON.parse(jsonString);
213
+ } catch (err: any) {
214
+ ctx.issues.push({
215
+ code: "invalid_format",
216
+ format: "json",
217
+ input: jsonString,
218
+ message: err.message,
219
+ });
220
+ return z.NEVER;
221
+ }
222
+ },
223
+ encode: (value) => JSON.stringify(value),
224
+ });
225
+
226
+ test("json codec", () => {
227
+ const codec = jsonCodec(z.object({ name: z.string(), age: z.number() }));
228
+
229
+ // Test decode
230
+ const decoded = z.decode(codec, '{"name":"Alice","age":30}');
231
+ expect(decoded).toEqual({ name: "Alice", age: 30 });
232
+
233
+ // Test encode
234
+ const encoded = z.encode(codec, { name: "Bob", age: 25 });
235
+ expect(encoded).toBe('{"name":"Bob","age":25}');
236
+
237
+ // Test round trip
238
+ const original = '{"name":"Charlie","age":35}';
239
+ const parsed = z.decode(codec, original);
240
+ const roundTrip = z.encode(codec, parsed);
241
+ expect(JSON.parse(roundTrip)).toEqual(JSON.parse(original));
242
+ });
243
+
244
+ // ============================================================================
245
+ // utf8ToBytes
246
+ // ============================================================================
247
+
248
+ const utf8ToBytes = () =>
249
+ z.codec(z.string(), z.instanceof(Uint8Array), {
250
+ decode: (str) => new TextEncoder().encode(str),
251
+ encode: (bytes) => new TextDecoder().decode(bytes),
252
+ });
253
+
254
+ test("utf8ToBytes codec", () => {
255
+ const codec = utf8ToBytes();
256
+
257
+ // Test decode
258
+ const decoded = z.decode(codec, "Hello, 世界!");
259
+ expect(decoded).toBeInstanceOf(Uint8Array);
260
+ expect(Array.from(decoded)).toEqual([72, 101, 108, 108, 111, 44, 32, 228, 184, 150, 231, 149, 140, 33]);
261
+
262
+ // Test encode
263
+ const bytes = new Uint8Array([72, 101, 108, 108, 111]);
264
+ expect(z.encode(codec, bytes)).toBe("Hello");
265
+
266
+ // Test round trip
267
+ const original = "Hello, 世界! 🚀";
268
+ const roundTrip = z.encode(codec, z.decode(codec, original));
269
+ expect(roundTrip).toBe(original);
270
+ });
271
+
272
+ // ============================================================================
273
+ // bytesToUtf8
274
+ // ============================================================================
275
+
276
+ const bytesToUtf8 = () =>
277
+ z.codec(z.instanceof(Uint8Array), z.string(), {
278
+ decode: (bytes) => new TextDecoder().decode(bytes),
279
+ encode: (str) => new TextEncoder().encode(str),
280
+ });
281
+
282
+ test("bytesToUtf8 codec", () => {
283
+ const codec = bytesToUtf8();
284
+
285
+ // Test decode
286
+ const bytes = new Uint8Array([72, 101, 108, 108, 111]);
287
+ const decoded = z.decode(codec, bytes);
288
+ expect(decoded).toBe("Hello");
289
+
290
+ // Test encode
291
+ const encoded = z.encode(codec, "Hello, 世界!");
292
+ expect(encoded).toBeInstanceOf(Uint8Array);
293
+ expect(Array.from(encoded)).toEqual([72, 101, 108, 108, 111, 44, 32, 228, 184, 150, 231, 149, 140, 33]);
294
+
295
+ // Test round trip
296
+ const original = new Uint8Array([72, 101, 108, 108, 111, 44, 32, 228, 184, 150, 231, 149, 140, 33]);
297
+ const roundTrip = z.encode(codec, z.decode(codec, original));
298
+ expect(roundTrip).toEqual(original);
299
+ });
300
+
301
+ // ============================================================================
302
+ // base64
303
+ // ============================================================================
304
+
305
+ const base64 = () =>
306
+ z.codec(z.base64(), z.instanceof(Uint8Array), {
307
+ decode: (base64String) => z.util.base64ToUint8Array(base64String),
308
+ encode: (bytes) => z.util.uint8ArrayToBase64(bytes),
309
+ });
310
+
311
+ test("base64 codec", () => {
312
+ const codec = base64();
313
+
314
+ // Test decode
315
+ const decoded = z.decode(codec, "SGVsbG8=");
316
+ expect(decoded).toBeInstanceOf(Uint8Array);
317
+ expect(Array.from(decoded)).toEqual([72, 101, 108, 108, 111]);
318
+
319
+ // Test encode
320
+ const bytes = new Uint8Array([72, 101, 108, 108, 111]);
321
+ expect(z.encode(codec, bytes)).toBe("SGVsbG8=");
322
+
323
+ // Test round trip
324
+ const original = "SGVsbG8gV29ybGQh";
325
+ const roundTrip = z.encode(codec, z.decode(codec, original));
326
+ expect(roundTrip).toBe(original);
327
+ });
328
+
329
+ // ============================================================================
330
+ // base64urlToBytes
331
+ // ============================================================================
332
+
333
+ const base64urlToBytes = () =>
334
+ z.codec(z.base64url(), z.instanceof(Uint8Array), {
335
+ decode: (base64urlString) => z.util.base64urlToUint8Array(base64urlString),
336
+ encode: (bytes) => z.util.uint8ArrayToBase64url(bytes),
337
+ });
338
+
339
+ test("base64urlToBytes codec", () => {
340
+ const codec = base64urlToBytes();
341
+
342
+ // Test decode
343
+ const decoded = z.decode(codec, "SGVsbG8");
344
+ expect(decoded).toBeInstanceOf(Uint8Array);
345
+ expect(Array.from(decoded)).toEqual([72, 101, 108, 108, 111]);
346
+
347
+ // Test encode
348
+ const bytes = new Uint8Array([72, 101, 108, 108, 111]);
349
+ expect(z.encode(codec, bytes)).toBe("SGVsbG8");
350
+
351
+ // Test round trip with padding case
352
+ const original = "SGVsbG9Xb3JsZA";
353
+ const roundTrip = z.encode(codec, z.decode(codec, original));
354
+ expect(roundTrip).toBe(original);
355
+ });
356
+
357
+ // ============================================================================
358
+ // hexToBytes
359
+ // ============================================================================
360
+
361
+ const hexToBytes = () =>
362
+ z.codec(z.hex(), z.instanceof(Uint8Array), {
363
+ decode: (hexString) => z.util.hexToUint8Array(hexString),
364
+ encode: (bytes) => z.util.uint8ArrayToHex(bytes),
365
+ });
366
+
367
+ test("hexToBytes codec", () => {
368
+ const codec = hexToBytes();
369
+
370
+ // Test decode
371
+ const decoded = z.decode(codec, "48656c6c6f");
372
+ expect(decoded).toBeInstanceOf(Uint8Array);
373
+ expect(Array.from(decoded)).toEqual([72, 101, 108, 108, 111]);
374
+
375
+ // Note: z.hex() doesn't accept 0x prefix, but our utility function can handle it
376
+ // const decodedWithPrefix = z.decode(codec, "0x48656c6c6f");
377
+ // expect(Array.from(decodedWithPrefix)).toEqual([72, 101, 108, 108, 111]);
378
+
379
+ // Test encode
380
+ const bytes = new Uint8Array([72, 101, 108, 108, 111]);
381
+ expect(z.encode(codec, bytes)).toBe("48656c6c6f");
382
+
383
+ // Test round trip
384
+ const original = "deadbeef";
385
+ const roundTrip = z.encode(codec, z.decode(codec, original));
386
+ expect(roundTrip).toBe("deadbeef");
387
+ });
388
+
389
+ // ============================================================================
390
+ // stringToURL
391
+ // ============================================================================
392
+
393
+ const stringToURL = () =>
394
+ z.codec(z.url(), z.instanceof(URL), {
395
+ decode: (urlString) => new URL(urlString),
396
+ encode: (url) => url.href,
397
+ });
398
+
399
+ test("stringToURL codec", () => {
400
+ const codec = stringToURL();
401
+
402
+ // Test decode
403
+ const decoded = z.decode(codec, "https://example.com/path?query=value");
404
+ expect(decoded).toBeInstanceOf(URL);
405
+ expect(decoded.hostname).toBe("example.com");
406
+ expect(decoded.pathname).toBe("/path");
407
+ expect(decoded.search).toBe("?query=value");
408
+
409
+ // Test encode
410
+ const url = new URL("https://example.com/path?query=value");
411
+ expect(z.encode(codec, url)).toBe("https://example.com/path?query=value");
412
+
413
+ // Test round trip
414
+ const original = "https://test.com/api/v1?foo=bar&baz=qux";
415
+ const roundTrip = z.encode(codec, z.decode(codec, original));
416
+ expect(roundTrip).toBe(original);
417
+ });
418
+
419
+ // ============================================================================
420
+ // stringToHttpURL
421
+ // ============================================================================
422
+
423
+ const stringToHttpURL = () =>
424
+ z.codec(z.httpUrl(), z.instanceof(URL), {
425
+ decode: (urlString) => new URL(urlString),
426
+ encode: (url) => url.href,
427
+ });
428
+
429
+ test("stringToHttpURL codec", () => {
430
+ const codec = stringToHttpURL();
431
+
432
+ // Test decode HTTPS
433
+ const decodedHttps = z.decode(codec, "https://example.com/path");
434
+ expect(decodedHttps).toBeInstanceOf(URL);
435
+ expect(decodedHttps.protocol).toBe("https:");
436
+
437
+ // Test decode HTTP
438
+ const decodedHttp = z.decode(codec, "http://example.com/path");
439
+ expect(decodedHttp).toBeInstanceOf(URL);
440
+ expect(decodedHttp.protocol).toBe("http:");
441
+
442
+ // Test encode
443
+ const url = new URL("https://example.com/path");
444
+ expect(z.encode(codec, url)).toBe("https://example.com/path");
445
+
446
+ // Test round trip
447
+ const original = "http://api.example.com/v1/users";
448
+ const roundTrip = z.encode(codec, z.decode(codec, original));
449
+ expect(roundTrip).toBe(original);
450
+ });
451
+
452
+ // ============================================================================
453
+ // uriComponent
454
+ // ============================================================================
455
+
456
+ const uriComponent = () =>
457
+ z.codec(z.string(), z.string(), {
458
+ decode: (encodedString) => decodeURIComponent(encodedString),
459
+ encode: (decodedString) => encodeURIComponent(decodedString),
460
+ });
461
+
462
+ test("uriComponent codec", () => {
463
+ const codec = uriComponent();
464
+
465
+ // Test decode
466
+ const decoded = z.decode(codec, "Hello%20World%21");
467
+ expect(decoded).toBe("Hello World!");
468
+
469
+ // Test encode
470
+ const encoded = z.encode(codec, "Hello World!");
471
+ expect(encoded).toBe("Hello%20World!");
472
+
473
+ // Test round trip
474
+ const original = "Hello%20World%21%20%26%20More";
475
+ const roundTrip = z.encode(codec, z.decode(codec, original));
476
+ expect(roundTrip).toBe("Hello%20World!%20%26%20More");
477
+
478
+ // Test complex characters
479
+ const complex = "café & résumé";
480
+ const encodedComplex = z.encode(codec, complex);
481
+ const decodedComplex = z.decode(codec, encodedComplex);
482
+ expect(decodedComplex).toBe(complex);
483
+ });
484
+
485
+ // ============================================================================
486
+ // stringToBoolean
487
+ // ============================================================================
488
+
489
+ const stringToBoolean = (options?: { truthy?: string[]; falsy?: string[] }) => z.stringbool(options);
490
+
491
+ test("stringToBoolean codec", () => {
492
+ const codec = stringToBoolean();
493
+
494
+ // Test decode - default truthy values
495
+ expect(z.decode(codec, "true")).toBe(true);
496
+ expect(z.decode(codec, "yes")).toBe(true);
497
+ expect(z.decode(codec, "1")).toBe(true);
498
+
499
+ // Test decode - default falsy values
500
+ expect(z.decode(codec, "false")).toBe(false);
501
+ expect(z.decode(codec, "no")).toBe(false);
502
+ expect(z.decode(codec, "0")).toBe(false);
503
+
504
+ // Test encode - default behavior
505
+ expect(z.encode(codec, true)).toBe("true");
506
+ expect(z.encode(codec, false)).toBe("false");
507
+
508
+ // Test custom options
509
+ const customCodec = stringToBoolean({ truthy: ["yes", "y"], falsy: ["no", "n"] });
510
+ expect(z.decode(customCodec, "yes")).toBe(true);
511
+ expect(z.decode(customCodec, "y")).toBe(true);
512
+ expect(z.decode(customCodec, "no")).toBe(false);
513
+ expect(z.decode(customCodec, "n")).toBe(false);
514
+ expect(z.encode(customCodec, true)).toBe("yes");
515
+ expect(z.encode(customCodec, false)).toBe("no");
516
+ });
517
+
518
+ // ============================================================================
519
+ // Error Handling Tests
520
+ // ============================================================================
521
+
522
+ // Test error cases - these test input validation, not transform errors
523
+ test("codec input validation", () => {
524
+ // Test invalid base64 format
525
+ const base64Codec = base64();
526
+ const invalidBase64Result = z.safeDecode(base64Codec, "invalid!@#");
527
+ expect(invalidBase64Result.success).toBe(false);
528
+
529
+ // Test invalid hex format
530
+ const hexCodec = hexToBytes();
531
+ const invalidHexResult = z.safeDecode(hexCodec, "gg");
532
+ expect(invalidHexResult.success).toBe(false);
533
+
534
+ // Test invalid URL format
535
+ const urlCodec = stringToURL();
536
+ const invalidUrlResult = z.safeDecode(urlCodec, "not a url");
537
+ expect(invalidUrlResult.success).toBe(false);
538
+
539
+ // Test invalid HTTP URL format
540
+ const httpUrlCodec = stringToHttpURL();
541
+ const invalidHttpResult = z.safeDecode(httpUrlCodec, "ftp://example.com");
542
+ expect(invalidHttpResult.success).toBe(false);
543
+ });
544
+
545
+ // Test transform errors - these test errors added by transform functions
546
+ test("codec transform error handling", () => {
547
+ // JSON codec that can fail during transform
548
+ const anyJSON = jsonCodec(z.json());
549
+
550
+ // Test successful JSON parsing
551
+ const validResult = z.safeDecode(anyJSON, '{"valid": "json"}');
552
+ expect(validResult.success).toBe(true);
553
+ if (validResult.success) {
554
+ expect(validResult.data).toEqual({ valid: "json" });
555
+ }
556
+
557
+ // Test invalid JSON that should create a single "invalid_format" issue
558
+ // Verifies that the transform error aborts before reaching the output schema
559
+ const invalidResult = z.safeDecode(anyJSON, '{"invalid":,}');
560
+ expect(invalidResult.success).toBe(false);
561
+ if (!invalidResult.success) {
562
+ expect(invalidResult.error.issues).toMatchInlineSnapshot(`
563
+ [
564
+ {
565
+ "code": "invalid_format",
566
+ "format": "json",
567
+ "message": "Unexpected token ',', "{"invalid":,}" is not valid JSON",
568
+ "path": [],
569
+ },
570
+ ]
571
+ `);
572
+ }
573
+ });