umzug
Version:
Framework-agnostic migration tool for Node
106 lines (105 loc) • 4.45 kB
TypeScript
import emittery from 'emittery';
import * as errorCause from 'pony-cause';
import type { CommandLineParserOptions } from './cli';
import { UmzugCLI } from './cli';
import type { MigrateDownOptions, MigrateUpOptions, MigrationMeta, MigrationParams, Resolver, RunnableMigration, UmzugEvents, UmzugOptions } from './types';
type MigrationErrorParams = {
direction: 'up' | 'down';
} & MigrationParams<unknown>;
export declare class MigrationError extends errorCause.ErrorWithCause<unknown> {
name: string;
migration: MigrationErrorParams;
jse_cause: unknown;
constructor(migration: MigrationErrorParams, original: unknown);
get info(): MigrationErrorParams;
private static errorString;
}
export declare class Umzug<Ctx extends object = object> extends emittery<UmzugEvents<Ctx>> {
readonly options: UmzugOptions<Ctx>;
private readonly storage;
readonly migrations: (ctx: Ctx) => Promise<ReadonlyArray<RunnableMigration<Ctx>>>;
/**
* Compile-time only property for type inference. After creating an Umzug instance, it can be used as type alias for
* a user-defined migration. The function receives a migration name, path and the context for an umzug instance
* @example
* ```
* // migrator.ts
* import { Umzug } from 'umzug'
*
* const umzug = new Umzug({...})
* export type Migration = typeof umzug._types.migration;
*
* umzug.up();
* ```
* ___
*
* ```
* // migration-1.ts
* import type { Migration } from '../migrator'
*
* // name and context will now be strongly-typed
* export const up: Migration = ({name, context}) => context.query(...)
* export const down: Migration = ({name, context}) => context.query(...)
* ```
*/
readonly _types: {
migration: (params: MigrationParams<Ctx>) => Promise<unknown>;
context: Ctx;
};
/** creates a new Umzug instance */
constructor(options: UmzugOptions<Ctx>);
private logging;
static defaultResolver: Resolver<unknown>;
/**
* Get an UmzugCLI instance. This can be overriden in a subclass to add/remove commands - only use if you really know you need this,
* and are OK to learn about/interact with the API of @rushstack/ts-command-line.
*/
protected getCli(options?: CommandLineParserOptions): UmzugCLI;
/**
* 'Run' an umzug instance as a CLI. This will read `process.argv`, execute commands based on that, and call
* `process.exit` after running. If that isn't what you want, stick to the programmatic API.
* You probably want to run only if a file is executed as the process's 'main' module with something like:
* @example
* if (require.main === module) {
* myUmzugInstance.runAsCLI()
* }
*/
runAsCLI(argv?: string[]): Promise<boolean>;
/** Get the list of migrations which have already been applied */
executed(): Promise<MigrationMeta[]>;
/** Get the list of migrations which have already been applied */
private _executed;
/** Get the list of migrations which are yet to be applied */
pending(): Promise<MigrationMeta[]>;
private _pending;
protected runCommand<T>(command: string, cb: (commandParams: {
context: Ctx;
}) => Promise<T>): Promise<T>;
/**
* Apply migrations. By default, runs all pending migrations.
* @see MigrateUpOptions for other use cases using `to`, `migrations` and `rerun`.
*/
up(options?: MigrateUpOptions): Promise<MigrationMeta[]>;
/**
* Revert migrations. By default, the last executed migration is reverted.
* @see MigrateDownOptions for other use cases using `to`, `migrations` and `rerun`.
*/
down(options?: MigrateDownOptions): Promise<MigrationMeta[]>;
create(options: {
name: string;
folder?: string;
prefix?: 'TIMESTAMP' | 'DATE' | 'NONE';
allowExtension?: string;
allowConfusingOrdering?: boolean;
skipVerify?: boolean;
/** Optionally define the content for the new file. If not set, the configured template will be used. */
content?: string;
}): Promise<void>;
private static defaultCreationTemplate;
private findNameIndex;
private findMigrations;
private getContext;
/** helper for parsing input migrations into a callback returning a list of ready-to-run migrations */
private getMigrationsResolver;
}
export {};