Merge commit '36c66dd290d3ce6eb1ccd310d0c658d4a32bb8eb' as 'repos/effect'
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @since 4.0.0
|
||||
*/
|
||||
import type * as Effect from "effect/Effect"
|
||||
import * as Layer from "effect/Layer"
|
||||
import * as Migrator from "effect/unstable/sql/Migrator"
|
||||
import type * as Client from "effect/unstable/sql/SqlClient"
|
||||
import type { SqlError } from "effect/unstable/sql/SqlError"
|
||||
|
||||
/**
|
||||
* @since 4.0.0
|
||||
*/
|
||||
export * from "effect/unstable/sql/Migrator"
|
||||
|
||||
/**
|
||||
* Runs SQL migrations for a React Native SQLite database using the shared `Migrator` implementation and the current `SqlClient`.
|
||||
*
|
||||
* @category constructors
|
||||
* @since 4.0.0
|
||||
*/
|
||||
export const run: <R>(
|
||||
options: Migrator.MigratorOptions<R>
|
||||
) => Effect.Effect<
|
||||
ReadonlyArray<readonly [id: number, name: string]>,
|
||||
SqlError | Migrator.MigrationError,
|
||||
Client.SqlClient | R
|
||||
> = Migrator.make({})
|
||||
|
||||
/**
|
||||
* Creates a layer that runs the configured React Native SQLite migrations during layer construction and provides no services.
|
||||
*
|
||||
* @category constructors
|
||||
* @since 4.0.0
|
||||
*/
|
||||
export const layer = <R>(
|
||||
options: Migrator.MigratorOptions<R>
|
||||
): Layer.Layer<never, SqlError | Migrator.MigrationError, R | Client.SqlClient> => Layer.effectDiscard(run(options))
|
||||
Reference in New Issue
Block a user