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.
- package/package.json +20 -20
- 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/eo.ts +125 -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 +39 -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/locales/eo.cjs +144 -0
- package/v4/locales/eo.d.cts +5 -0
- package/v4/locales/eo.d.ts +5 -0
- package/v4/locales/eo.js +116 -0
- package/v4/locales/index.cjs +3 -1
- package/v4/locales/index.d.cts +1 -0
- package/v4/locales/index.d.ts +1 -0
- package/v4/locales/index.js +1 -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,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
|
+
export const parsedType = (data: any): string => {
|
|
6
|
+
const t = typeof data;
|
|
7
|
+
|
|
8
|
+
switch (t) {
|
|
9
|
+
case "number": {
|
|
10
|
+
return Number.isNaN(data) ? "NaN" : "number";
|
|
11
|
+
}
|
|
12
|
+
case "object": {
|
|
13
|
+
if (Array.isArray(data)) {
|
|
14
|
+
return "array";
|
|
15
|
+
}
|
|
16
|
+
if (data === null) {
|
|
17
|
+
return "null";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
|
|
21
|
+
return data.constructor.name;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return t;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const error: () => errors.$ZodErrorMap = () => {
|
|
29
|
+
const Sizable: Record<string, { unit: string; verb: string }> = {
|
|
30
|
+
string: { unit: "characters", verb: "to have" },
|
|
31
|
+
file: { unit: "bytes", verb: "to have" },
|
|
32
|
+
array: { unit: "items", verb: "to have" },
|
|
33
|
+
set: { unit: "items", verb: "to have" },
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
function getSizing(origin: string): { unit: string; verb: string } | null {
|
|
37
|
+
return Sizable[origin] ?? null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const Nouns: {
|
|
41
|
+
[k in $ZodStringFormats | (string & {})]?: string;
|
|
42
|
+
} = {
|
|
43
|
+
regex: "input",
|
|
44
|
+
email: "email address",
|
|
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 datetime",
|
|
58
|
+
date: "ISO date",
|
|
59
|
+
time: "ISO time",
|
|
60
|
+
duration: "ISO duration",
|
|
61
|
+
ipv4: "IPv4 address",
|
|
62
|
+
ipv6: "IPv6 address",
|
|
63
|
+
cidrv4: "IPv4 range",
|
|
64
|
+
cidrv6: "IPv6 range",
|
|
65
|
+
base64: "base64-encoded string",
|
|
66
|
+
base64url: "base64url-encoded string",
|
|
67
|
+
json_string: "JSON string",
|
|
68
|
+
e164: "E.164 number",
|
|
69
|
+
jwt: "JWT",
|
|
70
|
+
template_literal: "input",
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return (issue) => {
|
|
74
|
+
switch (issue.code) {
|
|
75
|
+
case "invalid_type":
|
|
76
|
+
return `Invalid input: expected ${issue.expected}, received ${parsedType(issue.input)}`;
|
|
77
|
+
|
|
78
|
+
case "invalid_value":
|
|
79
|
+
if (issue.values.length === 1) return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;
|
|
80
|
+
return `Invalid option: expected one of ${util.joinValues(issue.values, "|")}`;
|
|
81
|
+
case "too_big": {
|
|
82
|
+
const adj = issue.inclusive ? "<=" : "<";
|
|
83
|
+
const sizing = getSizing(issue.origin);
|
|
84
|
+
if (sizing)
|
|
85
|
+
return `Too big: expected ${issue.origin ?? "value"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elements"}`;
|
|
86
|
+
return `Too big: expected ${issue.origin ?? "value"} to be ${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 `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;
|
|
96
|
+
}
|
|
97
|
+
case "invalid_format": {
|
|
98
|
+
const _issue = issue as errors.$ZodStringFormatIssues;
|
|
99
|
+
if (_issue.format === "starts_with") {
|
|
100
|
+
return `Invalid string: must start with "${_issue.prefix}"`;
|
|
101
|
+
}
|
|
102
|
+
if (_issue.format === "ends_with") return `Invalid string: must end with "${_issue.suffix}"`;
|
|
103
|
+
if (_issue.format === "includes") return `Invalid string: must include "${_issue.includes}"`;
|
|
104
|
+
if (_issue.format === "regex") return `Invalid string: must match pattern ${_issue.pattern}`;
|
|
105
|
+
return `Invalid ${Nouns[_issue.format] ?? issue.format}`;
|
|
106
|
+
}
|
|
107
|
+
case "not_multiple_of":
|
|
108
|
+
return `Invalid number: must be a multiple of ${issue.divisor}`;
|
|
109
|
+
case "unrecognized_keys":
|
|
110
|
+
return `Unrecognized key${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
|
|
111
|
+
case "invalid_key":
|
|
112
|
+
return `Invalid key in ${issue.origin}`;
|
|
113
|
+
case "invalid_union":
|
|
114
|
+
return "Invalid input";
|
|
115
|
+
case "invalid_element":
|
|
116
|
+
return `Invalid value in ${issue.origin}`;
|
|
117
|
+
default:
|
|
118
|
+
return `Invalid input`;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
124
|
+
return {
|
|
125
|
+
localeError: error(),
|
|
126
|
+
};
|
|
127
|
+
}
|
|
@@ -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
|
+
export const parsedType = (data: any): string => {
|
|
6
|
+
const t = typeof data;
|
|
7
|
+
|
|
8
|
+
switch (t) {
|
|
9
|
+
case "number": {
|
|
10
|
+
return Number.isNaN(data) ? "NaN" : "nombro";
|
|
11
|
+
}
|
|
12
|
+
case "object": {
|
|
13
|
+
if (Array.isArray(data)) {
|
|
14
|
+
return "tabelo";
|
|
15
|
+
}
|
|
16
|
+
if (data === null) {
|
|
17
|
+
return "senvalora";
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
|
|
21
|
+
return data.constructor.name;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return t;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const error: () => errors.$ZodErrorMap = () => {
|
|
29
|
+
const Sizable: Record<string, { unit: string; verb: string }> = {
|
|
30
|
+
string: { unit: "karaktrojn", verb: "havi" },
|
|
31
|
+
file: { unit: "bajtojn", verb: "havi" },
|
|
32
|
+
array: { unit: "elementojn", verb: "havi" },
|
|
33
|
+
set: { unit: "elementojn", verb: "havi" },
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
function getSizing(origin: string): { unit: string; verb: string } | null {
|
|
37
|
+
return Sizable[origin] ?? null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const Nouns: {
|
|
41
|
+
[k in $ZodStringFormats | (string & {})]?: string;
|
|
42
|
+
} = {
|
|
43
|
+
regex: "enigo",
|
|
44
|
+
email: "retadreso",
|
|
45
|
+
url: "URL",
|
|
46
|
+
emoji: "emoĝio",
|
|
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-datotempo",
|
|
58
|
+
date: "ISO-dato",
|
|
59
|
+
time: "ISO-tempo",
|
|
60
|
+
duration: "ISO-daŭro",
|
|
61
|
+
ipv4: "IPv4-adreso",
|
|
62
|
+
ipv6: "IPv6-adreso",
|
|
63
|
+
cidrv4: "IPv4-rango",
|
|
64
|
+
cidrv6: "IPv6-rango",
|
|
65
|
+
base64: "64-ume kodita karaktraro",
|
|
66
|
+
base64url: "URL-64-ume kodita karaktraro",
|
|
67
|
+
json_string: "JSON-karaktraro",
|
|
68
|
+
e164: "E.164-nombro",
|
|
69
|
+
jwt: "JWT",
|
|
70
|
+
template_literal: "enigo",
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
return (issue) => {
|
|
74
|
+
switch (issue.code) {
|
|
75
|
+
case "invalid_type":
|
|
76
|
+
return `Nevalida enigo: atendiĝis ${issue.expected}, riceviĝis ${parsedType(issue.input)}`;
|
|
77
|
+
|
|
78
|
+
case "invalid_value":
|
|
79
|
+
if (issue.values.length === 1) return `Nevalida enigo: atendiĝis ${util.stringifyPrimitive(issue.values[0])}`;
|
|
80
|
+
return `Nevalida opcio: atendiĝis unu el ${util.joinValues(issue.values, "|")}`;
|
|
81
|
+
case "too_big": {
|
|
82
|
+
const adj = issue.inclusive ? "<=" : "<";
|
|
83
|
+
const sizing = getSizing(issue.origin);
|
|
84
|
+
if (sizing)
|
|
85
|
+
return `Tro granda: atendiĝis ke ${issue.origin ?? "valoro"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementojn"}`;
|
|
86
|
+
return `Tro granda: atendiĝis ke ${issue.origin ?? "valoro"} havu ${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 `Tro malgranda: atendiĝis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return `Tro malgranda: atendiĝis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;
|
|
96
|
+
}
|
|
97
|
+
case "invalid_format": {
|
|
98
|
+
const _issue = issue as errors.$ZodStringFormatIssues;
|
|
99
|
+
if (_issue.format === "starts_with") return `Nevalida karaktraro: devas komenciĝi per "${_issue.prefix}"`;
|
|
100
|
+
if (_issue.format === "ends_with") return `Nevalida karaktraro: devas finiĝi per "${_issue.suffix}"`;
|
|
101
|
+
if (_issue.format === "includes") return `Nevalida karaktraro: devas inkluzivi "${_issue.includes}"`;
|
|
102
|
+
if (_issue.format === "regex") return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;
|
|
103
|
+
return `Nevalida ${Nouns[_issue.format] ?? issue.format}`;
|
|
104
|
+
}
|
|
105
|
+
case "not_multiple_of":
|
|
106
|
+
return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;
|
|
107
|
+
case "unrecognized_keys":
|
|
108
|
+
return `Nekonata${issue.keys.length > 1 ? "j" : ""} ŝlosilo${issue.keys.length > 1 ? "j" : ""}: ${util.joinValues(issue.keys, ", ")}`;
|
|
109
|
+
case "invalid_key":
|
|
110
|
+
return `Nevalida ŝlosilo en ${issue.origin}`;
|
|
111
|
+
case "invalid_union":
|
|
112
|
+
return "Nevalida enigo";
|
|
113
|
+
case "invalid_element":
|
|
114
|
+
return `Nevalida valoro en ${issue.origin}`;
|
|
115
|
+
default:
|
|
116
|
+
return `Nevalida enigo`;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
122
|
+
return {
|
|
123
|
+
localeError: error(),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
@@ -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: "caracteres", verb: "tener" },
|
|
8
|
+
file: { unit: "bytes", verb: "tener" },
|
|
9
|
+
array: { unit: "elementos", verb: "tener" },
|
|
10
|
+
set: { unit: "elementos", verb: "tener" },
|
|
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 "arreglo";
|
|
27
|
+
}
|
|
28
|
+
if (data === null) {
|
|
29
|
+
return "nulo";
|
|
30
|
+
}
|
|
31
|
+
if (Object.getPrototypeOf(data) !== Object.prototype) {
|
|
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: "entrada",
|
|
43
|
+
email: "dirección de correo electrónico",
|
|
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: "fecha y hora ISO",
|
|
57
|
+
date: "fecha ISO",
|
|
58
|
+
time: "hora ISO",
|
|
59
|
+
duration: "duración ISO",
|
|
60
|
+
ipv4: "dirección IPv4",
|
|
61
|
+
ipv6: "dirección IPv6",
|
|
62
|
+
cidrv4: "rango IPv4",
|
|
63
|
+
cidrv6: "rango IPv6",
|
|
64
|
+
base64: "cadena codificada en base64",
|
|
65
|
+
base64url: "URL codificada en base64",
|
|
66
|
+
json_string: "cadena 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 `Entrada inválida: se esperaba ${issue.expected}, recibido ${parsedType(issue.input)}`;
|
|
76
|
+
// return `Entrada inválida: se esperaba ${issue.expected}, recibido ${util.getParsedType(issue.input)}`;
|
|
77
|
+
case "invalid_value":
|
|
78
|
+
if (issue.values.length === 1)
|
|
79
|
+
return `Entrada inválida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;
|
|
80
|
+
return `Opción inválida: se esperaba una de ${util.joinValues(issue.values, "|")}`;
|
|
81
|
+
case "too_big": {
|
|
82
|
+
const adj = issue.inclusive ? "<=" : "<";
|
|
83
|
+
const sizing = getSizing(issue.origin);
|
|
84
|
+
if (sizing)
|
|
85
|
+
return `Demasiado grande: se esperaba que ${issue.origin ?? "valor"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? "elementos"}`;
|
|
86
|
+
return `Demasiado grande: se esperaba que ${issue.origin ?? "valor"} fuera ${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 `Demasiado pequeño: se esperaba que ${issue.origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return `Demasiado pequeño: se esperaba que ${issue.origin} fuera ${adj}${issue.minimum.toString()}`;
|
|
96
|
+
}
|
|
97
|
+
case "invalid_format": {
|
|
98
|
+
const _issue = issue as errors.$ZodStringFormatIssues;
|
|
99
|
+
if (_issue.format === "starts_with") return `Cadena inválida: debe comenzar con "${_issue.prefix}"`;
|
|
100
|
+
if (_issue.format === "ends_with") return `Cadena inválida: debe terminar en "${_issue.suffix}"`;
|
|
101
|
+
if (_issue.format === "includes") return `Cadena inválida: debe incluir "${_issue.includes}"`;
|
|
102
|
+
if (_issue.format === "regex") return `Cadena inválida: debe coincidir con el patrón ${_issue.pattern}`;
|
|
103
|
+
return `Inválido ${Nouns[_issue.format] ?? issue.format}`;
|
|
104
|
+
}
|
|
105
|
+
case "not_multiple_of":
|
|
106
|
+
return `Número inválido: debe ser múltiplo de ${issue.divisor}`;
|
|
107
|
+
case "unrecognized_keys":
|
|
108
|
+
return `Llave${issue.keys.length > 1 ? "s" : ""} desconocida${issue.keys.length > 1 ? "s" : ""}: ${util.joinValues(issue.keys, ", ")}`;
|
|
109
|
+
case "invalid_key":
|
|
110
|
+
return `Llave inválida en ${issue.origin}`;
|
|
111
|
+
case "invalid_union":
|
|
112
|
+
return "Entrada inválida";
|
|
113
|
+
case "invalid_element":
|
|
114
|
+
return `Valor inválido en ${issue.origin}`;
|
|
115
|
+
default:
|
|
116
|
+
return `Entrada inválida`;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
122
|
+
return {
|
|
123
|
+
localeError: error(),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
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: "تاریخ و زمان ایزو",
|
|
58
|
+
date: "تاریخ ایزو",
|
|
59
|
+
time: "زمان ایزو",
|
|
60
|
+
duration: "مدت زمان ایزو",
|
|
61
|
+
ipv4: "IPv4 آدرس",
|
|
62
|
+
ipv6: "IPv6 آدرس",
|
|
63
|
+
cidrv4: "IPv4 دامنه",
|
|
64
|
+
cidrv6: "IPv6 دامنه",
|
|
65
|
+
base64: "base64-encoded رشته",
|
|
66
|
+
base64url: "base64url-encoded رشته",
|
|
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
|
+
}
|
|
81
|
+
return `گزینه نامعتبر: میبایست یکی از ${util.joinValues(issue.values, "|")} میبود`;
|
|
82
|
+
case "too_big": {
|
|
83
|
+
const adj = issue.inclusive ? "<=" : "<";
|
|
84
|
+
const sizing = getSizing(issue.origin);
|
|
85
|
+
if (sizing) {
|
|
86
|
+
return `خیلی بزرگ: ${issue.origin ?? "مقدار"} باید ${adj}${issue.maximum.toString()} ${sizing.unit ?? "عنصر"} باشد`;
|
|
87
|
+
}
|
|
88
|
+
return `خیلی بزرگ: ${issue.origin ?? "مقدار"} باید ${adj}${issue.maximum.toString()} باشد`;
|
|
89
|
+
}
|
|
90
|
+
case "too_small": {
|
|
91
|
+
const adj = issue.inclusive ? ">=" : ">";
|
|
92
|
+
const sizing = getSizing(issue.origin);
|
|
93
|
+
if (sizing) {
|
|
94
|
+
return `خیلی کوچک: ${issue.origin} باید ${adj}${issue.minimum.toString()} ${sizing.unit} باشد`;
|
|
95
|
+
}
|
|
96
|
+
return `خیلی کوچک: ${issue.origin} باید ${adj}${issue.minimum.toString()} باشد`;
|
|
97
|
+
}
|
|
98
|
+
case "invalid_format": {
|
|
99
|
+
const _issue = issue as errors.$ZodStringFormatIssues;
|
|
100
|
+
if (_issue.format === "starts_with") {
|
|
101
|
+
return `رشته نامعتبر: باید با "${_issue.prefix}" شروع شود`;
|
|
102
|
+
}
|
|
103
|
+
if (_issue.format === "ends_with") {
|
|
104
|
+
return `رشته نامعتبر: باید با "${_issue.suffix}" تمام شود`;
|
|
105
|
+
}
|
|
106
|
+
if (_issue.format === "includes") {
|
|
107
|
+
return `رشته نامعتبر: باید شامل "${_issue.includes}" باشد`;
|
|
108
|
+
}
|
|
109
|
+
if (_issue.format === "regex") {
|
|
110
|
+
return `رشته نامعتبر: باید با الگوی ${_issue.pattern} مطابقت داشته باشد`;
|
|
111
|
+
}
|
|
112
|
+
return `${Nouns[_issue.format] ?? issue.format} نامعتبر`;
|
|
113
|
+
}
|
|
114
|
+
case "not_multiple_of":
|
|
115
|
+
return `عدد نامعتبر: باید مضرب ${issue.divisor} باشد`;
|
|
116
|
+
case "unrecognized_keys":
|
|
117
|
+
return `کلید${issue.keys.length > 1 ? "های" : ""} ناشناس: ${util.joinValues(issue.keys, ", ")}`;
|
|
118
|
+
case "invalid_key":
|
|
119
|
+
return `کلید ناشناس در ${issue.origin}`;
|
|
120
|
+
case "invalid_union":
|
|
121
|
+
return `ورودی نامعتبر`;
|
|
122
|
+
case "invalid_element":
|
|
123
|
+
return `مقدار نامعتبر در ${issue.origin}`;
|
|
124
|
+
default:
|
|
125
|
+
return `ورودی نامعتبر`;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
131
|
+
return {
|
|
132
|
+
localeError: error(),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
@@ -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; subject: string }> = {
|
|
7
|
+
string: { unit: "merkkiä", subject: "merkkijonon" },
|
|
8
|
+
file: { unit: "tavua", subject: "tiedoston" },
|
|
9
|
+
array: { unit: "alkiota", subject: "listan" },
|
|
10
|
+
set: { unit: "alkiota", subject: "joukon" },
|
|
11
|
+
number: { unit: "", subject: "luvun" },
|
|
12
|
+
bigint: { unit: "", subject: "suuren kokonaisluvun" },
|
|
13
|
+
int: { unit: "", subject: "kokonaisluvun" },
|
|
14
|
+
date: { unit: "", subject: "päivämäärän" },
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
function getSizing(origin: string): { unit: string; subject: string } | null {
|
|
18
|
+
return Sizable[origin] ?? null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const parsedType = (data: any): string => {
|
|
22
|
+
const t = typeof data;
|
|
23
|
+
|
|
24
|
+
switch (t) {
|
|
25
|
+
case "number": {
|
|
26
|
+
return Number.isNaN(data) ? "NaN" : "number";
|
|
27
|
+
}
|
|
28
|
+
case "object": {
|
|
29
|
+
if (Array.isArray(data)) {
|
|
30
|
+
return "array";
|
|
31
|
+
}
|
|
32
|
+
if (data === null) {
|
|
33
|
+
return "null";
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {
|
|
37
|
+
return data.constructor.name;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return t;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const Nouns: {
|
|
45
|
+
[k in $ZodStringFormats | (string & {})]?: string;
|
|
46
|
+
} = {
|
|
47
|
+
regex: "säännöllinen lauseke",
|
|
48
|
+
email: "sähköpostiosoite",
|
|
49
|
+
url: "URL-osoite",
|
|
50
|
+
emoji: "emoji",
|
|
51
|
+
uuid: "UUID",
|
|
52
|
+
uuidv4: "UUIDv4",
|
|
53
|
+
uuidv6: "UUIDv6",
|
|
54
|
+
nanoid: "nanoid",
|
|
55
|
+
guid: "GUID",
|
|
56
|
+
cuid: "cuid",
|
|
57
|
+
cuid2: "cuid2",
|
|
58
|
+
ulid: "ULID",
|
|
59
|
+
xid: "XID",
|
|
60
|
+
ksuid: "KSUID",
|
|
61
|
+
datetime: "ISO-aikaleima",
|
|
62
|
+
date: "ISO-päivämäärä",
|
|
63
|
+
time: "ISO-aika",
|
|
64
|
+
duration: "ISO-kesto",
|
|
65
|
+
ipv4: "IPv4-osoite",
|
|
66
|
+
ipv6: "IPv6-osoite",
|
|
67
|
+
cidrv4: "IPv4-alue",
|
|
68
|
+
cidrv6: "IPv6-alue",
|
|
69
|
+
base64: "base64-koodattu merkkijono",
|
|
70
|
+
base64url: "base64url-koodattu merkkijono",
|
|
71
|
+
json_string: "JSON-merkkijono",
|
|
72
|
+
e164: "E.164-luku",
|
|
73
|
+
jwt: "JWT",
|
|
74
|
+
template_literal: "templaattimerkkijono",
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return (issue) => {
|
|
78
|
+
switch (issue.code) {
|
|
79
|
+
case "invalid_type":
|
|
80
|
+
return `Virheellinen tyyppi: odotettiin ${issue.expected}, oli ${parsedType(issue.input)}`;
|
|
81
|
+
case "invalid_value":
|
|
82
|
+
if (issue.values.length === 1)
|
|
83
|
+
return `Virheellinen syöte: täytyy olla ${util.stringifyPrimitive(issue.values[0])}`;
|
|
84
|
+
return `Virheellinen valinta: täytyy olla yksi seuraavista: ${util.joinValues(issue.values, "|")}`;
|
|
85
|
+
case "too_big": {
|
|
86
|
+
const adj = issue.inclusive ? "<=" : "<";
|
|
87
|
+
const sizing = getSizing(issue.origin);
|
|
88
|
+
if (sizing) {
|
|
89
|
+
return `Liian suuri: ${sizing.subject} täytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();
|
|
90
|
+
}
|
|
91
|
+
return `Liian suuri: arvon täytyy olla ${adj}${issue.maximum.toString()}`;
|
|
92
|
+
}
|
|
93
|
+
case "too_small": {
|
|
94
|
+
const adj = issue.inclusive ? ">=" : ">";
|
|
95
|
+
const sizing = getSizing(issue.origin);
|
|
96
|
+
if (sizing) {
|
|
97
|
+
return `Liian pieni: ${sizing.subject} täytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();
|
|
98
|
+
}
|
|
99
|
+
return `Liian pieni: arvon täytyy olla ${adj}${issue.minimum.toString()}`;
|
|
100
|
+
}
|
|
101
|
+
case "invalid_format": {
|
|
102
|
+
const _issue = issue as errors.$ZodStringFormatIssues;
|
|
103
|
+
if (_issue.format === "starts_with") return `Virheellinen syöte: täytyy alkaa "${_issue.prefix}"`;
|
|
104
|
+
if (_issue.format === "ends_with") return `Virheellinen syöte: täytyy loppua "${_issue.suffix}"`;
|
|
105
|
+
if (_issue.format === "includes") return `Virheellinen syöte: täytyy sisältää "${_issue.includes}"`;
|
|
106
|
+
if (_issue.format === "regex") {
|
|
107
|
+
return `Virheellinen syöte: täytyy vastata säännöllistä lauseketta ${_issue.pattern}`;
|
|
108
|
+
}
|
|
109
|
+
return `Virheellinen ${Nouns[_issue.format] ?? issue.format}`;
|
|
110
|
+
}
|
|
111
|
+
case "not_multiple_of":
|
|
112
|
+
return `Virheellinen luku: täytyy olla luvun ${issue.divisor} monikerta`;
|
|
113
|
+
case "unrecognized_keys":
|
|
114
|
+
return `${issue.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${util.joinValues(issue.keys, ", ")}`;
|
|
115
|
+
case "invalid_key":
|
|
116
|
+
return "Virheellinen avain tietueessa";
|
|
117
|
+
case "invalid_union":
|
|
118
|
+
return "Virheellinen unioni";
|
|
119
|
+
case "invalid_element":
|
|
120
|
+
return "Virheellinen arvo joukossa";
|
|
121
|
+
default:
|
|
122
|
+
return `Virheellinen syöte`;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
128
|
+
return {
|
|
129
|
+
localeError: error(),
|
|
130
|
+
};
|
|
131
|
+
}
|