@holo-js/db-sqlite 0.1.3 → 0.1.5
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/index.d.ts +6 -24
- package/dist/index.mjs +20 -15
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
interface DriverExecutionResult {
|
|
6
|
-
affectedRows?: number;
|
|
7
|
-
lastInsertId?: number | string;
|
|
8
|
-
}
|
|
9
|
-
interface DriverAdapter {
|
|
10
|
-
initialize(): Promise<void>;
|
|
11
|
-
disconnect(): Promise<void>;
|
|
12
|
-
isConnected(): boolean;
|
|
13
|
-
query<TRow extends Record<string, unknown> = Record<string, unknown>>(sql: string, bindings?: readonly unknown[]): Promise<DriverQueryResult<TRow>>;
|
|
14
|
-
execute(sql: string, bindings?: readonly unknown[]): Promise<DriverExecutionResult>;
|
|
15
|
-
beginTransaction(): Promise<void>;
|
|
16
|
-
commit(): Promise<void>;
|
|
17
|
-
rollback(): Promise<void>;
|
|
18
|
-
createSavepoint?(name: string): Promise<void>;
|
|
19
|
-
rollbackToSavepoint?(name: string): Promise<void>;
|
|
20
|
-
releaseSavepoint?(name: string): Promise<void>;
|
|
21
|
-
}
|
|
1
|
+
import { DriverAdapter, DriverQueryResult, DriverExecutionResult } from '@holo-js/db';
|
|
2
|
+
export { DriverAdapter, DriverExecutionResult, DriverQueryResult } from '@holo-js/db';
|
|
3
|
+
|
|
22
4
|
interface SQLiteStatementLike {
|
|
23
5
|
all(...params: readonly unknown[]): Record<string, unknown>[];
|
|
24
6
|
run(...params: readonly unknown[]): {
|
|
@@ -39,12 +21,14 @@ interface SQLiteAdapterOptions {
|
|
|
39
21
|
declare class SQLiteAdapter implements DriverAdapter {
|
|
40
22
|
private database?;
|
|
41
23
|
private connected;
|
|
24
|
+
private transactionTail;
|
|
42
25
|
private readonly filename;
|
|
43
26
|
private readonly createDatabaseInstance;
|
|
44
27
|
constructor(options?: SQLiteAdapterOptions);
|
|
45
28
|
initialize(): Promise<void>;
|
|
46
29
|
disconnect(): Promise<void>;
|
|
47
30
|
isConnected(): boolean;
|
|
31
|
+
runWithTransactionScope<T>(callback: () => Promise<T>): Promise<T>;
|
|
48
32
|
query<TRow extends Record<string, unknown> = Record<string, unknown>>(sql: string, bindings?: readonly unknown[]): Promise<DriverQueryResult<TRow>>;
|
|
49
33
|
introspect<TRow extends Record<string, unknown> = Record<string, unknown>>(sql: string, bindings?: readonly unknown[]): Promise<DriverQueryResult<TRow>>;
|
|
50
34
|
execute(sql: string, bindings?: readonly unknown[]): Promise<DriverExecutionResult>;
|
|
@@ -56,9 +40,7 @@ declare class SQLiteAdapter implements DriverAdapter {
|
|
|
56
40
|
releaseSavepoint(name: string): Promise<void>;
|
|
57
41
|
private getDatabase;
|
|
58
42
|
private normalizeSavepointName;
|
|
59
|
-
private invokeStatement;
|
|
60
|
-
private isBindingArityError;
|
|
61
43
|
}
|
|
62
44
|
declare function createSQLiteAdapter(options?: SQLiteAdapterOptions): SQLiteAdapter;
|
|
63
45
|
|
|
64
|
-
export {
|
|
46
|
+
export { SQLiteAdapter, type SQLiteAdapterOptions, type SQLiteDatabaseLike, type SQLiteStatementLike, createSQLiteAdapter };
|
package/dist/index.mjs
CHANGED
|
@@ -5,6 +5,7 @@ var TransactionError = class extends Error {
|
|
|
5
5
|
var SQLiteAdapter = class {
|
|
6
6
|
database;
|
|
7
7
|
connected;
|
|
8
|
+
transactionTail = Promise.resolve();
|
|
8
9
|
filename;
|
|
9
10
|
createDatabaseInstance;
|
|
10
11
|
constructor(options = {}) {
|
|
@@ -31,9 +32,26 @@ var SQLiteAdapter = class {
|
|
|
31
32
|
isConnected() {
|
|
32
33
|
return this.connected;
|
|
33
34
|
}
|
|
35
|
+
async runWithTransactionScope(callback) {
|
|
36
|
+
const previous = this.transactionTail;
|
|
37
|
+
let release;
|
|
38
|
+
const current = previous.then(() => new Promise((resolve) => {
|
|
39
|
+
release = resolve;
|
|
40
|
+
}));
|
|
41
|
+
this.transactionTail = current;
|
|
42
|
+
await previous;
|
|
43
|
+
try {
|
|
44
|
+
return await callback();
|
|
45
|
+
} finally {
|
|
46
|
+
release();
|
|
47
|
+
if (this.transactionTail === current) {
|
|
48
|
+
this.transactionTail = Promise.resolve();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
34
52
|
async query(sql, bindings = []) {
|
|
35
53
|
const statement = this.getDatabase().prepare(sql);
|
|
36
|
-
const rows =
|
|
54
|
+
const rows = statement.all(...bindings);
|
|
37
55
|
return {
|
|
38
56
|
rows,
|
|
39
57
|
rowCount: rows.length
|
|
@@ -44,7 +62,7 @@ var SQLiteAdapter = class {
|
|
|
44
62
|
}
|
|
45
63
|
async execute(sql, bindings = []) {
|
|
46
64
|
const statement = this.getDatabase().prepare(sql);
|
|
47
|
-
const result =
|
|
65
|
+
const result = statement.run(...bindings);
|
|
48
66
|
return {
|
|
49
67
|
affectedRows: result.changes,
|
|
50
68
|
lastInsertId: typeof result.lastInsertRowid === "bigint" ? Number(result.lastInsertRowid) : result.lastInsertRowid
|
|
@@ -81,19 +99,6 @@ var SQLiteAdapter = class {
|
|
|
81
99
|
}
|
|
82
100
|
return name;
|
|
83
101
|
}
|
|
84
|
-
invokeStatement(statement, method, bindings) {
|
|
85
|
-
try {
|
|
86
|
-
return statement[method](...bindings);
|
|
87
|
-
} catch (error) {
|
|
88
|
-
if (bindings.length > 0 && this.isBindingArityError(error)) {
|
|
89
|
-
return statement[method](bindings);
|
|
90
|
-
}
|
|
91
|
-
throw error;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
isBindingArityError(error) {
|
|
95
|
-
return error instanceof RangeError && (error.message.includes("Too many parameter values were provided") || error.message.includes("Too few parameter values were provided"));
|
|
96
|
-
}
|
|
97
102
|
};
|
|
98
103
|
function createSQLiteAdapter(options = {}) {
|
|
99
104
|
return new SQLiteAdapter(options);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@holo-js/db-sqlite",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Holo-JS Framework - SQLite database adapter",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
"test": "vitest --run"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@holo-js/db": "^0.1.
|
|
26
|
+
"@holo-js/db": "^0.1.5"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"better-sqlite3": "^11.7.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@holo-js/db": "
|
|
32
|
+
"@holo-js/db": "^0.1.5",
|
|
33
33
|
"@types/better-sqlite3": "^7.6.12",
|
|
34
34
|
"tsup": "^8.3.5",
|
|
35
35
|
"typescript": "^5.7.2",
|
|
36
|
-
"vitest": "^
|
|
36
|
+
"vitest": "^4.1.5"
|
|
37
37
|
}
|
|
38
38
|
}
|