Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 745f68e

Browse files
committed
feat: pass field names and a context as arguments to a Vest suite
1 parent 420e862 commit 745f68e

File tree

3 files changed

+26
-10
lines changed

3 files changed

+26
-10
lines changed

‎vest/src/__tests__/vest.ts‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,17 @@ describe('vestResolver', () => {
6868
),
6969
).toMatchSnapshot();
7070
});
71+
72+
it('should call a suite with values, validated field names and a context as arguments', async () => {
73+
const suite = vi.fn(validationSuite) as any as typeof validationSuite;
74+
75+
await vestResolver(suite)(validData, { some: 'context' }, {
76+
fields: { username: fields.username },
77+
names: ['username'],
78+
shouldUseNativeValidation,
79+
});
80+
81+
expect(suite).toHaveBeenCalledTimes(1);
82+
expect(suite).toHaveBeenCalledWith(validData, ['username'], { some: 'context' });
83+
});
7184
});

‎vest/src/types.ts‎

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
import {
22
FieldValues,
3+
FieldName,
34
ResolverOptions,
45
ResolverResult,
56
} from 'react-hook-form';
67
import * as Vest from 'vest';
78

8-
export type ICreateResult = ReturnType<typeof Vest.create>;
9+
export type ICreateResult<TValues extends FieldValues = FieldValues, TContext = any> = ReturnType<
10+
typeof Vest.create<(values: TValues, names?: FieldName<TValues>[], context?: TContext) => void>
11+
>;
912

10-
export type Resolver = (
11-
schema: ICreateResult,
13+
export type Resolver = <TValues extends FieldValues, TContext>(
14+
schema: ICreateResult<TValues, TContext>,
1215
schemaOptions?: never,
1316
factoryOptions?: { mode?: 'async' | 'sync', rawValues?: boolean; },
14-
) => <TFieldValues extends FieldValues, TContext>(
15-
values: TFieldValues,
17+
) => (
18+
values: TValues,
1619
context: TContext | undefined,
17-
options: ResolverOptions<TFieldValues>,
18-
) => Promise<ResolverResult<TFieldValues>>;
20+
options: ResolverOptions<TValues>,
21+
) => Promise<ResolverResult<TValues>>;
1922

2023
export type VestErrors = Record<string, string[]>;

‎vest/src/vest.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ const parseErrorSchema = (
2525

2626
export const vestResolver: Resolver =
2727
(schema, _, resolverOptions = {}) =>
28-
async (values, _context, options) => {
28+
async (values, context, options) => {
2929
const result =
3030
resolverOptions.mode === 'sync'
31-
? schema(values)
32-
: await promisify(schema)(values);
31+
? schema(values, options.names, context)
32+
: await promisify(schema)(values, options.names, context);
3333

3434
if (result.hasErrors()) {
3535
return {

0 commit comments

Comments
 (0)