import type { VextMiddleware } from "../../types/middleware.js";
import type { VextBodyParserConfig, VextMultipartConfig, MultipartRouteConfig } from "../../types/app.js";
/**
 * parseBytes — 将人类可读的体积字符串转为字节数
 *
 * 支持格式：'512b' | '1kb' | '10mb' | '1gb' 或直接传数字（字节）。
 * 大小写不敏感。
 *
 * @param value 体积字符串或字节数
 * @returns 字节数
 * @throws 格式不合法时抛出 Error
 */
export declare function parseBytes(value: string | number): number;
export declare class PayloadTooLargeError extends Error {
    readonly maxBytes: number;
    readonly status = 413;
    constructor(maxBytes: number);
}
export declare function createPayloadTooLargeError(maxBytes: number): PayloadTooLargeError;
export declare function isPayloadTooLargeError(err: unknown): err is PayloadTooLargeError;
export declare function assertBodySize(size: number, maxBytes?: number): void;
export declare function resolveBodyParserMaxBytes(globalConfig: VextBodyParserConfig, routeConfig?: VextBodyParserConfig): number;
export declare function resolveRouteBodyParserConfig(routeOptions?: {
    bodyParser?: VextBodyParserConfig;
    override?: {
        maxBodySize?: string | number;
    };
}): VextBodyParserConfig | undefined;
export declare function resolveAdapterBodyLimitBytes(args: {
    globalBodyParser?: VextBodyParserConfig;
    routeBodyParser?: VextBodyParserConfig;
    multipart?: VextMultipartConfig;
    adapterBodyLimit?: string | number;
}): number;
/**
 * createBodyParserMiddleware — Body 解析中间件工厂
 *
 * 内置中间件 #3，职责：
 *   1. 解析 application/json 请求体 → req.body（对象）
 *   2. 解析 application/x-www-form-urlencoded 请求体 → req.body（对象）
 *   3. 其他 Content-Type → 跳过，req.body 保持 undefined
 *   4. 请求体大小检查 → 超过 maxBodySize 返回 413 Payload Too Large
 *
 * 配置项（config.bodyParser）：
 *   - maxBodySize: 请求体最大体积（默认 '1mb'），支持 '512b' | '1kb' | '10mb' | '1gb' 或数字
 *
 * 内存安全：
 *   body-parser 在读取请求体时逐块累计大小，
 *   一旦超过 maxBodySize 立即中止读取并返回 413，
 *   不会将超大请求体完整读入内存。
 *
 * 设计说明：
 *   - GET / HEAD / DELETE / OPTIONS 等无 body 方法直接跳过（不读取流）
 *   - Hono adapter 已将 Node.js IncomingMessage 转为 Web Request，
 *     但 body 解析由 vext body-parser 在中间件层完成（而非 adapter 层），
 *     确保用户中间件和 handler 拿到的 req.body 是已解析的对象
 *   - multipart/form-data：当 multipartConfig.enabled = true 时内置解析并填充 req.files，
 *     否则跳过（req.files 保持 undefined）
 *
 * 与 Hono adapter 的协作：
 *   Hono adapter 的 buildHandler() 将 Node.js IncomingMessage 转为 Web ReadableStream
 *   作为 Web Request 的 body。createVextRequest 通过 c.req.raw.body 可访问该流。
 *   body-parser 从 c.req.raw 获取原始请求体文本后解析为对象。
 *
 *   实际实现中，我们通过 req.headers['content-type'] 判断类型，
 *   通过 req 上附带的原始 body 文本（由 adapter 传递）进行解析。
 *   由于 Hono 已经处理了 Web Request 的 body 读取，
 *   我们在 VextRequest 上通过一个特殊的 _rawBody 字段传递原始字节。
 *
 *   实际上 Hono adapter 中 createVextRequest 保存了 Hono Context 引用，
 *   body-parser 可以通过 (req as any)._honoContext.req.text() 读取原始文本。
 *   但为了解耦，我们使用 req 上的 _getRawBody 方法（由 adapter 注入）。
 *
 *   → 简化方案：由于 VextRequest 是 adapter 内部创建的对象，
 *     body-parser 直接通过 (req as any)._rawBody() 获取 Promise<string>
 *     该方法由 createVextRequest 注入（从 Hono Context 读取）。
 *
 * @param config bodyParser 配置（从 VextConfig.bodyParser 提取）
 * @returns VextMiddleware
 */
export declare function createBodyParserMiddleware(config: VextBodyParserConfig, multipartConfig?: VextMultipartConfig): VextMiddleware;
/**
 * createRouteMultipartMiddleware — 路由级 multipart 解析中间件工厂
 *
 * 在 router-loader 中，当路由声明 `multipart.enabled = true` 时自动注入。
 * 行为语义：
 *   - 若 body-parser（全局）已解析（`req.files !== undefined`）：
 *       用路由级配置做二次校验（覆盖全局限制）
 *   - 若未解析（全局 enabled = false）：
 *       用合并后的配置重新解析（路由级覆盖全局）
 *
 * @param routeConfig   路由级 multipart 配置
 * @param globalConfig  全局 multipart 配置（提供默认值）
 */
export declare function createRouteMultipartMiddleware(routeConfig: MultipartRouteConfig, globalConfig?: VextMultipartConfig, globalBodyParser?: VextBodyParserConfig): VextMiddleware;
