import type { QueryResult } from 'pg';
import type { DBConnection } from './db';
import MigrationBuilder from './migrationBuilder';
import type { ColumnDefinitions } from './operations/tables';
import type { Logger, MigrationAction, MigrationBuilderActions, MigrationDirection, RunnerOption } from './types';
export interface RunMigration {
    readonly path: string;
    readonly name: string;
    readonly timestamp: number;
}
export declare enum FilenameFormat {
    timestamp = "timestamp",
    utc = "utc"
}
export interface CreateOptionsTemplate {
    templateFileName: string;
}
export interface CreateOptionsDefault {
    language?: 'js' | 'ts' | 'sql';
    ignorePattern?: string;
}
export type CreateOptions = {
    filenameFormat?: FilenameFormat | `${FilenameFormat}`;
} & (CreateOptionsTemplate | CreateOptionsDefault);
interface LoadMigrationFilesOptions {
    /**
     * Regex pattern for file names to ignore (ignores files starting with `.` by default).
     * Alternatively, provide a [glob](https://www.npmjs.com/package/glob) pattern or
     * an array of glob patterns and set `isGlob = true`
     *
     * Note: enabling glob will read both, `dir` _and_ `ignorePattern` as glob patterns
     */
    ignorePattern?: string | string[];
    /**
     * Use [glob](https://www.npmjs.com/package/glob) to find migration files.
     * This will use `dir` _and_ `options.ignorePattern` to glob-search for migration files.
     *
     * @default: false
     */
    useGlob?: boolean;
    /**
     * Redirect messages to this logger object, rather than `console`.
     */
    logger?: Logger;
}
/**
 * Reads files from `dir`, sorts them and returns an array of their absolute paths.
 * When not using globs, files are sorted by their numeric prefix values first. 17 digit numbers are interpreted as utc date and converted to the number representation of that date.
 * Glob matches are sorted via String.localeCompare with ignored punctuation.
 *
 * @param dir The directory containing your migration files. This path is resolved from `cwd()`.
 * Alternatively, provide a [glob](https://www.npmjs.com/package/glob) pattern or
 * an array of glob patterns and set `options.useGlob = true`
 *
 * Note: enabling glob will read both, `dir` _and_ `options.ignorePattern` as glob patterns
 * @param options
 * @returns Array of absolute paths
 */
export declare function getMigrationFilePaths(
/**
 * The directory containing your migration files. This path is resolved from `cwd()`.
 * Alternatively, provide a [glob](https://www.npmjs.com/package/glob) pattern or
 * an array of glob patterns and set `options.useGlob = true`
 *
 * Note: enabling glob will read both, `dir` _and_ `options.ignorePattern` as glob patterns
 */
dir: string | string[], options?: LoadMigrationFilesOptions): Promise<string[]>;
/**
 * extracts numeric value from everything in `filename` before `SEPARATOR`.
 * 17 digit numbers are interpreted as utc date and converted to the number representation of that date.
 * @param filename filename to extract the prefix from
 * @param logger Redirect messages to this logger object, rather than `console`.
 * @returns numeric value of the filename prefix (everything before `SEPARATOR`).
 */
export declare function getNumericPrefix(filename: string, logger?: Logger): number;
export declare class Migration implements RunMigration {
    static create(name: string, directory: string, options?: CreateOptions): Promise<string>;
    readonly db: DBConnection;
    readonly path: string;
    readonly name: string;
    readonly timestamp: number;
    up?: false | MigrationAction;
    down?: false | MigrationAction;
    readonly options: RunnerOption;
    readonly typeShorthands?: ColumnDefinitions;
    readonly logger: Logger;
    constructor(db: DBConnection, migrationPath: string, { up, down }: MigrationBuilderActions, options: RunnerOption, typeShorthands?: ColumnDefinitions, logger?: Logger);
    _getMarkAsRun(action: MigrationAction): string;
    _apply(action: MigrationAction, pgm: MigrationBuilder): Promise<unknown>;
    _getAction(direction: MigrationDirection): MigrationAction;
    apply(direction: MigrationDirection): Promise<unknown>;
    markAsRun(direction: MigrationDirection): Promise<QueryResult>;
}
export {};
