Skip to content

Migrator.ts

Runs SQL migrations with SqlClient.

A migrator loads numbered migration effects, records completed ids in a migrations table, and runs only pending migrations in a transaction. It creates the table when needed, detects duplicate ids, treats concurrent runs as locked, and can dump the schema after successful migrations.

Since v4.0.0



Creates a migrator that ensures the migrations table exists, runs pending migrations in a transaction, and optionally dumps the schema after successful migrations.

Signature

declare const make: <RD = never>({
dumpSchema
}: {
dumpSchema?: (path: string, migrationsTable: string) => Effect.Effect<void, MigrationError, RD>
}) => <R2 = never>({
loader,
schemaDirectory,
table
}: MigratorOptions<R2>) => Effect.Effect<
ReadonlyArray<readonly [id: number, name: string]>,
MigrationError | SqlError,
Client.SqlClient | RD | R2
>

Source

Since v4.0.0

Error raised while loading, validating, locking, or running SQL migrations.

Signature

declare class MigrationError

Source

Since v4.0.0

Creates a migration loader from a Babel-style glob record, parsing keys such as _<id>_<name>Js, _<id>_<name>Ts, _<id>_<name>Mjs, or _<id>_<name>Mts and sorting migrations by id.

Signature

declare const fromBabelGlob: (migrations: Record<string, any>) => Loader

Source

Since v4.0.0

Creates a migration loader that reads a directory with FileSystem, imports files named <id>_<name>.js, <id>_<name>.ts, <id>_<name>.mjs, or <id>_<name>.mts, and sorts migrations by id.

Signature

declare const fromFileSystem: (directory: string) => Loader<FileSystem>

Source

Since v4.0.0

Creates a migration loader from a glob record of dynamic import functions, parsing files named <id>_<name>.js, <id>_<name>.ts, <id>_<name>.mjs, or <id>_<name>.mts and sorting migrations by id.

Signature

declare const fromGlob: (migrations: Record<string, () => Promise<any>>) => Loader

Source

Since v4.0.0

Creates a migration loader from a record of migration effects keyed by <id>_<name>, sorted by migration id.

Signature

declare const fromRecord: (migrations: Record<string, Effect.Effect<void, unknown, Client.SqlClient>>) => Loader

Source

Since v4.0.0

Effect that resolves the available migrations for the migrator or fails with a MigrationError.

Signature

type Loader<R> = Effect.Effect<ReadonlyArray<ResolvedMigration>, MigrationError, R>

Source

Since v4.0.0

Metadata for a migration recorded in the migrations table, including its id, name, and creation timestamp.

Signature

export interface Migration {
readonly id: number
readonly name: string
readonly createdAt: Date
}

Source

Since v4.0.0

Tuple produced by a migration loader, containing the migration id, migration name, and an effect that loads the migration implementation.

Signature

type ResolvedMigration = readonly [id: number, name: string, load: Effect.Effect<any, any, Client.SqlClient>]

Source

Since v4.0.0

Options for running SQL migrations, including the migration loader, optional schema dump directory, and migrations table name.

Signature

export interface MigratorOptions<R = never> {
readonly loader: Loader<R>
readonly schemaDirectory?: string
readonly table?: string
}

Source

Since v4.0.0