/// <reference types="node" />
import type { IncomingMessage, ServerResponse } from 'http';
import type { AnyRouter, inferRouterContext } from '../../core';
import type { HTTPBaseHandlerOptions } from '../../http';
import type { MaybePromise } from '../../types';
import type { NodeHTTPContentTypeHandler } from './internals/contentType';
interface ParsedQs {
    [key: string]: ParsedQs | ParsedQs[] | string[] | string | undefined;
}
export type NodeHTTPRequest = IncomingMessage & {
    query?: ParsedQs;
    body?: unknown;
};
export type NodeHTTPResponse = ServerResponse & {
    /**
     * Force the partially-compressed response to be flushed to the client.
     *
     * Added by compression middleware
     * (depending on the environment,
     * e.g. Next <= 12,
     * e.g. Express w/ `compression()`)
     */
    flush?: () => void;
};
export type NodeHTTPCreateContextOption<TRouter extends AnyRouter, TRequest, TResponse> = object extends inferRouterContext<TRouter> ? {
    /**
     * @link https://trpc.io/docs/context
     **/
    createContext?: NodeHTTPCreateContextFn<TRouter, TRequest, TResponse>;
} : {
    /**
     * @link https://trpc.io/docs/context
     **/
    createContext: NodeHTTPCreateContextFn<TRouter, TRequest, TResponse>;
};
/**
 * @internal
 */
type ConnectMiddleware<TRequest extends NodeHTTPRequest = NodeHTTPRequest, TResponse extends NodeHTTPResponse = NodeHTTPResponse> = (req: TRequest, res: TResponse, next: (err?: any) => any) => void;
export type NodeHTTPHandlerOptions<TRouter extends AnyRouter, TRequest extends NodeHTTPRequest, TResponse extends NodeHTTPResponse> = HTTPBaseHandlerOptions<TRouter, TRequest> & NodeHTTPCreateContextOption<TRouter, TRequest, TResponse> & {
    /**
     * By default, http `OPTIONS` requests are not handled, and CORS headers are not returned.
     *
     * This can be used to handle them manually or via the `cors` npm package: https://www.npmjs.com/package/cors
     *
     * ```ts
     * import cors from 'cors'
     *
     * nodeHTTPRequestHandler({
     *   cors: cors()
     * })
     * ```
     *
     * You can also use it for other needs which a connect/node.js compatible middleware can solve,
     *  though you might wish to consider an alternative solution like the Express adapter if your needs are complex.
     */
    middleware?: ConnectMiddleware;
    maxBodySize?: number;
    experimental_contentTypeHandlers?: NodeHTTPContentTypeHandler<TRequest, TResponse>[];
};
export type NodeHTTPRequestHandlerOptions<TRouter extends AnyRouter, TRequest extends NodeHTTPRequest, TResponse extends NodeHTTPResponse> = {
    req: TRequest;
    res: TResponse;
    path: string;
} & NodeHTTPHandlerOptions<TRouter, TRequest, TResponse>;
export type NodeHTTPCreateContextFnOptions<TRequest, TResponse> = {
    req: TRequest;
    res: TResponse;
};
export type NodeHTTPCreateContextFn<TRouter extends AnyRouter, TRequest, TResponse> = (opts: NodeHTTPCreateContextFnOptions<TRequest, TResponse>) => MaybePromise<inferRouterContext<TRouter>>;
export {};
//# sourceMappingURL=types.d.ts.map