@openclaw/signal 2026.7.2-beta.7 → 2026.7.34

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 (763) hide show
  1. package/dist/.setup/accounts-Bz4HtP0g.mjs +59 -0
  2. package/dist/.setup/api-Q_S37MF_.mjs +16 -0
  3. package/dist/.setup/api-zi9Hs8Er.mjs +11 -0
  4. package/dist/{runtime-JPrGlV7h.js → .setup/approval-auth-CKMusyZI.mjs} +27 -36
  5. package/dist/{approval-handler.runtime-C-XYgcxE.js → .setup/approval-handler.runtime-eIT2knU-.mjs} +7 -7
  6. package/dist/{approval-reactions-DtL47gSK.js → .setup/approval-reactions-DoY1BVpl.mjs} +29 -38
  7. package/dist/{approval-resolver-B3m0D2R0.js → .setup/approval-resolver-BR0MioAA.mjs} +1 -2
  8. package/dist/{channel-CmbWaYlm.js → .setup/channel-DKzsFvG5.mjs} +90 -527
  9. package/dist/.setup/channel.runtime-jVmVayf_.mjs +66 -0
  10. package/dist/{client-BazXTH7O.js → .setup/client-adapter-BiGMiCr4.mjs} +236 -184
  11. package/dist/.setup/config-api-KS-qhQvD.mjs +2 -0
  12. package/dist/.setup/config-schema-BQRy2Glu.mjs +27 -0
  13. package/dist/{identity-BQ4OzXXk.js → .setup/identity-C8-yk4J9.mjs} +9 -21
  14. package/dist/{install-signal-cli-qJF7iC4h.js → .setup/install-signal-cli-BoniH0EF.mjs} +50 -88
  15. package/dist/.setup/message-actions-Cplx3XNC.mjs +529 -0
  16. package/dist/{monitor-BvIzkrYW.js → .setup/monitor-CZUTeDiv.mjs} +315 -610
  17. package/dist/.setup/probe-BXmpsFzO.mjs +48 -0
  18. package/dist/{reaction-runtime-api-BjeDyKcz.js → .setup/reaction-runtime-api-CAxalUfb.mjs} +7 -5
  19. package/dist/{rpc-context-CZUoE0-A.js → .setup/rpc-context-B-l6wiZj.mjs} +1 -1
  20. package/dist/{send-B_Ks4MZr.js → .setup/send-CF_VPaZJ.mjs} +41 -56
  21. package/dist/{send.runtime-CbuXycZT.js → .setup/send.runtime-DqumNf6-.mjs} +1 -1
  22. package/dist/api.js +11 -16
  23. package/dist/channel-config-api.js +1 -1
  24. package/dist/channel-plugin-api.js +1 -1
  25. package/dist/contract-api.js +3 -3
  26. package/dist/reaction-runtime-api.js +1 -1
  27. package/dist/runtime-api.js +10 -11
  28. package/dist/setup-entry.js +2 -1
  29. package/node_modules/ws/lib/permessage-deflate.js +3 -1
  30. package/node_modules/ws/package.json +1 -1
  31. package/openclaw.plugin.json +408 -566
  32. package/package.json +20 -70
  33. package/dist/accounts-DrStJjiK.js +0 -147
  34. package/dist/channel.runtime-BRDaqr5-.js +0 -92
  35. package/dist/client-adapter-mXGeEHQJ.js +0 -56
  36. package/dist/config-schema-Y3dFGwdL.js +0 -219
  37. package/dist/doctor-contract-api-Dcte-QYB.js +0 -487
  38. package/dist/doctor-contract-api.js +0 -2
  39. package/dist/probe-Br9abaGp.js +0 -65
  40. package/dist/question-reactions-Ds48FtEu.js +0 -109
  41. package/dist/transport-detection-Da06-LOL.js +0 -652
  42. package/dist/transport-detection.runtime-D_190UUL.js +0 -2
  43. package/dist/transport-policy-DxvSMHp9.js +0 -99
  44. package/dist/transport-probes.runtime-CV6Qs0Og.js +0 -2
  45. package/node_modules/zod/LICENSE +0 -21
  46. package/node_modules/zod/README.md +0 -191
  47. package/node_modules/zod/index.cjs +0 -33
  48. package/node_modules/zod/index.d.cts +0 -4
  49. package/node_modules/zod/index.d.ts +0 -4
  50. package/node_modules/zod/index.js +0 -4
  51. package/node_modules/zod/locales/index.cjs +0 -17
  52. package/node_modules/zod/locales/index.d.cts +0 -1
  53. package/node_modules/zod/locales/index.d.ts +0 -1
  54. package/node_modules/zod/locales/index.js +0 -1
  55. package/node_modules/zod/locales/package.json +0 -7
  56. package/node_modules/zod/mini/index.cjs +0 -32
  57. package/node_modules/zod/mini/index.d.cts +0 -3
  58. package/node_modules/zod/mini/index.d.ts +0 -3
  59. package/node_modules/zod/mini/index.js +0 -3
  60. package/node_modules/zod/mini/package.json +0 -7
  61. package/node_modules/zod/package.json +0 -135
  62. package/node_modules/zod/src/index.ts +0 -4
  63. package/node_modules/zod/src/locales/index.ts +0 -1
  64. package/node_modules/zod/src/mini/index.ts +0 -3
  65. package/node_modules/zod/src/v3/ZodError.ts +0 -330
  66. package/node_modules/zod/src/v3/benchmarks/datetime.ts +0 -58
  67. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +0 -80
  68. package/node_modules/zod/src/v3/benchmarks/index.ts +0 -59
  69. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +0 -57
  70. package/node_modules/zod/src/v3/benchmarks/object.ts +0 -69
  71. package/node_modules/zod/src/v3/benchmarks/primitives.ts +0 -162
  72. package/node_modules/zod/src/v3/benchmarks/realworld.ts +0 -63
  73. package/node_modules/zod/src/v3/benchmarks/string.ts +0 -55
  74. package/node_modules/zod/src/v3/benchmarks/union.ts +0 -80
  75. package/node_modules/zod/src/v3/errors.ts +0 -13
  76. package/node_modules/zod/src/v3/external.ts +0 -6
  77. package/node_modules/zod/src/v3/helpers/enumUtil.ts +0 -17
  78. package/node_modules/zod/src/v3/helpers/errorUtil.ts +0 -8
  79. package/node_modules/zod/src/v3/helpers/parseUtil.ts +0 -176
  80. package/node_modules/zod/src/v3/helpers/partialUtil.ts +0 -34
  81. package/node_modules/zod/src/v3/helpers/typeAliases.ts +0 -2
  82. package/node_modules/zod/src/v3/helpers/util.ts +0 -224
  83. package/node_modules/zod/src/v3/index.ts +0 -4
  84. package/node_modules/zod/src/v3/locales/en.ts +0 -124
  85. package/node_modules/zod/src/v3/standard-schema.ts +0 -113
  86. package/node_modules/zod/src/v3/tests/Mocker.ts +0 -54
  87. package/node_modules/zod/src/v3/tests/all-errors.test.ts +0 -157
  88. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +0 -28
  89. package/node_modules/zod/src/v3/tests/array.test.ts +0 -71
  90. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +0 -388
  91. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +0 -46
  92. package/node_modules/zod/src/v3/tests/base.test.ts +0 -29
  93. package/node_modules/zod/src/v3/tests/bigint.test.ts +0 -55
  94. package/node_modules/zod/src/v3/tests/branded.test.ts +0 -53
  95. package/node_modules/zod/src/v3/tests/catch.test.ts +0 -220
  96. package/node_modules/zod/src/v3/tests/coerce.test.ts +0 -133
  97. package/node_modules/zod/src/v3/tests/complex.test.ts +0 -70
  98. package/node_modules/zod/src/v3/tests/custom.test.ts +0 -31
  99. package/node_modules/zod/src/v3/tests/date.test.ts +0 -32
  100. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +0 -186
  101. package/node_modules/zod/src/v3/tests/default.test.ts +0 -112
  102. package/node_modules/zod/src/v3/tests/description.test.ts +0 -33
  103. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +0 -315
  104. package/node_modules/zod/src/v3/tests/enum.test.ts +0 -80
  105. package/node_modules/zod/src/v3/tests/error.test.ts +0 -551
  106. package/node_modules/zod/src/v3/tests/firstparty.test.ts +0 -87
  107. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +0 -21
  108. package/node_modules/zod/src/v3/tests/function.test.ts +0 -261
  109. package/node_modules/zod/src/v3/tests/generics.test.ts +0 -48
  110. package/node_modules/zod/src/v3/tests/instanceof.test.ts +0 -37
  111. package/node_modules/zod/src/v3/tests/intersection.test.ts +0 -110
  112. package/node_modules/zod/src/v3/tests/language-server.source.ts +0 -76
  113. package/node_modules/zod/src/v3/tests/language-server.test.ts +0 -207
  114. package/node_modules/zod/src/v3/tests/literal.test.ts +0 -36
  115. package/node_modules/zod/src/v3/tests/map.test.ts +0 -110
  116. package/node_modules/zod/src/v3/tests/masking.test.ts +0 -4
  117. package/node_modules/zod/src/v3/tests/mocker.test.ts +0 -19
  118. package/node_modules/zod/src/v3/tests/nan.test.ts +0 -24
  119. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +0 -87
  120. package/node_modules/zod/src/v3/tests/nullable.test.ts +0 -42
  121. package/node_modules/zod/src/v3/tests/number.test.ts +0 -176
  122. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +0 -29
  123. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +0 -29
  124. package/node_modules/zod/src/v3/tests/object.test.ts +0 -434
  125. package/node_modules/zod/src/v3/tests/optional.test.ts +0 -42
  126. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +0 -23
  127. package/node_modules/zod/src/v3/tests/parser.test.ts +0 -41
  128. package/node_modules/zod/src/v3/tests/partials.test.ts +0 -243
  129. package/node_modules/zod/src/v3/tests/pickomit.test.ts +0 -111
  130. package/node_modules/zod/src/v3/tests/pipeline.test.ts +0 -29
  131. package/node_modules/zod/src/v3/tests/preprocess.test.ts +0 -186
  132. package/node_modules/zod/src/v3/tests/primitive.test.ts +0 -440
  133. package/node_modules/zod/src/v3/tests/promise.test.ts +0 -90
  134. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -194
  135. package/node_modules/zod/src/v3/tests/record.test.ts +0 -171
  136. package/node_modules/zod/src/v3/tests/recursive.test.ts +0 -197
  137. package/node_modules/zod/src/v3/tests/refine.test.ts +0 -313
  138. package/node_modules/zod/src/v3/tests/safeparse.test.ts +0 -27
  139. package/node_modules/zod/src/v3/tests/set.test.ts +0 -142
  140. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +0 -83
  141. package/node_modules/zod/src/v3/tests/string.test.ts +0 -916
  142. package/node_modules/zod/src/v3/tests/transformer.test.ts +0 -233
  143. package/node_modules/zod/src/v3/tests/tuple.test.ts +0 -90
  144. package/node_modules/zod/src/v3/tests/unions.test.ts +0 -57
  145. package/node_modules/zod/src/v3/tests/validations.test.ts +0 -133
  146. package/node_modules/zod/src/v3/tests/void.test.ts +0 -15
  147. package/node_modules/zod/src/v3/types.ts +0 -5138
  148. package/node_modules/zod/src/v4/classic/checks.ts +0 -32
  149. package/node_modules/zod/src/v4/classic/coerce.ts +0 -27
  150. package/node_modules/zod/src/v4/classic/compat.ts +0 -70
  151. package/node_modules/zod/src/v4/classic/errors.ts +0 -82
  152. package/node_modules/zod/src/v4/classic/external.ts +0 -52
  153. package/node_modules/zod/src/v4/classic/from-json-schema.ts +0 -659
  154. package/node_modules/zod/src/v4/classic/index.ts +0 -5
  155. package/node_modules/zod/src/v4/classic/iso.ts +0 -90
  156. package/node_modules/zod/src/v4/classic/parse.ts +0 -82
  157. package/node_modules/zod/src/v4/classic/schemas.ts +0 -2672
  158. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +0 -26
  159. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +0 -59
  160. package/node_modules/zod/src/v4/classic/tests/array.test.ts +0 -264
  161. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +0 -216
  162. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +0 -381
  163. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +0 -68
  164. package/node_modules/zod/src/v4/classic/tests/base.test.ts +0 -7
  165. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +0 -54
  166. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +0 -106
  167. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +0 -326
  168. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +0 -20
  169. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +0 -573
  170. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +0 -703
  171. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +0 -160
  172. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +0 -374
  173. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +0 -40
  174. package/node_modules/zod/src/v4/classic/tests/date.test.ts +0 -62
  175. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +0 -302
  176. package/node_modules/zod/src/v4/classic/tests/default.test.ts +0 -409
  177. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +0 -27
  178. package/node_modules/zod/src/v4/classic/tests/description.test.ts +0 -32
  179. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +0 -197
  180. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +0 -694
  181. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +0 -285
  182. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +0 -807
  183. package/node_modules/zod/src/v4/classic/tests/error.test.ts +0 -711
  184. package/node_modules/zod/src/v4/classic/tests/file.test.ts +0 -96
  185. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +0 -179
  186. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +0 -26
  187. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +0 -895
  188. package/node_modules/zod/src/v4/classic/tests/function.test.ts +0 -360
  189. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +0 -72
  190. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +0 -39
  191. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +0 -68
  192. package/node_modules/zod/src/v4/classic/tests/index.test.ts +0 -939
  193. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +0 -60
  194. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +0 -198
  195. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +0 -46
  196. package/node_modules/zod/src/v4/classic/tests/json.test.ts +0 -109
  197. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +0 -227
  198. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +0 -117
  199. package/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +0 -29
  200. package/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +0 -24
  201. package/node_modules/zod/src/v4/classic/tests/map.test.ts +0 -330
  202. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +0 -21
  203. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +0 -168
  204. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +0 -101
  205. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +0 -22
  206. package/node_modules/zod/src/v4/classic/tests/number.test.ts +0 -325
  207. package/node_modules/zod/src/v4/classic/tests/object.test.ts +0 -717
  208. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +0 -333
  209. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +0 -450
  210. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +0 -211
  211. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +0 -101
  212. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +0 -74
  213. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +0 -26
  214. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +0 -351
  215. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +0 -175
  216. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +0 -81
  217. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +0 -23
  218. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -252
  219. package/node_modules/zod/src/v4/classic/tests/record.test.ts +0 -717
  220. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +0 -631
  221. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +0 -633
  222. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +0 -243
  223. package/node_modules/zod/src/v4/classic/tests/set.test.ts +0 -181
  224. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +0 -134
  225. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +0 -125
  226. package/node_modules/zod/src/v4/classic/tests/string.test.ts +0 -1224
  227. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +0 -106
  228. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +0 -771
  229. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +0 -438
  230. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +0 -3125
  231. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +0 -378
  232. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +0 -496
  233. package/node_modules/zod/src/v4/classic/tests/union.test.ts +0 -273
  234. package/node_modules/zod/src/v4/classic/tests/url.test.ts +0 -13
  235. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +0 -283
  236. package/node_modules/zod/src/v4/classic/tests/void.test.ts +0 -12
  237. package/node_modules/zod/src/v4/core/api.ts +0 -1823
  238. package/node_modules/zod/src/v4/core/checks.ts +0 -1293
  239. package/node_modules/zod/src/v4/core/config.ts +0 -15
  240. package/node_modules/zod/src/v4/core/core.ts +0 -153
  241. package/node_modules/zod/src/v4/core/doc.ts +0 -44
  242. package/node_modules/zod/src/v4/core/errors.ts +0 -455
  243. package/node_modules/zod/src/v4/core/index.ts +0 -16
  244. package/node_modules/zod/src/v4/core/json-schema-generator.ts +0 -126
  245. package/node_modules/zod/src/v4/core/json-schema-processors.ts +0 -666
  246. package/node_modules/zod/src/v4/core/json-schema.ts +0 -147
  247. package/node_modules/zod/src/v4/core/parse.ts +0 -195
  248. package/node_modules/zod/src/v4/core/regexes.ts +0 -190
  249. package/node_modules/zod/src/v4/core/registries.ts +0 -105
  250. package/node_modules/zod/src/v4/core/schemas.ts +0 -4730
  251. package/node_modules/zod/src/v4/core/standard-schema.ts +0 -159
  252. package/node_modules/zod/src/v4/core/tests/extend.test.ts +0 -59
  253. package/node_modules/zod/src/v4/core/tests/index.test.ts +0 -46
  254. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +0 -124
  255. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +0 -215
  256. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +0 -22
  257. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +0 -181
  258. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +0 -72
  259. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +0 -379
  260. package/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +0 -163
  261. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +0 -46
  262. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +0 -128
  263. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +0 -69
  264. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +0 -105
  265. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +0 -125
  266. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +0 -45
  267. package/node_modules/zod/src/v4/core/to-json-schema.ts +0 -622
  268. package/node_modules/zod/src/v4/core/util.ts +0 -983
  269. package/node_modules/zod/src/v4/core/versions.ts +0 -5
  270. package/node_modules/zod/src/v4/core/zsf.ts +0 -323
  271. package/node_modules/zod/src/v4/index.ts +0 -4
  272. package/node_modules/zod/src/v4/locales/ar.ts +0 -115
  273. package/node_modules/zod/src/v4/locales/az.ts +0 -111
  274. package/node_modules/zod/src/v4/locales/be.ts +0 -176
  275. package/node_modules/zod/src/v4/locales/bg.ts +0 -128
  276. package/node_modules/zod/src/v4/locales/ca.ts +0 -116
  277. package/node_modules/zod/src/v4/locales/cs.ts +0 -118
  278. package/node_modules/zod/src/v4/locales/da.ts +0 -123
  279. package/node_modules/zod/src/v4/locales/de.ts +0 -116
  280. package/node_modules/zod/src/v4/locales/el.ts +0 -121
  281. package/node_modules/zod/src/v4/locales/en.ts +0 -123
  282. package/node_modules/zod/src/v4/locales/eo.ts +0 -118
  283. package/node_modules/zod/src/v4/locales/es.ts +0 -141
  284. package/node_modules/zod/src/v4/locales/fa.ts +0 -126
  285. package/node_modules/zod/src/v4/locales/fi.ts +0 -121
  286. package/node_modules/zod/src/v4/locales/fr-CA.ts +0 -116
  287. package/node_modules/zod/src/v4/locales/fr.ts +0 -132
  288. package/node_modules/zod/src/v4/locales/he.ts +0 -246
  289. package/node_modules/zod/src/v4/locales/hr.ts +0 -131
  290. package/node_modules/zod/src/v4/locales/hu.ts +0 -117
  291. package/node_modules/zod/src/v4/locales/hy.ts +0 -164
  292. package/node_modules/zod/src/v4/locales/id.ts +0 -115
  293. package/node_modules/zod/src/v4/locales/index.ts +0 -52
  294. package/node_modules/zod/src/v4/locales/is.ts +0 -119
  295. package/node_modules/zod/src/v4/locales/it.ts +0 -116
  296. package/node_modules/zod/src/v4/locales/ja.ts +0 -114
  297. package/node_modules/zod/src/v4/locales/ka.ts +0 -123
  298. package/node_modules/zod/src/v4/locales/kh.ts +0 -7
  299. package/node_modules/zod/src/v4/locales/km.ts +0 -119
  300. package/node_modules/zod/src/v4/locales/ko.ts +0 -121
  301. package/node_modules/zod/src/v4/locales/lt.ts +0 -239
  302. package/node_modules/zod/src/v4/locales/mk.ts +0 -118
  303. package/node_modules/zod/src/v4/locales/ms.ts +0 -115
  304. package/node_modules/zod/src/v4/locales/nl.ts +0 -121
  305. package/node_modules/zod/src/v4/locales/no.ts +0 -116
  306. package/node_modules/zod/src/v4/locales/ota.ts +0 -117
  307. package/node_modules/zod/src/v4/locales/pl.ts +0 -118
  308. package/node_modules/zod/src/v4/locales/ps.ts +0 -126
  309. package/node_modules/zod/src/v4/locales/pt.ts +0 -116
  310. package/node_modules/zod/src/v4/locales/ro.ts +0 -129
  311. package/node_modules/zod/src/v4/locales/ru.ts +0 -176
  312. package/node_modules/zod/src/v4/locales/sl.ts +0 -118
  313. package/node_modules/zod/src/v4/locales/sv.ts +0 -119
  314. package/node_modules/zod/src/v4/locales/ta.ts +0 -118
  315. package/node_modules/zod/src/v4/locales/th.ts +0 -119
  316. package/node_modules/zod/src/v4/locales/tr.ts +0 -111
  317. package/node_modules/zod/src/v4/locales/ua.ts +0 -7
  318. package/node_modules/zod/src/v4/locales/uk.ts +0 -117
  319. package/node_modules/zod/src/v4/locales/ur.ts +0 -119
  320. package/node_modules/zod/src/v4/locales/uz.ts +0 -117
  321. package/node_modules/zod/src/v4/locales/vi.ts +0 -117
  322. package/node_modules/zod/src/v4/locales/yo.ts +0 -124
  323. package/node_modules/zod/src/v4/locales/zh-CN.ts +0 -116
  324. package/node_modules/zod/src/v4/locales/zh-TW.ts +0 -115
  325. package/node_modules/zod/src/v4/mini/checks.ts +0 -32
  326. package/node_modules/zod/src/v4/mini/coerce.ts +0 -27
  327. package/node_modules/zod/src/v4/mini/external.ts +0 -41
  328. package/node_modules/zod/src/v4/mini/index.ts +0 -3
  329. package/node_modules/zod/src/v4/mini/iso.ts +0 -66
  330. package/node_modules/zod/src/v4/mini/parse.ts +0 -14
  331. package/node_modules/zod/src/v4/mini/schemas.ts +0 -1947
  332. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +0 -24
  333. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +0 -129
  334. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +0 -94
  335. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +0 -144
  336. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +0 -548
  337. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +0 -36
  338. package/node_modules/zod/src/v4/mini/tests/error.test.ts +0 -22
  339. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +0 -5
  340. package/node_modules/zod/src/v4/mini/tests/index.test.ts +0 -993
  341. package/node_modules/zod/src/v4/mini/tests/number.test.ts +0 -95
  342. package/node_modules/zod/src/v4/mini/tests/object.test.ts +0 -227
  343. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +0 -43
  344. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +0 -325
  345. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +0 -50
  346. package/node_modules/zod/src/v4/mini/tests/string.test.ts +0 -352
  347. package/node_modules/zod/src/v4-mini/index.ts +0 -3
  348. package/node_modules/zod/v3/ZodError.cjs +0 -138
  349. package/node_modules/zod/v3/ZodError.d.cts +0 -164
  350. package/node_modules/zod/v3/ZodError.d.ts +0 -164
  351. package/node_modules/zod/v3/ZodError.js +0 -133
  352. package/node_modules/zod/v3/errors.cjs +0 -17
  353. package/node_modules/zod/v3/errors.d.cts +0 -5
  354. package/node_modules/zod/v3/errors.d.ts +0 -5
  355. package/node_modules/zod/v3/errors.js +0 -9
  356. package/node_modules/zod/v3/external.cjs +0 -22
  357. package/node_modules/zod/v3/external.d.cts +0 -6
  358. package/node_modules/zod/v3/external.d.ts +0 -6
  359. package/node_modules/zod/v3/external.js +0 -6
  360. package/node_modules/zod/v3/helpers/enumUtil.cjs +0 -2
  361. package/node_modules/zod/v3/helpers/enumUtil.d.cts +0 -8
  362. package/node_modules/zod/v3/helpers/enumUtil.d.ts +0 -8
  363. package/node_modules/zod/v3/helpers/enumUtil.js +0 -1
  364. package/node_modules/zod/v3/helpers/errorUtil.cjs +0 -9
  365. package/node_modules/zod/v3/helpers/errorUtil.d.cts +0 -9
  366. package/node_modules/zod/v3/helpers/errorUtil.d.ts +0 -9
  367. package/node_modules/zod/v3/helpers/errorUtil.js +0 -6
  368. package/node_modules/zod/v3/helpers/parseUtil.cjs +0 -124
  369. package/node_modules/zod/v3/helpers/parseUtil.d.cts +0 -78
  370. package/node_modules/zod/v3/helpers/parseUtil.d.ts +0 -78
  371. package/node_modules/zod/v3/helpers/parseUtil.js +0 -109
  372. package/node_modules/zod/v3/helpers/partialUtil.cjs +0 -2
  373. package/node_modules/zod/v3/helpers/partialUtil.d.cts +0 -8
  374. package/node_modules/zod/v3/helpers/partialUtil.d.ts +0 -8
  375. package/node_modules/zod/v3/helpers/partialUtil.js +0 -1
  376. package/node_modules/zod/v3/helpers/typeAliases.cjs +0 -2
  377. package/node_modules/zod/v3/helpers/typeAliases.d.cts +0 -2
  378. package/node_modules/zod/v3/helpers/typeAliases.d.ts +0 -2
  379. package/node_modules/zod/v3/helpers/typeAliases.js +0 -1
  380. package/node_modules/zod/v3/helpers/util.cjs +0 -137
  381. package/node_modules/zod/v3/helpers/util.d.cts +0 -85
  382. package/node_modules/zod/v3/helpers/util.d.ts +0 -85
  383. package/node_modules/zod/v3/helpers/util.js +0 -133
  384. package/node_modules/zod/v3/index.cjs +0 -33
  385. package/node_modules/zod/v3/index.d.cts +0 -4
  386. package/node_modules/zod/v3/index.d.ts +0 -4
  387. package/node_modules/zod/v3/index.js +0 -4
  388. package/node_modules/zod/v3/locales/en.cjs +0 -112
  389. package/node_modules/zod/v3/locales/en.d.cts +0 -3
  390. package/node_modules/zod/v3/locales/en.d.ts +0 -3
  391. package/node_modules/zod/v3/locales/en.js +0 -109
  392. package/node_modules/zod/v3/package.json +0 -7
  393. package/node_modules/zod/v3/standard-schema.cjs +0 -2
  394. package/node_modules/zod/v3/standard-schema.d.cts +0 -102
  395. package/node_modules/zod/v3/standard-schema.d.ts +0 -102
  396. package/node_modules/zod/v3/standard-schema.js +0 -1
  397. package/node_modules/zod/v3/types.cjs +0 -3777
  398. package/node_modules/zod/v3/types.d.cts +0 -1034
  399. package/node_modules/zod/v3/types.d.ts +0 -1034
  400. package/node_modules/zod/v3/types.js +0 -3695
  401. package/node_modules/zod/v4/classic/checks.cjs +0 -33
  402. package/node_modules/zod/v4/classic/checks.d.cts +0 -1
  403. package/node_modules/zod/v4/classic/checks.d.ts +0 -1
  404. package/node_modules/zod/v4/classic/checks.js +0 -1
  405. package/node_modules/zod/v4/classic/coerce.cjs +0 -47
  406. package/node_modules/zod/v4/classic/coerce.d.cts +0 -17
  407. package/node_modules/zod/v4/classic/coerce.d.ts +0 -17
  408. package/node_modules/zod/v4/classic/coerce.js +0 -17
  409. package/node_modules/zod/v4/classic/compat.cjs +0 -61
  410. package/node_modules/zod/v4/classic/compat.d.cts +0 -50
  411. package/node_modules/zod/v4/classic/compat.d.ts +0 -50
  412. package/node_modules/zod/v4/classic/compat.js +0 -31
  413. package/node_modules/zod/v4/classic/errors.cjs +0 -74
  414. package/node_modules/zod/v4/classic/errors.d.cts +0 -30
  415. package/node_modules/zod/v4/classic/errors.d.ts +0 -30
  416. package/node_modules/zod/v4/classic/errors.js +0 -48
  417. package/node_modules/zod/v4/classic/external.cjs +0 -73
  418. package/node_modules/zod/v4/classic/external.d.cts +0 -16
  419. package/node_modules/zod/v4/classic/external.d.ts +0 -16
  420. package/node_modules/zod/v4/classic/external.js +0 -20
  421. package/node_modules/zod/v4/classic/from-json-schema.cjs +0 -625
  422. package/node_modules/zod/v4/classic/from-json-schema.d.cts +0 -12
  423. package/node_modules/zod/v4/classic/from-json-schema.d.ts +0 -12
  424. package/node_modules/zod/v4/classic/from-json-schema.js +0 -599
  425. package/node_modules/zod/v4/classic/index.cjs +0 -33
  426. package/node_modules/zod/v4/classic/index.d.cts +0 -4
  427. package/node_modules/zod/v4/classic/index.d.ts +0 -4
  428. package/node_modules/zod/v4/classic/index.js +0 -4
  429. package/node_modules/zod/v4/classic/iso.cjs +0 -60
  430. package/node_modules/zod/v4/classic/iso.d.cts +0 -22
  431. package/node_modules/zod/v4/classic/iso.d.ts +0 -22
  432. package/node_modules/zod/v4/classic/iso.js +0 -30
  433. package/node_modules/zod/v4/classic/package.json +0 -7
  434. package/node_modules/zod/v4/classic/parse.cjs +0 -41
  435. package/node_modules/zod/v4/classic/parse.d.cts +0 -31
  436. package/node_modules/zod/v4/classic/parse.d.ts +0 -31
  437. package/node_modules/zod/v4/classic/parse.js +0 -15
  438. package/node_modules/zod/v4/classic/schemas.cjs +0 -1511
  439. package/node_modules/zod/v4/classic/schemas.d.cts +0 -767
  440. package/node_modules/zod/v4/classic/schemas.d.ts +0 -767
  441. package/node_modules/zod/v4/classic/schemas.js +0 -1395
  442. package/node_modules/zod/v4/core/api.cjs +0 -1227
  443. package/node_modules/zod/v4/core/api.d.cts +0 -325
  444. package/node_modules/zod/v4/core/api.d.ts +0 -325
  445. package/node_modules/zod/v4/core/api.js +0 -1087
  446. package/node_modules/zod/v4/core/checks.cjs +0 -601
  447. package/node_modules/zod/v4/core/checks.d.cts +0 -278
  448. package/node_modules/zod/v4/core/checks.d.ts +0 -278
  449. package/node_modules/zod/v4/core/checks.js +0 -575
  450. package/node_modules/zod/v4/core/core.cjs +0 -85
  451. package/node_modules/zod/v4/core/core.d.cts +0 -70
  452. package/node_modules/zod/v4/core/core.d.ts +0 -70
  453. package/node_modules/zod/v4/core/core.js +0 -78
  454. package/node_modules/zod/v4/core/doc.cjs +0 -39
  455. package/node_modules/zod/v4/core/doc.d.cts +0 -14
  456. package/node_modules/zod/v4/core/doc.d.ts +0 -14
  457. package/node_modules/zod/v4/core/doc.js +0 -35
  458. package/node_modules/zod/v4/core/errors.cjs +0 -216
  459. package/node_modules/zod/v4/core/errors.d.cts +0 -221
  460. package/node_modules/zod/v4/core/errors.d.ts +0 -221
  461. package/node_modules/zod/v4/core/errors.js +0 -185
  462. package/node_modules/zod/v4/core/index.cjs +0 -47
  463. package/node_modules/zod/v4/core/index.d.cts +0 -16
  464. package/node_modules/zod/v4/core/index.d.ts +0 -16
  465. package/node_modules/zod/v4/core/index.js +0 -16
  466. package/node_modules/zod/v4/core/json-schema-generator.cjs +0 -99
  467. package/node_modules/zod/v4/core/json-schema-generator.d.cts +0 -65
  468. package/node_modules/zod/v4/core/json-schema-generator.d.ts +0 -65
  469. package/node_modules/zod/v4/core/json-schema-generator.js +0 -95
  470. package/node_modules/zod/v4/core/json-schema-processors.cjs +0 -644
  471. package/node_modules/zod/v4/core/json-schema-processors.d.cts +0 -49
  472. package/node_modules/zod/v4/core/json-schema-processors.d.ts +0 -49
  473. package/node_modules/zod/v4/core/json-schema-processors.js +0 -601
  474. package/node_modules/zod/v4/core/json-schema.cjs +0 -2
  475. package/node_modules/zod/v4/core/json-schema.d.cts +0 -88
  476. package/node_modules/zod/v4/core/json-schema.d.ts +0 -88
  477. package/node_modules/zod/v4/core/json-schema.js +0 -1
  478. package/node_modules/zod/v4/core/package.json +0 -7
  479. package/node_modules/zod/v4/core/parse.cjs +0 -131
  480. package/node_modules/zod/v4/core/parse.d.cts +0 -49
  481. package/node_modules/zod/v4/core/parse.d.ts +0 -49
  482. package/node_modules/zod/v4/core/parse.js +0 -93
  483. package/node_modules/zod/v4/core/regexes.cjs +0 -172
  484. package/node_modules/zod/v4/core/regexes.d.cts +0 -85
  485. package/node_modules/zod/v4/core/regexes.d.ts +0 -85
  486. package/node_modules/zod/v4/core/regexes.js +0 -139
  487. package/node_modules/zod/v4/core/registries.cjs +0 -56
  488. package/node_modules/zod/v4/core/registries.d.cts +0 -35
  489. package/node_modules/zod/v4/core/registries.d.ts +0 -35
  490. package/node_modules/zod/v4/core/registries.js +0 -51
  491. package/node_modules/zod/v4/core/schemas.cjs +0 -2270
  492. package/node_modules/zod/v4/core/schemas.d.cts +0 -1184
  493. package/node_modules/zod/v4/core/schemas.d.ts +0 -1184
  494. package/node_modules/zod/v4/core/schemas.js +0 -2239
  495. package/node_modules/zod/v4/core/standard-schema.cjs +0 -2
  496. package/node_modules/zod/v4/core/standard-schema.d.cts +0 -126
  497. package/node_modules/zod/v4/core/standard-schema.d.ts +0 -126
  498. package/node_modules/zod/v4/core/standard-schema.js +0 -1
  499. package/node_modules/zod/v4/core/to-json-schema.cjs +0 -457
  500. package/node_modules/zod/v4/core/to-json-schema.d.cts +0 -114
  501. package/node_modules/zod/v4/core/to-json-schema.d.ts +0 -114
  502. package/node_modules/zod/v4/core/to-json-schema.js +0 -448
  503. package/node_modules/zod/v4/core/util.cjs +0 -734
  504. package/node_modules/zod/v4/core/util.d.cts +0 -200
  505. package/node_modules/zod/v4/core/util.d.ts +0 -200
  506. package/node_modules/zod/v4/core/util.js +0 -674
  507. package/node_modules/zod/v4/core/versions.cjs +0 -8
  508. package/node_modules/zod/v4/core/versions.d.cts +0 -5
  509. package/node_modules/zod/v4/core/versions.d.ts +0 -5
  510. package/node_modules/zod/v4/core/versions.js +0 -5
  511. package/node_modules/zod/v4/index.cjs +0 -22
  512. package/node_modules/zod/v4/index.d.cts +0 -3
  513. package/node_modules/zod/v4/index.d.ts +0 -3
  514. package/node_modules/zod/v4/index.js +0 -3
  515. package/node_modules/zod/v4/locales/ar.cjs +0 -133
  516. package/node_modules/zod/v4/locales/ar.d.cts +0 -5
  517. package/node_modules/zod/v4/locales/ar.d.ts +0 -4
  518. package/node_modules/zod/v4/locales/ar.js +0 -106
  519. package/node_modules/zod/v4/locales/az.cjs +0 -132
  520. package/node_modules/zod/v4/locales/az.d.cts +0 -5
  521. package/node_modules/zod/v4/locales/az.d.ts +0 -4
  522. package/node_modules/zod/v4/locales/az.js +0 -105
  523. package/node_modules/zod/v4/locales/be.cjs +0 -183
  524. package/node_modules/zod/v4/locales/be.d.cts +0 -5
  525. package/node_modules/zod/v4/locales/be.d.ts +0 -4
  526. package/node_modules/zod/v4/locales/be.js +0 -156
  527. package/node_modules/zod/v4/locales/bg.cjs +0 -147
  528. package/node_modules/zod/v4/locales/bg.d.cts +0 -5
  529. package/node_modules/zod/v4/locales/bg.d.ts +0 -4
  530. package/node_modules/zod/v4/locales/bg.js +0 -120
  531. package/node_modules/zod/v4/locales/ca.cjs +0 -134
  532. package/node_modules/zod/v4/locales/ca.d.cts +0 -5
  533. package/node_modules/zod/v4/locales/ca.d.ts +0 -4
  534. package/node_modules/zod/v4/locales/ca.js +0 -107
  535. package/node_modules/zod/v4/locales/cs.cjs +0 -138
  536. package/node_modules/zod/v4/locales/cs.d.cts +0 -5
  537. package/node_modules/zod/v4/locales/cs.d.ts +0 -4
  538. package/node_modules/zod/v4/locales/cs.js +0 -111
  539. package/node_modules/zod/v4/locales/da.cjs +0 -142
  540. package/node_modules/zod/v4/locales/da.d.cts +0 -5
  541. package/node_modules/zod/v4/locales/da.d.ts +0 -4
  542. package/node_modules/zod/v4/locales/da.js +0 -115
  543. package/node_modules/zod/v4/locales/de.cjs +0 -135
  544. package/node_modules/zod/v4/locales/de.d.cts +0 -5
  545. package/node_modules/zod/v4/locales/de.d.ts +0 -4
  546. package/node_modules/zod/v4/locales/de.js +0 -108
  547. package/node_modules/zod/v4/locales/el.cjs +0 -136
  548. package/node_modules/zod/v4/locales/el.d.cts +0 -5
  549. package/node_modules/zod/v4/locales/el.d.ts +0 -4
  550. package/node_modules/zod/v4/locales/el.js +0 -109
  551. package/node_modules/zod/v4/locales/en.cjs +0 -140
  552. package/node_modules/zod/v4/locales/en.d.cts +0 -5
  553. package/node_modules/zod/v4/locales/en.d.ts +0 -4
  554. package/node_modules/zod/v4/locales/en.js +0 -113
  555. package/node_modules/zod/v4/locales/eo.cjs +0 -136
  556. package/node_modules/zod/v4/locales/eo.d.cts +0 -5
  557. package/node_modules/zod/v4/locales/eo.d.ts +0 -4
  558. package/node_modules/zod/v4/locales/eo.js +0 -109
  559. package/node_modules/zod/v4/locales/es.cjs +0 -159
  560. package/node_modules/zod/v4/locales/es.d.cts +0 -5
  561. package/node_modules/zod/v4/locales/es.d.ts +0 -4
  562. package/node_modules/zod/v4/locales/es.js +0 -132
  563. package/node_modules/zod/v4/locales/fa.cjs +0 -141
  564. package/node_modules/zod/v4/locales/fa.d.cts +0 -5
  565. package/node_modules/zod/v4/locales/fa.d.ts +0 -4
  566. package/node_modules/zod/v4/locales/fa.js +0 -114
  567. package/node_modules/zod/v4/locales/fi.cjs +0 -139
  568. package/node_modules/zod/v4/locales/fi.d.cts +0 -5
  569. package/node_modules/zod/v4/locales/fi.d.ts +0 -4
  570. package/node_modules/zod/v4/locales/fi.js +0 -112
  571. package/node_modules/zod/v4/locales/fr-CA.cjs +0 -134
  572. package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -5
  573. package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
  574. package/node_modules/zod/v4/locales/fr-CA.js +0 -107
  575. package/node_modules/zod/v4/locales/fr.cjs +0 -152
  576. package/node_modules/zod/v4/locales/fr.d.cts +0 -5
  577. package/node_modules/zod/v4/locales/fr.d.ts +0 -4
  578. package/node_modules/zod/v4/locales/fr.js +0 -125
  579. package/node_modules/zod/v4/locales/he.cjs +0 -241
  580. package/node_modules/zod/v4/locales/he.d.cts +0 -5
  581. package/node_modules/zod/v4/locales/he.d.ts +0 -4
  582. package/node_modules/zod/v4/locales/he.js +0 -214
  583. package/node_modules/zod/v4/locales/hr.cjs +0 -149
  584. package/node_modules/zod/v4/locales/hr.d.cts +0 -5
  585. package/node_modules/zod/v4/locales/hr.d.ts +0 -4
  586. package/node_modules/zod/v4/locales/hr.js +0 -122
  587. package/node_modules/zod/v4/locales/hu.cjs +0 -135
  588. package/node_modules/zod/v4/locales/hu.d.cts +0 -5
  589. package/node_modules/zod/v4/locales/hu.d.ts +0 -4
  590. package/node_modules/zod/v4/locales/hu.js +0 -108
  591. package/node_modules/zod/v4/locales/hy.cjs +0 -174
  592. package/node_modules/zod/v4/locales/hy.d.cts +0 -5
  593. package/node_modules/zod/v4/locales/hy.d.ts +0 -4
  594. package/node_modules/zod/v4/locales/hy.js +0 -147
  595. package/node_modules/zod/v4/locales/id.cjs +0 -133
  596. package/node_modules/zod/v4/locales/id.d.cts +0 -5
  597. package/node_modules/zod/v4/locales/id.d.ts +0 -4
  598. package/node_modules/zod/v4/locales/id.js +0 -106
  599. package/node_modules/zod/v4/locales/index.cjs +0 -111
  600. package/node_modules/zod/v4/locales/index.d.cts +0 -52
  601. package/node_modules/zod/v4/locales/index.d.ts +0 -52
  602. package/node_modules/zod/v4/locales/index.js +0 -52
  603. package/node_modules/zod/v4/locales/is.cjs +0 -136
  604. package/node_modules/zod/v4/locales/is.d.cts +0 -5
  605. package/node_modules/zod/v4/locales/is.d.ts +0 -4
  606. package/node_modules/zod/v4/locales/is.js +0 -109
  607. package/node_modules/zod/v4/locales/it.cjs +0 -135
  608. package/node_modules/zod/v4/locales/it.d.cts +0 -5
  609. package/node_modules/zod/v4/locales/it.d.ts +0 -4
  610. package/node_modules/zod/v4/locales/it.js +0 -108
  611. package/node_modules/zod/v4/locales/ja.cjs +0 -134
  612. package/node_modules/zod/v4/locales/ja.d.cts +0 -5
  613. package/node_modules/zod/v4/locales/ja.d.ts +0 -4
  614. package/node_modules/zod/v4/locales/ja.js +0 -107
  615. package/node_modules/zod/v4/locales/ka.cjs +0 -139
  616. package/node_modules/zod/v4/locales/ka.d.cts +0 -5
  617. package/node_modules/zod/v4/locales/ka.d.ts +0 -4
  618. package/node_modules/zod/v4/locales/ka.js +0 -112
  619. package/node_modules/zod/v4/locales/kh.cjs +0 -12
  620. package/node_modules/zod/v4/locales/kh.d.cts +0 -5
  621. package/node_modules/zod/v4/locales/kh.d.ts +0 -5
  622. package/node_modules/zod/v4/locales/kh.js +0 -5
  623. package/node_modules/zod/v4/locales/km.cjs +0 -137
  624. package/node_modules/zod/v4/locales/km.d.cts +0 -5
  625. package/node_modules/zod/v4/locales/km.d.ts +0 -4
  626. package/node_modules/zod/v4/locales/km.js +0 -110
  627. package/node_modules/zod/v4/locales/ko.cjs +0 -138
  628. package/node_modules/zod/v4/locales/ko.d.cts +0 -5
  629. package/node_modules/zod/v4/locales/ko.d.ts +0 -4
  630. package/node_modules/zod/v4/locales/ko.js +0 -111
  631. package/node_modules/zod/v4/locales/lt.cjs +0 -230
  632. package/node_modules/zod/v4/locales/lt.d.cts +0 -5
  633. package/node_modules/zod/v4/locales/lt.d.ts +0 -4
  634. package/node_modules/zod/v4/locales/lt.js +0 -203
  635. package/node_modules/zod/v4/locales/mk.cjs +0 -136
  636. package/node_modules/zod/v4/locales/mk.d.cts +0 -5
  637. package/node_modules/zod/v4/locales/mk.d.ts +0 -4
  638. package/node_modules/zod/v4/locales/mk.js +0 -109
  639. package/node_modules/zod/v4/locales/ms.cjs +0 -134
  640. package/node_modules/zod/v4/locales/ms.d.cts +0 -5
  641. package/node_modules/zod/v4/locales/ms.d.ts +0 -4
  642. package/node_modules/zod/v4/locales/ms.js +0 -107
  643. package/node_modules/zod/v4/locales/nl.cjs +0 -137
  644. package/node_modules/zod/v4/locales/nl.d.cts +0 -5
  645. package/node_modules/zod/v4/locales/nl.d.ts +0 -4
  646. package/node_modules/zod/v4/locales/nl.js +0 -110
  647. package/node_modules/zod/v4/locales/no.cjs +0 -135
  648. package/node_modules/zod/v4/locales/no.d.cts +0 -5
  649. package/node_modules/zod/v4/locales/no.d.ts +0 -4
  650. package/node_modules/zod/v4/locales/no.js +0 -108
  651. package/node_modules/zod/v4/locales/ota.cjs +0 -136
  652. package/node_modules/zod/v4/locales/ota.d.cts +0 -5
  653. package/node_modules/zod/v4/locales/ota.d.ts +0 -4
  654. package/node_modules/zod/v4/locales/ota.js +0 -109
  655. package/node_modules/zod/v4/locales/package.json +0 -7
  656. package/node_modules/zod/v4/locales/pl.cjs +0 -136
  657. package/node_modules/zod/v4/locales/pl.d.cts +0 -5
  658. package/node_modules/zod/v4/locales/pl.d.ts +0 -4
  659. package/node_modules/zod/v4/locales/pl.js +0 -109
  660. package/node_modules/zod/v4/locales/ps.cjs +0 -141
  661. package/node_modules/zod/v4/locales/ps.d.cts +0 -5
  662. package/node_modules/zod/v4/locales/ps.d.ts +0 -4
  663. package/node_modules/zod/v4/locales/ps.js +0 -114
  664. package/node_modules/zod/v4/locales/pt.cjs +0 -135
  665. package/node_modules/zod/v4/locales/pt.d.cts +0 -5
  666. package/node_modules/zod/v4/locales/pt.d.ts +0 -4
  667. package/node_modules/zod/v4/locales/pt.js +0 -108
  668. package/node_modules/zod/v4/locales/ro.cjs +0 -146
  669. package/node_modules/zod/v4/locales/ro.d.cts +0 -5
  670. package/node_modules/zod/v4/locales/ro.d.ts +0 -4
  671. package/node_modules/zod/v4/locales/ro.js +0 -119
  672. package/node_modules/zod/v4/locales/ru.cjs +0 -183
  673. package/node_modules/zod/v4/locales/ru.d.cts +0 -5
  674. package/node_modules/zod/v4/locales/ru.d.ts +0 -4
  675. package/node_modules/zod/v4/locales/ru.js +0 -156
  676. package/node_modules/zod/v4/locales/sl.cjs +0 -136
  677. package/node_modules/zod/v4/locales/sl.d.cts +0 -5
  678. package/node_modules/zod/v4/locales/sl.d.ts +0 -4
  679. package/node_modules/zod/v4/locales/sl.js +0 -109
  680. package/node_modules/zod/v4/locales/sv.cjs +0 -137
  681. package/node_modules/zod/v4/locales/sv.d.cts +0 -5
  682. package/node_modules/zod/v4/locales/sv.d.ts +0 -4
  683. package/node_modules/zod/v4/locales/sv.js +0 -110
  684. package/node_modules/zod/v4/locales/ta.cjs +0 -137
  685. package/node_modules/zod/v4/locales/ta.d.cts +0 -5
  686. package/node_modules/zod/v4/locales/ta.d.ts +0 -4
  687. package/node_modules/zod/v4/locales/ta.js +0 -110
  688. package/node_modules/zod/v4/locales/th.cjs +0 -137
  689. package/node_modules/zod/v4/locales/th.d.cts +0 -5
  690. package/node_modules/zod/v4/locales/th.d.ts +0 -4
  691. package/node_modules/zod/v4/locales/th.js +0 -110
  692. package/node_modules/zod/v4/locales/tr.cjs +0 -132
  693. package/node_modules/zod/v4/locales/tr.d.cts +0 -5
  694. package/node_modules/zod/v4/locales/tr.d.ts +0 -4
  695. package/node_modules/zod/v4/locales/tr.js +0 -105
  696. package/node_modules/zod/v4/locales/ua.cjs +0 -12
  697. package/node_modules/zod/v4/locales/ua.d.cts +0 -5
  698. package/node_modules/zod/v4/locales/ua.d.ts +0 -5
  699. package/node_modules/zod/v4/locales/ua.js +0 -5
  700. package/node_modules/zod/v4/locales/uk.cjs +0 -135
  701. package/node_modules/zod/v4/locales/uk.d.cts +0 -5
  702. package/node_modules/zod/v4/locales/uk.d.ts +0 -4
  703. package/node_modules/zod/v4/locales/uk.js +0 -108
  704. package/node_modules/zod/v4/locales/ur.cjs +0 -137
  705. package/node_modules/zod/v4/locales/ur.d.cts +0 -5
  706. package/node_modules/zod/v4/locales/ur.d.ts +0 -4
  707. package/node_modules/zod/v4/locales/ur.js +0 -110
  708. package/node_modules/zod/v4/locales/uz.cjs +0 -137
  709. package/node_modules/zod/v4/locales/uz.d.cts +0 -5
  710. package/node_modules/zod/v4/locales/uz.d.ts +0 -4
  711. package/node_modules/zod/v4/locales/uz.js +0 -110
  712. package/node_modules/zod/v4/locales/vi.cjs +0 -135
  713. package/node_modules/zod/v4/locales/vi.d.cts +0 -5
  714. package/node_modules/zod/v4/locales/vi.d.ts +0 -4
  715. package/node_modules/zod/v4/locales/vi.js +0 -108
  716. package/node_modules/zod/v4/locales/yo.cjs +0 -134
  717. package/node_modules/zod/v4/locales/yo.d.cts +0 -5
  718. package/node_modules/zod/v4/locales/yo.d.ts +0 -4
  719. package/node_modules/zod/v4/locales/yo.js +0 -107
  720. package/node_modules/zod/v4/locales/zh-CN.cjs +0 -136
  721. package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -5
  722. package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
  723. package/node_modules/zod/v4/locales/zh-CN.js +0 -109
  724. package/node_modules/zod/v4/locales/zh-TW.cjs +0 -134
  725. package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -5
  726. package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
  727. package/node_modules/zod/v4/locales/zh-TW.js +0 -107
  728. package/node_modules/zod/v4/mini/checks.cjs +0 -34
  729. package/node_modules/zod/v4/mini/checks.d.cts +0 -1
  730. package/node_modules/zod/v4/mini/checks.d.ts +0 -1
  731. package/node_modules/zod/v4/mini/checks.js +0 -1
  732. package/node_modules/zod/v4/mini/coerce.cjs +0 -52
  733. package/node_modules/zod/v4/mini/coerce.d.cts +0 -7
  734. package/node_modules/zod/v4/mini/coerce.d.ts +0 -7
  735. package/node_modules/zod/v4/mini/coerce.js +0 -22
  736. package/node_modules/zod/v4/mini/external.cjs +0 -63
  737. package/node_modules/zod/v4/mini/external.d.cts +0 -13
  738. package/node_modules/zod/v4/mini/external.d.ts +0 -13
  739. package/node_modules/zod/v4/mini/external.js +0 -14
  740. package/node_modules/zod/v4/mini/index.cjs +0 -32
  741. package/node_modules/zod/v4/mini/index.d.cts +0 -3
  742. package/node_modules/zod/v4/mini/index.d.ts +0 -3
  743. package/node_modules/zod/v4/mini/index.js +0 -3
  744. package/node_modules/zod/v4/mini/iso.cjs +0 -64
  745. package/node_modules/zod/v4/mini/iso.d.cts +0 -22
  746. package/node_modules/zod/v4/mini/iso.d.ts +0 -22
  747. package/node_modules/zod/v4/mini/iso.js +0 -34
  748. package/node_modules/zod/v4/mini/package.json +0 -7
  749. package/node_modules/zod/v4/mini/parse.cjs +0 -16
  750. package/node_modules/zod/v4/mini/parse.d.cts +0 -1
  751. package/node_modules/zod/v4/mini/parse.d.ts +0 -1
  752. package/node_modules/zod/v4/mini/parse.js +0 -1
  753. package/node_modules/zod/v4/mini/schemas.cjs +0 -1083
  754. package/node_modules/zod/v4/mini/schemas.d.cts +0 -445
  755. package/node_modules/zod/v4/mini/schemas.d.ts +0 -445
  756. package/node_modules/zod/v4/mini/schemas.js +0 -961
  757. package/node_modules/zod/v4/package.json +0 -7
  758. package/node_modules/zod/v4-mini/index.cjs +0 -32
  759. package/node_modules/zod/v4-mini/index.d.cts +0 -3
  760. package/node_modules/zod/v4-mini/index.d.ts +0 -3
  761. package/node_modules/zod/v4-mini/index.js +0 -3
  762. package/node_modules/zod/v4-mini/package.json +0 -7
  763. /package/dist/{rolldown-runtime-D7D4PA-g.js → .setup/rolldown-runtime-D7D4PA-g.mjs} +0 -0
@@ -1,1224 +0,0 @@
1
- import { randomBytes } from "node:crypto";
2
- import { expect, test } from "vitest";
3
-
4
- import * as z from "zod/v4";
5
-
6
- const minFive = z.string().min(5, "min5");
7
- const maxFive = z.string().max(5, "max5");
8
- const justFive = z.string().length(5);
9
- const nonempty = z.string().min(1, "nonempty");
10
- const includes = z.string().includes("includes");
11
- const includesFromIndex2 = z.string().includes("includes", { position: 2 });
12
- const startsWith = z.string().startsWith("startsWith");
13
- const endsWith = z.string().endsWith("endsWith");
14
-
15
- test("length checks", () => {
16
- minFive.parse("12345");
17
- minFive.parse("123456");
18
- maxFive.parse("12345");
19
- maxFive.parse("1234");
20
- nonempty.parse("1");
21
- justFive.parse("12345");
22
-
23
- expect(() => minFive.parse("1234")).toThrow();
24
- expect(() => maxFive.parse("123456")).toThrow();
25
- expect(() => nonempty.parse("")).toThrow();
26
- expect(() => justFive.parse("1234")).toThrow();
27
- expect(() => justFive.parse("123456")).toThrow();
28
- });
29
-
30
- test("includes", () => {
31
- includes.parse("XincludesXX");
32
- includesFromIndex2.parse("XXXincludesXX");
33
-
34
- expect(() => includes.parse("XincludeXX")).toThrow();
35
- expect(() => includesFromIndex2.parse("XincludesXX")).toThrow();
36
- });
37
-
38
- test("includes with string error message", () => {
39
- const schema = z.string().includes("test", "must contain test");
40
- schema.parse("this is a test");
41
-
42
- expect(schema.safeParse("this is invalid")).toMatchInlineSnapshot(`
43
- {
44
- "error": [ZodError: [
45
- {
46
- "origin": "string",
47
- "code": "invalid_format",
48
- "format": "includes",
49
- "includes": "test",
50
- "path": [],
51
- "message": "must contain test"
52
- }
53
- ]],
54
- "success": false,
55
- }
56
- `);
57
- });
58
-
59
- test("startswith/endswith", () => {
60
- startsWith.parse("startsWithX");
61
- endsWith.parse("XendsWith");
62
-
63
- expect(() => startsWith.parse("x")).toThrow();
64
- expect(() => endsWith.parse("x")).toThrow();
65
- });
66
-
67
- test("email validations", () => {
68
- const validEmails = [
69
- `email@domain.com`,
70
- `firstname.lastname@domain.com`,
71
- `email@subdomain.domain.com`,
72
- `firstname+lastname@domain.com`,
73
- `1234567890@domain.com`,
74
- `email@domain-one.com`,
75
- `_______@domain.com`,
76
- `email@domain.name`,
77
- `email@domain.co.jp`,
78
- `firstname-lastname@domain.com`,
79
- `very.common@example.com`,
80
- `disposable.style.email.with+symbol@example.com`,
81
- `other.email-with-hyphen@example.com`,
82
- `fully-qualified-domain@example.com`,
83
- `user.name+tag+sorting@example.com`,
84
- `x@example.com`,
85
- `mojojojo@asdf.example.com`,
86
- `example-indeed@strange-example.com`,
87
- `example@s.example`,
88
- `user-@example.org`,
89
- `user@my-example.com`,
90
- `a@b.cd`,
91
- `work+user@mail.com`,
92
- `tom@test.te-st.com`,
93
- `something@subdomain.domain-with-hyphens.tld`,
94
- `common'name@domain.com`,
95
- `francois@etu.inp-n7.fr`,
96
- ];
97
- const invalidEmails = [
98
- // no "printable characters"
99
- // `user%example.com@example.org`,
100
- // `mailhost!username@example.org`,
101
- // `test/test@test.com`,
102
-
103
- // double @
104
- `francois@@etu.inp-n7.fr`,
105
- // do not support quotes
106
- `"email"@domain.com`,
107
- `"e asdf sadf ?<>ail"@domain.com`,
108
- `" "@example.org`,
109
- `"john..doe"@example.org`,
110
- `"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com`,
111
- // do not support comma
112
- `a,b@domain.com`,
113
-
114
- // do not support IPv4
115
- `email@123.123.123.123`,
116
- `email@[123.123.123.123]`,
117
- `postmaster@123.123.123.123`,
118
- `user@[68.185.127.196]`,
119
- `ipv4@[85.129.96.247]`,
120
- `valid@[79.208.229.53]`,
121
- `valid@[255.255.255.255]`,
122
- `valid@[255.0.55.2]`,
123
- `valid@[255.0.55.2]`,
124
-
125
- // do not support ipv6
126
- `hgrebert0@[IPv6:4dc8:ac7:ce79:8878:1290:6098:5c50:1f25]`,
127
- `bshapiro4@[IPv6:3669:c709:e981:4884:59a3:75d1:166b:9ae]`,
128
- `jsmith@[IPv6:2001:db8::1]`,
129
- `postmaster@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334]`,
130
- `postmaster@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:192.168.1.1]`,
131
-
132
- // microsoft test cases
133
- `plainaddress`,
134
- `#@%^%#$@#$@#.com`,
135
- `@domain.com`,
136
- `Joe Smith &lt;email@domain.com&gt;`,
137
- `email.domain.com`,
138
- `email@domain@domain.com`,
139
- `.email@domain.com`,
140
- `email.@domain.com`,
141
- `email..email@domain.com`,
142
- `あいうえお@domain.com`,
143
- `email@domain.com (Joe Smith)`,
144
- `email@domain`,
145
- `email@-domain.com`,
146
- `email@111.222.333.44444`,
147
- `email@domain..com`,
148
- `Abc.example.com`,
149
- `A@b@c@example.com`,
150
- `colin..hacks@domain.com`,
151
- `a"b(c)d,e:f;g<h>i[j\k]l@example.com`,
152
- `just"not"right@example.com`,
153
- `this is"not\allowed@example.com`,
154
- `this\ still\"not\\allowed@example.com`,
155
-
156
- // random
157
- `i_like_underscore@but_its_not_allowed_in_this_part.example.com`,
158
- `QA[icon]CHOCOLATE[icon]@test.com`,
159
- `invalid@-start.com`,
160
- `invalid@end.com-`,
161
- `a.b@c.d`,
162
- `invalid@[1.1.1.-1]`,
163
- `invalid@[68.185.127.196.55]`,
164
- `temp@[192.168.1]`,
165
- `temp@[9.18.122.]`,
166
- `double..point@test.com`,
167
- `asdad@test..com`,
168
- `asdad@hghg...sd...au`,
169
- `asdad@hghg........au`,
170
- `invalid@[256.2.2.48]`,
171
- `invalid@[256.2.2.48]`,
172
- `invalid@[999.465.265.1]`,
173
- `jkibbey4@[IPv6:82c4:19a8::70a9:2aac:557::ea69:d985:28d]`,
174
- `mlivesay3@[9952:143f:b4df:2179:49a1:5e82:b92e:6b6]`,
175
- `gbacher0@[IPv6:bc37:4d3f:5048:2e26:37cc:248e:df8e:2f7f:af]`,
176
- `invalid@[IPv6:5348:4ed3:5d38:67fb:e9b:acd2:c13:192.168.256.1]`,
177
- `test@.com`,
178
- `aaaaaaaaaaaaaaalongemailthatcausesregexDoSvulnerability@test.c`,
179
- ];
180
- const emailSchema = z.string().email();
181
-
182
- expect(
183
- validEmails.every((email) => {
184
- return emailSchema.safeParse(email).success;
185
- })
186
- ).toBe(true);
187
- expect(
188
- invalidEmails.every((email) => {
189
- return emailSchema.safeParse(email).success === false;
190
- })
191
- ).toBe(true);
192
- });
193
-
194
- test("base64 validations", () => {
195
- const validBase64Strings = [
196
- "SGVsbG8gV29ybGQ=", // "Hello World"
197
- "VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==", // "This is an encoded string"
198
- "TWFueSBoYW5kcyBtYWtlIGxpZ2h0IHdvcms=", // "Many hands make light work"
199
- "UGF0aWVuY2UgaXMgdGhlIGtleSB0byBzdWNjZXNz", // "Patience is the key to success"
200
- "QmFzZTY0IGVuY29kaW5nIGlzIGZ1bg==", // "Base64 encoding is fun"
201
- "MTIzNDU2Nzg5MA==", // "1234567890"
202
- "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=", // "abcdefghijklmnopqrstuvwxyz"
203
- "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo=", // "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
204
- "ISIkJSMmJyonKCk=", // "!\"#$%&'()*"
205
- "", // Empty string is technically a valid base64
206
- ];
207
-
208
- for (const str of validBase64Strings) {
209
- expect(str + z.string().base64().safeParse(str).success).toBe(`${str}true`);
210
- }
211
-
212
- const invalidBase64Strings = [
213
- "12345", // Not padded correctly, not a multiple of 4 characters
214
- "SGVsbG8gV29ybGQ", // Missing padding
215
- "VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw", // Missing padding
216
- "!UGF0aWVuY2UgaXMgdGhlIGtleSB0byBzdWNjZXNz", // Invalid character '!'
217
- "?QmFzZTY0IGVuY29kaW5nIGlzIGZ1bg==", // Invalid character '?'
218
- ".MTIzND2Nzg5MC4=", // Invalid character '.'
219
- "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo", // Missing padding
220
- // Whitespace is not part of canonical base64 (RFC 4648 §3.3) — atob() strips
221
- // whitespace internally before validating, so the length check alone would
222
- // accept "123 " etc.
223
- "123 ", // bypasses length-mod-4 via trailing whitespace
224
- "SGVsbG8gV29ybGQ= ", // trailing space
225
- " SGVsbG8gV29ybGQ=", // leading space
226
- "SGVsbG8gV29ybGQ=\n", // trailing newline
227
- "SGVs bG8gV29ybGQ=", // internal space
228
- "SGVs\nbG8gV29ybGQ=", // internal newline
229
- "SGVs\tbG8gV29ybGQ=", // internal tab
230
- ];
231
-
232
- for (const str of invalidBase64Strings) {
233
- expect(str + z.string().base64().safeParse(str).success).toBe(`${str}false`);
234
- }
235
- });
236
-
237
- test("base64url validations", () => {
238
- const base64url = z.string().base64url();
239
-
240
- const validBase64URLStrings = [
241
- "SGVsbG8gV29ybGQ", // "Hello World"
242
-
243
- "VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw", // "This is an encoded string"
244
-
245
- "TWFueSBoYW5kcyBtYWtlIGxpZ2h0IHdvcms", // "Many hands make light work"
246
-
247
- "UGF0aWVuY2UgaXMgdGhlIGtleSB0byBzdWNjZXNz", // "Patience is the key to success"
248
- "QmFzZTY0IGVuY29kaW5nIGlzIGZ1bg", // "Base64 encoding is fun"
249
-
250
- "MTIzNDU2Nzg5MA", // "1234567890"
251
-
252
- "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo", // "abcdefghijklmnopqrstuvwxyz"
253
-
254
- "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo", // "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
255
-
256
- "ISIkJSMmJyonKCk", // "!\"#$%&'()*"
257
-
258
- "", // Empty string is technically valid base64url
259
- "w7_Dv8O-w74K", // ÿÿþþ
260
- "123456",
261
- ];
262
-
263
- for (const str of validBase64URLStrings) {
264
- expect(str + base64url.safeParse(str).success).toBe(`${str}true`);
265
- }
266
-
267
- const invalidBase64URLStrings = [
268
- "w7/Dv8O+w74K", // Has + and / characters (is base64)
269
- "12345", // Invalid length (not a multiple of 4 characters when adding allowed number of padding characters)
270
- "12345===", // Not padded correctly
271
- "!UGF0aWVuY2UgaXMgdGhlIGtleSB0byBzdWNjZXNz", // Invalid character '!'
272
- "?QmFzZTY0IGVuY29kaW5nIGlzIGZ1bg==", // Invalid character '?'
273
- ".MTIzND2Nzg5MC4=", // Invalid character '.'
274
-
275
- // disallow valid padding
276
- "SGVsbG8gV29ybGQ=", // "Hello World" with padding
277
- "VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==", // "This is an encoded string" with padding
278
- "TWFueSBoYW5kcyBtYWtlIGxpZ2h0IHdvcms=", // "Many hands make light work" with padding
279
- "QmFzZTY0IGVuY29kaW5nIGlzIGZ1bg==", // "Base64 encoding is fun" with padding
280
- "MTIzNDU2Nzg5MA==", // "1234567890" with padding
281
- "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=", // "abcdefghijklmnopqrstuvwxyz with padding"
282
- "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo=", // "ABCDEFGHIJKLMNOPQRSTUVWXYZ" with padding
283
- "ISIkJSMmJyonKCk=", // "!\"#$%&'()*" with padding
284
- ];
285
-
286
- for (const str of invalidBase64URLStrings) {
287
- expect(str + base64url.safeParse(str).success).toBe(`${str}false`);
288
- }
289
- });
290
-
291
- test("big base64 and base64url", () => {
292
- const bigbase64 = randomBytes(1024 * 1024 * 10).toString("base64");
293
- z.base64().parse(bigbase64);
294
- const bigbase64url = randomBytes(1024 * 1024 * 10).toString("base64url");
295
- z.base64url().parse(bigbase64url);
296
- });
297
-
298
- function makeJwt(header: object, payload: object) {
299
- const headerBase64 = Buffer.from(JSON.stringify(header)).toString("base64url");
300
- const payloadBase64 = Buffer.from(JSON.stringify(payload)).toString("base64url");
301
- const signature = "signature"; // Placeholder for the signature
302
- return `${headerBase64}.${payloadBase64}.${signature}`;
303
- }
304
-
305
- test("jwt token", () => {
306
- const jwt = z.string().jwt();
307
- expect(() => jwt.parse("invalid")).toThrow();
308
- expect(() => jwt.parse("invalid.invalid")).toThrow();
309
- expect(() => jwt.parse("invalid.invalid.invalid")).toThrow();
310
-
311
- // Valid JWTs
312
- const es256jwt = z.string().jwt({ alg: "ES256" });
313
- const d1 = makeJwt({ typ: "JWT", alg: "ES256" }, {});
314
- jwt.parse(d1);
315
- es256jwt.parse(d1);
316
-
317
- // Invalid header
318
- const d2 = makeJwt({}, {});
319
- expect(() => jwt.parse(d2)).toThrow();
320
-
321
- // Wrong algorithm
322
- const d3 = makeJwt({ typ: "JWT", alg: "RS256" }, {});
323
- expect(() => es256jwt.parse(d3)).toThrow();
324
-
325
- // missing typ is fine
326
- const d4 = makeJwt({ alg: "HS256" }, {});
327
- jwt.parse(d4);
328
-
329
- // type isn't JWT
330
- const d5 = makeJwt({ typ: "SUP", alg: "HS256" }, { foo: "bar" });
331
- expect(() => jwt.parse(d5)).toThrow();
332
- });
333
-
334
- test("url validations", () => {
335
- const url = z.string().url();
336
- url.parse("http://google.com");
337
- url.parse("https://google.com/asdf?asdf=ljk3lk4&asdf=234#asdf");
338
- url.parse("https://anonymous:flabada@developer.mozilla.org/en-US/docs/Web/API/URL/password");
339
- url.parse("https://localhost");
340
- url.parse("https://my.local");
341
- url.parse("http://aslkfjdalsdfkjaf");
342
- url.parse("http://localhost");
343
-
344
- url.parse("c:");
345
-
346
- expect(() => url.parse("asdf")).toThrow();
347
- expect(() => url.parse("https:/")).toThrow();
348
- expect(() => url.parse("asdfj@lkjsdf.com")).toThrow();
349
- expect(() => url.parse("https://")).toThrow();
350
- });
351
-
352
- test("url preserves original input", () => {
353
- const url = z.string().url();
354
-
355
- // Test the specific case from the user report
356
- const input = "https://example.com?key=NUXOmHqWNVTapJkJJHw8BfD155AuqhH_qju_5fNmQ4ZHV7u8";
357
- const output = url.parse(input);
358
- expect(output).toBe(input); // Should preserve the original input exactly
359
-
360
- // Test other cases where URL constructor would normalize
361
- expect(url.parse("https://example.com?foo=bar")).toBe("https://example.com?foo=bar");
362
- expect(url.parse("http://example.com?test=123")).toBe("http://example.com?test=123");
363
- expect(url.parse("https://sub.example.com?param=value&other=data")).toBe(
364
- "https://sub.example.com?param=value&other=data"
365
- );
366
-
367
- // Test cases with trailing slashes are preserved
368
- expect(url.parse("https://example.com/")).toBe("https://example.com/");
369
- expect(url.parse("https://example.com/path/")).toBe("https://example.com/path/");
370
-
371
- // Test cases with paths and query parameters
372
- expect(url.parse("https://example.com/path?query=param")).toBe("https://example.com/path?query=param");
373
- });
374
-
375
- test("url trims whitespace", () => {
376
- const url = z.string().url();
377
-
378
- // Test trimming whitespace from URLs
379
- expect(url.parse(" https://example.com ")).toBe("https://example.com");
380
- expect(url.parse(" https://example.com/path?query=param ")).toBe("https://example.com/path?query=param");
381
- expect(url.parse("\t\nhttps://example.com\t\n")).toBe("https://example.com");
382
- expect(url.parse(" https://example.com?key=value ")).toBe("https://example.com?key=value");
383
-
384
- // Test that URLs without extra whitespace are unchanged
385
- expect(url.parse("https://example.com")).toBe("https://example.com");
386
- expect(url.parse("https://example.com/path")).toBe("https://example.com/path");
387
- });
388
-
389
- test("url normalize flag", () => {
390
- const normalizeUrl = z.url({ normalize: true });
391
- const preserveUrl = z.url(); // normalize: false/undefined by default
392
-
393
- // Test that normalize flag causes URL normalization
394
- expect(normalizeUrl.parse("https://example.com?key=value")).toBe("https://example.com/?key=value");
395
- expect(normalizeUrl.parse("http://example.com?test=123")).toBe("http://example.com/?test=123");
396
-
397
- // Test with already normalized URLs
398
- expect(normalizeUrl.parse("https://example.com/")).toBe("https://example.com/");
399
- expect(normalizeUrl.parse("https://example.com/path?query=param")).toBe("https://example.com/path?query=param");
400
-
401
- // Test complex URLs with normalization
402
- expect(normalizeUrl.parse("https://example.com/../?key=value")).toBe("https://example.com/?key=value");
403
- expect(normalizeUrl.parse("https://example.com/./path?key=value")).toBe("https://example.com/path?key=value");
404
-
405
- // Compare with non-normalize behavior
406
- expect(preserveUrl.parse("https://example.com?key=value")).toBe("https://example.com?key=value");
407
- expect(preserveUrl.parse("http://example.com?test=123")).toBe("http://example.com?test=123");
408
-
409
- // Test trimming with normalize
410
- expect(normalizeUrl.parse(" https://example.com?key=value ")).toBe("https://example.com/?key=value");
411
- expect(preserveUrl.parse(" https://example.com?key=value ")).toBe("https://example.com?key=value");
412
- });
413
-
414
- test("url normalize with hostname and protocol constraints", () => {
415
- const constrainedNormalizeUrl = z.url({
416
- normalize: true,
417
- protocol: /^https$/,
418
- hostname: /^example\.com$/,
419
- });
420
-
421
- // Test that normalization works with constraints
422
- expect(constrainedNormalizeUrl.parse("https://example.com?key=value")).toBe("https://example.com/?key=value");
423
-
424
- // Test that constraints are still enforced
425
- expect(() => constrainedNormalizeUrl.parse("http://example.com?key=value")).toThrow();
426
- expect(() => constrainedNormalizeUrl.parse("https://other.com?key=value")).toThrow();
427
- });
428
-
429
- test("httpurl", () => {
430
- const httpUrl = z.url({
431
- protocol: /^https?$/,
432
- hostname: z.regexes.domain,
433
- // /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/
434
- });
435
-
436
- httpUrl.parse("https://example.com");
437
- httpUrl.parse("http://example.com");
438
- // ports
439
- httpUrl.parse("https://example.com:8080");
440
- httpUrl.parse("http://example.com:8080");
441
- // subdomains
442
- httpUrl.parse("https://sub.example.com");
443
- httpUrl.parse("http://sub.example.com");
444
- // paths
445
- httpUrl.parse("https://example.com/path/to/resource");
446
- httpUrl.parse("http://example.com/path/to/resource");
447
- // query parameters
448
- httpUrl.parse("https://example.com/path?query=param");
449
- httpUrl.parse("http://example.com/path?query=param");
450
- // fragment identifiers
451
- httpUrl.parse("https://example.com/path#fragment");
452
- httpUrl.parse("http://example.com/path#fragment");
453
- // fails
454
- expect(() => httpUrl.parse("ftp://example.com")).toThrow();
455
- expect(() => httpUrl.parse("shttp://example.com")).toThrow();
456
- expect(() => httpUrl.parse("httpz://example.com")).toThrow();
457
- expect(() => httpUrl.parse("http://")).toThrow();
458
- expect(() => httpUrl.parse("http://localhost")).toThrow();
459
- expect(() => httpUrl.parse("http://-asdf.com")).toThrow();
460
- expect(() =>
461
- httpUrl.parse(
462
- "http://asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdf.com"
463
- )
464
- ).toThrow();
465
- expect(() => httpUrl.parse("http://asdf.c")).toThrow();
466
- expect(() => httpUrl.parse("mailto:asdf@lckj.com")).toThrow();
467
- // missing // after protocol
468
- expect(() => httpUrl.parse("http:example.com")).toThrow();
469
- expect(() => httpUrl.parse("https:example.com")).toThrow();
470
- // missing one /
471
- expect(() => httpUrl.parse("https:/www.google.com")).toThrow();
472
- expect(() => httpUrl.parse("http:/example.com")).toThrow();
473
- });
474
-
475
- test("url error overrides", () => {
476
- try {
477
- z.string().url().parse("https");
478
- } catch (err) {
479
- expect((err as z.ZodError).issues[0].message).toEqual("Invalid URL");
480
- }
481
- try {
482
- z.string().url("badurl").parse("https");
483
- } catch (err) {
484
- expect((err as z.ZodError).issues[0].message).toEqual("badurl");
485
- }
486
- try {
487
- z.string().url({ message: "badurl" }).parse("https");
488
- } catch (err) {
489
- expect((err as z.ZodError).issues[0].message).toEqual("badurl");
490
- }
491
- });
492
-
493
- test("emoji validations", () => {
494
- const emoji = z.string().emoji();
495
-
496
- emoji.parse("👋👋👋👋");
497
- emoji.parse("🍺👩‍🚀🫡");
498
- emoji.parse("💚💙💜💛❤️");
499
- emoji.parse("🐛🗝🐏🍡🎦🚢🏨💫🎌☘🗡😹🔒🎬➡️🍹🗂🚨⚜🕑〽️🚦🌊🍴💍🍌💰😳🌺🍃");
500
- emoji.parse("🇹🇷🤽🏿‍♂️");
501
- emoji.parse(
502
- "😀😁😂🤣😃😄😅😆😉😊😋😎😍😘🥰😗😙😚☺️☺🙂🤗🤩🤔🤨😐😑😶🙄😏😣😥😮🤐😯😪😫😴😌😛😜😝🤤😒😓😔😕🙃🤑😲☹️☹🙁😖😞😟😤😢😭😦😧😨😩🤯😬😰😱🥵🥶😳🤪😵😡😠🤬😷🤒🤕🤢🤮🤧😇🤠🥳🥴🥺🤥🤫🤭🧐🤓😈👿🤡👹👺💀☠️☠👻👽👾🤖💩😺😸😹😻😼😽🙀😿😾🙈🙉🙊🏻🏼🏽🏾🏿👶👶🏻👶🏼👶🏽👶🏾👶🏿🧒🧒🏻🧒🏼🧒🏽🧒🏾🧒🏿👦👦🏻👦🏼👦🏽👦🏾👦🏿👧👧🏻👧🏼👧🏽👧🏾👧🏿🧑🧑🏻🧑🏼🧑🏽🧑🏾🧑🏿👨👨🏻👨🏼👨🏽👨🏾👨🏿👩👩🏻👩🏼👩🏽👩🏾👩🏿🧓🧓🏻🧓🏼🧓🏽🧓🏾🧓🏿👴👴🏻👴🏼👴🏽👴🏾👴🏿👵👵🏻👵🏼👵🏽👵🏾👵🏿👨‍⚕️👨‍⚕👨🏻‍⚕️👨🏻‍⚕👨🏼‍⚕️👨🏼‍⚕👨🏽‍⚕️👨🏽‍⚕👨🏾‍⚕️👨🏾‍⚕👨🏿‍⚕️👨🏿‍⚕👩‍⚕️👩‍⚕👩🏻‍⚕️👩🏻‍⚕👩🏼‍⚕️👩🏼‍⚕👩🏽‍⚕️👩🏽‍⚕👩🏾‍⚕️👩🏾‍⚕👩🏿‍⚕️👩🏿‍⚕👨‍🎓👨🏻‍🎓👨🏼‍🎓👨🏽‍🎓👨🏾‍🎓👨🏿‍🎓👩‍🎓👩🏻‍🎓👩🏼‍🎓👩🏽‍🎓👩🏾‍🎓👩🏿‍🎓👨‍🏫👨🏻‍🏫👨🏼‍🏫👨🏽‍🏫👨🏾‍🏫👨🏿‍🏫👩‍🏫👩🏻‍🏫👩🏼‍🏫👩🏽‍🏫👩🏾‍🏫👩🏿‍🏫👨‍⚖️👨‍⚖👨🏻‍⚖️👨🏻‍⚖👨🏼‍⚖️👨🏼‍⚖👨🏽‍⚖️👨🏽‍⚖👨🏾‍⚖️👨🏾‍⚖👨🏿‍⚖️👨🏿‍⚖👩‍⚖️👩‍⚖👩🏻‍⚖️👩🏻‍⚖👩🏼‍⚖️👩🏼‍⚖👩🏽‍⚖️👩🏽‍⚖👩🏾‍⚖️👩🏾‍⚖👩🏿‍⚖️👩🏿‍⚖👨‍🌾👨🏻‍🌾👨🏼‍🌾👨🏽‍🌾👨🏾‍🌾👨🏿‍🌾👩‍🌾👩🏻‍🌾👩🏼‍🌾👩🏽‍🌾👩🏾‍🌾👩🏿‍🌾👨‍🍳👨🏻‍🍳👨🏼‍🍳👨🏽‍🍳👨🏾‍🍳👨🏿‍🍳👩‍🍳👩🏻‍🍳👩🏼‍🍳👩🏽‍🍳👩🏾‍🍳👩🏿‍🍳👨‍🔧👨🏻‍🔧👨🏼‍🔧👨🏽‍🔧👨🏾‍🔧👨🏿‍🔧👩‍🔧👩🏻‍🔧👩🏼‍🔧👩🏽‍🔧👩🏾‍🔧👩🏿‍🔧👨‍🏭👨🏻‍🏭👨🏼‍🏭👨🏽‍🏭👨🏾‍🏭👨🏿‍🏭👩‍🏭👩🏻‍🏭👩🏼‍🏭👩🏽‍🏭👩🏾‍🏭👩🏿‍🏭👨‍💼👨🏻‍💼👨🏼‍💼👨🏽‍💼👨🏾‍💼👨🏿‍💼👩‍💼👩🏻‍💼👩🏼‍💼👩🏽‍💼👩🏾‍💼👩🏿‍💼👨‍🔬👨🏻‍🔬👨🏼‍🔬👨🏽‍🔬👨🏾‍🔬👨🏿‍🔬👩‍🔬👩🏻‍🔬👩🏼‍🔬👩🏽‍🔬👩🏾‍🔬👩🏿‍🔬👨‍💻👨🏻‍💻👨🏼‍💻👨🏽‍💻👨🏾‍💻👨🏿‍💻👩‍💻👩🏻‍💻👩🏼‍💻👩🏽‍💻👩🏾‍💻👩🏿‍💻👨‍🎤👨🏻‍🎤👨🏼‍🎤👨🏽‍🎤👨🏾‍🎤👨🏿‍🎤👩‍🎤👩🏻‍🎤👩🏼‍🎤👩🏽‍🎤👩🏾‍🎤👩🏿‍🎤👨‍🎨👨🏻‍🎨👨🏼‍🎨👨🏽‍🎨👨🏾‍🎨👨🏿‍🎨👩‍🎨👩🏻‍🎨👩🏼‍🎨👩🏽‍🎨👩🏾‍🎨👩🏿‍🎨👨‍✈️👨‍✈👨🏻‍✈️👨🏻‍✈👨🏼‍✈️👨🏼‍✈👨🏽‍✈️👨🏽‍✈👨🏾‍✈️👨🏾‍✈👨🏿‍✈️👨🏿‍✈👩‍✈️👩‍✈👩🏻‍✈️👩🏻‍✈👩🏼‍✈️👩🏼‍✈👩🏽‍✈️👩🏽‍✈👩🏾‍✈️👩🏾‍✈👩🏿‍✈️👩🏿‍✈👨‍🚀👨🏻‍🚀👨🏼‍🚀👨🏽‍🚀👨🏾‍🚀👨🏿‍🚀👩‍🚀👩🏻‍🚀👩🏼‍🚀👩🏽‍🚀👩🏾‍🚀👩🏿‍🚀👨‍🚒👨🏻‍🚒👨🏼‍🚒👨🏽‍🚒👨🏾‍🚒👨🏿‍🚒👩‍🚒👩🏻‍🚒👩🏼‍🚒👩🏽‍🚒👩🏾‍🚒👩🏿‍🚒👮👮🏻👮🏼👮🏽👮🏾👮🏿👮‍♂️👮‍♂👮🏻‍♂️👮🏻‍♂👮🏼‍♂️👮🏼‍♂👮🏽‍♂️👮🏽‍♂👮🏾‍♂️👮🏾‍♂👮🏿‍♂️👮🏿‍♂👮‍♀️👮‍♀👮🏻‍♀️👮🏻‍♀👮🏼‍♀️👮🏼‍♀👮🏽‍♀️👮🏽‍♀👮🏾‍♀️👮🏾‍♀👮🏿‍♀️👮🏿‍♀🕵️🕵🕵🏻🕵🏼🕵🏽🕵🏾🕵🏿🕵️‍♂️🕵‍♂️🕵️‍♂🕵‍♂🕵🏻‍♂️🕵🏻‍♂🕵🏼‍♂️🕵🏼‍♂🕵🏽‍♂️🕵🏽‍♂🕵🏾‍♂️🕵🏾‍♂🕵🏿‍♂️🕵🏿‍♂🕵️‍♀️🕵‍♀️🕵️‍♀🕵‍♀🕵🏻‍♀️🕵🏻‍♀🕵🏼‍♀️🕵🏼‍♀🕵🏽‍♀️🕵🏽‍♀🕵🏾‍♀️🕵🏾‍♀🕵🏿‍♀️🕵🏿‍♀💂💂🏻💂🏼💂🏽💂🏾💂🏿💂‍♂️💂‍♂💂🏻‍♂️💂🏻‍♂💂🏼‍♂️💂🏼‍♂💂🏽‍♂️💂🏽‍♂💂🏾‍♂️💂🏾‍♂💂🏿‍♂️💂🏿‍♂💂‍♀️💂‍♀💂🏻‍♀️💂🏻‍♀💂🏼‍♀️💂🏼‍♀💂🏽‍♀️💂🏽‍♀💂🏾‍♀️💂🏾‍♀💂🏿‍♀️💂🏿‍♀👷👷🏻👷🏼👷🏽👷🏾👷🏿👷‍♂️👷‍♂👷🏻‍♂️👷🏻‍♂👷🏼‍♂️👷🏼‍♂👷🏽‍♂️👷🏽‍♂👷🏾‍♂️👷🏾‍♂👷🏿‍♂️👷🏿‍♂👷‍♀️👷‍♀👷🏻‍♀️👷🏻‍♀👷🏼‍♀️👷🏼‍♀👷🏽‍♀️👷🏽‍♀👷🏾‍♀️👷🏾‍♀👷🏿‍♀️👷🏿‍♀🤴🤴🏻🤴🏼🤴🏽🤴🏾🤴🏿👸👸🏻👸🏼👸🏽👸🏾👸🏿👳👳🏻👳🏼👳🏽👳🏾👳🏿👳‍♂️👳‍♂👳🏻‍♂️👳🏻‍♂👳🏼‍♂️👳🏼‍♂👳🏽‍♂️👳🏽‍♂👳🏾‍♂️👳🏾‍♂👳🏿‍♂️👳🏿‍♂👳‍♀️👳‍♀👳🏻‍♀️👳🏻‍♀👳🏼‍♀️👳🏼‍♀👳🏽‍♀️👳🏽‍♀👳🏾‍♀️👳🏾‍♀👳🏿‍♀️👳🏿‍♀👲👲🏻👲🏼👲🏽👲🏾👲🏿🧕🧕🏻🧕🏼🧕🏽🧕🏾🧕🏿🧔🧔🏻🧔🏼🧔🏽🧔🏾🧔🏿👱👱🏻👱🏼👱🏽👱🏾👱🏿👱‍♂️👱‍♂👱🏻‍♂️👱🏻‍♂👱🏼‍♂️👱🏼‍♂👱🏽‍♂️👱🏽‍♂👱🏾‍♂️👱🏾‍♂👱🏿‍♂️👱🏿‍♂👱‍♀️👱‍♀👱🏻‍♀️👱🏻‍♀👱🏼‍♀️👱🏼‍♀👱🏽‍♀️👱🏽‍♀👱🏾‍♀️👱🏾‍♀👱🏿‍♀️👱🏿‍♀👨‍🦰👨🏻‍🦰👨🏼‍🦰👨🏽‍🦰👨🏾‍🦰👨🏿‍🦰👩‍🦰👩🏻‍🦰👩🏼‍🦰👩🏽‍🦰👩🏾‍🦰👩🏿‍🦰👨‍🦱👨🏻‍🦱👨🏼‍🦱👨🏽‍🦱👨🏾‍🦱👨🏿‍🦱👩‍🦱👩🏻‍🦱👩🏼‍🦱👩🏽‍🦱👩🏾‍🦱👩🏿‍🦱👨‍🦲👨🏻‍🦲👨🏼‍🦲👨🏽‍🦲👨🏾‍🦲👨🏿‍🦲👩‍🦲👩🏻‍🦲👩🏼‍🦲👩🏽‍🦲👩🏾‍🦲👩🏿‍🦲👨‍🦳👨🏻‍🦳👨🏼‍🦳👨🏽‍🦳👨🏾‍🦳👨🏿‍🦳👩‍🦳👩🏻‍🦳👩🏼‍🦳👩🏽‍🦳👩🏾‍🦳👩🏿‍🦳🤵🤵🏻🤵🏼🤵🏽🤵🏾🤵🏿👰👰🏻👰🏼👰🏽👰🏾👰🏿🤰🤰🏻🤰🏼🤰🏽🤰🏾🤰🏿🤱🤱🏻🤱🏼🤱🏽🤱🏾🤱🏿👼👼🏻👼🏼👼🏽👼🏾👼🏿🎅🎅🏻🎅🏼🎅🏽🎅🏾🎅🏿🤶🤶🏻🤶🏼🤶🏽🤶🏾🤶🏿🦸🦸🏻🦸🏼🦸🏽🦸🏾🦸🏿🦸‍♀️🦸‍♀🦸🏻‍♀️🦸🏻‍♀🦸🏼‍♀️🦸🏼‍♀🦸🏽‍♀️🦸🏽‍♀🦸🏾‍♀️🦸🏾‍♀🦸🏿‍♀️🦸🏿‍♀🦸‍♂️🦸‍♂🦸🏻‍♂️🦸🏻‍♂🦸🏼‍♂️🦸🏼‍♂🦸🏽‍♂️🦸🏽‍♂🦸🏾‍♂️🦸🏾‍♂🦸🏿‍♂️🦸🏿‍♂🦹🦹🏻🦹🏼🦹🏽🦹🏾🦹🏿🦹‍♀️🦹‍♀🦹🏻‍♀️🦹🏻‍♀🦹🏼‍♀️🦹🏼‍♀🦹🏽‍♀️🦹🏽‍♀🦹🏾‍♀️🦹🏾‍♀🦹🏿‍♀️🦹🏿‍♀🦹‍♂️🦹‍♂🦹🏻‍♂️🦹🏻‍♂🦹🏼‍♂️🦹🏼‍♂🦹🏽‍♂️🦹🏽‍♂🦹🏾‍♂️🦹🏾‍♂🦹🏿‍♂️🦹🏿‍♂🧙🧙🏻🧙🏼🧙🏽🧙🏾🧙🏿🧙‍♀️🧙‍♀🧙🏻‍♀️🧙🏻‍♀🧙🏼‍♀️🧙🏼‍♀🧙🏽‍♀️🧙🏽‍♀🧙🏾‍♀️🧙🏾‍♀🧙🏿‍♀️🧙🏿‍♀🧙‍♂️🧙‍♂🧙🏻‍♂️🧙🏻‍♂🧙🏼‍♂️🧙🏼‍♂🧙🏽‍♂️🧙🏽‍♂🧙🏾‍♂️🧙🏾‍♂🧙🏿‍♂️🧙🏿‍♂🧚🧚🏻🧚🏼🧚🏽🧚🏾🧚🏿🧚‍♀️🧚‍♀🧚🏻‍♀️🧚🏻‍♀🧚🏼‍♀️🧚🏼‍♀🧚🏽‍♀️🧚🏽‍♀🧚🏾‍♀️🧚🏾‍♀🧚🏿‍♀️🧚🏿‍♀🧚‍♂️🧚‍♂🧚🏻‍♂️🧚🏻‍♂🧚🏼‍♂️🧚🏼‍♂🧚🏽‍♂️🧚🏽‍♂🧚🏾‍♂️🧚🏾‍♂🧚🏿‍♂️🧚🏿‍♂🧛🧛🏻🧛🏼🧛🏽🧛🏾🧛🏿🧛‍♀️🧛‍♀🧛🏻‍♀️🧛🏻‍♀🧛🏼‍♀️🧛🏼‍♀🧛🏽‍♀️🧛🏽‍♀🧛🏾‍♀️🧛🏾‍♀🧛🏿‍♀️🧛🏿‍♀🧛‍♂️🧛‍♂🧛🏻‍♂️🧛🏻‍♂🧛🏼‍♂️🧛🏼‍♂🧛🏽‍♂️🧛🏽‍♂🧛🏾‍♂️🧛🏾‍♂🧛🏿‍♂️🧛🏿‍♂🧜🧜🏻🧜🏼🧜🏽🧜🏾🧜🏿🧜‍♀️🧜‍♀🧜🏻‍♀️🧜🏻‍♀🧜🏼‍♀️🧜🏼‍♀🧜🏽‍♀️🧜🏽‍♀🧜🏾‍♀️🧜🏾‍♀🧜🏿‍♀️🧜🏿‍♀🧜‍♂️🧜‍♂🧜🏻‍♂️🧜🏻‍♂🧜🏼‍♂️🧜🏼‍♂🧜🏽‍♂️🧜🏽‍♂🧜🏾‍♂️🧜🏾‍♂🧜🏿‍♂️🧜🏿‍♂🧝🧝🏻🧝🏼🧝🏽🧝🏾🧝🏿🧝‍♀️🧝‍♀🧝🏻‍♀️🧝🏻‍♀🧝🏼‍♀️🧝🏼‍♀🧝🏽‍♀️🧝🏽‍♀🧝🏾‍♀️🧝🏾‍♀🧝🏿‍♀️🧝🏿‍♀🧝‍♂️🧝‍♂🧝🏻‍♂️🧝🏻‍♂🧝🏼‍♂️🧝🏼‍♂🧝🏽‍♂️🧝🏽‍♂🧝🏾‍♂️🧝🏾‍♂🧝🏿‍♂️🧝🏿‍♂🧞🧞‍♀️🧞‍♀🧞‍♂️🧞‍♂🧟🧟‍♀️🧟‍♀🧟‍♂️🧟‍♂🙍🙍🏻🙍🏼🙍🏽🙍🏾🙍🏿🙍‍♂️🙍‍♂🙍🏻‍♂️🙍🏻‍♂🙍🏼‍♂️🙍🏼‍♂🙍🏽‍♂️🙍🏽‍♂🙍🏾‍♂️🙍🏾‍♂🙍🏿‍♂️🙍🏿‍♂🙍‍♀️🙍‍♀🙍🏻‍♀️🙍🏻‍♀🙍🏼‍♀️🙍🏼‍♀🙍🏽‍♀️🙍🏽‍♀🙍🏾‍♀️🙍🏾‍♀🙍🏿‍♀️🙍🏿‍♀🙎🙎🏻🙎🏼🙎🏽🙎🏾🙎🏿🙎‍♂️🙎‍♂🙎🏻‍♂️🙎🏻‍♂🙎🏼‍♂️🙎🏼‍♂🙎🏽‍♂️🙎🏽‍♂🙎🏾‍♂️🙎🏾‍♂🙎🏿‍♂️🙎🏿‍♂🙎‍♀️🙎‍♀🙎🏻‍♀️🙎🏻‍♀🙎🏼‍♀️🙎🏼‍♀🙎🏽‍♀️🙎🏽‍♀🙎🏾‍♀️🙎🏾‍♀🙎🏿‍♀️🙎🏿‍♀🙅🙅🏻🙅🏼🙅🏽🙅🏾🙅🏿🙅‍♂️🙅‍♂🙅🏻‍♂️🙅🏻‍♂🙅🏼‍♂️🙅🏼‍♂🙅🏽‍♂️🙅🏽‍♂🙅🏾‍♂️🙅🏾‍♂🙅🏿‍♂️🙅🏿‍♂🙅‍♀️🙅‍♀🙅🏻‍♀️🙅🏻‍♀🙅🏼‍♀️🙅🏼‍♀🙅🏽‍♀️🙅🏽‍♀🙅🏾‍♀️🙅🏾‍♀🙅🏿‍♀️🙅🏿‍♀🙆🙆🏻🙆🏼🙆🏽🙆🏾🙆🏿🙆‍♂️🙆‍♂🙆🏻‍♂️🙆🏻‍♂🙆🏼‍♂️🙆🏼‍♂🙆🏽‍♂️🙆🏽‍♂🙆🏾‍♂️🙆🏾‍♂🙆🏿‍♂️🙆🏿‍♂🙆‍♀️🙆‍♀🙆🏻‍♀️🙆🏻‍♀🙆🏼‍♀️🙆🏼‍♀🙆🏽‍♀️🙆🏽‍♀🙆🏾‍♀️🙆🏾‍♀🙆🏿‍♀️🙆🏿‍♀💁💁🏻💁🏼💁🏽💁🏾💁🏿💁‍♂️💁‍♂💁🏻‍♂️💁🏻‍♂💁🏼‍♂️💁🏼‍♂💁🏽‍♂️💁🏽‍♂💁🏾‍♂️💁🏾‍♂💁🏿‍♂️💁🏿‍♂💁‍♀️💁‍♀💁🏻‍♀️💁🏻‍♀💁🏼‍♀️💁🏼‍♀💁🏽‍♀️💁🏽‍♀💁🏾‍♀️💁🏾‍♀💁🏿‍♀️💁🏿‍♀🙋🙋🏻🙋🏼🙋🏽🙋🏾🙋🏿🙋‍♂️🙋‍♂🙋🏻‍♂️🙋🏻‍♂🙋🏼‍♂️🙋🏼‍♂🙋🏽‍♂️🙋🏽‍♂🙋🏾‍♂️🙋🏾‍♂🙋🏿‍♂️🙋🏿‍♂🙋‍♀️🙋‍♀🙋🏻‍♀️🙋🏻‍♀🙋🏼‍♀️🙋🏼‍♀🙋🏽‍♀️🙋🏽‍♀🙋🏾‍♀️🙋🏾‍♀🙋🏿‍♀️🙋🏿‍♀🙇🙇🏻🙇🏼🙇🏽🙇🏾🙇🏿🙇‍♂️🙇‍♂🙇🏻‍♂️🙇🏻‍♂🙇🏼‍♂️🙇🏼‍♂🙇🏽‍♂️🙇🏽‍♂🙇🏾‍♂️🙇🏾‍♂🙇🏿‍♂️🙇🏿‍♂🙇‍♀️🙇‍♀🙇🏻‍♀️🙇🏻‍♀🙇🏼‍♀️🙇🏼‍♀🙇🏽‍♀️🙇🏽‍♀🙇🏾‍♀️🙇🏾‍♀🙇🏿‍♀️🙇🏿‍♀🤦🤦🏻🤦🏼🤦🏽🤦🏾🤦🏿🤦‍♂️🤦‍♂🤦🏻‍♂️🤦🏻‍♂🤦🏼‍♂️🤦🏼‍♂🤦🏽‍♂️🤦🏽‍♂🤦🏾‍♂️🤦🏾‍♂🤦🏿‍♂️🤦🏿‍♂🤦‍♀️🤦‍♀🤦🏻‍♀️🤦🏻‍♀🤦🏼‍♀️🤦🏼‍♀🤦🏽‍♀️🤦🏽‍♀🤦🏾‍♀️🤦🏾‍♀🤦🏿‍♀️🤦🏿‍♀🤷🤷🏻🤷🏼🤷🏽🤷🏾🤷🏿🤷‍♂️🤷‍♂🤷🏻‍♂️🤷🏻‍♂🤷🏼‍♂️🤷🏼‍♂🤷🏽‍♂️🤷🏽‍♂🤷🏾‍♂️🤷🏾‍♂🤷🏿‍♂️🤷🏿‍♂🤷‍♀️🤷‍♀🤷🏻‍♀️🤷🏻‍♀🤷🏼‍♀️🤷🏼‍♀🤷🏽‍♀️🤷🏽‍♀🤷🏾‍♀️🤷🏾‍♀🤷🏿‍♀️🤷🏿‍♀💆💆🏻💆🏼💆🏽💆🏾💆🏿💆‍♂️💆‍♂💆🏻‍♂️💆🏻‍♂💆🏼‍♂️💆🏼‍♂💆🏽‍♂️💆🏽‍♂💆🏾‍♂️💆🏾‍♂💆🏿‍♂️💆🏿‍♂💆‍♀️💆‍♀💆🏻‍♀️💆🏻‍♀💆🏼‍♀️💆🏼‍♀💆🏽‍♀️💆🏽‍♀💆🏾‍♀️💆🏾‍♀💆🏿‍♀️💆🏿‍♀💇💇🏻💇🏼💇🏽💇🏾💇🏿💇‍♂️💇‍♂💇🏻‍♂️💇🏻‍♂💇🏼‍♂️💇🏼‍♂💇🏽‍♂️💇🏽‍♂💇🏾‍♂️💇🏾‍♂💇🏿‍♂️💇🏿‍♂💇‍♀️💇‍♀💇🏻‍♀️💇🏻‍♀💇🏼‍♀️💇🏼‍♀💇🏽‍♀️💇🏽‍♀💇🏾‍♀️💇🏾‍♀💇🏿‍♀️💇🏿‍♀🚶🚶🏻🚶🏼🚶🏽🚶🏾🚶🏿🚶‍♂️🚶‍♂🚶🏻‍♂️🚶🏻‍♂🚶🏼‍♂️🚶🏼‍♂🚶🏽‍♂️🚶🏽‍♂🚶🏾‍♂️🚶🏾‍♂🚶🏿‍♂️🚶🏿‍♂🚶‍♀️🚶‍♀🚶🏻‍♀️🚶🏻‍♀🚶🏼‍♀️🚶🏼‍♀🚶🏽‍♀️🚶🏽‍♀🚶🏾‍♀️🚶🏾‍♀🚶🏿‍♀️🚶🏿‍♀🏃🏃🏻🏃🏼🏃🏽🏃🏾🏃🏿🏃‍♂️🏃‍♂🏃🏻‍♂️🏃🏻‍♂🏃🏼‍♂️🏃🏼‍♂🏃🏽‍♂️🏃🏽‍♂🏃🏾‍♂️🏃🏾‍♂🏃🏿‍♂️🏃🏿‍♂🏃‍♀️🏃‍♀🏃🏻‍♀️🏃🏻‍♀🏃🏼‍♀️🏃🏼‍♀🏃🏽‍♀️🏃🏽‍♀🏃🏾‍♀️🏃🏾‍♀🏃🏿‍♀️🏃🏿‍♀💃💃🏻💃🏼💃🏽💃🏾💃🏿🕺🕺🏻🕺🏼🕺🏽🕺🏾🕺🏿👯👯‍♂️👯‍♂👯‍♀️👯‍♀🧖🧖🏻🧖🏼🧖🏽🧖🏾🧖🏿🧖‍♀️🧖‍♀🧖🏻‍♀️🧖🏻‍♀🧖🏼‍♀️🧖🏼‍♀🧖🏽‍♀️🧖🏽‍♀🧖🏾‍♀️🧖🏾‍♀🧖🏿‍♀️🧖🏿‍♀🧖‍♂️🧖‍♂🧖🏻‍♂️🧖🏻‍♂🧖🏼‍♂️🧖🏼‍♂🧖🏽‍♂️🧖🏽‍♂🧖🏾‍♂️🧖🏾‍♂🧖🏿‍♂️🧖🏿‍♂🧗🧗🏻🧗🏼🧗🏽🧗🏾🧗🏿🧗‍♀️🧗‍♀🧗🏻‍♀️🧗🏻‍♀🧗🏼‍♀️🧗🏼‍♀🧗🏽‍♀️🧗🏽‍♀🧗🏾‍♀️🧗🏾‍♀🧗🏿‍♀️🧗🏿‍♀🧗‍♂️🧗‍♂🧗🏻‍♂️🧗🏻‍♂🧗🏼‍♂️🧗🏼‍♂🧗🏽‍♂️🧗🏽‍♂🧗🏾‍♂️🧗🏾‍♂🧗🏿‍♂️🧗🏿‍♂🧘🧘🏻🧘🏼🧘🏽🧘🏾🧘🏿🧘‍♀️🧘‍♀🧘🏻‍♀️🧘🏻‍♀🧘🏼‍♀️🧘🏼‍♀🧘🏽‍♀️🧘🏽‍♀🧘🏾‍♀️🧘🏾‍♀🧘🏿‍♀️🧘🏿‍♀🧘‍♂️🧘‍♂🧘🏻‍♂️🧘🏻‍♂🧘🏼‍♂️🧘🏼‍♂🧘🏽‍♂️🧘🏽‍♂🧘🏾‍♂️🧘🏾‍♂🧘🏿‍♂️🧘🏿‍♂🛀🛀🏻🛀🏼🛀🏽🛀🏾🛀🏿🛌🛌🏻🛌🏼🛌🏽🛌🏾🛌🏿🕴️🕴🕴🏻🕴🏼🕴🏽🕴🏾🕴🏿🗣️🗣👤👥🤺🏇🏇🏻🏇🏼🏇🏽🏇🏾🏇🏿⛷️⛷🏂🏂🏻🏂🏼🏂🏽🏂🏾🏂🏿🏌️🏌🏌🏻🏌🏼🏌🏽🏌🏾🏌🏿🏌️‍♂️🏌‍♂️🏌️‍♂🏌‍♂🏌🏻‍♂️🏌🏻‍♂🏌🏼‍♂️🏌🏼‍♂🏌🏽‍♂️🏌🏽‍♂🏌🏾‍♂️🏌🏾‍♂🏌🏿‍♂️🏌🏿‍♂🏌️‍♀️🏌‍♀️🏌️‍♀🏌‍♀🏌🏻‍♀️🏌🏻‍♀🏌🏼‍♀️🏌🏼‍♀🏌🏽‍♀️🏌🏽‍♀🏌🏾‍♀️🏌🏾‍♀🏌🏿‍♀️🏌🏿‍♀🏄🏄🏻🏄🏼🏄🏽🏄🏾🏄🏿🏄‍♂️🏄‍♂🏄🏻‍♂️🏄🏻‍♂🏄🏼‍♂️🏄🏼‍♂🏄🏽‍♂️🏄🏽‍♂🏄🏾‍♂️🏄🏾‍♂🏄🏿‍♂️🏄🏿‍♂🏄‍♀️🏄‍♀🏄🏻‍♀️🏄🏻‍♀🏄🏼‍♀️🏄🏼‍♀🏄🏽‍♀️🏄🏽‍♀🏄🏾‍♀️🏄🏾‍♀🏄🏿‍♀️🏄🏿‍♀🚣🚣🏻🚣🏼🚣🏽🚣🏾🚣🏿🚣‍♂️🚣‍♂🚣🏻‍♂️🚣🏻‍♂🚣🏼‍♂️🚣🏼‍♂🚣🏽‍♂️🚣🏽‍♂🚣🏾‍♂️🚣🏾‍♂🚣🏿‍♂️🚣🏿‍♂🚣‍♀️🚣‍♀🚣🏻‍♀️🚣🏻‍♀🚣🏼‍♀️🚣🏼‍♀🚣🏽‍♀️🚣🏽‍♀🚣🏾‍♀️🚣🏾‍♀🚣🏿‍♀️🚣🏿‍♀🏊🏊🏻🏊🏼🏊🏽🏊🏾🏊🏿🏊‍♂️🏊‍♂🏊🏻‍♂️🏊🏻‍♂🏊🏼‍♂️🏊🏼‍♂🏊🏽‍♂️🏊🏽‍♂🏊🏾‍♂️🏊🏾‍♂🏊🏿‍♂️🏊🏿‍♂🏊‍♀️🏊‍♀🏊🏻‍♀️🏊🏻‍♀🏊🏼‍♀️🏊🏼‍♀🏊🏽‍♀️🏊🏽‍♀🏊🏾‍♀️🏊🏾‍♀🏊🏿‍♀️🏊🏿‍♀⛹️⛹⛹🏻⛹🏼⛹🏽⛹🏾⛹🏿⛹️‍♂️⛹‍♂️⛹️‍♂⛹‍♂⛹🏻‍♂️⛹🏻‍♂⛹🏼‍♂️⛹🏼‍♂⛹🏽‍♂️⛹🏽‍♂⛹🏾‍♂️⛹🏾‍♂⛹🏿‍♂️⛹🏿‍♂⛹️‍♀️⛹‍♀️⛹️‍♀⛹‍♀⛹🏻‍♀️⛹🏻‍♀⛹🏼‍♀️⛹🏼‍♀⛹🏽‍♀️⛹🏽‍♀⛹🏾‍♀️⛹🏾‍♀⛹🏿‍♀️⛹🏿‍♀🏋️🏋🏋🏻🏋🏼🏋🏽🏋🏾🏋🏿🏋️‍♂️🏋‍♂️🏋️‍♂🏋‍♂🏋🏻‍♂️🏋🏻‍♂🏋🏼‍♂️🏋🏼‍♂🏋🏽‍♂️🏋🏽‍♂🏋🏾‍♂️🏋🏾‍♂🏋🏿‍♂️🏋🏿‍♂🏋️‍♀️🏋‍♀️🏋️‍♀🏋‍♀🏋🏻‍♀️🏋🏻‍♀🏋🏼‍♀️🏋🏼‍♀🏋🏽‍♀️🏋🏽‍♀🏋🏾‍♀️🏋🏾‍♀🏋🏿‍♀️🏋🏿‍♀🚴🚴🏻🚴🏼🚴🏽🚴🏾🚴🏿🚴‍♂️🚴‍♂🚴🏻‍♂️🚴🏻‍♂🚴🏼‍♂️🚴🏼‍♂🚴🏽‍♂️🚴🏽‍♂🚴🏾‍♂️🚴🏾‍♂🚴🏿‍♂️🚴🏿‍♂🚴‍♀️🚴‍♀🚴🏻‍♀️🚴🏻‍♀🚴🏼‍♀️🚴🏼‍♀🚴🏽‍♀️🚴🏽‍♀🚴🏾‍♀️🚴🏾‍♀🚴🏿‍♀️🚴🏿‍♀🚵🚵🏻🚵🏼🚵🏽🚵🏾🚵🏿🚵‍♂️🚵‍♂🚵🏻‍♂️🚵🏻‍♂🚵🏼‍♂️🚵🏼‍♂🚵🏽‍♂️🚵🏽‍♂🚵🏾‍♂️🚵🏾‍♂🚵🏿‍♂️🚵🏿‍♂🚵‍♀️🚵‍♀🚵🏻‍♀️🚵🏻‍♀🚵🏼‍♀️🚵🏼‍♀🚵🏽‍♀️🚵🏽‍♀🚵🏾‍♀️🚵🏾‍♀🚵🏿‍♀️🚵🏿‍♀🏎️🏎🏍️🏍🤸🤸🏻🤸🏼🤸🏽🤸🏾🤸🏿🤸‍♂️🤸‍♂🤸🏻‍♂️🤸🏻‍♂🤸🏼‍♂️🤸🏼‍♂🤸🏽‍♂️🤸🏽‍♂🤸🏾‍♂️🤸🏾‍♂🤸🏿‍♂️🤸🏿‍♂🤸‍♀️🤸‍♀🤸🏻‍♀️🤸🏻‍♀🤸🏼‍♀️🤸🏼‍♀🤸🏽‍♀️🤸🏽‍♀🤸🏾‍♀️🤸🏾‍♀🤸🏿‍♀️🤸🏿‍♀🤼🤼‍♂️🤼‍♂🤼‍♀️🤼‍♀🤽🤽🏻🤽🏼🤽🏽🤽🏾🤽🏿🤽‍♂️🤽‍♂🤽🏻‍♂️🤽🏻‍♂🤽🏼‍♂️🤽🏼‍♂🤽🏽‍♂️🤽🏽‍♂🤽🏾‍♂️🤽🏾‍♂🤽🏿‍♂️🤽🏿‍♂🤽‍♀️🤽‍♀🤽🏻‍♀️🤽🏻‍♀🤽🏼‍♀️🤽🏼‍♀🤽🏽‍♀️🤽🏽‍♀🤽🏾‍♀️🤽🏾‍♀🤽🏿‍♀️🤽🏿‍♀🤾🤾🏻🤾🏼🤾🏽🤾🏾🤾🏿🤾‍♂️🤾‍♂🤾🏻‍♂️🤾🏻‍♂🤾🏼‍♂️🤾🏼‍♂🤾🏽‍♂️🤾🏽‍♂🤾🏾‍♂️🤾🏾‍♂🤾🏿‍♂️🤾🏿‍♂🤾‍♀️🤾‍♀🤾🏻‍♀️🤾🏻‍♀🤾🏼‍♀️🤾🏼‍♀🤾🏽‍♀️🤾🏽‍♀🤾🏾‍♀️🤾🏾‍♀🤾🏿‍♀️🤾🏿‍♀🤹🤹🏻🤹🏼🤹🏽🤹🏾🤹🏿🤹‍♂️🤹‍♂🤹🏻‍♂️🤹🏻‍♂🤹🏼‍♂️🤹🏼‍♂🤹🏽‍♂️🤹🏽‍♂🤹🏾‍♂️🤹🏾‍♂🤹🏿‍♂️🤹🏿‍♂🤹‍♀️🤹‍♀🤹🏻‍♀️🤹🏻‍♀🤹🏼‍♀️🤹🏼‍♀🤹🏽‍♀️🤹🏽‍♀🤹🏾‍♀️🤹🏾‍♀🤹🏿‍♀️🤹🏿‍♀👫👬👭💏👩‍❤️‍💋‍👨👩‍❤‍💋‍👨👨‍❤️‍💋‍👨👨‍❤‍💋‍👨👩‍❤️‍💋‍👩👩‍❤‍💋‍👩💑👩‍❤️‍👨👩‍❤‍👨👨‍❤️‍👨👨‍❤‍👨👩‍❤️‍👩👩‍❤‍👩👪👨‍👩‍👦👨‍👩‍👧👨‍👩‍👧‍👦👨‍👩‍👦‍👦👨‍👩‍👧‍👧👨‍👨‍👦👨‍👨‍👧👨‍👨‍👧‍👦👨‍👨‍👦‍👦👨‍👨‍👧‍👧👩‍👩‍👦👩‍👩‍👧👩‍👩‍👧‍👦👩‍👩‍👦‍👦👩‍👩‍👧‍👧👨‍👦👨‍👦‍👦👨‍👧👨‍👧‍👦👨‍👧‍👧👩‍👦👩‍👦‍👦👩‍👧👩‍👧‍👦👩‍👧‍👧🤳🤳🏻🤳🏼🤳🏽🤳🏾🤳🏿💪💪🏻💪🏼💪🏽💪🏾💪🏿🦵🦵🏻🦵🏼🦵🏽🦵🏾🦵🏿🦶🦶🏻🦶🏼🦶🏽🦶🏾🦶🏿👈👈🏻👈🏼👈🏽👈🏾👈🏿👉👉🏻👉🏼👉🏽👉🏾👉🏿☝️☝☝🏻☝🏼☝🏽☝🏾☝🏿👆👆🏻👆🏼👆🏽👆🏾👆🏿🖕🖕🏻🖕🏼🖕🏽🖕🏾🖕🏿👇👇🏻👇🏼👇🏽👇🏾👇🏿✌️✌✌🏻✌🏼✌🏽✌🏾✌🏿🤞🤞🏻🤞🏼🤞🏽🤞🏾🤞🏿🖖🖖🏻🖖🏼🖖🏽🖖🏾🖖🏿🤘🤘🏻🤘🏼🤘🏽🤘🏾🤘🏿🤙🤙🏻🤙🏼🤙🏽🤙🏾🤙🏿🖐️🖐🖐🏻🖐🏼🖐🏽🖐🏾🖐🏿✋✋🏻✋🏼✋🏽✋🏾✋🏿👌👌🏻👌🏼👌🏽👌🏾👌🏿👍👍🏻👍🏼👍🏽👍🏾👍🏿👎👎🏻👎🏼👎🏽👎🏾👎🏿✊✊🏻✊🏼✊🏽✊🏾✊🏿👊👊🏻👊🏼👊🏽👊🏾👊🏿🤛🤛🏻🤛🏼🤛🏽🤛🏾🤛🏿🤜🤜🏻🤜🏼🤜🏽🤜🏾🤜🏿🤚🤚🏻🤚🏼🤚🏽🤚🏾🤚🏿👋👋🏻👋🏼👋🏽👋🏾👋🏿🤟🤟🏻🤟🏼🤟🏽🤟🏾🤟🏿✍️✍✍🏻✍🏼✍🏽✍🏾✍🏿👏👏🏻👏🏼👏🏽👏🏾👏🏿👐👐🏻👐🏼👐🏽👐🏾👐🏿🙌🙌🏻🙌🏼🙌🏽🙌🏾🙌🏿🤲🤲🏻🤲🏼🤲🏽🤲🏾🤲🏿🙏🙏🏻🙏🏼🙏🏽🙏🏾🙏🏿🤝💅💅🏻💅🏼💅🏽💅🏾💅🏿👂👂🏻👂🏼👂🏽👂🏾👂🏿👃👃🏻👃🏼👃🏽👃🏾👃🏿🦰🦱🦲🦳👣👀👁️👁👁️‍🗨️👁‍🗨️👁️‍🗨👁‍🗨🧠🦴🦷👅👄💋💘❤️❤💓💔💕💖💗💙💚💛🧡💜🖤💝💞💟❣️❣💌💤💢💣💥💦💨💫💬🗨️🗨🗯️🗯💭🕳️🕳👓🕶️🕶🥽🥼👔👕👖🧣🧤🧥🧦👗👘👙👚👛👜👝🛍️🛍🎒👞👟🥾🥿👠👡👢👑👒🎩🎓🧢⛑️⛑📿💄💍💎🐵🐒🦍🐶🐕🐩🐺🦊🦝🐱🐈🦁🐯🐅🐆🐴🐎🦄🦓🦌🐮🐂🐃🐄🐷🐖🐗🐽🐏🐑🐐🐪🐫🦙🦒🐘🦏🦛🐭🐁🐀🐹🐰🐇🐿️🐿🦔🦇🐻🐨🐼🦘🦡🐾🦃🐔🐓🐣🐤🐥🐦🐧🕊️🕊🦅🦆🦢🦉🦚🦜🐸🐊🐢🦎🐍🐲🐉🦕🦖🐳🐋🐬🐟🐠🐡🦈🐙🐚🦀🦞🦐🦑🐌🦋🐛🐜🐝🐞🦗🕷️🕷🕸️🕸🦂🦟🦠💐🌸💮🏵️🏵🌹🥀🌺🌻🌼🌷🌱🌲🌳🌴🌵🌾🌿☘️☘🍀🍁🍂🍃🍇🍈🍉🍊🍋🍌🍍🥭🍎🍏🍐🍑🍒🍓🥝🍅🥥🥑🍆🥔🥕🌽🌶️🌶🥒🥬🥦🍄🥜🌰🍞🥐🥖🥨🥯🥞🧀🍖🍗🥩🥓🍔🍟🍕🌭🥪🌮🌯🥙🥚🍳🥘🍲🥣🥗🍿🧂🥫🍱🍘🍙🍚🍛🍜🍝🍠🍢🍣🍤🍥🥮🍡🥟🥠🥡🍦🍧🍨🍩🍪🎂🍰🧁🥧🍫🍬🍭🍮🍯🍼🥛☕🍵🍶🍾🍷🍸🍹🍺🍻🥂🥃🥤🥢🍽️🍽🍴🥄🔪🏺🌍🌎🌏🌐🗺️🗺🗾🧭🏔️🏔⛰️⛰🌋🗻🏕️🏕🏖️🏖🏜️🏜🏝️🏝🏞️🏞🏟️🏟🏛️🏛🏗️🏗🧱🏘️🏘🏚️🏚🏠🏡🏢🏣🏤🏥🏦🏨🏩🏪🏫🏬🏭🏯🏰💒🗼🗽⛪🕌🕍⛩️⛩🕋⛲⛺🌁🌃🏙️🏙🌄🌅🌆🌇🌉♨️♨🌌🎠🎡🎢💈🎪🚂🚃🚄🚅🚆🚇🚈🚉🚊🚝🚞🚋🚌🚍🚎🚐🚑🚒🚓🚔🚕🚖🚗🚘🚙🚚🚛🚜🚲🛴🛹🛵🚏🛣️🛣🛤️🛤🛢️🛢⛽🚨🚥🚦🛑🚧⚓⛵🛶🚤🛳️🛳⛴️⛴🛥️🛥🚢✈️✈🛩️🛩🛫🛬💺🚁🚟🚠🚡🛰️🛰🚀🛸🛎️🛎🧳⌛⏳⌚⏰⏱️⏱⏲️⏲🕰️🕰🕛🕧🕐🕜🕑🕝🕒🕞🕓🕟🕔🕠🕕🕡🕖🕢🕗🕣🕘🕤🕙🕥🕚🕦🌑🌒🌓🌔🌕🌖🌗🌘🌙🌚🌛🌜🌡️🌡☀️☀🌝🌞⭐🌟🌠☁️☁⛅⛈️⛈🌤️🌤🌥️🌥🌦️🌦🌧️🌧🌨️🌨🌩️🌩🌪️🌪🌫️🌫🌬️🌬🌀🌈🌂☂️☂☔⛱️⛱⚡❄️❄☃️☃⛄☄️☄🔥💧🌊🎃🎄🎆🎇🧨✨🎈🎉🎊🎋🎍🎎🎏🎐🎑🧧🎀🎁🎗️🎗🎟️🎟🎫🎖️🎖🏆🏅🥇🥈🥉⚽⚾🥎🏀🏐🏈🏉🎾🥏🎳🏏🏑🏒🥍🏓🏸🥊🥋🥅⛳⛸️⛸🎣🎽🎿🛷🥌🎯🎱🔮🧿🎮🕹️🕹🎰🎲🧩🧸♠️♠♥️♥♦️♦♣️♣♟️♟🃏🀄🎴🎭🖼️🖼🎨🧵🧶🔇🔈🔉🔊📢📣📯🔔🔕🎼🎵🎶🎙️🎙🎚️🎚🎛️🎛🎤🎧📻🎷🎸🎹🎺🎻🥁📱📲☎️☎📞📟📠🔋🔌💻🖥️🖥🖨️🖨⌨️⌨🖱️🖱🖲️🖲💽💾💿📀🧮🎥🎞️🎞📽️📽🎬📺📷📸📹📼🔍🔎🕯️🕯💡🔦🏮📔📕📖📗📘📙📚📓📒📃📜📄📰🗞️🗞📑🔖🏷️🏷💰💴💵💶💷💸💳🧾💹💱💲✉️✉📧📨📩📤📥📦📫📪📬📭📮🗳️🗳✏️✏✒️✒🖋️🖋🖊️🖊🖌️🖌🖍️🖍📝💼📁📂🗂️🗂📅📆🗒️🗒🗓️🗓📇📈📉📊📋📌📍📎🖇️🖇📏📐✂️✂🗃️🗃🗄️🗄🗑️🗑🔒🔓🔏🔐🔑🗝️🗝🔨⛏️⛏⚒️⚒🛠️🛠🗡️🗡⚔️⚔🔫🏹🛡️🛡🔧🔩⚙️⚙🗜️🗜⚖️⚖🔗⛓️⛓🧰🧲⚗️⚗🧪🧫🧬🔬🔭📡💉💊🚪🛏️🛏🛋️🛋🚽🚿🛁🧴🧷🧹🧺🧻🧼🧽🧯🛒🚬⚰️⚰⚱️⚱🗿🏧🚮🚰♿🚹🚺🚻🚼🚾🛂🛃🛄🛅⚠️⚠🚸⛔🚫🚳🚭🚯🚱🚷📵🔞☢️☢☣️☣⬆️⬆↗️↗➡️➡↘️↘⬇️⬇↙️↙⬅️⬅↖️↖↕️↕↔️↔↩️↩↪️↪⤴️⤴⤵️⤵🔃🔄🔙🔚🔛🔜🔝🛐⚛️⚛🕉️🕉✡️✡☸️☸☯️☯✝️✝☦️☦☪️☪☮️☮🕎🔯♈♉♊♋♌♍♎♏♐♑♒♓⛎🔀🔁🔂▶️▶⏩⏭️⏭⏯️⏯◀️◀⏪⏮️⏮🔼⏫🔽⏬⏸️⏸⏹️⏹⏺️⏺⏏️⏏🎦🔅🔆📶📳📴♀️♀♂️♂⚕️⚕♾️♾♻️♻⚜️⚜🔱📛🔰⭕✅☑️☑✔️✔✖️✖❌❎➕➖➗➰➿〽️〽✳️✳✴️✴❇️❇‼️‼⁉️⁉❓❔❕❗〰️〰©️©®️®™️™#️⃣#⃣*️⃣*⃣0️⃣0⃣1️⃣1⃣2️⃣2⃣3️⃣3⃣4️⃣4⃣5️⃣5⃣6️⃣6⃣7️⃣7⃣8️⃣8⃣9️⃣9⃣🔟💯🔠🔡🔢🔣🔤🅰️🅰🆎🅱️🅱🆑🆒🆓ℹ️ℹ🆔Ⓜ️Ⓜ🆕🆖🅾️🅾🆗🅿️🅿🆘🆙🆚🈁🈂️🈂🈷️🈷🈶🈯🉐🈹🈚🈲🉑🈸🈴🈳㊗️㊗㊙️㊙🈺🈵▪️▪▫️▫◻️◻◼️◼◽◾⬛⬜🔶🔷🔸🔹🔺🔻💠🔘🔲🔳⚪⚫🔴🔵🏁🚩🎌🏴🏳️🏳🏳️‍🌈🏳‍🌈🏴‍☠️🏴‍☠🇦🇨🇦🇩🇦🇪🇦🇫🇦🇬🇦🇮🇦🇱🇦🇲🇦🇴🇦🇶🇦🇷🇦🇸🇦🇹🇦🇺🇦🇼🇦🇽🇦🇿🇧🇦🇧🇧🇧🇩🇧🇪🇧🇫🇧🇬🇧🇭🇧🇮🇧🇯🇧🇱🇧🇲🇧🇳🇧🇴🇧🇶🇧🇷🇧🇸🇧🇹🇧🇻🇧🇼🇧🇾🇧🇿🇨🇦🇨🇨🇨🇩🇨🇫🇨🇬🇨🇭🇨🇮🇨🇰🇨🇱🇨🇲🇨🇳🇨🇴🇨🇵🇨🇷🇨🇺🇨🇻🇨🇼🇨🇽🇨🇾🇨🇿🇩🇪🇩🇬🇩🇯🇩🇰🇩🇲🇩🇴🇩🇿🇪🇦🇪🇨🇪🇪🇪🇬🇪🇭🇪🇷🇪🇸🇪🇹🇪🇺🇫🇮🇫🇯🇫🇰🇫🇲🇫🇴🇫🇷🇬🇦🇬🇧🇬🇩🇬🇪🇬🇫🇬🇬🇬🇭🇬🇮🇬🇱🇬🇲🇬🇳🇬🇵🇬🇶🇬🇷🇬🇸🇬🇹🇬🇺🇬🇼🇬🇾🇭🇰🇭🇲🇭🇳🇭🇷🇭🇹🇭🇺🇮🇨🇮🇩🇮🇪🇮🇱🇮🇲🇮🇳🇮🇴🇮🇶🇮🇷🇮🇸🇮🇹🇯🇪🇯🇲🇯🇴🇯🇵🇰🇪🇰🇬🇰🇭🇰🇮🇰🇲🇰🇳🇰🇵🇰🇷🇰🇼🇰🇾🇰🇿🇱🇦🇱🇧🇱🇨🇱🇮🇱🇰🇱🇷🇱🇸🇱🇹🇱🇺🇱🇻🇱🇾🇲🇦🇲🇨🇲🇩🇲🇪🇲🇫🇲🇬🇲🇭🇲🇰🇲🇱🇲🇲🇲🇳🇲🇴🇲🇵🇲🇶🇲🇷🇲🇸🇲🇹🇲🇺🇲🇻🇲🇼🇲🇽🇲🇾🇲🇿🇳🇦🇳🇨🇳🇪🇳🇫🇳🇬🇳🇮🇳🇱🇳🇴🇳🇵🇳🇷🇳🇺🇳🇿🇴🇲🇵🇦🇵🇪🇵🇫🇵🇬🇵🇭🇵🇰🇵🇱🇵🇲🇵🇳🇵🇷🇵🇸🇵🇹🇵🇼🇵🇾🇶🇦🇷🇪🇷🇴🇷🇸🇷🇺🇷🇼🇸🇦🇸🇧🇸🇨🇸🇩🇸🇪🇸🇬🇸🇭🇸🇮🇸🇯🇸🇰🇸🇱🇸🇲🇸🇳🇸🇴🇸🇷🇸🇸🇸🇹🇸🇻🇸🇽🇸🇾🇸🇿🇹🇦🇹🇨🇹🇩🇹🇫🇹🇬🇹🇭🇹🇯🇹🇰🇹🇱🇹🇲🇹🇳🇹🇴🇹🇷🇹🇹🇹🇻🇹🇼🇹🇿🇺🇦🇺🇬🇺🇲🇺🇳🇺🇸🇺🇾🇺🇿🇻🇦🇻🇨🇻🇪🇻🇬🇻🇮🇻🇳🇻🇺🇼🇫🇼🇸🇽🇰🇾🇪🇾🇹🇿🇦🇿🇲🇿🇼🏴󠁧󠁢󠁥󠁮󠁧󠁿🏴󠁧󠁢󠁳󠁣󠁴󠁿🏴󠁧󠁢󠁷󠁬󠁳󠁿"
503
- );
504
- expect(() => emoji.parse(":-)")).toThrow();
505
- expect(() => emoji.parse("😀 is an emoji")).toThrow();
506
- expect(() => emoji.parse("😀stuff")).toThrow();
507
- expect(() => emoji.parse("stuff😀")).toThrow();
508
- });
509
-
510
- test("nanoid", () => {
511
- const nanoid = z.string().nanoid("custom error");
512
- nanoid.parse("lfNZluvAxMkf7Q8C5H-QS");
513
- nanoid.parse("mIU_4PJWikaU8fMbmkouz");
514
- nanoid.parse("Hb9ZUtUa2JDm_dD-47EGv");
515
- nanoid.parse("5Noocgv_8vQ9oPijj4ioQ");
516
- const result = nanoid.safeParse("Xq90uDyhddC53KsoASYJGX");
517
- expect(result).toMatchObject({ success: false });
518
-
519
- expect(result.error!.issues[0].message).toEqual("custom error");
520
- expect(result.error).toMatchInlineSnapshot(`
521
- [ZodError: [
522
- {
523
- "origin": "string",
524
- "code": "invalid_format",
525
- "format": "nanoid",
526
- "pattern": "/^[a-zA-Z0-9_-]{21}$/",
527
- "path": [],
528
- "message": "custom error"
529
- }
530
- ]]
531
- `);
532
- });
533
-
534
- test("bad nanoid", () => {
535
- const nanoid = z.string().nanoid("custom error");
536
- nanoid.parse("ySh_984wpDUu7IQRrLXAp");
537
- const result = nanoid.safeParse("invalid nanoid");
538
- expect(result).toMatchObject({ success: false });
539
-
540
- expect(result.error!.issues[0].message).toEqual("custom error");
541
- expect(result.error).toMatchInlineSnapshot(`
542
- [ZodError: [
543
- {
544
- "origin": "string",
545
- "code": "invalid_format",
546
- "format": "nanoid",
547
- "pattern": "/^[a-zA-Z0-9_-]{21}$/",
548
- "path": [],
549
- "message": "custom error"
550
- }
551
- ]]
552
- `);
553
- });
554
-
555
- test("good uuid", () => {
556
- const uuid = z.string().uuid("custom error");
557
- const goodUuids = [
558
- "9491d710-3185-1e06-bea0-6a2f275345e0",
559
- "9491d710-3185-2e06-bea0-6a2f275345e0",
560
- "9491d710-3185-3e06-bea0-6a2f275345e0",
561
- "9491d710-3185-4e06-bea0-6a2f275345e0",
562
- "9491d710-3185-5e06-bea0-6a2f275345e0",
563
- "9491d710-3185-5e06-aea0-6a2f275345e0",
564
- "9491d710-3185-5e06-8ea0-6a2f275345e0",
565
- "9491d710-3185-5e06-9ea0-6a2f275345e0",
566
- "00000000-0000-0000-0000-000000000000",
567
- "ffffffff-ffff-ffff-ffff-ffffffffffff",
568
- ];
569
-
570
- for (const goodUuid of goodUuids) {
571
- const result = uuid.safeParse(goodUuid);
572
- expect(result.success).toEqual(true);
573
- }
574
- });
575
-
576
- test(`bad uuid`, () => {
577
- const uuid = z.string().uuid("custom error");
578
- for (const badUuid of [
579
- "9491d710-3185-0e06-bea0-6a2f275345e0",
580
- "9491d710-3185-5e06-0ea0-6a2f275345e0",
581
- "d89e7b01-7598-ed11-9d7a-0022489382fd", // new sequential id
582
- "b3ce60f8-e8b9-40f5-1150-172ede56ff74", // Variant 0 - RFC 9562/4122: Reserved, NCS backward compatibility
583
- "92e76bf9-28b3-4730-cd7f-cb6bc51f8c09", // Variant 2 - RFC 9562/4122: Reserved, Microsoft Corporation backward compatibility
584
- "invalid uuid",
585
- "9491d710-3185-4e06-bea0-6a2f275345e0X",
586
- ]) {
587
- const result = uuid.safeParse(badUuid);
588
- expect(result).toMatchObject({ success: false });
589
- expect(result.error?.issues[0].message).toEqual("custom error");
590
- }
591
- });
592
-
593
- test("good guid", () => {
594
- const guid = z.string().guid("custom error");
595
- for (const goodGuid of [
596
- "9491d710-3185-4e06-bea0-6a2f275345e0",
597
- "d89e7b01-7598-ed11-9d7a-0022489382fd", // new sequential id
598
- "b3ce60f8-e8b9-40f5-1150-172ede56ff74", // Variant 0 - RFC 9562/4122: Reserved, NCS backward compatibility
599
- "92e76bf9-28b3-4730-cd7f-cb6bc51f8c09", // Variant 2 - RFC 9562/4122: Reserved, Microsoft Corporation backward compatibility
600
- "00000000-0000-0000-0000-000000000000",
601
- "ffffffff-ffff-ffff-ffff-ffffffffffff",
602
- ]) {
603
- const result = guid.safeParse(goodGuid);
604
- expect(result.success).toEqual(true);
605
- }
606
- });
607
-
608
- test("bad guid", () => {
609
- const guid = z.string().guid("custom error");
610
- for (const badGuid of ["9491d710-3185-4e06-bea0-6a2f275345e0X"]) {
611
- const result = guid.safeParse(badGuid);
612
- expect(result).toMatchObject({ success: false });
613
- expect(result.error?.issues[0].message).toEqual("custom error");
614
- }
615
- });
616
-
617
- test("cuid", () => {
618
- const cuid = z.string().cuid();
619
- cuid.parse("ckopqwooh000001la8mbi2im9");
620
- const result = cuid.safeParse("cifjhdsfhsd-invalid-cuid");
621
- expect(result).toMatchObject({ success: false });
622
-
623
- expect(result.error!.issues[0].message).toEqual("Invalid cuid");
624
- expect(result.error).toMatchInlineSnapshot(`
625
- [ZodError: [
626
- {
627
- "origin": "string",
628
- "code": "invalid_format",
629
- "format": "cuid",
630
- "pattern": "/^[cC][0-9a-z]{6,}$/",
631
- "path": [],
632
- "message": "Invalid cuid"
633
- }
634
- ]]
635
- `);
636
-
637
- // Strings containing non-base36 characters that the old denylist regex
638
- // (/^[cC][^\s-]{8,}$/) accepted. The new regex restricts the body to
639
- // [0-9a-z], matching the actual CUID v1 base36 format. See #3621.
640
- const previouslyAcceptedNonCuids = [
641
- "cly63t164000245zw008pggon';select1;", // SQLi-shaped (no whitespace, no hyphen)
642
- "c<script>alert(1)</script>aaaaaa", // XSS-shaped
643
- "c{};alert(1)//", // bracket / curly chars
644
- "C0123_45678", // underscore is not base36
645
- "cAAAAAAAAA", // uppercase letters in body are not base36 (CUIDs are lowercase)
646
- ];
647
- for (const s of previouslyAcceptedNonCuids) {
648
- expect(cuid.safeParse(s).success).toBe(false);
649
- }
650
- });
651
-
652
- test("cuid2", () => {
653
- const cuid2 = z.string().cuid2();
654
- const validStrings = [
655
- "a", // short string
656
- "tz4a98xxat96iws9zmbrgj3a", // normal string
657
- "kf5vz6ssxe4zjcb409rjgo747tc5qjazgptvotk6", // longer than require("@paralleldrive/cuid2").bigLength
658
- ];
659
- for (const s of validStrings) {
660
- cuid2.parse(s);
661
- }
662
-
663
- const invalidStrings = [
664
- "", // empty string
665
- "tz4a98xxat96iws9zMbrgj3a", // include uppercase
666
- "tz4a98xxat96iws-zmbrgj3a", // involve symbols
667
- ];
668
- const results = invalidStrings.map((s) => cuid2.safeParse(s));
669
- expect(results.every((r) => !r.success)).toEqual(true);
670
- if (!results[0].success) {
671
- expect(results[0].error.issues[0].message).toEqual("Invalid cuid2");
672
- }
673
- });
674
-
675
- test("ulid", () => {
676
- const ulid = z.string().ulid();
677
- ulid.parse("01ARZ3NDEKTSV4RRFFQ69G5FAV");
678
- const result = ulid.safeParse("invalidulid");
679
- expect(result).toMatchObject({ success: false });
680
- const tooLong = "01ARZ3NDEKTSV4RRFFQ69G5FAVA";
681
- expect(ulid.safeParse(tooLong)).toMatchObject({ success: false });
682
-
683
- const caseInsensitive = ulid.safeParse("01arZ3nDeKTsV4RRffQ69G5FAV");
684
- expect(caseInsensitive.success).toEqual(true);
685
-
686
- expect(result.error!.issues[0].message).toEqual("Invalid ULID");
687
- expect(result.error).toMatchInlineSnapshot(`
688
- [ZodError: [
689
- {
690
- "origin": "string",
691
- "code": "invalid_format",
692
- "format": "ulid",
693
- "pattern": "/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/",
694
- "path": [],
695
- "message": "Invalid ULID"
696
- }
697
- ]]
698
- `);
699
- });
700
-
701
- test("xid", () => {
702
- const xid = z.string().xid();
703
- xid.parse("9m4e2mr0ui3e8a215n4g");
704
- const result = xid.safeParse("invalidxid");
705
- expect(result).toMatchObject({ success: false });
706
-
707
- expect(result.error!.issues[0].message).toEqual("Invalid XID");
708
- expect(result.error).toMatchInlineSnapshot(`
709
- [ZodError: [
710
- {
711
- "origin": "string",
712
- "code": "invalid_format",
713
- "format": "xid",
714
- "pattern": "/^[0-9a-vA-V]{20}$/",
715
- "path": [],
716
- "message": "Invalid XID"
717
- }
718
- ]]
719
- `);
720
- });
721
-
722
- test("ksuid", () => {
723
- const ksuid = z.string().ksuid();
724
- ksuid.parse("0o0t9hkGxgFLtd3lmJ4TSTeY0Vb");
725
- const result = ksuid.safeParse("invalidksuid");
726
- expect(result).toMatchObject({ success: false });
727
- const tooLong = "0o0t9hkGxgFLtd3lmJ4TSTeY0VbA";
728
- expect(ksuid.safeParse(tooLong)).toMatchObject({ success: false });
729
- expect(result.error!.issues).toMatchInlineSnapshot(`
730
- [
731
- {
732
- "code": "invalid_format",
733
- "format": "ksuid",
734
- "message": "Invalid KSUID",
735
- "origin": "string",
736
- "path": [],
737
- "pattern": "/^[A-Za-z0-9]{27}$/",
738
- },
739
- ]
740
- `);
741
- });
742
-
743
- test("regex", () => {
744
- z.string()
745
- .regex(/^moo+$/)
746
- .parse("mooooo");
747
- expect(() => z.string().uuid().parse("purr")).toThrow();
748
- });
749
-
750
- test("regexp error message", () => {
751
- const result = z
752
- .string()
753
- .regex(/^moo+$/)
754
- .safeParse("boooo");
755
- expect(result.error!.issues).toMatchInlineSnapshot(`
756
- [
757
- {
758
- "code": "invalid_format",
759
- "format": "regex",
760
- "message": "Invalid string: must match pattern /^moo+$/",
761
- "origin": "string",
762
- "path": [],
763
- "pattern": "/^moo+$/",
764
- },
765
- ]
766
- `);
767
-
768
- expect(() => z.string().uuid().parse("purr")).toThrow();
769
- });
770
-
771
- test("regexp error custom message", () => {
772
- const result = z
773
- .string()
774
- .regex(/^moo+$/, { message: "Custom error message" })
775
- .safeParse("boooo");
776
- expect(result.error!.issues).toMatchInlineSnapshot(`
777
- [
778
- {
779
- "code": "invalid_format",
780
- "format": "regex",
781
- "message": "Custom error message",
782
- "origin": "string",
783
- "path": [],
784
- "pattern": "/^moo+$/",
785
- },
786
- ]
787
- `);
788
-
789
- expect(() => z.string().uuid().parse("purr")).toThrow();
790
- });
791
-
792
- test("regex lastIndex reset", () => {
793
- const schema = z.string().regex(/^\d+$/g);
794
- expect(schema.safeParse("123").success).toEqual(true);
795
- expect(schema.safeParse("123").success).toEqual(true);
796
- expect(schema.safeParse("123").success).toEqual(true);
797
- expect(schema.safeParse("123").success).toEqual(true);
798
- expect(schema.safeParse("123").success).toEqual(true);
799
- });
800
-
801
- test("format", () => {
802
- expect(z.string().email().format).toEqual("email");
803
- expect(z.string().url().format).toEqual("url");
804
- expect(z.string().jwt().format).toEqual("jwt");
805
- expect(z.string().emoji().format).toEqual("emoji");
806
- expect(z.string().guid().format).toEqual("guid");
807
- expect(z.string().uuid().format).toEqual("uuid");
808
- expect(z.string().uuidv4().format).toEqual("uuid");
809
- expect(z.string().uuidv6().format).toEqual("uuid");
810
- expect(z.string().uuidv7().format).toEqual("uuid");
811
- expect(z.string().nanoid().format).toEqual("nanoid");
812
- expect(z.string().guid().format).toEqual("guid");
813
- expect(z.string().cuid().format).toEqual("cuid");
814
- expect(z.string().cuid2().format).toEqual("cuid2");
815
- expect(z.string().ulid().format).toEqual("ulid");
816
- expect(z.string().base64().format).toEqual("base64");
817
- // expect(z.string().jsonString().format).toEqual("json_string");
818
- // expect(z.string().json().format).toEqual("json_string");
819
- expect(z.string().xid().format).toEqual("xid");
820
- expect(z.string().ksuid().format).toEqual("ksuid");
821
- // expect(z.string().ip().format).toEqual("ip");
822
- expect(z.string().ipv4().format).toEqual("ipv4");
823
- expect(z.string().ipv6().format).toEqual("ipv6");
824
- expect(z.string().e164().format).toEqual("e164");
825
- expect(z.string().datetime().format).toEqual("datetime");
826
- expect(z.string().date().format).toEqual("date");
827
- expect(z.string().time().format).toEqual("time");
828
- expect(z.string().duration().format).toEqual("duration");
829
-
830
- expect(z.mac().format).toEqual("mac");
831
- });
832
-
833
- test("min max getters", () => {
834
- expect(z.string().min(5).minLength).toEqual(5);
835
- expect(z.string().min(5).min(10).minLength).toEqual(10);
836
- expect(z.string().minLength).toEqual(null);
837
-
838
- expect(z.string().max(5).maxLength).toEqual(5);
839
- expect(z.string().max(5).max(1).maxLength).toEqual(1);
840
- expect(z.string().max(5).max(10).maxLength).toEqual(5);
841
- expect(z.string().maxLength).toEqual(null);
842
- });
843
-
844
- test("boundary cases with zero length", () => {
845
- // Test length(0) - only empty string should pass
846
- const lengthZero = z.string().length(0);
847
- expect(lengthZero.parse("")).toEqual("");
848
- expect(() => lengthZero.parse("a")).toThrow();
849
-
850
- // Test min(0) - all strings including empty should pass
851
- const minZero = z.string().min(0);
852
- expect(minZero.parse("")).toEqual("");
853
- expect(minZero.parse("a")).toEqual("a");
854
- expect(minZero.parse("hello")).toEqual("hello");
855
-
856
- // Test max(0) - only empty string should pass
857
- const maxZero = z.string().max(0);
858
- expect(maxZero.parse("")).toEqual("");
859
- expect(() => maxZero.parse("a")).toThrow();
860
- expect(() => maxZero.parse("hello")).toThrow();
861
- });
862
-
863
- test("trim", () => {
864
- expect(z.string().trim().min(2).parse(" 12 ")).toEqual("12");
865
-
866
- // ordering of methods is respected
867
- expect(z.string().min(2).trim().parse(" 1 ")).toEqual("1");
868
- expect(() => z.string().trim().min(2).parse(" 1 ")).toThrow();
869
- });
870
-
871
- test("lowerCase", () => {
872
- expect(z.string().toLowerCase().parse("ASDF")).toEqual("asdf");
873
- expect(z.string().toUpperCase().parse("asdf")).toEqual("ASDF");
874
- });
875
-
876
- test("slugify", () => {
877
- expect(z.string().slugify().parse("Hello World")).toEqual("hello-world");
878
- expect(z.string().slugify().parse(" Hello World ")).toEqual("hello-world");
879
- expect(z.string().slugify().parse("Hello@World#123")).toEqual("helloworld123");
880
- expect(z.string().slugify().parse("Hello-World")).toEqual("hello-world");
881
- expect(z.string().slugify().parse("Hello_World")).toEqual("hello-world");
882
- expect(z.string().slugify().parse("---Hello---World---")).toEqual("hello-world");
883
- expect(z.string().slugify().parse("Hello World")).toEqual("hello-world");
884
- expect(z.string().slugify().parse("Hello!@#$%^&*()World")).toEqual("helloworld");
885
-
886
- // can be used with check
887
- expect(z.string().check(z.slugify()).parse("Hello World")).toEqual("hello-world");
888
-
889
- // can be chained with other methods
890
- expect(z.string().slugify().min(5).parse("Hello World")).toEqual("hello-world");
891
- expect(() => z.string().slugify().min(20).parse("Hello World")).toThrow();
892
- });
893
-
894
- // test("IP validation", () => {
895
- // const ipSchema = z.string().ip();
896
-
897
- // // General IP validation (accepts both v4 and v6)
898
- // expect(ipSchema.safeParse("114.71.82.94").success).toBe(true);
899
- // expect(ipSchema.safeParse("0.0.0.0").success).toBe(true);
900
- // expect(ipSchema.safeParse("37.85.236.115").success).toBe(true);
901
- // expect(ipSchema.safeParse("1e5e:e6c8:daac:514b:114b:e360:d8c0:682c").success).toBe(true);
902
- // expect(ipSchema.safeParse("9d4:c956:420f:5788:4339:9b3b:2418:75c3").success).toBe(true);
903
- // expect(ipSchema.safeParse("a6ea::2454:a5ce:94.105.123.75").success).toBe(true);
904
- // expect(ipSchema.safeParse("474f:4c83::4e40:a47:ff95:0cda").success).toBe(true);
905
- // expect(ipSchema.safeParse("d329:0:25b4:db47:a9d1:0:4926:0000").success).toBe(true);
906
- // expect(ipSchema.safeParse("e48:10fb:1499:3e28:e4b6:dea5:4692:912c").success).toBe(true);
907
-
908
- // expect(ipSchema.safeParse("d329:1be4:25b4:db47:a9d1:dc71:4926:992c:14af").success).toBe(false);
909
- // expect(ipSchema.safeParse("d5e7:7214:2b78::3906:85e6:53cc:709:32ba").success).toBe(false);
910
- // expect(ipSchema.safeParse("8f69::c757:395e:976e::3441").success).toBe(false);
911
- // expect(ipSchema.safeParse("54cb::473f:d516:0.255.256.22").success).toBe(false);
912
- // expect(ipSchema.safeParse("54cb::473f:d516:192.168.1").success).toBe(false);
913
- // expect(ipSchema.safeParse("256.0.4.4").success).toBe(false);
914
- // expect(ipSchema.safeParse("-1.0.555.4").success).toBe(false);
915
- // expect(ipSchema.safeParse("0.0.0.0.0").success).toBe(false);
916
- // expect(ipSchema.safeParse("1.1.1").success).toBe(false);
917
- // });
918
-
919
- test("IPv4 validation", () => {
920
- const ipv4 = z.string().ipv4();
921
-
922
- // Valid IPv4 addresses
923
- expect(ipv4.safeParse("114.71.82.94").success).toBe(true);
924
- expect(ipv4.safeParse("0.0.0.0").success).toBe(true);
925
- expect(ipv4.safeParse("37.85.236.115").success).toBe(true);
926
- expect(ipv4.safeParse("192.168.0.1").success).toBe(true);
927
- expect(ipv4.safeParse("255.255.255.255").success).toBe(true);
928
- expect(ipv4.safeParse("1.2.3.4").success).toBe(true);
929
-
930
- // Invalid IPv4 addresses
931
- expect(ipv4.safeParse("256.0.4.4").success).toBe(false);
932
- expect(ipv4.safeParse("-1.0.555.4").success).toBe(false);
933
- expect(ipv4.safeParse("0.0.0.0.0").success).toBe(false);
934
- expect(ipv4.safeParse("1.1.1").success).toBe(false);
935
- expect(ipv4.safeParse("1e5e:e6c8:daac:514b:114b:e360:d8c0:682c").success).toBe(false);
936
- expect(ipv4.safeParse("a6ea::2454:a5ce:94.105.123.75").success).toBe(false);
937
- expect(ipv4.safeParse("not an ip").success).toBe(false);
938
- expect(ipv4.safeParse("1.2.3").success).toBe(false);
939
- expect(ipv4.safeParse("1.2.3.4.5").success).toBe(false);
940
- expect(ipv4.safeParse("1.2.3.256").success).toBe(false);
941
-
942
- // Test specific error
943
- expect(() => ipv4.parse("6097:adfa:6f0b:220d:db08:5021:6191:7990")).toThrow();
944
- });
945
-
946
- test("IPv6 validation", () => {
947
- const ipv6 = z.string().ipv6();
948
-
949
- // Valid IPv6 addresses
950
- expect(ipv6.safeParse("1e5e:e6c8:daac:514b:114b:e360:d8c0:682c").success).toBe(true);
951
- expect(ipv6.safeParse("9d4:c956:420f:5788:4339:9b3b:2418:75c3").success).toBe(true);
952
- expect(ipv6.safeParse("a6ea::2454:a5ce:94.105.123.75").success).toBe(true);
953
- expect(ipv6.safeParse("474f:4c83::4e40:a47:ff95:0cda").success).toBe(true);
954
- expect(ipv6.safeParse("d329:0:25b4:db47:a9d1:0:4926:0000").success).toBe(true);
955
- expect(ipv6.safeParse("e48:10fb:1499:3e28:e4b6:dea5:4692:912c").success).toBe(true);
956
- expect(ipv6.safeParse("::1").success).toBe(true);
957
- expect(ipv6.safeParse("2001:db8::").success).toBe(true);
958
- expect(ipv6.safeParse("2001:0db8:85a3:0000:0000:8a2e:0370:7334").success).toBe(true);
959
- expect(ipv6.safeParse("2001:db8::192.168.0.1").success).toBe(true);
960
- expect(ipv6.safeParse("::ffff:192.168.0.1").success).toBe(true);
961
- expect(ipv6.safeParse("::ffff:c000:0280").success).toBe(true); // IPv4-mapped IPv6 address
962
- expect(ipv6.safeParse("64:ff9b::192.168.0.1").success).toBe(true); // IPv4/IPv6 translation
963
-
964
- // Invalid IPv6 addresses
965
- expect(ipv6.safeParse("d329:1be4:25b4:db47:a9d1:dc71:4926:992c:14af").success).toBe(false);
966
- expect(ipv6.safeParse("d5e7:7214:2b78::3906:85e6:53cc:709:32ba").success).toBe(false);
967
- expect(ipv6.safeParse("8f69::c757:395e:976e::3441").success).toBe(false);
968
- expect(ipv6.safeParse("54cb::473f:d516:0.255.256.22").success).toBe(false);
969
- expect(ipv6.safeParse("54cb::473f:d516:192.168.1").success).toBe(false);
970
- expect(ipv6.safeParse("114.71.82.94").success).toBe(false);
971
- expect(ipv6.safeParse("not an ip").success).toBe(false);
972
- expect(ipv6.safeParse("g123::1234:5678").success).toBe(false);
973
-
974
- // Test specific error
975
- expect(() => ipv6.parse("254.164.77.1")).toThrow();
976
- });
977
-
978
- test("MAC validation", () => {
979
- const mac = z.mac();
980
-
981
- // Valid MAC addresses
982
- expect(mac.safeParse("00:1A:2B:3C:4D:5E").success).toBe(true);
983
- expect(mac.safeParse("FF:FF:FF:FF:FF:FF").success).toBe(true);
984
- expect(mac.safeParse("00:11:22:33:44:55").success).toBe(true);
985
- expect(mac.safeParse("A1:B2:C3:D4:E5:F6").success).toBe(true);
986
- expect(mac.safeParse("10:20:30:40:50:60").success).toBe(true);
987
- expect(mac.safeParse("0a:1b:2c:3d:4e:5f").success).toBe(true);
988
- expect(mac.safeParse("12:34:56:78:9A:BC").success).toBe(true);
989
-
990
- // Invalid MAC addresses
991
- expect(mac.safeParse("00:1A-2B:3C-4D:5E").success).toBe(false);
992
- expect(mac.safeParse("00:1A:2B:3C:4D").success).toBe(false);
993
- expect(mac.safeParse("00:1A:2B:3C:4D").success).toBe(false);
994
- expect(mac.safeParse("00-1A-2B-3C-4D").success).toBe(false);
995
- expect(mac.safeParse("01-23-45-67-89-AB").success).toBe(false); // Dash delimiter not accepted by default
996
- expect(mac.safeParse("AA-BB-CC-DD-EE-FF").success).toBe(false); // Dash delimiter not accepted by default
997
- expect(mac.safeParse("DE-AD-BE-EF-00-01").success).toBe(false); // Dash delimiter not accepted by default
998
- expect(mac.safeParse("98-76-54-32-10-FF").success).toBe(false); // Dash delimiter not accepted by default
999
- expect(mac.safeParse("00:1A:2B:3C:4D:GZ").success).toBe(false);
1000
- expect(mac.safeParse("00:1A:2B:3C:4D:5E:GG").success).toBe(false);
1001
- expect(mac.safeParse("123:45:67:89:AB:CD").success).toBe(false);
1002
- expect(mac.safeParse("00--1A:2B:3C:4D:5E").success).toBe(false);
1003
- expect(mac.safeParse("00:1A::2B:3C:4D:5E").success).toBe(false);
1004
- expect(mac.safeParse("00:1A:2B:3C:3C:2B:1A:00").success).toBe(false); // Disallow EUI-64
1005
- expect(mac.safeParse("00:1a:2B:3c:4D:5e").success).toBe(false); // Disallow mixed-case
1006
-
1007
- // MAC formats that are nonstandard but occassionally referenced, ex. https://www.postgresql.org/docs/17/datatype-net-types.html#DATATYPE-MACADDR
1008
- expect(mac.safeParse("00:1A:2B:3C:4D:5E:FF").success).toBe(false);
1009
- expect(mac.safeParse("001A2B:3C4D5E").success).toBe(false);
1010
- expect(mac.safeParse("001A:2B3C:4D5E").success).toBe(false);
1011
- expect(mac.safeParse("001A.2B3C.4D5E").success).toBe(false);
1012
- expect(mac.safeParse("001A2B3C4D5E").success).toBe(false);
1013
- expect(mac.safeParse("00.1A.2B.3C.4D.5E").success).toBe(false);
1014
- });
1015
-
1016
- test("MAC validation with custom delimiter", () => {
1017
- const colonMac = z.mac({ delimiter: ":" });
1018
- expect(colonMac.safeParse("00:1A:2B:3C:4D:5E").success).toBe(true);
1019
- expect(colonMac.safeParse("00-1A-2B-3C-4D-5E").success).toBe(false);
1020
-
1021
- const dashMac = z.mac({ delimiter: "-" });
1022
- expect(dashMac.safeParse("00-1A-2B-3C-4D-5E").success).toBe(true);
1023
- expect(dashMac.safeParse("00:1A:2B:3C:4D:5E").success).toBe(false);
1024
-
1025
- const colonOnlyMac = z.mac({ delimiter: ":" });
1026
- expect(colonOnlyMac.safeParse("00:1A:2B:3C:4D:5E").success).toBe(true);
1027
- expect(colonOnlyMac.safeParse("00-1A-2B-3C-4D-5E").success).toBe(false);
1028
- });
1029
-
1030
- test("CIDR v4 validation", () => {
1031
- const cidrV4 = z.string().cidrv4();
1032
-
1033
- // Valid CIDR v4 addresses
1034
- expect(cidrV4.safeParse("192.168.0.0/24").success).toBe(true);
1035
- expect(cidrV4.safeParse("10.0.0.0/8").success).toBe(true);
1036
- expect(cidrV4.safeParse("172.16.0.0/12").success).toBe(true);
1037
- expect(cidrV4.safeParse("0.0.0.0/0").success).toBe(true);
1038
- expect(cidrV4.safeParse("255.255.255.255/32").success).toBe(true);
1039
-
1040
- // Invalid CIDR v4 addresses
1041
- expect(cidrV4.safeParse("192.168.0.0").success).toBe(false); // Missing prefix
1042
- expect(cidrV4.safeParse("192.168.0.0/33").success).toBe(false); // Invalid prefix length
1043
- expect(cidrV4.safeParse("256.0.0.0/24").success).toBe(false); // Invalid IP
1044
- expect(cidrV4.safeParse("192.168.0.0/-1").success).toBe(false); // Negative prefix length
1045
- expect(cidrV4.safeParse("not a cidr").success).toBe(false); // Invalid format
1046
- });
1047
-
1048
- test("CIDR v6 validation", () => {
1049
- const cidrV6 = z.string().cidrv6();
1050
-
1051
- // Valid CIDR v6 addresses
1052
- expect(cidrV6.safeParse("2001:db8::/32").success).toBe(true);
1053
- expect(cidrV6.safeParse("::/0").success).toBe(true);
1054
- expect(cidrV6.safeParse("fe80::/10").success).toBe(true);
1055
- expect(cidrV6.safeParse("::1/128").success).toBe(true);
1056
- expect(cidrV6.safeParse("2001:0db8:85a3::/64").success).toBe(true);
1057
-
1058
- // Invalid CIDR v6 addresses
1059
- expect(cidrV6.safeParse("2001:db8::").success).toBe(false); // Missing prefix
1060
- expect(cidrV6.safeParse("2001:db8::/129").success).toBe(false); // Invalid prefix length
1061
- expect(cidrV6.safeParse("2001:db8::/abc").success).toBe(false); // Invalid prefix format
1062
- expect(cidrV6.safeParse("not a cidr").success).toBe(false); // Invalid format
1063
- expect(cidrV6.safeParse("192.168.0.0/24").success).toBe(false); // IPv4 CIDR in v6 validation
1064
- expect(cidrV6.safeParse("2001:0db8:85a3::/64/whatever-after").success).toBe(false);
1065
- expect(cidrV6.safeParse("22d9:f4a8:6a90:f3bf:dcaa:2beb:5fba:0000/112").success).toBe(true);
1066
- expect(cidrV6.safeParse("22d9:f4a8:6a90:f3bf:dcaa:2beb:5fba:0000/112/268").success).toBe(false);
1067
- });
1068
-
1069
- test("E.164 validation", () => {
1070
- const e164Number = z.string().e164();
1071
- expect(e164Number.safeParse("+1555555").success).toBe(true);
1072
-
1073
- const validE164Numbers = [
1074
- "+1555555", // min-length (7 digits + '+')
1075
- "+15555555",
1076
- "+155555555",
1077
- "+1555555555",
1078
- "+15555555555",
1079
- "+155555555555",
1080
- "+1555555555555",
1081
- "+15555555555555",
1082
- "+155555555555555",
1083
- "+105555555555555",
1084
- "+100555555555555", // max-length (15 digits + '+')
1085
- ];
1086
-
1087
- const invalidE164Numbers = [
1088
- "", // empty
1089
- "+", // only plus sign
1090
- "-", // wrong sign
1091
- " 555555555", // starts with space
1092
- "555555555", // missing plus sign
1093
- "+1 555 555 555", // space after plus sign
1094
- "+1555 555 555", // space between numbers
1095
- "+1555+555", // multiple plus signs
1096
- "+0000000", // leading zero country code
1097
- "+0123456789", // leading zero with more digits
1098
- "+1555555555555555", // too long
1099
- "+115abc55", // non numeric characters in number part
1100
- "+1555555 ", // space after number
1101
- ];
1102
-
1103
- expect(validE164Numbers.every((number) => e164Number.safeParse(number).success)).toBe(true);
1104
- expect(invalidE164Numbers.every((number) => e164Number.safeParse(number).success === false)).toBe(true);
1105
- });
1106
-
1107
- test("hostname", () => {
1108
- const hostname = z.hostname();
1109
-
1110
- // Valid hostnames
1111
- hostname.parse("localhost");
1112
- hostname.parse("example.com");
1113
- hostname.parse("sub.example.com");
1114
- hostname.parse("a-b-c.example.com");
1115
- hostname.parse("123.example.com");
1116
- hostname.parse("example-123.com");
1117
- hostname.parse("example-123.1234");
1118
- hostname.parse("developer.mozilla.org");
1119
- hostname.parse("hello.world.example.com");
1120
- hostname.parse("www.google.com");
1121
- hostname.parse("192.168.1.1");
1122
- hostname.parse("xn--d1acj3b.com");
1123
- hostname.parse("xn--d1acj3b.org");
1124
- hostname.parse("xn--d1acj3b");
1125
-
1126
- // Invalid hostnames
1127
- expect(() => hostname.parse("")).toThrow();
1128
- expect(() => hostname.parse("example..com")).toThrow();
1129
- expect(() => hostname.parse("example-.com")).toThrow();
1130
- expect(() => hostname.parse("-example.com")).toThrow();
1131
- expect(() => hostname.parse("example.com-")).toThrow();
1132
- expect(() => hostname.parse("example_com")).toThrow();
1133
- expect(() => hostname.parse("example.com:8080")).toThrow();
1134
- expect(() => hostname.parse("http://example.com")).toThrow();
1135
- expect(() => hostname.parse("ht!tp://invalid.com")).toThrow();
1136
-
1137
- expect(() => hostname.parse("xn--d1acj3b..com")).toThrow();
1138
- expect(() => hostname.parse("ex@mple.com")).toThrow();
1139
- expect(() => hostname.parse("[2001:db8::zzzz]")).toThrow();
1140
- expect(() => hostname.parse("exa mple.com")).toThrow();
1141
- expect(() => hostname.parse("-example.com")).toThrow();
1142
- expect(() => hostname.parse("example..com")).toThrow();
1143
- });
1144
-
1145
- test("hash validation", () => {
1146
- // MD5 tests
1147
- const md5hex = z.hash("md5");
1148
- const md5base64 = z.hash("md5", { enc: "base64" });
1149
- const md5base64url = z.hash("md5", { enc: "base64url" });
1150
-
1151
- // Valid MD5 hashes
1152
- expect(md5hex.parse("5d41402abc4b2a76b9719d911017c592")).toBe("5d41402abc4b2a76b9719d911017c592");
1153
- expect(md5hex.parse("5D41402ABC4B2A76B9719D911017C592")).toBe("5D41402ABC4B2A76B9719D911017C592"); // uppercase
1154
- expect(md5base64.parse("XUFAKrxLKna5cZ2REBfFkg==")).toBe("XUFAKrxLKna5cZ2REBfFkg==");
1155
- expect(md5base64url.parse("XUFAKrxLKna5cZ2REBfFkg")).toBe("XUFAKrxLKna5cZ2REBfFkg");
1156
-
1157
- // Invalid MD5 hashes
1158
- expect(() => md5hex.parse("5d41402abc4b2a76b9719d911017c59")).toThrow(); // too short
1159
- expect(() => md5hex.parse("5d41402abc4b2a76b9719d911017c592x")).toThrow(); // too long
1160
- expect(() => md5base64.parse("XUFAKrxLKna5cZ2REBfFkg=")).toThrow(); // wrong padding
1161
- expect(() => md5base64url.parse("XUFAKrxLKna5cZ2REBfFkg=")).toThrow(); // has padding
1162
-
1163
- // SHA1 tests
1164
- const sha1hex = z.hash("sha1");
1165
- const sha1base64 = z.hash("sha1", { enc: "base64" });
1166
- const sha1base64url = z.hash("sha1", { enc: "base64url" });
1167
-
1168
- // Valid SHA1 hashes
1169
- expect(sha1hex.parse("aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d")).toBe("aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d");
1170
- expect(sha1base64.parse("qvTGHdzF6KLavt4PO0gs2a6pQ00=")).toBe("qvTGHdzF6KLavt4PO0gs2a6pQ00=");
1171
- expect(sha1base64url.parse("qvTGHdzF6KLavt4PO0gs2a6pQ00")).toBe("qvTGHdzF6KLavt4PO0gs2a6pQ00");
1172
-
1173
- // SHA256 tests
1174
- const sha256hex = z.hash("sha256");
1175
- const sha256base64 = z.hash("sha256", { enc: "base64" });
1176
- const sha256base64url = z.hash("sha256", { enc: "base64url" });
1177
-
1178
- // Valid SHA256 hashes
1179
- expect(sha256hex.parse("2cf24dba4f21d4288094c4a2e2c2d6c6b0c3e0c8f0e0c8f0e0c8f0e0c8f0e0c8")).toBe(
1180
- "2cf24dba4f21d4288094c4a2e2c2d6c6b0c3e0c8f0e0c8f0e0c8f0e0c8f0e0c8"
1181
- );
1182
- expect(sha256base64.parse("LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=")).toBe(
1183
- "LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ="
1184
- );
1185
- expect(sha256base64url.parse("LPJNul-wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ")).toBe(
1186
- "LPJNul-wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ"
1187
- );
1188
-
1189
- // SHA384 tests (no padding in base64)
1190
- const sha384hex = z.hash("sha384");
1191
- const sha384base64 = z.hash("sha384", { enc: "base64" });
1192
-
1193
- expect(
1194
- sha384hex.parse("59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f")
1195
- ).toBe("59e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f");
1196
- expect(sha384base64.parse("WeF0h3dEjGneawDXozO7+5/xtGPkQ1TDVTvNucZm+pASWjx5+QOXvfX2oT3oKGhP")).toBe(
1197
- "WeF0h3dEjGneawDXozO7+5/xtGPkQ1TDVTvNucZm+pASWjx5+QOXvfX2oT3oKGhP"
1198
- );
1199
-
1200
- // SHA512 tests
1201
- const sha512hex = z.hash("sha512");
1202
- const sha512base64 = z.hash("sha512", { enc: "base64" });
1203
-
1204
- expect(
1205
- sha512hex.parse(
1206
- "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043"
1207
- )
1208
- ).toBe(
1209
- "9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043"
1210
- );
1211
- expect(
1212
- sha512base64.parse("m3HSJL1i83hdltRq0+o9czGb+8KJDKra4t/3JRlnPKcjI8PZm6XBHXx6zG4UuMXaDEZjR1wuXDre9G9zvN7AQw==")
1213
- ).toBe("m3HSJL1i83hdltRq0+o9czGb+8KJDKra4t/3JRlnPKcjI8PZm6XBHXx6zG4UuMXaDEZjR1wuXDre9G9zvN7AQw==");
1214
-
1215
- // Test default encoding (hex)
1216
- const defaultHash = z.hash("sha256");
1217
- expect(defaultHash.parse("2cf24dba4f21d4288094c4a2e2c2d6c6b0c3e0c8f0e0c8f0e0c8f0e0c8f0e0c8")).toBe(
1218
- "2cf24dba4f21d4288094c4a2e2c2d6c6b0c3e0c8f0e0c8f0e0c8f0e0c8f0e0c8"
1219
- );
1220
-
1221
- // Test with custom error message
1222
- const hashWithMessage = z.hash("md5", { message: "Invalid MD5 hash" });
1223
- expect(() => hashWithMessage.parse("invalid")).toThrow("Invalid MD5 hash");
1224
- });