@effect/sql-sqlite-bun 4.0.0-beta.6 → 4.0.0-beta.60
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 +16 -16
- package/dist/SqliteClient.js.map +1 -1
- package/package.json +5 -5
- package/src/SqliteClient.ts +20 -16
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,19 +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
12
|
import * as Semaphore from "effect/Semaphore";
|
|
12
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
13
13
|
import * as Stream from "effect/Stream";
|
|
14
14
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
15
15
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
16
|
-
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
16
|
+
import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError";
|
|
17
17
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
18
18
|
const ATTR_DB_SYSTEM_NAME = "db.system.name";
|
|
19
|
+
const classifyError = (cause, message, operation) => classifySqliteError(cause, {
|
|
20
|
+
message,
|
|
21
|
+
operation
|
|
22
|
+
});
|
|
19
23
|
/**
|
|
20
24
|
* @category type ids
|
|
21
25
|
* @since 1.0.0
|
|
@@ -25,7 +29,7 @@ export const TypeId = "~@effect/sql-sqlite-bun/SqliteClient";
|
|
|
25
29
|
* @category tags
|
|
26
30
|
* @since 1.0.0
|
|
27
31
|
*/
|
|
28
|
-
export const SqliteClient = /*#__PURE__*/
|
|
32
|
+
export const SqliteClient = /*#__PURE__*/Context.Service("@effect/sql-sqlite-bun/Client");
|
|
29
33
|
/**
|
|
30
34
|
* @category constructor
|
|
31
35
|
* @since 1.0.0
|
|
@@ -45,29 +49,27 @@ export const make = options => Effect.gen(function* () {
|
|
|
45
49
|
}
|
|
46
50
|
const run = (sql, params = []) => Effect.withFiber(fiber => {
|
|
47
51
|
const statement = db.query(sql);
|
|
48
|
-
const useSafeIntegers =
|
|
52
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
|
|
49
53
|
// @ts-ignore bun-types missing safeIntegers method, fixed in https://github.com/oven-sh/bun/pull/26627
|
|
50
54
|
statement.safeIntegers(useSafeIntegers);
|
|
51
55
|
try {
|
|
52
56
|
return Effect.succeed(statement.all(...params) ?? []);
|
|
53
57
|
} catch (cause) {
|
|
54
58
|
return Effect.fail(new SqlError({
|
|
55
|
-
cause,
|
|
56
|
-
message: "Failed to execute statement"
|
|
59
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
57
60
|
}));
|
|
58
61
|
}
|
|
59
62
|
});
|
|
60
63
|
const runValues = (sql, params = []) => Effect.withFiber(fiber => {
|
|
61
64
|
const statement = db.query(sql);
|
|
62
|
-
const useSafeIntegers =
|
|
65
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
|
|
63
66
|
// @ts-ignore bun-types missing safeIntegers method, fixed in https://github.com/oven-sh/bun/pull/26627
|
|
64
67
|
statement.safeIntegers(useSafeIntegers);
|
|
65
68
|
try {
|
|
66
69
|
return Effect.succeed(statement.values(...params) ?? []);
|
|
67
70
|
} catch (cause) {
|
|
68
71
|
return Effect.fail(new SqlError({
|
|
69
|
-
cause,
|
|
70
|
-
message: "Failed to execute statement"
|
|
72
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
71
73
|
}));
|
|
72
74
|
}
|
|
73
75
|
});
|
|
@@ -90,15 +92,13 @@ export const make = options => Effect.gen(function* () {
|
|
|
90
92
|
export: Effect.try({
|
|
91
93
|
try: () => db.serialize(),
|
|
92
94
|
catch: cause => new SqlError({
|
|
93
|
-
cause,
|
|
94
|
-
message: "Failed to export database"
|
|
95
|
+
reason: classifyError(cause, "Failed to export database", "export")
|
|
95
96
|
})
|
|
96
97
|
}),
|
|
97
98
|
loadExtension: path => Effect.try({
|
|
98
99
|
try: () => db.loadExtension(path),
|
|
99
100
|
catch: cause => new SqlError({
|
|
100
|
-
cause,
|
|
101
|
-
message: "Failed to load extension"
|
|
101
|
+
reason: classifyError(cause, "Failed to load extension", "loadExtension")
|
|
102
102
|
})
|
|
103
103
|
})
|
|
104
104
|
});
|
|
@@ -108,7 +108,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
108
108
|
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
|
|
109
109
|
const transactionAcquirer = Effect.uninterruptibleMask(restore => {
|
|
110
110
|
const fiber = Fiber.getCurrent();
|
|
111
|
-
const scope =
|
|
111
|
+
const scope = Context.getUnsafe(fiber.context, Scope.Scope);
|
|
112
112
|
return Effect.as(Effect.tap(restore(semaphore.take(1)), () => Scope.addFinalizer(scope, semaphore.release(1))), connection);
|
|
113
113
|
});
|
|
114
114
|
return Object.assign(yield* Client.make({
|
|
@@ -128,10 +128,10 @@ export const make = options => Effect.gen(function* () {
|
|
|
128
128
|
* @category layers
|
|
129
129
|
* @since 1.0.0
|
|
130
130
|
*/
|
|
131
|
-
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));
|
|
132
132
|
/**
|
|
133
133
|
* @category layers
|
|
134
134
|
* @since 1.0.0
|
|
135
135
|
*/
|
|
136
|
-
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));
|
|
137
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","Semaphore","
|
|
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":"AAAA;;;AAGA,SAASA,QAAQ,QAAQ,YAAY;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,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;AAE1D,MAAMC,mBAAmB,GAAG,gBAAgB;AAE5C,MAAMC,aAAa,GAAGA,CAACC,KAAc,EAAEC,OAAe,EAAEC,SAAiB,KACvEP,mBAAmB,CAACK,KAAK,EAAE;EAAEC,OAAO;EAAEC;AAAS,CAAE,CAAC;AAEpD;;;;AAIA,OAAO,MAAMC,MAAM,GAAW,sCAAsC;AAsBpE;;;;AAIA,OAAO,MAAMC,YAAY,gBAAGnB,OAAO,CAACoB,OAAO,CAAe,+BAA+B,CAAC;AAwB1F;;;;AAIA,OAAO,MAAMC,IAAI,GACfC,OAA2B,IAE3BrB,MAAM,CAACsB,GAAG,CAAC,aAAS;EAClB,MAAMC,QAAQ,GAAGZ,SAAS,CAACa,kBAAkB,CAACH,OAAO,CAACI,mBAAmB,CAAC;EAC1E,MAAMC,aAAa,GAAGL,OAAO,CAACM,oBAAoB,GAChDhB,SAAS,CAACiB,iBAAiB,CACzBP,OAAO,CAACM,oBAAoB,CAC7B,CAACE,KAAK,GACPC,SAAS;EAEX,MAAMC,cAAc,GAAG/B,MAAM,CAACsB,GAAG,CAAC,aAAS;IACzC,MAAMU,EAAE,GAAG,IAAInC,QAAQ,CAACwB,OAAO,CAACY,QAAQ,EAAE;MACxCC,QAAQ,EAAEb,OAAO,CAACa,QAAQ;MAC1BC,SAAS,EAAEd,OAAO,CAACc,SAAS,IAAI,IAAI;MACpCC,MAAM,EAAEf,OAAO,CAACe,MAAM,IAAI;KACpB,CAAC;IACT,OAAOpC,MAAM,CAACqC,YAAY,CAAC,MAAMrC,MAAM,CAACsC,IAAI,CAAC,MAAMN,EAAE,CAACO,KAAK,EAAE,CAAC,CAAC;IAE/D,IAAIlB,OAAO,CAACmB,UAAU,KAAK,IAAI,EAAE;MAC/BR,EAAE,CAACS,GAAG,CAAC,4BAA4B,CAAC;IACtC;IAEA,MAAMA,GAAG,GAAGA,CACVC,GAAW,EACXC,MAAA,GAAiC,EAAE,KAEnC3C,MAAM,CAAC4C,SAAS,CAAwBC,KAAK,IAAI;MAC/C,MAAMC,SAAS,GAAGd,EAAE,CAACe,KAAK,CAACL,GAAG,CAAC;MAC/B,MAAMM,eAAe,GAAGjD,OAAO,CAACkD,GAAG,CAACJ,KAAK,CAACK,OAAO,EAAE1C,MAAM,CAAC2C,YAAY,CAAC;MACvE;MACAL,SAAS,CAACM,YAAY,CAACJ,eAAe,CAAC;MACvC,IAAI;QACF,OAAOhD,MAAM,CAACqD,OAAO,CAAEP,SAAS,CAACQ,GAAG,CAAC,GAAIX,MAAc,CAAC,IAAI,EAAiB,CAAC;MAChF,CAAC,CAAC,OAAO7B,KAAK,EAAE;QACd,OAAOd,MAAM,CAACuD,IAAI,CAAC,IAAI7C,QAAQ,CAAC;UAAE8C,MAAM,EAAE3C,aAAa,CAACC,KAAK,EAAE,6BAA6B,EAAE,SAAS;QAAC,CAAE,CAAC,CAAC;MAC9G;IACF,CAAC,CAAC;IAEJ,MAAM2C,SAAS,GAAGA,CAChBf,GAAW,EACXC,MAAA,GAAiC,EAAE,KAEnC3C,MAAM,CAAC4C,SAAS,CAAwBC,KAAK,IAAI;MAC/C,MAAMC,SAAS,GAAGd,EAAE,CAACe,KAAK,CAACL,GAAG,CAAC;MAC/B,MAAMM,eAAe,GAAGjD,OAAO,CAACkD,GAAG,CAACJ,KAAK,CAACK,OAAO,EAAE1C,MAAM,CAAC2C,YAAY,CAAC;MACvE;MACAL,SAAS,CAACM,YAAY,CAACJ,eAAe,CAAC;MACvC,IAAI;QACF,OAAOhD,MAAM,CAACqD,OAAO,CAAEP,SAAS,CAACY,MAAM,CAAC,GAAIf,MAAc,CAAC,IAAI,EAAiB,CAAC;MACnF,CAAC,CAAC,OAAO7B,KAAK,EAAE;QACd,OAAOd,MAAM,CAACuD,IAAI,CAAC,IAAI7C,QAAQ,CAAC;UAAE8C,MAAM,EAAE3C,aAAa,CAACC,KAAK,EAAE,6BAA6B,EAAE,SAAS;QAAC,CAAE,CAAC,CAAC;MAC9G;IACF,CAAC,CAAC;IAEJ,OAAOZ,QAAQ,CAAmB;MAChCyD,OAAOA,CAACjB,GAAG,EAAEC,MAAM,EAAEjB,aAAa;QAChC,OAAOA,aAAa,GAChB1B,MAAM,CAAC4D,GAAG,CAACnB,GAAG,CAACC,GAAG,EAAEC,MAAM,CAAC,EAAEjB,aAAa,CAAC,GAC3Ce,GAAG,CAACC,GAAG,EAAEC,MAAM,CAAC;MACtB,CAAC;MACDkB,UAAUA,CAACnB,GAAG,EAAEC,MAAM;QACpB,OAAOF,GAAG,CAACC,GAAG,EAAEC,MAAM,CAAC;MACzB,CAAC;MACDmB,aAAaA,CAACpB,GAAG,EAAEC,MAAM;QACvB,OAAOc,SAAS,CAACf,GAAG,EAAEC,MAAM,CAAC;MAC/B,CAAC;MACDoB,iBAAiBA,CAACrB,GAAG,EAAEC,MAAM,EAAEjB,aAAa;QAC1C,OAAO,IAAI,CAACiC,OAAO,CAACjB,GAAG,EAAEC,MAAM,EAAEjB,aAAa,CAAC;MACjD,CAAC;MACDsC,aAAaA,CAACC,IAAI,EAAEC,OAAO;QACzB,OAAO5D,MAAM,CAAC6D,GAAG,CAAC,+BAA+B,CAAC;MACpD,CAAC;MACDC,MAAM,EAAEpE,MAAM,CAACqE,GAAG,CAAC;QACjBA,GAAG,EAAEA,CAAA,KAAMrC,EAAE,CAACsC,SAAS,EAAE;QACzBC,KAAK,EAAGzD,KAAK,IAAK,IAAIJ,QAAQ,CAAC;UAAE8C,MAAM,EAAE3C,aAAa,CAACC,KAAK,EAAE,2BAA2B,EAAE,QAAQ;QAAC,CAAE;OACvG,CAAC;MACF0D,aAAa,EAAGC,IAAI,IAClBzE,MAAM,CAACqE,GAAG,CAAC;QACTA,GAAG,EAAEA,CAAA,KAAMrC,EAAE,CAACwC,aAAa,CAACC,IAAI,CAAC;QACjCF,KAAK,EAAGzD,KAAK,IACX,IAAIJ,QAAQ,CAAC;UAAE8C,MAAM,EAAE3C,aAAa,CAACC,KAAK,EAAE,0BAA0B,EAAE,eAAe;QAAC,CAAE;OAC7F;KACJ,CAAC;EACJ,CAAC,CAAC;EAEF,MAAM4D,SAAS,GAAG,OAAOrE,SAAS,CAACe,IAAI,CAAC,CAAC,CAAC;EAC1C,MAAMuD,UAAU,GAAG,OAAO5C,cAAc;EAExC,MAAM6C,QAAQ,GAAGF,SAAS,CAACG,WAAW,CAAC,CAAC,CAAC,CAAC7E,MAAM,CAACqD,OAAO,CAACsB,UAAU,CAAC,CAAC;EACrE,MAAMG,mBAAmB,GAAG9E,MAAM,CAAC+E,mBAAmB,CAAEC,OAAO,IAAI;IACjE,MAAMnC,KAAK,GAAG5C,KAAK,CAACgF,UAAU,EAAG;IACjC,MAAMC,KAAK,GAAGnF,OAAO,CAACoF,SAAS,CAACtC,KAAK,CAACK,OAAO,EAAE9C,KAAK,CAACA,KAAK,CAAC;IAC3D,OAAOJ,MAAM,CAACoF,EAAE,CACdpF,MAAM,CAACqF,GAAG,CACRL,OAAO,CAACN,SAAS,CAACY,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1B,MAAMlF,KAAK,CAACiC,YAAY,CAAC6C,KAAK,EAAER,SAAS,CAACa,OAAO,CAAC,CAAC,CAAC,CAAC,CACtD,EACDZ,UAAU,CACX;EACH,CAAC,CAAC;EAEF,OAAOa,MAAM,CAACC,MAAM,CACjB,OAAOjF,MAAM,CAACY,IAAI,CAAC;IAClBwD,QAAQ;IACRrD,QAAQ;IACRuD,mBAAmB;IACnBY,cAAc,EAAE,CACd,IAAIrE,OAAO,CAACqE,cAAc,GAAGF,MAAM,CAACG,OAAO,CAACtE,OAAO,CAACqE,cAAc,CAAC,GAAG,EAAE,CAAC,EACzE,CAAC9E,mBAAmB,EAAE,QAAQ,CAAC,CAChC;IACDc;GACD,CAAC,EACF;IACE,CAACT,MAAM,GAAGA,MAAgB;IAC1B2E,MAAM,EAAEvE,OAAO;IACf+C,MAAM,EAAEpE,MAAM,CAAC6F,OAAO,CAACjB,QAAQ,EAAGkB,CAAC,IAAKA,CAAC,CAAC1B,MAAM,CAAC;IACjDI,aAAa,EAAGC,IAAY,IAAKzE,MAAM,CAAC6F,OAAO,CAACjB,QAAQ,EAAGkB,CAAC,IAAKA,CAAC,CAACtB,aAAa,CAACC,IAAI,CAAC;GACvF,CACF;AACH,CAAC,CAAC;AAEJ;;;;AAIA,OAAO,MAAMsB,WAAW,GACtBH,MAAuC,IAEvCzF,KAAK,CAAC6F,aAAa,CACjBlG,MAAM,CAACmG,MAAM,CAACL,MAAM,CAAC,CAACM,QAAQ,EAAE,CAACC,IAAI,CACnCnG,MAAM,CAAC6F,OAAO,CAACzE,IAAI,CAAC,EACpBpB,MAAM,CAAC4D,GAAG,CAAEwC,MAAM,IAChBrG,OAAO,CAACqB,IAAI,CAACF,YAAY,EAAEkF,MAAM,CAAC,CAACD,IAAI,CACrCpG,OAAO,CAACsG,GAAG,CAAC7F,MAAM,CAAC8F,SAAS,EAAEF,MAAM,CAAC,CACtC,CACF,CACF,CACF,CAACD,IAAI,CAAChG,KAAK,CAACoG,OAAO,CAAChG,UAAU,CAACiG,KAAK,CAAC,CAAC;AAEzC;;;;AAIA,OAAO,MAAMA,KAAK,GAChBZ,MAA0B,IAE1BzF,KAAK,CAAC6F,aAAa,CACjBhG,MAAM,CAAC4D,GAAG,CAACxC,IAAI,CAACwE,MAAM,CAAC,EAAGQ,MAAM,IAC9BrG,OAAO,CAACqB,IAAI,CAACF,YAAY,EAAEkF,MAAM,CAAC,CAACD,IAAI,CACrCpG,OAAO,CAACsG,GAAG,CAAC7F,MAAM,CAAC8F,SAAS,EAAEF,MAAM,CAAC,CACtC,CAAC,CACL,CAACD,IAAI,CAAChG,KAAK,CAACoG,OAAO,CAAChG,UAAU,CAACiG,KAAK,CAAC,CAAC","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.60",
|
|
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.60",
|
|
48
|
+
"effect": "^4.0.0-beta.60"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"effect": "^4.0.0-beta.
|
|
51
|
+
"effect": "^4.0.0-beta.60"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
54
|
"codegen": "effect-utils codegen",
|
package/src/SqliteClient.ts
CHANGED
|
@@ -3,22 +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
12
|
import * as Semaphore from "effect/Semaphore"
|
|
12
|
-
import * as ServiceMap from "effect/ServiceMap"
|
|
13
13
|
import * as Stream from "effect/Stream"
|
|
14
14
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity"
|
|
15
15
|
import * as Client from "effect/unstable/sql/SqlClient"
|
|
16
16
|
import type { Connection } from "effect/unstable/sql/SqlConnection"
|
|
17
|
-
import { SqlError } from "effect/unstable/sql/SqlError"
|
|
17
|
+
import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError"
|
|
18
18
|
import * as Statement from "effect/unstable/sql/Statement"
|
|
19
19
|
|
|
20
20
|
const ATTR_DB_SYSTEM_NAME = "db.system.name"
|
|
21
21
|
|
|
22
|
+
const classifyError = (cause: unknown, message: string, operation: string) =>
|
|
23
|
+
classifySqliteError(cause, { message, operation })
|
|
24
|
+
|
|
22
25
|
/**
|
|
23
26
|
* @category type ids
|
|
24
27
|
* @since 1.0.0
|
|
@@ -49,7 +52,7 @@ export interface SqliteClient extends Client.SqlClient {
|
|
|
49
52
|
* @category tags
|
|
50
53
|
* @since 1.0.0
|
|
51
54
|
*/
|
|
52
|
-
export const SqliteClient =
|
|
55
|
+
export const SqliteClient = Context.Service<SqliteClient>("@effect/sql-sqlite-bun/Client")
|
|
53
56
|
|
|
54
57
|
/**
|
|
55
58
|
* @category models
|
|
@@ -106,13 +109,13 @@ export const make = (
|
|
|
106
109
|
) =>
|
|
107
110
|
Effect.withFiber<Array<any>, SqlError>((fiber) => {
|
|
108
111
|
const statement = db.query(sql)
|
|
109
|
-
const useSafeIntegers =
|
|
112
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
|
|
110
113
|
// @ts-ignore bun-types missing safeIntegers method, fixed in https://github.com/oven-sh/bun/pull/26627
|
|
111
114
|
statement.safeIntegers(useSafeIntegers)
|
|
112
115
|
try {
|
|
113
116
|
return Effect.succeed((statement.all(...(params as any)) ?? []) as Array<any>)
|
|
114
117
|
} catch (cause) {
|
|
115
|
-
return Effect.fail(new SqlError({ cause,
|
|
118
|
+
return Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") }))
|
|
116
119
|
}
|
|
117
120
|
})
|
|
118
121
|
|
|
@@ -122,13 +125,13 @@ export const make = (
|
|
|
122
125
|
) =>
|
|
123
126
|
Effect.withFiber<Array<any>, SqlError>((fiber) => {
|
|
124
127
|
const statement = db.query(sql)
|
|
125
|
-
const useSafeIntegers =
|
|
128
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
|
|
126
129
|
// @ts-ignore bun-types missing safeIntegers method, fixed in https://github.com/oven-sh/bun/pull/26627
|
|
127
130
|
statement.safeIntegers(useSafeIntegers)
|
|
128
131
|
try {
|
|
129
132
|
return Effect.succeed((statement.values(...(params as any)) ?? []) as Array<any>)
|
|
130
133
|
} catch (cause) {
|
|
131
|
-
return Effect.fail(new SqlError({ cause,
|
|
134
|
+
return Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") }))
|
|
132
135
|
}
|
|
133
136
|
})
|
|
134
137
|
|
|
@@ -152,12 +155,13 @@ export const make = (
|
|
|
152
155
|
},
|
|
153
156
|
export: Effect.try({
|
|
154
157
|
try: () => db.serialize(),
|
|
155
|
-
catch: (cause) => new SqlError({ cause,
|
|
158
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to export database", "export") })
|
|
156
159
|
}),
|
|
157
160
|
loadExtension: (path) =>
|
|
158
161
|
Effect.try({
|
|
159
162
|
try: () => db.loadExtension(path),
|
|
160
|
-
catch: (cause) =>
|
|
163
|
+
catch: (cause) =>
|
|
164
|
+
new SqlError({ reason: classifyError(cause, "Failed to load extension", "loadExtension") })
|
|
161
165
|
})
|
|
162
166
|
})
|
|
163
167
|
})
|
|
@@ -168,7 +172,7 @@ export const make = (
|
|
|
168
172
|
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
|
|
169
173
|
const transactionAcquirer = Effect.uninterruptibleMask((restore) => {
|
|
170
174
|
const fiber = Fiber.getCurrent()!
|
|
171
|
-
const scope =
|
|
175
|
+
const scope = Context.getUnsafe(fiber.context, Scope.Scope)
|
|
172
176
|
return Effect.as(
|
|
173
177
|
Effect.tap(
|
|
174
178
|
restore(semaphore.take(1)),
|
|
@@ -205,12 +209,12 @@ export const make = (
|
|
|
205
209
|
export const layerConfig = (
|
|
206
210
|
config: Config.Wrap<SqliteClientConfig>
|
|
207
211
|
): Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError> =>
|
|
208
|
-
Layer.
|
|
212
|
+
Layer.effectContext(
|
|
209
213
|
Config.unwrap(config).asEffect().pipe(
|
|
210
214
|
Effect.flatMap(make),
|
|
211
215
|
Effect.map((client) =>
|
|
212
|
-
|
|
213
|
-
|
|
216
|
+
Context.make(SqliteClient, client).pipe(
|
|
217
|
+
Context.add(Client.SqlClient, client)
|
|
214
218
|
)
|
|
215
219
|
)
|
|
216
220
|
)
|
|
@@ -223,9 +227,9 @@ export const layerConfig = (
|
|
|
223
227
|
export const layer = (
|
|
224
228
|
config: SqliteClientConfig
|
|
225
229
|
): Layer.Layer<SqliteClient | Client.SqlClient> =>
|
|
226
|
-
Layer.
|
|
230
|
+
Layer.effectContext(
|
|
227
231
|
Effect.map(make(config), (client) =>
|
|
228
|
-
|
|
229
|
-
|
|
232
|
+
Context.make(SqliteClient, client).pipe(
|
|
233
|
+
Context.add(Client.SqlClient, client)
|
|
230
234
|
))
|
|
231
235
|
).pipe(Layer.provide(Reactivity.layer))
|