SqliteMigrator
Utilities for applying Effect SQL migrations to React Native SQLite databases.
This module re-exports the shared Migrator loaders and error types, then
provides run and layer helpers that execute ordered migrations through the
current React Native SQLite SqlClient. Use it when a mobile app needs to
bring its on-device database schema up to date during startup, before opening
repositories or sync services, or in integration tests that create app-local
database files.
React Native SQLite databases are scoped by the client configuration, so the
migrator should be run with the same filename, location, and encryption
key as the rest of the application. Migrations run through the package's
single serialized connection; by default statements use the synchronous
driver API and can block the JS thread, so long migration sets may want to run
under SqliteClient.withAsyncQuery. Mobile upgrades can be interrupted by app
suspension or process death, so keep migrations transaction-aware and avoid
assuming a fresh database on every launch.
Constructors
make
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>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>) => LoaderfromFileSystem
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.
Details
Requires a Path service appropriate for the migration directory's path
syntax. On Windows, prefer a platform-aware implementation such as
NodePath.layer; the core Path.layer uses POSIX semantics and does not
preserve Windows drive-letter paths.
Signature
declare const fromFileSystem: (directory: string) => Loader<FileSystem | Path>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>>) => LoaderfromRecord
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>>) => LoaderModels
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 for a React Native SQLite database using the shared Migrator implementation and the current SqlClient.
Signature
declare const run: <R>(options: Migrator.MigratorOptions<R>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, SqlError | Migrator.MigrationError, Client.SqlClient | R>