kysely-node-native-sqlite 1.0.0 → 1.1.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/LICENSE.md +7 -0
- package/README.md +7 -1
- package/dist/index.cjs +183 -0
- package/dist/{NodeNativeSqliteDialect.d.ts → index.d.cts} +5 -4
- package/dist/index.d.ts +13 -2
- package/dist/index.js +160 -2
- package/package.json +25 -8
- package/dist/Mutex.d.ts +0 -7
- package/dist/Mutex.d.ts.map +0 -1
- package/dist/Mutex.js +0 -19
- package/dist/Mutex.js.map +0 -1
- package/dist/NodeNativeSqliteConnection.d.ts +0 -12
- package/dist/NodeNativeSqliteConnection.d.ts.map +0 -1
- package/dist/NodeNativeSqliteConnection.js +0 -68
- package/dist/NodeNativeSqliteConnection.js.map +0 -1
- package/dist/NodeNativeSqliteDialect.d.ts.map +0 -1
- package/dist/NodeNativeSqliteDialect.js +0 -23
- package/dist/NodeNativeSqliteDialect.js.map +0 -1
- package/dist/NodeNativeSqliteDriver.d.ts +0 -21
- package/dist/NodeNativeSqliteDriver.d.ts.map +0 -1
- package/dist/NodeNativeSqliteDriver.js +0 -57
- package/dist/NodeNativeSqliteDriver.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
package/LICENSE.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright 2026 Henrik Paul
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
CHANGED
|
@@ -5,4 +5,10 @@ A dialect for [Kysely](https://www.kysely.dev/) that enables the use of the [nat
|
|
|
5
5
|
```typescript
|
|
6
6
|
const dialect = new NodeNativeSqliteDialect(dbPath);
|
|
7
7
|
const db = new Kysely<DatabaseSchema>({ dialect });
|
|
8
|
-
```
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Requirements
|
|
11
|
+
|
|
12
|
+
- Node >=22.5.0
|
|
13
|
+
- Note: explicit `--experimental-sqlite` flag for `node` is required [until version 23.4.0](https://nodejs.org/en/blog/release/v23.4.0#other-notable-changes).
|
|
14
|
+
- Kysely >=0.27.0
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.mts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
NodeNativeSqliteDialect: () => NodeNativeSqliteDialect_default,
|
|
24
|
+
default: () => NodeNativeSqliteDialect_default
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(index_exports);
|
|
27
|
+
|
|
28
|
+
// src/NodeNativeSqliteDialect.mts
|
|
29
|
+
var import_kysely2 = require("kysely");
|
|
30
|
+
|
|
31
|
+
// src/NodeNativeSqliteDriver.mts
|
|
32
|
+
var import_kysely = require("kysely");
|
|
33
|
+
|
|
34
|
+
// src/Mutex.mts
|
|
35
|
+
var Mutex = class {
|
|
36
|
+
#promise;
|
|
37
|
+
#resolve;
|
|
38
|
+
async lock() {
|
|
39
|
+
while (this.#promise) await this.#promise;
|
|
40
|
+
const { resolve, promise } = Promise.withResolvers();
|
|
41
|
+
this.#promise = promise;
|
|
42
|
+
this.#resolve = resolve;
|
|
43
|
+
}
|
|
44
|
+
unlock() {
|
|
45
|
+
const resolve = this.#resolve;
|
|
46
|
+
this.#promise = void 0;
|
|
47
|
+
this.#resolve = void 0;
|
|
48
|
+
resolve?.();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var Mutex_default = Mutex;
|
|
52
|
+
|
|
53
|
+
// src/NodeNativeSqliteConnection.mts
|
|
54
|
+
var import_node_sqlite = require("node:sqlite");
|
|
55
|
+
var NodeNativeSqliteConnection = class {
|
|
56
|
+
#db;
|
|
57
|
+
constructor(...args) {
|
|
58
|
+
this.#db = new import_node_sqlite.DatabaseSync(...args);
|
|
59
|
+
}
|
|
60
|
+
[Symbol.dispose]() {
|
|
61
|
+
this.#db.close();
|
|
62
|
+
}
|
|
63
|
+
async executeQuery(compiledQuery) {
|
|
64
|
+
const { sql, parameters, query } = compiledQuery;
|
|
65
|
+
const stmt = this.#db.prepare(sql);
|
|
66
|
+
let useAll = false;
|
|
67
|
+
if (query.kind === "SelectQueryNode") {
|
|
68
|
+
useAll = true;
|
|
69
|
+
} else if (query.kind === "InsertQueryNode" || query.kind === "UpdateQueryNode" || query.kind === "DeleteQueryNode") {
|
|
70
|
+
if (sql.toLowerCase().includes("returning")) {
|
|
71
|
+
useAll = true;
|
|
72
|
+
}
|
|
73
|
+
} else if (query.kind === "RawNode") {
|
|
74
|
+
const lowerSql = sql.toLowerCase().trim();
|
|
75
|
+
if (lowerSql.startsWith("select") || lowerSql.startsWith("pragma") || lowerSql.startsWith("with") || lowerSql.includes("returning")) {
|
|
76
|
+
useAll = true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (useAll) {
|
|
80
|
+
const rows = stmt.all(...parameters);
|
|
81
|
+
return {
|
|
82
|
+
rows
|
|
83
|
+
};
|
|
84
|
+
} else {
|
|
85
|
+
const result = stmt.run(...parameters);
|
|
86
|
+
return {
|
|
87
|
+
rows: [],
|
|
88
|
+
insertId: BigInt(result.lastInsertRowid),
|
|
89
|
+
numAffectedRows: BigInt(result.changes)
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async *streamQuery(compiledQuery, _chunkSize) {
|
|
94
|
+
const result = await this.executeQuery(compiledQuery);
|
|
95
|
+
if (result.rows) {
|
|
96
|
+
yield { rows: result.rows };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
var NodeNativeSqliteConnection_default = NodeNativeSqliteConnection;
|
|
101
|
+
|
|
102
|
+
// src/NodeNativeSqliteDriver.mts
|
|
103
|
+
var NodeNativeSqliteDriver = class {
|
|
104
|
+
#args;
|
|
105
|
+
#connection;
|
|
106
|
+
#mutex = new Mutex_default();
|
|
107
|
+
constructor(...args) {
|
|
108
|
+
this.#args = args;
|
|
109
|
+
}
|
|
110
|
+
get connection() {
|
|
111
|
+
if (typeof this.#connection === "undefined")
|
|
112
|
+
throw new Error("Database was not initialized. Run `init` first");
|
|
113
|
+
return this.#connection;
|
|
114
|
+
}
|
|
115
|
+
async acquireConnection() {
|
|
116
|
+
await this.#mutex.lock();
|
|
117
|
+
return this.connection;
|
|
118
|
+
}
|
|
119
|
+
async beginTransaction(connection, _settings) {
|
|
120
|
+
await connection.executeQuery(import_kysely.CompiledQuery.raw("BEGIN"));
|
|
121
|
+
}
|
|
122
|
+
async commitTransaction(connection) {
|
|
123
|
+
await connection.executeQuery(import_kysely.CompiledQuery.raw("COMMIT"));
|
|
124
|
+
}
|
|
125
|
+
async destroy() {
|
|
126
|
+
this.#connection?.[Symbol.dispose]();
|
|
127
|
+
}
|
|
128
|
+
async [Symbol.asyncDispose]() {
|
|
129
|
+
await this.destroy();
|
|
130
|
+
}
|
|
131
|
+
async init() {
|
|
132
|
+
this.#connection = new NodeNativeSqliteConnection_default(...this.#args);
|
|
133
|
+
}
|
|
134
|
+
async releaseConnection(_connection) {
|
|
135
|
+
this.#mutex.unlock();
|
|
136
|
+
}
|
|
137
|
+
async releaseSavepoint(connection, savepointName, compileQuery) {
|
|
138
|
+
await connection.executeQuery(
|
|
139
|
+
compileQuery(savepointCommand("RELEASE SAVEPOINT", savepointName))
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
async rollbackToSavepoint(connection, savepointName, compileQuery) {
|
|
143
|
+
await connection.executeQuery(
|
|
144
|
+
compileQuery(savepointCommand("ROLLBACK TO SAVEPOINT", savepointName))
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
async rollbackTransaction(connection) {
|
|
148
|
+
await connection.executeQuery(import_kysely.CompiledQuery.raw("ROLLBACK"));
|
|
149
|
+
}
|
|
150
|
+
async savepoint(connection, savepointName, compileQuery) {
|
|
151
|
+
await connection.executeQuery(compileQuery(savepointCommand("SAVEPOINT", savepointName)));
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
var savepointCommand = (command, savepointName) => import_kysely.RawNode.createWithChildren([
|
|
155
|
+
import_kysely.RawNode.createWithSql(command),
|
|
156
|
+
import_kysely.IdentifierNode.create(savepointName)
|
|
157
|
+
]);
|
|
158
|
+
var NodeNativeSqliteDriver_default = NodeNativeSqliteDriver;
|
|
159
|
+
|
|
160
|
+
// src/NodeNativeSqliteDialect.mts
|
|
161
|
+
var NodeNativeSqliteDialect = class {
|
|
162
|
+
#args;
|
|
163
|
+
constructor(...args) {
|
|
164
|
+
this.#args = args;
|
|
165
|
+
}
|
|
166
|
+
createAdapter() {
|
|
167
|
+
return new import_kysely2.SqliteAdapter();
|
|
168
|
+
}
|
|
169
|
+
createDriver() {
|
|
170
|
+
return new NodeNativeSqliteDriver_default(...this.#args);
|
|
171
|
+
}
|
|
172
|
+
createIntrospector(db) {
|
|
173
|
+
return new import_kysely2.SqliteIntrospector(db);
|
|
174
|
+
}
|
|
175
|
+
createQueryCompiler() {
|
|
176
|
+
return new import_kysely2.SqliteQueryCompiler();
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
var NodeNativeSqliteDialect_default = NodeNativeSqliteDialect;
|
|
180
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
181
|
+
0 && (module.exports = {
|
|
182
|
+
NodeNativeSqliteDialect
|
|
183
|
+
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { DatabaseSync } from
|
|
2
|
-
import {
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { Dialect, SqliteAdapter, Driver, Kysely, DatabaseIntrospector, SqliteQueryCompiler } from 'kysely';
|
|
3
|
+
|
|
3
4
|
declare class NodeNativeSqliteDialect implements Dialect {
|
|
4
5
|
#private;
|
|
5
6
|
constructor(...args: ConstructorParameters<typeof DatabaseSync>);
|
|
@@ -8,5 +9,5 @@ declare class NodeNativeSqliteDialect implements Dialect {
|
|
|
8
9
|
createIntrospector(db: Kysely<unknown>): DatabaseIntrospector;
|
|
9
10
|
createQueryCompiler(): SqliteQueryCompiler;
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
export { NodeNativeSqliteDialect, NodeNativeSqliteDialect as default };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { Dialect, SqliteAdapter, Driver, Kysely, DatabaseIntrospector, SqliteQueryCompiler } from 'kysely';
|
|
3
|
+
|
|
4
|
+
declare class NodeNativeSqliteDialect implements Dialect {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(...args: ConstructorParameters<typeof DatabaseSync>);
|
|
7
|
+
createAdapter(): SqliteAdapter;
|
|
8
|
+
createDriver(): Driver;
|
|
9
|
+
createIntrospector(db: Kysely<unknown>): DatabaseIntrospector;
|
|
10
|
+
createQueryCompiler(): SqliteQueryCompiler;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { NodeNativeSqliteDialect, NodeNativeSqliteDialect as default };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,160 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// src/NodeNativeSqliteDialect.mts
|
|
2
|
+
import {
|
|
3
|
+
SqliteAdapter,
|
|
4
|
+
SqliteIntrospector,
|
|
5
|
+
SqliteQueryCompiler
|
|
6
|
+
} from "kysely";
|
|
7
|
+
|
|
8
|
+
// src/NodeNativeSqliteDriver.mts
|
|
9
|
+
import { CompiledQuery, IdentifierNode, RawNode } from "kysely";
|
|
10
|
+
|
|
11
|
+
// src/Mutex.mts
|
|
12
|
+
var Mutex = class {
|
|
13
|
+
#promise;
|
|
14
|
+
#resolve;
|
|
15
|
+
async lock() {
|
|
16
|
+
while (this.#promise) await this.#promise;
|
|
17
|
+
const { resolve, promise } = Promise.withResolvers();
|
|
18
|
+
this.#promise = promise;
|
|
19
|
+
this.#resolve = resolve;
|
|
20
|
+
}
|
|
21
|
+
unlock() {
|
|
22
|
+
const resolve = this.#resolve;
|
|
23
|
+
this.#promise = void 0;
|
|
24
|
+
this.#resolve = void 0;
|
|
25
|
+
resolve?.();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
var Mutex_default = Mutex;
|
|
29
|
+
|
|
30
|
+
// src/NodeNativeSqliteConnection.mts
|
|
31
|
+
import { DatabaseSync } from "node:sqlite";
|
|
32
|
+
var NodeNativeSqliteConnection = class {
|
|
33
|
+
#db;
|
|
34
|
+
constructor(...args) {
|
|
35
|
+
this.#db = new DatabaseSync(...args);
|
|
36
|
+
}
|
|
37
|
+
[Symbol.dispose]() {
|
|
38
|
+
this.#db.close();
|
|
39
|
+
}
|
|
40
|
+
async executeQuery(compiledQuery) {
|
|
41
|
+
const { sql, parameters, query } = compiledQuery;
|
|
42
|
+
const stmt = this.#db.prepare(sql);
|
|
43
|
+
let useAll = false;
|
|
44
|
+
if (query.kind === "SelectQueryNode") {
|
|
45
|
+
useAll = true;
|
|
46
|
+
} else if (query.kind === "InsertQueryNode" || query.kind === "UpdateQueryNode" || query.kind === "DeleteQueryNode") {
|
|
47
|
+
if (sql.toLowerCase().includes("returning")) {
|
|
48
|
+
useAll = true;
|
|
49
|
+
}
|
|
50
|
+
} else if (query.kind === "RawNode") {
|
|
51
|
+
const lowerSql = sql.toLowerCase().trim();
|
|
52
|
+
if (lowerSql.startsWith("select") || lowerSql.startsWith("pragma") || lowerSql.startsWith("with") || lowerSql.includes("returning")) {
|
|
53
|
+
useAll = true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (useAll) {
|
|
57
|
+
const rows = stmt.all(...parameters);
|
|
58
|
+
return {
|
|
59
|
+
rows
|
|
60
|
+
};
|
|
61
|
+
} else {
|
|
62
|
+
const result = stmt.run(...parameters);
|
|
63
|
+
return {
|
|
64
|
+
rows: [],
|
|
65
|
+
insertId: BigInt(result.lastInsertRowid),
|
|
66
|
+
numAffectedRows: BigInt(result.changes)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async *streamQuery(compiledQuery, _chunkSize) {
|
|
71
|
+
const result = await this.executeQuery(compiledQuery);
|
|
72
|
+
if (result.rows) {
|
|
73
|
+
yield { rows: result.rows };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
var NodeNativeSqliteConnection_default = NodeNativeSqliteConnection;
|
|
78
|
+
|
|
79
|
+
// src/NodeNativeSqliteDriver.mts
|
|
80
|
+
var NodeNativeSqliteDriver = class {
|
|
81
|
+
#args;
|
|
82
|
+
#connection;
|
|
83
|
+
#mutex = new Mutex_default();
|
|
84
|
+
constructor(...args) {
|
|
85
|
+
this.#args = args;
|
|
86
|
+
}
|
|
87
|
+
get connection() {
|
|
88
|
+
if (typeof this.#connection === "undefined")
|
|
89
|
+
throw new Error("Database was not initialized. Run `init` first");
|
|
90
|
+
return this.#connection;
|
|
91
|
+
}
|
|
92
|
+
async acquireConnection() {
|
|
93
|
+
await this.#mutex.lock();
|
|
94
|
+
return this.connection;
|
|
95
|
+
}
|
|
96
|
+
async beginTransaction(connection, _settings) {
|
|
97
|
+
await connection.executeQuery(CompiledQuery.raw("BEGIN"));
|
|
98
|
+
}
|
|
99
|
+
async commitTransaction(connection) {
|
|
100
|
+
await connection.executeQuery(CompiledQuery.raw("COMMIT"));
|
|
101
|
+
}
|
|
102
|
+
async destroy() {
|
|
103
|
+
this.#connection?.[Symbol.dispose]();
|
|
104
|
+
}
|
|
105
|
+
async [Symbol.asyncDispose]() {
|
|
106
|
+
await this.destroy();
|
|
107
|
+
}
|
|
108
|
+
async init() {
|
|
109
|
+
this.#connection = new NodeNativeSqliteConnection_default(...this.#args);
|
|
110
|
+
}
|
|
111
|
+
async releaseConnection(_connection) {
|
|
112
|
+
this.#mutex.unlock();
|
|
113
|
+
}
|
|
114
|
+
async releaseSavepoint(connection, savepointName, compileQuery) {
|
|
115
|
+
await connection.executeQuery(
|
|
116
|
+
compileQuery(savepointCommand("RELEASE SAVEPOINT", savepointName))
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
async rollbackToSavepoint(connection, savepointName, compileQuery) {
|
|
120
|
+
await connection.executeQuery(
|
|
121
|
+
compileQuery(savepointCommand("ROLLBACK TO SAVEPOINT", savepointName))
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
async rollbackTransaction(connection) {
|
|
125
|
+
await connection.executeQuery(CompiledQuery.raw("ROLLBACK"));
|
|
126
|
+
}
|
|
127
|
+
async savepoint(connection, savepointName, compileQuery) {
|
|
128
|
+
await connection.executeQuery(compileQuery(savepointCommand("SAVEPOINT", savepointName)));
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
var savepointCommand = (command, savepointName) => RawNode.createWithChildren([
|
|
132
|
+
RawNode.createWithSql(command),
|
|
133
|
+
IdentifierNode.create(savepointName)
|
|
134
|
+
]);
|
|
135
|
+
var NodeNativeSqliteDriver_default = NodeNativeSqliteDriver;
|
|
136
|
+
|
|
137
|
+
// src/NodeNativeSqliteDialect.mts
|
|
138
|
+
var NodeNativeSqliteDialect = class {
|
|
139
|
+
#args;
|
|
140
|
+
constructor(...args) {
|
|
141
|
+
this.#args = args;
|
|
142
|
+
}
|
|
143
|
+
createAdapter() {
|
|
144
|
+
return new SqliteAdapter();
|
|
145
|
+
}
|
|
146
|
+
createDriver() {
|
|
147
|
+
return new NodeNativeSqliteDriver_default(...this.#args);
|
|
148
|
+
}
|
|
149
|
+
createIntrospector(db) {
|
|
150
|
+
return new SqliteIntrospector(db);
|
|
151
|
+
}
|
|
152
|
+
createQueryCompiler() {
|
|
153
|
+
return new SqliteQueryCompiler();
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
var NodeNativeSqliteDialect_default = NodeNativeSqliteDialect;
|
|
157
|
+
export {
|
|
158
|
+
NodeNativeSqliteDialect_default as NodeNativeSqliteDialect,
|
|
159
|
+
NodeNativeSqliteDialect_default as default
|
|
160
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kysely-node-native-sqlite",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Kysely dialect for Node.js native SQLite (node:sqlite)",
|
|
6
6
|
"keywords": [
|
|
@@ -8,10 +8,23 @@
|
|
|
8
8
|
"kysely",
|
|
9
9
|
"dialect"
|
|
10
10
|
],
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": "^22.5.0"
|
|
13
|
+
},
|
|
14
|
+
"license": "ISC",
|
|
15
|
+
"main": "./dist/index.cjs",
|
|
16
|
+
"module": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
11
18
|
"exports": {
|
|
12
19
|
".": {
|
|
13
|
-
"
|
|
14
|
-
|
|
20
|
+
"import": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"require": {
|
|
25
|
+
"types": "./dist/index.d.cts",
|
|
26
|
+
"default": "./dist/index.cjs"
|
|
27
|
+
}
|
|
15
28
|
}
|
|
16
29
|
},
|
|
17
30
|
"files": [
|
|
@@ -21,12 +34,16 @@
|
|
|
21
34
|
"kysely": ">=0.27.0"
|
|
22
35
|
},
|
|
23
36
|
"devDependencies": {
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
37
|
+
"@tsconfig/node22": "^22.0.5",
|
|
38
|
+
"@types/node": "^22.5.0",
|
|
39
|
+
"kysely": "0.27.0",
|
|
40
|
+
"prettier": "^3.8.1",
|
|
41
|
+
"tsup": "^8.5.1",
|
|
42
|
+
"typescript": "^5.9.3"
|
|
27
43
|
},
|
|
28
44
|
"scripts": {
|
|
29
|
-
"build": "
|
|
30
|
-
"
|
|
45
|
+
"build": "tsup",
|
|
46
|
+
"format": "prettier --write src/**/*",
|
|
47
|
+
"test": "NODE_OPTIONS=--experimental-sqlite npx tsx src/NodeNativeSqliteDialect.test.mts"
|
|
31
48
|
}
|
|
32
49
|
}
|
package/dist/Mutex.d.ts
DELETED
package/dist/Mutex.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Mutex.d.ts","sourceRoot":"","sources":["../src/Mutex.ts"],"names":[],"mappings":"AAAA,cAAM,KAAK;;IAIH,IAAI;IAOV,MAAM;CAMP;AAED,eAAe,KAAK,CAAC"}
|
package/dist/Mutex.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
class Mutex {
|
|
2
|
-
#promise;
|
|
3
|
-
#resolve;
|
|
4
|
-
async lock() {
|
|
5
|
-
while (this.#promise)
|
|
6
|
-
await this.#promise;
|
|
7
|
-
const { resolve, promise } = Promise.withResolvers();
|
|
8
|
-
this.#promise = promise;
|
|
9
|
-
this.#resolve = resolve;
|
|
10
|
-
}
|
|
11
|
-
unlock() {
|
|
12
|
-
const resolve = this.#resolve;
|
|
13
|
-
this.#promise = undefined;
|
|
14
|
-
this.#resolve = undefined;
|
|
15
|
-
resolve?.();
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export default Mutex;
|
|
19
|
-
//# sourceMappingURL=Mutex.js.map
|
package/dist/Mutex.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Mutex.js","sourceRoot":"","sources":["../src/Mutex.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK;IACT,QAAQ,CAA4B;IACpC,QAAQ,CAA2B;IAEnC,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,EAAQ,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;CACF;AAED,eAAe,KAAK,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { DatabaseSync } from "node:sqlite";
|
|
2
|
-
import type { DatabaseConnection, QueryResult } from "kysely";
|
|
3
|
-
import { CompiledQuery } from "kysely";
|
|
4
|
-
declare class NodeNativeSqliteConnection implements DatabaseConnection, Disposable {
|
|
5
|
-
#private;
|
|
6
|
-
constructor(...args: ConstructorParameters<typeof DatabaseSync>);
|
|
7
|
-
[Symbol.dispose](): void;
|
|
8
|
-
executeQuery<R>(compiledQuery: CompiledQuery): Promise<QueryResult<R>>;
|
|
9
|
-
streamQuery<R>(compiledQuery: CompiledQuery, _chunkSize?: number): AsyncIterableIterator<QueryResult<R>>;
|
|
10
|
-
}
|
|
11
|
-
export default NodeNativeSqliteConnection;
|
|
12
|
-
//# sourceMappingURL=NodeNativeSqliteConnection.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NodeNativeSqliteConnection.d.ts","sourceRoot":"","sources":["../src/NodeNativeSqliteConnection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,cAAM,0BAA2B,YAAW,kBAAkB,EAAE,UAAU;;gBAG5D,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,YAAY,CAAC;IAI/D,CAAC,MAAM,CAAC,OAAO,CAAC;IAIV,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAoDrE,WAAW,CAAC,CAAC,EAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,CAAC,EAAE,MAAM,GAClB,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAQzC;AAED,eAAe,0BAA0B,CAAC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { DatabaseSync } from "node:sqlite";
|
|
2
|
-
import { CompiledQuery } from "kysely";
|
|
3
|
-
class NodeNativeSqliteConnection {
|
|
4
|
-
#db;
|
|
5
|
-
constructor(...args) {
|
|
6
|
-
this.#db = new DatabaseSync(...args);
|
|
7
|
-
}
|
|
8
|
-
[Symbol.dispose]() {
|
|
9
|
-
this.#db[Symbol.dispose]();
|
|
10
|
-
}
|
|
11
|
-
async executeQuery(compiledQuery) {
|
|
12
|
-
const { sql, parameters, query } = compiledQuery;
|
|
13
|
-
const stmt = this.#db.prepare(sql);
|
|
14
|
-
// Determine if we should use .all() (for SELECT/RETURNING) or .run() (for others)
|
|
15
|
-
// We use a heuristic based on the query kind and content.
|
|
16
|
-
let useAll = false;
|
|
17
|
-
if (query.kind === "SelectQueryNode") {
|
|
18
|
-
useAll = true;
|
|
19
|
-
}
|
|
20
|
-
else if (query.kind === "InsertQueryNode" ||
|
|
21
|
-
query.kind === "UpdateQueryNode" ||
|
|
22
|
-
query.kind === "DeleteQueryNode") {
|
|
23
|
-
// Check if there is a returning clause.
|
|
24
|
-
// Kysely's QueryNode structure for these usually has a 'returning' property if it exists.
|
|
25
|
-
// However, accessing it might require type guards.
|
|
26
|
-
// A simpler robust check for 'RETURNING' in the SQL string is often sufficient and faster
|
|
27
|
-
// than traversing the node tree if types are tricky, but let's try to use the node if possible.
|
|
28
|
-
// For now, let's rely on the SQL string for the RETURNING clause as a fallback or primary check
|
|
29
|
-
// because the node structure might vary.
|
|
30
|
-
if (sql.toLowerCase().includes("returning")) {
|
|
31
|
-
useAll = true;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
else if (query.kind === "RawNode") {
|
|
35
|
-
const lowerSql = sql.toLowerCase().trim();
|
|
36
|
-
if (lowerSql.startsWith("select") ||
|
|
37
|
-
lowerSql.startsWith("pragma") ||
|
|
38
|
-
lowerSql.startsWith("with") ||
|
|
39
|
-
lowerSql.includes("returning")) {
|
|
40
|
-
useAll = true;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (useAll) {
|
|
44
|
-
const rows = stmt.all(...parameters);
|
|
45
|
-
return {
|
|
46
|
-
rows,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
const result = stmt.run(...parameters);
|
|
51
|
-
return {
|
|
52
|
-
rows: [],
|
|
53
|
-
insertId: BigInt(result.lastInsertRowid),
|
|
54
|
-
numAffectedRows: BigInt(result.changes),
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
async *streamQuery(compiledQuery, _chunkSize) {
|
|
59
|
-
// node:sqlite is synchronous and doesn't support streaming yet.
|
|
60
|
-
// We simulate streaming by executing the query and yielding results.
|
|
61
|
-
const result = await this.executeQuery(compiledQuery);
|
|
62
|
-
if (result.rows) {
|
|
63
|
-
yield { rows: result.rows };
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
export default NodeNativeSqliteConnection;
|
|
68
|
-
//# sourceMappingURL=NodeNativeSqliteConnection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NodeNativeSqliteConnection.js","sourceRoot":"","sources":["../src/NodeNativeSqliteConnection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,0BAA0B;IAC9B,GAAG,CAAe;IAElB,YAAY,GAAG,IAAgD;QAC7D,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY,CAAI,aAA4B;QAChD,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEnC,kFAAkF;QAClF,0DAA0D;QAC1D,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IACL,KAAK,CAAC,IAAI,KAAK,iBAAiB;YAChC,KAAK,CAAC,IAAI,KAAK,iBAAiB;YAChC,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAChC,CAAC;YACD,wCAAwC;YACxC,0FAA0F;YAC1F,mDAAmD;YACnD,0FAA0F;YAC1F,gGAAgG;YAChG,gGAAgG;YAChG,yCAAyC;YACzC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5C,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;YAC1C,IACE,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC7B,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC7B,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC3B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC9B,CAAC;gBACD,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAI,UAA8B,CAAQ,CAAC;YACjE,OAAO;gBACL,IAAI;aACL,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAI,UAA8B,CAAC,CAAC;YAC5D,OAAO;gBACL,IAAI,EAAE,EAAE;gBACR,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;gBACxC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,WAAW,CAChB,aAA4B,EAC5B,UAAmB;QAEnB,gEAAgE;QAChE,qEAAqE;QACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAI,aAAa,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,eAAe,0BAA0B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NodeNativeSqliteDialect.d.ts","sourceRoot":"","sources":["../src/NodeNativeSqliteDialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,MAAM,EACN,aAAa,EAEb,mBAAmB,EACpB,MAAM,QAAQ,CAAC;AAIhB,cAAM,uBAAwB,YAAW,OAAO;;gBAGlC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,YAAY,CAAC;IAI/D,aAAa,IAAI,aAAa;IAG9B,YAAY,IAAI,MAAM;IAGtB,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,oBAAoB;IAG7D,mBAAmB,IAAI,mBAAmB;CAG3C;AAED,eAAe,uBAAuB,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { DatabaseSync } from "node:sqlite";
|
|
2
|
-
import { Kysely, SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler, } from "kysely";
|
|
3
|
-
import NodeNativeSqliteDriver from "./NodeNativeSqliteDriver.js";
|
|
4
|
-
class NodeNativeSqliteDialect {
|
|
5
|
-
#args;
|
|
6
|
-
constructor(...args) {
|
|
7
|
-
this.#args = args;
|
|
8
|
-
}
|
|
9
|
-
createAdapter() {
|
|
10
|
-
return new SqliteAdapter();
|
|
11
|
-
}
|
|
12
|
-
createDriver() {
|
|
13
|
-
return new NodeNativeSqliteDriver(...this.#args);
|
|
14
|
-
}
|
|
15
|
-
createIntrospector(db) {
|
|
16
|
-
return new SqliteIntrospector(db);
|
|
17
|
-
}
|
|
18
|
-
createQueryCompiler() {
|
|
19
|
-
return new SqliteQueryCompiler();
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export default NodeNativeSqliteDialect;
|
|
23
|
-
//# sourceMappingURL=NodeNativeSqliteDialect.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NodeNativeSqliteDialect.js","sourceRoot":"","sources":["../src/NodeNativeSqliteDialect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAIL,MAAM,EACN,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,QAAQ,CAAC;AAEhB,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAEjE,MAAM,uBAAuB;IAClB,KAAK,CAA6C;IAE3D,YAAY,GAAG,IAAgD;QAC7D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IACD,YAAY;QACV,OAAO,IAAI,sBAAsB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,kBAAkB,CAAC,EAAmB;QACpC,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,mBAAmB;QACjB,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;CACF;AAED,eAAe,uBAAuB,CAAC"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { DatabaseSync } from "node:sqlite";
|
|
2
|
-
import type { DatabaseConnection, Driver, QueryCompiler, TransactionSettings } from "kysely";
|
|
3
|
-
import NodeNativeSqliteConnection from "./NodeNativeSqliteConnection.ts";
|
|
4
|
-
declare class NodeNativeSqliteDriver implements Driver, AsyncDisposable {
|
|
5
|
-
#private;
|
|
6
|
-
constructor(...args: ConstructorParameters<typeof DatabaseSync>);
|
|
7
|
-
get connection(): NodeNativeSqliteConnection;
|
|
8
|
-
acquireConnection(): Promise<NodeNativeSqliteConnection>;
|
|
9
|
-
beginTransaction(connection: NodeNativeSqliteConnection, _settings: TransactionSettings): Promise<void>;
|
|
10
|
-
commitTransaction(connection: DatabaseConnection): Promise<void>;
|
|
11
|
-
destroy(): Promise<void>;
|
|
12
|
-
[Symbol.asyncDispose](): Promise<void>;
|
|
13
|
-
init(): Promise<void>;
|
|
14
|
-
releaseConnection(_connection: DatabaseConnection): Promise<void>;
|
|
15
|
-
releaseSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler["compileQuery"]): Promise<void>;
|
|
16
|
-
rollbackToSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler["compileQuery"]): Promise<void>;
|
|
17
|
-
rollbackTransaction(connection: DatabaseConnection): Promise<void>;
|
|
18
|
-
savepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler["compileQuery"]): Promise<void>;
|
|
19
|
-
}
|
|
20
|
-
export default NodeNativeSqliteDriver;
|
|
21
|
-
//# sourceMappingURL=NodeNativeSqliteDriver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NodeNativeSqliteDriver.d.ts","sourceRoot":"","sources":["../src/NodeNativeSqliteDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAI7F,OAAO,0BAA0B,MAAM,iCAAiC,CAAC;AAEzE,cAAM,sBAAuB,YAAW,MAAM,EAAE,eAAe;;gBAKjD,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,YAAY,CAAC;IAI/D,IAAI,UAAU,+BAIb;IAEK,iBAAiB;IAKjB,gBAAgB,CAAC,UAAU,EAAE,0BAA0B,EAAE,SAAS,EAAE,mBAAmB;IAGvF,iBAAiB,CAAC,UAAU,EAAE,kBAAkB;IAIhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,CAAC,MAAM,CAAC,YAAY,CAAC;IAIrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,iBAAiB,CAAC,WAAW,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,gBAAgB,CACpB,UAAU,EAAE,kBAAkB,EAC9B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC;IAOvC,mBAAmB,CACvB,UAAU,EAAE,kBAAkB,EAC9B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC;IAOvC,mBAAmB,CAAC,UAAU,EAAE,kBAAkB;IAIlD,SAAS,CACb,UAAU,EAAE,kBAAkB,EAC9B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,aAAa,CAAC,cAAc,CAAC;CAI9C;AAWD,eAAe,sBAAsB,CAAC"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { DatabaseSync } from "node:sqlite";
|
|
2
|
-
import { CompiledQuery, IdentifierNode, RawNode } from "kysely";
|
|
3
|
-
import Mutex from "./Mutex.js";
|
|
4
|
-
import NodeNativeSqliteConnection from "./NodeNativeSqliteConnection.js";
|
|
5
|
-
class NodeNativeSqliteDriver {
|
|
6
|
-
#args;
|
|
7
|
-
#connection;
|
|
8
|
-
#mutex = new Mutex();
|
|
9
|
-
constructor(...args) {
|
|
10
|
-
this.#args = args;
|
|
11
|
-
}
|
|
12
|
-
get connection() {
|
|
13
|
-
if (typeof this.#connection === "undefined")
|
|
14
|
-
throw new Error("Database was not initialized. Run `init` first");
|
|
15
|
-
return this.#connection;
|
|
16
|
-
}
|
|
17
|
-
async acquireConnection() {
|
|
18
|
-
await this.#mutex.lock();
|
|
19
|
-
return this.connection;
|
|
20
|
-
}
|
|
21
|
-
async beginTransaction(connection, _settings) {
|
|
22
|
-
await connection.executeQuery(CompiledQuery.raw("BEGIN"));
|
|
23
|
-
}
|
|
24
|
-
async commitTransaction(connection) {
|
|
25
|
-
await connection.executeQuery(CompiledQuery.raw("COMMIT"));
|
|
26
|
-
}
|
|
27
|
-
async destroy() {
|
|
28
|
-
this.#connection?.[Symbol.dispose]();
|
|
29
|
-
}
|
|
30
|
-
async [Symbol.asyncDispose]() {
|
|
31
|
-
await this.destroy();
|
|
32
|
-
}
|
|
33
|
-
async init() {
|
|
34
|
-
this.#connection = new NodeNativeSqliteConnection(...this.#args);
|
|
35
|
-
}
|
|
36
|
-
async releaseConnection(_connection) {
|
|
37
|
-
this.#mutex.unlock();
|
|
38
|
-
}
|
|
39
|
-
async releaseSavepoint(connection, savepointName, compileQuery) {
|
|
40
|
-
await connection.executeQuery(compileQuery(savepointCommand("RELEASE SAVEPOINT", savepointName)));
|
|
41
|
-
}
|
|
42
|
-
async rollbackToSavepoint(connection, savepointName, compileQuery) {
|
|
43
|
-
await connection.executeQuery(compileQuery(savepointCommand("ROLLBACK TO SAVEPOINT", savepointName)));
|
|
44
|
-
}
|
|
45
|
-
async rollbackTransaction(connection) {
|
|
46
|
-
await connection.executeQuery(CompiledQuery.raw("ROLLBACK"));
|
|
47
|
-
}
|
|
48
|
-
async savepoint(connection, savepointName, compileQuery) {
|
|
49
|
-
await connection.executeQuery(compileQuery(savepointCommand("SAVEPOINT", savepointName)));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const savepointCommand = (command, savepointName) => RawNode.createWithChildren([
|
|
53
|
-
RawNode.createWithSql(command),
|
|
54
|
-
IdentifierNode.create(savepointName),
|
|
55
|
-
]);
|
|
56
|
-
export default NodeNativeSqliteDriver;
|
|
57
|
-
//# sourceMappingURL=NodeNativeSqliteDriver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NodeNativeSqliteDriver.js","sourceRoot":"","sources":["../src/NodeNativeSqliteDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEhE,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,0BAA0B,MAAM,iCAAiC,CAAC;AAEzE,MAAM,sBAAsB;IAC1B,KAAK,CAA6C;IAClD,WAAW,CAAyC;IACpD,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;IAErB,YAAY,GAAG,IAAgD;QAC7D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI,UAAU;QACZ,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW;YACzC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAsC,EAAE,SAA8B;QAC3F,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,CAAC,iBAAiB,CAAC,UAA8B;QACpD,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,WAAW,GAAG,IAAI,0BAA0B,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAA+B;QACrD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,UAA8B,EAC9B,aAAqB,EACrB,YAA2C;QAE3C,MAAM,UAAU,CAAC,YAAY,CAC3B,YAAY,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,UAA8B,EAC9B,aAAqB,EACrB,YAA2C;QAE3C,MAAM,UAAU,CAAC,YAAY,CAC3B,YAAY,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,UAA8B;QACtD,MAAM,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,SAAS,CACb,UAA8B,EAC9B,aAAqB,EACrB,YAA2C;QAE3C,MAAM,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,CACvB,OAAoE,EACpE,aAAqB,EACZ,EAAE,CACX,OAAO,CAAC,kBAAkB,CAAC;IACzB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;IAC9B,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC;CACrC,CAAC,CAAC;AAEL,eAAe,sBAAsB,CAAC"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
|