import type { VextAdapter } from "../../types/adapter.js"; import type { VextApp } from "../../types/app.js"; /** * Fastify Adapter 选项 * * 用户通过 fastifyAdapter(options) 工厂函数传入, * 控制 Fastify 实例的初始化行为。 * * 所有选项均可选,默认值已为 vext 场景优化: * - logger: false(vext 有自己的 logger) * - pluginTimeout: 10000ms * - bodyLimit: 1MB * - ignoreTrailingSlash: true * - caseSensitive: false */ export interface FastifyAdapterOptions { /** Fastify 内置日志(默认 false,vext 有自己的 logger) */ logger?: boolean; /** * Fastify 插件超时(毫秒,默认 10000) * Fastify 内部 register 的超时,与 vext plugin-loader 超时独立 */ pluginTimeout?: number; /** * 请求体大小限制(字节,默认 1MB) * 对应 Fastify 的 bodyLimit */ bodyLimit?: number; /** * 忽略尾部斜杠(默认 true) * /users 和 /users/ 视为相同路由 */ ignoreTrailingSlash?: boolean; /** * 大小写敏感(默认 false) * /Users 和 /users 视为相同路由 */ caseSensitive?: boolean; } /** * createFastifyAdapter — 创建基于 Fastify 的 VextAdapter 实例 * * 将 Fastify 作为底层 HTTP 框架,实现 VextAdapter 接口。 * 这是 VextAdapter 的第二个实现(第一个是 Hono Adapter), * 用于验证 Adapter 抽象层的完备性。 * * 架构说明: * - Fastify 用于路由匹配(find-my-way radix tree),不使用 Fastify 自带的中间件/Hook 机制 * - 中间件链执行由 vext 自己的 executeChain 实现(洋葱模型) * - 请求 / 响应对象在 Fastify route handler 内转换为 VextRequest / VextResponse * - 全局中间件通过 registerMiddleware() 收集,在每个路由执行时拼接到链头 * * 与 Hono Adapter 的核心差异: * - 请求/响应模型:Fastify 直接操作 Node.js 原生对象(IncomingMessage/ServerResponse), * 而 Hono 操作 Web API(Request/Response) * - Body 解析:Fastify 默认自动解析 JSON,需要通过 removeAllContentTypeParsers * 禁用以避免与 vext body-parser 冲突 * - JSON 序列化:使用 reply.send(JSON.stringify(...)) 手动序列化, * 绕过 Fastify 的 fast-json-stringify 自动序列化,保证跨 Adapter 行为一致 * - buildHandler:Fastify 提供 fastify.routing(req, res), * 是标准的 Node.js (IncomingMessage, ServerResponse) handler * * HTTP 服务器: * - Fastify 内置 Node.js http.createServer * - listen() 调用 fastify.listen() 启动服务器 * - close() 调用 fastify.close() 优雅关闭 * - buildHandler() 返回 fastify.routing 作为 Node.js handler, * 用于 dev 模式热重载的 HotSwappableHandler 原子替换 * * @param options Fastify 适配器配置选项 * @param app VextApp 实例(用于传递给 createVextRequest 的 app 引用) * @returns VextAdapter 实例 * * @see 08a-fastify-adapter.md §3(Adapter 核心实现) * @see adapters/hono/adapter.ts(Hono Adapter 对应实现) * @see IMPLEMENTATION-PLAN.md 任务 3.4 */ export declare function createFastifyAdapter(options: FastifyAdapterOptions, app: VextApp): VextAdapter;