import type { Context, Env, Input, ValidationTargets } from "hono";
import type { BlankEnv, MiddlewareHandler } from "hono/types";
import type { Static, StaticCoerced, RemoveUnknownAdditionalProperties, Simplify, Schema } from "jsonv-ts";
export type Options = {
    coerce?: boolean;
    dropUnknown?: boolean;
    includeSchema?: boolean;
    skipOpenAPI?: boolean;
};
type ValidationResult = {
    valid: boolean;
    errors: {
        keywordLocation: string;
        instanceLocation: string;
        error: string;
        data?: unknown;
    }[];
};
export type Hook<T, E extends Env, P extends string> = (result: {
    result: ValidationResult;
    data: T;
}, c: Context<E, P>) => Response | Promise<Response> | void;
export declare const validator: <S extends Schema, Target extends keyof ValidationTargets, P extends string, E extends Env = BlankEnv, Opts extends Options = Options, Out = Opts extends {
    coerce: false;
} ? Static<S> : StaticCoerced<S>, I extends Input = {
    in: { [K in Target]: Static<S>; };
    out: { [K in Target]: Opts extends {
        dropUnknown: true;
    } ? Simplify<RemoveUnknownAdditionalProperties<Out>> : Out; };
}>(target: Target, schema: S, options?: Opts, hook?: Hook<Out, E, P>) => MiddlewareHandler<E, P, I>;
export {};
