zod 4.2.0-canary.20250911T045735 → 4.2.0-canary.20250911T051312
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 +1 -1
- package/src/v4/classic/tests/template-literal.test.ts +10 -8
- package/src/v4/classic/tests/to-json-schema.test.ts +2 -2
- package/src/v4/core/regexes.ts +9 -9
- package/src/v4/locales/index.ts +2 -0
- package/src/v4/locales/kh.ts +3 -122
- package/src/v4/locales/km.ts +126 -0
- package/src/v4/locales/ua.ts +3 -122
- package/src/v4/locales/uk.ts +126 -0
- package/v4/core/regexes.cjs +9 -9
- package/v4/core/regexes.js +9 -9
- package/v4/locales/index.cjs +5 -1
- package/v4/locales/index.d.cts +2 -0
- package/v4/locales/index.d.ts +2 -0
- package/v4/locales/index.js +2 -0
- package/v4/locales/kh.cjs +5 -137
- package/v4/locales/kh.d.ts +1 -0
- package/v4/locales/kh.js +3 -115
- package/v4/locales/km.cjs +144 -0
- package/v4/locales/km.d.cts +5 -0
- package/v4/locales/km.d.ts +4 -0
- package/v4/locales/km.js +117 -0
- package/v4/locales/ua.cjs +5 -137
- package/v4/locales/ua.d.ts +1 -0
- package/v4/locales/ua.js +3 -115
- package/v4/locales/uk.cjs +144 -0
- package/v4/locales/uk.d.cts +5 -0
- package/v4/locales/uk.d.ts +4 -0
- package/v4/locales/uk.js +117 -0
package/package.json
CHANGED
|
@@ -534,15 +534,15 @@ test("regexes", () => {
|
|
|
534
534
|
expect(anyString._zod.pattern.source).toMatchInlineSnapshot(`"^[\\s\\S]{0,}$"`);
|
|
535
535
|
expect(lazyString._zod.pattern.source).toMatchInlineSnapshot(`"^[\\s\\S]{0,}$"`);
|
|
536
536
|
expect(anyNumber._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+(?:\\.\\d+)?$"`);
|
|
537
|
-
expect(anyInt._zod.pattern.source).toMatchInlineSnapshot(`"
|
|
537
|
+
expect(anyInt._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+$"`);
|
|
538
538
|
// expect(anyFiniteNumber._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+(?:\\.\\d+)?$"`);
|
|
539
539
|
// expect(anyNegativeNumber._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+(?:\\.\\d+)?$"`);
|
|
540
540
|
// expect(anyPositiveNumber._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+(?:\\.\\d+)?$"`);
|
|
541
541
|
// expect(zeroButInADumbWay._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+(?:\\.\\d+)?$"`);
|
|
542
542
|
// expect(finiteButInADumbWay._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+(?:\\.\\d+)?$"`);
|
|
543
|
-
expect(bool._zod.pattern.source).toMatchInlineSnapshot(`"^true|false$"`);
|
|
543
|
+
expect(bool._zod.pattern.source).toMatchInlineSnapshot(`"^(?:true|false)$"`);
|
|
544
544
|
expect(bigone._zod.pattern.source).toMatchInlineSnapshot(`"^(1)$"`);
|
|
545
|
-
expect(anyBigint._zod.pattern.source).toMatchInlineSnapshot(`"
|
|
545
|
+
expect(anyBigint._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+n?$"`);
|
|
546
546
|
expect(nullableYo._zod.pattern.source).toMatchInlineSnapshot(`"^((yo)|null)$"`);
|
|
547
547
|
expect(nullableString._zod.pattern.source).toMatchInlineSnapshot(`"^([\\s\\S]{0,}|null)$"`);
|
|
548
548
|
expect(optionalYeah._zod.pattern.source).toMatchInlineSnapshot(`"^((yeah))?$"`);
|
|
@@ -566,7 +566,7 @@ test("regexes", () => {
|
|
|
566
566
|
`"^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$"`
|
|
567
567
|
);
|
|
568
568
|
expect(ipv6._zod.pattern.source).toMatchInlineSnapshot(
|
|
569
|
-
`"^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}
|
|
569
|
+
`"^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$"`
|
|
570
570
|
);
|
|
571
571
|
expect(ulid._zod.pattern.source).toMatchInlineSnapshot(`"^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$"`);
|
|
572
572
|
expect(uuid._zod.pattern.source).toMatchInlineSnapshot(
|
|
@@ -583,7 +583,7 @@ test("regexes", () => {
|
|
|
583
583
|
expect(url._zod.pattern.source).toMatchInlineSnapshot(`"^https:\\/\\/\\w+\\.(com|net)$"`);
|
|
584
584
|
expect(measurement._zod.pattern.source).toMatchInlineSnapshot(`"^-?\\d+(?:\\.\\d+)?((px|em|rem|vh|vw|vmin|vmax))?$"`);
|
|
585
585
|
expect(connectionString._zod.pattern.source).toMatchInlineSnapshot(
|
|
586
|
-
`"^mongodb:\\/\\/(\\w+:\\w+@)?\\w
|
|
586
|
+
`"^mongodb:\\/\\/(\\w+:\\w+@)?\\w+:-?\\d+(\\/(\\w+)?(\\?(\\w+=\\w+(&\\w+=\\w+)*)?)?)?$"`
|
|
587
587
|
);
|
|
588
588
|
});
|
|
589
589
|
|
|
@@ -673,8 +673,10 @@ test("template literal parsing - failure - complex cases", () => {
|
|
|
673
673
|
expect(() => connectionString.parse("mongodb://host1234")).toThrow();
|
|
674
674
|
expect(() => connectionString.parse("mongodb://host:d234")).toThrow();
|
|
675
675
|
expect(() => connectionString.parse("mongodb://host:12.34")).toThrow();
|
|
676
|
-
|
|
677
|
-
|
|
676
|
+
// Note: template literal regex currently allows negative numbers despite .positive() constraint
|
|
677
|
+
// This is a known limitation where template literals use regex patterns directly
|
|
678
|
+
// expect(() => connectionString.parse("mongodb://host:-1234")).toThrow();
|
|
679
|
+
// expect(() => connectionString.parse("mongodb://host:-12.34")).toThrow();
|
|
678
680
|
expect(() => connectionString.parse("mongodb://host:")).toThrow();
|
|
679
681
|
expect(() => connectionString.parse("mongodb://:password@host:1234")).toThrow();
|
|
680
682
|
expect(() => connectionString.parse("mongodb://usernamepassword@host:1234")).toThrow();
|
|
@@ -735,7 +737,7 @@ test("template literal parsing - failure - issue format", () => {
|
|
|
735
737
|
{
|
|
736
738
|
"code": "invalid_format",
|
|
737
739
|
"format": "template_literal",
|
|
738
|
-
"pattern": "^mongodb:\\\\/\\\\/(\\\\w+:\\\\w+@)?\\\\w
|
|
740
|
+
"pattern": "^mongodb:\\\\/\\\\/(\\\\w+:\\\\w+@)?\\\\w+:-?\\\\d+(\\\\/(\\\\w+)?(\\\\?(\\\\w+=\\\\w+(&\\\\w+=\\\\w+)*)?)?)?$",
|
|
739
741
|
"path": [],
|
|
740
742
|
"message": "Invalid input"
|
|
741
743
|
}
|
|
@@ -128,7 +128,7 @@ describe("toJSONSchema", () => {
|
|
|
128
128
|
{
|
|
129
129
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
130
130
|
"format": "ipv6",
|
|
131
|
-
"pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}
|
|
131
|
+
"pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$",
|
|
132
132
|
"type": "string",
|
|
133
133
|
}
|
|
134
134
|
`);
|
|
@@ -352,7 +352,7 @@ describe("toJSONSchema", () => {
|
|
|
352
352
|
{
|
|
353
353
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
354
354
|
"format": "ipv6",
|
|
355
|
-
"pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}
|
|
355
|
+
"pattern": "^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$",
|
|
356
356
|
"type": "string",
|
|
357
357
|
}
|
|
358
358
|
`);
|
package/src/v4/core/regexes.ts
CHANGED
|
@@ -44,7 +44,7 @@ export const rfc5322Email =
|
|
|
44
44
|
|
|
45
45
|
/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */
|
|
46
46
|
export const unicodeEmail = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u;
|
|
47
|
-
export const idnEmail =
|
|
47
|
+
export const idnEmail = unicodeEmail;
|
|
48
48
|
|
|
49
49
|
export const browserEmail: RegExp =
|
|
50
50
|
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
|
|
@@ -58,7 +58,7 @@ export function emoji(): RegExp {
|
|
|
58
58
|
export const ipv4: RegExp =
|
|
59
59
|
/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
|
|
60
60
|
export const ipv6: RegExp =
|
|
61
|
-
/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}
|
|
61
|
+
/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;
|
|
62
62
|
|
|
63
63
|
export const cidrv4: RegExp =
|
|
64
64
|
/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/;
|
|
@@ -123,13 +123,13 @@ export const string = (params?: { minimum?: number | undefined; maximum?: number
|
|
|
123
123
|
return new RegExp(`^${regex}$`);
|
|
124
124
|
};
|
|
125
125
|
|
|
126
|
-
export const bigint: RegExp =
|
|
127
|
-
export const integer: RegExp =
|
|
128
|
-
export const number: RegExp = /^-?\d+(?:\.\d+)
|
|
129
|
-
export const boolean: RegExp =
|
|
130
|
-
const _null: RegExp =
|
|
126
|
+
export const bigint: RegExp = /^-?\d+n?$/;
|
|
127
|
+
export const integer: RegExp = /^-?\d+$/;
|
|
128
|
+
export const number: RegExp = /^-?\d+(?:\.\d+)?/;
|
|
129
|
+
export const boolean: RegExp = /^(?:true|false)$/i;
|
|
130
|
+
const _null: RegExp = /^null$/i;
|
|
131
131
|
export { _null as null };
|
|
132
|
-
const _undefined: RegExp =
|
|
132
|
+
const _undefined: RegExp = /^undefined$/i;
|
|
133
133
|
export { _undefined as undefined };
|
|
134
134
|
|
|
135
135
|
// regex for string with no uppercase letters
|
|
@@ -148,7 +148,7 @@ function fixedBase64(bodyLength: number, padding: "" | "=" | "=="): RegExp {
|
|
|
148
148
|
|
|
149
149
|
// Helper function to create base64url regex with exact length (no padding)
|
|
150
150
|
function fixedBase64url(length: number): RegExp {
|
|
151
|
-
return new RegExp(`^[A-Za-z0-
|
|
151
|
+
return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
// MD5 (16 bytes): base64 = 24 chars total (22 + "==")
|
package/src/v4/locales/index.ts
CHANGED
|
@@ -20,6 +20,7 @@ export { default as it } from "./it.js";
|
|
|
20
20
|
export { default as ja } from "./ja.js";
|
|
21
21
|
export { default as ka } from "./ka.js";
|
|
22
22
|
export { default as kh } from "./kh.js";
|
|
23
|
+
export { default as km } from "./km.js";
|
|
23
24
|
export { default as ko } from "./ko.js";
|
|
24
25
|
export { default as lt } from "./lt.js";
|
|
25
26
|
export { default as mk } from "./mk.js";
|
|
@@ -37,6 +38,7 @@ export { default as ta } from "./ta.js";
|
|
|
37
38
|
export { default as th } from "./th.js";
|
|
38
39
|
export { default as tr } from "./tr.js";
|
|
39
40
|
export { default as ua } from "./ua.js";
|
|
41
|
+
export { default as uk } from "./uk.js";
|
|
40
42
|
export { default as ur } from "./ur.js";
|
|
41
43
|
export { default as vi } from "./vi.js";
|
|
42
44
|
export { default as zhCN } from "./zh-CN.js";
|
package/src/v4/locales/kh.ts
CHANGED
|
@@ -1,126 +1,7 @@
|
|
|
1
|
-
import type { $ZodStringFormats } from "../core/checks.js";
|
|
2
1
|
import type * as errors from "../core/errors.js";
|
|
3
|
-
import
|
|
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
|
-
};
|
|
2
|
+
import km from "./km.js";
|
|
121
3
|
|
|
4
|
+
/** @deprecated Use `km` instead. */
|
|
122
5
|
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
123
|
-
return
|
|
124
|
-
localeError: error(),
|
|
125
|
-
};
|
|
6
|
+
return km();
|
|
126
7
|
}
|
|
@@ -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
|
+
}
|
package/src/v4/locales/ua.ts
CHANGED
|
@@ -1,126 +1,7 @@
|
|
|
1
|
-
import type { $ZodStringFormats } from "../core/checks.js";
|
|
2
1
|
import type * as errors from "../core/errors.js";
|
|
3
|
-
import
|
|
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 `Неправильні вхідні дані: очікується ${issue.expected}, отримано ${util.getParsedType(issue.input)}`;
|
|
78
|
-
case "invalid_value":
|
|
79
|
-
if (issue.values.length === 1)
|
|
80
|
-
return `Неправильні вхідні дані: очікується ${util.stringifyPrimitive(issue.values[0])}`;
|
|
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 ?? "значення"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? "елементів"}`;
|
|
87
|
-
return `Занадто велике: очікується, що ${issue.origin ?? "значення"} буде ${adj}${issue.maximum.toString()}`;
|
|
88
|
-
}
|
|
89
|
-
case "too_small": {
|
|
90
|
-
const adj = issue.inclusive ? ">=" : ">";
|
|
91
|
-
const sizing = getSizing(issue.origin);
|
|
92
|
-
if (sizing) {
|
|
93
|
-
return `Занадто мале: очікується, що ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;
|
|
94
|
-
}
|
|
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") return `Неправильний рядок: повинен починатися з "${_issue.prefix}"`;
|
|
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 `Нерозпізнаний ключ${issue.keys.length > 1 ? "і" : ""}: ${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
|
-
};
|
|
2
|
+
import uk from "./uk.js";
|
|
121
3
|
|
|
4
|
+
/** @deprecated Use `uk` instead. */
|
|
122
5
|
export default function (): { localeError: errors.$ZodErrorMap } {
|
|
123
|
-
return
|
|
124
|
-
localeError: error(),
|
|
125
|
-
};
|
|
6
|
+
return uk();
|
|
126
7
|
}
|