@effect/sql-sqlite-react-native 4.0.0-beta.7 → 4.0.0-beta.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,29 @@
1
1
  import * as Config from "effect/Config";
2
+ import * as Context from "effect/Context";
2
3
  import * as Effect from "effect/Effect";
3
4
  import * as Layer from "effect/Layer";
4
5
  import * as Scope from "effect/Scope";
5
- import * as ServiceMap from "effect/ServiceMap";
6
6
  import * as Reactivity from "effect/unstable/reactivity/Reactivity";
7
7
  import * as Client from "effect/unstable/sql/SqlClient";
8
8
  /**
9
- * @category type ids
10
- * @since 1.0.0
9
+ * Runtime identifier attached to SQLite React Native client values.
10
+ *
11
+ * @category type IDs
12
+ * @since 4.0.0
11
13
  */
12
14
  export declare const TypeId: TypeId;
13
15
  /**
14
- * @category type ids
15
- * @since 1.0.0
16
+ * Type-level identifier for SQLite React Native client values.
17
+ *
18
+ * @category type IDs
19
+ * @since 4.0.0
16
20
  */
17
21
  export type TypeId = "~@effect/sql-sqlite-react-native/SqliteClient";
18
22
  /**
23
+ * React Native SQLite client service interface, extending `SqlClient` with its configuration and marking `updateValues` as unsupported for SQLite.
24
+ *
19
25
  * @category models
20
- * @since 1.0.0
26
+ * @since 4.0.0
21
27
  */
22
28
  export interface SqliteClient extends Client.SqlClient {
23
29
  readonly [TypeId]: TypeId;
@@ -26,13 +32,17 @@ export interface SqliteClient extends Client.SqlClient {
26
32
  readonly updateValues: never;
27
33
  }
28
34
  /**
35
+ * Context service tag for the React Native SQLite client.
36
+ *
29
37
  * @category tags
30
- * @since 1.0.0
38
+ * @since 4.0.0
31
39
  */
32
- export declare const SqliteClient: ServiceMap.Service<SqliteClient, SqliteClient>;
40
+ export declare const SqliteClient: Context.Service<SqliteClient, SqliteClient>;
33
41
  /**
42
+ * Configuration for a React Native SQLite client, including the database filename, optional location and encryption key, span attributes, and query/result name transforms.
43
+ *
34
44
  * @category models
35
- * @since 1.0.0
45
+ * @since 4.0.0
36
46
  */
37
47
  export interface SqliteClientConfig {
38
48
  readonly filename: string;
@@ -43,28 +53,38 @@ export interface SqliteClientConfig {
43
53
  readonly transformQueryNames?: ((str: string) => string) | undefined;
44
54
  }
45
55
  /**
56
+ * Fiber-local flag that makes the React Native SQLite client run queries through the asynchronous `execute` API instead of `executeSync`.
57
+ *
46
58
  * @category fiber refs
47
- * @since 1.0.0
59
+ * @since 4.0.0
48
60
  */
49
- export declare const AsyncQuery: ServiceMap.Reference<boolean>;
61
+ export declare const AsyncQuery: Context.Reference<boolean>;
50
62
  /**
63
+ * Runs an effect with `AsyncQuery` enabled, causing React Native SQLite queries in that effect to use the asynchronous driver API.
64
+ *
51
65
  * @category fiber refs
52
- * @since 1.0.0
66
+ * @since 4.0.0
53
67
  */
54
68
  export declare const withAsyncQuery: <R, E, A>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, never>>;
55
69
  /**
56
- * @category constructor
57
- * @since 1.0.0
70
+ * Creates a scoped React Native SQLite client from the supplied configuration, using a single serialized connection and honoring `AsyncQuery` for query execution.
71
+ *
72
+ * @category constructors
73
+ * @since 4.0.0
58
74
  */
59
75
  export declare const make: (options: SqliteClientConfig) => Effect.Effect<SqliteClient, never, Scope.Scope | Reactivity.Reactivity>;
60
76
  /**
77
+ * Builds a layer from an Effect `Config` value, providing both the React Native `SqliteClient` service and the generic `SqlClient` service.
78
+ *
61
79
  * @category layers
62
- * @since 1.0.0
80
+ * @since 4.0.0
63
81
  */
64
82
  export declare const layerConfig: (config: Config.Wrap<SqliteClientConfig>) => Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError>;
65
83
  /**
84
+ * Builds a layer from a React Native SQLite client configuration, providing both `SqliteClient` and the generic `SqlClient` service.
85
+ *
66
86
  * @category layers
67
- * @since 1.0.0
87
+ * @since 4.0.0
68
88
  */
69
89
  export declare const layer: (config: SqliteClientConfig) => Layer.Layer<SqliteClient | Client.SqlClient>;
70
90
  //# sourceMappingURL=SqliteClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAE/C,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAOvD;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAAwD,CAAA;AAE7E;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,+CAA+C,CAAA;AAEpE;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,SAAS;IACpD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IAEnC,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,gDAAmF,CAAA;AAE5G;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAC7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;CACrE;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,+BAGtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2CACrB,CAAA;AAIjD;;;GAGG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,kBAAkB,KAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAkGrE,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KACtC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAUzB,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,kBAAkB,KACzB,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAML,CAAA"}
1
+ {"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAUvD;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,MAAwD,CAAA;AAE7E;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,+CAA+C,CAAA;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,SAAS;IACpD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IAEnC,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,6CAAgF,CAAA;AAEzG;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAC7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;CACrE;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,4BAGtB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,2CACrB,CAAA;AAIjD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,kBAAkB,KAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAmGrE,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KACtC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAUzB,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,kBAAkB,KACzB,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAML,CAAA"}
@@ -1,46 +1,75 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Provides a React Native SQLite `SqlClient` backed by `@op-engineering/op-sqlite`.
3
+ *
4
+ * Use this module to open an on-device SQLite database, expose it as both the
5
+ * React Native-specific `SqliteClient` and the generic Effect `SqlClient`, and
6
+ * run application queries, migrations, and transactional reads or writes from
7
+ * Effect services and layers.
8
+ *
9
+ * The client uses one serialized connection. Regular queries and transactions
10
+ * share that handle, and a transaction holds it for the lifetime of its scope,
11
+ * so keep mobile transactions short and wrap multi-statement writes in a
12
+ * transaction to avoid partial updates. By default statements use the driver's
13
+ * synchronous API, which can block the JavaScript thread; `withAsyncQuery`
14
+ * switches a fiber to the asynchronous driver API when UI responsiveness is more
15
+ * important than sync execution.
16
+ *
17
+ * @since 4.0.0
3
18
  */
4
19
  import * as Sqlite from "@op-engineering/op-sqlite";
5
20
  import * as Config from "effect/Config";
21
+ import * as Context from "effect/Context";
6
22
  import * as Effect from "effect/Effect";
7
23
  import * as Fiber from "effect/Fiber";
8
24
  import { constFalse, identity } from "effect/Function";
9
25
  import * as Layer from "effect/Layer";
10
26
  import * as Scope from "effect/Scope";
11
27
  import * as Semaphore from "effect/Semaphore";
12
- import * as ServiceMap from "effect/ServiceMap";
13
28
  import * as Stream from "effect/Stream";
14
29
  import * as Reactivity from "effect/unstable/reactivity/Reactivity";
15
30
  import * as Client from "effect/unstable/sql/SqlClient";
16
- import { SqlError } from "effect/unstable/sql/SqlError";
31
+ import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError";
17
32
  import * as Statement from "effect/unstable/sql/Statement";
18
33
  const ATTR_DB_SYSTEM_NAME = "db.system.name";
34
+ const classifyError = (cause, message, operation) => classifySqliteError(cause, {
35
+ message,
36
+ operation
37
+ });
19
38
  /**
20
- * @category type ids
21
- * @since 1.0.0
39
+ * Runtime identifier attached to SQLite React Native client values.
40
+ *
41
+ * @category type IDs
42
+ * @since 4.0.0
22
43
  */
23
44
  export const TypeId = "~@effect/sql-sqlite-react-native/SqliteClient";
24
45
  /**
46
+ * Context service tag for the React Native SQLite client.
47
+ *
25
48
  * @category tags
26
- * @since 1.0.0
49
+ * @since 4.0.0
27
50
  */
28
- export const SqliteClient = /*#__PURE__*/ServiceMap.Service("@effect/sql-sqlite-react-native/SqliteClient");
51
+ export const SqliteClient = /*#__PURE__*/Context.Service("@effect/sql-sqlite-react-native/SqliteClient");
29
52
  /**
53
+ * Fiber-local flag that makes the React Native SQLite client run queries through the asynchronous `execute` API instead of `executeSync`.
54
+ *
30
55
  * @category fiber refs
31
- * @since 1.0.0
56
+ * @since 4.0.0
32
57
  */
33
- export const AsyncQuery = /*#__PURE__*/ServiceMap.Reference("@effect/sql-sqlite-react-native/Client/asyncQuery", {
58
+ export const AsyncQuery = /*#__PURE__*/Context.Reference("@effect/sql-sqlite-react-native/Client/asyncQuery", {
34
59
  defaultValue: constFalse
35
60
  });
36
61
  /**
62
+ * Runs an effect with `AsyncQuery` enabled, causing React Native SQLite queries in that effect to use the asynchronous driver API.
63
+ *
37
64
  * @category fiber refs
38
- * @since 1.0.0
65
+ * @since 4.0.0
39
66
  */
40
67
  export const withAsyncQuery = effect => Effect.provideService(effect, AsyncQuery, true);
41
68
  /**
42
- * @category constructor
43
- * @since 1.0.0
69
+ * Creates a scoped React Native SQLite client from the supplied configuration, using a single serialized connection and honoring `AsyncQuery` for query execution.
70
+ *
71
+ * @category constructors
72
+ * @since 4.0.0
44
73
  */
45
74
  export const make = options => Effect.gen(function* () {
46
75
  const clientOptions = {
@@ -62,8 +91,7 @@ export const make = options => Effect.gen(function* () {
62
91
  return Effect.map(Effect.tryPromise({
63
92
  try: () => db.execute(sql, params),
64
93
  catch: cause => new SqlError({
65
- cause,
66
- message: "Failed to execute statement (async)"
94
+ reason: classifyError(cause, "Failed to execute statement (async)", "execute")
67
95
  })
68
96
  }), result => values ? result.rawRows ?? [] : result.rows);
69
97
  }
@@ -73,8 +101,7 @@ export const make = options => Effect.gen(function* () {
73
101
  return values ? result.rawRows ?? [] : result.rows;
74
102
  },
75
103
  catch: cause => new SqlError({
76
- cause,
77
- message: "Failed to execute statement"
104
+ reason: classifyError(cause, "Failed to execute statement", "execute")
78
105
  })
79
106
  });
80
107
  });
@@ -101,7 +128,7 @@ export const make = options => Effect.gen(function* () {
101
128
  const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
102
129
  const transactionAcquirer = Effect.uninterruptibleMask(restore => {
103
130
  const fiber = Fiber.getCurrent();
104
- const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope);
131
+ const scope = Context.getUnsafe(fiber.context, Scope.Scope);
105
132
  return Effect.as(Effect.tap(restore(semaphore.take(1)), () => Scope.addFinalizer(scope, semaphore.release(1))), connection);
106
133
  });
107
134
  return Object.assign(yield* Client.make({
@@ -116,13 +143,17 @@ export const make = options => Effect.gen(function* () {
116
143
  });
117
144
  });
118
145
  /**
146
+ * Builds a layer from an Effect `Config` value, providing both the React Native `SqliteClient` service and the generic `SqlClient` service.
147
+ *
119
148
  * @category layers
120
- * @since 1.0.0
149
+ * @since 4.0.0
121
150
  */
122
- export const layerConfig = config => Layer.effectServices(Config.unwrap(config).asEffect().pipe(Effect.flatMap(make), Effect.map(client => ServiceMap.make(SqliteClient, client).pipe(ServiceMap.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer));
151
+ export const layerConfig = config => Layer.effectContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(SqliteClient, client).pipe(Context.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer));
123
152
  /**
153
+ * Builds a layer from a React Native SQLite client configuration, providing both `SqliteClient` and the generic `SqlClient` service.
154
+ *
124
155
  * @category layers
125
- * @since 1.0.0
156
+ * @since 4.0.0
126
157
  */
127
- export const layer = config => Layer.effectServices(Effect.map(make(config), client => ServiceMap.make(SqliteClient, client).pipe(ServiceMap.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer));
158
+ export const layer = config => Layer.effectContext(Effect.map(make(config), client => Context.make(SqliteClient, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer));
128
159
  //# sourceMappingURL=SqliteClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteClient.js","names":["Sqlite","Config","Effect","Fiber","constFalse","identity","Layer","Scope","Semaphore","ServiceMap","Stream","Reactivity","Client","SqlError","Statement","ATTR_DB_SYSTEM_NAME","TypeId","SqliteClient","Service","AsyncQuery","Reference","defaultValue","withAsyncQuery","effect","provideService","make","options","gen","clientOptions","name","filename","location","encryptionKey","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","db","open","addFinalizer","sync","close","run","sql","params","values","withFiber","fiber","getRef","map","tryPromise","try","execute","catch","cause","message","result","rawRows","rows","executeSync","executeRaw","executeValues","executeUnprepared","executeStream","die","semaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","getCurrent","scope","getUnsafe","services","as","tap","take","release","Object","assign","spanAttributes","entries","config","layerConfig","effectServices","unwrap","asEffect","pipe","flatMap","client","add","SqlClient","provide","layer"],"sources":["../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SqliteClient.js","names":["Sqlite","Config","Context","Effect","Fiber","constFalse","identity","Layer","Scope","Semaphore","Stream","Reactivity","Client","classifySqliteError","SqlError","Statement","ATTR_DB_SYSTEM_NAME","classifyError","cause","message","operation","TypeId","SqliteClient","Service","AsyncQuery","Reference","defaultValue","withAsyncQuery","effect","provideService","make","options","gen","clientOptions","name","filename","location","encryptionKey","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","db","open","addFinalizer","sync","close","run","sql","params","values","withFiber","fiber","getRef","map","tryPromise","try","execute","catch","reason","result","rawRows","rows","executeSync","executeRaw","executeValues","executeUnprepared","executeStream","die","semaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","getCurrent","scope","getUnsafe","context","as","tap","take","release","Object","assign","spanAttributes","entries","config","layerConfig","effectContext","unwrap","pipe","flatMap","client","add","SqlClient","provide","layer"],"sources":["../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,23 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Utilities for applying Effect SQL migrations to React Native SQLite databases.
3
+ *
4
+ * This module re-exports the shared `Migrator` loaders and error types, then
5
+ * provides `run` and `layer` helpers that execute ordered migrations through the
6
+ * current React Native SQLite `SqlClient`. Use it when a mobile app needs to
7
+ * bring its on-device database schema up to date during startup, before opening
8
+ * repositories or sync services, or in integration tests that create app-local
9
+ * database files.
10
+ *
11
+ * React Native SQLite databases are scoped by the client configuration, so the
12
+ * migrator should be run with the same `filename`, `location`, and encryption
13
+ * key as the rest of the application. Migrations run through the package's
14
+ * single serialized connection; by default statements use the synchronous
15
+ * driver API and can block the JS thread, so long migration sets may want to run
16
+ * under `SqliteClient.withAsyncQuery`. Mobile upgrades can be interrupted by app
17
+ * suspension or process death, so keep migrations transaction-aware and avoid
18
+ * assuming a fresh database on every launch.
19
+ *
20
+ * @since 4.0.0
3
21
  */
4
22
  import type * as Effect from "effect/Effect";
5
23
  import * as Layer from "effect/Layer";
@@ -7,17 +25,21 @@ import * as Migrator from "effect/unstable/sql/Migrator";
7
25
  import type * as Client from "effect/unstable/sql/SqlClient";
8
26
  import type { SqlError } from "effect/unstable/sql/SqlError";
9
27
  /**
10
- * @since 1.0.0
28
+ * @since 4.0.0
11
29
  */
12
30
  export * from "effect/unstable/sql/Migrator";
13
31
  /**
14
- * @category constructor
15
- * @since 1.0.0
32
+ * Runs SQL migrations for a React Native SQLite database using the shared `Migrator` implementation and the current `SqlClient`.
33
+ *
34
+ * @category constructors
35
+ * @since 4.0.0
16
36
  */
17
37
  export declare const run: <R>(options: Migrator.MigratorOptions<R>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, SqlError | Migrator.MigrationError, Client.SqlClient | R>;
18
38
  /**
19
- * @category constructor
20
- * @since 1.0.0
39
+ * Creates a layer that runs the configured React Native SQLite migrations during layer construction and provides no services.
40
+ *
41
+ * @category constructors
42
+ * @since 4.0.0
21
43
  */
22
44
  export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, SqlError | Migrator.MigrationError, R | Client.SqlClient>;
23
45
  //# sourceMappingURL=SqliteMigrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteMigrator.d.ts","sourceRoot":"","sources":["../src/SqliteMigrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAE5D;;GAEG;AACH,cAAc,8BAA8B,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAClB,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACjC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAClC,MAAM,CAAC,SAAS,GAAG,CAAC,CACD,CAAA;AAErB;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,SAAS,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,CAAsC,CAAA"}
1
+ {"version":3,"file":"SqliteMigrator.d.ts","sourceRoot":"","sources":["../src/SqliteMigrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAE5D;;GAEG;AACH,cAAc,8BAA8B,CAAA;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,CAAC,EAClB,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACjC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAClC,MAAM,CAAC,SAAS,GAAG,CAAC,CACD,CAAA;AAErB;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,SAAS,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,CAAsC,CAAA"}
@@ -1,17 +1,21 @@
1
1
  import * as Layer from "effect/Layer";
2
2
  import * as Migrator from "effect/unstable/sql/Migrator";
3
3
  /**
4
- * @since 1.0.0
4
+ * @since 4.0.0
5
5
  */
6
6
  export * from "effect/unstable/sql/Migrator";
7
7
  /**
8
- * @category constructor
9
- * @since 1.0.0
8
+ * Runs SQL migrations for a React Native SQLite database using the shared `Migrator` implementation and the current `SqlClient`.
9
+ *
10
+ * @category constructors
11
+ * @since 4.0.0
10
12
  */
11
13
  export const run = /*#__PURE__*/Migrator.make({});
12
14
  /**
13
- * @category constructor
14
- * @since 1.0.0
15
+ * Creates a layer that runs the configured React Native SQLite migrations during layer construction and provides no services.
16
+ *
17
+ * @category constructors
18
+ * @since 4.0.0
15
19
  */
16
20
  export const layer = options => Layer.effectDiscard(run(options));
17
21
  //# sourceMappingURL=SqliteMigrator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteMigrator.js","names":["Layer","Migrator","run","make","layer","options","effectDiscard"],"sources":["../src/SqliteMigrator.ts"],"sourcesContent":[null],"mappings":"AAIA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,8BAA8B;AAIxD;;;AAGA,cAAc,8BAA8B;AAE5C;;;;AAIA,OAAO,MAAMC,GAAG,gBAMZD,QAAQ,CAACE,IAAI,CAAC,EAAE,CAAC;AAErB;;;;AAIA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAC6CL,KAAK,CAACM,aAAa,CAACJ,GAAG,CAACG,OAAO,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"SqliteMigrator.js","names":["Layer","Migrator","run","make","layer","options","effectDiscard"],"sources":["../src/SqliteMigrator.ts"],"sourcesContent":[null],"mappings":"AAsBA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,8BAA8B;AAIxD;;;AAGA,cAAc,8BAA8B;AAE5C;;;;;;AAMA,OAAO,MAAMC,GAAG,gBAMZD,QAAQ,CAACE,IAAI,CAAC,EAAE,CAAC;AAErB;;;;;;AAMA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAC6CL,KAAK,CAACM,aAAa,CAACJ,GAAG,CAACG,OAAO,CAAC,CAAC","ignoreList":[]}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,45 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  /**
5
- * @since 1.0.0
5
+ * Provides a React Native SQLite `SqlClient` backed by `@op-engineering/op-sqlite`.
6
+ *
7
+ * Use this module to open an on-device SQLite database, expose it as both the
8
+ * React Native-specific `SqliteClient` and the generic Effect `SqlClient`, and
9
+ * run application queries, migrations, and transactional reads or writes from
10
+ * Effect services and layers.
11
+ *
12
+ * The client uses one serialized connection. Regular queries and transactions
13
+ * share that handle, and a transaction holds it for the lifetime of its scope,
14
+ * so keep mobile transactions short and wrap multi-statement writes in a
15
+ * transaction to avoid partial updates. By default statements use the driver's
16
+ * synchronous API, which can block the JavaScript thread; `withAsyncQuery`
17
+ * switches a fiber to the asynchronous driver API when UI responsiveness is more
18
+ * important than sync execution.
19
+ *
20
+ * @since 4.0.0
6
21
  */
7
22
  export * as SqliteClient from "./SqliteClient.ts";
8
23
  /**
9
- * @since 1.0.0
24
+ * Utilities for applying Effect SQL migrations to React Native SQLite databases.
25
+ *
26
+ * This module re-exports the shared `Migrator` loaders and error types, then
27
+ * provides `run` and `layer` helpers that execute ordered migrations through the
28
+ * current React Native SQLite `SqlClient`. Use it when a mobile app needs to
29
+ * bring its on-device database schema up to date during startup, before opening
30
+ * repositories or sync services, or in integration tests that create app-local
31
+ * database files.
32
+ *
33
+ * React Native SQLite databases are scoped by the client configuration, so the
34
+ * migrator should be run with the same `filename`, `location`, and encryption
35
+ * key as the rest of the application. Migrations run through the package's
36
+ * single serialized connection; by default statements use the synchronous
37
+ * driver API and can block the JS thread, so long migration sets may want to run
38
+ * under `SqliteClient.withAsyncQuery`. Mobile upgrades can be interrupted by app
39
+ * suspension or process death, so keep migrations transaction-aware and avoid
40
+ * assuming a fresh database on every launch.
41
+ *
42
+ * @since 4.0.0
10
43
  */
11
44
  export * as SqliteMigrator from "./SqliteMigrator.ts";
12
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA"}
package/dist/index.js CHANGED
@@ -1,13 +1,46 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  // @barrel: Auto-generated exports. Do not edit manually.
5
5
  /**
6
- * @since 1.0.0
6
+ * Provides a React Native SQLite `SqlClient` backed by `@op-engineering/op-sqlite`.
7
+ *
8
+ * Use this module to open an on-device SQLite database, expose it as both the
9
+ * React Native-specific `SqliteClient` and the generic Effect `SqlClient`, and
10
+ * run application queries, migrations, and transactional reads or writes from
11
+ * Effect services and layers.
12
+ *
13
+ * The client uses one serialized connection. Regular queries and transactions
14
+ * share that handle, and a transaction holds it for the lifetime of its scope,
15
+ * so keep mobile transactions short and wrap multi-statement writes in a
16
+ * transaction to avoid partial updates. By default statements use the driver's
17
+ * synchronous API, which can block the JavaScript thread; `withAsyncQuery`
18
+ * switches a fiber to the asynchronous driver API when UI responsiveness is more
19
+ * important than sync execution.
20
+ *
21
+ * @since 4.0.0
7
22
  */
8
23
  export * as SqliteClient from "./SqliteClient.js";
9
24
  /**
10
- * @since 1.0.0
25
+ * Utilities for applying Effect SQL migrations to React Native SQLite databases.
26
+ *
27
+ * This module re-exports the shared `Migrator` loaders and error types, then
28
+ * provides `run` and `layer` helpers that execute ordered migrations through the
29
+ * current React Native SQLite `SqlClient`. Use it when a mobile app needs to
30
+ * bring its on-device database schema up to date during startup, before opening
31
+ * repositories or sync services, or in integration tests that create app-local
32
+ * database files.
33
+ *
34
+ * React Native SQLite databases are scoped by the client configuration, so the
35
+ * migrator should be run with the same `filename`, `location`, and encryption
36
+ * key as the rest of the application. Migrations run through the package's
37
+ * single serialized connection; by default statements use the synchronous
38
+ * driver API and can block the JS thread, so long migration sets may want to run
39
+ * under `SqliteClient.withAsyncQuery`. Mobile upgrades can be interrupted by app
40
+ * suspension or process death, so keep migrations transaction-aware and avoid
41
+ * assuming a fresh database on every launch.
42
+ *
43
+ * @since 4.0.0
11
44
  */
12
45
  export * as SqliteMigrator from "./SqliteMigrator.js";
13
46
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SqliteClient","SqliteMigrator"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAKA,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["SqliteClient","SqliteMigrator"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;;;;;;;;;;;;;;;;AAkBA,OAAO,KAAKA,YAAY,MAAM,mBAAmB;AAEjD;;;;;;;;;;;;;;;;;;;;;AAqBA,OAAO,KAAKC,cAAc,MAAM,qBAAqB","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/sql-sqlite-react-native",
3
- "version": "4.0.0-beta.7",
3
+ "version": "4.0.0-beta.70",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "A SQLite toolkit for Effect",
@@ -43,12 +43,12 @@
43
43
  "provenance": true
44
44
  },
45
45
  "devDependencies": {
46
- "@op-engineering/op-sqlite": "15.2.5",
47
- "effect": "^4.0.0-beta.7"
46
+ "@op-engineering/op-sqlite": "15.2.12",
47
+ "effect": "^4.0.0-beta.70"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "@op-engineering/op-sqlite": "15.0.4",
51
- "effect": "^4.0.0-beta.7"
51
+ "effect": "^4.0.0-beta.70"
52
52
  },
53
53
  "scripts": {
54
54
  "codegen": "effect-utils codegen",
@@ -1,39 +1,63 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Provides a React Native SQLite `SqlClient` backed by `@op-engineering/op-sqlite`.
3
+ *
4
+ * Use this module to open an on-device SQLite database, expose it as both the
5
+ * React Native-specific `SqliteClient` and the generic Effect `SqlClient`, and
6
+ * run application queries, migrations, and transactional reads or writes from
7
+ * Effect services and layers.
8
+ *
9
+ * The client uses one serialized connection. Regular queries and transactions
10
+ * share that handle, and a transaction holds it for the lifetime of its scope,
11
+ * so keep mobile transactions short and wrap multi-statement writes in a
12
+ * transaction to avoid partial updates. By default statements use the driver's
13
+ * synchronous API, which can block the JavaScript thread; `withAsyncQuery`
14
+ * switches a fiber to the asynchronous driver API when UI responsiveness is more
15
+ * important than sync execution.
16
+ *
17
+ * @since 4.0.0
3
18
  */
4
19
  import * as Sqlite from "@op-engineering/op-sqlite"
5
20
  import * as Config from "effect/Config"
21
+ import * as Context from "effect/Context"
6
22
  import * as Effect from "effect/Effect"
7
23
  import * as Fiber from "effect/Fiber"
8
24
  import { constFalse, identity } from "effect/Function"
9
25
  import * as Layer from "effect/Layer"
10
26
  import * as Scope from "effect/Scope"
11
27
  import * as Semaphore from "effect/Semaphore"
12
- import * as ServiceMap from "effect/ServiceMap"
13
28
  import * as Stream from "effect/Stream"
14
29
  import * as Reactivity from "effect/unstable/reactivity/Reactivity"
15
30
  import * as Client from "effect/unstable/sql/SqlClient"
16
31
  import type { Connection } from "effect/unstable/sql/SqlConnection"
17
- import { SqlError } from "effect/unstable/sql/SqlError"
32
+ import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError"
18
33
  import * as Statement from "effect/unstable/sql/Statement"
19
34
 
20
35
  const ATTR_DB_SYSTEM_NAME = "db.system.name"
21
36
 
37
+ const classifyError = (cause: unknown, message: string, operation: string) =>
38
+ classifySqliteError(cause, { message, operation })
39
+
22
40
  /**
23
- * @category type ids
24
- * @since 1.0.0
41
+ * Runtime identifier attached to SQLite React Native client values.
42
+ *
43
+ * @category type IDs
44
+ * @since 4.0.0
25
45
  */
26
46
  export const TypeId: TypeId = "~@effect/sql-sqlite-react-native/SqliteClient"
27
47
 
28
48
  /**
29
- * @category type ids
30
- * @since 1.0.0
49
+ * Type-level identifier for SQLite React Native client values.
50
+ *
51
+ * @category type IDs
52
+ * @since 4.0.0
31
53
  */
32
54
  export type TypeId = "~@effect/sql-sqlite-react-native/SqliteClient"
33
55
 
34
56
  /**
57
+ * React Native SQLite client service interface, extending `SqlClient` with its configuration and marking `updateValues` as unsupported for SQLite.
58
+ *
35
59
  * @category models
36
- * @since 1.0.0
60
+ * @since 4.0.0
37
61
  */
38
62
  export interface SqliteClient extends Client.SqlClient {
39
63
  readonly [TypeId]: TypeId
@@ -44,14 +68,18 @@ export interface SqliteClient extends Client.SqlClient {
44
68
  }
45
69
 
46
70
  /**
71
+ * Context service tag for the React Native SQLite client.
72
+ *
47
73
  * @category tags
48
- * @since 1.0.0
74
+ * @since 4.0.0
49
75
  */
50
- export const SqliteClient = ServiceMap.Service<SqliteClient>("@effect/sql-sqlite-react-native/SqliteClient")
76
+ export const SqliteClient = Context.Service<SqliteClient>("@effect/sql-sqlite-react-native/SqliteClient")
51
77
 
52
78
  /**
79
+ * Configuration for a React Native SQLite client, including the database filename, optional location and encryption key, span attributes, and query/result name transforms.
80
+ *
53
81
  * @category models
54
- * @since 1.0.0
82
+ * @since 4.0.0
55
83
  */
56
84
  export interface SqliteClientConfig {
57
85
  readonly filename: string
@@ -63,17 +91,21 @@ export interface SqliteClientConfig {
63
91
  }
64
92
 
65
93
  /**
94
+ * Fiber-local flag that makes the React Native SQLite client run queries through the asynchronous `execute` API instead of `executeSync`.
95
+ *
66
96
  * @category fiber refs
67
- * @since 1.0.0
97
+ * @since 4.0.0
68
98
  */
69
- export const AsyncQuery = ServiceMap.Reference<boolean>(
99
+ export const AsyncQuery = Context.Reference<boolean>(
70
100
  "@effect/sql-sqlite-react-native/Client/asyncQuery",
71
101
  { defaultValue: constFalse }
72
102
  )
73
103
 
74
104
  /**
105
+ * Runs an effect with `AsyncQuery` enabled, causing React Native SQLite queries in that effect to use the asynchronous driver API.
106
+ *
75
107
  * @category fiber refs
76
- * @since 1.0.0
108
+ * @since 4.0.0
77
109
  */
78
110
  export const withAsyncQuery = <R, E, A>(effect: Effect.Effect<A, E, R>) =>
79
111
  Effect.provideService(effect, AsyncQuery, true)
@@ -81,8 +113,10 @@ export const withAsyncQuery = <R, E, A>(effect: Effect.Effect<A, E, R>) =>
81
113
  interface SqliteConnection extends Connection {}
82
114
 
83
115
  /**
84
- * @category constructor
85
- * @since 1.0.0
116
+ * Creates a scoped React Native SQLite client from the supplied configuration, using a single serialized connection and honoring `AsyncQuery` for query execution.
117
+ *
118
+ * @category constructors
119
+ * @since 4.0.0
86
120
  */
87
121
  export const make = (
88
122
  options: SqliteClientConfig
@@ -117,7 +151,8 @@ export const make = (
117
151
  return Effect.map(
118
152
  Effect.tryPromise({
119
153
  try: () => db.execute(sql, params as Array<any>),
120
- catch: (cause) => new SqlError({ cause, message: "Failed to execute statement (async)" })
154
+ catch: (cause) =>
155
+ new SqlError({ reason: classifyError(cause, "Failed to execute statement (async)", "execute") })
121
156
  }),
122
157
  (result) => values ? result.rawRows ?? [] : result.rows
123
158
  )
@@ -127,7 +162,7 @@ export const make = (
127
162
  const result = db.executeSync(sql, params as Array<any>)
128
163
  return values ? result.rawRows ?? [] : result.rows
129
164
  },
130
- catch: (cause) => new SqlError({ cause, message: "Failed to execute statement" })
165
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
131
166
  })
132
167
  })
133
168
 
@@ -158,7 +193,7 @@ export const make = (
158
193
  const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
159
194
  const transactionAcquirer = Effect.uninterruptibleMask((restore) => {
160
195
  const fiber = Fiber.getCurrent()!
161
- const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope)
196
+ const scope = Context.getUnsafe(fiber.context, Scope.Scope)
162
197
  return Effect.as(
163
198
  Effect.tap(
164
199
  restore(semaphore.take(1)),
@@ -187,34 +222,38 @@ export const make = (
187
222
  })
188
223
 
189
224
  /**
225
+ * Builds a layer from an Effect `Config` value, providing both the React Native `SqliteClient` service and the generic `SqlClient` service.
226
+ *
190
227
  * @category layers
191
- * @since 1.0.0
228
+ * @since 4.0.0
192
229
  */
193
230
  export const layerConfig = (
194
231
  config: Config.Wrap<SqliteClientConfig>
195
232
  ): Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError> =>
196
- Layer.effectServices(
197
- Config.unwrap(config).asEffect().pipe(
233
+ Layer.effectContext(
234
+ Config.unwrap(config).pipe(
198
235
  Effect.flatMap(make),
199
236
  Effect.map((client) =>
200
- ServiceMap.make(SqliteClient, client).pipe(
201
- ServiceMap.add(Client.SqlClient, client)
237
+ Context.make(SqliteClient, client).pipe(
238
+ Context.add(Client.SqlClient, client)
202
239
  )
203
240
  )
204
241
  )
205
242
  ).pipe(Layer.provide(Reactivity.layer))
206
243
 
207
244
  /**
245
+ * Builds a layer from a React Native SQLite client configuration, providing both `SqliteClient` and the generic `SqlClient` service.
246
+ *
208
247
  * @category layers
209
- * @since 1.0.0
248
+ * @since 4.0.0
210
249
  */
211
250
  export const layer = (
212
251
  config: SqliteClientConfig
213
252
  ): Layer.Layer<SqliteClient | Client.SqlClient> =>
214
- Layer.effectServices(
253
+ Layer.effectContext(
215
254
  Effect.map(make(config), (client) =>
216
- ServiceMap.make(SqliteClient, client).pipe(
217
- ServiceMap.add(Client.SqlClient, client)
255
+ Context.make(SqliteClient, client).pipe(
256
+ Context.add(Client.SqlClient, client)
218
257
  ))
219
258
  ).pipe(Layer.provide(Reactivity.layer))
220
259
 
@@ -241,10 +280,6 @@ interface DB {
241
280
  *
242
281
  * If you are writing to the database YOU SHOULD BE USING TRANSACTIONS!
243
282
  * Transactions protect you from partial writes and ensure that your data is always in a consistent state
244
- *
245
- * @param query
246
- * @param params
247
- * @returns QueryResult
248
283
  */
249
284
  executeSync: (query: string, params?: Array<any>) => QueryResult
250
285
  /**
@@ -262,10 +297,6 @@ interface DB {
262
297
  * Transactions protect you from partial writes and ensure that your data is always in a consistent state
263
298
  *
264
299
  * If you need a large amount of queries ran as fast as possible you should be using `executeBatch`, `executeRaw`, `loadFile` or `executeWithHostObjects`
265
- *
266
- * @param query string of your SQL query
267
- * @param params a list of parameters to bind to the query, if any
268
- * @returns Promise<QueryResult> with the result of the query
269
300
  */
270
301
  execute: (query: string, params?: Array<any>) => Promise<QueryResult>
271
302
  /**
@@ -1,5 +1,23 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Utilities for applying Effect SQL migrations to React Native SQLite databases.
3
+ *
4
+ * This module re-exports the shared `Migrator` loaders and error types, then
5
+ * provides `run` and `layer` helpers that execute ordered migrations through the
6
+ * current React Native SQLite `SqlClient`. Use it when a mobile app needs to
7
+ * bring its on-device database schema up to date during startup, before opening
8
+ * repositories or sync services, or in integration tests that create app-local
9
+ * database files.
10
+ *
11
+ * React Native SQLite databases are scoped by the client configuration, so the
12
+ * migrator should be run with the same `filename`, `location`, and encryption
13
+ * key as the rest of the application. Migrations run through the package's
14
+ * single serialized connection; by default statements use the synchronous
15
+ * driver API and can block the JS thread, so long migration sets may want to run
16
+ * under `SqliteClient.withAsyncQuery`. Mobile upgrades can be interrupted by app
17
+ * suspension or process death, so keep migrations transaction-aware and avoid
18
+ * assuming a fresh database on every launch.
19
+ *
20
+ * @since 4.0.0
3
21
  */
4
22
  import type * as Effect from "effect/Effect"
5
23
  import * as Layer from "effect/Layer"
@@ -8,13 +26,15 @@ import type * as Client from "effect/unstable/sql/SqlClient"
8
26
  import type { SqlError } from "effect/unstable/sql/SqlError"
9
27
 
10
28
  /**
11
- * @since 1.0.0
29
+ * @since 4.0.0
12
30
  */
13
31
  export * from "effect/unstable/sql/Migrator"
14
32
 
15
33
  /**
16
- * @category constructor
17
- * @since 1.0.0
34
+ * Runs SQL migrations for a React Native SQLite database using the shared `Migrator` implementation and the current `SqlClient`.
35
+ *
36
+ * @category constructors
37
+ * @since 4.0.0
18
38
  */
19
39
  export const run: <R>(
20
40
  options: Migrator.MigratorOptions<R>
@@ -25,8 +45,10 @@ export const run: <R>(
25
45
  > = Migrator.make({})
26
46
 
27
47
  /**
28
- * @category constructor
29
- * @since 1.0.0
48
+ * Creates a layer that runs the configured React Native SQLite migrations during layer construction and provides no services.
49
+ *
50
+ * @category constructors
51
+ * @since 4.0.0
30
52
  */
31
53
  export const layer = <R>(
32
54
  options: Migrator.MigratorOptions<R>
package/src/index.ts CHANGED
@@ -1,15 +1,48 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
 
5
5
  // @barrel: Auto-generated exports. Do not edit manually.
6
6
 
7
7
  /**
8
- * @since 1.0.0
8
+ * Provides a React Native SQLite `SqlClient` backed by `@op-engineering/op-sqlite`.
9
+ *
10
+ * Use this module to open an on-device SQLite database, expose it as both the
11
+ * React Native-specific `SqliteClient` and the generic Effect `SqlClient`, and
12
+ * run application queries, migrations, and transactional reads or writes from
13
+ * Effect services and layers.
14
+ *
15
+ * The client uses one serialized connection. Regular queries and transactions
16
+ * share that handle, and a transaction holds it for the lifetime of its scope,
17
+ * so keep mobile transactions short and wrap multi-statement writes in a
18
+ * transaction to avoid partial updates. By default statements use the driver's
19
+ * synchronous API, which can block the JavaScript thread; `withAsyncQuery`
20
+ * switches a fiber to the asynchronous driver API when UI responsiveness is more
21
+ * important than sync execution.
22
+ *
23
+ * @since 4.0.0
9
24
  */
10
25
  export * as SqliteClient from "./SqliteClient.ts"
11
26
 
12
27
  /**
13
- * @since 1.0.0
28
+ * Utilities for applying Effect SQL migrations to React Native SQLite databases.
29
+ *
30
+ * This module re-exports the shared `Migrator` loaders and error types, then
31
+ * provides `run` and `layer` helpers that execute ordered migrations through the
32
+ * current React Native SQLite `SqlClient`. Use it when a mobile app needs to
33
+ * bring its on-device database schema up to date during startup, before opening
34
+ * repositories or sync services, or in integration tests that create app-local
35
+ * database files.
36
+ *
37
+ * React Native SQLite databases are scoped by the client configuration, so the
38
+ * migrator should be run with the same `filename`, `location`, and encryption
39
+ * key as the rest of the application. Migrations run through the package's
40
+ * single serialized connection; by default statements use the synchronous
41
+ * driver API and can block the JS thread, so long migration sets may want to run
42
+ * under `SqliteClient.withAsyncQuery`. Mobile upgrades can be interrupted by app
43
+ * suspension or process death, so keep migrations transaction-aware and avoid
44
+ * assuming a fresh database on every launch.
45
+ *
46
+ * @since 4.0.0
14
47
  */
15
48
  export * as SqliteMigrator from "./SqliteMigrator.ts"