Migrator
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.
Constructors
Signature
declare function make<RD = never>(__namedParameters: { dumpSchema?: (path: string, migrationsTable: string) => Effect<void, MigrationError, RD>;}): <R2 = never>(__namedParameters: MigratorOptions<R2>) => Effect<readonly Array<readonly [number, string]>, SqlError | MigrationError, SqlClient | RD | R2>Errors
MigrationError
Error raised while loading, validating, locking, or running SQL migrations.
Signature
declare class MigrationError extends YieldableError<this> & { readonly _tag: "MigrationError";} & Readonly<{ readonly _tag: "MigrationError"; readonly cause?: unknown; readonly kind: "Failed" | "Locked" | "BadState" | "ImportError" | "Duplicates"; readonly message: string;}> { constructor(args: { readonly cause?: unknown; readonly kind: "Failed" | "Locked" | "BadState" | "ImportError" | "Duplicates"; readonly message: string; });}Loaders
fromBabelGlob
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 function fromBabelGlob(migrations: Record<string, any>): Loader;fromFileSystem
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>;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 function fromGlob(migrations: Record<string, () => Promise<any>>): Loader;fromRecord
Creates a migration loader from a record of migration effects keyed by <id>_<name>, sorted by migration id.
Signature
declare function fromRecord( migrations: Record<string, Effect.Effect<void, unknown, Client.SqlClient>>,): Loader;Models
Effect that resolves the available migrations for the migrator or fails with a MigrationError.
Signature
type Loader<R = never> = Effect.Effect<ReadonlyArray<ResolvedMigration>, MigrationError, R>;Metadata for a migration recorded in the migrations table, including its id, name, and creation timestamp.
Signature
interface Migration { readonly createdAt: Date; readonly id: number; readonly name: string;}ResolvedMigration type
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>,];Options
MigratorOptions interface
Options for running SQL migrations, including the migration loader, optional schema dump directory, and migrations table name.
Signature
interface MigratorOptions<R = never> { readonly loader: Loader<R>; readonly schemaDirectory?: string; readonly table?: string;}
Creates a migrator that ensures the migrations table exists, runs pending migrations in a transaction, and optionally dumps the schema after successful migrations.