import { Environment } from '../environment'; import { IPGUserMigrationInput } from '../database/type'; /** 数据库迁移部署配置(对应 cloudbaserc.json 中的 database 块) */ export interface IDatabaseDeployConfig { /** 数据库类型(v2.1 schema: 目前仅支持 postgresql) */ type: 'postgresql'; /** migration SQL 文件目录(相对项目根) */ migrations?: string; } /** Plan 中单条 migration 的状态 */ export interface IDatabasePlanItem { /** 14位数字时间串 */ version: string; /** migration 名称 */ name: string; /** pending=待执行;applied=已应用;conflict=冲突 */ status: 'pending' | 'applied' | 'conflict'; /** 冲突原因(仅 conflict 时有值) */ reason?: string; } /** deploy 返回结果 */ export interface IDatabaseDeployResult { /** 异步任务 ID(无pending时为空字符串) */ taskId: string; } export declare class DatabaseDeployer { private environment; constructor(environment: Environment); /** * 从本地目录解析 migration 文件列表 * * 文件名格式:{14位时间戳}_{小写下划线名称}.sql * 例如:20260526000000_create_users.sql * * 按文件名升序排列(即按版本号从早到晚) */ parseMigrationFiles(migrationsDir: string): IPGUserMigrationInput[]; /** * 生成部署计划 * * 调用 previewPGUserMigrations 获取云端对比结果, * 返回每条migration 的状态(pending / applied / conflict) */ plan(config: IDatabaseDeployConfig, cwd: string, envId: string): Promise; /** * 执行数据库迁移 * * 流程: * 1. 解析本地 migration 文件 * 2. 预览确认无冲突(有冲突直接 throw,中断整个部署) * 3. 无 pending 则跳过 * 4. 提交 pushPGUserMigrations * 5. 轮询describeTaskResult 等待完成 */ deploy(config: IDatabaseDeployConfig, cwd: string, envId: string): Promise; /** * 解析 migrations 目录路径 * - 未配置:默认 ./cloudbase/migrations * - 仅允许相对路径(禁止 / 开头) */ private resolveMigrationsDir; /** * 校验 database.type(当前仅支持 postgresql) */ private assertDatabaseType; /** * 轮询等待异步任务完成 */ private waitForTask; }