@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 +1 -1
- package/dist/SqliteClient.d.ts +33 -16
- package/dist/SqliteClient.d.ts.map +1 -1
- package/dist/SqliteClient.js +133 -68
- package/dist/SqliteClient.js.map +1 -1
- package/dist/SqliteMigrator.d.ts +17 -6
- package/dist/SqliteMigrator.d.ts.map +1 -1
- package/dist/SqliteMigrator.js +9 -5
- package/dist/SqliteMigrator.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/package.json +7 -11
- package/src/SqliteClient.ts +161 -72
- package/src/SqliteMigrator.ts +17 -6
- package/src/index.ts +3 -3
package/README.md
CHANGED
package/dist/SqliteClient.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
12
|
-
*
|
|
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
|
-
*
|
|
17
|
-
*
|
|
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
|
|
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
|
|
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
|
-
*
|
|
43
|
-
*
|
|
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:
|
|
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
|
|
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
|
-
*
|
|
62
|
-
*
|
|
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
|
|
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
|
|
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":"
|
|
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"}
|
package/dist/SqliteClient.js
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
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
|
-
*
|
|
23
|
-
*
|
|
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
|
-
*
|
|
28
|
-
*
|
|
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__*/
|
|
42
|
+
export const SqliteClient = /*#__PURE__*/Context.Service("@effect/sql-sqlite-node/SqliteClient");
|
|
31
43
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
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
|
|
41
|
-
|
|
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.
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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 =>
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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 =
|
|
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
|
|
204
|
+
* @since 4.0.0
|
|
159
205
|
*/
|
|
160
|
-
export const layerConfig = config => 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
|
|
211
|
+
* @since 4.0.0
|
|
164
212
|
*/
|
|
165
|
-
export const layer = config => 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
|
package/dist/SqliteClient.js.map
CHANGED
|
@@ -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":"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","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":"AAAA;;;;;;;;;;;AAWA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,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,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,UAAU,MAAM,uCAAuC;AACnE,OAAO,KAAKC,MAAM,MAAM,+BAA+B;AAEvD,SAASC,mBAAmB,EAAEC,QAAQ,QAAQ,8BAA8B;AAC5E,OAAO,KAAKC,SAAS,MAAM,+BAA+B;AAC1D,SAASC,MAAM,IAAIC,cAAc,EAAEC,YAAY,QAAQ,aAAa;AAGpE,MAAMC,mBAAmB,GAAG,gBAAgB;AAE5C;;;;;;AAMA,OAAO,MAAMC,MAAM,GAAW,uCAAuC;AAqCrE;;;;;;AAMA,OAAO,MAAMC,YAAY,gBAAGnB,OAAO,CAACoB,OAAO,CAAe,sCAAsC,CAAC;AAyBjG;;;;;;AAMA,OAAO,MAAMC,IAAI,GACfC,OAA2B,IAE3BpB,MAAM,CAACqB,GAAG,CAAC,aAAS;EAClB,MAAMC,QAAQ,GAAGX,SAAS,CAACY,kBAAkB,CAACH,OAAO,CAACI,mBAAmB,CAAC;EAC1E,MAAMC,aAAa,GAAGL,OAAO,CAACM,oBAAoB,GAChDf,SAAS,CAACgB,iBAAiB,CACzBP,OAAO,CAACM,oBAAoB,CAC7B,CAACE,KAAK,GACPC,SAAS;EAEX,MAAMC,cAAc,GAAG9B,MAAM,CAACqB,GAAG,CAAC,aAAS;IACzC,MAAMU,KAAK,GAAG,OAAO/B,MAAM,CAAC+B,KAAK;IACjC,MAAMC,EAAE,GAAG,IAAIlB,YAAY,CAACM,OAAO,CAACa,QAAQ,EAAE;MAC5CC,QAAQ,EAAEd,OAAO,CAACe,QAAQ,IAAI,KAAK;MACnCC,cAAc,EAAE;KACjB,CAAC;IACF,OAAOhC,KAAK,CAACiC,YAAY,CAACN,KAAK,EAAE/B,MAAM,CAACsC,IAAI,CAAC,MAAMN,EAAE,CAACO,KAAK,EAAE,CAAC,CAAC;IAC/DP,EAAE,CAACQ,mBAAmB,CAAC,KAAK,CAAC;IAE7B,IAAIpB,OAAO,CAACqB,UAAU,KAAK,IAAI,EAAE;MAC/BT,EAAE,CAACU,IAAI,CAAC,2BAA2B,CAAC;IACtC;IAEA,MAAMC,YAAY,GAAG,OAAO/C,KAAK,CAACuB,IAAI,CAAC;MACrCyB,QAAQ,EAAExB,OAAO,CAACyB,gBAAgB,IAAI,GAAG;MACzCC,UAAU,EAAE1B,OAAO,CAAC2B,eAAe,IAAIhD,QAAQ,CAACiD,OAAO,CAAC,EAAE,CAAC;MAC3DC,MAAM,EAAGC,GAAW,IAClBlD,MAAM,CAACmD,GAAG,CAAC;QACTA,GAAG,EAAEA,CAAA,KAAMnB,EAAE,CAACoB,OAAO,CAACF,GAAG,CAAC;QAC1BG,KAAK,EAAGC,KAAK,IAAK,IAAI5C,QAAQ,CAAC;UAAE6C,MAAM,EAAEC,aAAa,CAACF,KAAK,EAAE,6BAA6B,EAAE,SAAS;QAAC,CAAE;OAC1G;KACJ,CAAC;IAEF,MAAMG,YAAY,GAAGA,CACnBC,SAAwB,EACxBC,MAA8B,EAC9BC,GAAY,KAEZ5D,MAAM,CAAC6D,SAAS,CAAgCC,KAAK,IAAI;MACvD,MAAMC,eAAe,GAAGjE,OAAO,CAACkE,GAAG,CAACF,KAAK,CAACG,OAAO,EAAEzD,MAAM,CAAC0D,YAAY,CAAC;MACvE,OAAOlE,MAAM,CAACmD,GAAG,CAAC;QAChBA,GAAG,EAAEA,CAAA,KAAK;UACRO,SAAS,CAACS,cAAc,CAACJ,eAAe,CAAC;UACzC,IAAIL,SAAS,CAACU,OAAO,EAAE,CAACC,MAAM,GAAG,CAAC,EAAE;YAClC,OAAOX,SAAS,CAACY,GAAG,CAAC,GAAIX,MAAqB,CAAuB;UACvE;UACA,MAAMY,MAAM,GAAGb,SAAS,CAACc,GAAG,CAAC,GAAIb,MAAqB,CAAC;UACvD,OAAOC,GAAG,GAAG;YAAEa,OAAO,EAAEF,MAAM,CAACE,OAAO;YAAEC,eAAe,EAAEH,MAAM,CAACG;UAAe,CAAS,GAAG,EAAE;QAC/F,CAAC;QACDrB,KAAK,EAAGC,KAAK,IAAK,IAAI5C,QAAQ,CAAC;UAAE6C,MAAM,EAAEC,aAAa,CAACF,KAAK,EAAE,6BAA6B,EAAE,SAAS;QAAC,CAAE;OAC1G,CAAC;IACJ,CAAC,CAAC;IAEJ,MAAMqB,kBAAkB,GAAGA,CACzBjB,SAAwB,EACxBC,MAA8B,KAE9B3D,MAAM,CAAC6D,SAAS,CAAmDC,KAAK,IAAI;MAC1E,MAAMC,eAAe,GAAGjE,OAAO,CAACkE,GAAG,CAACF,KAAK,CAACG,OAAO,EAAEzD,MAAM,CAAC0D,YAAY,CAAC;MACvE,OAAOlE,MAAM,CAACmD,GAAG,CAAC;QAChBA,GAAG,EAAEA,CAAA,KAAK;UACRO,SAAS,CAACS,cAAc,CAACJ,eAAe,CAAC;UACzC,IAAIL,SAAS,CAACU,OAAO,EAAE,CAACC,MAAM,GAAG,CAAC,EAAE;YAClC,OAAOX,SAAS,CAACY,GAAG,CAAC,GAAIX,MAAqB,CAAqD;UACrG;UACAD,SAAS,CAACc,GAAG,CAAC,GAAIb,MAAqB,CAAC;UACxC,OAAO,EAAE;QACX,CAAC;QACDN,KAAK,EAAGC,KAAK,IAAK,IAAI5C,QAAQ,CAAC;UAAE6C,MAAM,EAAEC,aAAa,CAACF,KAAK,EAAE,6BAA6B,EAAE,SAAS;QAAC,CAAE;OAC1G,CAAC;IACJ,CAAC,CAAC;IAEJ,MAAMsB,4BAA4B,GAAGA,CACnClB,SAAwB,EACxBC,MAA8B,KAE9B3D,MAAM,CAAC6D,SAAS,CAAmDC,KAAK,IAAI;MAC1E,MAAMC,eAAe,GAAGjE,OAAO,CAACkE,GAAG,CAACF,KAAK,CAACG,OAAO,EAAEzD,MAAM,CAAC0D,YAAY,CAAC;MACvE,OAAOlE,MAAM,CAACmD,GAAG,CAAC;QAChBA,GAAG,EAAEA,CAAA,KAAK;UACRO,SAAS,CAACS,cAAc,CAACJ,eAAe,CAAC;UACzCL,SAAS,CAACmB,eAAe,CAAC,IAAI,CAAC;UAC/B,IAAInB,SAAS,CAACU,OAAO,EAAE,CAACC,MAAM,GAAG,CAAC,EAAE;YAClC,OAAOX,SAAS,CAACY,GAAG,CAAC,GAAIX,MAAqB,CAAqD;UACrG;UACAD,SAAS,CAACc,GAAG,CAAC,GAAIb,MAAqB,CAAC;UACxC,OAAO,EAAE;QACX,CAAC;QACDN,KAAK,EAAGC,KAAK,IAAK,IAAI5C,QAAQ,CAAC;UAAE6C,MAAM,EAAEC,aAAa,CAACF,KAAK,EAAE,6BAA6B,EAAE,SAAS;QAAC,CAAE;OAC1G,CAAC;IACJ,CAAC,CAAC;IAEJ,MAAMkB,GAAG,GAAGA,CACVtB,GAAW,EACXS,MAA8B,EAC9BC,GAAG,GAAG,KAAK,KAEX5D,MAAM,CAAC8E,OAAO,CACZlF,KAAK,CAACoE,GAAG,CAACrB,YAAY,EAAEO,GAAG,CAAC,EAC3B6B,CAAC,IAAKtB,YAAY,CAACsB,CAAC,EAAEpB,MAAM,EAAEC,GAAG,CAAC,CACpC;IAEH,MAAMoB,SAAS,GAAGA,CAChB9B,GAAW,EACXS,MAA8B,KAE9B3D,MAAM,CAACiF,iBAAiB,CACtBrF,KAAK,CAACoE,GAAG,CAACrB,YAAY,EAAEO,GAAG,CAAC,EAC3BQ,SAAS,IAAI;MACZA,SAAS,CAACmB,eAAe,CAAC,IAAI,CAAC;MAC/B,OAAOF,kBAAkB,CAACjB,SAAS,EAAEC,MAAM,CAAC;IAC9C,CAAC,EACAD,SAAS,IAAK1D,MAAM,CAACsC,IAAI,CAAC,MAAMoB,SAAS,CAACmB,eAAe,CAAC,KAAK,CAAC,CAAC,CACnE;IAEH,MAAMK,mBAAmB,GAAGA,CAC1BhC,GAAW,EACXS,MAA8B,KAC3BiB,4BAA4B,CAAC5C,EAAE,CAACoB,OAAO,CAACF,GAAG,CAAC,EAAES,MAAM,CAAC;IAE1D,OAAOzD,QAAQ,CAAmB;MAChCiF,OAAOA,CAACjC,GAAG,EAAES,MAAM,EAAElC,aAAa;QAChC,OAAOA,aAAa,GAChBzB,MAAM,CAACoF,GAAG,CAACZ,GAAG,CAACtB,GAAG,EAAES,MAAM,CAAC,EAAElC,aAAa,CAAC,GAC3C+C,GAAG,CAACtB,GAAG,EAAES,MAAM,CAAC;MACtB,CAAC;MACD0B,UAAUA,CAACnC,GAAG,EAAES,MAAM;QACpB,OAAOa,GAAG,CAACtB,GAAG,EAAES,MAAM,EAAE,IAAI,CAAC;MAC/B,CAAC;MACD2B,aAAaA,CAACpC,GAAG,EAAES,MAAM;QACvB,OAAOqB,SAAS,CAAC9B,GAAG,EAAES,MAAM,CAAC;MAC/B,CAAC;MACD4B,uBAAuBA,CAACrC,GAAG,EAAES,MAAM;QACjC,OAAOuB,mBAAmB,CAAChC,GAAG,EAAES,MAAM,CAAC;MACzC,CAAC;MACD6B,iBAAiBA,CAACtC,GAAG,EAAES,MAAM,EAAElC,aAAa;QAC1C,MAAMgE,MAAM,GAAGhC,YAAY,CAACzB,EAAE,CAACoB,OAAO,CAACF,GAAG,CAAC,EAAES,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC;QACjE,OAAOlC,aAAa,GAAGzB,MAAM,CAACoF,GAAG,CAACK,MAAM,EAAEhE,aAAa,CAAC,GAAGgE,MAAM;MACnE,CAAC;MACDC,aAAaA,CAACC,IAAI,EAAEC,OAAO;QACzB,OAAOtF,MAAM,CAACuF,GAAG,CAAC,+BAA+B,CAAC;MACpD,CAAC;MACDjF,MAAMA,CAACkF,WAAW;QAChB,OAAO9F,MAAM,CAAC+F,OAAO,CAAC,MAAK;UACzB,IAAIC,UAAU,GAAG,CAAC;UAClB,OAAOhG,MAAM,CAACiG,UAAU,CAAC;YACvB9C,GAAG,EAAEA,CAAA,KACHtC,cAAc,CAACmB,EAAE,EAAE8D,WAAW,EAAE;cAC9BI,QAAQ,EAAGA,QAAQ,IAAI;gBACrBF,UAAU,GAAGE,QAAQ,CAACF,UAAU;cAClC;aACD,CAAC,CAACG,IAAI,CAAEC,KAAK,KAAsB;cAAEJ,UAAU,EAAEA,UAAU,IAAII,KAAK;cAAEC,cAAc,EAAE;YAAC,CAAE,CAAC,CAAC;YAC9FhD,KAAK,EAAGC,KAAK,IAAK,IAAI5C,QAAQ,CAAC;cAAE6C,MAAM,EAAEC,aAAa,CAACF,KAAK,EAAE,2BAA2B,EAAE,QAAQ;YAAC,CAAE;WACvG,CAAC;QACJ,CAAC,CAAC;MACJ,CAAC;MACDgD,aAAaA,CAACC,IAAI;QAChB,OAAOvG,MAAM,CAACiF,iBAAiB,CAC7BjF,MAAM,CAACsC,IAAI,CAAC,MAAMN,EAAE,CAACQ,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAC/C,MACExC,MAAM,CAACmD,GAAG,CAAC;UACTA,GAAG,EAAEA,CAAA,KAAMnB,EAAE,CAACsE,aAAa,CAACC,IAAI,CAAC;UACjClD,KAAK,EAAGC,KAAK,IACX,IAAI5C,QAAQ,CAAC;YAAE6C,MAAM,EAAEC,aAAa,CAACF,KAAK,EAAE,0BAA0B,EAAE,eAAe;UAAC,CAAE;SAC7F,CAAC,EACJ,MAAMtD,MAAM,CAACsC,IAAI,CAAC,MAAMN,EAAE,CAACQ,mBAAmB,CAAC,KAAK,CAAC,CAAC,CACvD;MACH;KACD,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMgE,SAAS,GAAG,OAAOnG,SAAS,CAACc,IAAI,CAAC,CAAC,CAAC;EAC1C,MAAMsF,UAAU,GAAG,OAAO3E,cAAc;EAExC,MAAM4E,QAAQ,GAAGF,SAAS,CAACG,WAAW,CAAC,CAAC,CAAC,CAAC3G,MAAM,CAAC4G,OAAO,CAACH,UAAU,CAAC,CAAC;EACrE,MAAMI,mBAAmB,GAAG7G,MAAM,CAAC8G,mBAAmB,CAAEC,OAAO,IAAI;IACjE,MAAMjD,KAAK,GAAG7D,KAAK,CAAC+G,UAAU,EAAG;IACjC,MAAMjF,KAAK,GAAGjC,OAAO,CAACmH,SAAS,CAACnD,KAAK,CAACG,OAAO,EAAE7D,KAAK,CAACA,KAAK,CAAC;IAC3D,OAAOJ,MAAM,CAACkH,EAAE,CACdlH,MAAM,CAACmH,GAAG,CACRJ,OAAO,CAACP,SAAS,CAACY,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1B,MAAMhH,KAAK,CAACiC,YAAY,CAACN,KAAK,EAAEyE,SAAS,CAACa,OAAO,CAAC,CAAC,CAAC,CAAC,CACtD,EACDZ,UAAU,CACX;EACH,CAAC,CAAC;EAEF,OAAOa,MAAM,CAACC,MAAM,CACjB,OAAO/G,MAAM,CAACW,IAAI,CAAC;IAClBuF,QAAQ;IACRpF,QAAQ;IACRuF,mBAAmB;IACnBW,cAAc,EAAE,CACd,IAAIpG,OAAO,CAACoG,cAAc,GAAGF,MAAM,CAACG,OAAO,CAACrG,OAAO,CAACoG,cAAc,CAAC,GAAG,EAAE,CAAC,EACzE,CAACzG,mBAAmB,EAAE,QAAQ,CAAC,CAChC;IACDU;GACD,CAAC,EACF;IACE,CAACT,MAAM,GAAGA,MAAgB;IAC1B0G,MAAM,EAAEtG,OAAO;IACfR,MAAM,EAAGkF,WAAmB,IAAK9F,MAAM,CAAC8E,OAAO,CAAC4B,QAAQ,EAAGiB,CAAC,IAAKA,CAAC,CAAC/G,MAAM,CAACkF,WAAW,CAAC,CAAC;IACvFQ,aAAa,EAAGC,IAAY,IAAKvG,MAAM,CAAC8E,OAAO,CAAC4B,QAAQ,EAAGiB,CAAC,IAAKA,CAAC,CAACrB,aAAa,CAACC,IAAI,CAAC;GACvF,CACF;AACH,CAAC,CAAC;AAEJ;;;;;;AAMA,OAAO,MAAMqB,WAAW,GACtBF,MAAuC,IAEvCvH,KAAK,CAAC0H,aAAa,CACjBhI,MAAM,CAACiI,MAAM,CAACJ,MAAM,CAAC,CAACK,IAAI,CACxB/H,MAAM,CAAC8E,OAAO,CAAC3D,IAAI,CAAC,EACpBnB,MAAM,CAACoF,GAAG,CAAE4C,MAAM,IAChBlI,OAAO,CAACqB,IAAI,CAACF,YAAY,EAAE+G,MAAM,CAAC,CAACD,IAAI,CACrCjI,OAAO,CAACmI,GAAG,CAACzH,MAAM,CAAC0H,SAAS,EAAEF,MAAM,CAAC,CACtC,CACF,CACF,CACF,CAACD,IAAI,CAAC5H,KAAK,CAACgI,OAAO,CAAC5H,UAAU,CAAC6H,KAAK,CAAC,CAAC;AAEzC;;;;;;AAMA,OAAO,MAAMA,KAAK,GAChBV,MAA0B,IAE1BvH,KAAK,CAAC0H,aAAa,CACjB7H,MAAM,CAACoF,GAAG,CAACjE,IAAI,CAACuG,MAAM,CAAC,EAAGM,MAAM,IAC9BlI,OAAO,CAACqB,IAAI,CAACF,YAAY,EAAE+G,MAAM,CAAC,CAACD,IAAI,CACrCjI,OAAO,CAACmI,GAAG,CAACzH,MAAM,CAAC0H,SAAS,EAAEF,MAAM,CAAC,CACtC,CAAC,CACL,CAACD,IAAI,CAAC5H,KAAK,CAACgI,OAAO,CAAC5H,UAAU,CAAC6H,KAAK,CAAC,CAAC;AAEzC;AAEA,MAAM5E,aAAa,GAAGA,CAACF,KAAc,EAAE+E,OAAe,EAAEC,SAAiB,KACvE7H,mBAAmB,CAAC8H,oBAAoB,CAACjF,KAAK,CAAC,EAAE;EAAE+E,OAAO;EAAEC;AAAS,CAAE,CAAC;AAE1E,MAAMC,oBAAoB,GAAIjF,KAAc,IAAa;EACvD,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,IAAI,EAAE,SAAS,IAAIA,KAAK,CAAC,IAAI,OAAO,IAAIA,KAAK,EAAE;IAC5F,OAAOA,KAAK;EACd;EACA,MAAMkF,OAAO,GAAIlF,KAAuC,CAACkF,OAAO;EAChE,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC/B,OAAOlF,KAAK;EACd;EACA,OAAOgE,MAAM,CAACC,MAAM,CAACjE,KAAK,EAAE;IAAEmF,KAAK,EAAED;EAAO,CAAE,CAAC;AACjD,CAAC","ignoreList":[]}
|
package/dist/SqliteMigrator.d.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
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
|
|
17
|
+
* @since 4.0.0
|
|
11
18
|
*/
|
|
12
19
|
export * from "effect/unstable/sql/Migrator";
|
|
13
20
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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
|
-
*
|
|
20
|
-
*
|
|
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
|
|
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"}
|
package/dist/SqliteMigrator.js
CHANGED
|
@@ -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
|
|
4
|
+
* @since 4.0.0
|
|
5
5
|
*/
|
|
6
6
|
export * from "effect/unstable/sql/Migrator";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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
|
-
*
|
|
56
|
-
*
|
|
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":"
|
|
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
|
|
2
|
+
* @since 4.0.0
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* @since
|
|
5
|
+
* @since 4.0.0
|
|
6
6
|
*/
|
|
7
7
|
export * as SqliteClient from "./SqliteClient.ts";
|
|
8
8
|
/**
|
|
9
|
-
* @since
|
|
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
|
|
2
|
+
* @since 4.0.0
|
|
3
3
|
*/
|
|
4
4
|
// @barrel: Auto-generated exports. Do not edit manually.
|
|
5
5
|
/**
|
|
6
|
-
* @since
|
|
6
|
+
* @since 4.0.0
|
|
7
7
|
*/
|
|
8
8
|
export * as SqliteClient from "./SqliteClient.js";
|
|
9
9
|
/**
|
|
10
|
-
* @since
|
|
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.
|
|
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
|
|
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
|
|
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/
|
|
47
|
-
"@effect/platform-node": "^4.0.0-beta.
|
|
48
|
-
"effect": "^4.0.0-beta.
|
|
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.
|
|
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",
|
package/src/SqliteClient.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
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
|
-
*
|
|
26
|
-
*
|
|
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
|
-
*
|
|
32
|
-
*
|
|
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
|
|
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
|
|
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
|
-
*
|
|
62
|
-
*
|
|
77
|
+
* Service tag for the node SQLite client implementation.
|
|
78
|
+
*
|
|
79
|
+
* @category services
|
|
80
|
+
* @since 4.0.0
|
|
63
81
|
*/
|
|
64
|
-
export const 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
|
|
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
|
-
*
|
|
90
|
-
*
|
|
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
|
|
106
|
-
|
|
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.
|
|
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,
|
|
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:
|
|
148
|
+
statement: StatementSync,
|
|
126
149
|
params: ReadonlyArray<unknown>,
|
|
127
150
|
raw: boolean
|
|
128
151
|
) =>
|
|
129
152
|
Effect.withFiber<ReadonlyArray<any>, SqlError>((fiber) => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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.
|
|
202
|
-
|
|
203
|
-
|
|
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.
|
|
208
|
-
|
|
209
|
-
|
|
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 =
|
|
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
|
|
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.
|
|
260
|
-
Config.unwrap(config).
|
|
330
|
+
Layer.effectContext(
|
|
331
|
+
Config.unwrap(config).pipe(
|
|
261
332
|
Effect.flatMap(make),
|
|
262
333
|
Effect.map((client) =>
|
|
263
|
-
|
|
264
|
-
|
|
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
|
|
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.
|
|
350
|
+
Layer.effectContext(
|
|
278
351
|
Effect.map(make(config), (client) =>
|
|
279
|
-
|
|
280
|
-
|
|
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
|
+
}
|
package/src/SqliteMigrator.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
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
|
|
18
|
+
* @since 4.0.0
|
|
12
19
|
*/
|
|
13
20
|
export * from "effect/unstable/sql/Migrator"
|
|
14
21
|
|
|
15
22
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
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
|
-
*
|
|
71
|
-
*
|
|
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
|
|
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
|
|
8
|
+
* @since 4.0.0
|
|
9
9
|
*/
|
|
10
10
|
export * as SqliteClient from "./SqliteClient.ts"
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* @since
|
|
13
|
+
* @since 4.0.0
|
|
14
14
|
*/
|
|
15
15
|
export * as SqliteMigrator from "./SqliteMigrator.ts"
|