MysqlMigrator
MySQL adapter for the shared Effect SQL migration runner.
This module re-exports the shared Migrator loaders and error types, then provides run and layer helpers that apply ordered migrations through the current mysql2-backed SqlClient. run returns the applied migration IDs and names, while layer runs migrations during layer construction and provides no services.
Constructors
make
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
>;Errors
MigrationError
Error raised while loading, validating, locking, or running SQL migrations.
Signature
declare class MigrationError extends MigrationError_base<{
readonly _tag: "MigrationError";
readonly cause?: unknown;
readonly kind: "BadState" | "ImportError" | "Failed" | "Duplicates" | "Locked";
readonly message: string;
}> {
constructor(args: {
readonly cause?: unknown;
readonly kind: "BadState" | "ImportError" | "Failed" | "Duplicates" | "Locked";
readonly message: string;
});
}Layers
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 const 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>;fromGlob
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;fromRecord
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;Models
Loader type
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>;Migration interface
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;
}Running
Runs SQL migrations using the configured SqlClient, returning the migrations that were applied.
Signature
declare const run: <R2 = never>({
loader,
schemaDirectory,
table,
}: Migrator.MigratorOptions<R2>) => Effect.Effect<
ReadonlyArray<readonly [id: number, name: string]>,
Migrator.MigrationError | SqlError,
Client.SqlClient | R2
>;
Creates a migrator that ensures the migrations table exists, runs pending migrations in a transaction, and optionally dumps the schema after successful migrations.