@effect/sql-sqlite-node 0.50.1 → 4.0.0-beta.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/{dts/SqliteClient.d.ts → SqliteClient.d.ts} +9 -13
- package/dist/SqliteClient.d.ts.map +1 -0
- package/dist/{esm/SqliteClient.js → SqliteClient.js} +23 -17
- package/dist/SqliteClient.js.map +1 -0
- package/dist/SqliteMigrator.d.ts +23 -0
- package/dist/SqliteMigrator.d.ts.map +1 -0
- package/dist/SqliteMigrator.js +59 -0
- package/dist/SqliteMigrator.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{esm/index.js → index.js} +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -50
- package/src/SqliteClient.ts +37 -40
- package/src/SqliteMigrator.ts +49 -60
- package/src/index.ts +8 -2
- package/SqliteClient/package.json +0 -6
- package/SqliteMigrator/package.json +0 -6
- package/dist/cjs/SqliteClient.js +0 -171
- package/dist/cjs/SqliteClient.js.map +0 -1
- package/dist/cjs/SqliteMigrator.js +0 -95
- package/dist/cjs/SqliteMigrator.js.map +0 -1
- package/dist/cjs/index.js +0 -12
- package/dist/cjs/index.js.map +0 -1
- package/dist/dts/SqliteClient.d.ts.map +0 -1
- package/dist/dts/SqliteMigrator.d.ts +0 -28
- package/dist/dts/SqliteMigrator.d.ts.map +0 -1
- package/dist/dts/index.d.ts +0 -9
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/esm/SqliteClient.js.map +0 -1
- package/dist/esm/SqliteMigrator.js +0 -59
- package/dist/esm/SqliteMigrator.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/package.json +0 -4
- package/index/package.json +0 -6
|
@@ -1,26 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
import * as Reactivity from "@effect/experimental/Reactivity";
|
|
5
|
-
import * as Client from "@effect/sql/SqlClient";
|
|
6
|
-
import { SqlError } from "@effect/sql/SqlError";
|
|
7
1
|
import * as Config from "effect/Config";
|
|
8
|
-
import type { ConfigError } from "effect/ConfigError";
|
|
9
|
-
import * as Context from "effect/Context";
|
|
10
2
|
import * as Duration from "effect/Duration";
|
|
11
3
|
import * as Effect from "effect/Effect";
|
|
12
4
|
import * as Layer from "effect/Layer";
|
|
13
5
|
import * as Scope from "effect/Scope";
|
|
6
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
7
|
+
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
8
|
+
import * as Client from "effect/unstable/sql/SqlClient";
|
|
9
|
+
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
14
10
|
/**
|
|
15
11
|
* @category type ids
|
|
16
12
|
* @since 1.0.0
|
|
17
13
|
*/
|
|
18
|
-
export declare const TypeId:
|
|
14
|
+
export declare const TypeId: TypeId;
|
|
19
15
|
/**
|
|
20
16
|
* @category type ids
|
|
21
17
|
* @since 1.0.0
|
|
22
18
|
*/
|
|
23
|
-
export type TypeId =
|
|
19
|
+
export type TypeId = "~@effect/sql-sqlite-node/SqliteClient";
|
|
24
20
|
/**
|
|
25
21
|
* @category models
|
|
26
22
|
* @since 1.0.0
|
|
@@ -46,7 +42,7 @@ export interface BackupMetadata {
|
|
|
46
42
|
* @category tags
|
|
47
43
|
* @since 1.0.0
|
|
48
44
|
*/
|
|
49
|
-
export declare const SqliteClient:
|
|
45
|
+
export declare const SqliteClient: ServiceMap.Service<SqliteClient, SqliteClient>;
|
|
50
46
|
/**
|
|
51
47
|
* @category models
|
|
52
48
|
* @since 1.0.0
|
|
@@ -70,10 +66,10 @@ export declare const make: (options: SqliteClientConfig) => Effect.Effect<Sqlite
|
|
|
70
66
|
* @category layers
|
|
71
67
|
* @since 1.0.0
|
|
72
68
|
*/
|
|
73
|
-
export declare const layerConfig: (config: Config.
|
|
69
|
+
export declare const layerConfig: (config: Config.Wrap<SqliteClientConfig>) => Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError>;
|
|
74
70
|
/**
|
|
75
71
|
* @category layers
|
|
76
72
|
* @since 1.0.0
|
|
77
73
|
*/
|
|
78
|
-
export declare const layer: (config: SqliteClientConfig) => Layer.Layer<SqliteClient | Client.SqlClient
|
|
74
|
+
export declare const layer: (config: SqliteClientConfig) => Layer.Layer<SqliteClient | Client.SqlClient>;
|
|
79
75
|
//# sourceMappingURL=SqliteClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import * as Reactivity from "@effect/experimental/Reactivity";
|
|
5
|
-
import * as Client from "@effect/sql/SqlClient";
|
|
6
|
-
import { SqlError } from "@effect/sql/SqlError";
|
|
7
|
-
import * as Statement from "@effect/sql/Statement";
|
|
8
4
|
import Sqlite from "better-sqlite3";
|
|
9
5
|
import * as Cache from "effect/Cache";
|
|
10
6
|
import * as Config from "effect/Config";
|
|
11
|
-
import * as Context from "effect/Context";
|
|
12
7
|
import * as Duration from "effect/Duration";
|
|
13
8
|
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as Fiber from "effect/Fiber";
|
|
14
10
|
import { identity } from "effect/Function";
|
|
15
11
|
import * as Layer from "effect/Layer";
|
|
16
12
|
import * as Scope from "effect/Scope";
|
|
13
|
+
import * as ServiceMap from "effect/ServiceMap";
|
|
14
|
+
import * as Stream from "effect/Stream";
|
|
15
|
+
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
16
|
+
import * as Client from "effect/unstable/sql/SqlClient";
|
|
17
|
+
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
18
|
+
import * as Statement from "effect/unstable/sql/Statement";
|
|
17
19
|
const ATTR_DB_SYSTEM_NAME = "db.system.name";
|
|
18
20
|
/**
|
|
19
21
|
* @category type ids
|
|
20
22
|
* @since 1.0.0
|
|
21
23
|
*/
|
|
22
|
-
export const TypeId =
|
|
24
|
+
export const TypeId = "~@effect/sql-sqlite-node/SqliteClient";
|
|
23
25
|
/**
|
|
24
26
|
* @category tags
|
|
25
27
|
* @since 1.0.0
|
|
26
28
|
*/
|
|
27
|
-
export const SqliteClient = /*#__PURE__*/
|
|
29
|
+
export const SqliteClient = /*#__PURE__*/ServiceMap.Service("@effect/sql-sqlite-node/SqliteClient");
|
|
28
30
|
/**
|
|
29
31
|
* @category constructor
|
|
30
32
|
* @since 1.0.0
|
|
@@ -52,8 +54,8 @@ export const make = options => Effect.gen(function* () {
|
|
|
52
54
|
})
|
|
53
55
|
})
|
|
54
56
|
});
|
|
55
|
-
const runStatement = (statement, params, raw) => Effect.
|
|
56
|
-
if (
|
|
57
|
+
const runStatement = (statement, params, raw) => Effect.withFiber(fiber => {
|
|
58
|
+
if (ServiceMap.get(fiber.services, Client.SafeIntegers)) {
|
|
57
59
|
statement.safeIntegers(true);
|
|
58
60
|
}
|
|
59
61
|
try {
|
|
@@ -69,8 +71,8 @@ export const make = options => Effect.gen(function* () {
|
|
|
69
71
|
}));
|
|
70
72
|
}
|
|
71
73
|
});
|
|
72
|
-
const run = (sql, params, raw = false) => Effect.flatMap(
|
|
73
|
-
const runValues = (sql, params) => Effect.acquireUseRelease(
|
|
74
|
+
const run = (sql, params, raw = false) => Effect.flatMap(Cache.get(prepareCache, sql), s => runStatement(s, params, raw));
|
|
75
|
+
const runValues = (sql, params) => Effect.acquireUseRelease(Cache.get(prepareCache, sql), statement => Effect.try({
|
|
74
76
|
try: () => {
|
|
75
77
|
if (statement.reader) {
|
|
76
78
|
statement.raw(true);
|
|
@@ -99,7 +101,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
99
101
|
return transformRows ? Effect.map(effect, transformRows) : effect;
|
|
100
102
|
},
|
|
101
103
|
executeStream(_sql, _params) {
|
|
102
|
-
return
|
|
104
|
+
return Stream.die("executeStream not implemented");
|
|
103
105
|
},
|
|
104
106
|
export: Effect.try({
|
|
105
107
|
try: () => db.serialize(),
|
|
@@ -118,20 +120,24 @@ export const make = options => Effect.gen(function* () {
|
|
|
118
120
|
});
|
|
119
121
|
},
|
|
120
122
|
loadExtension(path) {
|
|
121
|
-
return Effect.
|
|
123
|
+
return Effect.try({
|
|
122
124
|
try: () => db.loadExtension(path),
|
|
123
125
|
catch: cause => new SqlError({
|
|
124
126
|
cause,
|
|
125
127
|
message: "Failed to load extension"
|
|
126
128
|
})
|
|
127
|
-
})
|
|
129
|
+
});
|
|
128
130
|
}
|
|
129
131
|
});
|
|
130
132
|
});
|
|
131
133
|
const semaphore = yield* Effect.makeSemaphore(1);
|
|
132
134
|
const connection = yield* makeConnection;
|
|
133
135
|
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection));
|
|
134
|
-
const transactionAcquirer = Effect.uninterruptibleMask(restore =>
|
|
136
|
+
const transactionAcquirer = Effect.uninterruptibleMask(restore => {
|
|
137
|
+
const fiber = Fiber.getCurrent();
|
|
138
|
+
const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope);
|
|
139
|
+
return Effect.as(Effect.tap(restore(semaphore.take(1)), () => Scope.addFinalizer(scope, semaphore.release(1))), connection);
|
|
140
|
+
});
|
|
135
141
|
return Object.assign(yield* Client.make({
|
|
136
142
|
acquirer,
|
|
137
143
|
compiler,
|
|
@@ -150,10 +156,10 @@ export const make = options => Effect.gen(function* () {
|
|
|
150
156
|
* @category layers
|
|
151
157
|
* @since 1.0.0
|
|
152
158
|
*/
|
|
153
|
-
export const layerConfig = config => Layer.
|
|
159
|
+
export const layerConfig = config => Layer.effectServices(Config.unwrap(config).asEffect().pipe(Effect.flatMap(make), Effect.map(client => ServiceMap.make(SqliteClient, client).pipe(ServiceMap.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer));
|
|
154
160
|
/**
|
|
155
161
|
* @category layers
|
|
156
162
|
* @since 1.0.0
|
|
157
163
|
*/
|
|
158
|
-
export const layer = config => Layer.
|
|
164
|
+
export const layer = config => Layer.effectServices(Effect.map(make(config), client => ServiceMap.make(SqliteClient, client).pipe(ServiceMap.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer));
|
|
159
165
|
//# sourceMappingURL=SqliteClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteClient.js","names":["Sqlite","Cache","Config","Duration","Effect","Fiber","identity","Layer","Scope","ServiceMap","Stream","Reactivity","Client","SqlError","Statement","ATTR_DB_SYSTEM_NAME","TypeId","SqliteClient","Service","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","scope","db","filename","readonly","addFinalizer","sync","close","disableWAL","pragma","prepareCache","capacity","prepareCacheSize","timeToLive","prepareCacheTTL","minutes","lookup","sql","try","prepare","catch","cause","message","runStatement","statement","params","raw","withFiber","fiber","get","services","SafeIntegers","safeIntegers","reader","succeed","all","result","run","fail","flatMap","s","runValues","acquireUseRelease","execute","map","executeRaw","executeValues","executeUnprepared","effect","executeStream","_sql","_params","die","export","serialize","backup","destination","tryPromise","loadExtension","path","semaphore","makeSemaphore","connection","acquirer","withPermits","transactionAcquirer","uninterruptibleMask","restore","getCurrent","getUnsafe","as","tap","take","release","Object","assign","spanAttributes","entries","config","_","layerConfig","effectServices","unwrap","asEffect","pipe","client","add","SqlClient","provide","layer"],"sources":["../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import type * as Effect from "effect/Effect";
|
|
5
|
+
import * as Layer from "effect/Layer";
|
|
6
|
+
import * as Migrator from "effect/unstable/sql/Migrator";
|
|
7
|
+
import type * as Client from "effect/unstable/sql/SqlClient";
|
|
8
|
+
import type { SqlError } from "effect/unstable/sql/SqlError";
|
|
9
|
+
/**
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
export * from "effect/unstable/sql/Migrator";
|
|
13
|
+
/**
|
|
14
|
+
* @category constructor
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export declare const run: <R2 = never>(options: Migrator.MigratorOptions<R2>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, Migrator.MigrationError | SqlError, Client.SqlClient | R2>;
|
|
18
|
+
/**
|
|
19
|
+
* @category constructor
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
*/
|
|
22
|
+
export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, Migrator.MigrationError | SqlError, Client.SqlClient | R>;
|
|
23
|
+
//# sourceMappingURL=SqliteMigrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteMigrator.d.ts","sourceRoot":"","sources":["../src/SqliteMigrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAE5D;;GAEG;AACH,cAAc,8BAA8B,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,EAC3B,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAClC,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,EAAE,CA2CrB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,SAAS,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CACZ,KAAK,EACL,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,CAAC,CACgB,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import * as Migrator from "effect/unstable/sql/Migrator";
|
|
3
|
+
/**
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
export * from "effect/unstable/sql/Migrator";
|
|
7
|
+
/**
|
|
8
|
+
* @category constructor
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
export const run = /*#__PURE__*/Migrator.make({
|
|
12
|
+
// dumpSchema(path, table) {
|
|
13
|
+
// const dump = (args: Array<string>) =>
|
|
14
|
+
// Effect.gen(function*() {
|
|
15
|
+
// const sql = yield* SqliteClient
|
|
16
|
+
// const dump = yield* pipe(
|
|
17
|
+
// Command.make("sqlite3", sql.config.filename, ...args),
|
|
18
|
+
// Command.string
|
|
19
|
+
// )
|
|
20
|
+
// return dump.replace(/^create table sqlite_sequence\(.*$/im, "")
|
|
21
|
+
// .replace(/\n{2,}/gm, "\n\n")
|
|
22
|
+
// .trim()
|
|
23
|
+
// }).pipe(
|
|
24
|
+
// Effect.mapError((error) => new Migrator.MigrationError({ kind: "Failed", message: error.message }))
|
|
25
|
+
// )
|
|
26
|
+
//
|
|
27
|
+
// const dumpSchema = dump([".schema"])
|
|
28
|
+
//
|
|
29
|
+
// const dumpMigrations = dump([
|
|
30
|
+
// "--cmd",
|
|
31
|
+
// `.mode insert ${table}`,
|
|
32
|
+
// `select * from ${table}`
|
|
33
|
+
// ])
|
|
34
|
+
//
|
|
35
|
+
// const dumpAll = Effect.map(
|
|
36
|
+
// Effect.all([dumpSchema, dumpMigrations], { concurrency: 2 }),
|
|
37
|
+
// ([schema, migrations]) => schema + "\n\n" + migrations
|
|
38
|
+
// )
|
|
39
|
+
//
|
|
40
|
+
// const dumpFile = (file: string) =>
|
|
41
|
+
// Effect.gen(function*() {
|
|
42
|
+
// const fs = yield* FileSystem
|
|
43
|
+
// const path = yield* Path
|
|
44
|
+
// const dump = yield* dumpAll
|
|
45
|
+
// yield* fs.makeDirectory(path.dirname(file), { recursive: true })
|
|
46
|
+
// yield* fs.writeFileString(file, dump)
|
|
47
|
+
// }).pipe(
|
|
48
|
+
// Effect.mapError((error) => new Migrator.MigrationError({ kind: "Failed", message: error.message }))
|
|
49
|
+
// )
|
|
50
|
+
//
|
|
51
|
+
// return dumpFile(path)
|
|
52
|
+
// }
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* @category constructor
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*/
|
|
58
|
+
export const layer = options => Layer.effectDiscard(run(options));
|
|
59
|
+
//# sourceMappingURL=SqliteMigrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteMigrator.js","names":["Layer","Migrator","run","make","layer","options","effectDiscard"],"sources":["../src/SqliteMigrator.ts"],"sourcesContent":[null],"mappings":"AAIA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,8BAA8B;AAIxD;;;AAGA,cAAc,8BAA8B;AAE5C;;;;AAIA,OAAO,MAAMC,GAAG,gBAMZD,QAAQ,CAACE,IAAI,CAAC;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA,CACD,CAAC;AAEF;;;;AAIA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAKjCL,KAAK,CAACM,aAAa,CAACJ,GAAG,CAACG,OAAO,CAAC,CAAC","ignoreList":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["SqliteClient","SqliteMigrator"],"sources":["../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAIA;AAEA;;;AAGA,OAAO,KAAKA,YAAY,MAAM,mBAAmB;AAEjD;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,64 +1,65 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/sql-sqlite-node",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
3
|
+
"version": "4.0.0-beta.0",
|
|
4
|
+
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"description": "A SQLite toolkit for Effect",
|
|
7
|
+
"homepage": "https://effect.website",
|
|
6
8
|
"repository": {
|
|
7
9
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/Effect-TS/effect.git",
|
|
9
|
-
"directory": "packages/sql
|
|
10
|
+
"url": "https://github.com/Effect-TS/effect-smol.git",
|
|
11
|
+
"directory": "packages/sql/sqlite-node"
|
|
10
12
|
},
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
"dependencies": {
|
|
14
|
-
"better-sqlite3": "^12.6.2"
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/Effect-TS/effect-smol/issues"
|
|
15
15
|
},
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
|
|
16
|
+
"tags": [
|
|
17
|
+
"typescript",
|
|
18
|
+
"sql",
|
|
19
|
+
"database"
|
|
20
|
+
],
|
|
21
|
+
"keywords": [
|
|
22
|
+
"typescript",
|
|
23
|
+
"sql",
|
|
24
|
+
"database"
|
|
25
|
+
],
|
|
26
|
+
"sideEffects": [],
|
|
27
|
+
"exports": {
|
|
28
|
+
"./package.json": "./package.json",
|
|
29
|
+
".": "./dist/index.js",
|
|
30
|
+
"./*": "./dist/*.js",
|
|
31
|
+
"./internal/*": null,
|
|
32
|
+
"./*/index": null
|
|
21
33
|
},
|
|
34
|
+
"files": [
|
|
35
|
+
"src/**/*.ts",
|
|
36
|
+
"dist/**/*.js",
|
|
37
|
+
"dist/**/*.js.map",
|
|
38
|
+
"dist/**/*.d.ts",
|
|
39
|
+
"dist/**/*.d.ts.map"
|
|
40
|
+
],
|
|
22
41
|
"publishConfig": {
|
|
42
|
+
"access": "public",
|
|
23
43
|
"provenance": true
|
|
24
44
|
},
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"./SqliteClient": {
|
|
36
|
-
"types": "./dist/dts/SqliteClient.d.ts",
|
|
37
|
-
"import": "./dist/esm/SqliteClient.js",
|
|
38
|
-
"default": "./dist/cjs/SqliteClient.js"
|
|
39
|
-
},
|
|
40
|
-
"./SqliteMigrator": {
|
|
41
|
-
"types": "./dist/dts/SqliteMigrator.d.ts",
|
|
42
|
-
"import": "./dist/esm/SqliteMigrator.js",
|
|
43
|
-
"default": "./dist/cjs/SqliteMigrator.js"
|
|
44
|
-
},
|
|
45
|
-
"./index": {
|
|
46
|
-
"types": "./dist/dts/index.d.ts",
|
|
47
|
-
"import": "./dist/esm/index.js",
|
|
48
|
-
"default": "./dist/cjs/index.js"
|
|
49
|
-
}
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
47
|
+
"@effect/platform-node": "^4.0.0-beta.0",
|
|
48
|
+
"effect": "^4.0.0-beta.0"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"effect": "^4.0.0-beta.0"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"better-sqlite3": "^12.6.2"
|
|
50
55
|
},
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"index": [
|
|
60
|
-
"./dist/dts/index.d.ts"
|
|
61
|
-
]
|
|
62
|
-
}
|
|
56
|
+
"scripts": {
|
|
57
|
+
"codegen": "effect-utils codegen",
|
|
58
|
+
"build": "tsc -b tsconfig.json && pnpm babel",
|
|
59
|
+
"build:tsgo": "tsgo -b tsconfig.json && pnpm babel",
|
|
60
|
+
"babel": "babel dist --plugins annotate-pure-calls --out-dir dist --source-maps",
|
|
61
|
+
"check": "tsc -b tsconfig.json",
|
|
62
|
+
"test": "vitest",
|
|
63
|
+
"coverage": "vitest --coverage"
|
|
63
64
|
}
|
|
64
65
|
}
|
package/src/SqliteClient.ts
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import * as Reactivity from "@effect/experimental/Reactivity"
|
|
5
|
-
import * as Client from "@effect/sql/SqlClient"
|
|
6
|
-
import type { Connection } from "@effect/sql/SqlConnection"
|
|
7
|
-
import { SqlError } from "@effect/sql/SqlError"
|
|
8
|
-
import * as Statement from "@effect/sql/Statement"
|
|
9
4
|
import Sqlite from "better-sqlite3"
|
|
10
5
|
import * as Cache from "effect/Cache"
|
|
11
6
|
import * as Config from "effect/Config"
|
|
12
|
-
import type { ConfigError } from "effect/ConfigError"
|
|
13
|
-
import * as Context from "effect/Context"
|
|
14
7
|
import * as Duration from "effect/Duration"
|
|
15
8
|
import * as Effect from "effect/Effect"
|
|
9
|
+
import * as Fiber from "effect/Fiber"
|
|
16
10
|
import { identity } from "effect/Function"
|
|
17
11
|
import * as Layer from "effect/Layer"
|
|
18
12
|
import * as Scope from "effect/Scope"
|
|
13
|
+
import * as ServiceMap from "effect/ServiceMap"
|
|
14
|
+
import * as Stream from "effect/Stream"
|
|
15
|
+
import * as Reactivity from "effect/unstable/reactivity/Reactivity"
|
|
16
|
+
import * as Client from "effect/unstable/sql/SqlClient"
|
|
17
|
+
import type { Connection } from "effect/unstable/sql/SqlConnection"
|
|
18
|
+
import { SqlError } from "effect/unstable/sql/SqlError"
|
|
19
|
+
import * as Statement from "effect/unstable/sql/Statement"
|
|
19
20
|
|
|
20
21
|
const ATTR_DB_SYSTEM_NAME = "db.system.name"
|
|
21
22
|
|
|
@@ -23,13 +24,13 @@ const ATTR_DB_SYSTEM_NAME = "db.system.name"
|
|
|
23
24
|
* @category type ids
|
|
24
25
|
* @since 1.0.0
|
|
25
26
|
*/
|
|
26
|
-
export const TypeId:
|
|
27
|
+
export const TypeId: TypeId = "~@effect/sql-sqlite-node/SqliteClient"
|
|
27
28
|
|
|
28
29
|
/**
|
|
29
30
|
* @category type ids
|
|
30
31
|
* @since 1.0.0
|
|
31
32
|
*/
|
|
32
|
-
export type TypeId =
|
|
33
|
+
export type TypeId = "~@effect/sql-sqlite-node/SqliteClient"
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
36
|
* @category models
|
|
@@ -59,7 +60,7 @@ export interface BackupMetadata {
|
|
|
59
60
|
* @category tags
|
|
60
61
|
* @since 1.0.0
|
|
61
62
|
*/
|
|
62
|
-
export const SqliteClient =
|
|
63
|
+
export const SqliteClient = ServiceMap.Service<SqliteClient>("@effect/sql-sqlite-node/SqliteClient")
|
|
63
64
|
|
|
64
65
|
/**
|
|
65
66
|
* @category models
|
|
@@ -124,8 +125,8 @@ export const make = (
|
|
|
124
125
|
params: ReadonlyArray<unknown>,
|
|
125
126
|
raw: boolean
|
|
126
127
|
) =>
|
|
127
|
-
Effect.
|
|
128
|
-
if (
|
|
128
|
+
Effect.withFiber<ReadonlyArray<any>, SqlError>((fiber) => {
|
|
129
|
+
if (ServiceMap.get(fiber.services, Client.SafeIntegers)) {
|
|
129
130
|
statement.safeIntegers(true)
|
|
130
131
|
}
|
|
131
132
|
try {
|
|
@@ -145,7 +146,7 @@ export const make = (
|
|
|
145
146
|
raw = false
|
|
146
147
|
) =>
|
|
147
148
|
Effect.flatMap(
|
|
148
|
-
|
|
149
|
+
Cache.get(prepareCache, sql),
|
|
149
150
|
(s) => runStatement(s, params, raw)
|
|
150
151
|
)
|
|
151
152
|
|
|
@@ -154,7 +155,7 @@ export const make = (
|
|
|
154
155
|
params: ReadonlyArray<unknown>
|
|
155
156
|
) =>
|
|
156
157
|
Effect.acquireUseRelease(
|
|
157
|
-
|
|
158
|
+
Cache.get(prepareCache, sql),
|
|
158
159
|
(statement) =>
|
|
159
160
|
Effect.try({
|
|
160
161
|
try: () => {
|
|
@@ -189,7 +190,7 @@ export const make = (
|
|
|
189
190
|
return transformRows ? Effect.map(effect, transformRows) : effect
|
|
190
191
|
},
|
|
191
192
|
executeStream(_sql, _params) {
|
|
192
|
-
return
|
|
193
|
+
return Stream.die("executeStream not implemented")
|
|
193
194
|
},
|
|
194
195
|
export: Effect.try({
|
|
195
196
|
try: () => db.serialize(),
|
|
@@ -202,13 +203,10 @@ export const make = (
|
|
|
202
203
|
})
|
|
203
204
|
},
|
|
204
205
|
loadExtension(path) {
|
|
205
|
-
return Effect.
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
}),
|
|
210
|
-
() => prepareCache.invalidateAll
|
|
211
|
-
)
|
|
206
|
+
return Effect.try({
|
|
207
|
+
try: () => db.loadExtension(path),
|
|
208
|
+
catch: (cause) => new SqlError({ cause, message: "Failed to load extension" })
|
|
209
|
+
})
|
|
212
210
|
}
|
|
213
211
|
})
|
|
214
212
|
})
|
|
@@ -217,18 +215,17 @@ export const make = (
|
|
|
217
215
|
const connection = yield* makeConnection
|
|
218
216
|
|
|
219
217
|
const acquirer = semaphore.withPermits(1)(Effect.succeed(connection))
|
|
220
|
-
const transactionAcquirer = Effect.uninterruptibleMask((restore) =>
|
|
221
|
-
|
|
222
|
-
|
|
218
|
+
const transactionAcquirer = Effect.uninterruptibleMask((restore) => {
|
|
219
|
+
const fiber = Fiber.getCurrent()!
|
|
220
|
+
const scope = ServiceMap.getUnsafe(fiber.services, Scope.Scope)
|
|
221
|
+
return Effect.as(
|
|
222
|
+
Effect.tap(
|
|
223
223
|
restore(semaphore.take(1)),
|
|
224
|
-
|
|
225
|
-
Effect.scope,
|
|
226
|
-
(scope) => Scope.addFinalizer(scope, semaphore.release(1))
|
|
227
|
-
)
|
|
224
|
+
() => Scope.addFinalizer(scope, semaphore.release(1))
|
|
228
225
|
),
|
|
229
226
|
connection
|
|
230
227
|
)
|
|
231
|
-
)
|
|
228
|
+
})
|
|
232
229
|
|
|
233
230
|
return Object.assign(
|
|
234
231
|
(yield* Client.make({
|
|
@@ -256,14 +253,14 @@ export const make = (
|
|
|
256
253
|
* @since 1.0.0
|
|
257
254
|
*/
|
|
258
255
|
export const layerConfig = (
|
|
259
|
-
config: Config.
|
|
260
|
-
): Layer.Layer<SqliteClient | Client.SqlClient, ConfigError> =>
|
|
261
|
-
Layer.
|
|
262
|
-
Config.unwrap(config).pipe(
|
|
256
|
+
config: Config.Wrap<SqliteClientConfig>
|
|
257
|
+
): Layer.Layer<SqliteClient | Client.SqlClient, Config.ConfigError> =>
|
|
258
|
+
Layer.effectServices(
|
|
259
|
+
Config.unwrap(config).asEffect().pipe(
|
|
263
260
|
Effect.flatMap(make),
|
|
264
261
|
Effect.map((client) =>
|
|
265
|
-
|
|
266
|
-
|
|
262
|
+
ServiceMap.make(SqliteClient, client).pipe(
|
|
263
|
+
ServiceMap.add(Client.SqlClient, client)
|
|
267
264
|
)
|
|
268
265
|
)
|
|
269
266
|
)
|
|
@@ -275,10 +272,10 @@ export const layerConfig = (
|
|
|
275
272
|
*/
|
|
276
273
|
export const layer = (
|
|
277
274
|
config: SqliteClientConfig
|
|
278
|
-
): Layer.Layer<SqliteClient | Client.SqlClient
|
|
279
|
-
Layer.
|
|
275
|
+
): Layer.Layer<SqliteClient | Client.SqlClient> =>
|
|
276
|
+
Layer.effectServices(
|
|
280
277
|
Effect.map(make(config), (client) =>
|
|
281
|
-
|
|
282
|
-
|
|
278
|
+
ServiceMap.make(SqliteClient, client).pipe(
|
|
279
|
+
ServiceMap.add(Client.SqlClient, client)
|
|
283
280
|
))
|
|
284
281
|
).pipe(Layer.provide(Reactivity.layer))
|