zod 3.26.0-canary.20250703T011142 → 3.26.0-canary.20250703T025502
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.
- package/package.json +4 -4
- package/src/index.ts +4 -0
- package/src/v3/ZodError.ts +330 -0
- package/src/v3/benchmarks/datetime.ts +58 -0
- package/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/src/v3/benchmarks/index.ts +59 -0
- package/src/v3/benchmarks/ipv4.ts +57 -0
- package/src/v3/benchmarks/object.ts +69 -0
- package/src/v3/benchmarks/primitives.ts +162 -0
- package/src/v3/benchmarks/realworld.ts +63 -0
- package/src/v3/benchmarks/string.ts +55 -0
- package/src/v3/benchmarks/union.ts +80 -0
- package/src/v3/errors.ts +13 -0
- package/src/v3/external.ts +6 -0
- package/src/v3/helpers/enumUtil.ts +17 -0
- package/src/v3/helpers/errorUtil.ts +8 -0
- package/src/v3/helpers/parseUtil.ts +176 -0
- package/src/v3/helpers/partialUtil.ts +34 -0
- package/src/v3/helpers/typeAliases.ts +2 -0
- package/src/v3/helpers/util.ts +224 -0
- package/src/v3/index.ts +4 -0
- package/src/v3/locales/en.ts +124 -0
- package/src/v3/standard-schema.ts +113 -0
- package/src/v3/tests/Mocker.ts +54 -0
- package/src/v3/tests/all-errors.test.ts +157 -0
- package/src/v3/tests/anyunknown.test.ts +28 -0
- package/src/v3/tests/array.test.ts +71 -0
- package/src/v3/tests/async-parsing.test.ts +388 -0
- package/src/v3/tests/async-refinements.test.ts +46 -0
- package/src/v3/tests/base.test.ts +29 -0
- package/src/v3/tests/bigint.test.ts +55 -0
- package/src/v3/tests/branded.test.ts +53 -0
- package/src/v3/tests/catch.test.ts +220 -0
- package/src/v3/tests/coerce.test.ts +133 -0
- package/src/v3/tests/complex.test.ts +56 -0
- package/src/v3/tests/custom.test.ts +31 -0
- package/src/v3/tests/date.test.ts +32 -0
- package/src/v3/tests/deepmasking.test.ts +186 -0
- package/src/v3/tests/default.test.ts +112 -0
- package/src/v3/tests/description.test.ts +33 -0
- package/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/src/v3/tests/enum.test.ts +80 -0
- package/src/v3/tests/error.test.ts +551 -0
- package/src/v3/tests/firstparty.test.ts +87 -0
- package/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/src/v3/tests/function.test.ts +257 -0
- package/src/v3/tests/generics.test.ts +48 -0
- package/src/v3/tests/instanceof.test.ts +37 -0
- package/src/v3/tests/intersection.test.ts +110 -0
- package/src/v3/tests/language-server.source.ts +76 -0
- package/src/v3/tests/language-server.test.ts +207 -0
- package/src/v3/tests/literal.test.ts +36 -0
- package/src/v3/tests/map.test.ts +110 -0
- package/src/v3/tests/masking.test.ts +4 -0
- package/src/v3/tests/mocker.test.ts +19 -0
- package/src/v3/tests/nan.test.ts +21 -0
- package/src/v3/tests/nativeEnum.test.ts +87 -0
- package/src/v3/tests/nullable.test.ts +42 -0
- package/src/v3/tests/number.test.ts +176 -0
- package/src/v3/tests/object-augmentation.test.ts +29 -0
- package/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/src/v3/tests/object.test.ts +434 -0
- package/src/v3/tests/optional.test.ts +42 -0
- package/src/v3/tests/parseUtil.test.ts +23 -0
- package/src/v3/tests/parser.test.ts +41 -0
- package/src/v3/tests/partials.test.ts +243 -0
- package/src/v3/tests/pickomit.test.ts +111 -0
- package/src/v3/tests/pipeline.test.ts +29 -0
- package/src/v3/tests/preprocess.test.ts +186 -0
- package/src/v3/tests/primitive.test.ts +440 -0
- package/src/v3/tests/promise.test.ts +90 -0
- package/src/v3/tests/readonly.test.ts +194 -0
- package/src/v3/tests/record.test.ts +171 -0
- package/src/v3/tests/recursive.test.ts +197 -0
- package/src/v3/tests/refine.test.ts +313 -0
- package/src/v3/tests/safeparse.test.ts +27 -0
- package/src/v3/tests/set.test.ts +142 -0
- package/src/v3/tests/standard-schema.test.ts +83 -0
- package/src/v3/tests/string.test.ts +916 -0
- package/src/v3/tests/transformer.test.ts +233 -0
- package/src/v3/tests/tuple.test.ts +90 -0
- package/src/v3/tests/unions.test.ts +57 -0
- package/src/v3/tests/validations.test.ts +133 -0
- package/src/v3/tests/void.test.ts +15 -0
- package/src/v3/types.ts +5136 -0
- package/src/v4/classic/checks.ts +30 -0
- package/src/v4/classic/coerce.ts +27 -0
- package/src/v4/classic/compat.ts +66 -0
- package/src/v4/classic/errors.ts +75 -0
- package/src/v4/classic/external.ts +50 -0
- package/src/v4/classic/index.ts +5 -0
- package/src/v4/classic/iso.ts +90 -0
- package/src/v4/classic/parse.ts +33 -0
- package/src/v4/classic/schemas.ts +2055 -0
- package/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/src/v4/classic/tests/array.test.ts +264 -0
- package/src/v4/classic/tests/assignability.test.ts +210 -0
- package/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/src/v4/classic/tests/base.test.ts +7 -0
- package/src/v4/classic/tests/bigint.test.ts +54 -0
- package/src/v4/classic/tests/brand.test.ts +65 -0
- package/src/v4/classic/tests/catch.test.ts +252 -0
- package/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/src/v4/classic/tests/coerce.test.ts +160 -0
- package/src/v4/classic/tests/continuability.test.ts +352 -0
- package/src/v4/classic/tests/custom.test.ts +40 -0
- package/src/v4/classic/tests/date.test.ts +31 -0
- package/src/v4/classic/tests/datetime.test.ts +296 -0
- package/src/v4/classic/tests/default.test.ts +313 -0
- package/src/v4/classic/tests/description.test.ts +32 -0
- package/src/v4/classic/tests/discriminated-unions.test.ts +592 -0
- package/src/v4/classic/tests/enum.test.ts +285 -0
- package/src/v4/classic/tests/error-utils.test.ts +527 -0
- package/src/v4/classic/tests/error.test.ts +711 -0
- package/src/v4/classic/tests/file.test.ts +91 -0
- package/src/v4/classic/tests/firstparty.test.ts +175 -0
- package/src/v4/classic/tests/function.test.ts +268 -0
- package/src/v4/classic/tests/generics.test.ts +72 -0
- package/src/v4/classic/tests/index.test.ts +829 -0
- package/src/v4/classic/tests/instanceof.test.ts +34 -0
- package/src/v4/classic/tests/intersection.test.ts +171 -0
- package/src/v4/classic/tests/json.test.ts +108 -0
- package/src/v4/classic/tests/lazy.test.ts +227 -0
- package/src/v4/classic/tests/literal.test.ts +92 -0
- package/src/v4/classic/tests/map.test.ts +196 -0
- package/src/v4/classic/tests/nan.test.ts +21 -0
- package/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/src/v4/classic/tests/nonoptional.test.ts +86 -0
- package/src/v4/classic/tests/nullable.test.ts +22 -0
- package/src/v4/classic/tests/number.test.ts +247 -0
- package/src/v4/classic/tests/object.test.ts +553 -0
- package/src/v4/classic/tests/optional.test.ts +103 -0
- package/src/v4/classic/tests/partial.test.ts +147 -0
- package/src/v4/classic/tests/pickomit.test.ts +127 -0
- package/src/v4/classic/tests/pipe.test.ts +81 -0
- package/src/v4/classic/tests/prefault.test.ts +37 -0
- package/src/v4/classic/tests/preprocess.test.ts +298 -0
- package/src/v4/classic/tests/primitive.test.ts +175 -0
- package/src/v4/classic/tests/promise.test.ts +81 -0
- package/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/src/v4/classic/tests/readonly.test.ts +252 -0
- package/src/v4/classic/tests/record.test.ts +332 -0
- package/src/v4/classic/tests/recursive-types.test.ts +325 -0
- package/src/v4/classic/tests/refine.test.ts +423 -0
- package/src/v4/classic/tests/registries.test.ts +195 -0
- package/src/v4/classic/tests/set.test.ts +179 -0
- package/src/v4/classic/tests/standard-schema.test.ts +57 -0
- package/src/v4/classic/tests/string-formats.test.ts +109 -0
- package/src/v4/classic/tests/string.test.ts +881 -0
- package/src/v4/classic/tests/stringbool.test.ts +66 -0
- package/src/v4/classic/tests/template-literal.test.ts +758 -0
- package/src/v4/classic/tests/to-json-schema.test.ts +2182 -0
- package/src/v4/classic/tests/transform.test.ts +250 -0
- package/src/v4/classic/tests/tuple.test.ts +163 -0
- package/src/v4/classic/tests/union.test.ts +94 -0
- package/src/v4/classic/tests/validations.test.ts +283 -0
- package/src/v4/classic/tests/void.test.ts +12 -0
- package/src/v4/core/api.ts +1592 -0
- package/src/v4/core/checks.ts +1285 -0
- package/src/v4/core/config.ts +15 -0
- package/src/v4/core/core.ts +134 -0
- package/src/v4/core/doc.ts +44 -0
- package/src/v4/core/errors.ts +420 -0
- package/src/v4/core/function.ts +176 -0
- package/src/v4/core/index.ts +15 -0
- package/src/v4/core/json-schema.ts +143 -0
- package/src/v4/core/parse.ts +94 -0
- package/src/v4/core/regexes.ts +135 -0
- package/src/v4/core/registries.ts +86 -0
- package/src/v4/core/schemas.ts +3781 -0
- package/src/v4/core/standard-schema.ts +64 -0
- package/src/v4/core/tests/index.test.ts +46 -0
- package/src/v4/core/tests/locales/be.test.ts +124 -0
- package/src/v4/core/tests/locales/en.test.ts +22 -0
- package/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/src/v4/core/to-json-schema.ts +944 -0
- package/src/v4/core/util.ts +775 -0
- package/src/v4/core/versions.ts +5 -0
- package/src/v4/core/zsf.ts +323 -0
- package/src/v4/index.ts +4 -0
- package/src/v4/locales/ar.ts +125 -0
- package/src/v4/locales/az.ts +121 -0
- package/src/v4/locales/be.ts +184 -0
- package/src/v4/locales/ca.ts +127 -0
- package/src/v4/locales/cs.ts +142 -0
- package/src/v4/locales/de.ts +124 -0
- package/src/v4/locales/en.ts +127 -0
- package/src/v4/locales/es.ts +125 -0
- package/src/v4/locales/fa.ts +134 -0
- package/src/v4/locales/fi.ts +131 -0
- package/src/v4/locales/fr-CA.ts +126 -0
- package/src/v4/locales/fr.ts +124 -0
- package/src/v4/locales/he.ts +125 -0
- package/src/v4/locales/hu.ts +126 -0
- package/src/v4/locales/id.ts +125 -0
- package/src/v4/locales/index.ts +38 -0
- package/src/v4/locales/it.ts +125 -0
- package/src/v4/locales/ja.ts +122 -0
- package/src/v4/locales/kh.ts +126 -0
- package/src/v4/locales/ko.ts +131 -0
- package/src/v4/locales/mk.ts +127 -0
- package/src/v4/locales/ms.ts +124 -0
- package/src/v4/locales/nl.ts +126 -0
- package/src/v4/locales/no.ts +124 -0
- package/src/v4/locales/ota.ts +125 -0
- package/src/v4/locales/pl.ts +126 -0
- package/src/v4/locales/ps.ts +133 -0
- package/src/v4/locales/pt.ts +123 -0
- package/src/v4/locales/ru.ts +184 -0
- package/src/v4/locales/sl.ts +126 -0
- package/src/v4/locales/sv.ts +127 -0
- package/src/v4/locales/ta.ts +125 -0
- package/src/v4/locales/th.ts +126 -0
- package/src/v4/locales/tr.ts +121 -0
- package/src/v4/locales/ua.ts +126 -0
- package/src/v4/locales/ur.ts +126 -0
- package/src/v4/locales/vi.ts +125 -0
- package/src/v4/locales/zh-CN.ts +123 -0
- package/src/v4/locales/zh-TW.ts +125 -0
- package/src/v4/mini/checks.ts +32 -0
- package/src/v4/mini/coerce.ts +22 -0
- package/src/v4/mini/external.ts +40 -0
- package/src/v4/mini/index.ts +3 -0
- package/src/v4/mini/iso.ts +62 -0
- package/src/v4/mini/parse.ts +1 -0
- package/src/v4/mini/schemas.ts +1579 -0
- package/src/v4/mini/tests/assignability.test.ts +129 -0
- package/src/v4/mini/tests/brand.test.ts +51 -0
- package/src/v4/mini/tests/checks.test.ts +144 -0
- package/src/v4/mini/tests/computed.test.ts +36 -0
- package/src/v4/mini/tests/error.test.ts +22 -0
- package/src/v4/mini/tests/functions.test.ts +43 -0
- package/src/v4/mini/tests/index.test.ts +871 -0
- package/src/v4/mini/tests/number.test.ts +95 -0
- package/src/v4/mini/tests/object.test.ts +185 -0
- package/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/src/v4/mini/tests/recursive-types.test.ts +275 -0
- package/src/v4/mini/tests/string.test.ts +293 -0
- package/src/v4-mini/index.ts +1 -0
- package/v4/classic/compat.cjs +1 -7
- package/v4/classic/compat.d.cts +0 -2
- package/v4/classic/compat.d.ts +0 -2
- package/v4/classic/compat.js +0 -6
- package/v4/classic/external.cjs +2 -1
- package/v4/classic/external.d.cts +1 -1
- package/v4/classic/external.d.ts +1 -1
- package/v4/classic/external.js +1 -1
- package/v4/classic/schemas.d.cts +4 -4
- package/v4/classic/schemas.d.ts +4 -4
- package/v4/core/api.cjs +11 -10
- package/v4/core/api.js +11 -10
- package/v4/core/checks.cjs +6 -4
- package/v4/core/checks.js +6 -4
- package/v4/core/core.cjs +5 -1
- package/v4/core/core.d.cts +2 -0
- package/v4/core/core.d.ts +2 -0
- package/v4/core/core.js +4 -0
- package/v4/core/schemas.cjs +12 -13
- package/v4/core/schemas.js +12 -13
- package/v4/core/util.cjs +3 -0
- package/v4/core/util.d.cts +1 -1
- package/v4/core/util.d.ts +1 -1
- package/v4/core/util.js +3 -0
- package/v4/mini/external.cjs +2 -1
- package/v4/mini/external.d.cts +1 -1
- package/v4/mini/external.d.ts +1 -1
- package/v4/mini/external.js +1 -1
|
@@ -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 getBelarusianPlural(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 BelarusianSizable {
|
|
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, BelarusianSizable> = {
|
|
35
|
+
string: {
|
|
36
|
+
unit: {
|
|
37
|
+
one: "сімвал",
|
|
38
|
+
few: "сімвалы",
|
|
39
|
+
many: "сімвалаў",
|
|
40
|
+
},
|
|
41
|
+
verb: "мець",
|
|
42
|
+
},
|
|
43
|
+
array: {
|
|
44
|
+
unit: {
|
|
45
|
+
one: "элемент",
|
|
46
|
+
few: "элементы",
|
|
47
|
+
many: "элементаў",
|
|
48
|
+
},
|
|
49
|
+
verb: "мець",
|
|
50
|
+
},
|
|
51
|
+
set: {
|
|
52
|
+
unit: {
|
|
53
|
+
one: "элемент",
|
|
54
|
+
few: "элементы",
|
|
55
|
+
many: "элементаў",
|
|
56
|
+
},
|
|
57
|
+
verb: "мець",
|
|
58
|
+
},
|
|
59
|
+
file: {
|
|
60
|
+
unit: {
|
|
61
|
+
one: "байт",
|
|
62
|
+
few: "байты",
|
|
63
|
+
many: "байтаў",
|
|
64
|
+
},
|
|
65
|
+
verb: "мець",
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
function getSizing(origin: string): BelarusianSizable | 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 = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
|
|
142
|
+
return `Занадта вялікі: чакалася, што ${issue.origin ?? "значэнне"} павінна ${sizing.verb} ${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 = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);
|
|
152
|
+
return `Занадта малы: чакалася, што ${issue.origin} павінна ${sizing.verb} ${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 ? "ключы" : "ключ"}: ${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,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: "caràcters", verb: "contenir" },
|
|
8
|
+
file: { unit: "bytes", verb: "contenir" },
|
|
9
|
+
array: { unit: "elements", verb: "contenir" },
|
|
10
|
+
set: { unit: "elements", verb: "contenir" },
|
|
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: "entrada",
|
|
44
|
+
email: "adreça electrònica",
|
|
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 i hora ISO",
|
|
58
|
+
date: "data ISO",
|
|
59
|
+
time: "hora ISO",
|
|
60
|
+
duration: "durada ISO",
|
|
61
|
+
ipv4: "adreça IPv4",
|
|
62
|
+
ipv6: "adreça IPv6",
|
|
63
|
+
cidrv4: "rang IPv4",
|
|
64
|
+
cidrv6: "rang IPv6",
|
|
65
|
+
base64: "cadena codificada en base64",
|
|
66
|
+
base64url: "cadena codificada en base64url",
|
|
67
|
+
json_string: "cadena JSON",
|
|
68
|
+
e164: "número E.164",
|
|
69
|
+
jwt: "JWT",
|
|
70
|
+
template_literal: "entrada",
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return (issue) => {
|
|
74
|
+
switch (issue.code) {
|
|
75
|
+
case "invalid_type":
|
|
76
|
+
return `Tipus invàlid: s'esperava ${issue.expected}, s'ha rebut ${parsedType(issue.input)}`;
|
|
77
|
+
// return `Tipus invàlid: s'esperava ${issue.expected}, s'ha rebut ${util.getParsedType(issue.input)}`;
|
|
78
|
+
case "invalid_value":
|
|
79
|
+
if (issue.values.length === 1) return `Valor invàlid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;
|
|
80
|
+
return `Opció invàlida: s'esperava una de ${util.joinValues(issue.values, " o ")}`;
|
|
81
|
+
case "too_big": {
|
|
82
|
+
const adj = issue.inclusive ? "com a màxim" : "menys de";
|
|
83
|
+
const sizing = getSizing(issue.origin);
|
|
84
|
+
if (sizing)
|
|
85
|
+
return `Massa gran: s'esperava que ${issue.origin ?? "el valor"} contingués ${adj} ${issue.maximum.toString()} ${sizing.unit ?? "elements"}`;
|
|
86
|
+
return `Massa gran: s'esperava que ${issue.origin ?? "el valor"} fos ${adj} ${issue.maximum.toString()}`;
|
|
87
|
+
}
|
|
88
|
+
case "too_small": {
|
|
89
|
+
const adj = issue.inclusive ? "com a mínim" : "més de";
|
|
90
|
+
const sizing = getSizing(issue.origin);
|
|
91
|
+
if (sizing) {
|
|
92
|
+
return `Massa petit: s'esperava que ${issue.origin} contingués ${adj} ${issue.minimum.toString()} ${sizing.unit}`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;
|
|
96
|
+
}
|
|
97
|
+
case "invalid_format": {
|
|
98
|
+
const _issue = issue as errors.$ZodStringFormatIssues;
|
|
99
|
+
if (_issue.format === "starts_with") {
|
|
100
|
+
return `Format invàlid: ha de començar amb "${_issue.prefix}"`;
|
|
101
|
+
}
|
|
102
|
+
if (_issue.format === "ends_with") return `Format invàlid: ha d'acabar amb "${_issue.suffix}"`;
|
|
103
|
+
if (_issue.format === "includes") return `Format invàlid: ha d'incloure "${_issue.includes}"`;
|
|
104
|
+
if (_issue.format === "regex") return `Format invàlid: ha de coincidir amb el patró ${_issue.pattern}`;
|
|
105
|
+
return `Format invàlid per a ${Nouns[_issue.format] ?? issue.format}`;
|
|
106
|
+
}
|
|
107
|
+
case "not_multiple_of":
|
|
108
|
+
return `Número invàlid: ha de ser múltiple de ${issue.divisor}`;
|
|
109
|
+
case "unrecognized_keys":
|
|
110
|
+
return `Clau${issue.keys.length > 1 ? "s" : ""} no reconeguda${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
|
|
111
|
+
case "invalid_key":
|
|
112
|
+
return `Clau invàlida a ${issue.origin}`;
|
|
113
|
+
case "invalid_union":
|
|
114
|
+
return "Entrada invàlida"; // Could also be "Tipus d'unió invàlid" but "Entrada invàlida" is more general
|
|
115
|
+
case "invalid_element":
|
|
116
|
+
return `Element invàlid a ${issue.origin}`;
|
|
117
|
+
default:
|
|
118
|
+
return `Entrada invàlida`;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
124
|
+
return {
|
|
125
|
+
localeError: error(),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
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: "znaků", verb: "mít" },
|
|
8
|
+
file: { unit: "bajtů", verb: "mít" },
|
|
9
|
+
array: { unit: "prvků", verb: "mít" },
|
|
10
|
+
set: { unit: "prvků", verb: "mít" },
|
|
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" : "číslo";
|
|
23
|
+
}
|
|
24
|
+
case "string": {
|
|
25
|
+
return "řetězec";
|
|
26
|
+
}
|
|
27
|
+
case "boolean": {
|
|
28
|
+
return "boolean";
|
|
29
|
+
}
|
|
30
|
+
case "bigint": {
|
|
31
|
+
return "bigint";
|
|
32
|
+
}
|
|
33
|
+
case "function": {
|
|
34
|
+
return "funkce";
|
|
35
|
+
}
|
|
36
|
+
case "symbol": {
|
|
37
|
+
return "symbol";
|
|
38
|
+
}
|
|
39
|
+
case "undefined": {
|
|
40
|
+
return "undefined";
|
|
41
|
+
}
|
|
42
|
+
case "object": {
|
|
43
|
+
if (Array.isArray(data)) {
|
|
44
|
+
return "pole";
|
|
45
|
+
}
|
|
46
|
+
if (data === null) {
|
|
47
|
+
return "null";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
|
|
51
|
+
return data.constructor.name;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return t;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const Nouns: {
|
|
59
|
+
[k in $ZodStringFormats | (string & {})]?: string;
|
|
60
|
+
} = {
|
|
61
|
+
regex: "regulární výraz",
|
|
62
|
+
email: "e-mailová adresa",
|
|
63
|
+
url: "URL",
|
|
64
|
+
emoji: "emoji",
|
|
65
|
+
uuid: "UUID",
|
|
66
|
+
uuidv4: "UUIDv4",
|
|
67
|
+
uuidv6: "UUIDv6",
|
|
68
|
+
nanoid: "nanoid",
|
|
69
|
+
guid: "GUID",
|
|
70
|
+
cuid: "cuid",
|
|
71
|
+
cuid2: "cuid2",
|
|
72
|
+
ulid: "ULID",
|
|
73
|
+
xid: "XID",
|
|
74
|
+
ksuid: "KSUID",
|
|
75
|
+
datetime: "datum a čas ve formátu ISO",
|
|
76
|
+
date: "datum ve formátu ISO",
|
|
77
|
+
time: "čas ve formátu ISO",
|
|
78
|
+
duration: "doba trvání ISO",
|
|
79
|
+
ipv4: "IPv4 adresa",
|
|
80
|
+
ipv6: "IPv6 adresa",
|
|
81
|
+
cidrv4: "rozsah IPv4",
|
|
82
|
+
cidrv6: "rozsah IPv6",
|
|
83
|
+
base64: "řetězec zakódovaný ve formátu base64",
|
|
84
|
+
base64url: "řetězec zakódovaný ve formátu base64url",
|
|
85
|
+
json_string: "řetězec ve formátu JSON",
|
|
86
|
+
e164: "číslo E.164",
|
|
87
|
+
jwt: "JWT",
|
|
88
|
+
template_literal: "vstup",
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
return (issue) => {
|
|
92
|
+
switch (issue.code) {
|
|
93
|
+
case "invalid_type":
|
|
94
|
+
return `Neplatný vstup: očekáváno ${issue.expected}, obdrženo ${parsedType(issue.input)}`;
|
|
95
|
+
case "invalid_value":
|
|
96
|
+
if (issue.values.length === 1) return `Neplatný vstup: očekáváno ${util.stringifyPrimitive(issue.values[0])}`;
|
|
97
|
+
return `Neplatná možnost: očekávána jedna z hodnot ${util.joinValues(issue.values, "|")}`;
|
|
98
|
+
case "too_big": {
|
|
99
|
+
const adj = issue.inclusive ? "<=" : "<";
|
|
100
|
+
const sizing = getSizing(issue.origin);
|
|
101
|
+
if (sizing) {
|
|
102
|
+
return `Hodnota je příliš velká: ${issue.origin ?? "hodnota"} musí mít ${adj}${issue.maximum.toString()} ${sizing.unit ?? "prvků"}`;
|
|
103
|
+
}
|
|
104
|
+
return `Hodnota je příliš velká: ${issue.origin ?? "hodnota"} musí být ${adj}${issue.maximum.toString()}`;
|
|
105
|
+
}
|
|
106
|
+
case "too_small": {
|
|
107
|
+
const adj = issue.inclusive ? ">=" : ">";
|
|
108
|
+
const sizing = getSizing(issue.origin);
|
|
109
|
+
if (sizing) {
|
|
110
|
+
return `Hodnota je příliš malá: ${issue.origin ?? "hodnota"} musí mít ${adj}${issue.minimum.toString()} ${sizing.unit ?? "prvků"}`;
|
|
111
|
+
}
|
|
112
|
+
return `Hodnota je příliš malá: ${issue.origin ?? "hodnota"} musí být ${adj}${issue.minimum.toString()}`;
|
|
113
|
+
}
|
|
114
|
+
case "invalid_format": {
|
|
115
|
+
const _issue = issue as errors.$ZodStringFormatIssues;
|
|
116
|
+
if (_issue.format === "starts_with") return `Neplatný řetězec: musí začínat na "${_issue.prefix}"`;
|
|
117
|
+
if (_issue.format === "ends_with") return `Neplatný řetězec: musí končit na "${_issue.suffix}"`;
|
|
118
|
+
if (_issue.format === "includes") return `Neplatný řetězec: musí obsahovat "${_issue.includes}"`;
|
|
119
|
+
if (_issue.format === "regex") return `Neplatný řetězec: musí odpovídat vzoru ${_issue.pattern}`;
|
|
120
|
+
return `Neplatný formát ${Nouns[_issue.format] ?? issue.format}`;
|
|
121
|
+
}
|
|
122
|
+
case "not_multiple_of":
|
|
123
|
+
return `Neplatné číslo: musí být násobkem ${issue.divisor}`;
|
|
124
|
+
case "unrecognized_keys":
|
|
125
|
+
return `Neznámé klíče: ${util.joinValues(issue.keys, ", ")}`;
|
|
126
|
+
case "invalid_key":
|
|
127
|
+
return `Neplatný klíč v ${issue.origin}`;
|
|
128
|
+
case "invalid_union":
|
|
129
|
+
return "Neplatný vstup";
|
|
130
|
+
case "invalid_element":
|
|
131
|
+
return `Neplatná hodnota v ${issue.origin}`;
|
|
132
|
+
default:
|
|
133
|
+
return `Neplatný vstup`;
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
139
|
+
return {
|
|
140
|
+
localeError: error(),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
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: "Zeichen", verb: "zu haben" },
|
|
8
|
+
file: { unit: "Bytes", verb: "zu haben" },
|
|
9
|
+
array: { unit: "Elemente", verb: "zu haben" },
|
|
10
|
+
set: { unit: "Elemente", verb: "zu haben" },
|
|
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" : "Zahl";
|
|
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: "Eingabe",
|
|
44
|
+
email: "E-Mail-Adresse",
|
|
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 und -Uhrzeit",
|
|
58
|
+
date: "ISO-Datum",
|
|
59
|
+
time: "ISO-Uhrzeit",
|
|
60
|
+
duration: "ISO-Dauer",
|
|
61
|
+
ipv4: "IPv4-Adresse",
|
|
62
|
+
ipv6: "IPv6-Adresse",
|
|
63
|
+
cidrv4: "IPv4-Bereich",
|
|
64
|
+
cidrv6: "IPv6-Bereich",
|
|
65
|
+
base64: "Base64-codierter String",
|
|
66
|
+
base64url: "Base64-URL-codierter String",
|
|
67
|
+
json_string: "JSON-String",
|
|
68
|
+
e164: "E.164-Nummer",
|
|
69
|
+
jwt: "JWT",
|
|
70
|
+
template_literal: "Eingabe",
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return (issue) => {
|
|
74
|
+
switch (issue.code) {
|
|
75
|
+
case "invalid_type":
|
|
76
|
+
return `Ungültige Eingabe: erwartet ${issue.expected}, erhalten ${parsedType(issue.input)}`;
|
|
77
|
+
case "invalid_value":
|
|
78
|
+
if (issue.values.length === 1) return `Ungültige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;
|
|
79
|
+
return `Ungültige Option: erwartet eine von ${util.joinValues(issue.values, "|")}`;
|
|
80
|
+
case "too_big": {
|
|
81
|
+
const adj = issue.inclusive ? "<=" : "<";
|
|
82
|
+
const sizing = getSizing(issue.origin);
|
|
83
|
+
if (sizing)
|
|
84
|
+
return `Zu groß: erwartet, dass ${issue.origin ?? "Wert"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "Elemente"} hat`;
|
|
85
|
+
return `Zu groß: erwartet, dass ${issue.origin ?? "Wert"} ${adj}${issue.maximum.toString()} ist`;
|
|
86
|
+
}
|
|
87
|
+
case "too_small": {
|
|
88
|
+
const adj = issue.inclusive ? ">=" : ">";
|
|
89
|
+
const sizing = getSizing(issue.origin);
|
|
90
|
+
if (sizing) {
|
|
91
|
+
return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;
|
|
95
|
+
}
|
|
96
|
+
case "invalid_format": {
|
|
97
|
+
const _issue = issue as errors.$ZodStringFormatIssues;
|
|
98
|
+
if (_issue.format === "starts_with") return `Ungültiger String: muss mit "${_issue.prefix}" beginnen`;
|
|
99
|
+
if (_issue.format === "ends_with") return `Ungültiger String: muss mit "${_issue.suffix}" enden`;
|
|
100
|
+
if (_issue.format === "includes") return `Ungültiger String: muss "${_issue.includes}" enthalten`;
|
|
101
|
+
if (_issue.format === "regex") return `Ungültiger String: muss dem Muster ${_issue.pattern} entsprechen`;
|
|
102
|
+
return `Ungültig: ${Nouns[_issue.format] ?? issue.format}`;
|
|
103
|
+
}
|
|
104
|
+
case "not_multiple_of":
|
|
105
|
+
return `Ungültige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;
|
|
106
|
+
case "unrecognized_keys":
|
|
107
|
+
return `${issue.keys.length > 1 ? "Unbekannte Schlüssel" : "Unbekannter Schlüssel"}: ${util.joinValues(issue.keys, ", ")}`;
|
|
108
|
+
case "invalid_key":
|
|
109
|
+
return `Ungültiger Schlüssel in ${issue.origin}`;
|
|
110
|
+
case "invalid_union":
|
|
111
|
+
return "Ungültige Eingabe";
|
|
112
|
+
case "invalid_element":
|
|
113
|
+
return `Ungültiger Wert in ${issue.origin}`;
|
|
114
|
+
default:
|
|
115
|
+
return `Ungültige Eingabe`;
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
121
|
+
return {
|
|
122
|
+
localeError: error(),
|
|
123
|
+
};
|
|
124
|
+
}
|