import type { Context } from "hono"; import type { VextRequest } from "../../types/request.js"; import type { VextApp } from "../../types/app.js"; /** * HonoContext → VextRequest 转换 * * 将 Hono 的 Context 对象转换为 vext 框架的统一请求接口。 * 所有底层框架特有的 API 在此处适配,后续代码只与 VextRequest 交互。 * * 转换要点: * - query: 从 URL searchParams 解析(🆕 懒解析,首次访问时才解析) * - body: 由 body-parser 中间件后续填充(初始 undefined) * - params: 从 Hono 路由参数提取(🆕 懒解析,首次访问时才提取) * - headers: 从原始请求头提取(key 全小写)(🆕 懒解析,首次访问时才遍历) * - requestId: 由 requestId 中间件后续填充(初始空字符串) * - ip: 根据 trustProxy 配置决定从 X-Forwarded-For 或 socket 读取 * - protocol: 根据 trustProxy 配置决定从 X-Forwarded-Proto 或默认值读取 * - onClose: 注册请求关闭钩子,连接断开时触发 * - valid: 获取 validate 中间件校验后的数据 * * 🆕 性能优化(懒解析): * query / headers / params 使用 getter + 缓存模式。 * 大部分中间件和 handler 只访问其中 1-2 个字段, * 懒解析避免了每请求都遍历所有 headers 和构造 URL 对象的开销。 * 首次访问时解析并缓存,后续访问直接返回缓存值。 * * @param c Hono Context 对象 * @param app VextApp 实例 * @returns VextRequest 实例 */ export declare function createVextRequest(c: Context, app: VextApp): VextRequest;