zod 3.26.0-canary.20250703T013930 → 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 +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/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,440 @@
|
|
|
1
|
+
// @ts-ignore TS6133
|
|
2
|
+
import { expect, test } from "vitest";
|
|
3
|
+
|
|
4
|
+
import * as z from "zod/v3";
|
|
5
|
+
import { util } from "../helpers/util.js";
|
|
6
|
+
import { Mocker } from "./Mocker.js";
|
|
7
|
+
|
|
8
|
+
const literalStringSchema = z.literal("asdf");
|
|
9
|
+
const literalNumberSchema = z.literal(12);
|
|
10
|
+
const literalBooleanSchema = z.literal(true);
|
|
11
|
+
const literalBigIntSchema = z.literal(BigInt(42));
|
|
12
|
+
const MySymbol = Symbol("stuff");
|
|
13
|
+
const literalSymbolSchema = z.literal(MySymbol);
|
|
14
|
+
const stringSchema = z.string();
|
|
15
|
+
const numberSchema = z.number();
|
|
16
|
+
const bigintSchema = z.bigint();
|
|
17
|
+
const booleanSchema = z.boolean();
|
|
18
|
+
const dateSchema = z.date();
|
|
19
|
+
const symbolSchema = z.symbol();
|
|
20
|
+
|
|
21
|
+
const nullSchema = z.null();
|
|
22
|
+
const undefinedSchema = z.undefined();
|
|
23
|
+
const stringSchemaOptional = z.string().optional();
|
|
24
|
+
const stringSchemaNullable = z.string().nullable();
|
|
25
|
+
const numberSchemaOptional = z.number().optional();
|
|
26
|
+
const numberSchemaNullable = z.number().nullable();
|
|
27
|
+
const bigintSchemaOptional = z.bigint().optional();
|
|
28
|
+
const bigintSchemaNullable = z.bigint().nullable();
|
|
29
|
+
const booleanSchemaOptional = z.boolean().optional();
|
|
30
|
+
const booleanSchemaNullable = z.boolean().nullable();
|
|
31
|
+
const dateSchemaOptional = z.date().optional();
|
|
32
|
+
const dateSchemaNullable = z.date().nullable();
|
|
33
|
+
const symbolSchemaOptional = z.symbol().optional();
|
|
34
|
+
const symbolSchemaNullable = z.symbol().nullable();
|
|
35
|
+
|
|
36
|
+
const val = new Mocker();
|
|
37
|
+
|
|
38
|
+
test("literal string correct", () => {
|
|
39
|
+
expect(literalStringSchema.parse("asdf")).toBe("asdf");
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
test("literal string incorrect", () => {
|
|
43
|
+
const f = () => literalStringSchema.parse("not_asdf");
|
|
44
|
+
expect(f).toThrow();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("literal string number", () => {
|
|
48
|
+
const f = () => literalStringSchema.parse(123);
|
|
49
|
+
expect(f).toThrow();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("literal string boolean", () => {
|
|
53
|
+
const f = () => literalStringSchema.parse(true);
|
|
54
|
+
expect(f).toThrow();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("literal string boolean", () => {
|
|
58
|
+
const f = () => literalStringSchema.parse(true);
|
|
59
|
+
expect(f).toThrow();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("literal string object", () => {
|
|
63
|
+
const f = () => literalStringSchema.parse({});
|
|
64
|
+
expect(f).toThrow();
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test("literal number correct", () => {
|
|
68
|
+
expect(literalNumberSchema.parse(12)).toBe(12);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test("literal number incorrect", () => {
|
|
72
|
+
const f = () => literalNumberSchema.parse(13);
|
|
73
|
+
expect(f).toThrow();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test("literal number number", () => {
|
|
77
|
+
const f = () => literalNumberSchema.parse(val.string);
|
|
78
|
+
expect(f).toThrow();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test("literal number boolean", () => {
|
|
82
|
+
const f = () => literalNumberSchema.parse(val.boolean);
|
|
83
|
+
expect(f).toThrow();
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test("literal number object", () => {
|
|
87
|
+
const f = () => literalStringSchema.parse({});
|
|
88
|
+
expect(f).toThrow();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test("literal boolean correct", () => {
|
|
92
|
+
expect(literalBooleanSchema.parse(true)).toBe(true);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test("literal boolean incorrect", () => {
|
|
96
|
+
const f = () => literalBooleanSchema.parse(false);
|
|
97
|
+
expect(f).toThrow();
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("literal boolean number", () => {
|
|
101
|
+
const f = () => literalBooleanSchema.parse("asdf");
|
|
102
|
+
expect(f).toThrow();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
test("literal boolean boolean", () => {
|
|
106
|
+
const f = () => literalBooleanSchema.parse(123);
|
|
107
|
+
expect(f).toThrow();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test("literal boolean object", () => {
|
|
111
|
+
const f = () => literalBooleanSchema.parse({});
|
|
112
|
+
expect(f).toThrow();
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
test("literal bigint correct", () => {
|
|
116
|
+
expect(literalBigIntSchema.parse(BigInt(42))).toBe(BigInt(42));
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test("literal bigint incorrect", () => {
|
|
120
|
+
const f = () => literalBigIntSchema.parse(BigInt(43));
|
|
121
|
+
expect(f).toThrow();
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
test("literal bigint number", () => {
|
|
125
|
+
const f = () => literalBigIntSchema.parse("asdf");
|
|
126
|
+
expect(f).toThrow();
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test("literal bigint boolean", () => {
|
|
130
|
+
const f = () => literalBigIntSchema.parse(123);
|
|
131
|
+
expect(f).toThrow();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test("literal bigint object", () => {
|
|
135
|
+
const f = () => literalBigIntSchema.parse({});
|
|
136
|
+
expect(f).toThrow();
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
test("literal symbol", () => {
|
|
140
|
+
util.assertEqual<z.infer<typeof literalSymbolSchema>, typeof MySymbol>(true);
|
|
141
|
+
literalSymbolSchema.parse(MySymbol);
|
|
142
|
+
expect(() => literalSymbolSchema.parse(Symbol("asdf"))).toThrow();
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
test("parse stringSchema string", () => {
|
|
146
|
+
stringSchema.parse(val.string);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test("parse stringSchema number", () => {
|
|
150
|
+
const f = () => stringSchema.parse(val.number);
|
|
151
|
+
expect(f).toThrow();
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
test("parse stringSchema boolean", () => {
|
|
155
|
+
const f = () => stringSchema.parse(val.boolean);
|
|
156
|
+
expect(f).toThrow();
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
test("parse stringSchema undefined", () => {
|
|
160
|
+
const f = () => stringSchema.parse(val.undefined);
|
|
161
|
+
expect(f).toThrow();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test("parse stringSchema null", () => {
|
|
165
|
+
const f = () => stringSchema.parse(val.null);
|
|
166
|
+
expect(f).toThrow();
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
test("parse numberSchema string", () => {
|
|
170
|
+
const f = () => numberSchema.parse(val.string);
|
|
171
|
+
expect(f).toThrow();
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test("parse numberSchema number", () => {
|
|
175
|
+
numberSchema.parse(val.number);
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
test("parse numberSchema bigint", () => {
|
|
179
|
+
const f = () => numberSchema.parse(val.bigint);
|
|
180
|
+
expect(f).toThrow();
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
test("parse numberSchema boolean", () => {
|
|
184
|
+
const f = () => numberSchema.parse(val.boolean);
|
|
185
|
+
expect(f).toThrow();
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
test("parse numberSchema undefined", () => {
|
|
189
|
+
const f = () => numberSchema.parse(val.undefined);
|
|
190
|
+
expect(f).toThrow();
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test("parse numberSchema null", () => {
|
|
194
|
+
const f = () => numberSchema.parse(val.null);
|
|
195
|
+
expect(f).toThrow();
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test("parse bigintSchema string", () => {
|
|
199
|
+
const f = () => bigintSchema.parse(val.string);
|
|
200
|
+
expect(f).toThrow();
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
test("parse bigintSchema number", () => {
|
|
204
|
+
const f = () => bigintSchema.parse(val.number);
|
|
205
|
+
expect(f).toThrow();
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
test("parse bigintSchema bigint", () => {
|
|
209
|
+
bigintSchema.parse(val.bigint);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
test("parse bigintSchema boolean", () => {
|
|
213
|
+
const f = () => bigintSchema.parse(val.boolean);
|
|
214
|
+
expect(f).toThrow();
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
test("parse bigintSchema undefined", () => {
|
|
218
|
+
const f = () => bigintSchema.parse(val.undefined);
|
|
219
|
+
expect(f).toThrow();
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
test("parse bigintSchema null", () => {
|
|
223
|
+
const f = () => bigintSchema.parse(val.null);
|
|
224
|
+
expect(f).toThrow();
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
test("parse booleanSchema string", () => {
|
|
228
|
+
const f = () => booleanSchema.parse(val.string);
|
|
229
|
+
expect(f).toThrow();
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
test("parse booleanSchema number", () => {
|
|
233
|
+
const f = () => booleanSchema.parse(val.number);
|
|
234
|
+
expect(f).toThrow();
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
test("parse booleanSchema boolean", () => {
|
|
238
|
+
booleanSchema.parse(val.boolean);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test("parse booleanSchema undefined", () => {
|
|
242
|
+
const f = () => booleanSchema.parse(val.undefined);
|
|
243
|
+
expect(f).toThrow();
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
test("parse booleanSchema null", () => {
|
|
247
|
+
const f = () => booleanSchema.parse(val.null);
|
|
248
|
+
expect(f).toThrow();
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
// ==============
|
|
252
|
+
|
|
253
|
+
test("parse dateSchema string", () => {
|
|
254
|
+
const f = () => dateSchema.parse(val.string);
|
|
255
|
+
expect(f).toThrow();
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
test("parse dateSchema number", () => {
|
|
259
|
+
const f = () => dateSchema.parse(val.number);
|
|
260
|
+
expect(f).toThrow();
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
test("parse dateSchema boolean", () => {
|
|
264
|
+
const f = () => dateSchema.parse(val.boolean);
|
|
265
|
+
expect(f).toThrow();
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
test("parse dateSchema date", () => {
|
|
269
|
+
dateSchema.parse(val.date);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
test("parse dateSchema undefined", () => {
|
|
273
|
+
const f = () => dateSchema.parse(val.undefined);
|
|
274
|
+
expect(f).toThrow();
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
test("parse dateSchema null", () => {
|
|
278
|
+
const f = () => dateSchema.parse(val.null);
|
|
279
|
+
expect(f).toThrow();
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
test("parse dateSchema invalid date", async () => {
|
|
283
|
+
try {
|
|
284
|
+
await dateSchema.parseAsync(new Date("invalid"));
|
|
285
|
+
} catch (err) {
|
|
286
|
+
expect((err as z.ZodError).issues[0].code).toEqual(z.ZodIssueCode.invalid_date);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
// ==============
|
|
290
|
+
|
|
291
|
+
test("parse symbolSchema string", () => {
|
|
292
|
+
const f = () => symbolSchema.parse(val.string);
|
|
293
|
+
expect(f).toThrow();
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
test("parse symbolSchema number", () => {
|
|
297
|
+
const f = () => symbolSchema.parse(val.number);
|
|
298
|
+
expect(f).toThrow();
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
test("parse symbolSchema boolean", () => {
|
|
302
|
+
const f = () => symbolSchema.parse(val.boolean);
|
|
303
|
+
expect(f).toThrow();
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
test("parse symbolSchema date", () => {
|
|
307
|
+
const f = () => symbolSchema.parse(val.date);
|
|
308
|
+
expect(f).toThrow();
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
test("parse symbolSchema symbol", () => {
|
|
312
|
+
symbolSchema.parse(val.symbol);
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
test("parse symbolSchema undefined", () => {
|
|
316
|
+
const f = () => symbolSchema.parse(val.undefined);
|
|
317
|
+
expect(f).toThrow();
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
test("parse symbolSchema null", () => {
|
|
321
|
+
const f = () => symbolSchema.parse(val.null);
|
|
322
|
+
expect(f).toThrow();
|
|
323
|
+
});
|
|
324
|
+
|
|
325
|
+
// ==============
|
|
326
|
+
|
|
327
|
+
test("parse undefinedSchema string", () => {
|
|
328
|
+
const f = () => undefinedSchema.parse(val.string);
|
|
329
|
+
expect(f).toThrow();
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
test("parse undefinedSchema number", () => {
|
|
333
|
+
const f = () => undefinedSchema.parse(val.number);
|
|
334
|
+
expect(f).toThrow();
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
test("parse undefinedSchema boolean", () => {
|
|
338
|
+
const f = () => undefinedSchema.parse(val.boolean);
|
|
339
|
+
expect(f).toThrow();
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
test("parse undefinedSchema undefined", () => {
|
|
343
|
+
undefinedSchema.parse(val.undefined);
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
test("parse undefinedSchema null", () => {
|
|
347
|
+
const f = () => undefinedSchema.parse(val.null);
|
|
348
|
+
expect(f).toThrow();
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
test("parse nullSchema string", () => {
|
|
352
|
+
const f = () => nullSchema.parse(val.string);
|
|
353
|
+
expect(f).toThrow();
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
test("parse nullSchema number", () => {
|
|
357
|
+
const f = () => nullSchema.parse(val.number);
|
|
358
|
+
expect(f).toThrow();
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
test("parse nullSchema boolean", () => {
|
|
362
|
+
const f = () => nullSchema.parse(val.boolean);
|
|
363
|
+
expect(f).toThrow();
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
test("parse nullSchema undefined", () => {
|
|
367
|
+
const f = () => nullSchema.parse(val.undefined);
|
|
368
|
+
expect(f).toThrow();
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
test("parse nullSchema null", () => {
|
|
372
|
+
nullSchema.parse(val.null);
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
test("primitive inference", () => {
|
|
376
|
+
util.assertEqual<z.TypeOf<typeof literalStringSchema>, "asdf">(true);
|
|
377
|
+
util.assertEqual<z.TypeOf<typeof literalNumberSchema>, 12>(true);
|
|
378
|
+
util.assertEqual<z.TypeOf<typeof literalBooleanSchema>, true>(true);
|
|
379
|
+
util.assertEqual<z.TypeOf<typeof literalBigIntSchema>, bigint>(true);
|
|
380
|
+
util.assertEqual<z.TypeOf<typeof stringSchema>, string>(true);
|
|
381
|
+
util.assertEqual<z.TypeOf<typeof numberSchema>, number>(true);
|
|
382
|
+
util.assertEqual<z.TypeOf<typeof bigintSchema>, bigint>(true);
|
|
383
|
+
util.assertEqual<z.TypeOf<typeof booleanSchema>, boolean>(true);
|
|
384
|
+
util.assertEqual<z.TypeOf<typeof dateSchema>, Date>(true);
|
|
385
|
+
util.assertEqual<z.TypeOf<typeof symbolSchema>, symbol>(true);
|
|
386
|
+
|
|
387
|
+
util.assertEqual<z.TypeOf<typeof nullSchema>, null>(true);
|
|
388
|
+
util.assertEqual<z.TypeOf<typeof undefinedSchema>, undefined>(true);
|
|
389
|
+
util.assertEqual<z.TypeOf<typeof stringSchemaOptional>, string | undefined>(true);
|
|
390
|
+
util.assertEqual<z.TypeOf<typeof stringSchemaNullable>, string | null>(true);
|
|
391
|
+
util.assertEqual<z.TypeOf<typeof numberSchemaOptional>, number | undefined>(true);
|
|
392
|
+
util.assertEqual<z.TypeOf<typeof numberSchemaNullable>, number | null>(true);
|
|
393
|
+
util.assertEqual<z.TypeOf<typeof bigintSchemaOptional>, bigint | undefined>(true);
|
|
394
|
+
util.assertEqual<z.TypeOf<typeof bigintSchemaNullable>, bigint | null>(true);
|
|
395
|
+
util.assertEqual<z.TypeOf<typeof booleanSchemaOptional>, boolean | undefined>(true);
|
|
396
|
+
util.assertEqual<z.TypeOf<typeof booleanSchemaNullable>, boolean | null>(true);
|
|
397
|
+
util.assertEqual<z.TypeOf<typeof dateSchemaOptional>, Date | undefined>(true);
|
|
398
|
+
util.assertEqual<z.TypeOf<typeof dateSchemaNullable>, Date | null>(true);
|
|
399
|
+
util.assertEqual<z.TypeOf<typeof symbolSchemaOptional>, symbol | undefined>(true);
|
|
400
|
+
util.assertEqual<z.TypeOf<typeof symbolSchemaNullable>, symbol | null>(true);
|
|
401
|
+
|
|
402
|
+
// [
|
|
403
|
+
// literalStringSchemaTest,
|
|
404
|
+
// literalNumberSchemaTest,
|
|
405
|
+
// literalBooleanSchemaTest,
|
|
406
|
+
// literalBigIntSchemaTest,
|
|
407
|
+
// stringSchemaTest,
|
|
408
|
+
// numberSchemaTest,
|
|
409
|
+
// bigintSchemaTest,
|
|
410
|
+
// booleanSchemaTest,
|
|
411
|
+
// dateSchemaTest,
|
|
412
|
+
// symbolSchemaTest,
|
|
413
|
+
|
|
414
|
+
// nullSchemaTest,
|
|
415
|
+
// undefinedSchemaTest,
|
|
416
|
+
// stringSchemaOptionalTest,
|
|
417
|
+
// stringSchemaNullableTest,
|
|
418
|
+
// numberSchemaOptionalTest,
|
|
419
|
+
// numberSchemaNullableTest,
|
|
420
|
+
// bigintSchemaOptionalTest,
|
|
421
|
+
// bigintSchemaNullableTest,
|
|
422
|
+
// booleanSchemaOptionalTest,
|
|
423
|
+
// booleanSchemaNullableTest,
|
|
424
|
+
// dateSchemaOptionalTest,
|
|
425
|
+
// dateSchemaNullableTest,
|
|
426
|
+
// symbolSchemaOptionalTest,
|
|
427
|
+
// symbolSchemaNullableTest,
|
|
428
|
+
|
|
429
|
+
// ];
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
test("get literal value", () => {
|
|
433
|
+
expect(literalStringSchema.value).toEqual("asdf");
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
test("optional convenience method", () => {
|
|
437
|
+
z.ostring().parse(undefined);
|
|
438
|
+
z.onumber().parse(undefined);
|
|
439
|
+
z.oboolean().parse(undefined);
|
|
440
|
+
});
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// @ts-ignore TS6133
|
|
2
|
+
import { expect, test } from "vitest";
|
|
3
|
+
|
|
4
|
+
import * as z from "zod/v3";
|
|
5
|
+
import { util } from "../helpers/util.js";
|
|
6
|
+
|
|
7
|
+
const promSchema = z.promise(
|
|
8
|
+
z.object({
|
|
9
|
+
name: z.string(),
|
|
10
|
+
age: z.number(),
|
|
11
|
+
})
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
test("promise inference", () => {
|
|
15
|
+
type promSchemaType = z.infer<typeof promSchema>;
|
|
16
|
+
util.assertEqual<promSchemaType, Promise<{ name: string; age: number }>>(true);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("promise parsing success", async () => {
|
|
20
|
+
const pr = promSchema.parse(Promise.resolve({ name: "Bobby", age: 10 }));
|
|
21
|
+
expect(pr).toBeInstanceOf(Promise);
|
|
22
|
+
const result = await pr;
|
|
23
|
+
expect(typeof result).toBe("object");
|
|
24
|
+
expect(typeof result.age).toBe("number");
|
|
25
|
+
expect(typeof result.name).toBe("string");
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test("promise parsing success 2", () => {
|
|
29
|
+
const fakePromise = {
|
|
30
|
+
then() {
|
|
31
|
+
return this;
|
|
32
|
+
},
|
|
33
|
+
catch() {
|
|
34
|
+
return this;
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
promSchema.parse(fakePromise);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test("promise parsing fail", async () => {
|
|
41
|
+
const bad = promSchema.parse(Promise.resolve({ name: "Bobby", age: "10" }));
|
|
42
|
+
// return await expect(bad).resolves.toBe({ name: 'Bobby', age: '10' });
|
|
43
|
+
return await expect(bad).rejects.toBeInstanceOf(z.ZodError);
|
|
44
|
+
// done();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("promise parsing fail 2", async () => {
|
|
48
|
+
const failPromise = promSchema.parse(Promise.resolve({ name: "Bobby", age: "10" }));
|
|
49
|
+
await expect(failPromise).rejects.toBeInstanceOf(z.ZodError);
|
|
50
|
+
// done();/z
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("promise parsing fail", () => {
|
|
54
|
+
const bad = () => promSchema.parse({ then: () => {}, catch: {} });
|
|
55
|
+
expect(bad).toThrow();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// test('sync promise parsing', () => {
|
|
59
|
+
// expect(() => z.promise(z.string()).parse(Promise.resolve('asfd'))).toThrow();
|
|
60
|
+
// });
|
|
61
|
+
|
|
62
|
+
const asyncFunction = z.function(z.tuple([]), promSchema);
|
|
63
|
+
|
|
64
|
+
test("async function pass", async () => {
|
|
65
|
+
const validatedFunction = asyncFunction.implement(async () => {
|
|
66
|
+
return { name: "jimmy", age: 14 };
|
|
67
|
+
});
|
|
68
|
+
await expect(validatedFunction()).resolves.toEqual({
|
|
69
|
+
name: "jimmy",
|
|
70
|
+
age: 14,
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test("async function fail", async () => {
|
|
75
|
+
const validatedFunction = asyncFunction.implement(() => {
|
|
76
|
+
return Promise.resolve("asdf" as any);
|
|
77
|
+
});
|
|
78
|
+
await expect(validatedFunction()).rejects.toBeInstanceOf(z.ZodError);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test("async promise parsing", () => {
|
|
82
|
+
const res = z.promise(z.number()).parseAsync(Promise.resolve(12));
|
|
83
|
+
expect(res).toBeInstanceOf(Promise);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test("resolves", () => {
|
|
87
|
+
const foo = z.literal("foo");
|
|
88
|
+
const res = z.promise(foo);
|
|
89
|
+
expect(res.unwrap()).toEqual(foo);
|
|
90
|
+
});
|