import type { CreateTRPCClientOptions, Resolver, TRPCClient } from '@trpc/client';
import { TRPCUntypedClient } from '@trpc/client';
import type { inferProcedureOutput } from '@trpc/server';
import type { AnyClientTypes, AnyProcedure, AnyQueryProcedure, AnyRootTypes, AnyRouter, inferProcedureInput, inferTransformedProcedureOutput, ProtectedIntersection, RouterRecord } from '@trpc/server/unstable-core-do-not-import';
/**
 * @internal
 */
export type UseProcedureRecord<TRoot extends AnyRootTypes, TRecord extends RouterRecord> = {
    [TKey in keyof TRecord]: TRecord[TKey] extends infer $Value ? $Value extends AnyQueryProcedure ? Resolver<{
        input: inferProcedureInput<$Value>;
        output: inferTransformedProcedureOutput<TRoot, $Value>;
        errorShape: TRoot['errorShape'];
        transformer: TRoot['transformer'];
    }> : $Value extends RouterRecord ? UseProcedureRecord<TRoot, $Value> : never : never;
};
export declare function createUseProxy<TRouter extends AnyRouter>(client: TRPCUntypedClient<TRouter> | TRPCClient<TRouter>): UseProcedureRecord<TRouter["_def"]["_config"]["$types"], TRouter["_def"]["record"]>;
type NextAppRouterUse<TRouter extends AnyRouter> = {
    <TData extends Promise<unknown>[]>(cb: (t: UseProcedureRecord<TRouter['_def']['_config']['$types'], TRouter['_def']['record']>) => [...TData]): {
        [TKey in keyof TData]: Awaited<TData[TKey]>;
    };
    <TData extends Promise<unknown>>(cb: (t: UseProcedureRecord<TRouter['_def']['_config']['$types'], TRouter['_def']['record']>) => TData): Awaited<TData>;
};
type CreateTRPCNextAppRouterBase<TRouter extends AnyRouter> = {
    use: NextAppRouterUse<TRouter>;
};
export type CreateTRPCNextAppRouter<TRouter extends AnyRouter> = ProtectedIntersection<CreateTRPCNextAppRouterBase<TRouter>, UseProcedureRecord<TRouter['_def']['_config']['$types'], TRouter['_def']['record']>>;
/**
 * @internal
 */
export interface CreateTRPCNextAppRouterOptions<TRouter extends AnyRouter> {
    config: () => CreateTRPCClientOptions<TRouter>;
}
/**
 * @internal
 */
export declare function generateCacheTag(procedurePath: string, input: any): string;
export declare function isFormData(value: unknown): value is FormData;
/**
 * @internal
 */
export interface ActionHandlerDef {
    input?: any;
    output?: any;
    errorShape: any;
}
/**
 * @internal
 */
export type inferActionDef<TRoot extends AnyClientTypes, TProc extends AnyProcedure> = {
    input: inferProcedureInput<TProc>;
    output: inferProcedureOutput<TProc>;
    errorShape: TRoot['errorShape'];
};
export {};
//# sourceMappingURL=shared.d.ts.map