/**
 * Heavily based on urql's ssr
 * https://github.com/FormidableLabs/urql/blob/main/packages/next-urql/src/with-urql-client.ts
 */
import type { QueryClient } from '@tanstack/react-query';
import type { CreateTRPCClientOptions, TRPCClient, TRPCClientError, TRPCUntypedClient } from '@trpc/client';
import { type TransformerOptions } from '@trpc/client/unstable-internals';
import type { CreateTRPCReactOptions, CreateTRPCReactQueryClientConfig } from '@trpc/react-query/shared';
import type { AnyRouter, inferClientTypes, ResponseMeta } from '@trpc/server/unstable-core-do-not-import';
import type { NextComponentType, NextPageContext } from 'next/dist/shared/lib/utils';
export type WithTRPCConfig<TRouter extends AnyRouter> = CreateTRPCClientOptions<TRouter> & CreateTRPCReactQueryClientConfig & {
    abortOnUnmount?: boolean;
};
type WithTRPCOptions<TRouter extends AnyRouter> = CreateTRPCReactOptions<TRouter> & {
    config: (info: {
        ctx?: NextPageContext;
    }) => WithTRPCConfig<TRouter>;
} & TransformerOptions<inferClientTypes<TRouter>>;
export type TRPCPrepassHelper = (opts: {
    parent: WithTRPCSSROptions<AnyRouter>;
    WithTRPC: NextComponentType<any, any, any>;
    AppOrPage: NextComponentType<any, any, any>;
}) => void;
export type WithTRPCSSROptions<TRouter extends AnyRouter> = WithTRPCOptions<TRouter> & {
    /**
     * If you enable this, you also need to add a `ssrPrepass`-prop
     * @see https://trpc.io/docs/client/nextjs/ssr
     */
    ssr: true | ((opts: {
        ctx: NextPageContext;
    }) => boolean | Promise<boolean>);
    responseMeta?: (opts: {
        ctx: NextPageContext;
        clientErrors: TRPCClientError<TRouter>[];
    }) => ResponseMeta;
    /**
     * use `import { ssrPrepass } from '@trpc/next/ssrPrepass'`
     * @see https://trpc.io/docs/client/nextjs/ssr
     */
    ssrPrepass: TRPCPrepassHelper;
};
export type WithTRPCNoSSROptions<TRouter extends AnyRouter> = WithTRPCOptions<TRouter> & {
    ssr?: false;
};
export type TRPCPrepassProps<TRouter extends AnyRouter, TSSRContext extends NextPageContext = NextPageContext> = {
    config: WithTRPCConfig<TRouter>;
    queryClient: QueryClient;
    trpcClient: TRPCUntypedClient<TRouter> | TRPCClient<TRouter>;
    ssrState: 'prepass';
    ssrContext: TSSRContext;
};
export declare function withTRPC<TRouter extends AnyRouter, TSSRContext extends NextPageContext = NextPageContext>(opts: WithTRPCNoSSROptions<TRouter> | WithTRPCSSROptions<TRouter>): (AppOrPage: NextComponentType<any, any, any>) => NextComponentType;
export {};
//# sourceMappingURL=withTRPC.d.ts.map