@effect/sql-libsql 0.3.0 → 0.4.0
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/cjs/LibsqlClient.js +106 -52
- package/dist/cjs/LibsqlClient.js.map +1 -1
- package/dist/dts/LibsqlClient.d.ts.map +1 -1
- package/dist/esm/LibsqlClient.js +106 -52
- package/dist/esm/LibsqlClient.js.map +1 -1
- package/package.json +4 -4
- package/src/LibsqlClient.ts +120 -60
package/dist/cjs/LibsqlClient.js
CHANGED
|
@@ -12,8 +12,8 @@ var Otel = _interopRequireWildcard(require("@opentelemetry/semantic-conventions"
|
|
|
12
12
|
var Config = _interopRequireWildcard(require("effect/Config"));
|
|
13
13
|
var Context = _interopRequireWildcard(require("effect/Context"));
|
|
14
14
|
var Effect = _interopRequireWildcard(require("effect/Effect"));
|
|
15
|
-
var _Function = require("effect/Function");
|
|
16
15
|
var Layer = _interopRequireWildcard(require("effect/Layer"));
|
|
16
|
+
var Option = _interopRequireWildcard(require("effect/Option"));
|
|
17
17
|
var Scope = _interopRequireWildcard(require("effect/Scope"));
|
|
18
18
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
19
19
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -31,6 +31,7 @@ const TypeId = exports.TypeId = /*#__PURE__*/Symbol.for("@effect/sql-libsql/Libs
|
|
|
31
31
|
* @since 1.0.0
|
|
32
32
|
*/
|
|
33
33
|
const LibsqlClient = exports.LibsqlClient = /*#__PURE__*/Context.GenericTag("@effect/sql-libsql/LibsqlClient");
|
|
34
|
+
const LibsqlTransaction = /*#__PURE__*/Context.GenericTag("@effect/sql-libsql/LibsqlClient/LibsqlTransaction");
|
|
34
35
|
/**
|
|
35
36
|
* @category constructor
|
|
36
37
|
* @since 1.0.0
|
|
@@ -38,63 +39,116 @@ const LibsqlClient = exports.LibsqlClient = /*#__PURE__*/Context.GenericTag("@ef
|
|
|
38
39
|
const make = options => Effect.gen(function* () {
|
|
39
40
|
const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
|
|
40
41
|
const transformRows = Statement.defaultTransforms(options.transformResultNames).array;
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
42
|
+
const spanAttributes = [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]];
|
|
43
|
+
class LibsqlConnectionImpl {
|
|
44
|
+
sdk;
|
|
45
|
+
constructor(sdk) {
|
|
46
|
+
this.sdk = sdk;
|
|
47
|
+
}
|
|
48
|
+
run(sql, params = []) {
|
|
49
|
+
return Effect.map(Effect.tryPromise({
|
|
50
|
+
try: () => this.sdk.execute({
|
|
51
|
+
sql,
|
|
52
|
+
args: params
|
|
53
|
+
}),
|
|
54
|
+
catch: cause => new _SqlError.SqlError({
|
|
55
|
+
cause,
|
|
56
|
+
message: "Failed to execute statement"
|
|
57
|
+
})
|
|
58
|
+
}), results => results.rows);
|
|
59
|
+
}
|
|
60
|
+
runRaw(sql, params = []) {
|
|
61
|
+
return Effect.tryPromise({
|
|
62
|
+
try: () => this.sdk.execute({
|
|
63
|
+
sql,
|
|
64
|
+
args: params
|
|
65
|
+
}),
|
|
66
|
+
catch: cause => new _SqlError.SqlError({
|
|
67
|
+
cause,
|
|
68
|
+
message: "Failed to execute statement"
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
runTransform(sql, params = []) {
|
|
73
|
+
return options.transformResultNames ? Effect.map(this.run(sql, params), transformRows) : this.run(sql, params);
|
|
74
|
+
}
|
|
75
|
+
execute(sql, params) {
|
|
76
|
+
return this.runTransform(sql, params);
|
|
77
|
+
}
|
|
78
|
+
executeRaw(sql, params) {
|
|
79
|
+
return this.runRaw(sql, params);
|
|
80
|
+
}
|
|
81
|
+
executeValues(sql, params) {
|
|
82
|
+
return Effect.map(this.run(sql, params), rows => rows.map(row => Array.from(row)));
|
|
83
|
+
}
|
|
84
|
+
executeWithoutTransform(sql, params) {
|
|
85
|
+
return this.run(sql, params);
|
|
86
|
+
}
|
|
87
|
+
executeUnprepared(sql, params) {
|
|
88
|
+
return this.run(sql, params);
|
|
89
|
+
}
|
|
90
|
+
executeStream() {
|
|
91
|
+
return Effect.dieMessage("executeStream not implemented");
|
|
92
|
+
}
|
|
93
|
+
get beginTransaction() {
|
|
94
|
+
return Effect.map(Effect.tryPromise({
|
|
95
|
+
try: () => this.sdk.transaction("write"),
|
|
96
|
+
catch: cause => new _SqlError.SqlError({
|
|
97
|
+
cause,
|
|
98
|
+
message: "Failed to begin transaction"
|
|
99
|
+
})
|
|
100
|
+
}), tx => new LibsqlConnectionImpl(tx));
|
|
101
|
+
}
|
|
102
|
+
get commit() {
|
|
103
|
+
return Effect.tryPromise({
|
|
104
|
+
try: () => this.sdk.commit(),
|
|
105
|
+
catch: cause => new _SqlError.SqlError({
|
|
106
|
+
cause,
|
|
107
|
+
message: "Failed to commit transaction"
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
get rollback() {
|
|
112
|
+
return Effect.tryPromise({
|
|
113
|
+
try: () => this.sdk.rollback(),
|
|
114
|
+
catch: cause => new _SqlError.SqlError({
|
|
115
|
+
cause,
|
|
116
|
+
message: "Failed to rollback transaction"
|
|
117
|
+
})
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const connection = yield* Effect.map(Effect.acquireRelease(Effect.sync(() => Libsql.createClient(options)), sdk => Effect.sync(() => sdk.close())), sdk => new LibsqlConnectionImpl(sdk));
|
|
86
122
|
const semaphore = yield* Effect.makeSemaphore(1);
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
123
|
+
const withTransaction = Client.makeWithTransaction({
|
|
124
|
+
transactionTag: LibsqlTransaction,
|
|
125
|
+
spanAttributes,
|
|
126
|
+
acquireConnection: Effect.uninterruptibleMask(restore => Scope.make().pipe(Effect.bindTo("scope"), Effect.bind("conn", ({
|
|
127
|
+
scope
|
|
128
|
+
}) => restore(semaphore.take(1)).pipe(Effect.zipRight(Scope.addFinalizer(scope, semaphore.release(1))), Effect.zipRight(connection.beginTransaction))), Effect.map(({
|
|
129
|
+
conn,
|
|
130
|
+
scope
|
|
131
|
+
}) => [scope, conn]))),
|
|
132
|
+
begin: () => Effect.void,
|
|
133
|
+
// already begun in acquireConnection
|
|
134
|
+
savepoint: (conn, id) => conn.executeRaw(`SAVEPOINT effect_sql_${id};`, []),
|
|
135
|
+
commit: conn => conn.commit,
|
|
136
|
+
rollback: conn => conn.rollback,
|
|
137
|
+
rollbackSavepoint: (conn, id) => conn.executeRaw(`ROLLBACK TO SAVEPOINT effect_sql_${id};`, [])
|
|
138
|
+
});
|
|
139
|
+
const acquirer = Effect.flatMap(Effect.serviceOption(LibsqlTransaction), Option.match({
|
|
140
|
+
onNone: () => semaphore.withPermits(1)(Effect.succeed(connection)),
|
|
141
|
+
onSome: ([conn]) => Effect.succeed(conn)
|
|
142
|
+
}));
|
|
90
143
|
return Object.assign(Client.make({
|
|
91
144
|
acquirer,
|
|
92
145
|
compiler,
|
|
93
|
-
|
|
94
|
-
spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]]
|
|
146
|
+
spanAttributes
|
|
95
147
|
}), {
|
|
96
148
|
[TypeId]: TypeId,
|
|
97
|
-
config: options
|
|
149
|
+
config: options,
|
|
150
|
+
withTransaction,
|
|
151
|
+
sdk: connection.sdk
|
|
98
152
|
});
|
|
99
153
|
});
|
|
100
154
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LibsqlClient.js","names":["Client","_interopRequireWildcard","require","_SqlError","Statement","Libsql","Otel","Config","Context","Effect","
|
|
1
|
+
{"version":3,"file":"LibsqlClient.js","names":["Client","_interopRequireWildcard","require","_SqlError","Statement","Libsql","Otel","Config","Context","Effect","Layer","Option","Scope","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","TypeId","exports","Symbol","for","LibsqlClient","GenericTag","LibsqlTransaction","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","defaultTransforms","transformResultNames","array","spanAttributes","entries","SEMATTRS_DB_SYSTEM","DBSYSTEMVALUES_SQLITE","LibsqlConnectionImpl","sdk","constructor","run","sql","params","map","tryPromise","try","execute","args","catch","cause","SqlError","message","results","rows","runRaw","runTransform","executeRaw","executeValues","row","Array","from","executeWithoutTransform","executeUnprepared","executeStream","dieMessage","beginTransaction","transaction","tx","commit","rollback","connection","acquireRelease","sync","createClient","close","semaphore","makeSemaphore","withTransaction","makeWithTransaction","transactionTag","acquireConnection","uninterruptibleMask","restore","pipe","bindTo","bind","scope","take","zipRight","addFinalizer","release","conn","begin","void","savepoint","id","rollbackSavepoint","acquirer","flatMap","serviceOption","match","onNone","withPermits","succeed","onSome","assign","config","layer","scopedContext","unwrap","client","add","SqlClient"],"sources":["../../src/LibsqlClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LibsqlClient.d.ts","sourceRoot":"","sources":["../../src/LibsqlClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAM/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"LibsqlClient.d.ts","sourceRoot":"","sources":["../../src/LibsqlClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA;AAM/C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,OAAO,MAAsD,CAAA;AAElF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAA;AAElC;;;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;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,yCAAsE,CAAA;AAM/F;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,uCAAuC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3C,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,gCAAgC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1C;;;OAGG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAClC;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC7D;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,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;AAQD;;;GAGG;AACH,eAAO,MAAM,IAAI,YACN,kBAAkB,KAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CA2I7C,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,KAAK,WACR,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAC7C,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,WAAW,CAUxD,CAAA"}
|
package/dist/esm/LibsqlClient.js
CHANGED
|
@@ -9,8 +9,8 @@ import * as Otel from "@opentelemetry/semantic-conventions";
|
|
|
9
9
|
import * as Config from "effect/Config";
|
|
10
10
|
import * as Context from "effect/Context";
|
|
11
11
|
import * as Effect from "effect/Effect";
|
|
12
|
-
import { identity } from "effect/Function";
|
|
13
12
|
import * as Layer from "effect/Layer";
|
|
13
|
+
import * as Option from "effect/Option";
|
|
14
14
|
import * as Scope from "effect/Scope";
|
|
15
15
|
/**
|
|
16
16
|
* @category type ids
|
|
@@ -22,6 +22,7 @@ export const TypeId = /*#__PURE__*/Symbol.for("@effect/sql-libsql/LibsqlClient")
|
|
|
22
22
|
* @since 1.0.0
|
|
23
23
|
*/
|
|
24
24
|
export const LibsqlClient = /*#__PURE__*/Context.GenericTag("@effect/sql-libsql/LibsqlClient");
|
|
25
|
+
const LibsqlTransaction = /*#__PURE__*/Context.GenericTag("@effect/sql-libsql/LibsqlClient/LibsqlTransaction");
|
|
25
26
|
/**
|
|
26
27
|
* @category constructor
|
|
27
28
|
* @since 1.0.0
|
|
@@ -29,63 +30,116 @@ export const LibsqlClient = /*#__PURE__*/Context.GenericTag("@effect/sql-libsql/
|
|
|
29
30
|
export const make = options => Effect.gen(function* () {
|
|
30
31
|
const compiler = Statement.makeCompilerSqlite(options.transformQueryNames);
|
|
31
32
|
const transformRows = Statement.defaultTransforms(options.transformResultNames).array;
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
33
|
+
const spanAttributes = [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]];
|
|
34
|
+
class LibsqlConnectionImpl {
|
|
35
|
+
sdk;
|
|
36
|
+
constructor(sdk) {
|
|
37
|
+
this.sdk = sdk;
|
|
38
|
+
}
|
|
39
|
+
run(sql, params = []) {
|
|
40
|
+
return Effect.map(Effect.tryPromise({
|
|
41
|
+
try: () => this.sdk.execute({
|
|
42
|
+
sql,
|
|
43
|
+
args: params
|
|
44
|
+
}),
|
|
45
|
+
catch: cause => new SqlError({
|
|
46
|
+
cause,
|
|
47
|
+
message: "Failed to execute statement"
|
|
48
|
+
})
|
|
49
|
+
}), results => results.rows);
|
|
50
|
+
}
|
|
51
|
+
runRaw(sql, params = []) {
|
|
52
|
+
return Effect.tryPromise({
|
|
53
|
+
try: () => this.sdk.execute({
|
|
54
|
+
sql,
|
|
55
|
+
args: params
|
|
56
|
+
}),
|
|
57
|
+
catch: cause => new SqlError({
|
|
58
|
+
cause,
|
|
59
|
+
message: "Failed to execute statement"
|
|
60
|
+
})
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
runTransform(sql, params = []) {
|
|
64
|
+
return options.transformResultNames ? Effect.map(this.run(sql, params), transformRows) : this.run(sql, params);
|
|
65
|
+
}
|
|
66
|
+
execute(sql, params) {
|
|
67
|
+
return this.runTransform(sql, params);
|
|
68
|
+
}
|
|
69
|
+
executeRaw(sql, params) {
|
|
70
|
+
return this.runRaw(sql, params);
|
|
71
|
+
}
|
|
72
|
+
executeValues(sql, params) {
|
|
73
|
+
return Effect.map(this.run(sql, params), rows => rows.map(row => Array.from(row)));
|
|
74
|
+
}
|
|
75
|
+
executeWithoutTransform(sql, params) {
|
|
76
|
+
return this.run(sql, params);
|
|
77
|
+
}
|
|
78
|
+
executeUnprepared(sql, params) {
|
|
79
|
+
return this.run(sql, params);
|
|
80
|
+
}
|
|
81
|
+
executeStream() {
|
|
82
|
+
return Effect.dieMessage("executeStream not implemented");
|
|
83
|
+
}
|
|
84
|
+
get beginTransaction() {
|
|
85
|
+
return Effect.map(Effect.tryPromise({
|
|
86
|
+
try: () => this.sdk.transaction("write"),
|
|
87
|
+
catch: cause => new SqlError({
|
|
88
|
+
cause,
|
|
89
|
+
message: "Failed to begin transaction"
|
|
90
|
+
})
|
|
91
|
+
}), tx => new LibsqlConnectionImpl(tx));
|
|
92
|
+
}
|
|
93
|
+
get commit() {
|
|
94
|
+
return Effect.tryPromise({
|
|
95
|
+
try: () => this.sdk.commit(),
|
|
96
|
+
catch: cause => new SqlError({
|
|
97
|
+
cause,
|
|
98
|
+
message: "Failed to commit transaction"
|
|
99
|
+
})
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
get rollback() {
|
|
103
|
+
return Effect.tryPromise({
|
|
104
|
+
try: () => this.sdk.rollback(),
|
|
105
|
+
catch: cause => new SqlError({
|
|
106
|
+
cause,
|
|
107
|
+
message: "Failed to rollback transaction"
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const connection = yield* Effect.map(Effect.acquireRelease(Effect.sync(() => Libsql.createClient(options)), sdk => Effect.sync(() => sdk.close())), sdk => new LibsqlConnectionImpl(sdk));
|
|
77
113
|
const semaphore = yield* Effect.makeSemaphore(1);
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
114
|
+
const withTransaction = Client.makeWithTransaction({
|
|
115
|
+
transactionTag: LibsqlTransaction,
|
|
116
|
+
spanAttributes,
|
|
117
|
+
acquireConnection: Effect.uninterruptibleMask(restore => Scope.make().pipe(Effect.bindTo("scope"), Effect.bind("conn", ({
|
|
118
|
+
scope
|
|
119
|
+
}) => restore(semaphore.take(1)).pipe(Effect.zipRight(Scope.addFinalizer(scope, semaphore.release(1))), Effect.zipRight(connection.beginTransaction))), Effect.map(({
|
|
120
|
+
conn,
|
|
121
|
+
scope
|
|
122
|
+
}) => [scope, conn]))),
|
|
123
|
+
begin: () => Effect.void,
|
|
124
|
+
// already begun in acquireConnection
|
|
125
|
+
savepoint: (conn, id) => conn.executeRaw(`SAVEPOINT effect_sql_${id};`, []),
|
|
126
|
+
commit: conn => conn.commit,
|
|
127
|
+
rollback: conn => conn.rollback,
|
|
128
|
+
rollbackSavepoint: (conn, id) => conn.executeRaw(`ROLLBACK TO SAVEPOINT effect_sql_${id};`, [])
|
|
129
|
+
});
|
|
130
|
+
const acquirer = Effect.flatMap(Effect.serviceOption(LibsqlTransaction), Option.match({
|
|
131
|
+
onNone: () => semaphore.withPermits(1)(Effect.succeed(connection)),
|
|
132
|
+
onSome: ([conn]) => Effect.succeed(conn)
|
|
133
|
+
}));
|
|
81
134
|
return Object.assign(Client.make({
|
|
82
135
|
acquirer,
|
|
83
136
|
compiler,
|
|
84
|
-
|
|
85
|
-
spanAttributes: [...(options.spanAttributes ? Object.entries(options.spanAttributes) : []), [Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]]
|
|
137
|
+
spanAttributes
|
|
86
138
|
}), {
|
|
87
139
|
[TypeId]: TypeId,
|
|
88
|
-
config: options
|
|
140
|
+
config: options,
|
|
141
|
+
withTransaction,
|
|
142
|
+
sdk: connection.sdk
|
|
89
143
|
});
|
|
90
144
|
});
|
|
91
145
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LibsqlClient.js","names":["Client","SqlError","Statement","Libsql","Otel","Config","Context","Effect","
|
|
1
|
+
{"version":3,"file":"LibsqlClient.js","names":["Client","SqlError","Statement","Libsql","Otel","Config","Context","Effect","Layer","Option","Scope","TypeId","Symbol","for","LibsqlClient","GenericTag","LibsqlTransaction","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","defaultTransforms","transformResultNames","array","spanAttributes","Object","entries","SEMATTRS_DB_SYSTEM","DBSYSTEMVALUES_SQLITE","LibsqlConnectionImpl","sdk","constructor","run","sql","params","map","tryPromise","try","execute","args","catch","cause","message","results","rows","runRaw","runTransform","executeRaw","executeValues","row","Array","from","executeWithoutTransform","executeUnprepared","executeStream","dieMessage","beginTransaction","transaction","tx","commit","rollback","connection","acquireRelease","sync","createClient","close","semaphore","makeSemaphore","withTransaction","makeWithTransaction","transactionTag","acquireConnection","uninterruptibleMask","restore","pipe","bindTo","bind","scope","take","zipRight","addFinalizer","release","conn","begin","void","savepoint","id","rollbackSavepoint","acquirer","flatMap","serviceOption","match","onNone","withPermits","succeed","onSome","assign","config","layer","scopedContext","unwrap","client","add","SqlClient"],"sources":["../../src/LibsqlClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/sql-libsql",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "A libSQL toolkit for Effect",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"@opentelemetry/semantic-conventions": "^1.25.1"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
|
-
"@effect/platform": "^0.
|
|
18
|
-
"@effect/sql": "^0.
|
|
19
|
-
"effect": "^3.9.
|
|
17
|
+
"@effect/platform": "^0.68.0",
|
|
18
|
+
"@effect/sql": "^0.16.0",
|
|
19
|
+
"effect": "^3.9.1"
|
|
20
20
|
},
|
|
21
21
|
"publishConfig": {
|
|
22
22
|
"provenance": true
|
package/src/LibsqlClient.ts
CHANGED
|
@@ -11,8 +11,8 @@ import * as Config from "effect/Config"
|
|
|
11
11
|
import type { ConfigError } from "effect/ConfigError"
|
|
12
12
|
import * as Context from "effect/Context"
|
|
13
13
|
import * as Effect from "effect/Effect"
|
|
14
|
-
import { identity } from "effect/Function"
|
|
15
14
|
import * as Layer from "effect/Layer"
|
|
15
|
+
import * as Option from "effect/Option"
|
|
16
16
|
import * as Scope from "effect/Scope"
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -42,6 +42,10 @@ export interface LibsqlClient extends Client.SqlClient {
|
|
|
42
42
|
*/
|
|
43
43
|
export const LibsqlClient = Context.GenericTag<LibsqlClient>("@effect/sql-libsql/LibsqlClient")
|
|
44
44
|
|
|
45
|
+
const LibsqlTransaction = Context.GenericTag<readonly [LibsqlConnection, counter: number]>(
|
|
46
|
+
"@effect/sql-libsql/LibsqlClient/LibsqlTransaction"
|
|
47
|
+
)
|
|
48
|
+
|
|
45
49
|
/**
|
|
46
50
|
* @category models
|
|
47
51
|
* @since 1.0.0
|
|
@@ -91,7 +95,11 @@ export interface LibsqlClientConfig {
|
|
|
91
95
|
readonly transformQueryNames?: ((str: string) => string) | undefined
|
|
92
96
|
}
|
|
93
97
|
|
|
94
|
-
interface LibsqlConnection extends Connection {
|
|
98
|
+
interface LibsqlConnection extends Connection {
|
|
99
|
+
readonly beginTransaction: Effect.Effect<LibsqlConnection, SqlError>
|
|
100
|
+
readonly commit: Effect.Effect<void, SqlError>
|
|
101
|
+
readonly rollback: Effect.Effect<void, SqlError>
|
|
102
|
+
}
|
|
95
103
|
|
|
96
104
|
/**
|
|
97
105
|
* @category constructor
|
|
@@ -106,84 +114,136 @@ export const make = (
|
|
|
106
114
|
options.transformResultNames!
|
|
107
115
|
).array
|
|
108
116
|
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
117
|
+
const spanAttributes: Array<[string, unknown]> = [
|
|
118
|
+
...(options.spanAttributes ? Object.entries(options.spanAttributes) : []),
|
|
119
|
+
[Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
class LibsqlConnectionImpl implements LibsqlConnection {
|
|
123
|
+
constructor(readonly sdk: Libsql.Client | Libsql.Transaction) {}
|
|
124
|
+
|
|
125
|
+
run(
|
|
126
|
+
sql: string,
|
|
127
|
+
params: ReadonlyArray<Statement.Primitive> = []
|
|
128
|
+
) {
|
|
129
|
+
return Effect.map(
|
|
130
|
+
Effect.tryPromise({
|
|
131
|
+
try: () => this.sdk.execute({ sql, args: params as Array<any> }),
|
|
132
|
+
catch: (cause) => new SqlError({ cause, message: "Failed to execute statement" })
|
|
133
|
+
}),
|
|
134
|
+
(results) => results.rows
|
|
135
|
+
)
|
|
136
|
+
}
|
|
112
137
|
|
|
113
|
-
|
|
138
|
+
runRaw(
|
|
114
139
|
sql: string,
|
|
115
140
|
params: ReadonlyArray<Statement.Primitive> = []
|
|
116
|
-
)
|
|
117
|
-
Effect.tryPromise({
|
|
118
|
-
try: () =>
|
|
141
|
+
) {
|
|
142
|
+
return Effect.tryPromise({
|
|
143
|
+
try: () => this.sdk.execute({ sql, args: params as Array<any> }),
|
|
119
144
|
catch: (cause) => new SqlError({ cause, message: "Failed to execute statement" })
|
|
120
145
|
})
|
|
146
|
+
}
|
|
121
147
|
|
|
122
|
-
|
|
148
|
+
runTransform(
|
|
123
149
|
sql: string,
|
|
124
150
|
params: ReadonlyArray<Statement.Primitive> = []
|
|
125
|
-
)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
151
|
+
) {
|
|
152
|
+
return options.transformResultNames
|
|
153
|
+
? Effect.map(this.run(sql, params), transformRows)
|
|
154
|
+
: this.run(sql, params)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
execute(sql: string, params: ReadonlyArray<Statement.Primitive>) {
|
|
158
|
+
return this.runTransform(sql, params)
|
|
159
|
+
}
|
|
160
|
+
executeRaw(sql: string, params: ReadonlyArray<Statement.Primitive>) {
|
|
161
|
+
return this.runRaw(sql, params)
|
|
162
|
+
}
|
|
163
|
+
executeValues(sql: string, params: ReadonlyArray<Statement.Primitive>) {
|
|
164
|
+
return Effect.map(this.run(sql, params), (rows) => rows.map((row) => Array.from(row) as Array<any>))
|
|
165
|
+
}
|
|
166
|
+
executeWithoutTransform(sql: string, params: ReadonlyArray<Statement.Primitive>) {
|
|
167
|
+
return this.run(sql, params)
|
|
168
|
+
}
|
|
169
|
+
executeUnprepared(sql: string, params?: ReadonlyArray<Statement.Primitive>) {
|
|
170
|
+
return this.run(sql, params)
|
|
171
|
+
}
|
|
172
|
+
executeStream() {
|
|
173
|
+
return Effect.dieMessage("executeStream not implemented")
|
|
174
|
+
}
|
|
175
|
+
get beginTransaction() {
|
|
176
|
+
return Effect.map(
|
|
177
|
+
Effect.tryPromise({
|
|
178
|
+
try: () => (this.sdk as Libsql.Client).transaction("write"),
|
|
179
|
+
catch: (cause) => new SqlError({ cause, message: "Failed to begin transaction" })
|
|
180
|
+
}),
|
|
181
|
+
(tx) => new LibsqlConnectionImpl(tx)
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
get commit() {
|
|
185
|
+
return Effect.tryPromise({
|
|
186
|
+
try: () => (this.sdk as Libsql.Transaction).commit(),
|
|
187
|
+
catch: (cause) => new SqlError({ cause, message: "Failed to commit transaction" })
|
|
129
188
|
})
|
|
189
|
+
}
|
|
190
|
+
get rollback() {
|
|
191
|
+
return Effect.tryPromise({
|
|
192
|
+
try: () => (this.sdk as Libsql.Transaction).rollback(),
|
|
193
|
+
catch: (cause) => new SqlError({ cause, message: "Failed to rollback transaction" })
|
|
194
|
+
})
|
|
195
|
+
}
|
|
196
|
+
}
|
|
130
197
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
198
|
+
const connection = yield* Effect.map(
|
|
199
|
+
Effect.acquireRelease(
|
|
200
|
+
Effect.sync(() => Libsql.createClient(options as Libsql.Config)),
|
|
201
|
+
(sdk) => Effect.sync(() => sdk.close())
|
|
202
|
+
),
|
|
203
|
+
(sdk) => new LibsqlConnectionImpl(sdk)
|
|
204
|
+
)
|
|
205
|
+
const semaphore = yield* Effect.makeSemaphore(1)
|
|
206
|
+
|
|
207
|
+
const withTransaction = Client.makeWithTransaction({
|
|
208
|
+
transactionTag: LibsqlTransaction,
|
|
209
|
+
spanAttributes,
|
|
210
|
+
acquireConnection: Effect.uninterruptibleMask((restore) =>
|
|
211
|
+
Scope.make().pipe(
|
|
212
|
+
Effect.bindTo("scope"),
|
|
213
|
+
Effect.bind("conn", ({ scope }) =>
|
|
214
|
+
restore(semaphore.take(1)).pipe(
|
|
215
|
+
Effect.zipRight(Scope.addFinalizer(scope, semaphore.release(1))),
|
|
216
|
+
Effect.zipRight(connection.beginTransaction)
|
|
217
|
+
)),
|
|
218
|
+
Effect.map(({ conn, scope }) => [scope, conn] as const)
|
|
219
|
+
)
|
|
220
|
+
),
|
|
221
|
+
begin: () => Effect.void, // already begun in acquireConnection
|
|
222
|
+
savepoint: (conn, id) => conn.executeRaw(`SAVEPOINT effect_sql_${id};`, []),
|
|
223
|
+
commit: (conn) => conn.commit,
|
|
224
|
+
rollback: (conn) => conn.rollback,
|
|
225
|
+
rollbackSavepoint: (conn, id) => conn.executeRaw(`ROLLBACK TO SAVEPOINT effect_sql_${id};`, [])
|
|
155
226
|
})
|
|
156
227
|
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
Effect.zipRight(
|
|
164
|
-
restore(semaphore.take(1)),
|
|
165
|
-
Effect.tap(
|
|
166
|
-
Effect.scope,
|
|
167
|
-
(scope) => Scope.addFinalizer(scope, semaphore.release(1))
|
|
168
|
-
)
|
|
169
|
-
),
|
|
170
|
-
connection
|
|
171
|
-
)
|
|
228
|
+
const acquirer = Effect.flatMap(
|
|
229
|
+
Effect.serviceOption(LibsqlTransaction),
|
|
230
|
+
Option.match({
|
|
231
|
+
onNone: () => semaphore.withPermits(1)(Effect.succeed(connection as LibsqlConnection)),
|
|
232
|
+
onSome: ([conn]) => Effect.succeed(conn)
|
|
233
|
+
})
|
|
172
234
|
)
|
|
173
235
|
|
|
174
236
|
return Object.assign(
|
|
175
237
|
Client.make({
|
|
176
238
|
acquirer,
|
|
177
239
|
compiler,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
...(options.spanAttributes ? Object.entries(options.spanAttributes) : []),
|
|
181
|
-
[Otel.SEMATTRS_DB_SYSTEM, Otel.DBSYSTEMVALUES_SQLITE]
|
|
182
|
-
]
|
|
183
|
-
}) as LibsqlClient,
|
|
240
|
+
spanAttributes
|
|
241
|
+
}),
|
|
184
242
|
{
|
|
185
243
|
[TypeId]: TypeId as TypeId,
|
|
186
|
-
config: options
|
|
244
|
+
config: options,
|
|
245
|
+
withTransaction,
|
|
246
|
+
sdk: connection.sdk
|
|
187
247
|
}
|
|
188
248
|
)
|
|
189
249
|
})
|