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<void>;
    /**
     * 获取全局中间件列表
     *
     * 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<void>;
    /**
     * 获取用户自定义速率限制器（如果通过 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 封装 → pino 封装（createLogger），支持 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;
