@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.
@@ -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 makeConnection = Effect.gen(function* () {
42
- const db = Libsql.createClient(options);
43
- yield* Effect.addFinalizer(() => Effect.sync(() => db.close()));
44
- const run = (sql, params = []) => Effect.tryPromise({
45
- try: () => db.execute({
46
- sql,
47
- args: params
48
- }).then(results => results.rows),
49
- catch: cause => new _SqlError.SqlError({
50
- cause,
51
- message: "Failed to execute statement"
52
- })
53
- });
54
- const runRaw = (sql, params = []) => Effect.tryPromise({
55
- try: () => db.execute({
56
- sql,
57
- args: params
58
- }),
59
- catch: cause => new _SqlError.SqlError({
60
- cause,
61
- message: "Failed to execute statement"
62
- })
63
- });
64
- const runTransform = options.transformResultNames ? (sql, params) => Effect.map(run(sql, params), transformRows) : run;
65
- return (0, _Function.identity)({
66
- execute(sql, params) {
67
- return runTransform(sql, params);
68
- },
69
- executeRaw(sql, params) {
70
- return runRaw(sql, params);
71
- },
72
- executeValues(sql, params) {
73
- return Effect.map(run(sql, params), rows => rows.map(row => Array.from(row)));
74
- },
75
- executeWithoutTransform(sql, params) {
76
- return run(sql, params);
77
- },
78
- executeUnprepared(sql, params) {
79
- return run(sql, params);
80
- },
81
- executeStream(_sql, _params) {
82
- return Effect.dieMessage("executeStream not implemented");
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 connection = yield* makeConnection;
88
- const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
89
- const transactionAcquirer = Effect.uninterruptibleMask(restore => Effect.as(Effect.zipRight(restore(semaphore.take(1)), Effect.tap(Effect.scope, scope => Scope.addFinalizer(scope, semaphore.release(1)))), connection));
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
- transactionAcquirer,
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","_Function","Layer","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","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","defaultTransforms","transformResultNames","array","makeConnection","db","createClient","addFinalizer","sync","close","run","sql","params","tryPromise","try","execute","args","then","results","rows","catch","cause","SqlError","message","runRaw","runTransform","map","identity","executeRaw","executeValues","row","Array","from","executeWithoutTransform","executeUnprepared","executeStream","_sql","_params","dieMessage","semaphore","makeSemaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","as","zipRight","take","tap","scope","release","assign","spanAttributes","entries","SEMATTRS_DB_SYSTEM","DBSYSTEMVALUES_SQLITE","config","layer","scopedContext","unwrap","pipe","flatMap","client","add","SqlClient"],"sources":["../../src/LibsqlClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,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;AAE/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;AAID;;;GAGG;AACH,eAAO,MAAM,IAAI,YACN,kBAAkB,KAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAuF7C,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"}
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"}
@@ -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 makeConnection = Effect.gen(function* () {
33
- const db = Libsql.createClient(options);
34
- yield* Effect.addFinalizer(() => Effect.sync(() => db.close()));
35
- const run = (sql, params = []) => Effect.tryPromise({
36
- try: () => db.execute({
37
- sql,
38
- args: params
39
- }).then(results => results.rows),
40
- catch: cause => new SqlError({
41
- cause,
42
- message: "Failed to execute statement"
43
- })
44
- });
45
- const runRaw = (sql, params = []) => Effect.tryPromise({
46
- try: () => db.execute({
47
- sql,
48
- args: params
49
- }),
50
- catch: cause => new SqlError({
51
- cause,
52
- message: "Failed to execute statement"
53
- })
54
- });
55
- const runTransform = options.transformResultNames ? (sql, params) => Effect.map(run(sql, params), transformRows) : run;
56
- return identity({
57
- execute(sql, params) {
58
- return runTransform(sql, params);
59
- },
60
- executeRaw(sql, params) {
61
- return runRaw(sql, params);
62
- },
63
- executeValues(sql, params) {
64
- return Effect.map(run(sql, params), rows => rows.map(row => Array.from(row)));
65
- },
66
- executeWithoutTransform(sql, params) {
67
- return run(sql, params);
68
- },
69
- executeUnprepared(sql, params) {
70
- return run(sql, params);
71
- },
72
- executeStream(_sql, _params) {
73
- return Effect.dieMessage("executeStream not implemented");
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 connection = yield* makeConnection;
79
- const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
80
- const transactionAcquirer = Effect.uninterruptibleMask(restore => Effect.as(Effect.zipRight(restore(semaphore.take(1)), Effect.tap(Effect.scope, scope => Scope.addFinalizer(scope, semaphore.release(1)))), connection));
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
- transactionAcquirer,
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","identity","Layer","Scope","TypeId","Symbol","for","LibsqlClient","GenericTag","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","defaultTransforms","transformResultNames","array","makeConnection","db","createClient","addFinalizer","sync","close","run","sql","params","tryPromise","try","execute","args","then","results","rows","catch","cause","message","runRaw","runTransform","map","executeRaw","executeValues","row","Array","from","executeWithoutTransform","executeUnprepared","executeStream","_sql","_params","dieMessage","semaphore","makeSemaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","as","zipRight","take","tap","scope","release","Object","assign","spanAttributes","entries","SEMATTRS_DB_SYSTEM","DBSYSTEMVALUES_SQLITE","config","layer","scopedContext","unwrap","pipe","flatMap","client","add","SqlClient"],"sources":["../../src/LibsqlClient.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,MAAM,MAAM,uBAAuB;AAE/C,SAASC,QAAQ,QAAQ,sBAAsB;AAC/C,OAAO,KAAKC,SAAS,MAAM,uBAAuB;AAClD,OAAO,KAAKC,MAAM,MAAM,gBAAgB;AACxC,OAAO,KAAKC,IAAI,MAAM,qCAAqC;AAC3D,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAErC;;;;AAIA,OAAO,MAAMC,MAAM,gBAAkBC,MAAM,CAACC,GAAG,CAAC,iCAAiC,CAAC;AAiBlF;;;;AAIA,OAAO,MAAMC,YAAY,gBAAGR,OAAO,CAACS,UAAU,CAAe,iCAAiC,CAAC;AAqD/F;;;;AAIA,OAAO,MAAMC,IAAI,GACfC,OAA2B,IAE3BV,MAAM,CAACW,GAAG,CAAC,aAAS;EAClB,MAAMC,QAAQ,GAAGjB,SAAS,CAACkB,kBAAkB,CAACH,OAAO,CAACI,mBAAmB,CAAC;EAC1E,MAAMC,aAAa,GAAGpB,SAAS,CAACqB,iBAAiB,CAC/CN,OAAO,CAACO,oBAAqB,CAC9B,CAACC,KAAK;EAEP,MAAMC,cAAc,GAAGnB,MAAM,CAACW,GAAG,CAAC,aAAS;IACzC,MAAMS,EAAE,GAAGxB,MAAM,CAACyB,YAAY,CAACX,OAAwB,CAAC;IACxD,OAAOV,MAAM,CAACsB,YAAY,CAAC,MAAMtB,MAAM,CAACuB,IAAI,CAAC,MAAMH,EAAE,CAACI,KAAK,EAAE,CAAC,CAAC;IAE/D,MAAMC,GAAG,GAAGA,CACVC,GAAW,EACXC,MAAA,GAA6C,EAAE,KAE/C3B,MAAM,CAAC4B,UAAU,CAAC;MAChBC,GAAG,EAAEA,CAAA,KAAMT,EAAE,CAACU,OAAO,CAAC;QAAEJ,GAAG;QAAEK,IAAI,EAAEJ;MAAoB,CAAE,CAAC,CAACK,IAAI,CAAEC,OAAO,IAAKA,OAAO,CAACC,IAAI,CAAC;MAC1FC,KAAK,EAAGC,KAAK,IAAK,IAAI1C,QAAQ,CAAC;QAAE0C,KAAK;QAAEC,OAAO,EAAE;MAA6B,CAAE;KACjF,CAAC;IAEJ,MAAMC,MAAM,GAAGA,CACbZ,GAAW,EACXC,MAAA,GAA6C,EAAE,KAE/C3B,MAAM,CAAC4B,UAAU,CAAC;MAChBC,GAAG,EAAEA,CAAA,KAAMT,EAAE,CAACU,OAAO,CAAC;QAAEJ,GAAG;QAAEK,IAAI,EAAEJ;MAAoB,CAAE,CAAC;MAC1DQ,KAAK,EAAGC,KAAK,IAAK,IAAI1C,QAAQ,CAAC;QAAE0C,KAAK;QAAEC,OAAO,EAAE;MAA6B,CAAE;KACjF,CAAC;IAEJ,MAAME,YAAY,GAAG7B,OAAO,CAACO,oBAAoB,GAC7C,CAACS,GAAW,EAAEC,MAA2C,KAAK3B,MAAM,CAACwC,GAAG,CAACf,GAAG,CAACC,GAAG,EAAEC,MAAM,CAAC,EAAEZ,aAAa,CAAC,GACzGU,GAAG;IAEP,OAAOxB,QAAQ,CAAmB;MAChC6B,OAAOA,CAACJ,GAAG,EAAEC,MAAM;QACjB,OAAOY,YAAY,CAACb,GAAG,EAAEC,MAAM,CAAC;MAClC,CAAC;MACDc,UAAUA,CAACf,GAAG,EAAEC,MAAM;QACpB,OAAOW,MAAM,CAACZ,GAAG,EAAEC,MAAM,CAAC;MAC5B,CAAC;MACDe,aAAaA,CAAChB,GAAG,EAAEC,MAAM;QACvB,OAAO3B,MAAM,CAACwC,GAAG,CAACf,GAAG,CAACC,GAAG,EAAEC,MAAM,CAAC,EAAGO,IAAI,IAAKA,IAAI,CAACM,GAAG,CAAEG,GAAG,IAAKC,KAAK,CAACC,IAAI,CAACF,GAAG,CAAe,CAAC,CAAC;MACjG,CAAC;MACDG,uBAAuBA,CAACpB,GAAG,EAAEC,MAAM;QACjC,OAAOF,GAAG,CAACC,GAAG,EAAEC,MAAM,CAAC;MACzB,CAAC;MACDoB,iBAAiBA,CAACrB,GAAG,EAAEC,MAAM;QAC3B,OAAOF,GAAG,CAACC,GAAG,EAAEC,MAAM,CAAC;MACzB,CAAC;MACDqB,aAAaA,CAACC,IAAI,EAAEC,OAAO;QACzB,OAAOlD,MAAM,CAACmD,UAAU,CAAC,+BAA+B,CAAC;MAC3D;KACD,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMC,SAAS,GAAG,OAAOpD,MAAM,CAACqD,aAAa,CAAC,CAAC,CAAC;EAChD,MAAMC,UAAU,GAAG,OAAOnC,cAAc;EAExC,MAAMoC,QAAQ,GAAGH,SAAS,CAACI,WAAW,CAAC,CAAC,CAAC,CAACxD,MAAM,CAACyD,OAAO,CAACH,UAAU,CAAC,CAAC;EACrE,MAAMI,mBAAmB,GAAG1D,MAAM,CAAC2D,mBAAmB,CAAEC,OAAO,IAC7D5D,MAAM,CAAC6D,EAAE,CACP7D,MAAM,CAAC8D,QAAQ,CACbF,OAAO,CAACR,SAAS,CAACW,IAAI,CAAC,CAAC,CAAC,CAAC,EAC1B/D,MAAM,CAACgE,GAAG,CACRhE,MAAM,CAACiE,KAAK,EACXA,KAAK,IAAK9D,KAAK,CAACmB,YAAY,CAAC2C,KAAK,EAAEb,SAAS,CAACc,OAAO,CAAC,CAAC,CAAC,CAAC,CAC3D,CACF,EACDZ,UAAU,CACX,CACF;EAED,OAAOa,MAAM,CAACC,MAAM,CAClB3E,MAAM,CAACgB,IAAI,CAAC;IACV8C,QAAQ;IACR3C,QAAQ;IACR8C,mBAAmB;IACnBW,cAAc,EAAE,CACd,IAAI3D,OAAO,CAAC2D,cAAc,GAAGF,MAAM,CAACG,OAAO,CAAC5D,OAAO,CAAC2D,cAAc,CAAC,GAAG,EAAE,CAAC,EACzE,CAACxE,IAAI,CAAC0E,kBAAkB,EAAE1E,IAAI,CAAC2E,qBAAqB,CAAC;GAExD,CAAiB,EAClB;IACE,CAACpE,MAAM,GAAGA,MAAgB;IAC1BqE,MAAM,EAAE/D;GACT,CACF;AACH,CAAC,CAAC;AAEJ;;;;AAIA,OAAO,MAAMgE,KAAK,GAChBD,MAA8C,IAE9CvE,KAAK,CAACyE,aAAa,CACjB7E,MAAM,CAAC8E,MAAM,CAACH,MAAM,CAAC,CAACI,IAAI,CACxB7E,MAAM,CAAC8E,OAAO,CAACrE,IAAI,CAAC,EACpBT,MAAM,CAACwC,GAAG,CAAEuC,MAAM,IAChBhF,OAAO,CAACU,IAAI,CAACF,YAAY,EAAEwE,MAAM,CAAC,CAACF,IAAI,CACrC9E,OAAO,CAACiF,GAAG,CAACvF,MAAM,CAACwF,SAAS,EAAEF,MAAM,CAAC,CACtC,CACF,CACF,CACF","ignoreList":[]}
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.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.67.0",
18
- "@effect/sql": "^0.15.0",
19
- "effect": "^3.9.0"
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
@@ -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 makeConnection = Effect.gen(function*() {
110
- const db = Libsql.createClient(options as Libsql.Config)
111
- yield* Effect.addFinalizer(() => Effect.sync(() => db.close()))
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
- const run = (
138
+ runRaw(
114
139
  sql: string,
115
140
  params: ReadonlyArray<Statement.Primitive> = []
116
- ) =>
117
- Effect.tryPromise({
118
- try: () => db.execute({ sql, args: params as Array<any> }).then((results) => results.rows),
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
- const runRaw = (
148
+ runTransform(
123
149
  sql: string,
124
150
  params: ReadonlyArray<Statement.Primitive> = []
125
- ) =>
126
- Effect.tryPromise({
127
- try: () => db.execute({ sql, args: params as Array<any> }),
128
- catch: (cause) => new SqlError({ cause, message: "Failed to execute statement" })
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
- const runTransform = options.transformResultNames
132
- ? (sql: string, params?: ReadonlyArray<Statement.Primitive>) => Effect.map(run(sql, params), transformRows)
133
- : run
134
-
135
- return identity<LibsqlConnection>({
136
- execute(sql, params) {
137
- return runTransform(sql, params)
138
- },
139
- executeRaw(sql, params) {
140
- return runRaw(sql, params)
141
- },
142
- executeValues(sql, params) {
143
- return Effect.map(run(sql, params), (rows) => rows.map((row) => Array.from(row) as Array<any>))
144
- },
145
- executeWithoutTransform(sql, params) {
146
- return run(sql, params)
147
- },
148
- executeUnprepared(sql, params) {
149
- return run(sql, params)
150
- },
151
- executeStream(_sql, _params) {
152
- return Effect.dieMessage("executeStream not implemented")
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 semaphore = yield* Effect.makeSemaphore(1)
158
- const connection = yield* makeConnection
159
-
160
- const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
161
- const transactionAcquirer = Effect.uninterruptibleMask((restore) =>
162
- Effect.as(
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
- transactionAcquirer,
179
- spanAttributes: [
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
  })