import { Database } from '../Database';
import { Adapter } from '../Adapter';
import ColumnType from '../ColumnType';
import { MigrationDefinition, ChangeMigrationShorthand, TaggedMigrationDefinition } from './Definition';
import { Operation } from './Operations';
interface ColumnTypes {
    [columnName: string]: ColumnType;
}
declare const CONTAINS_IRREVERSIBLE: unique symbol;
export declare class MigrationBuilder<DBAdapter extends Adapter = any, ContainsIrreversibleOperation extends boolean = false> {
    [CONTAINS_IRREVERSIBLE]: ContainsIrreversibleOperation;
    operations: Operation[];
    direction: 'up' | 'down';
    isChangeMigration: boolean;
    constructor(direction: 'up' | 'down', isChangeMigration: boolean);
    private readonly flipped;
    private addOperation;
    createTable(name: string, options: DBAdapter['TableTypes'], columns: ColumnTypes): MigrationBuilder<DBAdapter, ContainsIrreversibleOperation>;
    dropTable(name: string): MigrationBuilder<DBAdapter, true>;
    dropTable(name: string, options?: DBAdapter['TableTypes'], columns?: ColumnTypes): MigrationBuilder<DBAdapter, ContainsIrreversibleOperation>;
}
export declare class Migration<DBAdapter extends Adapter = any> {
    private definition;
    readonly version: number;
    readonly type: 'change' | 'updown' | 'irreversible';
    readonly database: Database;
    operations: Operation[];
    constructor(version: number, database: Database, definition: TaggedMigrationDefinition<DBAdapter>);
    /**
     * Prepares the migration to be run. Populates the operations.
     */
    prepare(direction: 'up' | 'down'): void;
    /**
     * Runs the migration against the underlying adapter.
     */
    run(direction: 'up' | 'down'): Promise<void>;
}
export { MigrationDefinition };
export declare function createMigration<DBAdapter extends Adapter>(version: number, db: Database<DBAdapter>, definition: MigrationDefinition<DBAdapter> | ChangeMigrationShorthand<DBAdapter>): Migration<DBAdapter>;
