Skip to content

Commit 397f6bc

Browse files
authored
fix(zod4): replace deprecated z.interface with z.object (#2214)
Zod v4 dropped z.interface, z.looseInterface, and z.strictInterface. Updated to use z.object with appropriate modifiers: - z.interface -> z.object - z.looseInterface -> z.object().passthrough() - z.strictInterface -> z.object().strict() Fixes #2213
1 parent c9b302b commit 397f6bc

1 file changed

Lines changed: 38 additions & 30 deletions

File tree

cases/zod4.ts

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import * as z from 'zod4';
22
import { createCase } from '../benchmarks';
33

44
createCase('zod4', 'parseSafe', () => {
5-
const dataType = z.interface({
5+
const dataType = z.object({
66
number: z.number(),
77
negNumber: z.number(),
88
maxNumber: z.number(),
99
string: z.string(),
1010
longString: z.string(),
1111
boolean: z.boolean(),
12-
deeplyNested: z.interface({
12+
deeplyNested: z.object({
1313
foo: z.string(),
1414
num: z.number(),
1515
bool: z.boolean(),
@@ -23,15 +23,15 @@ createCase('zod4', 'parseSafe', () => {
2323

2424
createCase('zod4', 'parseStrict', () => {
2525
const dataType = z
26-
.interface({
26+
.object({
2727
number: z.number(),
2828
negNumber: z.number(),
2929
maxNumber: z.number(),
3030
string: z.string(),
3131
longString: z.string(),
3232
boolean: z.boolean(),
3333
deeplyNested: z
34-
.interface({
34+
.object({
3535
foo: z.string(),
3636
num: z.number(),
3737
bool: z.boolean(),
@@ -46,19 +46,23 @@ createCase('zod4', 'parseStrict', () => {
4646
});
4747

4848
createCase('zod4', 'assertLoose', () => {
49-
const dataType = z.looseInterface({
50-
number: z.number(),
51-
negNumber: z.number(),
52-
maxNumber: z.number(),
53-
string: z.string(),
54-
longString: z.string(),
55-
boolean: z.boolean(),
56-
deeplyNested: z.looseInterface({
57-
foo: z.string(),
58-
num: z.number(),
59-
bool: z.boolean(),
60-
}),
61-
});
49+
const dataType = z
50+
.object({
51+
number: z.number(),
52+
negNumber: z.number(),
53+
maxNumber: z.number(),
54+
string: z.string(),
55+
longString: z.string(),
56+
boolean: z.boolean(),
57+
deeplyNested: z
58+
.object({
59+
foo: z.string(),
60+
num: z.number(),
61+
bool: z.boolean(),
62+
})
63+
.passthrough(),
64+
})
65+
.passthrough();
6266

6367
return data => {
6468
dataType.parse(data);
@@ -68,19 +72,23 @@ createCase('zod4', 'assertLoose', () => {
6872
});
6973

7074
createCase('zod4', 'assertStrict', () => {
71-
const dataType = z.strictInterface({
72-
number: z.number(),
73-
negNumber: z.number(),
74-
maxNumber: z.number(),
75-
string: z.string(),
76-
longString: z.string(),
77-
boolean: z.boolean(),
78-
deeplyNested: z.strictInterface({
79-
foo: z.string(),
80-
num: z.number(),
81-
bool: z.boolean(),
82-
}),
83-
});
75+
const dataType = z
76+
.object({
77+
number: z.number(),
78+
negNumber: z.number(),
79+
maxNumber: z.number(),
80+
string: z.string(),
81+
longString: z.string(),
82+
boolean: z.boolean(),
83+
deeplyNested: z
84+
.object({
85+
foo: z.string(),
86+
num: z.number(),
87+
bool: z.boolean(),
88+
})
89+
.strict(),
90+
})
91+
.strict();
8492

8593
return data => {
8694
dataType.parse(data);

0 commit comments

Comments
 (0)