@powersync/node 0.12.0 → 0.14.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/DefaultWorker.cjs.map +1 -1
- package/dist/bundle.cjs +45 -21
- package/dist/bundle.cjs.map +1 -1
- package/dist/worker.cjs.map +1 -1
- package/lib/db/AsyncDatabase.js +1 -0
- package/lib/db/AsyncDatabase.js.map +1 -0
- package/lib/db/BetterSqliteWorker.js +1 -0
- package/lib/db/BetterSqliteWorker.js.map +1 -0
- package/lib/db/DefaultWorker.js +1 -0
- package/lib/db/DefaultWorker.js.map +1 -0
- package/lib/db/NodeSqliteWorker.js +1 -0
- package/lib/db/NodeSqliteWorker.js.map +1 -0
- package/lib/db/PowerSyncDatabase.js +1 -0
- package/lib/db/PowerSyncDatabase.js.map +1 -0
- package/lib/db/RemoteConnection.d.ts +3 -2
- package/lib/db/RemoteConnection.js +30 -12
- package/lib/db/RemoteConnection.js.map +1 -0
- package/lib/db/SqliteWorker.js +1 -0
- package/lib/db/SqliteWorker.js.map +1 -0
- package/lib/db/WorkerConnectionPool.d.ts +1 -1
- package/lib/db/WorkerConnectionPool.js +9 -4
- package/lib/db/WorkerConnectionPool.js.map +1 -0
- package/lib/db/options.js +1 -0
- package/lib/db/options.js.map +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -0
- package/lib/sync/stream/NodeRemote.js +1 -0
- package/lib/sync/stream/NodeRemote.js.map +1 -0
- package/lib/sync/stream/NodeStreamingSyncImplementation.d.ts +3 -3
- package/lib/sync/stream/NodeStreamingSyncImplementation.js +8 -4
- package/lib/sync/stream/NodeStreamingSyncImplementation.js.map +1 -0
- package/lib/utils/modules.js +1 -0
- package/lib/utils/modules.js.map +1 -0
- package/lib/utils/modules_commonjs.js +1 -0
- package/lib/utils/modules_commonjs.js.map +1 -0
- package/lib/worker.js +1 -0
- package/lib/worker.js.map +1 -0
- package/package.json +10 -10
- package/src/db/AsyncDatabase.ts +26 -0
- package/src/db/BetterSqliteWorker.ts +72 -0
- package/src/db/DefaultWorker.ts +3 -0
- package/src/db/NodeSqliteWorker.ts +63 -0
- package/src/db/PowerSyncDatabase.ts +100 -0
- package/src/db/RemoteConnection.ts +129 -0
- package/src/db/SqliteWorker.ts +119 -0
- package/src/db/WorkerConnectionPool.ts +328 -0
- package/src/db/options.ts +51 -0
- package/src/index.ts +4 -0
- package/src/sync/stream/NodeRemote.ts +123 -0
- package/src/sync/stream/NodeStreamingSyncImplementation.ts +57 -0
- package/src/utils/modules.ts +6 -0
- package/src/utils/modules_commonjs.ts +7 -0
- package/src/worker.ts +1 -0
|
@@ -7,42 +7,59 @@ export class RemoteConnection {
|
|
|
7
7
|
worker;
|
|
8
8
|
comlink;
|
|
9
9
|
database;
|
|
10
|
+
notifyWorkerClosed = new AbortController();
|
|
10
11
|
constructor(worker, comlink, database) {
|
|
11
12
|
this.worker = worker;
|
|
12
13
|
this.comlink = comlink;
|
|
13
14
|
this.database = database;
|
|
15
|
+
this.worker.once('exit', (_) => {
|
|
16
|
+
this.notifyWorkerClosed.abort();
|
|
17
|
+
});
|
|
14
18
|
}
|
|
15
19
|
/**
|
|
16
20
|
* Runs the inner function, but appends the stack trace where this function was called. This is useful for workers
|
|
17
21
|
* because stack traces from worker errors are otherwise unrelated to the application issue that has caused them.
|
|
18
22
|
*/
|
|
19
|
-
|
|
23
|
+
withRemote(inner) {
|
|
20
24
|
const trace = {};
|
|
21
25
|
Error.captureStackTrace(trace);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (e instanceof Error && e.stack) {
|
|
27
|
-
e.stack += trace.stack;
|
|
26
|
+
const controller = this.notifyWorkerClosed;
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
if (controller.signal.aborted) {
|
|
29
|
+
reject(new Error('Called operation on closed remote'));
|
|
28
30
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
function handleAbort() {
|
|
32
|
+
reject(new Error('Remote peer closed with request in flight'));
|
|
33
|
+
}
|
|
34
|
+
function completePromise(action) {
|
|
35
|
+
controller.signal.removeEventListener('abort', handleAbort);
|
|
36
|
+
action();
|
|
37
|
+
}
|
|
38
|
+
controller.signal.addEventListener('abort', handleAbort);
|
|
39
|
+
inner()
|
|
40
|
+
.then((data) => completePromise(() => resolve(data)))
|
|
41
|
+
.catch((e) => {
|
|
42
|
+
if (e instanceof Error && e.stack) {
|
|
43
|
+
e.stack += trace.stack;
|
|
44
|
+
}
|
|
45
|
+
return completePromise(() => reject(e));
|
|
46
|
+
});
|
|
47
|
+
});
|
|
31
48
|
}
|
|
32
49
|
executeBatch(query, params = []) {
|
|
33
|
-
return this.
|
|
50
|
+
return this.withRemote(async () => {
|
|
34
51
|
const result = await this.database.executeBatch(query, params ?? []);
|
|
35
52
|
return RemoteConnection.wrapQueryResult(result);
|
|
36
53
|
});
|
|
37
54
|
}
|
|
38
55
|
execute(query, params) {
|
|
39
|
-
return this.
|
|
56
|
+
return this.withRemote(async () => {
|
|
40
57
|
const result = await this.database.execute(query, params ?? []);
|
|
41
58
|
return RemoteConnection.wrapQueryResult(result);
|
|
42
59
|
});
|
|
43
60
|
}
|
|
44
61
|
executeRaw(query, params) {
|
|
45
|
-
return this.
|
|
62
|
+
return this.withRemote(async () => {
|
|
46
63
|
return await this.database.executeRaw(query, params ?? []);
|
|
47
64
|
});
|
|
48
65
|
}
|
|
@@ -85,3 +102,4 @@ export class RemoteConnection {
|
|
|
85
102
|
};
|
|
86
103
|
}
|
|
87
104
|
}
|
|
105
|
+
//# sourceMappingURL=RemoteConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteConnection.js","sourceRoot":"","sources":["../../src/db/RemoteConnection.ts"],"names":[],"mappings":"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"}
|
package/lib/db/SqliteWorker.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteWorker.js","sourceRoot":"","sources":["../../src/db/SqliteWorker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseObserver, DBAdapter, DBAdapterListener,
|
|
1
|
+
import { BaseObserver, DBAdapter, DBAdapterListener, DBLockOptions, LockContext, QueryResult, Transaction } from '@powersync/common';
|
|
2
2
|
import { NodeSQLOpenOptions } from './options.js';
|
|
3
3
|
export type BetterSQLite3LockContext = LockContext & {
|
|
4
4
|
executeBatch(query: string, params?: any[][]): Promise<QueryResult>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import * as Comlink from 'comlink';
|
|
1
2
|
import fs from 'node:fs/promises';
|
|
2
3
|
import * as path from 'node:path';
|
|
3
4
|
import { Worker } from 'node:worker_threads';
|
|
4
|
-
import * as Comlink from 'comlink';
|
|
5
5
|
import { BaseObserver } from '@powersync/common';
|
|
6
6
|
import { AsyncResource } from 'node:async_hooks';
|
|
7
|
-
import { RemoteConnection } from './RemoteConnection.js';
|
|
8
7
|
import { isBundledToCommonJs } from '../utils/modules.js';
|
|
8
|
+
import { RemoteConnection } from './RemoteConnection.js';
|
|
9
9
|
const READ_CONNECTIONS = 5;
|
|
10
10
|
const defaultDatabaseImplementation = {
|
|
11
11
|
type: 'better-sqlite3'
|
|
@@ -94,10 +94,14 @@ export class WorkerConnectionPool extends BaseObserver {
|
|
|
94
94
|
if (this.options.initializeConnection) {
|
|
95
95
|
await this.options.initializeConnection(connection, isWriter);
|
|
96
96
|
}
|
|
97
|
-
await connection.execute('pragma journal_mode = WAL');
|
|
98
97
|
if (!isWriter) {
|
|
99
98
|
await connection.execute('pragma query_only = true');
|
|
100
99
|
}
|
|
100
|
+
else {
|
|
101
|
+
// We only need to enable this on the writer connection.
|
|
102
|
+
// We can get `database is locked` errors if we enable this on concurrently opening read connections.
|
|
103
|
+
await connection.execute('pragma journal_mode = WAL');
|
|
104
|
+
}
|
|
101
105
|
return connection;
|
|
102
106
|
};
|
|
103
107
|
// Open the writer first to avoid multiple threads enabling WAL concurrently (causing "database is locked" errors).
|
|
@@ -163,7 +167,7 @@ export class WorkerConnectionPool extends BaseObserver {
|
|
|
163
167
|
return await fn(this.writeConnection);
|
|
164
168
|
}
|
|
165
169
|
finally {
|
|
166
|
-
const serializedUpdates = await this.writeConnection.
|
|
170
|
+
const serializedUpdates = await this.writeConnection.executeRaw("SELECT powersync_update_hooks('get');", []);
|
|
167
171
|
const updates = JSON.parse(serializedUpdates[0][0]);
|
|
168
172
|
if (updates.length > 0) {
|
|
169
173
|
const event = {
|
|
@@ -259,3 +263,4 @@ export class WorkerConnectionPool extends BaseObserver {
|
|
|
259
263
|
}
|
|
260
264
|
}
|
|
261
265
|
}
|
|
266
|
+
//# sourceMappingURL=WorkerConnectionPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerConnectionPool.js","sourceRoot":"","sources":["../../src/db/WorkerConnectionPool.ts"],"names":[],"mappings":"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"}
|
package/lib/db/options.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/db/options.ts"],"names":[],"mappings":""}
|
package/lib/index.js
CHANGED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,cAAc,mBAAmB,CAAC;AAElC,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeRemote.js","sourceRoot":"","sources":["../../../src/sync/stream/NodeRemote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAEL,cAAc,EAGd,qBAAqB,EAErB,2BAA2B,EAE5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAEL,iBAAiB,EAEjB,mBAAmB,EACnB,UAAU,EACV,SAAS,IAAI,eAAe,EAC7B,MAAM,QAAQ,CAAC;AAEhB,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,MAAM,iBAAkB,SAAQ,2BAA2B;IACzD,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;CACF;AAcD,MAAM,OAAO,UAAW,SAAQ,cAAc;IAIhC;IACA;IAJJ,YAAY,CAAyB;IAE7C,YACY,SAA0B,EAC1B,SAAkB,qBAAqB,EACjD,OAAoC;QAEpC,MAAM,eAAe,GAAG,OAAO,EAAE,UAAU,IAAI,sBAAsB,EAAE,CAAC;QAExE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;YACvB,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,IAAI,iBAAiB,EAAE;YAC5E,YAAY,EAAE;gBACZ,UAAU,EAAE,eAAe;aAC5B;YACD,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;SACnB,CAAC,CAAC;QAZO,cAAS,GAAT,SAAS,CAAiB;QAC1B,WAAM,GAAN,MAAM,CAAiC;QAajD,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,UAAU,CAAC;IAC1C,CAAC;IAES,YAAY,CAAC,GAAW;QAChC,iDAAiD;QACjD,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAExD,6CAA6C;QAC7C,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,GAAG,EAAE;YAClC,UAAU,EAAE,cAAc;YAC1B,OAAO,EAAE;gBACP,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;aAClC;SACF,CAAC,CAAC;QAEH,OAAO,EAA0B,CAAC;IACpC,CAAC;IAES,sBAAsB,CAAC,GAAW;QAC1C,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,OAAO,mBAAmB,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO;YACL,KAAK,CAAC,YAAY,EAAE;YACpB,gBAAgB;YAChB,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;YAC/B,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;SACnC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,sBAAsB;IAC7B,iGAAiG;IACjG,4BAA4B;IAC5B,OAAO,IAAI,iBAAiB,CAAC;QAC3B,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACtC,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC;KACzC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CACzB,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AbstractStreamingSyncImplementation, AbstractStreamingSyncImplementationOptions, LockOptions } from '@powersync/common';
|
|
2
|
-
import
|
|
1
|
+
import { AbstractStreamingSyncImplementation, AbstractStreamingSyncImplementationOptions, LockOptions, LockType } from '@powersync/common';
|
|
2
|
+
import { Mutex } from 'async-mutex';
|
|
3
3
|
export declare class NodeStreamingSyncImplementation extends AbstractStreamingSyncImplementation {
|
|
4
|
-
locks:
|
|
4
|
+
locks: Map<LockType, Mutex>;
|
|
5
5
|
constructor(options: AbstractStreamingSyncImplementationOptions);
|
|
6
6
|
/**
|
|
7
7
|
* Configures global locks on sync process
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbstractStreamingSyncImplementation, LockType } from '@powersync/common';
|
|
2
|
-
import
|
|
2
|
+
import { Mutex } from 'async-mutex';
|
|
3
3
|
/**
|
|
4
4
|
* Global locks which prevent multiple instances from syncing
|
|
5
5
|
* concurrently.
|
|
@@ -21,16 +21,19 @@ export class NodeStreamingSyncImplementation extends AbstractStreamingSyncImplem
|
|
|
21
21
|
this.locks = LOCKS.get(identifier);
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
this.locks = new
|
|
24
|
+
this.locks = new Map();
|
|
25
|
+
this.locks.set(LockType.CRUD, new Mutex());
|
|
26
|
+
this.locks.set(LockType.SYNC, new Mutex());
|
|
25
27
|
if (identifier) {
|
|
26
28
|
LOCKS.set(identifier, this.locks);
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
obtainLock(lockOptions) {
|
|
30
|
-
|
|
32
|
+
const lock = this.locks.get(lockOptions.type);
|
|
33
|
+
if (!lock) {
|
|
31
34
|
throw new Error(`Lock type ${lockOptions.type} not found`);
|
|
32
35
|
}
|
|
33
|
-
return
|
|
36
|
+
return lock.runExclusive(async () => {
|
|
34
37
|
if (lockOptions.signal?.aborted) {
|
|
35
38
|
throw new Error('Aborted');
|
|
36
39
|
}
|
|
@@ -38,3 +41,4 @@ export class NodeStreamingSyncImplementation extends AbstractStreamingSyncImplem
|
|
|
38
41
|
});
|
|
39
42
|
}
|
|
40
43
|
}
|
|
44
|
+
//# sourceMappingURL=NodeStreamingSyncImplementation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeStreamingSyncImplementation.js","sourceRoot":"","sources":["../../../src/sync/stream/NodeStreamingSyncImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EAGnC,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;GAGG;AACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;AAEtD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEnD,MAAM,OAAO,+BAAgC,SAAQ,mCAAmC;IACtF,KAAK,CAAuB;IAE5B,YAAY,OAAmD;QAC7D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC,IAAI,UAAU,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC;QAE3C,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,UAAU,CAAI,WAA2B;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,CAAC,IAAI,YAAY,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/lib/utils/modules.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/utils/modules.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,mBAAmB,GAAY,KAAK,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modules_commonjs.js","sourceRoot":"","sources":["../../src/utils/modules_commonjs.ts"],"names":[],"mappings":"AAAA,wHAAwH;AACxH,wBAAwB;AACxB,MAAM,CAAC,MAAM,mBAAmB,GAAY,IAAI,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC"}
|
package/lib/worker.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powersync/node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"lib",
|
|
12
12
|
"dist",
|
|
13
|
-
"download_core.js"
|
|
13
|
+
"download_core.js",
|
|
14
|
+
"src"
|
|
14
15
|
],
|
|
15
16
|
"type": "module",
|
|
16
17
|
"exports": {
|
|
@@ -47,7 +48,7 @@
|
|
|
47
48
|
},
|
|
48
49
|
"homepage": "https://docs.powersync.com/",
|
|
49
50
|
"peerDependencies": {
|
|
50
|
-
"@powersync/common": "^1.
|
|
51
|
+
"@powersync/common": "^1.41.1",
|
|
51
52
|
"better-sqlite3": "12.x"
|
|
52
53
|
},
|
|
53
54
|
"peerDependenciesMeta": {
|
|
@@ -56,21 +57,20 @@
|
|
|
56
57
|
}
|
|
57
58
|
},
|
|
58
59
|
"dependencies": {
|
|
59
|
-
"async-
|
|
60
|
-
"bson": "^6.6.0",
|
|
60
|
+
"async-mutex": "^0.5.0",
|
|
61
61
|
"comlink": "^4.4.2",
|
|
62
62
|
"undici": "^7.11.0",
|
|
63
|
-
"
|
|
63
|
+
"bson": "^6.10.4",
|
|
64
|
+
"@powersync/common": "1.41.1"
|
|
64
65
|
},
|
|
65
66
|
"devDependencies": {
|
|
66
|
-
"@types/async-lock": "^1.4.0",
|
|
67
67
|
"@types/node": "^24.2.0",
|
|
68
68
|
"better-sqlite3": "^12.2.0",
|
|
69
|
-
"drizzle-orm": "^0.
|
|
69
|
+
"drizzle-orm": "^0.44.7",
|
|
70
70
|
"rollup": "4.14.3",
|
|
71
71
|
"typescript": "^5.5.3",
|
|
72
72
|
"vitest": "^3.2.4",
|
|
73
|
-
"@powersync/drizzle-driver": "0.
|
|
73
|
+
"@powersync/drizzle-driver": "0.7.0"
|
|
74
74
|
},
|
|
75
75
|
"keywords": [
|
|
76
76
|
"data sync",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"scripts": {
|
|
83
83
|
"prepare:core": "node download_core.js",
|
|
84
84
|
"build": " pnpm prepare:core && tsc -b && rollup --config",
|
|
85
|
-
"build:prod": "pnpm prepare:core && tsc -b
|
|
85
|
+
"build:prod": "pnpm prepare:core && tsc -b && rollup --config",
|
|
86
86
|
"clean": "rm -rf lib dist tsconfig.tsbuildinfo",
|
|
87
87
|
"watch": "tsc -b -w",
|
|
88
88
|
"test": " pnpm prepare:core && vitest",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { QueryResult } from '@powersync/common';
|
|
2
|
+
import { NodeDatabaseImplementation } from './options.js';
|
|
3
|
+
|
|
4
|
+
export type ProxiedQueryResult = Omit<QueryResult, 'rows'> & {
|
|
5
|
+
rows?: {
|
|
6
|
+
_array: any[];
|
|
7
|
+
length: number;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export interface AsyncDatabaseOpenOptions {
|
|
12
|
+
path: string;
|
|
13
|
+
isWriter: boolean;
|
|
14
|
+
implementation: NodeDatabaseImplementation;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface AsyncDatabaseOpener {
|
|
18
|
+
open(options: AsyncDatabaseOpenOptions): Promise<AsyncDatabase>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface AsyncDatabase {
|
|
22
|
+
execute: (query: string, params: any[]) => Promise<ProxiedQueryResult>;
|
|
23
|
+
executeRaw: (query: string, params: any[]) => Promise<any[][]>;
|
|
24
|
+
executeBatch: (query: string, params: any[][]) => Promise<ProxiedQueryResult>;
|
|
25
|
+
close: () => Promise<void>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Database } from 'better-sqlite3';
|
|
2
|
+
import { AsyncDatabase, AsyncDatabaseOpenOptions } from './AsyncDatabase.js';
|
|
3
|
+
import { PowerSyncWorkerOptions } from './SqliteWorker.js';
|
|
4
|
+
import { threadId } from 'node:worker_threads';
|
|
5
|
+
|
|
6
|
+
class BlockingAsyncDatabase implements AsyncDatabase {
|
|
7
|
+
private readonly db: Database;
|
|
8
|
+
|
|
9
|
+
constructor(db: Database) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
|
|
12
|
+
db.function('node_thread_id', () => threadId);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async close() {
|
|
16
|
+
this.db.close();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async execute(query: string, params: any[]) {
|
|
20
|
+
const stmt = this.db.prepare(query);
|
|
21
|
+
if (stmt.reader) {
|
|
22
|
+
const rows = stmt.all(params);
|
|
23
|
+
return {
|
|
24
|
+
rowsAffected: 0,
|
|
25
|
+
rows: {
|
|
26
|
+
_array: rows,
|
|
27
|
+
length: rows.length
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
} else {
|
|
31
|
+
const info = stmt.run(params);
|
|
32
|
+
return {
|
|
33
|
+
rowsAffected: info.changes,
|
|
34
|
+
insertId: Number(info.lastInsertRowid)
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async executeRaw(query: string, params: any[]) {
|
|
40
|
+
const stmt = this.db.prepare(query);
|
|
41
|
+
|
|
42
|
+
if (stmt.reader) {
|
|
43
|
+
return stmt.raw().all(params) as any[][];
|
|
44
|
+
} else {
|
|
45
|
+
stmt.raw().run(params);
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async executeBatch(query: string, params: any[][]) {
|
|
51
|
+
params = params ?? [];
|
|
52
|
+
|
|
53
|
+
let rowsAffected = 0;
|
|
54
|
+
|
|
55
|
+
const stmt = this.db.prepare(query);
|
|
56
|
+
for (const paramSet of params) {
|
|
57
|
+
const info = stmt.run(paramSet);
|
|
58
|
+
rowsAffected += info.changes;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return { rowsAffected };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export async function openDatabase(worker: PowerSyncWorkerOptions, options: AsyncDatabaseOpenOptions) {
|
|
66
|
+
const BetterSQLite3Database = await worker.loadBetterSqlite3();
|
|
67
|
+
const baseDB = new BetterSQLite3Database(options.path);
|
|
68
|
+
baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');
|
|
69
|
+
|
|
70
|
+
const asyncDb = new BlockingAsyncDatabase(baseDB);
|
|
71
|
+
return asyncDb;
|
|
72
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { threadId } from 'node:worker_threads';
|
|
3
|
+
|
|
4
|
+
import { dynamicImport } from '../utils/modules.js';
|
|
5
|
+
import { AsyncDatabase, AsyncDatabaseOpenOptions } from './AsyncDatabase.js';
|
|
6
|
+
import { PowerSyncWorkerOptions } from './SqliteWorker.js';
|
|
7
|
+
|
|
8
|
+
class BlockingNodeDatabase implements AsyncDatabase {
|
|
9
|
+
private readonly db: DatabaseSync;
|
|
10
|
+
|
|
11
|
+
constructor(db: DatabaseSync, write: boolean) {
|
|
12
|
+
this.db = db;
|
|
13
|
+
|
|
14
|
+
db.function('node_thread_id', () => threadId);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async close() {
|
|
18
|
+
this.db.close();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async execute(query: string, params: any[]) {
|
|
22
|
+
const stmt = this.db.prepare(query);
|
|
23
|
+
const rows = stmt.all(...params);
|
|
24
|
+
return {
|
|
25
|
+
rowsAffected: 0,
|
|
26
|
+
rows: {
|
|
27
|
+
_array: rows,
|
|
28
|
+
length: rows.length
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async executeRaw(query: string, params: any[]) {
|
|
34
|
+
const stmt = this.db.prepare(query);
|
|
35
|
+
(stmt as any).setReturnArrays(true); // Missing in @types/node, https://nodejs.org/api/sqlite.html#statementsetreturnarraysenabled
|
|
36
|
+
return stmt.all(...params) as any as any[][];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async executeBatch(query: string, params: any[][]) {
|
|
40
|
+
params = params ?? [];
|
|
41
|
+
|
|
42
|
+
let rowsAffected = 0;
|
|
43
|
+
|
|
44
|
+
const stmt = this.db.prepare(query);
|
|
45
|
+
for (const paramSet of params) {
|
|
46
|
+
const info = stmt.run(...paramSet);
|
|
47
|
+
rowsAffected += info.changes as number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return { rowsAffected };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export async function openDatabase(worker: PowerSyncWorkerOptions, options: AsyncDatabaseOpenOptions) {
|
|
55
|
+
// NOTE: We want to import node:sqlite dynamically, to avoid bundlers unconditionally requiring node:sqlite in the
|
|
56
|
+
// end, since that would make us incompatible with older Node.JS versions.
|
|
57
|
+
const { DatabaseSync } = await dynamicImport('node:sqlite');
|
|
58
|
+
|
|
59
|
+
const baseDB = new DatabaseSync(options.path, { allowExtension: true });
|
|
60
|
+
baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');
|
|
61
|
+
|
|
62
|
+
return new BlockingNodeDatabase(baseDB, options.isWriter);
|
|
63
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AbstractPowerSyncDatabase,
|
|
3
|
+
AbstractRemoteOptions,
|
|
4
|
+
AbstractStreamingSyncImplementation,
|
|
5
|
+
AdditionalConnectionOptions,
|
|
6
|
+
BucketStorageAdapter,
|
|
7
|
+
DBAdapter,
|
|
8
|
+
PowerSyncBackendConnector,
|
|
9
|
+
PowerSyncConnectionOptions,
|
|
10
|
+
PowerSyncDatabaseOptions,
|
|
11
|
+
PowerSyncDatabaseOptionsWithSettings,
|
|
12
|
+
RequiredAdditionalConnectionOptions,
|
|
13
|
+
SqliteBucketStorage,
|
|
14
|
+
SQLOpenFactory
|
|
15
|
+
} from '@powersync/common';
|
|
16
|
+
|
|
17
|
+
import { NodeCustomConnectionOptions, NodeRemote } from '../sync/stream/NodeRemote.js';
|
|
18
|
+
import { NodeStreamingSyncImplementation } from '../sync/stream/NodeStreamingSyncImplementation.js';
|
|
19
|
+
|
|
20
|
+
import { WorkerConnectionPool } from './WorkerConnectionPool.js';
|
|
21
|
+
import { NodeSQLOpenOptions } from './options.js';
|
|
22
|
+
|
|
23
|
+
export type NodePowerSyncDatabaseOptions = PowerSyncDatabaseOptions & {
|
|
24
|
+
database: DBAdapter | SQLOpenFactory | NodeSQLOpenOptions;
|
|
25
|
+
/**
|
|
26
|
+
* Options to override how the SDK will connect to the sync service.
|
|
27
|
+
*
|
|
28
|
+
* This option is intended to be used for internal tests.
|
|
29
|
+
*/
|
|
30
|
+
remoteOptions?: Partial<AbstractRemoteOptions>;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export type NodeAdditionalConnectionOptions = AdditionalConnectionOptions & NodeCustomConnectionOptions;
|
|
34
|
+
|
|
35
|
+
export type NodePowerSyncConnectionOptions = PowerSyncConnectionOptions & NodeAdditionalConnectionOptions;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* A PowerSync database which provides SQLite functionality
|
|
39
|
+
* which is automatically synced.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* export const db = new PowerSyncDatabase({
|
|
44
|
+
* schema: AppSchema,
|
|
45
|
+
* database: {
|
|
46
|
+
* dbFilename: 'example.db'
|
|
47
|
+
* }
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
|
|
52
|
+
constructor(options: NodePowerSyncDatabaseOptions) {
|
|
53
|
+
super(options);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
async _initialize(): Promise<void> {
|
|
57
|
+
await (this.database as WorkerConnectionPool).initialize();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Opens a DBAdapter using better-sqlite3 as the default SQLite open factory.
|
|
62
|
+
*/
|
|
63
|
+
protected openDBAdapter(options: PowerSyncDatabaseOptionsWithSettings): DBAdapter {
|
|
64
|
+
return new WorkerConnectionPool(options.database);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
protected generateBucketStorageAdapter(): BucketStorageAdapter {
|
|
68
|
+
return new SqliteBucketStorage(this.database, this.logger);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
connect(
|
|
72
|
+
connector: PowerSyncBackendConnector,
|
|
73
|
+
options?: PowerSyncConnectionOptions & NodeCustomConnectionOptions
|
|
74
|
+
): Promise<void> {
|
|
75
|
+
return super.connect(connector, options);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
protected generateSyncStreamImplementation(
|
|
79
|
+
connector: PowerSyncBackendConnector,
|
|
80
|
+
options: RequiredAdditionalConnectionOptions & NodeAdditionalConnectionOptions
|
|
81
|
+
): AbstractStreamingSyncImplementation {
|
|
82
|
+
const logger = this.logger;
|
|
83
|
+
const remote = new NodeRemote(connector, logger, {
|
|
84
|
+
dispatcher: options.dispatcher,
|
|
85
|
+
...(this.options as NodePowerSyncDatabaseOptions).remoteOptions
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
return new NodeStreamingSyncImplementation({
|
|
89
|
+
adapter: this.bucketStorageAdapter,
|
|
90
|
+
remote,
|
|
91
|
+
uploadCrud: async () => {
|
|
92
|
+
await this.waitForReady();
|
|
93
|
+
await connector.uploadData(this);
|
|
94
|
+
},
|
|
95
|
+
...options,
|
|
96
|
+
identifier: this.database.name,
|
|
97
|
+
logger
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|