@luzzle/core 0.0.56 → 0.0.58
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/src/database/NodeSqliteDialect.d.ts +13 -0
- package/dist/src/database/NodeSqliteDialect.js +73 -0
- package/dist/src/database/NodeSqliteDialect.js.map +1 -0
- package/dist/src/database/client.js +5 -4
- package/dist/src/database/client.js.map +1 -1
- package/dist/src/database/client.test.js +11 -9
- package/dist/src/database/client.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -6
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DatabaseIntrospector, Dialect, DialectAdapter, Driver, Kysely, QueryCompiler } from 'kysely';
|
|
2
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
3
|
+
export interface NodeSqliteDialectConfig {
|
|
4
|
+
database: DatabaseSync;
|
|
5
|
+
}
|
|
6
|
+
export declare class NodeSqliteDialect implements Dialect {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(config: NodeSqliteDialectConfig);
|
|
9
|
+
createAdapter(): DialectAdapter;
|
|
10
|
+
createDriver(): Driver;
|
|
11
|
+
createIntrospector(db: Kysely<any>): DatabaseIntrospector;
|
|
12
|
+
createQueryCompiler(): QueryCompiler;
|
|
13
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { CompiledQuery, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler, } from 'kysely';
|
|
2
|
+
class NodeSqliteConnection {
|
|
3
|
+
#db;
|
|
4
|
+
constructor(db) {
|
|
5
|
+
this.#db = db;
|
|
6
|
+
}
|
|
7
|
+
async executeQuery(compiledQuery) {
|
|
8
|
+
const stmt = this.#db.prepare(compiledQuery.sql);
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
const params = compiledQuery.parameters;
|
|
11
|
+
const isRead = /^\s*(?:select|pragma|explain)\b/i.test(compiledQuery.sql) ||
|
|
12
|
+
/\breturning\b/i.test(compiledQuery.sql);
|
|
13
|
+
if (isRead) {
|
|
14
|
+
const rows = stmt.all(...params);
|
|
15
|
+
return { rows };
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const result = stmt.run(...params);
|
|
19
|
+
return {
|
|
20
|
+
numAffectedRows: BigInt(result.changes),
|
|
21
|
+
insertId: BigInt(result.lastInsertRowid),
|
|
22
|
+
rows: [],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// eslint-disable-next-line require-yield
|
|
27
|
+
async *streamQuery() {
|
|
28
|
+
throw new Error('NodeSqliteDialect does not support streaming');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
class NodeSqliteDriver {
|
|
32
|
+
#config;
|
|
33
|
+
constructor(config) {
|
|
34
|
+
this.#config = config;
|
|
35
|
+
}
|
|
36
|
+
async init() { }
|
|
37
|
+
async acquireConnection() {
|
|
38
|
+
return new NodeSqliteConnection(this.#config.database);
|
|
39
|
+
}
|
|
40
|
+
async beginTransaction(connection) {
|
|
41
|
+
await connection.executeQuery(CompiledQuery.raw('begin'));
|
|
42
|
+
}
|
|
43
|
+
async commitTransaction(connection) {
|
|
44
|
+
await connection.executeQuery(CompiledQuery.raw('commit'));
|
|
45
|
+
}
|
|
46
|
+
async rollbackTransaction(connection) {
|
|
47
|
+
await connection.executeQuery(CompiledQuery.raw('rollback'));
|
|
48
|
+
}
|
|
49
|
+
async releaseConnection() { }
|
|
50
|
+
async destroy() {
|
|
51
|
+
this.#config.database.close();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export class NodeSqliteDialect {
|
|
55
|
+
#config;
|
|
56
|
+
constructor(config) {
|
|
57
|
+
this.#config = config;
|
|
58
|
+
}
|
|
59
|
+
createAdapter() {
|
|
60
|
+
return new SqliteAdapter();
|
|
61
|
+
}
|
|
62
|
+
createDriver() {
|
|
63
|
+
return new NodeSqliteDriver(this.#config);
|
|
64
|
+
}
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
66
|
+
createIntrospector(db) {
|
|
67
|
+
return new SqliteIntrospector(db);
|
|
68
|
+
}
|
|
69
|
+
createQueryCompiler() {
|
|
70
|
+
return new SqliteQueryCompiler();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=NodeSqliteDialect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeSqliteDialect.js","sourceRoot":"","sources":["../../../src/database/NodeSqliteDialect.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EASb,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,QAAQ,CAAA;AAOf,MAAM,oBAAoB;IAChB,GAAG,CAAc;IAE1B,YAAY,EAAgB;QAC3B,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;IACd,CAAC;IAED,KAAK,CAAC,YAAY,CAAI,aAA4B;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAChD,8DAA8D;QAC9D,MAAM,MAAM,GAAG,aAAa,CAAC,UAAmB,CAAA;QAEhD,MAAM,MAAM,GACX,kCAAkC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC1D,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAEzC,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAQ,CAAA;YACvC,OAAO,EAAE,IAAI,EAAE,CAAA;QAChB,CAAC;aAAM,CAAC;YACP,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;YAClC,OAAO;gBACN,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;gBACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;gBACxC,IAAI,EAAE,EAAE;aACR,CAAA;QACF,CAAC;IACF,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,CAAC,WAAW;QACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IAChE,CAAC;CACD;AAED,MAAM,gBAAgB;IACZ,OAAO,CAAyB;IAEzC,YAAY,MAA+B;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,KAAmB,CAAC;IAE9B,KAAK,CAAC,iBAAiB;QACtB,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAA8B;QACpD,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAA8B;QACrD,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAA8B;QACvD,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;IAC7D,CAAC;IAED,KAAK,CAAC,iBAAiB,KAAmB,CAAC;IAE3C,KAAK,CAAC,OAAO;QACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IAC9B,CAAC;CACD;AAED,MAAM,OAAO,iBAAiB;IACpB,OAAO,CAAyB;IAEzC,YAAY,MAA+B;QAC1C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,aAAa,EAAE,CAAA;IAC3B,CAAC;IAED,YAAY;QACX,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,8DAA8D;IAC9D,kBAAkB,CAAC,EAAe;QACjC,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,mBAAmB;QAClB,OAAO,IAAI,mBAAmB,EAAE,CAAA;IACjC,CAAC;CACD"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Kysely
|
|
2
|
-
import
|
|
1
|
+
import { Kysely } from 'kysely';
|
|
2
|
+
import { NodeSqliteDialect } from './NodeSqliteDialect.js';
|
|
3
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
3
4
|
function getDatabaseClient(pathToDb, debug = false) {
|
|
4
5
|
return new Kysely({
|
|
5
6
|
log: debug ? ['query', 'error'] : [],
|
|
6
|
-
dialect: new
|
|
7
|
-
database: new
|
|
7
|
+
dialect: new NodeSqliteDialect({
|
|
8
|
+
database: new DatabaseSync(pathToDb),
|
|
8
9
|
}),
|
|
9
10
|
});
|
|
10
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/database/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/database/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,SAAS,iBAAiB,CAAC,QAAgB,EAAE,KAAK,GAAG,KAAK;IACzD,OAAO,IAAI,MAAM,CAAe;QAC/B,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QACpC,OAAO,EAAE,IAAI,iBAAiB,CAAC;YAC9B,QAAQ,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC;SACpC,CAAC;KACF,CAAC,CAAA;AACH,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { describe, expect, test, vi, afterEach } from 'vitest';
|
|
2
|
-
import
|
|
3
|
-
import { Kysely
|
|
2
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
3
|
+
import { Kysely } from 'kysely';
|
|
4
|
+
import { NodeSqliteDialect } from './NodeSqliteDialect.js';
|
|
4
5
|
import { getDatabaseClient } from './client.js';
|
|
5
|
-
vi.mock('
|
|
6
|
+
vi.mock('node:sqlite');
|
|
6
7
|
vi.mock('kysely');
|
|
8
|
+
vi.mock('./NodeSqliteDialect.js');
|
|
7
9
|
const mocks = {
|
|
8
|
-
|
|
10
|
+
DatabaseSync: vi.mocked(DatabaseSync),
|
|
9
11
|
Kysely: vi.mocked(Kysely),
|
|
10
|
-
|
|
12
|
+
NodeSqliteDialect: vi.mocked(NodeSqliteDialect),
|
|
11
13
|
};
|
|
12
14
|
describe('database', () => {
|
|
13
15
|
afterEach(() => {
|
|
@@ -16,15 +18,15 @@ describe('database', () => {
|
|
|
16
18
|
test('getDatabaseClient', async () => {
|
|
17
19
|
const path = 'path/to/db.sqlite';
|
|
18
20
|
getDatabaseClient(path);
|
|
19
|
-
expect(mocks.
|
|
20
|
-
expect(mocks.
|
|
21
|
+
expect(mocks.DatabaseSync).toHaveBeenCalledWith(path);
|
|
22
|
+
expect(mocks.NodeSqliteDialect).toHaveBeenCalledOnce();
|
|
21
23
|
expect(mocks.Kysely).toHaveBeenCalledOnce();
|
|
22
24
|
});
|
|
23
25
|
test('getDatabaseClient debug', async () => {
|
|
24
26
|
const path = 'path/to/db.sqlite';
|
|
25
27
|
getDatabaseClient(path, true);
|
|
26
|
-
expect(mocks.
|
|
27
|
-
expect(mocks.
|
|
28
|
+
expect(mocks.DatabaseSync).toHaveBeenCalledWith(path);
|
|
29
|
+
expect(mocks.NodeSqliteDialect).toHaveBeenCalledOnce();
|
|
28
30
|
expect(mocks.Kysely).toHaveBeenCalledWith({
|
|
29
31
|
log: ['query', 'error'],
|
|
30
32
|
dialect: expect.anything(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/database/client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/database/client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AACtB,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACjB,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AAEjC,MAAM,KAAK,GAAG;IACb,YAAY,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;IACrC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IACzB,iBAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;CAC/C,CAAA;AAED,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACzB,SAAS,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAI,GAAG,mBAAmB,CAAA;QAEhC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAEvB,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAI,GAAG,mBAAmB,CAAA;QAEhC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,EAAE,CAAA;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC;YACzC,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE;SAC1B,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|