claude-scope 0.1.6 → 0.1.7

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