zod 3.25.4 → 3.25.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/commonjs/v4/classic/errors.d.ts +1 -1
  2. package/dist/commonjs/v4/classic/errors.js +1 -0
  3. package/dist/commonjs/v4/classic/parse.d.ts +1 -1
  4. package/dist/commonjs/v4/classic/parse.js +2 -2
  5. package/dist/commonjs/v4/core/errors.d.ts +1 -1
  6. package/dist/commonjs/v4/core/errors.js +44 -0
  7. package/dist/commonjs/v4/core/parse.js +2 -2
  8. package/dist/esm/v4/classic/errors.d.ts +1 -1
  9. package/dist/esm/v4/classic/errors.js +1 -0
  10. package/dist/esm/v4/classic/parse.d.ts +1 -1
  11. package/dist/esm/v4/classic/parse.js +3 -3
  12. package/dist/esm/v4/core/errors.d.ts +1 -1
  13. package/dist/esm/v4/core/errors.js +11 -0
  14. package/dist/esm/v4/core/parse.js +2 -2
  15. package/package.json +1 -1
  16. package/src/v4/classic/errors.ts +2 -1
  17. package/src/v4/classic/parse.ts +3 -3
  18. package/src/v4/classic/tests/array.test.ts +42 -46
  19. package/src/v4/classic/tests/async-refinements.test.ts +14 -18
  20. package/src/v4/classic/tests/catch.test.ts +10 -12
  21. package/src/v4/classic/tests/discriminated-unions.test.ts +77 -87
  22. package/src/v4/classic/tests/enum.test.ts +33 -39
  23. package/src/v4/classic/tests/error-utils.test.ts +25 -27
  24. package/src/v4/classic/tests/error.test.ts +115 -128
  25. package/src/v4/classic/tests/literal.test.ts +10 -12
  26. package/src/v4/classic/tests/map.test.ts +60 -68
  27. package/src/v4/classic/tests/nested-refine.test.ts +68 -72
  28. package/src/v4/classic/tests/nonoptional.test.ts +36 -44
  29. package/src/v4/classic/tests/number.test.ts +36 -44
  30. package/src/v4/classic/tests/pipe.test.ts +18 -22
  31. package/src/v4/classic/tests/preprocess.test.ts +91 -107
  32. package/src/v4/classic/tests/primitive.test.ts +9 -11
  33. package/src/v4/classic/tests/record.test.ts +101 -121
  34. package/src/v4/classic/tests/set.test.ts +30 -36
  35. package/src/v4/classic/tests/string.test.ts +50 -60
  36. package/src/v4/classic/tests/template-literal.test.ts +45 -55
  37. package/src/v4/classic/tests/transform.test.ts +36 -46
  38. package/src/v4/classic/tests/tuple.test.ts +54 -66
  39. package/src/v4/core/errors.ts +12 -1
  40. package/src/v4/core/parse.ts +2 -2
  41. package/src/v4/core/tests/index.test.ts +42 -1
  42. package/src/v4/mini/tests/error.test.ts +1 -1
@@ -190,19 +190,17 @@ test("enum error message, invalid enum elementstring", () => {
190
190
  expect(result.error!.issues.length).toEqual(1);
191
191
 
192
192
  expect(result.error).toMatchInlineSnapshot(`
193
- ZodError {
194
- "issues": [
195
- {
196
- "code": "invalid_value",
197
- "message": "Invalid option: expected one of "Tuna"|"Trout"",
198
- "path": [],
199
- "values": [
200
- "Tuna",
201
- "Trout",
202
- ],
203
- },
204
- ],
205
- }
193
+ [ZodError: [
194
+ {
195
+ "code": "invalid_value",
196
+ "values": [
197
+ "Tuna",
198
+ "Trout"
199
+ ],
200
+ "path": [],
201
+ "message": "Invalid option: expected one of \\"Tuna\\"|\\"Trout\\""
202
+ }
203
+ ]]
206
204
  `);
207
205
  });
208
206
 
@@ -212,19 +210,17 @@ test("enum error message, invalid type", () => {
212
210
  expect(result.error!.issues.length).toEqual(1);
213
211
  // expect(result.error!.issues[0].message).toEqual('Invalid input: expected one of "Tuna"|"Trout"');
214
212
  expect(result.error).toMatchInlineSnapshot(`
215
- ZodError {
216
- "issues": [
217
- {
218
- "code": "invalid_value",
219
- "message": "Invalid option: expected one of "Tuna"|"Trout"",
220
- "path": [],
221
- "values": [
222
- "Tuna",
223
- "Trout",
224
- ],
225
- },
226
- ],
227
- }
213
+ [ZodError: [
214
+ {
215
+ "code": "invalid_value",
216
+ "values": [
217
+ "Tuna",
218
+ "Trout"
219
+ ],
220
+ "path": [],
221
+ "message": "Invalid option: expected one of \\"Tuna\\"|\\"Trout\\""
222
+ }
223
+ ]]
228
224
  `);
229
225
  });
230
226
 
@@ -238,19 +234,17 @@ test("nativeEnum default error message", () => {
238
234
  expect(result.error!.issues.length).toEqual(1);
239
235
  // expect(result.error!.issues[0].message).toEqual('Invalid input: expected one of "Tuna"|"Trout"');
240
236
  expect(result.error).toMatchInlineSnapshot(`
241
- ZodError {
242
- "issues": [
243
- {
244
- "code": "invalid_value",
245
- "message": "Invalid option: expected one of "Tuna"|"Trout"",
246
- "path": [],
247
- "values": [
248
- "Tuna",
249
- "Trout",
250
- ],
251
- },
252
- ],
253
- }
237
+ [ZodError: [
238
+ {
239
+ "code": "invalid_value",
240
+ "values": [
241
+ "Tuna",
242
+ "Trout"
243
+ ],
244
+ "path": [],
245
+ "message": "Invalid option: expected one of \\"Tuna\\"|\\"Trout\\""
246
+ }
247
+ ]]
254
248
  `);
255
249
  });
256
250
 
@@ -14,34 +14,32 @@ const parsed = Test.safeParse({});
14
14
  test("regular error", () => {
15
15
  expect(parsed).toMatchInlineSnapshot(`
16
16
  {
17
- "error": ZodError {
18
- "issues": [
19
- {
20
- "code": "invalid_type",
21
- "expected": "number",
22
- "message": "Invalid input: expected number, received undefined",
23
- "path": [
24
- "f1",
25
- ],
26
- },
27
- {
28
- "code": "invalid_type",
29
- "expected": "string",
30
- "message": "Invalid input: expected string, received undefined",
31
- "path": [
32
- "f3",
33
- ],
34
- },
35
- {
36
- "code": "invalid_type",
37
- "expected": "array",
38
- "message": "Invalid input: expected array, received undefined",
39
- "path": [
40
- "f4",
41
- ],
42
- },
17
+ "error": [ZodError: [
18
+ {
19
+ "expected": "number",
20
+ "code": "invalid_type",
21
+ "path": [
22
+ "f1"
43
23
  ],
24
+ "message": "Invalid input: expected number, received undefined"
44
25
  },
26
+ {
27
+ "expected": "string",
28
+ "code": "invalid_type",
29
+ "path": [
30
+ "f3"
31
+ ],
32
+ "message": "Invalid input: expected string, received undefined"
33
+ },
34
+ {
35
+ "expected": "array",
36
+ "code": "invalid_type",
37
+ "path": [
38
+ "f4"
39
+ ],
40
+ "message": "Invalid input: expected array, received undefined"
41
+ }
42
+ ]],
45
43
  "success": false,
46
44
  }
47
45
  `);
@@ -471,7 +469,7 @@ test("inheritance", () => {
471
469
  const e1 = new z.ZodError([]);
472
470
  expect(e1).toBeInstanceOf(z.core.$ZodError);
473
471
  expect(e1).toBeInstanceOf(z.ZodError);
474
- expect(e1).not.toBeInstanceOf(Error);
472
+ // expect(e1).not.toBeInstanceOf(Error);
475
473
 
476
474
  const e2 = new z.ZodRealError([]);
477
475
  expect(e2).toBeInstanceOf(z.ZodError);
@@ -47,16 +47,14 @@ test("type error with custom error map", () => {
47
47
  const result = z.string().safeParse(234, { error: errorMap });
48
48
  expect(result.success).toBe(false);
49
49
  expect(result.error).toMatchInlineSnapshot(`
50
- ZodError {
51
- "issues": [
52
- {
53
- "code": "invalid_type",
54
- "expected": "string",
55
- "message": "bad type!",
56
- "path": [],
57
- },
58
- ],
59
- }
50
+ [ZodError: [
51
+ {
52
+ "expected": "string",
53
+ "code": "invalid_type",
54
+ "path": [],
55
+ "message": "bad type!"
56
+ }
57
+ ]]
60
58
  `);
61
59
  });
62
60
 
@@ -69,18 +67,16 @@ test("refinement fail with params", () => {
69
67
  .safeParse(2, { error: errorMap });
70
68
  expect(result.success).toBe(false);
71
69
  expect(result.error).toMatchInlineSnapshot(`
72
- ZodError {
73
- "issues": [
74
- {
75
- "code": "custom",
76
- "message": "less-than-3",
77
- "params": {
78
- "minimum": 3,
79
- },
80
- "path": [],
70
+ [ZodError: [
71
+ {
72
+ "code": "custom",
73
+ "path": [],
74
+ "params": {
75
+ "minimum": 3
81
76
  },
82
- ],
83
- }
77
+ "message": "less-than-3"
78
+ }
79
+ ]]
84
80
  `);
85
81
  });
86
82
 
@@ -95,18 +91,16 @@ test("hard coded error with custom errormap", () => {
95
91
 
96
92
  expect(result.success).toBe(false);
97
93
  expect(result.error).toMatchInlineSnapshot(`
98
- ZodError {
99
- "issues": [
100
- {
101
- "code": "custom",
102
- "message": "override",
103
- "params": {
104
- "minimum": 13,
105
- },
106
- "path": [],
94
+ [ZodError: [
95
+ {
96
+ "code": "custom",
97
+ "path": [],
98
+ "params": {
99
+ "minimum": 13
107
100
  },
108
- ],
109
- }
101
+ "message": "override"
102
+ }
103
+ ]]
110
104
  `);
111
105
  });
112
106
 
@@ -118,15 +112,13 @@ test("default error message", () => {
118
112
 
119
113
  expect(result.success).toBe(false);
120
114
  expect(result.error).toMatchInlineSnapshot(`
121
- ZodError {
122
- "issues": [
123
- {
124
- "code": "custom",
125
- "message": "Invalid input",
126
- "path": [],
127
- },
128
- ],
129
- }
115
+ [ZodError: [
116
+ {
117
+ "code": "custom",
118
+ "path": [],
119
+ "message": "Invalid input"
120
+ }
121
+ ]]
130
122
  `);
131
123
  });
132
124
 
@@ -138,15 +130,13 @@ test("override error in refine", () => {
138
130
  expect(result.success).toBe(false);
139
131
  expect(result.error!.issues.length).toEqual(1);
140
132
  expect(result.error).toMatchInlineSnapshot(`
141
- ZodError {
142
- "issues": [
143
- {
144
- "code": "custom",
145
- "message": "override",
146
- "path": [],
147
- },
148
- ],
149
- }
133
+ [ZodError: [
134
+ {
135
+ "code": "custom",
136
+ "path": [],
137
+ "message": "override"
138
+ }
139
+ ]]
150
140
  `);
151
141
  });
152
142
 
@@ -160,15 +150,13 @@ test("override error in refinement", () => {
160
150
  expect(result.success).toBe(false);
161
151
  expect(result.error!.issues.length).toEqual(1);
162
152
  expect(result.error).toMatchInlineSnapshot(`
163
- ZodError {
164
- "issues": [
165
- {
166
- "code": "custom",
167
- "message": "override",
168
- "path": [],
169
- },
170
- ],
171
- }
153
+ [ZodError: [
154
+ {
155
+ "code": "custom",
156
+ "path": [],
157
+ "message": "override"
158
+ }
159
+ ]]
172
160
  `);
173
161
  });
174
162
 
@@ -182,17 +170,15 @@ test("array minimum", () => {
182
170
  expect(result.success).toBe(false);
183
171
  expect(result.error!.issues[0].code).toEqual("too_small");
184
172
  expect(result.error).toMatchInlineSnapshot(`
185
- ZodError {
186
- "issues": [
187
- {
188
- "code": "too_small",
189
- "message": "Too small: expected array to have >3 items",
190
- "minimum": 3,
191
- "origin": "array",
192
- "path": [],
193
- },
194
- ],
195
- }
173
+ [ZodError: [
174
+ {
175
+ "origin": "array",
176
+ "code": "too_small",
177
+ "minimum": 3,
178
+ "path": [],
179
+ "message": "Too small: expected array to have >3 items"
180
+ }
181
+ ]]
196
182
  `);
197
183
  });
198
184
 
@@ -201,18 +187,16 @@ test("literal bigint default error message", () => {
201
187
  expect(result.success).toBe(false);
202
188
  expect(result.error!.issues.length).toEqual(1);
203
189
  expect(result.error).toMatchInlineSnapshot(`
204
- ZodError {
205
- "issues": [
206
- {
207
- "code": "invalid_value",
208
- "message": "Invalid input: expected 12n",
209
- "path": [],
210
- "values": [
211
- 12n,
212
- ],
213
- },
214
- ],
215
- }
190
+ [ZodError: [
191
+ {
192
+ "code": "invalid_value",
193
+ "values": [
194
+ "12"
195
+ ],
196
+ "path": [],
197
+ "message": "Invalid input: expected 12n"
198
+ }
199
+ ]]
216
200
  `);
217
201
  });
218
202
 
@@ -230,18 +214,16 @@ test("custom path in custom error map", () => {
230
214
  const result = schema.safeParse({ items: ["first"] }, { error: errorMap });
231
215
  expect(result.success).toBe(false);
232
216
  expect(result.error).toMatchInlineSnapshot(`
233
- ZodError {
234
- "issues": [
235
- {
236
- "code": "custom",
237
- "message": "doesnt matter",
238
- "path": [
239
- "items",
240
- "items-too-few",
241
- ],
242
- },
243
- ],
244
- }
217
+ [ZodError: [
218
+ {
219
+ "code": "custom",
220
+ "path": [
221
+ "items",
222
+ "items-too-few"
223
+ ],
224
+ "message": "doesnt matter"
225
+ }
226
+ ]]
245
227
  `);
246
228
  });
247
229
 
@@ -542,17 +524,15 @@ test("z.config customError ", () => {
542
524
  const result = stringWithCustomError.min(10).safeParse("tooshort");
543
525
  expect(result.success).toBe(false);
544
526
  expect(result.error).toMatchInlineSnapshot(`
545
- ZodError {
546
- "issues": [
547
- {
548
- "code": "too_small",
549
- "message": "override",
550
- "minimum": 10,
551
- "origin": "string",
552
- "path": [],
553
- },
554
- ],
555
- }
527
+ [ZodError: [
528
+ {
529
+ "origin": "string",
530
+ "code": "too_small",
531
+ "minimum": 10,
532
+ "path": [],
533
+ "message": "override"
534
+ }
535
+ ]]
556
536
  `);
557
537
  expect(result.error!.issues[0].message).toEqual("override");
558
538
  z.config({ customError: undefined });
@@ -628,26 +608,24 @@ test("dont short circuit on continuable errors", () => {
628
608
  const result = user.safeParse({ password: "asdf", confirm: "qwer" });
629
609
  expect(result.success).toBe(false);
630
610
  expect(result.error).toMatchInlineSnapshot(`
631
- ZodError {
632
- "issues": [
633
- {
634
- "code": "too_small",
635
- "message": "Too small: expected string to have >6 characters",
636
- "minimum": 6,
637
- "origin": "string",
638
- "path": [
639
- "password",
640
- ],
641
- },
642
- {
643
- "code": "custom",
644
- "message": "Passwords don't match",
645
- "path": [
646
- "confirm",
647
- ],
648
- },
649
- ],
650
- }
611
+ [ZodError: [
612
+ {
613
+ "origin": "string",
614
+ "code": "too_small",
615
+ "minimum": 6,
616
+ "path": [
617
+ "password"
618
+ ],
619
+ "message": "Too small: expected string to have >6 characters"
620
+ },
621
+ {
622
+ "code": "custom",
623
+ "path": [
624
+ "confirm"
625
+ ],
626
+ "message": "Passwords don't match"
627
+ }
628
+ ]]
651
629
  `);
652
630
  // expect(result.error!.issues.length).toEqual(2);
653
631
  });
@@ -689,7 +667,7 @@ test("error inheritance", () => {
689
667
  expect(e1).toBeInstanceOf(z.core.$ZodError);
690
668
  expect(e1).toBeInstanceOf(z.ZodError);
691
669
  expect(e1).toBeInstanceOf(z.ZodRealError);
692
- expect(e1).not.toBeInstanceOf(Error);
670
+ // expect(e1).not.toBeInstanceOf(Error);
693
671
 
694
672
  try {
695
673
  z.string().parse(123);
@@ -697,7 +675,7 @@ test("error inheritance", () => {
697
675
  expect(e1).toBeInstanceOf(z.core.$ZodError);
698
676
  expect(e2).toBeInstanceOf(z.ZodError);
699
677
  expect(e2).toBeInstanceOf(z.ZodRealError);
700
- expect(e2).toBeInstanceOf(Error);
678
+ // expect(e2).toBeInstanceOf(Error);
701
679
  }
702
680
  });
703
681
 
@@ -706,6 +684,15 @@ test("error serialization", () => {
706
684
  z.string().parse(123);
707
685
  } catch (e) {
708
686
  console.dir(e, { depth: null });
709
- expect(e).toMatchInlineSnapshot(`[Error]`);
687
+ expect(e).toMatchInlineSnapshot(`
688
+ [ZodError: [
689
+ {
690
+ "expected": "string",
691
+ "code": "invalid_type",
692
+ "path": [],
693
+ "message": "Invalid input: expected string, received number"
694
+ }
695
+ ]]
696
+ `);
710
697
  }
711
698
  });
@@ -60,18 +60,16 @@ test("literal default error message", () => {
60
60
  expect(result.success).toEqual(false);
61
61
  expect(result.error!.issues.length).toEqual(1);
62
62
  expect(result.error).toMatchInlineSnapshot(`
63
- ZodError {
64
- "issues": [
65
- {
66
- "code": "invalid_value",
67
- "message": "Invalid input: expected "Tuna"",
68
- "path": [],
69
- "values": [
70
- "Tuna",
71
- ],
72
- },
73
- ],
74
- }
63
+ [ZodError: [
64
+ {
65
+ "code": "invalid_value",
66
+ "values": [
67
+ "Tuna"
68
+ ],
69
+ "path": [],
70
+ "message": "Invalid input: expected \\"Tuna\\""
71
+ }
72
+ ]]
75
73
  `);
76
74
  });
77
75