zod 3.26.0-canary.20250703T013930 → 3.26.0-canary.20250703T214020

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 (278) hide show
  1. package/package.json +20 -20
  2. package/src/index.ts +4 -0
  3. package/src/v3/ZodError.ts +330 -0
  4. package/src/v3/benchmarks/datetime.ts +58 -0
  5. package/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  6. package/src/v3/benchmarks/index.ts +59 -0
  7. package/src/v3/benchmarks/ipv4.ts +57 -0
  8. package/src/v3/benchmarks/object.ts +69 -0
  9. package/src/v3/benchmarks/primitives.ts +162 -0
  10. package/src/v3/benchmarks/realworld.ts +63 -0
  11. package/src/v3/benchmarks/string.ts +55 -0
  12. package/src/v3/benchmarks/union.ts +80 -0
  13. package/src/v3/errors.ts +13 -0
  14. package/src/v3/external.ts +6 -0
  15. package/src/v3/helpers/enumUtil.ts +17 -0
  16. package/src/v3/helpers/errorUtil.ts +8 -0
  17. package/src/v3/helpers/parseUtil.ts +176 -0
  18. package/src/v3/helpers/partialUtil.ts +34 -0
  19. package/src/v3/helpers/typeAliases.ts +2 -0
  20. package/src/v3/helpers/util.ts +224 -0
  21. package/src/v3/index.ts +4 -0
  22. package/src/v3/locales/en.ts +124 -0
  23. package/src/v3/standard-schema.ts +113 -0
  24. package/src/v3/tests/Mocker.ts +54 -0
  25. package/src/v3/tests/all-errors.test.ts +157 -0
  26. package/src/v3/tests/anyunknown.test.ts +28 -0
  27. package/src/v3/tests/array.test.ts +71 -0
  28. package/src/v3/tests/async-parsing.test.ts +388 -0
  29. package/src/v3/tests/async-refinements.test.ts +46 -0
  30. package/src/v3/tests/base.test.ts +29 -0
  31. package/src/v3/tests/bigint.test.ts +55 -0
  32. package/src/v3/tests/branded.test.ts +53 -0
  33. package/src/v3/tests/catch.test.ts +220 -0
  34. package/src/v3/tests/coerce.test.ts +133 -0
  35. package/src/v3/tests/complex.test.ts +56 -0
  36. package/src/v3/tests/custom.test.ts +31 -0
  37. package/src/v3/tests/date.test.ts +32 -0
  38. package/src/v3/tests/deepmasking.test.ts +186 -0
  39. package/src/v3/tests/default.test.ts +112 -0
  40. package/src/v3/tests/description.test.ts +33 -0
  41. package/src/v3/tests/discriminated-unions.test.ts +315 -0
  42. package/src/v3/tests/enum.test.ts +80 -0
  43. package/src/v3/tests/error.test.ts +551 -0
  44. package/src/v3/tests/firstparty.test.ts +87 -0
  45. package/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  46. package/src/v3/tests/function.test.ts +257 -0
  47. package/src/v3/tests/generics.test.ts +48 -0
  48. package/src/v3/tests/instanceof.test.ts +37 -0
  49. package/src/v3/tests/intersection.test.ts +110 -0
  50. package/src/v3/tests/language-server.source.ts +76 -0
  51. package/src/v3/tests/language-server.test.ts +207 -0
  52. package/src/v3/tests/literal.test.ts +36 -0
  53. package/src/v3/tests/map.test.ts +110 -0
  54. package/src/v3/tests/masking.test.ts +4 -0
  55. package/src/v3/tests/mocker.test.ts +19 -0
  56. package/src/v3/tests/nan.test.ts +21 -0
  57. package/src/v3/tests/nativeEnum.test.ts +87 -0
  58. package/src/v3/tests/nullable.test.ts +42 -0
  59. package/src/v3/tests/number.test.ts +176 -0
  60. package/src/v3/tests/object-augmentation.test.ts +29 -0
  61. package/src/v3/tests/object-in-es5-env.test.ts +29 -0
  62. package/src/v3/tests/object.test.ts +434 -0
  63. package/src/v3/tests/optional.test.ts +42 -0
  64. package/src/v3/tests/parseUtil.test.ts +23 -0
  65. package/src/v3/tests/parser.test.ts +41 -0
  66. package/src/v3/tests/partials.test.ts +243 -0
  67. package/src/v3/tests/pickomit.test.ts +111 -0
  68. package/src/v3/tests/pipeline.test.ts +29 -0
  69. package/src/v3/tests/preprocess.test.ts +186 -0
  70. package/src/v3/tests/primitive.test.ts +440 -0
  71. package/src/v3/tests/promise.test.ts +90 -0
  72. package/src/v3/tests/readonly.test.ts +194 -0
  73. package/src/v3/tests/record.test.ts +171 -0
  74. package/src/v3/tests/recursive.test.ts +197 -0
  75. package/src/v3/tests/refine.test.ts +313 -0
  76. package/src/v3/tests/safeparse.test.ts +27 -0
  77. package/src/v3/tests/set.test.ts +142 -0
  78. package/src/v3/tests/standard-schema.test.ts +83 -0
  79. package/src/v3/tests/string.test.ts +916 -0
  80. package/src/v3/tests/transformer.test.ts +233 -0
  81. package/src/v3/tests/tuple.test.ts +90 -0
  82. package/src/v3/tests/unions.test.ts +57 -0
  83. package/src/v3/tests/validations.test.ts +133 -0
  84. package/src/v3/tests/void.test.ts +15 -0
  85. package/src/v3/types.ts +5136 -0
  86. package/src/v4/classic/checks.ts +30 -0
  87. package/src/v4/classic/coerce.ts +27 -0
  88. package/src/v4/classic/compat.ts +66 -0
  89. package/src/v4/classic/errors.ts +75 -0
  90. package/src/v4/classic/external.ts +50 -0
  91. package/src/v4/classic/index.ts +5 -0
  92. package/src/v4/classic/iso.ts +90 -0
  93. package/src/v4/classic/parse.ts +33 -0
  94. package/src/v4/classic/schemas.ts +2055 -0
  95. package/src/v4/classic/tests/anyunknown.test.ts +26 -0
  96. package/src/v4/classic/tests/array.test.ts +264 -0
  97. package/src/v4/classic/tests/assignability.test.ts +210 -0
  98. package/src/v4/classic/tests/async-parsing.test.ts +381 -0
  99. package/src/v4/classic/tests/async-refinements.test.ts +68 -0
  100. package/src/v4/classic/tests/base.test.ts +7 -0
  101. package/src/v4/classic/tests/bigint.test.ts +54 -0
  102. package/src/v4/classic/tests/brand.test.ts +65 -0
  103. package/src/v4/classic/tests/catch.test.ts +252 -0
  104. package/src/v4/classic/tests/coalesce.test.ts +20 -0
  105. package/src/v4/classic/tests/coerce.test.ts +160 -0
  106. package/src/v4/classic/tests/continuability.test.ts +352 -0
  107. package/src/v4/classic/tests/custom.test.ts +40 -0
  108. package/src/v4/classic/tests/date.test.ts +31 -0
  109. package/src/v4/classic/tests/datetime.test.ts +296 -0
  110. package/src/v4/classic/tests/default.test.ts +313 -0
  111. package/src/v4/classic/tests/description.test.ts +32 -0
  112. package/src/v4/classic/tests/discriminated-unions.test.ts +592 -0
  113. package/src/v4/classic/tests/enum.test.ts +285 -0
  114. package/src/v4/classic/tests/error-utils.test.ts +527 -0
  115. package/src/v4/classic/tests/error.test.ts +711 -0
  116. package/src/v4/classic/tests/file.test.ts +91 -0
  117. package/src/v4/classic/tests/firstparty.test.ts +175 -0
  118. package/src/v4/classic/tests/function.test.ts +268 -0
  119. package/src/v4/classic/tests/generics.test.ts +72 -0
  120. package/src/v4/classic/tests/index.test.ts +829 -0
  121. package/src/v4/classic/tests/instanceof.test.ts +34 -0
  122. package/src/v4/classic/tests/intersection.test.ts +171 -0
  123. package/src/v4/classic/tests/json.test.ts +108 -0
  124. package/src/v4/classic/tests/lazy.test.ts +227 -0
  125. package/src/v4/classic/tests/literal.test.ts +92 -0
  126. package/src/v4/classic/tests/map.test.ts +196 -0
  127. package/src/v4/classic/tests/nan.test.ts +21 -0
  128. package/src/v4/classic/tests/nested-refine.test.ts +168 -0
  129. package/src/v4/classic/tests/nonoptional.test.ts +86 -0
  130. package/src/v4/classic/tests/nullable.test.ts +22 -0
  131. package/src/v4/classic/tests/number.test.ts +247 -0
  132. package/src/v4/classic/tests/object.test.ts +553 -0
  133. package/src/v4/classic/tests/optional.test.ts +103 -0
  134. package/src/v4/classic/tests/partial.test.ts +147 -0
  135. package/src/v4/classic/tests/pickomit.test.ts +127 -0
  136. package/src/v4/classic/tests/pipe.test.ts +81 -0
  137. package/src/v4/classic/tests/prefault.test.ts +37 -0
  138. package/src/v4/classic/tests/preprocess.test.ts +298 -0
  139. package/src/v4/classic/tests/primitive.test.ts +175 -0
  140. package/src/v4/classic/tests/promise.test.ts +81 -0
  141. package/src/v4/classic/tests/prototypes.test.ts +23 -0
  142. package/src/v4/classic/tests/readonly.test.ts +252 -0
  143. package/src/v4/classic/tests/record.test.ts +332 -0
  144. package/src/v4/classic/tests/recursive-types.test.ts +325 -0
  145. package/src/v4/classic/tests/refine.test.ts +423 -0
  146. package/src/v4/classic/tests/registries.test.ts +195 -0
  147. package/src/v4/classic/tests/set.test.ts +179 -0
  148. package/src/v4/classic/tests/standard-schema.test.ts +57 -0
  149. package/src/v4/classic/tests/string-formats.test.ts +109 -0
  150. package/src/v4/classic/tests/string.test.ts +881 -0
  151. package/src/v4/classic/tests/stringbool.test.ts +66 -0
  152. package/src/v4/classic/tests/template-literal.test.ts +758 -0
  153. package/src/v4/classic/tests/to-json-schema.test.ts +2182 -0
  154. package/src/v4/classic/tests/transform.test.ts +250 -0
  155. package/src/v4/classic/tests/tuple.test.ts +163 -0
  156. package/src/v4/classic/tests/union.test.ts +94 -0
  157. package/src/v4/classic/tests/validations.test.ts +283 -0
  158. package/src/v4/classic/tests/void.test.ts +12 -0
  159. package/src/v4/core/api.ts +1592 -0
  160. package/src/v4/core/checks.ts +1285 -0
  161. package/src/v4/core/config.ts +15 -0
  162. package/src/v4/core/core.ts +134 -0
  163. package/src/v4/core/doc.ts +44 -0
  164. package/src/v4/core/errors.ts +420 -0
  165. package/src/v4/core/function.ts +176 -0
  166. package/src/v4/core/index.ts +15 -0
  167. package/src/v4/core/json-schema.ts +143 -0
  168. package/src/v4/core/parse.ts +94 -0
  169. package/src/v4/core/regexes.ts +135 -0
  170. package/src/v4/core/registries.ts +86 -0
  171. package/src/v4/core/schemas.ts +3781 -0
  172. package/src/v4/core/standard-schema.ts +64 -0
  173. package/src/v4/core/tests/index.test.ts +46 -0
  174. package/src/v4/core/tests/locales/be.test.ts +124 -0
  175. package/src/v4/core/tests/locales/en.test.ts +22 -0
  176. package/src/v4/core/tests/locales/ru.test.ts +128 -0
  177. package/src/v4/core/tests/locales/tr.test.ts +69 -0
  178. package/src/v4/core/to-json-schema.ts +944 -0
  179. package/src/v4/core/util.ts +775 -0
  180. package/src/v4/core/versions.ts +5 -0
  181. package/src/v4/core/zsf.ts +323 -0
  182. package/src/v4/index.ts +4 -0
  183. package/src/v4/locales/ar.ts +125 -0
  184. package/src/v4/locales/az.ts +121 -0
  185. package/src/v4/locales/be.ts +184 -0
  186. package/src/v4/locales/ca.ts +127 -0
  187. package/src/v4/locales/cs.ts +142 -0
  188. package/src/v4/locales/de.ts +124 -0
  189. package/src/v4/locales/en.ts +127 -0
  190. package/src/v4/locales/eo.ts +125 -0
  191. package/src/v4/locales/es.ts +125 -0
  192. package/src/v4/locales/fa.ts +134 -0
  193. package/src/v4/locales/fi.ts +131 -0
  194. package/src/v4/locales/fr-CA.ts +126 -0
  195. package/src/v4/locales/fr.ts +124 -0
  196. package/src/v4/locales/he.ts +125 -0
  197. package/src/v4/locales/hu.ts +126 -0
  198. package/src/v4/locales/id.ts +125 -0
  199. package/src/v4/locales/index.ts +39 -0
  200. package/src/v4/locales/it.ts +125 -0
  201. package/src/v4/locales/ja.ts +122 -0
  202. package/src/v4/locales/kh.ts +126 -0
  203. package/src/v4/locales/ko.ts +131 -0
  204. package/src/v4/locales/mk.ts +127 -0
  205. package/src/v4/locales/ms.ts +124 -0
  206. package/src/v4/locales/nl.ts +126 -0
  207. package/src/v4/locales/no.ts +124 -0
  208. package/src/v4/locales/ota.ts +125 -0
  209. package/src/v4/locales/pl.ts +126 -0
  210. package/src/v4/locales/ps.ts +133 -0
  211. package/src/v4/locales/pt.ts +123 -0
  212. package/src/v4/locales/ru.ts +184 -0
  213. package/src/v4/locales/sl.ts +126 -0
  214. package/src/v4/locales/sv.ts +127 -0
  215. package/src/v4/locales/ta.ts +125 -0
  216. package/src/v4/locales/th.ts +126 -0
  217. package/src/v4/locales/tr.ts +121 -0
  218. package/src/v4/locales/ua.ts +126 -0
  219. package/src/v4/locales/ur.ts +126 -0
  220. package/src/v4/locales/vi.ts +125 -0
  221. package/src/v4/locales/zh-CN.ts +123 -0
  222. package/src/v4/locales/zh-TW.ts +125 -0
  223. package/src/v4/mini/checks.ts +32 -0
  224. package/src/v4/mini/coerce.ts +22 -0
  225. package/src/v4/mini/external.ts +40 -0
  226. package/src/v4/mini/index.ts +3 -0
  227. package/src/v4/mini/iso.ts +62 -0
  228. package/src/v4/mini/parse.ts +1 -0
  229. package/src/v4/mini/schemas.ts +1579 -0
  230. package/src/v4/mini/tests/assignability.test.ts +129 -0
  231. package/src/v4/mini/tests/brand.test.ts +51 -0
  232. package/src/v4/mini/tests/checks.test.ts +144 -0
  233. package/src/v4/mini/tests/computed.test.ts +36 -0
  234. package/src/v4/mini/tests/error.test.ts +22 -0
  235. package/src/v4/mini/tests/functions.test.ts +43 -0
  236. package/src/v4/mini/tests/index.test.ts +871 -0
  237. package/src/v4/mini/tests/number.test.ts +95 -0
  238. package/src/v4/mini/tests/object.test.ts +185 -0
  239. package/src/v4/mini/tests/prototypes.test.ts +43 -0
  240. package/src/v4/mini/tests/recursive-types.test.ts +275 -0
  241. package/src/v4/mini/tests/string.test.ts +293 -0
  242. package/src/v4-mini/index.ts +1 -0
  243. package/v4/classic/compat.cjs +1 -7
  244. package/v4/classic/compat.d.cts +0 -2
  245. package/v4/classic/compat.d.ts +0 -2
  246. package/v4/classic/compat.js +0 -6
  247. package/v4/classic/external.cjs +2 -1
  248. package/v4/classic/external.d.cts +1 -1
  249. package/v4/classic/external.d.ts +1 -1
  250. package/v4/classic/external.js +1 -1
  251. package/v4/classic/schemas.d.cts +4 -4
  252. package/v4/classic/schemas.d.ts +4 -4
  253. package/v4/core/api.cjs +11 -10
  254. package/v4/core/api.js +11 -10
  255. package/v4/core/checks.cjs +6 -4
  256. package/v4/core/checks.js +6 -4
  257. package/v4/core/core.cjs +5 -1
  258. package/v4/core/core.d.cts +2 -0
  259. package/v4/core/core.d.ts +2 -0
  260. package/v4/core/core.js +4 -0
  261. package/v4/core/schemas.cjs +12 -13
  262. package/v4/core/schemas.js +12 -13
  263. package/v4/core/util.cjs +3 -0
  264. package/v4/core/util.d.cts +1 -1
  265. package/v4/core/util.d.ts +1 -1
  266. package/v4/core/util.js +3 -0
  267. package/v4/locales/eo.cjs +144 -0
  268. package/v4/locales/eo.d.cts +5 -0
  269. package/v4/locales/eo.d.ts +5 -0
  270. package/v4/locales/eo.js +116 -0
  271. package/v4/locales/index.cjs +3 -1
  272. package/v4/locales/index.d.cts +1 -0
  273. package/v4/locales/index.d.ts +1 -0
  274. package/v4/locales/index.js +1 -0
  275. package/v4/mini/external.cjs +2 -1
  276. package/v4/mini/external.d.cts +1 -1
  277. package/v4/mini/external.d.ts +1 -1
  278. package/v4/mini/external.js +1 -1
@@ -0,0 +1,133 @@
1
+ import type { $ZodStringFormats } from "../core/checks.js";
2
+ import type * as errors from "../core/errors.js";
3
+ import * as util from "../core/util.js";
4
+
5
+ const error: () => errors.$ZodErrorMap = () => {
6
+ const Sizable: Record<string, { unit: string; verb: string }> = {
7
+ string: { unit: "توکي", verb: "ولري" },
8
+ file: { unit: "بایټس", verb: "ولري" },
9
+ array: { unit: "توکي", verb: "ولري" },
10
+ set: { unit: "توکي", verb: "ولري" },
11
+ };
12
+
13
+ function getSizing(origin: string): { unit: string; verb: string } | null {
14
+ return Sizable[origin] ?? null;
15
+ }
16
+
17
+ const parsedType = (data: any): string => {
18
+ const t = typeof data;
19
+
20
+ switch (t) {
21
+ case "number": {
22
+ return Number.isNaN(data) ? "NaN" : "عدد";
23
+ }
24
+ case "object": {
25
+ if (Array.isArray(data)) {
26
+ return "ارې";
27
+ }
28
+ if (data === null) {
29
+ return "null";
30
+ }
31
+ if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
32
+ return data.constructor.name;
33
+ }
34
+ }
35
+ }
36
+ return t;
37
+ };
38
+
39
+ const Nouns: {
40
+ [k in $ZodStringFormats | (string & {})]?: string;
41
+ } = {
42
+ regex: "ورودي",
43
+ email: "بریښنالیک",
44
+ url: "یو آر ال",
45
+ emoji: "ایموجي",
46
+ uuid: "UUID",
47
+ uuidv4: "UUIDv4",
48
+ uuidv6: "UUIDv6",
49
+ nanoid: "nanoid",
50
+ guid: "GUID",
51
+ cuid: "cuid",
52
+ cuid2: "cuid2",
53
+ ulid: "ULID",
54
+ xid: "XID",
55
+ ksuid: "KSUID",
56
+ datetime: "نیټه او وخت",
57
+ date: "نېټه",
58
+ time: "وخت",
59
+ duration: "موده",
60
+ ipv4: "د IPv4 پته",
61
+ ipv6: "د IPv6 پته",
62
+ cidrv4: "د IPv4 ساحه",
63
+ cidrv6: "د IPv6 ساحه",
64
+ base64: "base64-encoded متن",
65
+ base64url: "base64url-encoded متن",
66
+ json_string: "JSON متن",
67
+ e164: "د E.164 شمېره",
68
+ jwt: "JWT",
69
+ template_literal: "ورودي",
70
+ };
71
+
72
+ return (issue) => {
73
+ switch (issue.code) {
74
+ case "invalid_type":
75
+ return `ناسم ورودي: باید ${issue.expected} وای, مګر ${parsedType(issue.input)} ترلاسه شو`;
76
+ case "invalid_value":
77
+ if (issue.values.length === 1) {
78
+ return `ناسم ورودي: باید ${util.stringifyPrimitive(issue.values[0])} وای`;
79
+ }
80
+ return `ناسم انتخاب: باید یو له ${util.joinValues(issue.values, "|")} څخه وای`;
81
+ case "too_big": {
82
+ const adj = issue.inclusive ? "<=" : "<";
83
+ const sizing = getSizing(issue.origin);
84
+ if (sizing) {
85
+ return `ډیر لوی: ${issue.origin ?? "ارزښت"} باید ${adj}${issue.maximum.toString()} ${sizing.unit ?? "عنصرونه"} ولري`;
86
+ }
87
+ return `ډیر لوی: ${issue.origin ?? "ارزښت"} باید ${adj}${issue.maximum.toString()} وي`;
88
+ }
89
+ case "too_small": {
90
+ const adj = issue.inclusive ? ">=" : ">";
91
+ const sizing = getSizing(issue.origin);
92
+ if (sizing) {
93
+ return `ډیر کوچنی: ${issue.origin} باید ${adj}${issue.minimum.toString()} ${sizing.unit} ولري`;
94
+ }
95
+ return `ډیر کوچنی: ${issue.origin} باید ${adj}${issue.minimum.toString()} وي`;
96
+ }
97
+ case "invalid_format": {
98
+ const _issue = issue as errors.$ZodStringFormatIssues;
99
+ if (_issue.format === "starts_with") {
100
+ return `ناسم متن: باید د "${_issue.prefix}" سره پیل شي`;
101
+ }
102
+ if (_issue.format === "ends_with") {
103
+ return `ناسم متن: باید د "${_issue.suffix}" سره پای ته ورسيږي`;
104
+ }
105
+ if (_issue.format === "includes") {
106
+ return `ناسم متن: باید "${_issue.includes}" ولري`;
107
+ }
108
+ if (_issue.format === "regex") {
109
+ return `ناسم متن: باید د ${_issue.pattern} سره مطابقت ولري`;
110
+ }
111
+ return `${Nouns[_issue.format] ?? issue.format} ناسم دی`;
112
+ }
113
+ case "not_multiple_of":
114
+ return `ناسم عدد: باید د ${issue.divisor} مضرب وي`;
115
+ case "unrecognized_keys":
116
+ return `ناسم ${issue.keys.length > 1 ? "کلیډونه" : "کلیډ"}: ${util.joinValues(issue.keys, ", ")}`;
117
+ case "invalid_key":
118
+ return `ناسم کلیډ په ${issue.origin} کې`;
119
+ case "invalid_union":
120
+ return `ناسمه ورودي`;
121
+ case "invalid_element":
122
+ return `ناسم عنصر په ${issue.origin} کې`;
123
+ default:
124
+ return `ناسمه ورودي`;
125
+ }
126
+ };
127
+ };
128
+
129
+ export default function (): { localeError: errors.$ZodErrorMap } {
130
+ return {
131
+ localeError: error(),
132
+ };
133
+ }
@@ -0,0 +1,123 @@
1
+ import type { $ZodStringFormats } from "../core/checks.js";
2
+ import type * as errors from "../core/errors.js";
3
+ import * as util from "../core/util.js";
4
+
5
+ const error: () => errors.$ZodErrorMap = () => {
6
+ const Sizable: Record<string, { unit: string; verb: string }> = {
7
+ string: { unit: "caracteres", verb: "ter" },
8
+ file: { unit: "bytes", verb: "ter" },
9
+ array: { unit: "itens", verb: "ter" },
10
+ set: { unit: "itens", verb: "ter" },
11
+ };
12
+
13
+ function getSizing(origin: string): { unit: string; verb: string } | null {
14
+ return Sizable[origin] ?? null;
15
+ }
16
+
17
+ const parsedType = (data: any): string => {
18
+ const t = typeof data;
19
+
20
+ switch (t) {
21
+ case "number": {
22
+ return Number.isNaN(data) ? "NaN" : "número";
23
+ }
24
+ case "object": {
25
+ if (Array.isArray(data)) {
26
+ return "array";
27
+ }
28
+ if (data === null) {
29
+ return "nulo";
30
+ }
31
+ if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
32
+ return data.constructor.name;
33
+ }
34
+ }
35
+ }
36
+ return t;
37
+ };
38
+
39
+ const Nouns: {
40
+ [k in $ZodStringFormats | (string & {})]?: string;
41
+ } = {
42
+ regex: "padrão",
43
+ email: "endereço de e-mail",
44
+ url: "URL",
45
+ emoji: "emoji",
46
+ uuid: "UUID",
47
+ uuidv4: "UUIDv4",
48
+ uuidv6: "UUIDv6",
49
+ nanoid: "nanoid",
50
+ guid: "GUID",
51
+ cuid: "cuid",
52
+ cuid2: "cuid2",
53
+ ulid: "ULID",
54
+ xid: "XID",
55
+ ksuid: "KSUID",
56
+ datetime: "data e hora ISO",
57
+ date: "data ISO",
58
+ time: "hora ISO",
59
+ duration: "duração ISO",
60
+ ipv4: "endereço IPv4",
61
+ ipv6: "endereço IPv6",
62
+ cidrv4: "faixa de IPv4",
63
+ cidrv6: "faixa de IPv6",
64
+ base64: "texto codificado em base64",
65
+ base64url: "URL codificada em base64",
66
+ json_string: "texto JSON",
67
+ e164: "número E.164",
68
+ jwt: "JWT",
69
+ template_literal: "entrada",
70
+ };
71
+
72
+ return (issue) => {
73
+ switch (issue.code) {
74
+ case "invalid_type":
75
+ return `Tipo inválido: esperado ${issue.expected}, recebido ${parsedType(issue.input)}`;
76
+ case "invalid_value":
77
+ if (issue.values.length === 1) return `Entrada inválida: esperado ${util.stringifyPrimitive(issue.values[0])}`;
78
+ return `Opção inválida: esperada uma das ${util.joinValues(issue.values, "|")}`;
79
+ case "too_big": {
80
+ const adj = issue.inclusive ? "<=" : "<";
81
+ const sizing = getSizing(issue.origin);
82
+ if (sizing)
83
+ return `Muito grande: esperado que ${issue.origin ?? "valor"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementos"}`;
84
+ return `Muito grande: esperado que ${issue.origin ?? "valor"} fosse ${adj}${issue.maximum.toString()}`;
85
+ }
86
+ case "too_small": {
87
+ const adj = issue.inclusive ? ">=" : ">";
88
+ const sizing = getSizing(issue.origin);
89
+ if (sizing) {
90
+ return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;
91
+ }
92
+
93
+ return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;
94
+ }
95
+ case "invalid_format": {
96
+ const _issue = issue as errors.$ZodStringFormatIssues;
97
+ if (_issue.format === "starts_with") return `Texto inválido: deve começar com "${_issue.prefix}"`;
98
+ if (_issue.format === "ends_with") return `Texto inválido: deve terminar com "${_issue.suffix}"`;
99
+ if (_issue.format === "includes") return `Texto inválido: deve incluir "${_issue.includes}"`;
100
+ if (_issue.format === "regex") return `Texto inválido: deve corresponder ao padrão ${_issue.pattern}`;
101
+ return `${Nouns[_issue.format] ?? issue.format} inválido`;
102
+ }
103
+ case "not_multiple_of":
104
+ return `Número inválido: deve ser múltiplo de ${issue.divisor}`;
105
+ case "unrecognized_keys":
106
+ return `Chave${issue.keys.length > 1 ? "s" : ""} desconhecida${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
107
+ case "invalid_key":
108
+ return `Chave inválida em ${issue.origin}`;
109
+ case "invalid_union":
110
+ return "Entrada inválida";
111
+ case "invalid_element":
112
+ return `Valor inválido em ${issue.origin}`;
113
+ default:
114
+ return `Campo inválido`;
115
+ }
116
+ };
117
+ };
118
+
119
+ export default function (): { localeError: errors.$ZodErrorMap } {
120
+ return {
121
+ localeError: error(),
122
+ };
123
+ }
@@ -0,0 +1,184 @@
1
+ import type { $ZodStringFormats } from "../core/checks.js";
2
+ import type * as errors from "../core/errors.js";
3
+ import * as util from "../core/util.js";
4
+
5
+ function getRussianPlural(count: number, one: string, few: string, many: string): string {
6
+ const absCount = Math.abs(count);
7
+ const lastDigit = absCount % 10;
8
+ const lastTwoDigits = absCount % 100;
9
+
10
+ if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {
11
+ return many;
12
+ }
13
+
14
+ if (lastDigit === 1) {
15
+ return one;
16
+ }
17
+
18
+ if (lastDigit >= 2 && lastDigit <= 4) {
19
+ return few;
20
+ }
21
+
22
+ return many;
23
+ }
24
+
25
+ interface RussianSizable {
26
+ unit: {
27
+ one: string;
28
+ few: string;
29
+ many: string;
30
+ };
31
+ verb: string;
32
+ }
33
+ const error: () => errors.$ZodErrorMap = () => {
34
+ const Sizable: Record<string, RussianSizable> = {
35
+ string: {
36
+ unit: {
37
+ one: "символ",
38
+ few: "символа",
39
+ many: "символов",
40
+ },
41
+ verb: "иметь",
42
+ },
43
+ file: {
44
+ unit: {
45
+ one: "байт",
46
+ few: "байта",
47
+ many: "байт",
48
+ },
49
+ verb: "иметь",
50
+ },
51
+ array: {
52
+ unit: {
53
+ one: "элемент",
54
+ few: "элемента",
55
+ many: "элементов",
56
+ },
57
+ verb: "иметь",
58
+ },
59
+ set: {
60
+ unit: {
61
+ one: "элемент",
62
+ few: "элемента",
63
+ many: "элементов",
64
+ },
65
+ verb: "иметь",
66
+ },
67
+ };
68
+
69
+ function getSizing(origin: string): RussianSizable | null {
70
+ return Sizable[origin] ?? null;
71
+ }
72
+
73
+ const parsedType = (data: any): string => {
74
+ const t = typeof data;
75
+
76
+ switch (t) {
77
+ case "number": {
78
+ return Number.isNaN(data) ? "NaN" : "число";
79
+ }
80
+ case "object": {
81
+ if (Array.isArray(data)) {
82
+ return "массив";
83
+ }
84
+ if (data === null) {
85
+ return "null";
86
+ }
87
+
88
+ if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
89
+ return data.constructor.name;
90
+ }
91
+ }
92
+ }
93
+ return t;
94
+ };
95
+
96
+ const Nouns: {
97
+ [k in $ZodStringFormats | (string & {})]?: string;
98
+ } = {
99
+ regex: "ввод",
100
+ email: "email адрес",
101
+ url: "URL",
102
+ emoji: "эмодзи",
103
+ uuid: "UUID",
104
+ uuidv4: "UUIDv4",
105
+ uuidv6: "UUIDv6",
106
+ nanoid: "nanoid",
107
+ guid: "GUID",
108
+ cuid: "cuid",
109
+ cuid2: "cuid2",
110
+ ulid: "ULID",
111
+ xid: "XID",
112
+ ksuid: "KSUID",
113
+ datetime: "ISO дата и время",
114
+ date: "ISO дата",
115
+ time: "ISO время",
116
+ duration: "ISO длительность",
117
+ ipv4: "IPv4 адрес",
118
+ ipv6: "IPv6 адрес",
119
+ cidrv4: "IPv4 диапазон",
120
+ cidrv6: "IPv6 диапазон",
121
+ base64: "строка в формате base64",
122
+ base64url: "строка в формате base64url",
123
+ json_string: "JSON строка",
124
+ e164: "номер E.164",
125
+ jwt: "JWT",
126
+ template_literal: "ввод",
127
+ };
128
+
129
+ return (issue) => {
130
+ switch (issue.code) {
131
+ case "invalid_type":
132
+ return `Неверный ввод: ожидалось ${issue.expected}, получено ${parsedType(issue.input)}`;
133
+ case "invalid_value":
134
+ if (issue.values.length === 1) return `Неверный ввод: ожидалось ${util.stringifyPrimitive(issue.values[0])}`;
135
+ return `Неверный вариант: ожидалось одно из ${util.joinValues(issue.values, "|")}`;
136
+ case "too_big": {
137
+ const adj = issue.inclusive ? "<=" : "<";
138
+ const sizing = getSizing(issue.origin);
139
+ if (sizing) {
140
+ const maxValue = Number(issue.maximum);
141
+ const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
142
+ return `Слишком большое значение: ожидалось, что ${issue.origin ?? "значение"} будет иметь ${adj}${issue.maximum.toString()} ${unit}`;
143
+ }
144
+ return `Слишком большое значение: ожидалось, что ${issue.origin ?? "значение"} будет ${adj}${issue.maximum.toString()}`;
145
+ }
146
+ case "too_small": {
147
+ const adj = issue.inclusive ? ">=" : ">";
148
+ const sizing = getSizing(issue.origin);
149
+ if (sizing) {
150
+ const minValue = Number(issue.minimum);
151
+ const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
152
+ return `Слишком маленькое значение: ожидалось, что ${issue.origin} будет иметь ${adj}${issue.minimum.toString()} ${unit}`;
153
+ }
154
+ return `Слишком маленькое значение: ожидалось, что ${issue.origin} будет ${adj}${issue.minimum.toString()}`;
155
+ }
156
+ case "invalid_format": {
157
+ const _issue = issue as errors.$ZodStringFormatIssues;
158
+ if (_issue.format === "starts_with") return `Неверная строка: должна начинаться с "${_issue.prefix}"`;
159
+ if (_issue.format === "ends_with") return `Неверная строка: должна заканчиваться на "${_issue.suffix}"`;
160
+ if (_issue.format === "includes") return `Неверная строка: должна содержать "${_issue.includes}"`;
161
+ if (_issue.format === "regex") return `Неверная строка: должна соответствовать шаблону ${_issue.pattern}`;
162
+ return `Неверный ${Nouns[_issue.format] ?? issue.format}`;
163
+ }
164
+ case "not_multiple_of":
165
+ return `Неверное число: должно быть кратным ${issue.divisor}`;
166
+ case "unrecognized_keys":
167
+ return `Нераспознанн${issue.keys.length > 1 ? "ые" : "ый"} ключ${issue.keys.length > 1 ? "и" : ""}: ${util.joinValues(issue.keys, ", ")}`;
168
+ case "invalid_key":
169
+ return `Неверный ключ в ${issue.origin}`;
170
+ case "invalid_union":
171
+ return "Неверные входные данные";
172
+ case "invalid_element":
173
+ return `Неверное значение в ${issue.origin}`;
174
+ default:
175
+ return `Неверные входные данные`;
176
+ }
177
+ };
178
+ };
179
+
180
+ export default function (): { localeError: errors.$ZodErrorMap } {
181
+ return {
182
+ localeError: error(),
183
+ };
184
+ }
@@ -0,0 +1,126 @@
1
+ import type { $ZodStringFormats } from "../core/checks.js";
2
+ import type * as errors from "../core/errors.js";
3
+ import * as util from "../core/util.js";
4
+
5
+ const error: () => errors.$ZodErrorMap = () => {
6
+ const Sizable: Record<string, { unit: string; verb: string }> = {
7
+ string: { unit: "znakov", verb: "imeti" },
8
+ file: { unit: "bajtov", verb: "imeti" },
9
+ array: { unit: "elementov", verb: "imeti" },
10
+ set: { unit: "elementov", verb: "imeti" },
11
+ };
12
+
13
+ function getSizing(origin: string): { unit: string; verb: string } | null {
14
+ return Sizable[origin] ?? null;
15
+ }
16
+
17
+ const parsedType = (data: any): string => {
18
+ const t = typeof data;
19
+
20
+ switch (t) {
21
+ case "number": {
22
+ return Number.isNaN(data) ? "NaN" : "število";
23
+ }
24
+ case "object": {
25
+ if (Array.isArray(data)) {
26
+ return "tabela";
27
+ }
28
+ if (data === null) {
29
+ return "null";
30
+ }
31
+
32
+ if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
33
+ return data.constructor.name;
34
+ }
35
+ }
36
+ }
37
+ return t;
38
+ };
39
+
40
+ const Nouns: {
41
+ [k in $ZodStringFormats | (string & {})]?: string;
42
+ } = {
43
+ regex: "vnos",
44
+ email: "e-poštni naslov",
45
+ url: "URL",
46
+ emoji: "emoji",
47
+ uuid: "UUID",
48
+ uuidv4: "UUIDv4",
49
+ uuidv6: "UUIDv6",
50
+ nanoid: "nanoid",
51
+ guid: "GUID",
52
+ cuid: "cuid",
53
+ cuid2: "cuid2",
54
+ ulid: "ULID",
55
+ xid: "XID",
56
+ ksuid: "KSUID",
57
+ datetime: "ISO datum in čas",
58
+ date: "ISO datum",
59
+ time: "ISO čas",
60
+ duration: "ISO trajanje",
61
+ ipv4: "IPv4 naslov",
62
+ ipv6: "IPv6 naslov",
63
+ cidrv4: "obseg IPv4",
64
+ cidrv6: "obseg IPv6",
65
+ base64: "base64 kodiran niz",
66
+ base64url: "base64url kodiran niz",
67
+ json_string: "JSON niz",
68
+ e164: "E.164 številka",
69
+ jwt: "JWT",
70
+ template_literal: "vnos",
71
+ };
72
+
73
+ return (issue) => {
74
+ switch (issue.code) {
75
+ case "invalid_type":
76
+ return `Neveljaven vnos: pričakovano ${issue.expected}, prejeto ${parsedType(issue.input)}`;
77
+ case "invalid_value":
78
+ if (issue.values.length === 1)
79
+ return `Neveljaven vnos: pričakovano ${util.stringifyPrimitive(issue.values[0])}`;
80
+ return `Neveljavna možnost: pričakovano eno izmed ${util.joinValues(issue.values, "|")}`;
81
+ case "too_big": {
82
+ const adj = issue.inclusive ? "<=" : "<";
83
+ const sizing = getSizing(issue.origin);
84
+ if (sizing)
85
+ return `Preveliko: pričakovano, da bo ${issue.origin ?? "vrednost"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementov"}`;
86
+ return `Preveliko: pričakovano, da bo ${issue.origin ?? "vrednost"} ${adj}${issue.maximum.toString()}`;
87
+ }
88
+ case "too_small": {
89
+ const adj = issue.inclusive ? ">=" : ">";
90
+ const sizing = getSizing(issue.origin);
91
+ if (sizing) {
92
+ return `Premajhno: pričakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;
93
+ }
94
+ return `Premajhno: pričakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;
95
+ }
96
+ case "invalid_format": {
97
+ const _issue = issue as errors.$ZodStringFormatIssues;
98
+ if (_issue.format === "starts_with") {
99
+ return `Neveljaven niz: mora se začeti z "${_issue.prefix}"`;
100
+ }
101
+ if (_issue.format === "ends_with") return `Neveljaven niz: mora se končati z "${_issue.suffix}"`;
102
+ if (_issue.format === "includes") return `Neveljaven niz: mora vsebovati "${_issue.includes}"`;
103
+ if (_issue.format === "regex") return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;
104
+ return `Neveljaven ${Nouns[_issue.format] ?? issue.format}`;
105
+ }
106
+ case "not_multiple_of":
107
+ return `Neveljavno število: mora biti večkratnik ${issue.divisor}`;
108
+ case "unrecognized_keys":
109
+ return `Neprepoznan${issue.keys.length > 1 ? "i ključi" : " ključ"}: ${util.joinValues(issue.keys, ", ")}`;
110
+ case "invalid_key":
111
+ return `Neveljaven ključ v ${issue.origin}`;
112
+ case "invalid_union":
113
+ return "Neveljaven vnos";
114
+ case "invalid_element":
115
+ return `Neveljavna vrednost v ${issue.origin}`;
116
+ default:
117
+ return "Neveljaven vnos";
118
+ }
119
+ };
120
+ };
121
+
122
+ export default function (): { localeError: errors.$ZodErrorMap } {
123
+ return {
124
+ localeError: error(),
125
+ };
126
+ }
@@ -0,0 +1,127 @@
1
+ import type { $ZodStringFormats } from "../core/checks.js";
2
+ import type * as errors from "../core/errors.js";
3
+ import * as util from "../core/util.js";
4
+
5
+ const error: () => errors.$ZodErrorMap = () => {
6
+ const Sizable: Record<string, { unit: string; verb: string }> = {
7
+ string: { unit: "tecken", verb: "att ha" },
8
+ file: { unit: "bytes", verb: "att ha" },
9
+ array: { unit: "objekt", verb: "att innehålla" },
10
+ set: { unit: "objekt", verb: "att innehålla" },
11
+ };
12
+
13
+ function getSizing(origin: string): { unit: string; verb: string } | null {
14
+ return Sizable[origin] ?? null;
15
+ }
16
+
17
+ const parsedType = (data: any): string => {
18
+ const t = typeof data;
19
+
20
+ switch (t) {
21
+ case "number": {
22
+ return Number.isNaN(data) ? "NaN" : "antal";
23
+ }
24
+ case "object": {
25
+ if (Array.isArray(data)) {
26
+ return "lista";
27
+ }
28
+ if (data === null) {
29
+ return "null";
30
+ }
31
+
32
+ if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
33
+ return data.constructor.name;
34
+ }
35
+ }
36
+ }
37
+ return t;
38
+ };
39
+
40
+ const Nouns: {
41
+ [k in $ZodStringFormats | (string & {})]?: string;
42
+ } = {
43
+ regex: "reguljärt uttryck",
44
+ email: "e-postadress",
45
+ url: "URL",
46
+ emoji: "emoji",
47
+ uuid: "UUID",
48
+ uuidv4: "UUIDv4",
49
+ uuidv6: "UUIDv6",
50
+ nanoid: "nanoid",
51
+ guid: "GUID",
52
+ cuid: "cuid",
53
+ cuid2: "cuid2",
54
+ ulid: "ULID",
55
+ xid: "XID",
56
+ ksuid: "KSUID",
57
+ datetime: "ISO-datum och tid",
58
+ date: "ISO-datum",
59
+ time: "ISO-tid",
60
+ duration: "ISO-varaktighet",
61
+ ipv4: "IPv4-intervall",
62
+ ipv6: "IPv6-intervall",
63
+ cidrv4: "IPv4-spektrum",
64
+ cidrv6: "IPv6-spektrum",
65
+ base64: "base64-kodad sträng",
66
+ base64url: "base64url-kodad sträng",
67
+ json_string: "JSON-sträng",
68
+ e164: "E.164-nummer",
69
+ jwt: "JWT",
70
+ template_literal: "mall-literal",
71
+ };
72
+
73
+ return (issue) => {
74
+ switch (issue.code) {
75
+ case "invalid_type":
76
+ return `Ogiltig inmatning: förväntat ${issue.expected}, fick ${parsedType(issue.input)}`;
77
+ case "invalid_value":
78
+ if (issue.values.length === 1)
79
+ return `Ogiltig inmatning: förväntat ${util.stringifyPrimitive(issue.values[0])}`;
80
+ return `Ogiltigt val: förväntade en av ${util.joinValues(issue.values, "|")}`;
81
+ case "too_big": {
82
+ const adj = issue.inclusive ? "<=" : "<";
83
+ const sizing = getSizing(issue.origin);
84
+ if (sizing) {
85
+ return `För stor(t): förväntade ${issue.origin ?? "värdet"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? "element"}`;
86
+ }
87
+ return `För stor(t): förväntat ${issue.origin ?? "värdet"} att ha ${adj}${issue.maximum.toString()}`;
88
+ }
89
+ case "too_small": {
90
+ const adj = issue.inclusive ? ">=" : ">";
91
+ const sizing = getSizing(issue.origin);
92
+ if (sizing) {
93
+ return `För lite(t): förväntade ${issue.origin ?? "värdet"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;
94
+ }
95
+ return `För lite(t): förväntade ${issue.origin ?? "värdet"} att ha ${adj}${issue.minimum.toString()}`;
96
+ }
97
+ case "invalid_format": {
98
+ const _issue = issue as errors.$ZodStringFormatIssues;
99
+ if (_issue.format === "starts_with") {
100
+ return `Ogiltig sträng: måste börja med "${_issue.prefix}"`;
101
+ }
102
+ if (_issue.format === "ends_with") return `Ogiltig sträng: måste sluta med "${_issue.suffix}"`;
103
+ if (_issue.format === "includes") return `Ogiltig sträng: måste innehålla "${_issue.includes}"`;
104
+ if (_issue.format === "regex") return `Ogiltig sträng: måste matcha mönstret "${_issue.pattern}"`;
105
+ return `Ogiltig(t) ${Nouns[_issue.format] ?? issue.format}`;
106
+ }
107
+ case "not_multiple_of":
108
+ return `Ogiltigt tal: måste vara en multipel av ${issue.divisor}`;
109
+ case "unrecognized_keys":
110
+ return `${issue.keys.length > 1 ? "Okända nycklar" : "Okänd nyckel"}: ${util.joinValues(issue.keys, ", ")}`;
111
+ case "invalid_key":
112
+ return `Ogiltig nyckel i ${issue.origin ?? "värdet"}`;
113
+ case "invalid_union":
114
+ return "Ogiltig input";
115
+ case "invalid_element":
116
+ return `Ogiltigt värde i ${issue.origin ?? "värdet"}`;
117
+ default:
118
+ return `Ogiltig input`;
119
+ }
120
+ };
121
+ };
122
+
123
+ export default function (): { localeError: errors.$ZodErrorMap } {
124
+ return {
125
+ localeError: error(),
126
+ };
127
+ }