@effect/sql-sqlite-node 4.0.0-beta.6 → 4.0.0-beta.62
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/dist/SqliteClient.d.ts +3 -3
- package/dist/SqliteClient.d.ts.map +1 -1
- package/dist/SqliteClient.js +17 -19
- package/dist/SqliteClient.js.map +1 -1
- package/package.json +5 -5
- package/src/SqliteClient.ts +22 -18
package/dist/SqliteClient.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
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";
|
|
@@ -42,7 +42,7 @@ export interface BackupMetadata {
|
|
|
42
42
|
* @category tags
|
|
43
43
|
* @since 1.0.0
|
|
44
44
|
*/
|
|
45
|
-
export declare const SqliteClient:
|
|
45
|
+
export declare const SqliteClient: Context.Service<SqliteClient, SqliteClient>;
|
|
46
46
|
/**
|
|
47
47
|
* @category models
|
|
48
48
|
* @since 1.0.0
|
|
@@ -51,7 +51,7 @@ export interface SqliteClientConfig {
|
|
|
51
51
|
readonly filename: string;
|
|
52
52
|
readonly readonly?: boolean | undefined;
|
|
53
53
|
readonly prepareCacheSize?: number | undefined;
|
|
54
|
-
readonly prepareCacheTTL?: Duration.
|
|
54
|
+
readonly prepareCacheTTL?: Duration.Input | undefined;
|
|
55
55
|
readonly disableWAL?: boolean | undefined;
|
|
56
56
|
readonly spanAttributes?: Record<string, unknown> | undefined;
|
|
57
57
|
readonly transformResultNames?: ((str: string) => string) | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"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"}
|
package/dist/SqliteClient.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import Sqlite from "better-sqlite3";
|
|
5
5
|
import * as Cache from "effect/Cache";
|
|
6
6
|
import * as Config from "effect/Config";
|
|
7
|
+
import * as Context from "effect/Context";
|
|
7
8
|
import * as Duration from "effect/Duration";
|
|
8
9
|
import * as Effect from "effect/Effect";
|
|
9
10
|
import * as Fiber from "effect/Fiber";
|
|
@@ -11,13 +12,16 @@ import { identity } from "effect/Function";
|
|
|
11
12
|
import * as Layer from "effect/Layer";
|
|
12
13
|
import * as Scope from "effect/Scope";
|
|
13
14
|
import * as Semaphore from "effect/Semaphore";
|
|
14
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
15
15
|
import * as Stream from "effect/Stream";
|
|
16
16
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
17
17
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
18
|
-
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
18
|
+
import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError";
|
|
19
19
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
20
20
|
const ATTR_DB_SYSTEM_NAME = "db.system.name";
|
|
21
|
+
const classifyError = (cause, message, operation) => classifySqliteError(cause, {
|
|
22
|
+
message,
|
|
23
|
+
operation
|
|
24
|
+
});
|
|
21
25
|
/**
|
|
22
26
|
* @category type ids
|
|
23
27
|
* @since 1.0.0
|
|
@@ -27,7 +31,7 @@ export const TypeId = "~@effect/sql-sqlite-node/SqliteClient";
|
|
|
27
31
|
* @category tags
|
|
28
32
|
* @since 1.0.0
|
|
29
33
|
*/
|
|
30
|
-
export const SqliteClient = /*#__PURE__*/
|
|
34
|
+
export const SqliteClient = /*#__PURE__*/Context.Service("@effect/sql-sqlite-node/SqliteClient");
|
|
31
35
|
/**
|
|
32
36
|
* @category constructor
|
|
33
37
|
* @since 1.0.0
|
|
@@ -50,13 +54,12 @@ export const make = options => Effect.gen(function* () {
|
|
|
50
54
|
lookup: sql => Effect.try({
|
|
51
55
|
try: () => db.prepare(sql),
|
|
52
56
|
catch: cause => new SqlError({
|
|
53
|
-
cause,
|
|
54
|
-
message: "Failed to prepare statement "
|
|
57
|
+
reason: classifyError(cause, "Failed to prepare statement", "prepare")
|
|
55
58
|
})
|
|
56
59
|
})
|
|
57
60
|
});
|
|
58
61
|
const runStatement = (statement, params, raw) => Effect.withFiber(fiber => {
|
|
59
|
-
if (
|
|
62
|
+
if (Context.get(fiber.context, Client.SafeIntegers)) {
|
|
60
63
|
statement.safeIntegers(true);
|
|
61
64
|
}
|
|
62
65
|
try {
|
|
@@ -67,8 +70,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
67
70
|
return Effect.succeed(raw ? result : []);
|
|
68
71
|
} catch (cause) {
|
|
69
72
|
return Effect.fail(new SqlError({
|
|
70
|
-
cause,
|
|
71
|
-
message: "Failed to execute statement"
|
|
73
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
72
74
|
}));
|
|
73
75
|
}
|
|
74
76
|
});
|
|
@@ -83,8 +85,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
83
85
|
return [];
|
|
84
86
|
},
|
|
85
87
|
catch: cause => new SqlError({
|
|
86
|
-
cause,
|
|
87
|
-
message: "Failed to execute statement"
|
|
88
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
88
89
|
})
|
|
89
90
|
}), statement => Effect.sync(() => statement.reader && statement.raw(false)));
|
|
90
91
|
return identity({
|
|
@@ -107,16 +108,14 @@ export const make = options => Effect.gen(function* () {
|
|
|
107
108
|
export: Effect.try({
|
|
108
109
|
try: () => db.serialize(),
|
|
109
110
|
catch: cause => new SqlError({
|
|
110
|
-
cause,
|
|
111
|
-
message: "Failed to export database"
|
|
111
|
+
reason: classifyError(cause, "Failed to export database", "export")
|
|
112
112
|
})
|
|
113
113
|
}),
|
|
114
114
|
backup(destination) {
|
|
115
115
|
return Effect.tryPromise({
|
|
116
116
|
try: () => db.backup(destination),
|
|
117
117
|
catch: cause => new SqlError({
|
|
118
|
-
cause,
|
|
119
|
-
message: "Failed to backup database"
|
|
118
|
+
reason: classifyError(cause, "Failed to backup database", "backup")
|
|
120
119
|
})
|
|
121
120
|
});
|
|
122
121
|
},
|
|
@@ -124,8 +123,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
124
123
|
return Effect.try({
|
|
125
124
|
try: () => db.loadExtension(path),
|
|
126
125
|
catch: cause => new SqlError({
|
|
127
|
-
cause,
|
|
128
|
-
message: "Failed to load extension"
|
|
126
|
+
reason: classifyError(cause, "Failed to load extension", "loadExtension")
|
|
129
127
|
})
|
|
130
128
|
});
|
|
131
129
|
}
|
|
@@ -136,7 +134,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
136
134
|
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
|
|
137
135
|
const transactionAcquirer = Effect.uninterruptibleMask(restore => {
|
|
138
136
|
const fiber = Fiber.getCurrent();
|
|
139
|
-
const scope =
|
|
137
|
+
const scope = Context.getUnsafe(fiber.context, Scope.Scope);
|
|
140
138
|
return Effect.as(Effect.tap(restore(semaphore.take(1)), () => Scope.addFinalizer(scope, semaphore.release(1))), connection);
|
|
141
139
|
});
|
|
142
140
|
return Object.assign(yield* Client.make({
|
|
@@ -157,10 +155,10 @@ export const make = options => Effect.gen(function* () {
|
|
|
157
155
|
* @category layers
|
|
158
156
|
* @since 1.0.0
|
|
159
157
|
*/
|
|
160
|
-
export const layerConfig = config => Layer.
|
|
158
|
+
export const layerConfig = config => Layer.effectContext(Config.unwrap(config).asEffect().pipe(Effect.flatMap(make), Effect.map(client => Context.make(SqliteClient, client).pipe(Context.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer));
|
|
161
159
|
/**
|
|
162
160
|
* @category layers
|
|
163
161
|
* @since 1.0.0
|
|
164
162
|
*/
|
|
165
|
-
export const layer = config => Layer.
|
|
163
|
+
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));
|
|
166
164
|
//# 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","
|
|
1
|
+
{"version":3,"file":"SqliteClient.js","names":["Sqlite","Cache","Config","Context","Duration","Effect","Fiber","identity","Layer","Scope","Semaphore","Stream","Reactivity","Client","classifySqliteError","SqlError","Statement","ATTR_DB_SYSTEM_NAME","classifyError","cause","message","operation","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","reason","runStatement","statement","params","raw","withFiber","fiber","get","context","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","effectContext","unwrap","asEffect","pipe","client","add","SqlClient","provide","layer"],"sources":["../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/sql-sqlite-node",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.62",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "A SQLite toolkit for Effect",
|
|
@@ -44,14 +44,14 @@
|
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/better-sqlite3": "^7.6.13",
|
|
47
|
-
"@effect/platform-node": "^4.0.0-beta.
|
|
48
|
-
"effect": "^4.0.0-beta.
|
|
47
|
+
"@effect/platform-node": "^4.0.0-beta.62",
|
|
48
|
+
"effect": "^4.0.0-beta.62"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"effect": "^4.0.0-beta.
|
|
51
|
+
"effect": "^4.0.0-beta.62"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"better-sqlite3": "^12.
|
|
54
|
+
"better-sqlite3": "^12.8.0"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
57
|
"codegen": "effect-utils codegen",
|
package/src/SqliteClient.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import Sqlite from "better-sqlite3"
|
|
5
5
|
import * as Cache from "effect/Cache"
|
|
6
6
|
import * as Config from "effect/Config"
|
|
7
|
+
import * as Context from "effect/Context"
|
|
7
8
|
import * as Duration from "effect/Duration"
|
|
8
9
|
import * as Effect from "effect/Effect"
|
|
9
10
|
import * as Fiber from "effect/Fiber"
|
|
@@ -11,16 +12,18 @@ import { identity } from "effect/Function"
|
|
|
11
12
|
import * as Layer from "effect/Layer"
|
|
12
13
|
import * as Scope from "effect/Scope"
|
|
13
14
|
import * as Semaphore from "effect/Semaphore"
|
|
14
|
-
import * as ServiceMap from "effect/ServiceMap"
|
|
15
15
|
import * as Stream from "effect/Stream"
|
|
16
16
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity"
|
|
17
17
|
import * as Client from "effect/unstable/sql/SqlClient"
|
|
18
18
|
import type { Connection } from "effect/unstable/sql/SqlConnection"
|
|
19
|
-
import { SqlError } from "effect/unstable/sql/SqlError"
|
|
19
|
+
import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError"
|
|
20
20
|
import * as Statement from "effect/unstable/sql/Statement"
|
|
21
21
|
|
|
22
22
|
const ATTR_DB_SYSTEM_NAME = "db.system.name"
|
|
23
23
|
|
|
24
|
+
const classifyError = (cause: unknown, message: string, operation: string) =>
|
|
25
|
+
classifySqliteError(cause, { message, operation })
|
|
26
|
+
|
|
24
27
|
/**
|
|
25
28
|
* @category type ids
|
|
26
29
|
* @since 1.0.0
|
|
@@ -61,7 +64,7 @@ export interface BackupMetadata {
|
|
|
61
64
|
* @category tags
|
|
62
65
|
* @since 1.0.0
|
|
63
66
|
*/
|
|
64
|
-
export const SqliteClient =
|
|
67
|
+
export const SqliteClient = Context.Service<SqliteClient>("@effect/sql-sqlite-node/SqliteClient")
|
|
65
68
|
|
|
66
69
|
/**
|
|
67
70
|
* @category models
|
|
@@ -71,7 +74,7 @@ export interface SqliteClientConfig {
|
|
|
71
74
|
readonly filename: string
|
|
72
75
|
readonly readonly?: boolean | undefined
|
|
73
76
|
readonly prepareCacheSize?: number | undefined
|
|
74
|
-
readonly prepareCacheTTL?: Duration.
|
|
77
|
+
readonly prepareCacheTTL?: Duration.Input | undefined
|
|
75
78
|
readonly disableWAL?: boolean | undefined
|
|
76
79
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
77
80
|
|
|
@@ -117,7 +120,7 @@ export const make = (
|
|
|
117
120
|
lookup: (sql: string) =>
|
|
118
121
|
Effect.try({
|
|
119
122
|
try: () => db.prepare(sql),
|
|
120
|
-
catch: (cause) => new SqlError({ cause,
|
|
123
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to prepare statement", "prepare") })
|
|
121
124
|
})
|
|
122
125
|
})
|
|
123
126
|
|
|
@@ -127,7 +130,7 @@ export const make = (
|
|
|
127
130
|
raw: boolean
|
|
128
131
|
) =>
|
|
129
132
|
Effect.withFiber<ReadonlyArray<any>, SqlError>((fiber) => {
|
|
130
|
-
if (
|
|
133
|
+
if (Context.get(fiber.context, Client.SafeIntegers)) {
|
|
131
134
|
statement.safeIntegers(true)
|
|
132
135
|
}
|
|
133
136
|
try {
|
|
@@ -137,7 +140,7 @@ export const make = (
|
|
|
137
140
|
const result = statement.run(...params)
|
|
138
141
|
return Effect.succeed(raw ? result as unknown as ReadonlyArray<any> : [])
|
|
139
142
|
} catch (cause) {
|
|
140
|
-
return Effect.fail(new SqlError({ cause,
|
|
143
|
+
return Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") }))
|
|
141
144
|
}
|
|
142
145
|
})
|
|
143
146
|
|
|
@@ -169,7 +172,7 @@ export const make = (
|
|
|
169
172
|
statement.run(...params)
|
|
170
173
|
return []
|
|
171
174
|
},
|
|
172
|
-
catch: (cause) => new SqlError({ cause,
|
|
175
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
173
176
|
}),
|
|
174
177
|
(statement) => Effect.sync(() => statement.reader && statement.raw(false))
|
|
175
178
|
)
|
|
@@ -195,18 +198,19 @@ export const make = (
|
|
|
195
198
|
},
|
|
196
199
|
export: Effect.try({
|
|
197
200
|
try: () => db.serialize(),
|
|
198
|
-
catch: (cause) => new SqlError({ cause,
|
|
201
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to export database", "export") })
|
|
199
202
|
}),
|
|
200
203
|
backup(destination) {
|
|
201
204
|
return Effect.tryPromise({
|
|
202
205
|
try: () => db.backup(destination),
|
|
203
|
-
catch: (cause) => new SqlError({ cause,
|
|
206
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to backup database", "backup") })
|
|
204
207
|
})
|
|
205
208
|
},
|
|
206
209
|
loadExtension(path) {
|
|
207
210
|
return Effect.try({
|
|
208
211
|
try: () => db.loadExtension(path),
|
|
209
|
-
catch: (cause) =>
|
|
212
|
+
catch: (cause) =>
|
|
213
|
+
new SqlError({ reason: classifyError(cause, "Failed to load extension", "loadExtension") })
|
|
210
214
|
})
|
|
211
215
|
}
|
|
212
216
|
})
|
|
@@ -218,7 +222,7 @@ export const make = (
|
|
|
218
222
|
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
|
|
219
223
|
const transactionAcquirer = Effect.uninterruptibleMask((restore) => {
|
|
220
224
|
const fiber = Fiber.getCurrent()!
|
|
221
|
-
const scope =
|
|
225
|
+
const scope = Context.getUnsafe(fiber.context, Scope.Scope)
|
|
222
226
|
return Effect.as(
|
|
223
227
|
Effect.tap(
|
|
224
228
|
restore(semaphore.take(1)),
|
|
@@ -256,12 +260,12 @@ export const make = (
|
|
|
256
260
|
export const layerConfig = (
|
|
257
261
|
config: Config.Wrap<SqliteClientConfig>
|
|
258
262
|
): Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError> =>
|
|
259
|
-
Layer.
|
|
263
|
+
Layer.effectContext(
|
|
260
264
|
Config.unwrap(config).asEffect().pipe(
|
|
261
265
|
Effect.flatMap(make),
|
|
262
266
|
Effect.map((client) =>
|
|
263
|
-
|
|
264
|
-
|
|
267
|
+
Context.make(SqliteClient, client).pipe(
|
|
268
|
+
Context.add(Client.SqlClient, client)
|
|
265
269
|
)
|
|
266
270
|
)
|
|
267
271
|
)
|
|
@@ -274,9 +278,9 @@ export const layerConfig = (
|
|
|
274
278
|
export const layer = (
|
|
275
279
|
config: SqliteClientConfig
|
|
276
280
|
): Layer.Layer<SqliteClient | Client.SqlClient> =>
|
|
277
|
-
Layer.
|
|
281
|
+
Layer.effectContext(
|
|
278
282
|
Effect.map(make(config), (client) =>
|
|
279
|
-
|
|
280
|
-
|
|
283
|
+
Context.make(SqliteClient, client).pipe(
|
|
284
|
+
Context.add(Client.SqlClient, client)
|
|
281
285
|
))
|
|
282
286
|
).pipe(Layer.provide(Reactivity.layer))
|