import { ZodSchema } from "zod";
import type { WithParams } from "../utils/with-params.js";
import type { AppLoadContext, LoaderFunctionArgs } from "react-router";
type LoaderArguments<TParamSchema extends ZodSchema | undefined, TQuerySchema extends ZodSchema | undefined> = WithParams<TParamSchema, TQuerySchema, {
    request: LoaderFunctionArgs["request"];
    context: AppLoadContext;
}>;
interface SetupLoaderArgs<TParamSchema extends ZodSchema | undefined, TQuerySchema extends ZodSchema | undefined, TResult, TMiddlewareResult> {
    loaderArgs: LoaderFunctionArgs;
    paramSchema?: TParamSchema;
    querySchema?: TQuerySchema;
    load: (args: LoaderArguments<TParamSchema, TQuerySchema> & (TMiddlewareResult extends undefined ? {} : TMiddlewareResult)) => Promise<TResult>;
    middleware?: (args: LoaderArguments<TParamSchema, TQuerySchema>) => Promise<TMiddlewareResult>;
}
declare function setupLoader<TParamSchema extends ZodSchema | undefined, TQuerySchema extends ZodSchema | undefined, TResult, TMiddlewareResult>({ loaderArgs, querySchema, load, paramSchema, middleware }: SetupLoaderArgs<TParamSchema, TQuerySchema, TResult, TMiddlewareResult>): Promise<TResult>;
export { setupLoader };
