import type { VextAdapter } from "../../types/adapter.js"; import type { VextApp } from "../../types/app.js"; /** * Koa Adapter 选项 * * 用户通过 koaAdapter(options) 工厂函数传入, * 控制 Koa 实例的初始化行为。 * * 所有选项均可选,默认值已为 vext 场景优化。 */ export interface KoaAdapterOptions { /** * 请求体大小限制(字符串格式,如 '1mb') * 仅在预收集 rawBody 时用作参考上限。 * 实际的 body 大小限制由 vext body-parser 中间件控制。 * * @default '1mb' */ bodyLimit?: string; } /** * createKoaAdapter — 创建基于 Koa 的 VextAdapter 实例 * * 将 Koa 作为底层 HTTP 框架,实现 VextAdapter 接口。 * 这是 VextAdapter 的第四个实现(Hono → Fastify → Express → Koa), * 用于验证 Adapter 抽象层的完备性和通用性。 * * 架构说明: * - Koa 不内置路由功能,adapter 使用 @koa/router 承载宿主生态路由 * - 不使用 Koa 自带的中间件机制(ctx.body / ctx.status 赋值模式) * - 中间件链执行由 vext 自己的 executeChain 实现(洋葱模型) * - 请求 / 响应对象在 Koa middleware 内转换为 VextRequest / VextResponse * - 全局中间件通过 registerMiddleware() 收集,在每个路由执行时拼接到链头 * - 所有响应通过 ctx.res(Node.js 原生 ServerResponse)直接操作, * 绕过 Koa 的 ctx.body / ctx.status 赋值模式 * * 与其他 Adapter 的核心差异: * - Koa 不内置路由(Express 有 app.get/post/...,Fastify 有 fastify.get/post/...), * 通过 @koa/router 提供 Koa 生态路由能力 * - Koa 的响应模型是赋值式(ctx.body = ..., ctx.status = ...), * 而非 Express/Fastify 的命令式(res.send/reply.send)。 * 为保持跨 Adapter 一致性,vext 使用 ctx.res(Node.js 原生 ServerResponse) * 的 .statusCode / .setHeader / .end() API 直接操作 * - Body 解析:不注册任何 Koa body-parser,通过手动收集 ctx.req stream 为 Buffer, * 传给 createVextRequest 的 rawBody 参数,由 vext body-parser 中间件统一处理 * - buildHandler:Koa app.callback() 返回 (req, res) => void 函数, * 可直接作为 Node.js requestListener * * HTTP 服务器: * - Koa 不内置 HTTP server 创建(与 Fastify 不同), * adapter 使用 Node.js 原生 http.createServer(app.callback()) * - listen() 创建 http.createServer 并调用 server.listen() * - close() 调用 server.close() * - buildHandler() 返回 Koa app.callback() 作为 Node.js handler, * 用于 dev 模式热重载的 HotSwappableHandler 原子替换 * * @param options Koa 适配器配置选项 * @param vextApp VextApp 实例(用于传递给 createVextRequest 的 app 引用) * @returns VextAdapter 实例 * * @see adapters/hono/adapter.ts(Hono Adapter 对应实现) * @see adapters/fastify/adapter.ts(Fastify Adapter 对应实现) * @see adapters/express/adapter.ts(Express Adapter 对应实现) */ export declare function createKoaAdapter(options: KoaAdapterOptions, vextApp: VextApp): VextAdapter;