diff --git a/.changeset/flat-apples-divide.md b/.changeset/flat-apples-divide.md new file mode 100644 index 00000000..6bbf49c8 --- /dev/null +++ b/.changeset/flat-apples-divide.md @@ -0,0 +1,5 @@ +--- +'@hono/zod-validator': patch +--- + +patch: refactor types diff --git a/packages/zod-validator/src/index.ts b/packages/zod-validator/src/index.ts index bc599b6d..220a367e 100644 --- a/packages/zod-validator/src/index.ts +++ b/packages/zod-validator/src/index.ts @@ -1,34 +1,36 @@ -import type { Context, MiddlewareHandler, Env } from 'hono' +import type { Context, MiddlewareHandler, Env, ValidationTargets } from 'hono' import { validator } from 'hono/validator' import type { z } from 'zod' import type { ZodSchema, ZodError } from 'zod' -type ValidationTargets = 'json' | 'form' | 'query' | 'queries' -type Hook = ( +type Hook = ( result: { success: true; data: T } | { success: false; error: ZodError }, - c: Context + c: Context ) => Response | Promise | void export const zValidator = < T extends ZodSchema, - Target extends ValidationTargets, + Target extends keyof ValidationTargets, E extends Env, - P extends string + P extends string, + V extends { + in: { [K in Target]: z.input } + out: { [K in Target]: z.output } + } = { + in: { [K in Target]: z.input } + out: { [K in Target]: z.output } + } >( target: Target, schema: T, - hook?: Hook> -): MiddlewareHandler< - E, - P, - { in: { [K in Target]: z.input }; out: { [K in Target]: z.output } } -> => + hook?: Hook, E> +): MiddlewareHandler => validator(target, (value, c) => { const result = schema.safeParse(value) if (hook) { const hookResult = hook(result, c) - if (hookResult instanceof Response || hookResult instanceof Promise) { + if (hookResult instanceof Response || hookResult instanceof Promise) { return hookResult } }