@effect/sql-sqlite-node 4.0.0-beta.10 → 4.0.0-beta.100

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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # `@effect/sql-sqlite-node`
2
2
 
3
- An `@effect/sql` implementation using the `better-sqlite3` library.
3
+ An Effect SQL implementation using Node.js' built-in `node:sqlite` module.
4
4
 
5
5
  ## Documentation
6
6
 
@@ -1,51 +1,62 @@
1
1
  import * as Config from "effect/Config";
2
+ import * as Context from "effect/Context";
2
3
  import * as Duration from "effect/Duration";
3
4
  import * as Effect from "effect/Effect";
4
5
  import * as Layer from "effect/Layer";
5
6
  import * as Scope from "effect/Scope";
6
- import * as ServiceMap from "effect/ServiceMap";
7
7
  import * as Reactivity from "effect/unstable/reactivity/Reactivity";
8
8
  import * as Client from "effect/unstable/sql/SqlClient";
9
9
  import { SqlError } from "effect/unstable/sql/SqlError";
10
10
  /**
11
- * @category type ids
12
- * @since 1.0.0
11
+ * Runtime type identifier used to mark Node `SqliteClient` values.
12
+ *
13
+ * @category type IDs
14
+ * @since 4.0.0
13
15
  */
14
16
  export declare const TypeId: TypeId;
15
17
  /**
16
- * @category type ids
17
- * @since 1.0.0
18
+ * Type-level identifier used to mark Node `SqliteClient` values.
19
+ *
20
+ * @category type IDs
21
+ * @since 4.0.0
18
22
  */
19
23
  export type TypeId = "~@effect/sql-sqlite-node/SqliteClient";
20
24
  /**
25
+ * Node SQLite client service, extending `SqlClient` with database export, backup, and extension loading helpers. `updateValues` is not supported.
26
+ *
21
27
  * @category models
22
- * @since 1.0.0
28
+ * @since 4.0.0
23
29
  */
24
30
  export interface SqliteClient extends Client.SqlClient {
25
31
  readonly [TypeId]: TypeId;
26
32
  readonly config: SqliteClientConfig;
27
- readonly export: Effect.Effect<Uint8Array, SqlError>;
28
33
  readonly backup: (destination: string) => Effect.Effect<BackupMetadata, SqlError>;
29
34
  readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>;
30
35
  /** Not supported in sqlite */
31
36
  readonly updateValues: never;
32
37
  }
33
38
  /**
39
+ * Metadata returned from a Node SQLite backup operation, reporting total and remaining page counts.
40
+ *
34
41
  * @category models
35
- * @since 1.0.0
42
+ * @since 4.0.0
36
43
  */
37
44
  export interface BackupMetadata {
38
45
  readonly totalPages: number;
39
46
  readonly remainingPages: number;
40
47
  }
41
48
  /**
42
- * @category tags
43
- * @since 1.0.0
49
+ * Service tag for the node SQLite client implementation.
50
+ *
51
+ * @category services
52
+ * @since 4.0.0
44
53
  */
45
- export declare const SqliteClient: ServiceMap.Service<SqliteClient, SqliteClient>;
54
+ export declare const SqliteClient: Context.Service<SqliteClient, SqliteClient>;
46
55
  /**
56
+ * Configuration for a node SQLite client backed by `node:sqlite`, including the database filename, read-only mode, statement cache settings, WAL behavior, span attributes, and query/result name transforms.
57
+ *
47
58
  * @category models
48
- * @since 1.0.0
59
+ * @since 4.0.0
49
60
  */
50
61
  export interface SqliteClientConfig {
51
62
  readonly filename: string;
@@ -58,18 +69,24 @@ export interface SqliteClientConfig {
58
69
  readonly transformQueryNames?: ((str: string) => string) | undefined;
59
70
  }
60
71
  /**
61
- * @category constructor
62
- * @since 1.0.0
72
+ * Creates a scoped node SQLite client from the supplied configuration, using a single serialized connection with WAL enabled by default and exposing SQLite-specific `export`, `backup`, and `loadExtension` operations.
73
+ *
74
+ * @category constructors
75
+ * @since 4.0.0
63
76
  */
64
77
  export declare const make: (options: SqliteClientConfig) => Effect.Effect<SqliteClient, never, Scope.Scope | Reactivity.Reactivity>;
65
78
  /**
79
+ * Builds a layer from an Effect `Config` value, providing both the node `SqliteClient` service and the generic `SqlClient` service.
80
+ *
66
81
  * @category layers
67
- * @since 1.0.0
82
+ * @since 4.0.0
68
83
  */
69
84
  export declare const layerConfig: (config: Config.Wrap<SqliteClientConfig>) => Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError>;
70
85
  /**
86
+ * Builds a layer from a node SQLite client configuration, providing both `SqliteClient` and the generic `SqlClient` service.
87
+ *
71
88
  * @category layers
72
- * @since 1.0.0
89
+ * @since 4.0.0
73
90
  */
74
91
  export declare const layer: (config: SqliteClientConfig) => Layer.Layer<SqliteClient | Client.SqlClient>;
75
92
  //# sourceMappingURL=SqliteClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,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;AAEvD,OAAO,EAAuB,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAO5E;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,MAAgD,CAAA;AAErE;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,uCAAuC,CAAA;AAE5D;;;;;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;IACnC,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;IACjF,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAEvE,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,6CAAwE,CAAA;AAEjG;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAE7D,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;AAOD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,YACN,kBAAkB,KAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CA4MrE,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,WAAW,WACd,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,WACR,kBAAkB,KACzB,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAML,CAAA"}
@@ -1,9 +1,17 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Connects Effect SQL to SQLite on Node.js using `node:sqlite`.
3
+ *
4
+ * This module opens a SQLite database and exposes it as both `SqliteClient` and
5
+ * the generic Effect SQL client. It serializes access through one connection,
6
+ * caches prepared statements, enables WAL mode unless disabled, and supports
7
+ * database backup, and extension loading. Streaming queries and
8
+ * `updateValues` are not supported by this driver.
9
+ *
10
+ * @since 4.0.0
3
11
  */
4
- import Sqlite from "better-sqlite3";
5
12
  import * as Cache from "effect/Cache";
6
13
  import * as Config from "effect/Config";
14
+ import * as Context from "effect/Context";
7
15
  import * as Duration from "effect/Duration";
8
16
  import * as Effect from "effect/Effect";
9
17
  import * as Fiber from "effect/Fiber";
@@ -11,38 +19,46 @@ import { identity } from "effect/Function";
11
19
  import * as Layer from "effect/Layer";
12
20
  import * as Scope from "effect/Scope";
13
21
  import * as Semaphore from "effect/Semaphore";
14
- import * as ServiceMap from "effect/ServiceMap";
15
22
  import * as Stream from "effect/Stream";
16
23
  import * as Reactivity from "effect/unstable/reactivity/Reactivity";
17
24
  import * as Client from "effect/unstable/sql/SqlClient";
18
- import { SqlError } from "effect/unstable/sql/SqlError";
25
+ import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError";
19
26
  import * as Statement from "effect/unstable/sql/Statement";
27
+ import { backup as backupDatabase, DatabaseSync } from "node:sqlite";
20
28
  const ATTR_DB_SYSTEM_NAME = "db.system.name";
21
29
  /**
22
- * @category type ids
23
- * @since 1.0.0
30
+ * Runtime type identifier used to mark Node `SqliteClient` values.
31
+ *
32
+ * @category type IDs
33
+ * @since 4.0.0
24
34
  */
25
35
  export const TypeId = "~@effect/sql-sqlite-node/SqliteClient";
26
36
  /**
27
- * @category tags
28
- * @since 1.0.0
37
+ * Service tag for the node SQLite client implementation.
38
+ *
39
+ * @category services
40
+ * @since 4.0.0
29
41
  */
30
- export const SqliteClient = /*#__PURE__*/ServiceMap.Service("@effect/sql-sqlite-node/SqliteClient");
42
+ export const SqliteClient = /*#__PURE__*/Context.Service("@effect/sql-sqlite-node/SqliteClient");
31
43
  /**
32
- * @category constructor
33
- * @since 1.0.0
44
+ * Creates a scoped node SQLite client from the supplied configuration, using a single serialized connection with WAL enabled by default and exposing SQLite-specific `export`, `backup`, and `loadExtension` operations.
45
+ *
46
+ * @category constructors
47
+ * @since 4.0.0
34
48
  */
35
49
  export const make = options => Effect.gen(function* () {
36
50
  const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
37
51
  const transformRows = options.transformResultNames ? Statement.defaultTransforms(options.transformResultNames).array : undefined;
38
52
  const makeConnection = Effect.gen(function* () {
39
53
  const scope = yield* Effect.scope;
40
- const db = new Sqlite(options.filename, {
41
- readonly: options.readonly ?? false
54
+ const db = new DatabaseSync(options.filename, {
55
+ readOnly: options.readonly ?? false,
56
+ allowExtension: true
42
57
  });
43
58
  yield* Scope.addFinalizer(scope, Effect.sync(() => db.close()));
59
+ db.enableLoadExtension(false);
44
60
  if (options.disableWAL !== true) {
45
- db.pragma("journal_mode = WAL");
61
+ db.exec("PRAGMA journal_mode = WAL");
46
62
  }
47
63
  const prepareCache = yield* Cache.make({
48
64
  capacity: options.prepareCacheSize ?? 200,
@@ -50,43 +66,68 @@ export const make = options => Effect.gen(function* () {
50
66
  lookup: sql => Effect.try({
51
67
  try: () => db.prepare(sql),
52
68
  catch: cause => new SqlError({
53
- cause,
54
- message: "Failed to prepare statement "
69
+ reason: classifyError(cause, "Failed to prepare statement", "prepare")
55
70
  })
56
71
  })
57
72
  });
58
73
  const runStatement = (statement, params, raw) => Effect.withFiber(fiber => {
59
- if (ServiceMap.get(fiber.services, Client.SafeIntegers)) {
60
- statement.safeIntegers(true);
61
- }
62
- try {
63
- if (statement.reader) {
64
- return Effect.succeed(statement.all(...params));
65
- }
66
- const result = statement.run(...params);
67
- return Effect.succeed(raw ? result : []);
68
- } catch (cause) {
69
- return Effect.fail(new SqlError({
70
- cause,
71
- message: "Failed to execute statement"
72
- }));
73
- }
74
+ const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
75
+ return Effect.try({
76
+ try: () => {
77
+ statement.setReadBigInts(useSafeIntegers);
78
+ if (statement.columns().length > 0) {
79
+ return statement.all(...params);
80
+ }
81
+ const result = statement.run(...params);
82
+ return raw ? {
83
+ changes: result.changes,
84
+ lastInsertRowid: result.lastInsertRowid
85
+ } : [];
86
+ },
87
+ catch: cause => new SqlError({
88
+ reason: classifyError(cause, "Failed to execute statement", "execute")
89
+ })
90
+ });
91
+ });
92
+ const runStatementValues = (statement, params) => Effect.withFiber(fiber => {
93
+ const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
94
+ return Effect.try({
95
+ try: () => {
96
+ statement.setReadBigInts(useSafeIntegers);
97
+ if (statement.columns().length > 0) {
98
+ return statement.all(...params);
99
+ }
100
+ statement.run(...params);
101
+ return [];
102
+ },
103
+ catch: cause => new SqlError({
104
+ reason: classifyError(cause, "Failed to execute statement", "execute")
105
+ })
106
+ });
107
+ });
108
+ const runStatementValuesUnprepared = (statement, params) => Effect.withFiber(fiber => {
109
+ const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
110
+ return Effect.try({
111
+ try: () => {
112
+ statement.setReadBigInts(useSafeIntegers);
113
+ statement.setReturnArrays(true);
114
+ if (statement.columns().length > 0) {
115
+ return statement.all(...params);
116
+ }
117
+ statement.run(...params);
118
+ return [];
119
+ },
120
+ catch: cause => new SqlError({
121
+ reason: classifyError(cause, "Failed to execute statement", "execute")
122
+ })
123
+ });
74
124
  });
75
125
  const run = (sql, params, raw = false) => Effect.flatMap(Cache.get(prepareCache, sql), s => runStatement(s, params, raw));
76
- const runValues = (sql, params) => Effect.acquireUseRelease(Cache.get(prepareCache, sql), statement => Effect.try({
77
- try: () => {
78
- if (statement.reader) {
79
- statement.raw(true);
80
- return statement.all(...params);
81
- }
82
- statement.run(...params);
83
- return [];
84
- },
85
- catch: cause => new SqlError({
86
- cause,
87
- message: "Failed to execute statement"
88
- })
89
- }), statement => Effect.sync(() => statement.reader && statement.raw(false)));
126
+ const runValues = (sql, params) => Effect.acquireUseRelease(Cache.get(prepareCache, sql), statement => {
127
+ statement.setReturnArrays(true);
128
+ return runStatementValues(statement, params);
129
+ }, statement => Effect.sync(() => statement.setReturnArrays(false)));
130
+ const runValuesUnprepared = (sql, params) => runStatementValuesUnprepared(db.prepare(sql), params);
90
131
  return identity({
91
132
  execute(sql, params, transformRows) {
92
133
  return transformRows ? Effect.map(run(sql, params), transformRows) : run(sql, params);
@@ -97,6 +138,9 @@ export const make = options => Effect.gen(function* () {
97
138
  executeValues(sql, params) {
98
139
  return runValues(sql, params);
99
140
  },
141
+ executeValuesUnprepared(sql, params) {
142
+ return runValuesUnprepared(sql, params);
143
+ },
100
144
  executeUnprepared(sql, params, transformRows) {
101
145
  const effect = runStatement(db.prepare(sql), params ?? [], false);
102
146
  return transformRows ? Effect.map(effect, transformRows) : effect;
@@ -104,30 +148,31 @@ export const make = options => Effect.gen(function* () {
104
148
  executeStream(_sql, _params) {
105
149
  return Stream.die("executeStream not implemented");
106
150
  },
107
- export: Effect.try({
108
- try: () => db.serialize(),
109
- catch: cause => new SqlError({
110
- cause,
111
- message: "Failed to export database"
112
- })
113
- }),
114
151
  backup(destination) {
115
- return Effect.tryPromise({
116
- try: () => db.backup(destination),
117
- catch: cause => new SqlError({
118
- cause,
119
- message: "Failed to backup database"
120
- })
152
+ return Effect.suspend(() => {
153
+ let totalPages = 0;
154
+ return Effect.tryPromise({
155
+ try: () => backupDatabase(db, destination, {
156
+ progress: progress => {
157
+ totalPages = progress.totalPages;
158
+ }
159
+ }).then(pages => ({
160
+ totalPages: totalPages || pages,
161
+ remainingPages: 0
162
+ })),
163
+ catch: cause => new SqlError({
164
+ reason: classifyError(cause, "Failed to backup database", "backup")
165
+ })
166
+ });
121
167
  });
122
168
  },
123
169
  loadExtension(path) {
124
- return Effect.try({
170
+ return Effect.acquireUseRelease(Effect.sync(() => db.enableLoadExtension(true)), () => Effect.try({
125
171
  try: () => db.loadExtension(path),
126
172
  catch: cause => new SqlError({
127
- cause,
128
- message: "Failed to load extension"
173
+ reason: classifyError(cause, "Failed to load extension", "loadExtension")
129
174
  })
130
- });
175
+ }), () => Effect.sync(() => db.enableLoadExtension(false)));
131
176
  }
132
177
  });
133
178
  });
@@ -136,7 +181,7 @@ export const make = options => Effect.gen(function* () {
136
181
  const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
137
182
  const transactionAcquirer = Effect.uninterruptibleMask(restore => {
138
183
  const fiber = Fiber.getCurrent();
139
- const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope);
184
+ const scope = Context.getUnsafe(fiber.context, Scope.Scope);
140
185
  return Effect.as(Effect.tap(restore(semaphore.take(1)), () => Scope.addFinalizer(scope, semaphore.release(1))), connection);
141
186
  });
142
187
  return Object.assign(yield* Client.make({
@@ -148,19 +193,39 @@ export const make = options => Effect.gen(function* () {
148
193
  }), {
149
194
  [TypeId]: TypeId,
150
195
  config: options,
151
- export: Effect.flatMap(acquirer, _ => _.export),
152
196
  backup: destination => Effect.flatMap(acquirer, _ => _.backup(destination)),
153
197
  loadExtension: path => Effect.flatMap(acquirer, _ => _.loadExtension(path))
154
198
  });
155
199
  });
156
200
  /**
201
+ * Builds a layer from an Effect `Config` value, providing both the node `SqliteClient` service and the generic `SqlClient` service.
202
+ *
157
203
  * @category layers
158
- * @since 1.0.0
204
+ * @since 4.0.0
159
205
  */
160
- 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));
206
+ 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));
161
207
  /**
208
+ * Builds a layer from a node SQLite client configuration, providing both `SqliteClient` and the generic `SqlClient` service.
209
+ *
162
210
  * @category layers
163
- * @since 1.0.0
211
+ * @since 4.0.0
164
212
  */
165
- 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));
213
+ 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));
214
+ // internal
215
+ const classifyError = (cause, message, operation) => classifySqliteError(sqliteCauseWithErrno(cause), {
216
+ message,
217
+ operation
218
+ });
219
+ const sqliteCauseWithErrno = cause => {
220
+ if (typeof cause !== "object" || cause === null || !("errcode" in cause) || "errno" in cause) {
221
+ return cause;
222
+ }
223
+ const errcode = cause.errcode;
224
+ if (typeof errcode !== "number") {
225
+ return cause;
226
+ }
227
+ return Object.assign(cause, {
228
+ errno: errcode
229
+ });
230
+ };
166
231
  //# sourceMappingURL=SqliteClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SqliteClient.js","names":["Sqlite","Cache","Config","Duration","Effect","Fiber","identity","Layer","Scope","Semaphore","ServiceMap","Stream","Reactivity","Client","SqlError","Statement","ATTR_DB_SYSTEM_NAME","TypeId","SqliteClient","Service","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","scope","db","filename","readonly","addFinalizer","sync","close","disableWAL","pragma","prepareCache","capacity","prepareCacheSize","timeToLive","prepareCacheTTL","minutes","lookup","sql","try","prepare","catch","cause","message","runStatement","statement","params","raw","withFiber","fiber","get","services","SafeIntegers","safeIntegers","reader","succeed","all","result","run","fail","flatMap","s","runValues","acquireUseRelease","execute","map","executeRaw","executeValues","executeUnprepared","effect","executeStream","_sql","_params","die","export","serialize","backup","destination","tryPromise","loadExtension","path","semaphore","connection","acquirer","withPermits","transactionAcquirer","uninterruptibleMask","restore","getCurrent","getUnsafe","as","tap","take","release","Object","assign","spanAttributes","entries","config","_","layerConfig","effectServices","unwrap","asEffect","pipe","client","add","SqlClient","provide","layer"],"sources":["../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAOA,MAAM,MAAM,gBAAgB;AACnC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,SAAS,MAAM,kBAAkB;AAC7C,OAAO,KAAKC,UAAU,MAAM,mBAAmB;AAC/C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,UAAU,MAAM,uCAAuC;AACnE,OAAO,KAAKC,MAAM,MAAM,+BAA+B;AAEvD,SAASC,QAAQ,QAAQ,8BAA8B;AACvD,OAAO,KAAKC,SAAS,MAAM,+BAA+B;AAE1D,MAAMC,mBAAmB,GAAG,gBAAgB;AAE5C;;;;AAIA,OAAO,MAAMC,MAAM,GAAW,uCAAuC;AAgCrE;;;;AAIA,OAAO,MAAMC,YAAY,gBAAGR,UAAU,CAACS,OAAO,CAAe,sCAAsC,CAAC;AAwBpG;;;;AAIA,OAAO,MAAMC,IAAI,GACfC,OAA2B,IAE3BjB,MAAM,CAACkB,GAAG,CAAC,aAAS;EAClB,MAAMC,QAAQ,GAAGR,SAAS,CAACS,kBAAkB,CAACH,OAAO,CAACI,mBAAmB,CAAC;EAC1E,MAAMC,aAAa,GAAGL,OAAO,CAACM,oBAAoB,GAChDZ,SAAS,CAACa,iBAAiB,CACzBP,OAAO,CAACM,oBAAoB,CAC7B,CAACE,KAAK,GACPC,SAAS;EAEX,MAAMC,cAAc,GAAG3B,MAAM,CAACkB,GAAG,CAAC,aAAS;IACzC,MAAMU,KAAK,GAAG,OAAO5B,MAAM,CAAC4B,KAAK;IACjC,MAAMC,EAAE,GAAG,IAAIjC,MAAM,CAACqB,OAAO,CAACa,QAAQ,EAAE;MACtCC,QAAQ,EAAEd,OAAO,CAACc,QAAQ,IAAI;KAC/B,CAAC;IACF,OAAO3B,KAAK,CAAC4B,YAAY,CAACJ,KAAK,EAAE5B,MAAM,CAACiC,IAAI,CAAC,MAAMJ,EAAE,CAACK,KAAK,EAAE,CAAC,CAAC;IAE/D,IAAIjB,OAAO,CAACkB,UAAU,KAAK,IAAI,EAAE;MAC/BN,EAAE,CAACO,MAAM,CAAC,oBAAoB,CAAC;IACjC;IAEA,MAAMC,YAAY,GAAG,OAAOxC,KAAK,CAACmB,IAAI,CAAC;MACrCsB,QAAQ,EAAErB,OAAO,CAACsB,gBAAgB,IAAI,GAAG;MACzCC,UAAU,EAAEvB,OAAO,CAACwB,eAAe,IAAI1C,QAAQ,CAAC2C,OAAO,CAAC,EAAE,CAAC;MAC3DC,MAAM,EAAGC,GAAW,IAClB5C,MAAM,CAAC6C,GAAG,CAAC;QACTA,GAAG,EAAEA,CAAA,KAAMhB,EAAE,CAACiB,OAAO,CAACF,GAAG,CAAC;QAC1BG,KAAK,EAAGC,KAAK,IAAK,IAAItC,QAAQ,CAAC;UAAEsC,KAAK;UAAEC,OAAO,EAAE;QAA8B,CAAE;OAClF;KACJ,CAAC;IAEF,MAAMC,YAAY,GAAGA,CACnBC,SAA2B,EAC3BC,MAA8B,EAC9BC,GAAY,KAEZrD,MAAM,CAACsD,SAAS,CAAgCC,KAAK,IAAI;MACvD,IAAIjD,UAAU,CAACkD,GAAG,CAACD,KAAK,CAACE,QAAQ,EAAEhD,MAAM,CAACiD,YAAY,CAAC,EAAE;QACvDP,SAAS,CAACQ,YAAY,CAAC,IAAI,CAAC;MAC9B;MACA,IAAI;QACF,IAAIR,SAAS,CAACS,MAAM,EAAE;UACpB,OAAO5D,MAAM,CAAC6D,OAAO,CAACV,SAAS,CAACW,GAAG,CAAC,GAAGV,MAAM,CAAC,CAAC;QACjD;QACA,MAAMW,MAAM,GAAGZ,SAAS,CAACa,GAAG,CAAC,GAAGZ,MAAM,CAAC;QACvC,OAAOpD,MAAM,CAAC6D,OAAO,CAACR,GAAG,GAAGU,MAAuC,GAAG,EAAE,CAAC;MAC3E,CAAC,CAAC,OAAOf,KAAK,EAAE;QACd,OAAOhD,MAAM,CAACiE,IAAI,CAAC,IAAIvD,QAAQ,CAAC;UAAEsC,KAAK;UAAEC,OAAO,EAAE;QAA6B,CAAE,CAAC,CAAC;MACrF;IACF,CAAC,CAAC;IAEJ,MAAMe,GAAG,GAAGA,CACVpB,GAAW,EACXQ,MAA8B,EAC9BC,GAAG,GAAG,KAAK,KAEXrD,MAAM,CAACkE,OAAO,CACZrE,KAAK,CAAC2D,GAAG,CAACnB,YAAY,EAAEO,GAAG,CAAC,EAC3BuB,CAAC,IAAKjB,YAAY,CAACiB,CAAC,EAAEf,MAAM,EAAEC,GAAG,CAAC,CACpC;IAEH,MAAMe,SAAS,GAAGA,CAChBxB,GAAW,EACXQ,MAA8B,KAE9BpD,MAAM,CAACqE,iBAAiB,CACtBxE,KAAK,CAAC2D,GAAG,CAACnB,YAAY,EAAEO,GAAG,CAAC,EAC3BO,SAAS,IACRnD,MAAM,CAAC6C,GAAG,CAAC;MACTA,GAAG,EAAEA,CAAA,KAAK;QACR,IAAIM,SAAS,CAACS,MAAM,EAAE;UACpBT,SAAS,CAACE,GAAG,CAAC,IAAI,CAAC;UACnB,OAAOF,SAAS,CAACW,GAAG,CAAC,GAAGV,MAAM,CAE7B;QACH;QACAD,SAAS,CAACa,GAAG,CAAC,GAAGZ,MAAM,CAAC;QACxB,OAAO,EAAE;MACX,CAAC;MACDL,KAAK,EAAGC,KAAK,IAAK,IAAItC,QAAQ,CAAC;QAAEsC,KAAK;QAAEC,OAAO,EAAE;MAA6B,CAAE;KACjF,CAAC,EACHE,SAAS,IAAKnD,MAAM,CAACiC,IAAI,CAAC,MAAMkB,SAAS,CAACS,MAAM,IAAIT,SAAS,CAACE,GAAG,CAAC,KAAK,CAAC,CAAC,CAC3E;IAEH,OAAOnD,QAAQ,CAAmB;MAChCoE,OAAOA,CAAC1B,GAAG,EAAEQ,MAAM,EAAE9B,aAAa;QAChC,OAAOA,aAAa,GAChBtB,MAAM,CAACuE,GAAG,CAACP,GAAG,CAACpB,GAAG,EAAEQ,MAAM,CAAC,EAAE9B,aAAa,CAAC,GAC3C0C,GAAG,CAACpB,GAAG,EAAEQ,MAAM,CAAC;MACtB,CAAC;MACDoB,UAAUA,CAAC5B,GAAG,EAAEQ,MAAM;QACpB,OAAOY,GAAG,CAACpB,GAAG,EAAEQ,MAAM,EAAE,IAAI,CAAC;MAC/B,CAAC;MACDqB,aAAaA,CAAC7B,GAAG,EAAEQ,MAAM;QACvB,OAAOgB,SAAS,CAACxB,GAAG,EAAEQ,MAAM,CAAC;MAC/B,CAAC;MACDsB,iBAAiBA,CAAC9B,GAAG,EAAEQ,MAAM,EAAE9B,aAAa;QAC1C,MAAMqD,MAAM,GAAGzB,YAAY,CAACrB,EAAE,CAACiB,OAAO,CAACF,GAAG,CAAC,EAAEQ,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC;QACjE,OAAO9B,aAAa,GAAGtB,MAAM,CAACuE,GAAG,CAACI,MAAM,EAAErD,aAAa,CAAC,GAAGqD,MAAM;MACnE,CAAC;MACDC,aAAaA,CAACC,IAAI,EAAEC,OAAO;QACzB,OAAOvE,MAAM,CAACwE,GAAG,CAAC,+BAA+B,CAAC;MACpD,CAAC;MACDC,MAAM,EAAEhF,MAAM,CAAC6C,GAAG,CAAC;QACjBA,GAAG,EAAEA,CAAA,KAAMhB,EAAE,CAACoD,SAAS,EAAE;QACzBlC,KAAK,EAAGC,KAAK,IAAK,IAAItC,QAAQ,CAAC;UAAEsC,KAAK;UAAEC,OAAO,EAAE;QAA2B,CAAE;OAC/E,CAAC;MACFiC,MAAMA,CAACC,WAAW;QAChB,OAAOnF,MAAM,CAACoF,UAAU,CAAC;UACvBvC,GAAG,EAAEA,CAAA,KAAMhB,EAAE,CAACqD,MAAM,CAACC,WAAW,CAAC;UACjCpC,KAAK,EAAGC,KAAK,IAAK,IAAItC,QAAQ,CAAC;YAAEsC,KAAK;YAAEC,OAAO,EAAE;UAA2B,CAAE;SAC/E,CAAC;MACJ,CAAC;MACDoC,aAAaA,CAACC,IAAI;QAChB,OAAOtF,MAAM,CAAC6C,GAAG,CAAC;UAChBA,GAAG,EAAEA,CAAA,KAAMhB,EAAE,CAACwD,aAAa,CAACC,IAAI,CAAC;UACjCvC,KAAK,EAAGC,KAAK,IAAK,IAAItC,QAAQ,CAAC;YAAEsC,KAAK;YAAEC,OAAO,EAAE;UAA0B,CAAE;SAC9E,CAAC;MACJ;KACD,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMsC,SAAS,GAAG,OAAOlF,SAAS,CAACW,IAAI,CAAC,CAAC,CAAC;EAC1C,MAAMwE,UAAU,GAAG,OAAO7D,cAAc;EAExC,MAAM8D,QAAQ,GAAGF,SAAS,CAACG,WAAW,CAAC,CAAC,CAAC,CAAC1F,MAAM,CAAC6D,OAAO,CAAC2B,UAAU,CAAC,CAAC;EACrE,MAAMG,mBAAmB,GAAG3F,MAAM,CAAC4F,mBAAmB,CAAEC,OAAO,IAAI;IACjE,MAAMtC,KAAK,GAAGtD,KAAK,CAAC6F,UAAU,EAAG;IACjC,MAAMlE,KAAK,GAAGtB,UAAU,CAACyF,SAAS,CAACxC,KAAK,CAACE,QAAQ,EAAErD,KAAK,CAACA,KAAK,CAAC;IAC/D,OAAOJ,MAAM,CAACgG,EAAE,CACdhG,MAAM,CAACiG,GAAG,CACRJ,OAAO,CAACN,SAAS,CAACW,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1B,MAAM9F,KAAK,CAAC4B,YAAY,CAACJ,KAAK,EAAE2D,SAAS,CAACY,OAAO,CAAC,CAAC,CAAC,CAAC,CACtD,EACDX,UAAU,CACX;EACH,CAAC,CAAC;EAEF,OAAOY,MAAM,CAACC,MAAM,CACjB,OAAO5F,MAAM,CAACO,IAAI,CAAC;IAClByE,QAAQ;IACRtE,QAAQ;IACRwE,mBAAmB;IACnBW,cAAc,EAAE,CACd,IAAIrF,OAAO,CAACqF,cAAc,GAAGF,MAAM,CAACG,OAAO,CAACtF,OAAO,CAACqF,cAAc,CAAC,GAAG,EAAE,CAAC,EACzE,CAAC1F,mBAAmB,EAAE,QAAQ,CAAC,CAChC;IACDU;GACD,CAAC,EACF;IACE,CAACT,MAAM,GAAGA,MAAgB;IAC1B2F,MAAM,EAAEvF,OAAO;IACf+D,MAAM,EAAEhF,MAAM,CAACkE,OAAO,CAACuB,QAAQ,EAAGgB,CAAC,IAAKA,CAAC,CAACzB,MAAM,CAAC;IACjDE,MAAM,EAAGC,WAAmB,IAAKnF,MAAM,CAACkE,OAAO,CAACuB,QAAQ,EAAGgB,CAAC,IAAKA,CAAC,CAACvB,MAAM,CAACC,WAAW,CAAC,CAAC;IACvFE,aAAa,EAAGC,IAAY,IAAKtF,MAAM,CAACkE,OAAO,CAACuB,QAAQ,EAAGgB,CAAC,IAAKA,CAAC,CAACpB,aAAa,CAACC,IAAI,CAAC;GACvF,CACF;AACH,CAAC,CAAC;AAEJ;;;;AAIA,OAAO,MAAMoB,WAAW,GACtBF,MAAuC,IAEvCrG,KAAK,CAACwG,cAAc,CAClB7G,MAAM,CAAC8G,MAAM,CAACJ,MAAM,CAAC,CAACK,QAAQ,EAAE,CAACC,IAAI,CACnC9G,MAAM,CAACkE,OAAO,CAAClD,IAAI,CAAC,EACpBhB,MAAM,CAACuE,GAAG,CAAEwC,MAAM,IAChBzG,UAAU,CAACU,IAAI,CAACF,YAAY,EAAEiG,MAAM,CAAC,CAACD,IAAI,CACxCxG,UAAU,CAAC0G,GAAG,CAACvG,MAAM,CAACwG,SAAS,EAAEF,MAAM,CAAC,CACzC,CACF,CACF,CACF,CAACD,IAAI,CAAC3G,KAAK,CAAC+G,OAAO,CAAC1G,UAAU,CAAC2G,KAAK,CAAC,CAAC;AAEzC;;;;AAIA,OAAO,MAAMA,KAAK,GAChBX,MAA0B,IAE1BrG,KAAK,CAACwG,cAAc,CAClB3G,MAAM,CAACuE,GAAG,CAACvD,IAAI,CAACwF,MAAM,CAAC,EAAGO,MAAM,IAC9BzG,UAAU,CAACU,IAAI,CAACF,YAAY,EAAEiG,MAAM,CAAC,CAACD,IAAI,CACxCxG,UAAU,CAAC0G,GAAG,CAACvG,MAAM,CAACwG,SAAS,EAAEF,MAAM,CAAC,CACzC,CAAC,CACL,CAACD,IAAI,CAAC3G,KAAK,CAAC+G,OAAO,CAAC1G,UAAU,CAAC2G,KAAK,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"SqliteClient.js","names":["Cache","Config","Context","Duration","Effect","Fiber","identity","Layer","Scope","Semaphore","Stream","Reactivity","Client","classifySqliteError","SqlError","Statement","backup","backupDatabase","DatabaseSync","ATTR_DB_SYSTEM_NAME","TypeId","SqliteClient","Service","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","scope","db","filename","readOnly","readonly","allowExtension","addFinalizer","sync","close","enableLoadExtension","disableWAL","exec","prepareCache","capacity","prepareCacheSize","timeToLive","prepareCacheTTL","minutes","lookup","sql","try","prepare","catch","cause","reason","classifyError","runStatement","statement","params","raw","withFiber","fiber","useSafeIntegers","get","context","SafeIntegers","setReadBigInts","columns","length","all","result","run","changes","lastInsertRowid","runStatementValues","runStatementValuesUnprepared","setReturnArrays","flatMap","s","runValues","acquireUseRelease","runValuesUnprepared","execute","map","executeRaw","executeValues","executeValuesUnprepared","executeUnprepared","effect","executeStream","_sql","_params","die","destination","suspend","totalPages","tryPromise","progress","then","pages","remainingPages","loadExtension","path","semaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","getCurrent","getUnsafe","as","tap","take","release","Object","assign","spanAttributes","entries","config","_","layerConfig","effectContext","unwrap","pipe","client","add","SqlClient","provide","layer","message","operation","sqliteCauseWithErrno","errcode","errno"],"sources":["../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,12 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Runs database migrations for Node.js SQLite projects that use Effect SQL.
3
+ *
4
+ * This module re-exports the shared migration loaders and errors, then provides
5
+ * `run` and `layer` helpers that apply pending migration files with the current
6
+ * `SqlClient`. It does not add Node-specific schema dump support; migration
7
+ * execution is handled by the shared SQL migrator.
8
+ *
9
+ * @since 4.0.0
3
10
  */
4
11
  import type * as Effect from "effect/Effect";
5
12
  import * as Layer from "effect/Layer";
@@ -7,17 +14,21 @@ import * as Migrator from "effect/unstable/sql/Migrator";
7
14
  import type * as Client from "effect/unstable/sql/SqlClient";
8
15
  import type { SqlError } from "effect/unstable/sql/SqlError";
9
16
  /**
10
- * @since 1.0.0
17
+ * @since 4.0.0
11
18
  */
12
19
  export * from "effect/unstable/sql/Migrator";
13
20
  /**
14
- * @category constructor
15
- * @since 1.0.0
21
+ * Runs SQL migrations for a SQLite database using the shared `Migrator` implementation and the current `SqlClient`.
22
+ *
23
+ * @category constructors
24
+ * @since 4.0.0
16
25
  */
17
26
  export declare const run: <R2 = never>(options: Migrator.MigratorOptions<R2>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, Migrator.MigrationError | SqlError, Client.SqlClient | R2>;
18
27
  /**
19
- * @category constructor
20
- * @since 1.0.0
28
+ * Creates a layer that runs the configured SQLite migrations during layer construction and provides no services.
29
+ *
30
+ * @category constructors
31
+ * @since 4.0.0
21
32
  */
22
33
  export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, Migrator.MigrationError | SqlError, Client.SqlClient | R>;
23
34
  //# 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,EAAE,GAAG,KAAK,EAC3B,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,EAAE,CA2CrB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,SAAS,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CACZ,KAAK,EACL,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,CAAC,CACgB,CAAA"}
1
+ {"version":3,"file":"SqliteMigrator.d.ts","sourceRoot":"","sources":["../src/SqliteMigrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;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,EAAE,GAAG,KAAK,EAC3B,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,EAAE,CA2CrB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,WACZ,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CACZ,KAAK,EACL,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,CAAC,CACgB,CAAA"}
@@ -1,12 +1,14 @@
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 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
  // dumpSchema(path, table) {
@@ -52,8 +54,10 @@ export const run = /*#__PURE__*/Migrator.make({
52
54
  // }
53
55
  });
54
56
  /**
55
- * @category constructor
56
- * @since 1.0.0
57
+ * Creates a layer that runs the configured SQLite migrations during layer construction and provides no services.
58
+ *
59
+ * @category constructors
60
+ * @since 4.0.0
57
61
  */
58
62
  export const layer = options => Layer.effectDiscard(run(options));
59
63
  //# 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;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA,CACD,CAAC;AAEF;;;;AAIA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAKjCL,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":"AAWA,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;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA,CACD,CAAC;AAEF;;;;;;AAMA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAKjCL,KAAK,CAACM,aAAa,CAACJ,GAAG,CAACG,OAAO,CAAC,CAAC","ignoreList":[]}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  /**
5
- * @since 1.0.0
5
+ * @since 4.0.0
6
6
  */
7
7
  export * as SqliteClient from "./SqliteClient.ts";
8
8
  /**
9
- * @since 1.0.0
9
+ * @since 4.0.0
10
10
  */
11
11
  export * as SqliteMigrator from "./SqliteMigrator.ts";
12
12
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
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
+ * @since 4.0.0
7
7
  */
8
8
  export * as SqliteClient from "./SqliteClient.js";
9
9
  /**
10
- * @since 1.0.0
10
+ * @since 4.0.0
11
11
  */
12
12
  export * as SqliteMigrator from "./SqliteMigrator.js";
13
13
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@effect/sql-sqlite-node",
3
- "version": "4.0.0-beta.10",
3
+ "version": "4.0.0-beta.100",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "A SQLite toolkit for Effect",
7
7
  "homepage": "https://effect.website",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/Effect-TS/effect-smol.git",
10
+ "url": "https://github.com/Effect-TS/effect.git",
11
11
  "directory": "packages/sql/sqlite-node"
12
12
  },
13
13
  "bugs": {
14
- "url": "https://github.com/Effect-TS/effect-smol/issues"
14
+ "url": "https://github.com/Effect-TS/effect/issues"
15
15
  },
16
16
  "tags": [
17
17
  "typescript",
@@ -43,20 +43,16 @@
43
43
  "provenance": true
44
44
  },
45
45
  "devDependencies": {
46
- "@types/better-sqlite3": "^7.6.13",
47
- "@effect/platform-node": "^4.0.0-beta.10",
48
- "effect": "^4.0.0-beta.10"
46
+ "@types/node": "^26.1.1",
47
+ "@effect/platform-node": "^4.0.0-beta.100",
48
+ "effect": "^4.0.0-beta.100"
49
49
  },
50
50
  "peerDependencies": {
51
- "effect": "^4.0.0-beta.10"
52
- },
53
- "dependencies": {
54
- "better-sqlite3": "^12.6.2"
51
+ "effect": "^4.0.0-beta.100"
55
52
  },
56
53
  "scripts": {
57
54
  "codegen": "effect-utils codegen",
58
55
  "build": "tsc -b tsconfig.json && pnpm babel",
59
- "build:tsgo": "tsgo -b tsconfig.json && pnpm babel",
60
56
  "babel": "babel dist --plugins annotate-pure-calls --out-dir dist --source-maps",
61
57
  "check": "tsc -b tsconfig.json",
62
58
  "test": "vitest",
@@ -1,9 +1,17 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Connects Effect SQL to SQLite on Node.js using `node:sqlite`.
3
+ *
4
+ * This module opens a SQLite database and exposes it as both `SqliteClient` and
5
+ * the generic Effect SQL client. It serializes access through one connection,
6
+ * caches prepared statements, enables WAL mode unless disabled, and supports
7
+ * database backup, and extension loading. Streaming queries and
8
+ * `updateValues` are not supported by this driver.
9
+ *
10
+ * @since 4.0.0
3
11
  */
4
- import Sqlite from "better-sqlite3"
5
12
  import * as Cache from "effect/Cache"
6
13
  import * as Config from "effect/Config"
14
+ import * as Context from "effect/Context"
7
15
  import * as Duration from "effect/Duration"
8
16
  import * as Effect from "effect/Effect"
9
17
  import * as Fiber from "effect/Fiber"
@@ -11,36 +19,42 @@ import { identity } from "effect/Function"
11
19
  import * as Layer from "effect/Layer"
12
20
  import * as Scope from "effect/Scope"
13
21
  import * as Semaphore from "effect/Semaphore"
14
- import * as ServiceMap from "effect/ServiceMap"
15
22
  import * as Stream from "effect/Stream"
16
23
  import * as Reactivity from "effect/unstable/reactivity/Reactivity"
17
24
  import * as Client from "effect/unstable/sql/SqlClient"
18
25
  import type { Connection } from "effect/unstable/sql/SqlConnection"
19
- import { SqlError } from "effect/unstable/sql/SqlError"
26
+ import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError"
20
27
  import * as Statement from "effect/unstable/sql/Statement"
28
+ import { backup as backupDatabase, DatabaseSync } from "node:sqlite"
29
+ import type { StatementSync } from "node:sqlite"
21
30
 
22
31
  const ATTR_DB_SYSTEM_NAME = "db.system.name"
23
32
 
24
33
  /**
25
- * @category type ids
26
- * @since 1.0.0
34
+ * Runtime type identifier used to mark Node `SqliteClient` values.
35
+ *
36
+ * @category type IDs
37
+ * @since 4.0.0
27
38
  */
28
39
  export const TypeId: TypeId = "~@effect/sql-sqlite-node/SqliteClient"
29
40
 
30
41
  /**
31
- * @category type ids
32
- * @since 1.0.0
42
+ * Type-level identifier used to mark Node `SqliteClient` values.
43
+ *
44
+ * @category type IDs
45
+ * @since 4.0.0
33
46
  */
34
47
  export type TypeId = "~@effect/sql-sqlite-node/SqliteClient"
35
48
 
36
49
  /**
50
+ * Node SQLite client service, extending `SqlClient` with database export, backup, and extension loading helpers. `updateValues` is not supported.
51
+ *
37
52
  * @category models
38
- * @since 1.0.0
53
+ * @since 4.0.0
39
54
  */
40
55
  export interface SqliteClient extends Client.SqlClient {
41
56
  readonly [TypeId]: TypeId
42
57
  readonly config: SqliteClientConfig
43
- readonly export: Effect.Effect<Uint8Array, SqlError>
44
58
  readonly backup: (destination: string) => Effect.Effect<BackupMetadata, SqlError>
45
59
  readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>
46
60
 
@@ -49,8 +63,10 @@ export interface SqliteClient extends Client.SqlClient {
49
63
  }
50
64
 
51
65
  /**
66
+ * Metadata returned from a Node SQLite backup operation, reporting total and remaining page counts.
67
+ *
52
68
  * @category models
53
- * @since 1.0.0
69
+ * @since 4.0.0
54
70
  */
55
71
  export interface BackupMetadata {
56
72
  readonly totalPages: number
@@ -58,14 +74,18 @@ export interface BackupMetadata {
58
74
  }
59
75
 
60
76
  /**
61
- * @category tags
62
- * @since 1.0.0
77
+ * Service tag for the node SQLite client implementation.
78
+ *
79
+ * @category services
80
+ * @since 4.0.0
63
81
  */
64
- export const SqliteClient = ServiceMap.Service<SqliteClient>("@effect/sql-sqlite-node/SqliteClient")
82
+ export const SqliteClient = Context.Service<SqliteClient>("@effect/sql-sqlite-node/SqliteClient")
65
83
 
66
84
  /**
85
+ * Configuration for a node SQLite client backed by `node:sqlite`, including the database filename, read-only mode, statement cache settings, WAL behavior, span attributes, and query/result name transforms.
86
+ *
67
87
  * @category models
68
- * @since 1.0.0
88
+ * @since 4.0.0
69
89
  */
70
90
  export interface SqliteClientConfig {
71
91
  readonly filename: string
@@ -80,14 +100,15 @@ export interface SqliteClientConfig {
80
100
  }
81
101
 
82
102
  interface SqliteConnection extends Connection {
83
- readonly export: Effect.Effect<Uint8Array, SqlError>
84
103
  readonly backup: (destination: string) => Effect.Effect<BackupMetadata, SqlError>
85
104
  readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>
86
105
  }
87
106
 
88
107
  /**
89
- * @category constructor
90
- * @since 1.0.0
108
+ * Creates a scoped node SQLite client from the supplied configuration, using a single serialized connection with WAL enabled by default and exposing SQLite-specific `export`, `backup`, and `loadExtension` operations.
109
+ *
110
+ * @category constructors
111
+ * @since 4.0.0
91
112
  */
92
113
  export const make = (
93
114
  options: SqliteClientConfig
@@ -102,13 +123,15 @@ export const make = (
102
123
 
103
124
  const makeConnection = Effect.gen(function*() {
104
125
  const scope = yield* Effect.scope
105
- const db = new Sqlite(options.filename, {
106
- readonly: options.readonly ?? false
126
+ const db = new DatabaseSync(options.filename, {
127
+ readOnly: options.readonly ?? false,
128
+ allowExtension: true
107
129
  })
108
130
  yield* Scope.addFinalizer(scope, Effect.sync(() => db.close()))
131
+ db.enableLoadExtension(false)
109
132
 
110
133
  if (options.disableWAL !== true) {
111
- db.pragma("journal_mode = WAL")
134
+ db.exec("PRAGMA journal_mode = WAL")
112
135
  }
113
136
 
114
137
  const prepareCache = yield* Cache.make({
@@ -117,28 +140,67 @@ export const make = (
117
140
  lookup: (sql: string) =>
118
141
  Effect.try({
119
142
  try: () => db.prepare(sql),
120
- catch: (cause) => new SqlError({ cause, message: "Failed to prepare statement " })
143
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to prepare statement", "prepare") })
121
144
  })
122
145
  })
123
146
 
124
147
  const runStatement = (
125
- statement: Sqlite.Statement,
148
+ statement: StatementSync,
126
149
  params: ReadonlyArray<unknown>,
127
150
  raw: boolean
128
151
  ) =>
129
152
  Effect.withFiber<ReadonlyArray<any>, SqlError>((fiber) => {
130
- if (ServiceMap.get(fiber.services, Client.SafeIntegers)) {
131
- statement.safeIntegers(true)
132
- }
133
- try {
134
- if (statement.reader) {
135
- return Effect.succeed(statement.all(...params))
136
- }
137
- const result = statement.run(...params)
138
- return Effect.succeed(raw ? result as unknown as ReadonlyArray<any> : [])
139
- } catch (cause) {
140
- return Effect.fail(new SqlError({ cause, message: "Failed to execute statement" }))
141
- }
153
+ const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
154
+ return Effect.try({
155
+ try: () => {
156
+ statement.setReadBigInts(useSafeIntegers)
157
+ if (statement.columns().length > 0) {
158
+ return statement.all(...(params as Array<any>)) as ReadonlyArray<any>
159
+ }
160
+ const result = statement.run(...(params as Array<any>))
161
+ return raw ? { changes: result.changes, lastInsertRowid: result.lastInsertRowid } as any : []
162
+ },
163
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
164
+ })
165
+ })
166
+
167
+ const runStatementValues = (
168
+ statement: StatementSync,
169
+ params: ReadonlyArray<unknown>
170
+ ) =>
171
+ Effect.withFiber<ReadonlyArray<ReadonlyArray<unknown>>, SqlError>((fiber) => {
172
+ const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
173
+ return Effect.try({
174
+ try: () => {
175
+ statement.setReadBigInts(useSafeIntegers)
176
+ if (statement.columns().length > 0) {
177
+ return statement.all(...(params as Array<any>)) as unknown as ReadonlyArray<ReadonlyArray<unknown>>
178
+ }
179
+ statement.run(...(params as Array<any>))
180
+ return []
181
+ },
182
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
183
+ })
184
+ })
185
+
186
+ const runStatementValuesUnprepared = (
187
+ statement: StatementSync,
188
+ params: ReadonlyArray<unknown>
189
+ ) =>
190
+ Effect.withFiber<ReadonlyArray<ReadonlyArray<unknown>>, SqlError>((fiber) => {
191
+ const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
192
+ return Effect.try({
193
+ try: () => {
194
+ statement.setReadBigInts(useSafeIntegers)
195
+ statement.setReturnArrays(true)
196
+ if (statement.columns().length > 0) {
197
+ return statement.all(...(params as Array<any>)) as unknown as ReadonlyArray<ReadonlyArray<unknown>>
198
+ }
199
+ statement.run(...(params as Array<any>))
200
+ return []
201
+ },
202
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
203
+ })
142
204
  })
143
205
 
144
206
  const run = (
@@ -157,23 +219,18 @@ export const make = (
157
219
  ) =>
158
220
  Effect.acquireUseRelease(
159
221
  Cache.get(prepareCache, sql),
160
- (statement) =>
161
- Effect.try({
162
- try: () => {
163
- if (statement.reader) {
164
- statement.raw(true)
165
- return statement.all(...params) as ReadonlyArray<
166
- ReadonlyArray<unknown>
167
- >
168
- }
169
- statement.run(...params)
170
- return []
171
- },
172
- catch: (cause) => new SqlError({ cause, message: "Failed to execute statement" })
173
- }),
174
- (statement) => Effect.sync(() => statement.reader && statement.raw(false))
222
+ (statement) => {
223
+ statement.setReturnArrays(true)
224
+ return runStatementValues(statement, params)
225
+ },
226
+ (statement) => Effect.sync(() => statement.setReturnArrays(false))
175
227
  )
176
228
 
229
+ const runValuesUnprepared = (
230
+ sql: string,
231
+ params: ReadonlyArray<unknown>
232
+ ) => runStatementValuesUnprepared(db.prepare(sql), params)
233
+
177
234
  return identity<SqliteConnection>({
178
235
  execute(sql, params, transformRows) {
179
236
  return transformRows
@@ -186,6 +243,9 @@ export const make = (
186
243
  executeValues(sql, params) {
187
244
  return runValues(sql, params)
188
245
  },
246
+ executeValuesUnprepared(sql, params) {
247
+ return runValuesUnprepared(sql, params)
248
+ },
189
249
  executeUnprepared(sql, params, transformRows) {
190
250
  const effect = runStatement(db.prepare(sql), params ?? [], false)
191
251
  return transformRows ? Effect.map(effect, transformRows) : effect
@@ -193,21 +253,31 @@ export const make = (
193
253
  executeStream(_sql, _params) {
194
254
  return Stream.die("executeStream not implemented")
195
255
  },
196
- export: Effect.try({
197
- try: () => db.serialize(),
198
- catch: (cause) => new SqlError({ cause, message: "Failed to export database" })
199
- }),
200
256
  backup(destination) {
201
- return Effect.tryPromise({
202
- try: () => db.backup(destination),
203
- catch: (cause) => new SqlError({ cause, message: "Failed to backup database" })
257
+ return Effect.suspend(() => {
258
+ let totalPages = 0
259
+ return Effect.tryPromise({
260
+ try: () =>
261
+ backupDatabase(db, destination, {
262
+ progress: (progress) => {
263
+ totalPages = progress.totalPages
264
+ }
265
+ }).then((pages): BackupMetadata => ({ totalPages: totalPages || pages, remainingPages: 0 })),
266
+ catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to backup database", "backup") })
267
+ })
204
268
  })
205
269
  },
206
270
  loadExtension(path) {
207
- return Effect.try({
208
- try: () => db.loadExtension(path),
209
- catch: (cause) => new SqlError({ cause, message: "Failed to load extension" })
210
- })
271
+ return Effect.acquireUseRelease(
272
+ Effect.sync(() => db.enableLoadExtension(true)),
273
+ () =>
274
+ Effect.try({
275
+ try: () => db.loadExtension(path),
276
+ catch: (cause) =>
277
+ new SqlError({ reason: classifyError(cause, "Failed to load extension", "loadExtension") })
278
+ }),
279
+ () => Effect.sync(() => db.enableLoadExtension(false))
280
+ )
211
281
  }
212
282
  })
213
283
  })
@@ -218,7 +288,7 @@ export const make = (
218
288
  const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
219
289
  const transactionAcquirer = Effect.uninterruptibleMask((restore) => {
220
290
  const fiber = Fiber.getCurrent()!
221
- const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope)
291
+ const scope = Context.getUnsafe(fiber.context, Scope.Scope)
222
292
  return Effect.as(
223
293
  Effect.tap(
224
294
  restore(semaphore.take(1)),
@@ -242,7 +312,6 @@ export const make = (
242
312
  {
243
313
  [TypeId]: TypeId as TypeId,
244
314
  config: options,
245
- export: Effect.flatMap(acquirer, (_) => _.export),
246
315
  backup: (destination: string) => Effect.flatMap(acquirer, (_) => _.backup(destination)),
247
316
  loadExtension: (path: string) => Effect.flatMap(acquirer, (_) => _.loadExtension(path))
248
317
  }
@@ -250,33 +319,53 @@ export const make = (
250
319
  })
251
320
 
252
321
  /**
322
+ * Builds a layer from an Effect `Config` value, providing both the node `SqliteClient` service and the generic `SqlClient` service.
323
+ *
253
324
  * @category layers
254
- * @since 1.0.0
325
+ * @since 4.0.0
255
326
  */
256
327
  export const layerConfig = (
257
328
  config: Config.Wrap<SqliteClientConfig>
258
329
  ): Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError> =>
259
- Layer.effectServices(
260
- Config.unwrap(config).asEffect().pipe(
330
+ Layer.effectContext(
331
+ Config.unwrap(config).pipe(
261
332
  Effect.flatMap(make),
262
333
  Effect.map((client) =>
263
- ServiceMap.make(SqliteClient, client).pipe(
264
- ServiceMap.add(Client.SqlClient, client)
334
+ Context.make(SqliteClient, client).pipe(
335
+ Context.add(Client.SqlClient, client)
265
336
  )
266
337
  )
267
338
  )
268
339
  ).pipe(Layer.provide(Reactivity.layer))
269
340
 
270
341
  /**
342
+ * Builds a layer from a node SQLite client configuration, providing both `SqliteClient` and the generic `SqlClient` service.
343
+ *
271
344
  * @category layers
272
- * @since 1.0.0
345
+ * @since 4.0.0
273
346
  */
274
347
  export const layer = (
275
348
  config: SqliteClientConfig
276
349
  ): Layer.Layer<SqliteClient | Client.SqlClient> =>
277
- Layer.effectServices(
350
+ Layer.effectContext(
278
351
  Effect.map(make(config), (client) =>
279
- ServiceMap.make(SqliteClient, client).pipe(
280
- ServiceMap.add(Client.SqlClient, client)
352
+ Context.make(SqliteClient, client).pipe(
353
+ Context.add(Client.SqlClient, client)
281
354
  ))
282
355
  ).pipe(Layer.provide(Reactivity.layer))
356
+
357
+ // internal
358
+
359
+ const classifyError = (cause: unknown, message: string, operation: string) =>
360
+ classifySqliteError(sqliteCauseWithErrno(cause), { message, operation })
361
+
362
+ const sqliteCauseWithErrno = (cause: unknown): unknown => {
363
+ if (typeof cause !== "object" || cause === null || !("errcode" in cause) || "errno" in cause) {
364
+ return cause
365
+ }
366
+ const errcode = (cause as { readonly errcode: unknown }).errcode
367
+ if (typeof errcode !== "number") {
368
+ return cause
369
+ }
370
+ return Object.assign(cause, { errno: errcode })
371
+ }
@@ -1,5 +1,12 @@
1
1
  /**
2
- * @since 1.0.0
2
+ * Runs database migrations for Node.js SQLite projects that use Effect SQL.
3
+ *
4
+ * This module re-exports the shared migration loaders and errors, then provides
5
+ * `run` and `layer` helpers that apply pending migration files with the current
6
+ * `SqlClient`. It does not add Node-specific schema dump support; migration
7
+ * execution is handled by the shared SQL migrator.
8
+ *
9
+ * @since 4.0.0
3
10
  */
4
11
  import type * as Effect from "effect/Effect"
5
12
  import * as Layer from "effect/Layer"
@@ -8,13 +15,15 @@ import type * as Client from "effect/unstable/sql/SqlClient"
8
15
  import type { SqlError } from "effect/unstable/sql/SqlError"
9
16
 
10
17
  /**
11
- * @since 1.0.0
18
+ * @since 4.0.0
12
19
  */
13
20
  export * from "effect/unstable/sql/Migrator"
14
21
 
15
22
  /**
16
- * @category constructor
17
- * @since 1.0.0
23
+ * Runs SQL migrations for a SQLite database using the shared `Migrator` implementation and the current `SqlClient`.
24
+ *
25
+ * @category constructors
26
+ * @since 4.0.0
18
27
  */
19
28
  export const run: <R2 = never>(
20
29
  options: Migrator.MigratorOptions<R2>
@@ -67,8 +76,10 @@ export const run: <R2 = never>(
67
76
  })
68
77
 
69
78
  /**
70
- * @category constructor
71
- * @since 1.0.0
79
+ * Creates a layer that runs the configured SQLite migrations during layer construction and provides no services.
80
+ *
81
+ * @category constructors
82
+ * @since 4.0.0
72
83
  */
73
84
  export const layer = <R>(
74
85
  options: Migrator.MigratorOptions<R>
package/src/index.ts CHANGED
@@ -1,15 +1,15 @@
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
+ * @since 4.0.0
9
9
  */
10
10
  export * as SqliteClient from "./SqliteClient.ts"
11
11
 
12
12
  /**
13
- * @since 1.0.0
13
+ * @since 4.0.0
14
14
  */
15
15
  export * as SqliteMigrator from "./SqliteMigrator.ts"