Skip to content

Commit a1e1195

Browse files
committed
Fix inference
1 parent 67d0e7d commit a1e1195

File tree

14 files changed

+32
-28
lines changed

14 files changed

+32
-28
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Example:
6868
```tsx
6969
import { useForm } from 'react-hook-form';
7070
import { zodResolver } from '@hookform/resolvers/zod';
71-
import { z } from 'zod';
71+
import { z } from 'zod'; // or 'zod/v4'
7272

7373
const schema = z.object({
7474
id: z.number(),

bun.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1444,7 +1444,7 @@
14441444

14451445
"yup": ["[email protected]", "", { "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", "toposort": "^2.0.2", "type-fest": "^2.19.0" } }, "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA=="],
14461446

1447-
"zod": ["[email protected].51", "", {}, "sha512-TQSnBldh+XSGL+opiSIq0575wvDPqu09AqWe1F7JhUMKY+M91/aGlK4MhpVNO7MgYfHcVCB1ffwAUTJzllKJqg=="],
1447+
"zod": ["[email protected].30", "", {}, "sha512-VolhdEtu6TJr/fzGuHA/SZ5ixvXqA6ADOG9VRcQ3rdOKmF5hkmcJbyaQjUH5BgmpA9gej++zYRX7zjSmdReIwA=="],
14481448

14491449
"@asamuzakjp/css-color/lru-cache": ["[email protected]", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
14501450

standard-schema/src/__tests__/__fixtures__/data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { StandardSchemaV1 } from '@standard-schema/spec';
22
import { Field, InternalFieldName } from 'react-hook-form';
3-
import { z } from 'zod';
3+
import { z } from 'zod/v3';
44

55
export const schema = z
66
.object({

standard-schema/src/__tests__/standard-schema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Resolver, SubmitHandler, useForm } from 'react-hook-form';
2-
import { z } from 'zod';
2+
import { z } from 'zod/v3';
33
import { standardSchemaResolver } from '..';
44
import {
55
customSchema,

typeschema/src/__tests__/Form-native-validation.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import user from '@testing-library/user-event';
33
import type { Infer } from '@typeschema/main';
44
import React from 'react';
55
import { useForm } from 'react-hook-form';
6-
import { z } from 'zod';
6+
import { z } from 'zod/v3';
77
import { typeschemaResolver } from '..';
88

99
const USERNAME_REQUIRED_MESSAGE = 'username field is required';

typeschema/src/__tests__/Form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import user from '@testing-library/user-event';
33
import type { Infer } from '@typeschema/main';
44
import React from 'react';
55
import { useForm } from 'react-hook-form';
6-
import { z } from 'zod';
6+
import { z } from 'zod/v3';
77
import { typeschemaResolver } from '..';
88

99
const schema = z.object({

typeschema/src/__tests__/__fixtures__/data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Field, InternalFieldName } from 'react-hook-form';
2-
import { z } from 'zod';
2+
import { z } from 'zod/v3';
33

44
export const schema = z
55
.object({

typeschema/src/__tests__/typeschema.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as typeschema from '@typeschema/main';
22
import { Resolver, SubmitHandler, useForm } from 'react-hook-form';
3-
import { z } from 'zod';
3+
import { z } from 'zod/v3';
44
import { typeschemaResolver } from '..';
55
import { fields, invalidData, schema, validData } from './__fixtures__/data';
66

zod/src/__tests__/Form-native-validation.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { render, screen } from '@testing-library/react';
22
import user from '@testing-library/user-event';
33
import React from 'react';
44
import { useForm } from 'react-hook-form';
5-
import { z } from 'zod';
5+
import { z } from 'zod/v3';
66
import { zodResolver } from '..';
77

88
const USERNAME_REQUIRED_MESSAGE = 'username field is required';

zod/src/__tests__/Form.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { render, screen } from '@testing-library/react';
22
import user from '@testing-library/user-event';
33
import React from 'react';
44
import { useForm } from 'react-hook-form';
5-
import { z } from 'zod';
5+
import { z } from 'zod/v3';
66
import { zodResolver } from '..';
77

88
const schema = z.object({

zod/src/__tests__/__fixtures__/data-v3.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Field, InternalFieldName } from 'react-hook-form';
2-
import { z } from 'zod';
2+
import { z } from 'zod/v3';
33

44
export const schema = z
55
.object({

zod/src/__tests__/zod-v3.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Resolver, SubmitHandler, useForm } from 'react-hook-form';
2-
import { z } from 'zod';
2+
import { z } from 'zod/v3';
33
import { zodResolver } from '..';
44
import { fields, invalidData, schema, validData } from './__fixtures__/data-v3';
55

zod/src/__tests__/zod-v4.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Resolver, SubmitHandler, useForm } from 'react-hook-form';
2-
import { z } from 'zod';
2+
import { z } from 'zod/v4';
33
import { zodResolver } from '..';
44
import { fields, invalidData, schema, validData } from './__fixtures__/data-v4';
55

zod/src/zod.ts

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,6 @@ interface Zod3Type<O = unknown, I = unknown> {
148148
};
149149
}
150150

151-
interface Zod4Type<O = unknown, I = unknown> {
152-
_zod: {
153-
output: O;
154-
input: I;
155-
};
156-
}
157-
158151
// some type magic to make versions pre-3.25.0 still work
159152
type IsUnresolved<T> = PropertyKey extends keyof T ? true : false;
160153
type UnresolvedFallback<T, Fallback> = IsUnresolved<typeof z3> extends true
@@ -202,16 +195,27 @@ export function zodResolver<Input extends FieldValues, Context, Output>(
202195
schemaOptions: Zod3ParseParams | undefined,
203196
resolverOptions: RawResolverOptions,
204197
): Resolver<Input, Context, Input>;
205-
export function zodResolver<Input extends FieldValues, Context, Output>(
206-
schema: Zod4Type<Output, Input>,
198+
// the Zod 4 overloads need to be generic for complicated reasons
199+
export function zodResolver<
200+
Input extends FieldValues,
201+
Context,
202+
Output,
203+
T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,
204+
>(
205+
schema: T,
207206
schemaOptions?: Zod4ParseParams, // already partial
208207
resolverOptions?: NonRawResolverOptions,
209-
): Resolver<Input, Context, Output>;
210-
export function zodResolver<Input extends FieldValues, Context, Output>(
211-
schema: Zod4Type<Output, Input>,
212-
schemaOptions?: Zod4ParseParams, // already partial
213-
resolverOptions?: RawResolverOptions,
214-
): Resolver<Input, Context, Input>;
208+
): Resolver<z4.input<T>, Context, z4.output<T>>;
209+
export function zodResolver<
210+
Input extends FieldValues,
211+
Context,
212+
Output,
213+
T extends z4.$ZodType<Output, Input> = z4.$ZodType<Output, Input>,
214+
>(
215+
schema: z4.$ZodType<Output, Input>,
216+
schemaOptions: Zod4ParseParams | undefined, // already partial
217+
resolverOptions: RawResolverOptions,
218+
): Resolver<z4.input<T>, Context, z4.input<T>>;
215219
/**
216220
* Creates a resolver function for react-hook-form that validates form data using a Zod schema
217221
* @param {z3.ZodSchema<Input>} schema - The Zod schema used to validate the form data

0 commit comments

Comments
 (0)