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;
