import { Buffer } from 'node:buffer';
import type { IncomingMessage, ServerResponse as Response } from 'node:http';
type NextFunction = (err?: any) => void;
/**
 * Request extension with a body
 */
export type ReqWithBody<T = any> = IncomingMessage & {
    body?: T;
};
export declare const hasBody: (method: string) => boolean;
export type LimitErrorFn = (limit: number) => Error;
export type ParserOptions = Partial<{
    /**
     * Limit payload size (in bytes)
     * @default '100KB'
     */
    payloadLimit: number;
    /**
     * Custom error function for payload limit
     */
    payloadLimitErrorFn: LimitErrorFn;
}>;
export declare const p: <T = any>(fn: (body: Buffer) => void, payloadLimit?: number, payloadLimitErrorFn?: LimitErrorFn) => (req: ReqWithBody<T>, _res: Response, next?: (err?: any) => void) => Promise<void>;
/**
 * Parse payload with a custom function
 * @param fn
 */
declare const custom: <T = any>(fn: (body: Buffer) => any) => (req: ReqWithBody, _res: Response, next?: NextFunction) => Promise<void>;
/**
 * Parse JSON payload
 * @param options
 */
declare const json: ({ payloadLimit, payloadLimitErrorFn }?: ParserOptions) => (req: ReqWithBody, res: Response, next?: NextFunction) => Promise<void>;
/**
 * Parse raw payload
 * @param options
 */
declare const raw: ({ payloadLimit, payloadLimitErrorFn }?: ParserOptions) => (req: ReqWithBody, _res: Response, next?: NextFunction) => Promise<void>;
/**
 * Stringify request payload
 * @param param0
 * @returns
 */
declare const text: ({ payloadLimit, payloadLimitErrorFn }?: ParserOptions) => (req: ReqWithBody, _res: Response, next?: NextFunction) => Promise<void>;
/**
 * Parse urlencoded payload
 * @param options
 */
declare const urlencoded: ({ payloadLimit, payloadLimitErrorFn }?: ParserOptions) => (req: ReqWithBody, _res: Response, next?: NextFunction) => Promise<void>;
type MultipartOptions = Partial<{
    /**
     * Limit number of files
     */
    fileCountLimit: number;
    /**
     * Limit file size (in bytes)
     */
    fileSizeLimit: number;
    /**
     * Custom error function for file size limit
     */
    fileSizeLimitErrorFn: LimitErrorFn;
}>;
/**
 * Parse multipart form data (supports files as well)
 *
 * Does not restrict total payload size by default.
 * @param options
 */
declare const multipart: ({ payloadLimit, payloadLimitErrorFn, ...opts }?: MultipartOptions & ParserOptions) => (req: ReqWithBody, res: Response, next?: NextFunction) => Promise<void>;
export { custom, json, raw, text, urlencoded, multipart };
