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,125 @@
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: "caratteri", verb: "avere" },
8
+ file: { unit: "byte", verb: "avere" },
9
+ array: { unit: "elementi", verb: "avere" },
10
+ set: { unit: "elementi", verb: "avere" },
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" : "numero";
23
+ }
24
+ case "object": {
25
+ if (Array.isArray(data)) {
26
+ return "vettore";
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: "input",
44
+ email: "indirizzo email",
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: "data e ora ISO",
58
+ date: "data ISO",
59
+ time: "ora ISO",
60
+ duration: "durata ISO",
61
+ ipv4: "indirizzo IPv4",
62
+ ipv6: "indirizzo IPv6",
63
+ cidrv4: "intervallo IPv4",
64
+ cidrv6: "intervallo IPv6",
65
+ base64: "stringa codificata in base64",
66
+ base64url: "URL codificata in base64",
67
+ json_string: "stringa JSON",
68
+ e164: "numero E.164",
69
+ jwt: "JWT",
70
+ template_literal: "input",
71
+ };
72
+
73
+ return (issue) => {
74
+ switch (issue.code) {
75
+ case "invalid_type":
76
+ return `Input non valido: atteso ${issue.expected}, ricevuto ${parsedType(issue.input)}`;
77
+ // return `Input non valido: atteso ${issue.expected}, ricevuto ${util.getParsedType(issue.input)}`;
78
+ case "invalid_value":
79
+ if (issue.values.length === 1) return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;
80
+ return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, "|")}`;
81
+ case "too_big": {
82
+ const adj = issue.inclusive ? "<=" : "<";
83
+ const sizing = getSizing(issue.origin);
84
+ if (sizing)
85
+ return `Troppo grande: ${issue.origin ?? "valore"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementi"}`;
86
+ return `Troppo grande: ${issue.origin ?? "valore"} deve essere ${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 `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;
93
+ }
94
+
95
+ return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;
96
+ }
97
+ case "invalid_format": {
98
+ const _issue = issue as errors.$ZodStringFormatIssues;
99
+ if (_issue.format === "starts_with") return `Stringa non valida: deve iniziare con "${_issue.prefix}"`;
100
+ if (_issue.format === "ends_with") return `Stringa non valida: deve terminare con "${_issue.suffix}"`;
101
+ if (_issue.format === "includes") return `Stringa non valida: deve includere "${_issue.includes}"`;
102
+ if (_issue.format === "regex") return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;
103
+ return `Invalid ${Nouns[_issue.format] ?? issue.format}`;
104
+ }
105
+ case "not_multiple_of":
106
+ return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;
107
+ case "unrecognized_keys":
108
+ return `Chiav${issue.keys.length > 1 ? "i" : "e"} non riconosciut${issue.keys.length > 1 ? "e" : "a"}: ${util.joinValues(issue.keys, ", ")}`;
109
+ case "invalid_key":
110
+ return `Chiave non valida in ${issue.origin}`;
111
+ case "invalid_union":
112
+ return "Input non valido";
113
+ case "invalid_element":
114
+ return `Valore non valido in ${issue.origin}`;
115
+ default:
116
+ return `Input non valido`;
117
+ }
118
+ };
119
+ };
120
+
121
+ export default function (): { localeError: errors.$ZodErrorMap } {
122
+ return {
123
+ localeError: error(),
124
+ };
125
+ }
@@ -0,0 +1,122 @@
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
+
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: "入力値",
44
+ email: "メールアドレス",
45
+ url: "URL",
46
+ 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日時",
58
+ date: "ISO日付",
59
+ time: "ISO時刻",
60
+ duration: "ISO期間",
61
+ ipv4: "IPv4アドレス",
62
+ ipv6: "IPv6アドレス",
63
+ cidrv4: "IPv4範囲",
64
+ cidrv6: "IPv6範囲",
65
+ base64: "base64エンコード文字列",
66
+ base64url: "base64urlエンコード文字列",
67
+ json_string: "JSON文字列",
68
+ e164: "E.164番号",
69
+ jwt: "JWT",
70
+ template_literal: "入力値",
71
+ };
72
+
73
+ return (issue) => {
74
+ switch (issue.code) {
75
+ case "invalid_type":
76
+ return `無効な入力: ${issue.expected}が期待されましたが、${parsedType(issue.input)}が入力されました`;
77
+ case "invalid_value":
78
+ if (issue.values.length === 1) return `無効な入力: ${util.stringifyPrimitive(issue.values[0])}が期待されました`;
79
+ return `無効な選択: ${util.joinValues(issue.values, "、")}のいずれかである必要があります`;
80
+ case "too_big": {
81
+ const adj = issue.inclusive ? "以下である" : "より小さい";
82
+ const sizing = getSizing(issue.origin);
83
+ if (sizing)
84
+ return `大きすぎる値: ${issue.origin ?? "値"}は${issue.maximum.toString()}${sizing.unit ?? "要素"}${adj}必要があります`;
85
+ return `大きすぎる値: ${issue.origin ?? "値"}は${issue.maximum.toString()}${adj}必要があります`;
86
+ }
87
+ case "too_small": {
88
+ const adj = issue.inclusive ? "以上である" : "より大きい";
89
+ const sizing = getSizing(issue.origin);
90
+ if (sizing)
91
+ return `小さすぎる値: ${issue.origin}は${issue.minimum.toString()}${sizing.unit}${adj}必要があります`;
92
+ return `小さすぎる値: ${issue.origin}は${issue.minimum.toString()}${adj}必要があります`;
93
+ }
94
+ case "invalid_format": {
95
+ const _issue = issue as errors.$ZodStringFormatIssues;
96
+ if (_issue.format === "starts_with") return `無効な文字列: "${_issue.prefix}"で始まる必要があります`;
97
+ if (_issue.format === "ends_with") return `無効な文字列: "${_issue.suffix}"で終わる必要があります`;
98
+ if (_issue.format === "includes") return `無効な文字列: "${_issue.includes}"を含む必要があります`;
99
+ if (_issue.format === "regex") return `無効な文字列: パターン${_issue.pattern}に一致する必要があります`;
100
+ return `無効な${Nouns[_issue.format] ?? issue.format}`;
101
+ }
102
+ case "not_multiple_of":
103
+ return `無効な数値: ${issue.divisor}の倍数である必要があります`;
104
+ case "unrecognized_keys":
105
+ return `認識されていないキー${issue.keys.length > 1 ? "群" : ""}: ${util.joinValues(issue.keys, "、")}`;
106
+ case "invalid_key":
107
+ return `${issue.origin}内の無効なキー`;
108
+ case "invalid_union":
109
+ return "無効な入力";
110
+ case "invalid_element":
111
+ return `${issue.origin}内の無効な値`;
112
+ default:
113
+ return `無効な入力`;
114
+ }
115
+ };
116
+ };
117
+
118
+ export default function (): { localeError: errors.$ZodErrorMap } {
119
+ return {
120
+ localeError: error(),
121
+ };
122
+ }
@@ -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: "តួអក្សរ", 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 "អារេ (Array)";
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: "ទិន្នន័យបញ្ចូល",
44
+ email: "អាសយដ្ឋានអ៊ីមែល",
45
+ url: "URL",
46
+ 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",
58
+ date: "កាលបរិច្ឆេទ ISO",
59
+ time: "ម៉ោង ISO",
60
+ duration: "រយៈពេល ISO",
61
+ ipv4: "អាសយដ្ឋាន IPv4",
62
+ ipv6: "អាសយដ្ឋាន IPv6",
63
+ cidrv4: "ដែនអាសយដ្ឋាន IPv4",
64
+ cidrv6: "ដែនអាសយដ្ឋាន IPv6",
65
+ base64: "ខ្សែអក្សរអ៊ិកូដ base64",
66
+ base64url: "ខ្សែអក្សរអ៊ិកូដ base64url",
67
+ json_string: "ខ្សែអក្សរ JSON",
68
+ e164: "លេខ E.164",
69
+ jwt: "JWT",
70
+ template_literal: "ទិន្នន័យបញ្ចូល",
71
+ };
72
+
73
+ return (issue) => {
74
+ switch (issue.code) {
75
+ case "invalid_type":
76
+ return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${issue.expected} ប៉ុន្តែទទួលបាន ${parsedType(issue.input)}`;
77
+ case "invalid_value":
78
+ if (issue.values.length === 1) return `ទិន្នន័យបញ្ចូលមិនត្រឹមត្រូវ៖ ត្រូវការ ${util.stringifyPrimitive(issue.values[0])}`;
79
+ return `ជម្រើសមិនត្រឹមត្រូវ៖ ត្រូវជាមួយក្នុងចំណោម ${util.joinValues(issue.values, "|")}`;
80
+ case "too_big": {
81
+ const adj = issue.inclusive ? "<=" : "<";
82
+ const sizing = getSizing(issue.origin);
83
+ if (sizing)
84
+ return `ធំពេក៖ ត្រូវការ ${issue.origin ?? "តម្លៃ"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? "ធាតុ"}`;
85
+ return `ធំពេក៖ ត្រូវការ ${issue.origin ?? "តម្លៃ"} ${adj} ${issue.maximum.toString()}`;
86
+ }
87
+ case "too_small": {
88
+ const adj = issue.inclusive ? ">=" : ">";
89
+ const sizing = getSizing(issue.origin);
90
+ if (sizing) {
91
+ return `តូចពេក៖ ត្រូវការ ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;
92
+ }
93
+
94
+ return `តូចពេក៖ ត្រូវការ ${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 `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវចាប់ផ្តើមដោយ "${_issue.prefix}"`;
100
+ }
101
+ if (_issue.format === "ends_with") return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវបញ្ចប់ដោយ "${_issue.suffix}"`;
102
+ if (_issue.format === "includes") return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវមាន "${_issue.includes}"`;
103
+ if (_issue.format === "regex") return `ខ្សែអក្សរមិនត្រឹមត្រូវ៖ ត្រូវតែផ្គូផ្គងនឹងទម្រង់ដែលបានកំណត់ ${_issue.pattern}`;
104
+ return `មិនត្រឹមត្រូវ៖ ${Nouns[_issue.format] ?? issue.format}`;
105
+ }
106
+ case "not_multiple_of":
107
+ return `លេខមិនត្រឹមត្រូវ៖ ត្រូវតែជាពហុគុណនៃ ${issue.divisor}`;
108
+ case "unrecognized_keys":
109
+ return `រកឃើញសោមិនស្គាល់៖ ${util.joinValues(issue.keys, ", ")}`;
110
+ case "invalid_key":
111
+ return `សោមិនត្រឹមត្រូវនៅក្នុង ${issue.origin}`;
112
+ case "invalid_union":
113
+ return `ទិន្នន័យមិនត្រឹមត្រូវ`;
114
+ case "invalid_element":
115
+ return `ទិន្នន័យមិនត្រឹមត្រូវនៅក្នុង ${issue.origin}`;
116
+ default:
117
+ return `ទិន្នន័យមិនត្រឹមត្រូវ`;
118
+ }
119
+ };
120
+ };
121
+
122
+ export default function (): { localeError: errors.$ZodErrorMap } {
123
+ return {
124
+ localeError: error(),
125
+ };
126
+ }
@@ -0,0 +1,131 @@
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: "to have" },
8
+ file: { unit: "바이트", verb: "to have" },
9
+ array: { unit: "개", verb: "to have" },
10
+ set: { unit: "개", verb: "to have" },
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" : "number";
23
+ }
24
+ case "object": {
25
+ if (Array.isArray(data)) {
26
+ return "array";
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: "입력",
44
+ email: "이메일 주소",
45
+ url: "URL",
46
+ 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 날짜시간",
58
+ date: "ISO 날짜",
59
+ time: "ISO 시간",
60
+ duration: "ISO 기간",
61
+ ipv4: "IPv4 주소",
62
+ ipv6: "IPv6 주소",
63
+ cidrv4: "IPv4 범위",
64
+ cidrv6: "IPv6 범위",
65
+ base64: "base64 인코딩 문자열",
66
+ base64url: "base64url 인코딩 문자열",
67
+ json_string: "JSON 문자열",
68
+ e164: "E.164 번호",
69
+ jwt: "JWT",
70
+ template_literal: "입력",
71
+ };
72
+
73
+ return (issue) => {
74
+ switch (issue.code) {
75
+ case "invalid_type":
76
+ return `잘못된 입력: 예상 타입은 ${issue.expected}, 받은 타입은 ${parsedType(issue.input)}입니다`;
77
+ case "invalid_value":
78
+ if (issue.values.length === 1)
79
+ return `잘못된 입력: 값은 ${util.stringifyPrimitive(issue.values[0])} 이어야 합니다`;
80
+ return `잘못된 옵션: ${util.joinValues(issue.values, "또는 ")} 중 하나여야 합니다`;
81
+ case "too_big": {
82
+ const adj = issue.inclusive ? "이하" : "미만";
83
+ const suffix = adj === "미만" ? "이어야 합니다" : "여야 합니다";
84
+ const sizing = getSizing(issue.origin);
85
+ const unit = sizing?.unit ?? "요소";
86
+ if (sizing) return `${issue.origin ?? "값"}이 너무 큽니다: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;
87
+
88
+ return `${issue.origin ?? "값"}이 너무 큽니다: ${issue.maximum.toString()} ${adj}${suffix}`;
89
+ }
90
+ case "too_small": {
91
+ const adj = issue.inclusive ? "이상" : "초과";
92
+ const suffix = adj === "이상" ? "이어야 합니다" : "여야 합니다";
93
+ const sizing = getSizing(issue.origin);
94
+ const unit = sizing?.unit ?? "요소";
95
+ if (sizing) {
96
+ return `${issue.origin ?? "값"}이 너무 작습니다: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;
97
+ }
98
+
99
+ return `${issue.origin ?? "값"}이 너무 작습니다: ${issue.minimum.toString()} ${adj}${suffix}`;
100
+ }
101
+ case "invalid_format": {
102
+ const _issue = issue as errors.$ZodStringFormatIssues;
103
+ if (_issue.format === "starts_with") {
104
+ return `잘못된 문자열: "${_issue.prefix}"(으)로 시작해야 합니다`;
105
+ }
106
+ if (_issue.format === "ends_with") return `잘못된 문자열: "${_issue.suffix}"(으)로 끝나야 합니다`;
107
+ if (_issue.format === "includes") return `잘못된 문자열: "${_issue.includes}"을(를) 포함해야 합니다`;
108
+ if (_issue.format === "regex") return `잘못된 문자열: 정규식 ${_issue.pattern} 패턴과 일치해야 합니다`;
109
+ return `잘못된 ${Nouns[_issue.format] ?? issue.format}`;
110
+ }
111
+ case "not_multiple_of":
112
+ return `잘못된 숫자: ${issue.divisor}의 배수여야 합니다`;
113
+ case "unrecognized_keys":
114
+ return `인식할 수 없는 키: ${util.joinValues(issue.keys, ", ")}`;
115
+ case "invalid_key":
116
+ return `잘못된 키: ${issue.origin}`;
117
+ case "invalid_union":
118
+ return `잘못된 입력`;
119
+ case "invalid_element":
120
+ return `잘못된 값: ${issue.origin}`;
121
+ default:
122
+ return `잘못된 입력`;
123
+ }
124
+ };
125
+ };
126
+
127
+ export default function (): { localeError: errors.$ZodErrorMap } {
128
+ return {
129
+ localeError: error(),
130
+ };
131
+ }
@@ -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: "знаци", 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
+
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: "внес",
44
+ email: "адреса на е-пошта",
45
+ url: "URL",
46
+ 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 датум и време",
58
+ date: "ISO датум",
59
+ time: "ISO време",
60
+ duration: "ISO времетраење",
61
+ ipv4: "IPv4 адреса",
62
+ ipv6: "IPv6 адреса",
63
+ cidrv4: "IPv4 опсег",
64
+ cidrv6: "IPv6 опсег",
65
+ base64: "base64-енкодирана низа",
66
+ base64url: "base64url-енкодирана низа",
67
+ json_string: "JSON низа",
68
+ e164: "E.164 број",
69
+ jwt: "JWT",
70
+ template_literal: "внес",
71
+ };
72
+
73
+ return (issue) => {
74
+ switch (issue.code) {
75
+ case "invalid_type":
76
+ return `Грешен внес: се очекува ${issue.expected}, примено ${parsedType(issue.input)}`;
77
+ // return `Invalid input: expected ${issue.expected}, received ${util.getParsedType(issue.input)}`;
78
+ case "invalid_value":
79
+ if (issue.values.length === 1) return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;
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
+ return `Премногу голем: се очекува ${issue.origin ?? "вредноста"} да биде ${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 `Премногу мал: се очекува ${issue.origin} да има ${adj}${issue.minimum.toString()} ${sizing.unit}`;
93
+ }
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") return `Неважечка низа: мора да завршува со "${_issue.suffix}"`;
103
+ if (_issue.format === "includes") return `Неважечка низа: мора да вклучува "${_issue.includes}"`;
104
+ if (_issue.format === "regex") return `Неважечка низа: мора да одгоара на патернот ${_issue.pattern}`;
105
+ return `Invalid ${Nouns[_issue.format] ?? issue.format}`;
106
+ }
107
+ case "not_multiple_of":
108
+ return `Грешен број: мора да биде делив со ${issue.divisor}`;
109
+ case "unrecognized_keys":
110
+ return `${issue.keys.length > 1 ? "Непрепознаени клучеви" : "Непрепознаен клуч"}: ${util.joinValues(issue.keys, ", ")}`;
111
+ case "invalid_key":
112
+ return `Грешен клуч во ${issue.origin}`;
113
+ case "invalid_union":
114
+ return "Грешен внес";
115
+ case "invalid_element":
116
+ return `Грешна вредност во ${issue.origin}`;
117
+ default:
118
+ return `Грешен внес`;
119
+ }
120
+ };
121
+ };
122
+
123
+ export default function (): { localeError: errors.$ZodErrorMap } {
124
+ return {
125
+ localeError: error(),
126
+ };
127
+ }