@powersync/node 0.0.0-dev-20260503073249 → 0.0.0-dev-20260630141119
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/lib/attachments/NodeFileSystemAdapter.d.ts +1 -0
- package/lib/attachments/NodeFileSystemAdapter.d.ts.map +1 -0
- package/lib/db/AsyncDatabase.d.ts +8 -10
- package/lib/db/AsyncDatabase.d.ts.map +1 -0
- package/lib/db/BetterSqliteWorker.d.ts +6 -17
- package/lib/db/BetterSqliteWorker.d.ts.map +1 -0
- package/lib/db/BetterSqliteWorker.js +18 -9
- package/lib/db/BetterSqliteWorker.js.map +1 -1
- package/lib/db/DefaultWorker.d.ts +1 -0
- package/lib/db/DefaultWorker.d.ts.map +1 -0
- package/lib/db/NodeSqliteWorker.d.ts +6 -12
- package/lib/db/NodeSqliteWorker.d.ts.map +1 -0
- package/lib/db/NodeSqliteWorker.js +11 -9
- package/lib/db/NodeSqliteWorker.js.map +1 -1
- package/lib/db/PowerSyncDatabase.d.ts +7 -19
- package/lib/db/PowerSyncDatabase.d.ts.map +1 -0
- package/lib/db/PowerSyncDatabase.js +22 -29
- package/lib/db/PowerSyncDatabase.js.map +1 -1
- package/lib/db/RemoteConnection.d.ts +7 -18
- package/lib/db/RemoteConnection.d.ts.map +1 -0
- package/lib/db/RemoteConnection.js +10 -24
- package/lib/db/RemoteConnection.js.map +1 -1
- package/lib/db/SqliteWorker.d.ts +1 -0
- package/lib/db/SqliteWorker.d.ts.map +1 -0
- package/lib/db/SqliteWorker.js +3 -13
- package/lib/db/SqliteWorker.js.map +1 -1
- package/lib/db/WorkerConnectionPool.d.ts +5 -23
- package/lib/db/WorkerConnectionPool.d.ts.map +1 -0
- package/lib/db/WorkerConnectionPool.js +8 -22
- package/lib/db/WorkerConnectionPool.js.map +1 -1
- package/lib/db/options.d.ts +1 -0
- package/lib/db/options.d.ts.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/sync/stream/NodeRemote.d.ts +15 -8
- package/lib/sync/stream/NodeRemote.d.ts.map +1 -0
- package/lib/sync/stream/NodeRemote.js +26 -21
- package/lib/sync/stream/NodeRemote.js.map +1 -1
- package/lib/sync/stream/NodeStreamingSyncImplementation.d.ts +2 -1
- package/lib/sync/stream/NodeStreamingSyncImplementation.d.ts.map +1 -0
- package/lib/sync/stream/NodeStreamingSyncImplementation.js +2 -2
- package/lib/sync/stream/NodeStreamingSyncImplementation.js.map +1 -1
- package/lib/worker.d.ts +1 -0
- package/lib/worker.d.ts.map +1 -0
- package/package.json +19 -30
- package/src/db/AsyncDatabase.ts +7 -10
- package/src/db/BetterSqliteWorker.ts +22 -14
- package/src/db/NodeSqliteWorker.ts +16 -13
- package/src/db/PowerSyncDatabase.ts +46 -59
- package/src/db/RemoteConnection.ts +12 -34
- package/src/db/SqliteWorker.ts +3 -13
- package/src/db/WorkerConnectionPool.ts +16 -33
- package/src/index.ts +2 -1
- package/src/sync/stream/NodeRemote.ts +43 -44
- package/src/sync/stream/NodeStreamingSyncImplementation.ts +2 -2
- package/dist/DefaultWorker.cjs +0 -232
- package/dist/DefaultWorker.cjs.map +0 -1
- package/dist/bundle.cjs +0 -533
- package/dist/bundle.cjs.map +0 -1
- package/dist/bundle.d.cts +0 -127
- package/dist/worker.cjs +0 -233
- package/dist/worker.cjs.map +0 -1
- package/dist/worker.d.cts +0 -20
- package/lib/utils/modules.d.ts +0 -2
- package/lib/utils/modules.js +0 -6
- package/lib/utils/modules.js.map +0 -1
- package/lib/utils/modules_commonjs.d.ts +0 -2
- package/lib/utils/modules_commonjs.js +0 -7
- package/lib/utils/modules_commonjs.js.map +0 -1
- package/src/utils/modules.ts +0 -6
- package/src/utils/modules_commonjs.ts +0 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerConnectionPool.d.ts","sourceRoot":"","sources":["../../src/db/WorkerConnectionPool.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,SAAS,EACT,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAA8B,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG;IACnD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,wBAAwB,CAAC;AAQ9E;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,eAAe,CAAC,CAA8B;IACtD,OAAO,CAAC,eAAe,CAAC,CAA8B;gBAE1C,OAAO,EAAE,kBAAkB;IAWjC,UAAU;IA4FV,KAAK;IAaL,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAStG,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAsBvG,aAAa;CAUpB"}
|
|
@@ -2,8 +2,8 @@ import * as Comlink from 'comlink';
|
|
|
2
2
|
import fs from 'node:fs/promises';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import { Worker } from 'node:worker_threads';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { DBAdapter } from '@powersync/common';
|
|
6
|
+
import { Semaphore, timeoutSignal } from '@powersync/shared-internals';
|
|
7
7
|
import { RemoteConnection } from './RemoteConnection.js';
|
|
8
8
|
const READ_CONNECTIONS = 5;
|
|
9
9
|
const defaultDatabaseImplementation = {
|
|
@@ -12,7 +12,7 @@ const defaultDatabaseImplementation = {
|
|
|
12
12
|
/**
|
|
13
13
|
* Adapter for better-sqlite3
|
|
14
14
|
*/
|
|
15
|
-
export class WorkerConnectionPool extends
|
|
15
|
+
export class WorkerConnectionPool extends DBAdapter {
|
|
16
16
|
options;
|
|
17
17
|
name;
|
|
18
18
|
writeConnection;
|
|
@@ -43,16 +43,9 @@ export class WorkerConnectionPool extends BaseObserver {
|
|
|
43
43
|
dbFilePath = path.join(this.options.dbLocation, dbFilePath);
|
|
44
44
|
}
|
|
45
45
|
const openWorker = async (isWriter) => {
|
|
46
|
-
const isCommonJsModule = isBundledToCommonJs;
|
|
47
|
-
let worker;
|
|
48
46
|
const workerName = isWriter ? `write ${dbFilePath}` : `read ${dbFilePath}`;
|
|
49
47
|
const workerFactory = this.options.openWorker ?? ((...args) => new Worker(...args));
|
|
50
|
-
|
|
51
|
-
worker = workerFactory(path.resolve(__dirname, 'DefaultWorker.cjs'), { name: workerName });
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
worker = workerFactory(new URL('./DefaultWorker.js', import.meta.url), { name: workerName });
|
|
55
|
-
}
|
|
48
|
+
const worker = workerFactory(new URL('./DefaultWorker.js', import.meta.url), { name: workerName });
|
|
56
49
|
const listeners = new WeakMap();
|
|
57
50
|
const comlink = Comlink.wrap({
|
|
58
51
|
postMessage: worker.postMessage.bind(worker),
|
|
@@ -85,16 +78,13 @@ export class WorkerConnectionPool extends BaseObserver {
|
|
|
85
78
|
implementation: this.options.implementation ?? defaultDatabaseImplementation
|
|
86
79
|
}));
|
|
87
80
|
if (isWriter) {
|
|
88
|
-
await database.
|
|
81
|
+
await database.executeRaw("SELECT powersync_update_hooks('install');", []);
|
|
89
82
|
}
|
|
90
83
|
const connection = new RemoteConnection(worker, comlink, database);
|
|
91
84
|
if (this.options.initializeConnection) {
|
|
92
85
|
await this.options.initializeConnection(connection, isWriter);
|
|
93
86
|
}
|
|
94
|
-
if (
|
|
95
|
-
await connection.execute('pragma query_only = true');
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
87
|
+
if (isWriter) {
|
|
98
88
|
// We only need to enable this on the writer connection.
|
|
99
89
|
// We can get `database is locked` errors if we enable this on concurrently opening read connections.
|
|
100
90
|
await connection.execute('pragma journal_mode = WAL');
|
|
@@ -138,13 +128,11 @@ export class WorkerConnectionPool extends BaseObserver {
|
|
|
138
128
|
return await fn(item);
|
|
139
129
|
}
|
|
140
130
|
finally {
|
|
141
|
-
const serializedUpdates = await item.executeRaw("SELECT powersync_update_hooks('get');", []);
|
|
131
|
+
const { rawRows: serializedUpdates } = await item.executeRaw("SELECT powersync_update_hooks('get');", []);
|
|
142
132
|
const updates = JSON.parse(serializedUpdates[0][0]);
|
|
143
133
|
if (updates.length > 0) {
|
|
144
134
|
const event = {
|
|
145
|
-
tables: updates
|
|
146
|
-
groupedUpdates: {},
|
|
147
|
-
rawUpdates: []
|
|
135
|
+
tables: updates
|
|
148
136
|
};
|
|
149
137
|
this.iterateListeners((cb) => cb.tablesUpdated?.(event));
|
|
150
138
|
}
|
|
@@ -165,6 +153,4 @@ export class WorkerConnectionPool extends BaseObserver {
|
|
|
165
153
|
}
|
|
166
154
|
}
|
|
167
155
|
}
|
|
168
|
-
export class WorkerPoolDatabaseAdapter extends DBAdapterDefaultMixin(WorkerConnectionPool) {
|
|
169
|
-
}
|
|
170
156
|
//# sourceMappingURL=WorkerConnectionPool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkerConnectionPool.js","sourceRoot":"","sources":["../../src/db/WorkerConnectionPool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,
|
|
1
|
+
{"version":3,"file":"WorkerConnectionPool.js","sourceRoot":"","sources":["../../src/db/WorkerConnectionPool.ts"],"names":[],"mappings":"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"}
|
package/lib/db/options.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/db/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,KAAK,YAAY,CAAC,OAAO,MAAM,CAAC,CAAC;AAE1G;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AAElF;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAE5C;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,YAAY,CAAC;IAE1B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E"}
|
package/lib/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC;AAElC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAEhC,cAAc,wCAAwC,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Re export to only require one import in client side code
|
|
2
2
|
export * from '@powersync/common';
|
|
3
3
|
export * from './db/PowerSyncDatabase.js';
|
|
4
|
+
export * from './db/options.js';
|
|
4
5
|
export * from './attachments/NodeFileSystemAdapter.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,cAAc,mBAAmB,CAAC;AAElC,cAAc,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,cAAc,mBAAmB,CAAC;AAElC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAEhC,cAAc,wCAAwC,CAAC"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AbstractRemote, FetchOptions, RemoteConnector } from '@powersync/shared-internals';
|
|
2
2
|
import { Dispatcher } from 'undici';
|
|
3
|
+
import { PowerSyncLogger } from '@powersync/common';
|
|
4
|
+
import type { WebSocketSyncStreamPlatform, WebSocketSupport } from '@powersync/shared-internals/websockets';
|
|
3
5
|
export declare const STREAMING_POST_TIMEOUT_MS = 30000;
|
|
4
|
-
export
|
|
6
|
+
export interface NodeRemoteOptions {
|
|
7
|
+
/**
|
|
8
|
+
* @internal Only meant to be used for tests.
|
|
9
|
+
*/
|
|
10
|
+
customFetch?: typeof fetch;
|
|
5
11
|
/**
|
|
6
12
|
* Optional custom dispatcher for HTTP or WEB_SOCKET connections.
|
|
7
13
|
*
|
|
@@ -9,15 +15,16 @@ export type NodeCustomConnectionOptions = {
|
|
|
9
15
|
* or other connection options.
|
|
10
16
|
*/
|
|
11
17
|
dispatcher?: Dispatcher;
|
|
12
|
-
}
|
|
13
|
-
export type NodeRemoteOptions = AbstractRemoteOptions & NodeCustomConnectionOptions;
|
|
18
|
+
}
|
|
14
19
|
export declare class NodeRemote extends AbstractRemote {
|
|
15
20
|
protected connector: RemoteConnector;
|
|
16
|
-
protected logger: ILogger;
|
|
17
21
|
private wsDispatcher;
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
private fetchImpl;
|
|
23
|
+
constructor(connector: RemoteConnector, logger: PowerSyncLogger, options?: NodeRemoteOptions);
|
|
24
|
+
protected fetch({ resource, request }: FetchOptions): Promise<Response>;
|
|
25
|
+
protected loadWebSocketSupport(platform: WebSocketSyncStreamPlatform): Promise<WebSocketSupport>;
|
|
26
|
+
createSocket(url: string): globalThis.WebSocket;
|
|
20
27
|
protected getWebsocketDispatcher(url: string): Dispatcher;
|
|
21
28
|
getUserAgent(): string;
|
|
22
|
-
getBSON(): Promise<BSONImplementation>;
|
|
23
29
|
}
|
|
30
|
+
//# sourceMappingURL=NodeRemote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeRemote.d.ts","sourceRoot":"","sources":["../../../src/sync/stream/NodeRemote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAoF,MAAM,QAAQ,CAAC;AACtH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE5G,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,KAAK,CAAC;IAE3B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,qBAAa,UAAW,SAAQ,cAAc;IAK1C,SAAS,CAAC,SAAS,EAAE,eAAe;IAJtC,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,SAAS,CAAe;gBAGpB,SAAS,EAAE,eAAe,EACpC,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,iBAAiB;IAmB7B,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;cAIvD,oBAAoB,CAAC,QAAQ,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAUtG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,SAAS;IAe/C,SAAS,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM;IAc5C,YAAY,IAAI,MAAM;CAQvB"}
|
|
@@ -1,30 +1,37 @@
|
|
|
1
1
|
import * as os from 'node:os';
|
|
2
|
-
import { AbstractRemote
|
|
3
|
-
import { BSON } from 'bson';
|
|
2
|
+
import { AbstractRemote } from '@powersync/shared-internals';
|
|
4
3
|
import { EnvHttpProxyAgent, getGlobalDispatcher, ProxyAgent, WebSocket as UndiciWebSocket } from 'undici';
|
|
5
4
|
export const STREAMING_POST_TIMEOUT_MS = 30_000;
|
|
6
|
-
class NodeFetchProvider extends FetchImplementationProvider {
|
|
7
|
-
getFetch() {
|
|
8
|
-
return fetch.bind(globalThis);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
5
|
export class NodeRemote extends AbstractRemote {
|
|
12
6
|
connector;
|
|
13
|
-
logger;
|
|
14
7
|
wsDispatcher;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
super(connector, logger
|
|
18
|
-
fetchImplementation: options?.fetchImplementation ?? new NodeFetchProvider(),
|
|
19
|
-
fetchOptions: {
|
|
20
|
-
dispatcher: fetchDispatcher
|
|
21
|
-
},
|
|
22
|
-
...(options ?? {})
|
|
23
|
-
});
|
|
8
|
+
fetchImpl;
|
|
9
|
+
constructor(connector, logger, options) {
|
|
10
|
+
super(connector, logger);
|
|
24
11
|
this.connector = connector;
|
|
25
|
-
this.
|
|
12
|
+
this.fetchImpl =
|
|
13
|
+
options?.customFetch ??
|
|
14
|
+
((resource, init) => {
|
|
15
|
+
const dispatcher = options?.dispatcher ?? defaultFetchDispatcher();
|
|
16
|
+
return fetch(resource, {
|
|
17
|
+
// @ts-expect-error
|
|
18
|
+
dispatcher,
|
|
19
|
+
...init
|
|
20
|
+
});
|
|
21
|
+
});
|
|
26
22
|
this.wsDispatcher = options?.dispatcher;
|
|
27
23
|
}
|
|
24
|
+
fetch({ resource, request }) {
|
|
25
|
+
return this.fetchImpl(resource, request);
|
|
26
|
+
}
|
|
27
|
+
async loadWebSocketSupport(platform) {
|
|
28
|
+
if (!websockets) {
|
|
29
|
+
// loadWebSocketSupport being called concurrently is safe, the import resolves to the same module in that case.
|
|
30
|
+
const module = await import('@powersync/shared-internals/websockets');
|
|
31
|
+
websockets = new module.WebSocketSupport(platform);
|
|
32
|
+
}
|
|
33
|
+
return websockets;
|
|
34
|
+
}
|
|
28
35
|
createSocket(url) {
|
|
29
36
|
// Create dedicated dispatcher for this WebSocket
|
|
30
37
|
const baseDispatcher = this.getWebsocketDispatcher(url);
|
|
@@ -58,9 +65,6 @@ export class NodeRemote extends AbstractRemote {
|
|
|
58
65
|
`${os.platform()}/${os.release()}`
|
|
59
66
|
].join(' ');
|
|
60
67
|
}
|
|
61
|
-
async getBSON() {
|
|
62
|
-
return BSON;
|
|
63
|
-
}
|
|
64
68
|
}
|
|
65
69
|
function defaultFetchDispatcher() {
|
|
66
70
|
// EnvHttpProxyAgent automatically uses HTTP_PROXY, HTTPS_PROXY and NO_PROXY env vars by default.
|
|
@@ -76,4 +80,5 @@ function getProxyForProtocol(protocol) {
|
|
|
76
80
|
process.env[`all_proxy`] ??
|
|
77
81
|
process.env[`ALL_PROXY`]);
|
|
78
82
|
}
|
|
83
|
+
let websockets;
|
|
79
84
|
//# sourceMappingURL=NodeRemote.js.map
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"NodeRemote.js","sourceRoot":"","sources":["../../../src/sync/stream/NodeRemote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAiC,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EAAc,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,QAAQ,CAAC;AAItH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAiBhD,MAAM,OAAO,UAAW,SAAQ,cAAc;IAKhC;IAJJ,YAAY,CAAyB;IACrC,SAAS,CAAe;IAEhC,YACY,SAA0B,EACpC,MAAuB,EACvB,OAA2B;QAE3B,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAJf,cAAS,GAAT,SAAS,CAAiB;QAMpC,IAAI,CAAC,SAAS;YACZ,OAAO,EAAE,WAAW;gBACpB,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;oBAClB,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,sBAAsB,EAAE,CAAC;oBAEnE,OAAO,KAAK,CAAC,QAAQ,EAAE;wBACrB,mBAAmB;wBACnB,UAAU;wBACV,GAAG,IAAI;qBACR,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,UAAU,CAAC;IAC1C,CAAC;IAES,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAgB;QACjD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAES,KAAK,CAAC,oBAAoB,CAAC,QAAqC;QACxE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,+GAA+G;YAC/G,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,wCAAwC,CAAC,CAAC;YACtE,UAAU,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,GAAW;QACtB,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;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;AAED,IAAI,UAAwC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AbstractStreamingSyncImplementation, AbstractStreamingSyncImplementationOptions, LockOptions, LockType, Mutex } from '@powersync/
|
|
1
|
+
import { AbstractStreamingSyncImplementation, AbstractStreamingSyncImplementationOptions, LockOptions, LockType, Mutex } from '@powersync/shared-internals';
|
|
2
2
|
export declare class NodeStreamingSyncImplementation extends AbstractStreamingSyncImplementation {
|
|
3
3
|
locks: Map<LockType, Mutex>;
|
|
4
4
|
constructor(options: AbstractStreamingSyncImplementationOptions);
|
|
@@ -8,3 +8,4 @@ export declare class NodeStreamingSyncImplementation extends AbstractStreamingSy
|
|
|
8
8
|
initLocks(): void;
|
|
9
9
|
obtainLock<T>(lockOptions: LockOptions<T>): Promise<T>;
|
|
10
10
|
}
|
|
11
|
+
//# sourceMappingURL=NodeStreamingSyncImplementation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeStreamingSyncImplementation.d.ts","sourceRoot":"","sources":["../../../src/sync/stream/NodeStreamingSyncImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EACnC,0CAA0C,EAC1C,WAAW,EACX,QAAQ,EACR,KAAK,EACN,MAAM,6BAA6B,CAAC;AAQrC,qBAAa,+BAAgC,SAAQ,mCAAmC;IACtF,KAAK,EAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAEjB,OAAO,EAAE,0CAA0C;IAK/D;;OAEG;IACH,SAAS;IAgBT,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CASvD"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { AbstractStreamingSyncImplementation, LockType, Mutex } from '@powersync/
|
|
1
|
+
import { AbstractStreamingSyncImplementation, LockType, Mutex } from '@powersync/shared-internals';
|
|
2
2
|
/**
|
|
3
3
|
* Global locks which prevent multiple instances from syncing
|
|
4
4
|
* concurrently.
|
|
5
5
|
*/
|
|
6
6
|
const LOCKS = new Map();
|
|
7
7
|
export class NodeStreamingSyncImplementation extends AbstractStreamingSyncImplementation {
|
|
8
|
-
locks;
|
|
8
|
+
locks; // initialized by initLocks()
|
|
9
9
|
constructor(options) {
|
|
10
10
|
super(options);
|
|
11
11
|
this.initLocks();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeStreamingSyncImplementation.js","sourceRoot":"","sources":["../../../src/sync/stream/NodeStreamingSyncImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EAGnC,QAAQ,EACR,KAAK,EACN,MAAM,
|
|
1
|
+
{"version":3,"file":"NodeStreamingSyncImplementation.js","sourceRoot":"","sources":["../../../src/sync/stream/NodeStreamingSyncImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EAGnC,QAAQ,EACR,KAAK,EACN,MAAM,6BAA6B,CAAC;AAErC;;;GAGG;AACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;AAEtD,MAAM,OAAO,+BAAgC,SAAQ,mCAAmC;IACtF,KAAK,CAAwB,CAAC,6BAA6B;IAE3D,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,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;CACF"}
|
package/lib/worker.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","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.0.0-dev-
|
|
3
|
+
"version": "0.0.0-dev-20260630141119",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"registry": "https://registry.npmjs.org/",
|
|
6
6
|
"access": "public"
|
|
@@ -16,24 +16,14 @@
|
|
|
16
16
|
"type": "module",
|
|
17
17
|
"exports": {
|
|
18
18
|
".": {
|
|
19
|
-
"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
},
|
|
23
|
-
"require": {
|
|
24
|
-
"types": "./dist/bundle.d.cts",
|
|
25
|
-
"default": "./dist/bundle.cjs"
|
|
26
|
-
}
|
|
19
|
+
"types": "./lib/index.d.ts",
|
|
20
|
+
"import": "./lib/index.js",
|
|
21
|
+
"module-sync": "./lib/index.js"
|
|
27
22
|
},
|
|
28
23
|
"./worker.js": {
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
},
|
|
33
|
-
"require": {
|
|
34
|
-
"types": "./dist/worker.d.cts",
|
|
35
|
-
"default": "./dist/worker.cjs"
|
|
36
|
-
}
|
|
24
|
+
"types": "./lib/worker.d.ts",
|
|
25
|
+
"import": "./lib/worker.js",
|
|
26
|
+
"module-sync": "./lib/worker.js"
|
|
37
27
|
},
|
|
38
28
|
"./package.json": "./package.json"
|
|
39
29
|
},
|
|
@@ -48,7 +38,7 @@
|
|
|
48
38
|
},
|
|
49
39
|
"homepage": "https://docs.powersync.com/",
|
|
50
40
|
"peerDependencies": {
|
|
51
|
-
"@powersync/common": "0.0.0-dev-
|
|
41
|
+
"@powersync/common": "0.0.0-dev-20260630141119",
|
|
52
42
|
"better-sqlite3": "12.x"
|
|
53
43
|
},
|
|
54
44
|
"peerDependenciesMeta": {
|
|
@@ -57,21 +47,20 @@
|
|
|
57
47
|
}
|
|
58
48
|
},
|
|
59
49
|
"dependencies": {
|
|
60
|
-
"bson": "^6.10.4",
|
|
61
50
|
"comlink": "^4.4.2",
|
|
62
51
|
"undici": "^7.11.0",
|
|
63
|
-
"@powersync/common": "0.0.0-dev-
|
|
52
|
+
"@powersync/common": "0.0.0-dev-20260630141119",
|
|
53
|
+
"@powersync/shared-internals": "1.0.0"
|
|
64
54
|
},
|
|
65
55
|
"devDependencies": {
|
|
66
56
|
"@types/node": "^24.0.0",
|
|
67
|
-
"better-sqlite3": "^12.
|
|
57
|
+
"better-sqlite3": "^12.10.0",
|
|
58
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
59
|
+
"bson": "^6.10.4",
|
|
68
60
|
"drizzle-orm": "^0.44.7",
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"typescript": "^5.5.3",
|
|
73
|
-
"vitest": "^3.2.4",
|
|
74
|
-
"@powersync/drizzle-driver": "0.7.3"
|
|
61
|
+
"typescript": "^6.0.3",
|
|
62
|
+
"vitest": "^4.1.8",
|
|
63
|
+
"@powersync/drizzle-driver": "0.0.0-dev-20260630141119"
|
|
75
64
|
},
|
|
76
65
|
"keywords": [
|
|
77
66
|
"data sync",
|
|
@@ -82,11 +71,11 @@
|
|
|
82
71
|
],
|
|
83
72
|
"scripts": {
|
|
84
73
|
"prepare:core": "node download_core.js",
|
|
85
|
-
"build": " pnpm prepare:core && tsc -b
|
|
86
|
-
"build:prod": "pnpm prepare:core && tsc -b
|
|
74
|
+
"build": " pnpm prepare:core && tsc -b",
|
|
75
|
+
"build:prod": "pnpm prepare:core && tsc -b",
|
|
87
76
|
"clean": "rm -rf lib dist tsconfig.tsbuildinfo",
|
|
88
77
|
"watch": "tsc -b -w",
|
|
89
78
|
"test": " pnpm prepare:core && vitest",
|
|
90
|
-
"test:exports": "attw --pack . --ignore-rules no-resolution"
|
|
79
|
+
"test:exports": "attw --pack . --ignore-rules no-resolution cjs-resolves-to-esm"
|
|
91
80
|
}
|
|
92
81
|
}
|
package/src/db/AsyncDatabase.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import { QueryResult } from '@powersync/common';
|
|
1
|
+
import { BaseQueryResult, QueryResult, RawQueryResult } from '@powersync/common';
|
|
2
2
|
import { NodeDatabaseImplementation } from './options.js';
|
|
3
3
|
|
|
4
|
-
export
|
|
5
|
-
rows?:
|
|
6
|
-
|
|
7
|
-
length: number;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
4
|
+
export interface MappedQueryResult extends BaseQueryResult {
|
|
5
|
+
rows?: unknown[];
|
|
6
|
+
}
|
|
10
7
|
|
|
11
8
|
export interface AsyncDatabaseOpenOptions {
|
|
12
9
|
path: string;
|
|
@@ -19,8 +16,8 @@ export interface AsyncDatabaseOpener {
|
|
|
19
16
|
}
|
|
20
17
|
|
|
21
18
|
export interface AsyncDatabase {
|
|
22
|
-
execute: (query: string, params: any[]) => Promise<
|
|
23
|
-
executeRaw: (query: string, params: any[]) => Promise<
|
|
24
|
-
executeBatch: (query: string, params: any[][]) => Promise<
|
|
19
|
+
execute: (query: string, params: any[]) => Promise<MappedQueryResult>;
|
|
20
|
+
executeRaw: (query: string, params: any[]) => Promise<RawQueryResult>;
|
|
21
|
+
executeBatch: (query: string, params: any[][]) => Promise<QueryResult<never>>;
|
|
25
22
|
close: () => Promise<void>;
|
|
26
23
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Database } from 'better-sqlite3';
|
|
2
|
-
import { AsyncDatabase, AsyncDatabaseOpenOptions } from './AsyncDatabase.js';
|
|
2
|
+
import { AsyncDatabase, AsyncDatabaseOpenOptions, MappedQueryResult } from './AsyncDatabase.js';
|
|
3
3
|
import { PowerSyncWorkerOptions } from './SqliteWorker.js';
|
|
4
4
|
import { threadId } from 'node:worker_threads';
|
|
5
|
+
import { QueryResult, queryResultWithoutRows, RawQueryResult, SqliteValue } from '@powersync/common';
|
|
5
6
|
|
|
6
7
|
class BlockingAsyncDatabase implements AsyncDatabase {
|
|
7
8
|
private readonly db: Database;
|
|
@@ -16,16 +17,13 @@ class BlockingAsyncDatabase implements AsyncDatabase {
|
|
|
16
17
|
this.db.close();
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
async execute(query: string, params: any[]) {
|
|
20
|
+
async execute(query: string, params: any[]): Promise<MappedQueryResult> {
|
|
20
21
|
const stmt = this.db.prepare(query);
|
|
21
22
|
if (stmt.reader) {
|
|
22
23
|
const rows = stmt.all(params);
|
|
23
24
|
return {
|
|
24
25
|
rowsAffected: 0,
|
|
25
|
-
rows
|
|
26
|
-
_array: rows,
|
|
27
|
-
length: rows.length
|
|
28
|
-
}
|
|
26
|
+
rows
|
|
29
27
|
};
|
|
30
28
|
} else {
|
|
31
29
|
const info = stmt.run(params);
|
|
@@ -36,18 +34,28 @@ class BlockingAsyncDatabase implements AsyncDatabase {
|
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
|
|
39
|
-
async executeRaw(query: string, params: any[]) {
|
|
37
|
+
async executeRaw(query: string, params: any[]): Promise<RawQueryResult> {
|
|
40
38
|
const stmt = this.db.prepare(query);
|
|
41
|
-
|
|
42
39
|
if (stmt.reader) {
|
|
43
|
-
|
|
40
|
+
stmt.raw();
|
|
41
|
+
const rows = stmt.all(params);
|
|
42
|
+
return {
|
|
43
|
+
rowsAffected: 0,
|
|
44
|
+
columnNames: stmt.columns().map((c) => c.name),
|
|
45
|
+
rawRows: rows as SqliteValue[][]
|
|
46
|
+
};
|
|
44
47
|
} else {
|
|
45
|
-
stmt.
|
|
46
|
-
return
|
|
48
|
+
const info = stmt.run(params);
|
|
49
|
+
return {
|
|
50
|
+
rowsAffected: info.changes,
|
|
51
|
+
insertId: Number(info.lastInsertRowid),
|
|
52
|
+
rawRows: [],
|
|
53
|
+
columnNames: []
|
|
54
|
+
};
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
|
|
50
|
-
async executeBatch(query: string, params: any[][]) {
|
|
58
|
+
async executeBatch(query: string, params: any[][]): Promise<QueryResult<never>> {
|
|
51
59
|
params = params ?? [];
|
|
52
60
|
|
|
53
61
|
let rowsAffected = 0;
|
|
@@ -58,13 +66,13 @@ class BlockingAsyncDatabase implements AsyncDatabase {
|
|
|
58
66
|
rowsAffected += info.changes;
|
|
59
67
|
}
|
|
60
68
|
|
|
61
|
-
return { rowsAffected };
|
|
69
|
+
return queryResultWithoutRows({ rowsAffected });
|
|
62
70
|
}
|
|
63
71
|
}
|
|
64
72
|
|
|
65
73
|
export async function openDatabase(worker: PowerSyncWorkerOptions, options: AsyncDatabaseOpenOptions) {
|
|
66
74
|
const BetterSQLite3Database = await worker.loadBetterSqlite3();
|
|
67
|
-
const baseDB = new BetterSQLite3Database(options.path);
|
|
75
|
+
const baseDB = new BetterSQLite3Database(options.path, { readonly: !options.isWriter });
|
|
68
76
|
baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');
|
|
69
77
|
|
|
70
78
|
const asyncDb = new BlockingAsyncDatabase(baseDB);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { DatabaseSync } from 'node:sqlite';
|
|
2
2
|
import { threadId } from 'node:worker_threads';
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import { AsyncDatabase, AsyncDatabaseOpenOptions } from './AsyncDatabase.js';
|
|
4
|
+
import { AsyncDatabase, AsyncDatabaseOpenOptions, MappedQueryResult } from './AsyncDatabase.js';
|
|
6
5
|
import { PowerSyncWorkerOptions } from './SqliteWorker.js';
|
|
6
|
+
import { QueryResult, queryResultWithoutRows, RawQueryResult, SqliteValue } from '@powersync/common';
|
|
7
7
|
|
|
8
8
|
class BlockingNodeDatabase implements AsyncDatabase {
|
|
9
9
|
private readonly db: DatabaseSync;
|
|
@@ -18,25 +18,27 @@ class BlockingNodeDatabase implements AsyncDatabase {
|
|
|
18
18
|
this.db.close();
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
async execute(query: string, params: any[]) {
|
|
21
|
+
async execute(query: string, params: any[]): Promise<MappedQueryResult> {
|
|
22
22
|
const stmt = this.db.prepare(query);
|
|
23
23
|
const rows = stmt.all(...params);
|
|
24
24
|
return {
|
|
25
25
|
rowsAffected: 0,
|
|
26
|
-
rows
|
|
27
|
-
_array: rows,
|
|
28
|
-
length: rows.length
|
|
29
|
-
}
|
|
26
|
+
rows
|
|
30
27
|
};
|
|
31
28
|
}
|
|
32
29
|
|
|
33
|
-
async executeRaw(query: string, params: any[]) {
|
|
30
|
+
async executeRaw(query: string, params: any[]): Promise<RawQueryResult> {
|
|
34
31
|
const stmt = this.db.prepare(query);
|
|
35
32
|
(stmt as any).setReturnArrays(true); // Missing in @types/node, https://nodejs.org/api/sqlite.html#statementsetreturnarraysenabled
|
|
36
|
-
|
|
33
|
+
|
|
34
|
+
const rows = stmt.all(...params) as any as SqliteValue[][];
|
|
35
|
+
return {
|
|
36
|
+
rawRows: rows,
|
|
37
|
+
columnNames: stmt.columns().map((c) => c.name!)
|
|
38
|
+
};
|
|
37
39
|
}
|
|
38
40
|
|
|
39
|
-
async executeBatch(query: string, params: any[][]) {
|
|
41
|
+
async executeBatch(query: string, params: any[][]): Promise<QueryResult<never>> {
|
|
40
42
|
params = params ?? [];
|
|
41
43
|
|
|
42
44
|
let rowsAffected = 0;
|
|
@@ -47,16 +49,17 @@ class BlockingNodeDatabase implements AsyncDatabase {
|
|
|
47
49
|
rowsAffected += info.changes as number;
|
|
48
50
|
}
|
|
49
51
|
|
|
50
|
-
return { rowsAffected };
|
|
52
|
+
return queryResultWithoutRows({ rowsAffected });
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
export async function openDatabase(worker: PowerSyncWorkerOptions, options: AsyncDatabaseOpenOptions) {
|
|
55
57
|
// NOTE: We want to import node:sqlite dynamically, to avoid bundlers unconditionally requiring node:sqlite in the
|
|
56
58
|
// end, since that would make us incompatible with older Node.JS versions.
|
|
57
|
-
const { DatabaseSync } = await
|
|
59
|
+
const { DatabaseSync } = await import('node:sqlite');
|
|
58
60
|
|
|
59
|
-
const baseDB = new DatabaseSync(options.path, { allowExtension: true });
|
|
61
|
+
const baseDB = new DatabaseSync(options.path, { allowExtension: true, readOnly: !options.isWriter });
|
|
62
|
+
// @ts-expect-error (type definition is wrong)
|
|
60
63
|
baseDB.loadExtension(worker.extensionPath(), 'sqlite3_powersync_init');
|
|
61
64
|
|
|
62
65
|
return new BlockingNodeDatabase(baseDB, options.isWriter);
|