import type { VextApp, VextConfig, VextRateLimiter } from "../types/app.js"; import type { VextMiddleware } from "../types/middleware.js"; import type { VextServerHandle } from "../types/adapter.js"; /** * 框架内部方法接口(不暴露给用户,仅 bootstrap 使用) * * 通过 createApp() 返回的 { app, internals } 中的 internals 访问。 * 这些方法控制框架生命周期的关键节点,用户代码不应直接调用。 */ export interface AppInternals { /** * 锁定 app.use() * * 在步骤⑤ router-loader 完成后由 bootstrap 显式调用。 * 锁定后再调用 app.use() 将抛出错误, * 确保路由注册后不会有新的全局中间件插入导致行为不一致。 */ lockUse(): void; /** * 执行所有 onReady 钩子 * * 在步骤⑧ HTTP 监听后由 bootstrap 调用。 * 执行完毕后清空 hooks 数组,释放闭包引用。 */ runReady(): Promise; /** * 获取全局中间件列表 * * router-loader 组装路由链时使用, * 将全局中间件拼接在路由级中间件之前。 */ getGlobalMiddlewares(): VextMiddleware[]; /** * 优雅关闭 * * 流程: * 1. 停止接受新请求(serverHandle.close()) * 2. 等待飞行中请求完成(config.shutdown.timeout 超时保护) * 3. 按 LIFO 顺序执行所有 onClose 钩子 * 4. process.exit(0)(测试模式 或 skipExit 时跳过) * * @param serverHandle VextServerHandle(可选,由 bootstrap 传入) * @param options.skipExit 为 true 时跳过 process.exit(),仅执行资源清理。 * 用于 bootstrap catch 块中:启动失败时需要清理资源, * 但不应 process.exit(0)(否则会吞掉启动错误 + 返回错误的退出码)。 */ shutdown(serverHandle?: VextServerHandle, options?: { skipExit?: boolean; }): Promise; /** * 获取用户自定义速率限制器(如果通过 app.setRateLimiter() 设置) * * bootstrap 将此 getter 传递给 createRateLimitMiddleware 工厂, * 使中间件在运行时动态读取最新的 limiter 实例。 */ getRateLimiter(): VextRateLimiter | null; /** * 获取用户自定义 requestId 生成器(如果通过 app.setRequestIdGenerator() 设置) * * bootstrap 将此 getter 传递给 createRequestIdMiddleware 工厂, * 使中间件在运行时动态读取最新的生成器。 */ getRequestIdGenerator(): (() => string) | null; } /** * createApp — 框架应用工厂函数 * * 创建 VextApp 实例和框架内部方法集合。 * 是整个 vext 框架的核心入口点。 * * 返回 { app, internals }: * - app: 用户可见的应用实例(VextApp 接口) * - internals: 框架内部方法(仅 bootstrap 使用) * * 初始化流程: * 1. 创建 app 对象,挂载 logger / throw / config / services 等内置模块 * 2. 通过 resolveAdapter 解析 config.adapter 创建底层适配器实例 * 3. 返回 { app, internals } * * 后续由 bootstrap 编排完整的启动流程(plugin → middleware → service → route → listen)。 * * Phase 1 升级说明(相对 Phase 0): * - logger: Phase 0 的 console 封装 → 内置结构化 logger,支持 pretty/JSON 双模式 + requestId 自动注入 * - throw: Phase 0 的内联简化实现 → createDefaultThrow(),通过 schema-adapter 防腐层联动 I18nError * - validator: Phase 0 的 pass-through → schema-adapter 封装的 compile + validate * * @param config 框架运行时配置(已经过 config-loader 三层合并 + deepFreeze) * @returns { app, internals } */ export declare function createApp(config: VextConfig): { app: VextApp; internals: AppInternals; }; /** * 默认配置值 * * 由 config-loader 在三层合并时使用。 * 也可用于 createApp 的快速启动(跳过 config-loader 直接传入默认配置)。 */ export declare const DEFAULT_CONFIG: VextConfig;