import type { Database } from "./Database";
type DbMigrationId = string;
interface ApplyMigrationsOptions<TDatabase extends Database> {
    database: TDatabase;
    migrations: Migration<TDatabase>[];
    targetId?: DbMigrationId;
    getExecutedMigrationIds?: ((database: TDatabase) => Promise<DbMigrationId[]>) | null;
    insertMigrationId?: ((database: TDatabase, id: DbMigrationId) => Promise<void>) | null;
    writeLog?: (message: string) => void;
}
interface Migration<TDatabase> {
    id: DbMigrationId;
    apply: (database: TDatabase) => Promise<void>;
}
declare function applyMigrations<TDatabase extends Database>({ database, migrations, targetId, getExecutedMigrationIds, insertMigrationId, writeLog, }: ApplyMigrationsOptions<TDatabase>): Promise<void>;
export type { ApplyMigrationsOptions };
export { applyMigrations };
