@effect/sql-sqlite-bun 4.0.0-beta.5 → 4.0.0-beta.51
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 +2 -2
- package/dist/SqliteClient.d.ts.map +1 -1
- package/dist/SqliteClient.js +18 -17
- package/dist/SqliteClient.js.map +1 -1
- package/package.json +5 -5
- package/src/SqliteClient.ts +22 -17
package/dist/SqliteClient.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as Config from "effect/Config";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
2
3
|
import * as Effect from "effect/Effect";
|
|
3
4
|
import * as Layer from "effect/Layer";
|
|
4
5
|
import * as Scope from "effect/Scope";
|
|
5
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
6
6
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
7
7
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
8
8
|
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
@@ -32,7 +32,7 @@ export interface SqliteClient extends Client.SqlClient {
|
|
|
32
32
|
* @category tags
|
|
33
33
|
* @since 1.0.0
|
|
34
34
|
*/
|
|
35
|
-
export declare const SqliteClient:
|
|
35
|
+
export declare const SqliteClient: Context.Service<SqliteClient, SqliteClient>;
|
|
36
36
|
/**
|
|
37
37
|
* @category models
|
|
38
38
|
* @since 1.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAEvD,OAAO,EAAuB,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAQ5E;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,MAA+C,CAAA;AAEpE;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,sCAAsC,CAAA;AAE3D;;;GAGG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,SAAS;IACpD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACpD,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;;;GAGG;AACH,eAAO,MAAM,YAAY,6CAAiE,CAAA;AAE1F;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAEzC,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;;;GAGG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,kBAAkB,KAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAsHrE,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KACtC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAUzB,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,kBAAkB,KACzB,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAML,CAAA"}
|
package/dist/SqliteClient.js
CHANGED
|
@@ -3,18 +3,23 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Database } from "bun:sqlite";
|
|
5
5
|
import * as Config from "effect/Config";
|
|
6
|
+
import * as Context from "effect/Context";
|
|
6
7
|
import * as Effect from "effect/Effect";
|
|
7
8
|
import * as Fiber from "effect/Fiber";
|
|
8
9
|
import { identity } from "effect/Function";
|
|
9
10
|
import * as Layer from "effect/Layer";
|
|
10
11
|
import * as Scope from "effect/Scope";
|
|
11
|
-
import * as
|
|
12
|
+
import * as Semaphore from "effect/Semaphore";
|
|
12
13
|
import * as Stream from "effect/Stream";
|
|
13
14
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
14
15
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
15
|
-
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
16
|
+
import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError";
|
|
16
17
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
17
18
|
const ATTR_DB_SYSTEM_NAME = "db.system.name";
|
|
19
|
+
const classifyError = (cause, message, operation) => classifySqliteError(cause, {
|
|
20
|
+
message,
|
|
21
|
+
operation
|
|
22
|
+
});
|
|
18
23
|
/**
|
|
19
24
|
* @category type ids
|
|
20
25
|
* @since 1.0.0
|
|
@@ -24,7 +29,7 @@ export const TypeId = "~@effect/sql-sqlite-bun/SqliteClient";
|
|
|
24
29
|
* @category tags
|
|
25
30
|
* @since 1.0.0
|
|
26
31
|
*/
|
|
27
|
-
export const SqliteClient = /*#__PURE__*/
|
|
32
|
+
export const SqliteClient = /*#__PURE__*/Context.Service("@effect/sql-sqlite-bun/Client");
|
|
28
33
|
/**
|
|
29
34
|
* @category constructor
|
|
30
35
|
* @since 1.0.0
|
|
@@ -44,29 +49,27 @@ export const make = options => Effect.gen(function* () {
|
|
|
44
49
|
}
|
|
45
50
|
const run = (sql, params = []) => Effect.withFiber(fiber => {
|
|
46
51
|
const statement = db.query(sql);
|
|
47
|
-
const useSafeIntegers =
|
|
52
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
|
|
48
53
|
// @ts-ignore bun-types missing safeIntegers method, fixed in https://github.com/oven-sh/bun/pull/26627
|
|
49
54
|
statement.safeIntegers(useSafeIntegers);
|
|
50
55
|
try {
|
|
51
56
|
return Effect.succeed(statement.all(...params) ?? []);
|
|
52
57
|
} catch (cause) {
|
|
53
58
|
return Effect.fail(new SqlError({
|
|
54
|
-
cause,
|
|
55
|
-
message: "Failed to execute statement"
|
|
59
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
56
60
|
}));
|
|
57
61
|
}
|
|
58
62
|
});
|
|
59
63
|
const runValues = (sql, params = []) => Effect.withFiber(fiber => {
|
|
60
64
|
const statement = db.query(sql);
|
|
61
|
-
const useSafeIntegers =
|
|
65
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
|
|
62
66
|
// @ts-ignore bun-types missing safeIntegers method, fixed in https://github.com/oven-sh/bun/pull/26627
|
|
63
67
|
statement.safeIntegers(useSafeIntegers);
|
|
64
68
|
try {
|
|
65
69
|
return Effect.succeed(statement.values(...params) ?? []);
|
|
66
70
|
} catch (cause) {
|
|
67
71
|
return Effect.fail(new SqlError({
|
|
68
|
-
cause,
|
|
69
|
-
message: "Failed to execute statement"
|
|
72
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
70
73
|
}));
|
|
71
74
|
}
|
|
72
75
|
});
|
|
@@ -89,25 +92,23 @@ export const make = options => Effect.gen(function* () {
|
|
|
89
92
|
export: Effect.try({
|
|
90
93
|
try: () => db.serialize(),
|
|
91
94
|
catch: cause => new SqlError({
|
|
92
|
-
cause,
|
|
93
|
-
message: "Failed to export database"
|
|
95
|
+
reason: classifyError(cause, "Failed to export database", "export")
|
|
94
96
|
})
|
|
95
97
|
}),
|
|
96
98
|
loadExtension: path => Effect.try({
|
|
97
99
|
try: () => db.loadExtension(path),
|
|
98
100
|
catch: cause => new SqlError({
|
|
99
|
-
cause,
|
|
100
|
-
message: "Failed to load extension"
|
|
101
|
+
reason: classifyError(cause, "Failed to load extension", "loadExtension")
|
|
101
102
|
})
|
|
102
103
|
})
|
|
103
104
|
});
|
|
104
105
|
});
|
|
105
|
-
const semaphore = yield*
|
|
106
|
+
const semaphore = yield* Semaphore.make(1);
|
|
106
107
|
const connection = yield* makeConnection;
|
|
107
108
|
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
|
|
108
109
|
const transactionAcquirer = Effect.uninterruptibleMask(restore => {
|
|
109
110
|
const fiber = Fiber.getCurrent();
|
|
110
|
-
const scope =
|
|
111
|
+
const scope = Context.getUnsafe(fiber.context, Scope.Scope);
|
|
111
112
|
return Effect.as(Effect.tap(restore(semaphore.take(1)), () => Scope.addFinalizer(scope, semaphore.release(1))), connection);
|
|
112
113
|
});
|
|
113
114
|
return Object.assign(yield* Client.make({
|
|
@@ -127,10 +128,10 @@ export const make = options => Effect.gen(function* () {
|
|
|
127
128
|
* @category layers
|
|
128
129
|
* @since 1.0.0
|
|
129
130
|
*/
|
|
130
|
-
export const layerConfig = config => Layer.
|
|
131
|
+
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));
|
|
131
132
|
/**
|
|
132
133
|
* @category layers
|
|
133
134
|
* @since 1.0.0
|
|
134
135
|
*/
|
|
135
|
-
export const layer = config => Layer.
|
|
136
|
+
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));
|
|
136
137
|
//# sourceMappingURL=SqliteClient.js.map
|
package/dist/SqliteClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteClient.js","names":["Database","Config","Effect","Fiber","identity","Layer","Scope","
|
|
1
|
+
{"version":3,"file":"SqliteClient.js","names":["Database","Config","Context","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","db","filename","readonly","readwrite","create","addFinalizer","sync","close","disableWAL","run","sql","params","withFiber","fiber","statement","query","useSafeIntegers","get","context","SafeIntegers","safeIntegers","succeed","all","fail","reason","runValues","values","execute","map","executeRaw","executeValues","executeUnprepared","executeStream","_sql","_params","die","export","try","serialize","catch","loadExtension","path","semaphore","connection","acquirer","withPermits","transactionAcquirer","uninterruptibleMask","restore","getCurrent","scope","getUnsafe","as","tap","take","release","Object","assign","spanAttributes","entries","config","flatMap","_","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-bun",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.51",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "A SQLite toolkit for Effect",
|
|
@@ -43,12 +43,12 @@
|
|
|
43
43
|
"provenance": true
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/bun": "^1.3.
|
|
47
|
-
"@effect/platform-bun": "^4.0.0-beta.
|
|
48
|
-
"effect": "^4.0.0-beta.
|
|
46
|
+
"@types/bun": "^1.3.12",
|
|
47
|
+
"@effect/platform-bun": "^4.0.0-beta.51",
|
|
48
|
+
"effect": "^4.0.0-beta.51"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"effect": "^4.0.0-beta.
|
|
51
|
+
"effect": "^4.0.0-beta.51"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
54
|
"codegen": "effect-utils codegen",
|
package/src/SqliteClient.ts
CHANGED
|
@@ -3,21 +3,25 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { Database } from "bun:sqlite"
|
|
5
5
|
import * as Config from "effect/Config"
|
|
6
|
+
import * as Context from "effect/Context"
|
|
6
7
|
import * as Effect from "effect/Effect"
|
|
7
8
|
import * as Fiber from "effect/Fiber"
|
|
8
9
|
import { identity } from "effect/Function"
|
|
9
10
|
import * as Layer from "effect/Layer"
|
|
10
11
|
import * as Scope from "effect/Scope"
|
|
11
|
-
import * as
|
|
12
|
+
import * as Semaphore from "effect/Semaphore"
|
|
12
13
|
import * as Stream from "effect/Stream"
|
|
13
14
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity"
|
|
14
15
|
import * as Client from "effect/unstable/sql/SqlClient"
|
|
15
16
|
import type { Connection } from "effect/unstable/sql/SqlConnection"
|
|
16
|
-
import { SqlError } from "effect/unstable/sql/SqlError"
|
|
17
|
+
import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError"
|
|
17
18
|
import * as Statement from "effect/unstable/sql/Statement"
|
|
18
19
|
|
|
19
20
|
const ATTR_DB_SYSTEM_NAME = "db.system.name"
|
|
20
21
|
|
|
22
|
+
const classifyError = (cause: unknown, message: string, operation: string) =>
|
|
23
|
+
classifySqliteError(cause, { message, operation })
|
|
24
|
+
|
|
21
25
|
/**
|
|
22
26
|
* @category type ids
|
|
23
27
|
* @since 1.0.0
|
|
@@ -48,7 +52,7 @@ export interface SqliteClient extends Client.SqlClient {
|
|
|
48
52
|
* @category tags
|
|
49
53
|
* @since 1.0.0
|
|
50
54
|
*/
|
|
51
|
-
export const SqliteClient =
|
|
55
|
+
export const SqliteClient = Context.Service<SqliteClient>("@effect/sql-sqlite-bun/Client")
|
|
52
56
|
|
|
53
57
|
/**
|
|
54
58
|
* @category models
|
|
@@ -105,13 +109,13 @@ export const make = (
|
|
|
105
109
|
) =>
|
|
106
110
|
Effect.withFiber<Array<any>, SqlError>((fiber) => {
|
|
107
111
|
const statement = db.query(sql)
|
|
108
|
-
const useSafeIntegers =
|
|
112
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
|
|
109
113
|
// @ts-ignore bun-types missing safeIntegers method, fixed in https://github.com/oven-sh/bun/pull/26627
|
|
110
114
|
statement.safeIntegers(useSafeIntegers)
|
|
111
115
|
try {
|
|
112
116
|
return Effect.succeed((statement.all(...(params as any)) ?? []) as Array<any>)
|
|
113
117
|
} catch (cause) {
|
|
114
|
-
return Effect.fail(new SqlError({ cause,
|
|
118
|
+
return Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") }))
|
|
115
119
|
}
|
|
116
120
|
})
|
|
117
121
|
|
|
@@ -121,13 +125,13 @@ export const make = (
|
|
|
121
125
|
) =>
|
|
122
126
|
Effect.withFiber<Array<any>, SqlError>((fiber) => {
|
|
123
127
|
const statement = db.query(sql)
|
|
124
|
-
const useSafeIntegers =
|
|
128
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
|
|
125
129
|
// @ts-ignore bun-types missing safeIntegers method, fixed in https://github.com/oven-sh/bun/pull/26627
|
|
126
130
|
statement.safeIntegers(useSafeIntegers)
|
|
127
131
|
try {
|
|
128
132
|
return Effect.succeed((statement.values(...(params as any)) ?? []) as Array<any>)
|
|
129
133
|
} catch (cause) {
|
|
130
|
-
return Effect.fail(new SqlError({ cause,
|
|
134
|
+
return Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") }))
|
|
131
135
|
}
|
|
132
136
|
})
|
|
133
137
|
|
|
@@ -151,23 +155,24 @@ export const make = (
|
|
|
151
155
|
},
|
|
152
156
|
export: Effect.try({
|
|
153
157
|
try: () => db.serialize(),
|
|
154
|
-
catch: (cause) => new SqlError({ cause,
|
|
158
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to export database", "export") })
|
|
155
159
|
}),
|
|
156
160
|
loadExtension: (path) =>
|
|
157
161
|
Effect.try({
|
|
158
162
|
try: () => db.loadExtension(path),
|
|
159
|
-
catch: (cause) =>
|
|
163
|
+
catch: (cause) =>
|
|
164
|
+
new SqlError({ reason: classifyError(cause, "Failed to load extension", "loadExtension") })
|
|
160
165
|
})
|
|
161
166
|
})
|
|
162
167
|
})
|
|
163
168
|
|
|
164
|
-
const semaphore = yield*
|
|
169
|
+
const semaphore = yield* Semaphore.make(1)
|
|
165
170
|
const connection = yield* makeConnection
|
|
166
171
|
|
|
167
172
|
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
|
|
168
173
|
const transactionAcquirer = Effect.uninterruptibleMask((restore) => {
|
|
169
174
|
const fiber = Fiber.getCurrent()!
|
|
170
|
-
const scope =
|
|
175
|
+
const scope = Context.getUnsafe(fiber.context, Scope.Scope)
|
|
171
176
|
return Effect.as(
|
|
172
177
|
Effect.tap(
|
|
173
178
|
restore(semaphore.take(1)),
|
|
@@ -204,12 +209,12 @@ export const make = (
|
|
|
204
209
|
export const layerConfig = (
|
|
205
210
|
config: Config.Wrap<SqliteClientConfig>
|
|
206
211
|
): Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError> =>
|
|
207
|
-
Layer.
|
|
212
|
+
Layer.effectContext(
|
|
208
213
|
Config.unwrap(config).asEffect().pipe(
|
|
209
214
|
Effect.flatMap(make),
|
|
210
215
|
Effect.map((client) =>
|
|
211
|
-
|
|
212
|
-
|
|
216
|
+
Context.make(SqliteClient, client).pipe(
|
|
217
|
+
Context.add(Client.SqlClient, client)
|
|
213
218
|
)
|
|
214
219
|
)
|
|
215
220
|
)
|
|
@@ -222,9 +227,9 @@ export const layerConfig = (
|
|
|
222
227
|
export const layer = (
|
|
223
228
|
config: SqliteClientConfig
|
|
224
229
|
): Layer.Layer<SqliteClient | Client.SqlClient> =>
|
|
225
|
-
Layer.
|
|
230
|
+
Layer.effectContext(
|
|
226
231
|
Effect.map(make(config), (client) =>
|
|
227
|
-
|
|
228
|
-
|
|
232
|
+
Context.make(SqliteClient, client).pipe(
|
|
233
|
+
Context.add(Client.SqlClient, client)
|
|
229
234
|
))
|
|
230
235
|
).pipe(Layer.provide(Reactivity.layer))
|