@powersync/web 0.0.0-dev-20260630141119 → 0.0.0-dev-20260708103617
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/bin/powersync.cjs +1 -1
- package/dist/index.umd.js +7821 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/worker/SharedSyncImplementation.umd.js +16139 -0
- package/dist/worker/SharedSyncImplementation.umd.js.map +1 -0
- package/dist/worker/WASQLiteDB.umd.js +17434 -0
- package/dist/worker/WASQLiteDB.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-9af0a7.umd.js +31 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-9af0a7.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-bbf5a9.umd.js +31 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-bbf5a9.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js +31 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js +31 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +3562 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js +1400 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +2478 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +1681 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +1820 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js.map +1 -0
- package/lib/package.json +91 -0
- package/lib/src/attachments/IndexDBFileSystemAdapter.js.map +1 -0
- package/lib/{db → src/db}/NavigatorTriggerClaimManager.d.ts +1 -1
- package/lib/src/db/NavigatorTriggerClaimManager.js.map +1 -0
- package/lib/src/db/PowerSyncDatabase.d.ts +78 -0
- package/lib/{db → src/db}/PowerSyncDatabase.js +61 -47
- package/lib/src/db/PowerSyncDatabase.js.map +1 -0
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +23 -0
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +27 -0
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js.map +1 -0
- package/lib/src/db/adapters/AsyncWebAdapter.d.ts +50 -0
- package/lib/{db → src/db}/adapters/AsyncWebAdapter.js +14 -14
- package/lib/src/db/adapters/AsyncWebAdapter.js.map +1 -0
- package/lib/src/db/adapters/SSRDBAdapter.d.ts +30 -0
- package/lib/src/db/adapters/SSRDBAdapter.js +69 -0
- package/lib/src/db/adapters/SSRDBAdapter.js.map +1 -0
- package/lib/{db → src/db}/adapters/WebDBAdapter.d.ts +1 -1
- package/lib/src/db/adapters/WebDBAdapter.js.map +1 -0
- package/lib/{db → src/db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +4 -3
- package/lib/{db → src/db}/adapters/wa-sqlite/ConcurrentConnection.js +2 -2
- package/lib/src/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
- package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
- package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseClient.js +37 -11
- package/lib/src/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
- package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
- package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseServer.js +7 -11
- package/lib/src/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
- package/lib/{db → src/db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +12 -23
- package/lib/{db → src/db}/adapters/wa-sqlite/RawSqliteConnection.js +11 -17
- package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +45 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +146 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +15 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +22 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js.map +1 -0
- package/lib/src/db/adapters/wa-sqlite/vfs.d.ts +40 -0
- package/lib/src/db/adapters/wa-sqlite/vfs.js +95 -0
- package/lib/src/db/adapters/wa-sqlite/vfs.js.map +1 -0
- package/lib/src/db/adapters/web-sql-flags.d.ts +92 -0
- package/lib/src/db/adapters/web-sql-flags.js +37 -0
- package/lib/src/db/adapters/web-sql-flags.js.map +1 -0
- package/lib/{db → src/db}/sync/SSRWebStreamingSyncImplementation.d.ts +8 -4
- package/lib/{db → src/db}/sync/SSRWebStreamingSyncImplementation.js +11 -4
- package/lib/src/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
- package/lib/{db → src/db}/sync/SharedWebStreamingSyncImplementation.d.ts +14 -13
- package/lib/{db → src/db}/sync/SharedWebStreamingSyncImplementation.js +66 -31
- package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
- package/lib/src/db/sync/WebRemote.d.ts +7 -0
- package/lib/src/db/sync/WebRemote.js +33 -0
- package/lib/src/db/sync/WebRemote.js.map +1 -0
- package/lib/{db → src/db}/sync/WebStreamingSyncImplementation.d.ts +4 -2
- package/lib/{db → src/db}/sync/WebStreamingSyncImplementation.js +2 -3
- package/lib/src/db/sync/WebStreamingSyncImplementation.js.map +1 -0
- package/lib/src/db/sync/userAgent.js.map +1 -0
- package/lib/{index.d.ts → src/index.d.ts} +3 -1
- package/lib/{index.js → src/index.js} +3 -1
- package/lib/src/index.js.map +1 -0
- package/lib/src/shared/navigator.js.map +1 -0
- package/lib/src/shared/tab_close_signal.js.map +1 -0
- package/lib/src/worker/db/MultiDatabaseServer.d.ts +17 -0
- package/lib/{worker → src/worker}/db/MultiDatabaseServer.js +18 -26
- package/lib/src/worker/db/MultiDatabaseServer.js.map +1 -0
- package/lib/src/worker/db/WASQLiteDB.worker.d.ts +4 -0
- package/lib/src/worker/db/WASQLiteDB.worker.js +31 -0
- package/lib/src/worker/db/WASQLiteDB.worker.js.map +1 -0
- package/lib/src/worker/db/open-worker-database.d.ts +14 -0
- package/lib/src/worker/db/open-worker-database.js +53 -0
- package/lib/src/worker/db/open-worker-database.js.map +1 -0
- package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +19 -0
- package/lib/src/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
- package/lib/src/worker/sync/BroadcastLogger.d.ts +47 -0
- package/lib/src/worker/sync/BroadcastLogger.js +129 -0
- package/lib/src/worker/sync/BroadcastLogger.js.map +1 -0
- package/lib/{worker → src/worker}/sync/SharedSyncImplementation.d.ts +15 -11
- package/lib/{worker → src/worker}/sync/SharedSyncImplementation.js +43 -42
- package/lib/src/worker/sync/SharedSyncImplementation.js.map +1 -0
- package/lib/src/worker/sync/SharedSyncImplementation.worker.js +12 -0
- package/lib/src/worker/sync/SharedSyncImplementation.worker.js.map +1 -0
- package/lib/{worker → src/worker}/sync/WorkerClient.d.ts +3 -3
- package/lib/{worker → src/worker}/sync/WorkerClient.js +2 -2
- package/lib/src/worker/sync/WorkerClient.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +29 -22
- package/src/db/NavigatorTriggerClaimManager.ts +1 -1
- package/src/db/PowerSyncDatabase.ts +122 -80
- package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +47 -0
- package/src/db/adapters/AsyncWebAdapter.ts +26 -17
- package/src/db/adapters/SSRDBAdapter.ts +64 -14
- package/src/db/adapters/WebDBAdapter.ts +1 -1
- package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +5 -4
- package/src/db/adapters/wa-sqlite/DatabaseClient.ts +56 -20
- package/src/db/adapters/wa-sqlite/DatabaseServer.ts +12 -15
- package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +24 -41
- package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +126 -63
- package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +24 -0
- package/src/db/adapters/wa-sqlite/vfs.ts +67 -54
- package/src/db/adapters/web-sql-flags.ts +141 -0
- package/src/db/sync/SSRWebStreamingSyncImplementation.ts +22 -4
- package/src/db/sync/SharedWebStreamingSyncImplementation.ts +77 -38
- package/src/db/sync/WebRemote.ts +26 -23
- package/src/db/sync/WebStreamingSyncImplementation.ts +5 -4
- package/src/index.ts +3 -1
- package/src/worker/db/MultiDatabaseServer.ts +25 -41
- package/src/worker/db/WASQLiteDB.worker.ts +35 -0
- package/src/worker/db/open-worker-database.ts +62 -0
- package/src/worker/sync/AbstractSharedSyncClientProvider.ts +10 -4
- package/src/worker/sync/BroadcastLogger.ts +103 -35
- package/src/worker/sync/SharedSyncImplementation.ts +63 -62
- package/src/worker/sync/SharedSyncImplementation.worker.ts +14 -0
- package/src/worker/sync/WorkerClient.ts +4 -4
- package/dist/index.react_native_web.js +0 -1879
- package/dist/index.react_native_web.js.map +0 -1
- package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js +0 -2
- package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js.map +0 -1
- package/dist/worker/FacadeVFS-d1ZDvud7.js +0 -2
- package/dist/worker/FacadeVFS-d1ZDvud7.js.map +0 -1
- package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js +0 -2
- package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js.map +0 -1
- package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js +0 -2
- package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js.map +0 -1
- package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js +0 -2
- package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js.map +0 -1
- package/dist/worker/mc-wa-sqlite-DiBqIVE5.js +0 -2
- package/dist/worker/mc-wa-sqlite-DiBqIVE5.js.map +0 -1
- package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js +0 -2
- package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js.map +0 -1
- package/dist/worker/wa-sqlite-BlSx7-_P.js +0 -2
- package/dist/worker/wa-sqlite-BlSx7-_P.js.map +0 -1
- package/dist/worker/wa-sqlite-async-BdR24Ucf.js +0 -2
- package/dist/worker/wa-sqlite-async-BdR24Ucf.js.map +0 -1
- package/dist/worker/websockets-Q8W_lerF.js +0 -9
- package/dist/worker/websockets-Q8W_lerF.js.map +0 -1
- package/dist/worker/worker.js +0 -7
- package/dist/worker/worker.js.map +0 -1
- package/lib/attachments/IndexDBFileSystemAdapter.js.map +0 -1
- package/lib/db/NavigatorTriggerClaimManager.js.map +0 -1
- package/lib/db/PowerSyncDatabase.d.ts +0 -67
- package/lib/db/PowerSyncDatabase.js.map +0 -1
- package/lib/db/adapters/AsyncWebAdapter.d.ts +0 -32
- package/lib/db/adapters/AsyncWebAdapter.js.map +0 -1
- package/lib/db/adapters/SSRDBAdapter.d.ts +0 -17
- package/lib/db/adapters/SSRDBAdapter.js +0 -37
- package/lib/db/adapters/SSRDBAdapter.js.map +0 -1
- package/lib/db/adapters/WebDBAdapter.js.map +0 -1
- package/lib/db/adapters/options.d.ts +0 -87
- package/lib/db/adapters/options.js +0 -6
- package/lib/db/adapters/options.js.map +0 -1
- package/lib/db/adapters/resolveAndValidateOptions.d.ts +0 -5
- package/lib/db/adapters/resolveAndValidateOptions.js +0 -33
- package/lib/db/adapters/resolveAndValidateOptions.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -18
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -131
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/vfs.d.ts +0 -50
- package/lib/db/adapters/wa-sqlite/vfs.js +0 -77
- package/lib/db/adapters/wa-sqlite/vfs.js.map +0 -1
- package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +0 -1
- package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +0 -1
- package/lib/db/sync/WebRemote.d.ts +0 -10
- package/lib/db/sync/WebRemote.js +0 -33
- package/lib/db/sync/WebRemote.js.map +0 -1
- package/lib/db/sync/WebStreamingSyncImplementation.js.map +0 -1
- package/lib/db/sync/userAgent.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/shared/navigator.js.map +0 -1
- package/lib/shared/tab_close_signal.js.map +0 -1
- package/lib/worker/SharedWorkerConnectionRequest.d.ts +0 -5
- package/lib/worker/SharedWorkerConnectionRequest.js +0 -2
- package/lib/worker/SharedWorkerConnectionRequest.js.map +0 -1
- package/lib/worker/client.d.ts +0 -15
- package/lib/worker/client.js +0 -77
- package/lib/worker/client.js.map +0 -1
- package/lib/worker/db/MultiDatabaseServer.d.ts +0 -22
- package/lib/worker/db/MultiDatabaseServer.js.map +0 -1
- package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -13
- package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +0 -1
- package/lib/worker/sync/BroadcastLogger.d.ts +0 -27
- package/lib/worker/sync/BroadcastLogger.js +0 -65
- package/lib/worker/sync/BroadcastLogger.js.map +0 -1
- package/lib/worker/sync/SharedSyncImplementation.js.map +0 -1
- package/lib/worker/sync/WorkerClient.js.map +0 -1
- package/lib/worker/worker.js +0 -34
- package/lib/worker/worker.js.map +0 -1
- package/src/db/adapters/options.ts +0 -100
- package/src/db/adapters/resolveAndValidateOptions.ts +0 -40
- package/src/worker/SharedWorkerConnectionRequest.ts +0 -6
- package/src/worker/client.ts +0 -100
- package/src/worker/worker.ts +0 -38
- /package/dist/{worker/assets/mc-wa-sqlite-async-D6idQS2r.wasm → 2075a31bb151adbb9767.wasm} +0 -0
- /package/dist/{worker/assets/wa-sqlite-XZW__iJk.wasm → 3322bc84de986b63c2cd.wasm} +0 -0
- /package/dist/{worker/assets/mc-wa-sqlite-CnHbhWvs.wasm → 8e97452e297be23b5e50.wasm} +0 -0
- /package/dist/{worker/assets/wa-sqlite-async-rHzzC98y.wasm → fbc178b70d530e8ce02b.wasm} +0 -0
- /package/lib/{attachments → src/attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
- /package/lib/{attachments → src/attachments}/IndexDBFileSystemAdapter.js +0 -0
- /package/lib/{db → src/db}/NavigatorTriggerClaimManager.js +0 -0
- /package/lib/{db → src/db}/adapters/WebDBAdapter.js +0 -0
- /package/lib/{db → src/db}/sync/userAgent.d.ts +0 -0
- /package/lib/{db → src/db}/sync/userAgent.js +0 -0
- /package/lib/{shared → src/shared}/navigator.d.ts +0 -0
- /package/lib/{shared → src/shared}/navigator.js +0 -0
- /package/lib/{shared → src/shared}/tab_close_signal.d.ts +0 -0
- /package/lib/{shared → src/shared}/tab_close_signal.js +0 -0
- /package/lib/{worker → src/worker}/sync/AbstractSharedSyncClientProvider.js +0 -0
- /package/lib/{worker/worker.d.ts → src/worker/sync/SharedSyncImplementation.worker.d.ts} +0 -0
|
@@ -1,31 +1,34 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PowerSyncConnectionOptions, PowerSyncCredentials, SubscribedStream, SyncStatusOptions } from '@powersync/common';
|
|
2
2
|
import * as Comlink from 'comlink';
|
|
3
3
|
import { AbstractSharedSyncClientProvider } from '../../worker/sync/AbstractSharedSyncClientProvider.js';
|
|
4
4
|
import { WorkerClient } from '../../worker/sync/WorkerClient.js';
|
|
5
5
|
import { WebDBAdapter } from '../adapters/WebDBAdapter.js';
|
|
6
6
|
import { WebStreamingSyncImplementation, WebStreamingSyncImplementationOptions } from './WebStreamingSyncImplementation.js';
|
|
7
|
-
import { SubscribedStream, SyncStatusJson, ResolvedSyncOptions } from '@powersync/shared-internals';
|
|
8
|
-
import { WorkerConnection } from '../../worker/client.js';
|
|
9
7
|
/**
|
|
10
8
|
* The shared worker will trigger methods on this side of the message port
|
|
11
9
|
* via this client provider.
|
|
12
10
|
*/
|
|
13
11
|
declare class SharedSyncClientProvider extends AbstractSharedSyncClientProvider {
|
|
14
12
|
protected options: WebStreamingSyncImplementationOptions;
|
|
15
|
-
statusChanged: (status:
|
|
13
|
+
statusChanged: (status: SyncStatusOptions) => void;
|
|
16
14
|
protected webDB: WebDBAdapter;
|
|
17
|
-
constructor(options: WebStreamingSyncImplementationOptions, statusChanged: (status:
|
|
15
|
+
constructor(options: WebStreamingSyncImplementationOptions, statusChanged: (status: SyncStatusOptions) => void, webDB: WebDBAdapter);
|
|
18
16
|
getDBWorkerPort(): Promise<MessagePort>;
|
|
19
17
|
invalidateCredentials(): void;
|
|
20
18
|
fetchCredentials(): Promise<PowerSyncCredentials | null>;
|
|
21
19
|
uploadCrud(): Promise<void>;
|
|
22
|
-
get logger(): import("@powersync/common").
|
|
23
|
-
|
|
20
|
+
get logger(): import("@powersync/common").ILogger | undefined;
|
|
21
|
+
trace(...x: any[]): void;
|
|
22
|
+
debug(...x: any[]): void;
|
|
23
|
+
info(...x: any[]): void;
|
|
24
|
+
log(...x: any[]): void;
|
|
25
|
+
warn(...x: any[]): void;
|
|
26
|
+
error(...x: any[]): void;
|
|
27
|
+
time(label: string): void;
|
|
28
|
+
timeEnd(label: string): void;
|
|
24
29
|
}
|
|
25
30
|
export interface SharedWebStreamingSyncImplementationOptions extends WebStreamingSyncImplementationOptions {
|
|
26
|
-
logLevel: number;
|
|
27
31
|
db: WebDBAdapter;
|
|
28
|
-
enableBroadcastLogs: boolean;
|
|
29
32
|
}
|
|
30
33
|
/**
|
|
31
34
|
* The local part of the sync implementation on the web, which talks to a sync implementation hosted in a shared worker.
|
|
@@ -33,19 +36,17 @@ export interface SharedWebStreamingSyncImplementationOptions extends WebStreamin
|
|
|
33
36
|
export declare class SharedWebStreamingSyncImplementation extends WebStreamingSyncImplementation {
|
|
34
37
|
protected syncManager: Comlink.Remote<WorkerClient>;
|
|
35
38
|
protected clientProvider: SharedSyncClientProvider;
|
|
36
|
-
protected
|
|
39
|
+
protected messagePort: MessagePort;
|
|
37
40
|
protected isInitialized: Promise<void>;
|
|
38
41
|
protected dbAdapter: WebDBAdapter;
|
|
39
42
|
private abortOnClose;
|
|
40
|
-
private logLevel;
|
|
41
|
-
private enableBroadcastLogs;
|
|
42
43
|
constructor(options: SharedWebStreamingSyncImplementationOptions);
|
|
43
44
|
protected _init(): Promise<void>;
|
|
44
45
|
/**
|
|
45
46
|
* Starts the sync process, this effectively acts as a call to
|
|
46
47
|
* `connect` if not yet connected.
|
|
47
48
|
*/
|
|
48
|
-
connect(options
|
|
49
|
+
connect(options?: PowerSyncConnectionOptions): Promise<void>;
|
|
49
50
|
disconnect(): Promise<void>;
|
|
50
51
|
getWriteCheckpoint(): Promise<string>;
|
|
51
52
|
dispose(): Promise<void>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as Comlink from 'comlink';
|
|
2
2
|
import { AbstractSharedSyncClientProvider } from '../../worker/sync/AbstractSharedSyncClientProvider.js';
|
|
3
3
|
import { SharedSyncClientEvent } from '../../worker/sync/SharedSyncImplementation.js';
|
|
4
|
+
import { DEFAULT_CACHE_SIZE_KB, TemporaryStorageOption, resolveWebSQLFlags } from '../adapters/web-sql-flags.js';
|
|
4
5
|
import { WebStreamingSyncImplementation } from './WebStreamingSyncImplementation.js';
|
|
5
6
|
import { generateTabCloseSignal } from '../../shared/tab_close_signal.js';
|
|
6
|
-
import { connectToExistingWorker, connectToWorker } from '../../worker/client.js';
|
|
7
7
|
/**
|
|
8
8
|
* The shared worker will trigger methods on this side of the message port
|
|
9
9
|
* via this client provider.
|
|
@@ -51,8 +51,29 @@ class SharedSyncClientProvider extends AbstractSharedSyncClientProvider {
|
|
|
51
51
|
get logger() {
|
|
52
52
|
return this.options.logger;
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
this.logger
|
|
54
|
+
trace(...x) {
|
|
55
|
+
this.logger?.trace(...x);
|
|
56
|
+
}
|
|
57
|
+
debug(...x) {
|
|
58
|
+
this.logger?.debug(...x);
|
|
59
|
+
}
|
|
60
|
+
info(...x) {
|
|
61
|
+
this.logger?.info(...x);
|
|
62
|
+
}
|
|
63
|
+
log(...x) {
|
|
64
|
+
this.logger?.log(...x);
|
|
65
|
+
}
|
|
66
|
+
warn(...x) {
|
|
67
|
+
this.logger?.warn(...x);
|
|
68
|
+
}
|
|
69
|
+
error(...x) {
|
|
70
|
+
this.logger?.error(...x);
|
|
71
|
+
}
|
|
72
|
+
time(label) {
|
|
73
|
+
this.logger?.time(label);
|
|
74
|
+
}
|
|
75
|
+
timeEnd(label) {
|
|
76
|
+
this.logger?.timeEnd(label);
|
|
56
77
|
}
|
|
57
78
|
}
|
|
58
79
|
/**
|
|
@@ -61,43 +82,57 @@ class SharedSyncClientProvider extends AbstractSharedSyncClientProvider {
|
|
|
61
82
|
export class SharedWebStreamingSyncImplementation extends WebStreamingSyncImplementation {
|
|
62
83
|
syncManager;
|
|
63
84
|
clientProvider;
|
|
64
|
-
|
|
85
|
+
messagePort;
|
|
65
86
|
isInitialized;
|
|
66
87
|
dbAdapter;
|
|
67
88
|
abortOnClose = new AbortController();
|
|
68
|
-
logLevel;
|
|
69
|
-
enableBroadcastLogs;
|
|
70
89
|
constructor(options) {
|
|
71
90
|
super(options);
|
|
72
91
|
this.dbAdapter = options.db;
|
|
73
|
-
|
|
74
|
-
|
|
92
|
+
/**
|
|
93
|
+
* Configure or connect to the shared sync worker.
|
|
94
|
+
* This worker will manage all syncing operations remotely.
|
|
95
|
+
*/
|
|
96
|
+
const resolvedWorkerOptions = {
|
|
97
|
+
dbFilename: this.options.identifier,
|
|
98
|
+
temporaryStorage: TemporaryStorageOption.MEMORY,
|
|
99
|
+
cacheSizeKb: DEFAULT_CACHE_SIZE_KB,
|
|
100
|
+
...options,
|
|
101
|
+
flags: resolveWebSQLFlags(options.flags)
|
|
102
|
+
};
|
|
75
103
|
const syncWorker = options.sync?.worker;
|
|
76
|
-
if (
|
|
77
|
-
|
|
104
|
+
if (syncWorker) {
|
|
105
|
+
if (typeof syncWorker === 'function') {
|
|
106
|
+
this.messagePort = syncWorker(resolvedWorkerOptions).port;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.messagePort = new SharedWorker(`${syncWorker}`, {
|
|
110
|
+
/* @vite-ignore */
|
|
111
|
+
name: `shared-sync-${this.webOptions.identifier}`
|
|
112
|
+
}).port;
|
|
113
|
+
}
|
|
78
114
|
}
|
|
79
115
|
else {
|
|
80
|
-
this.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
});
|
|
116
|
+
this.messagePort = new SharedWorker(new URL('../../worker/sync/SharedSyncImplementation.worker.js', import.meta.url), {
|
|
117
|
+
/* @vite-ignore */
|
|
118
|
+
name: `shared-sync-${this.webOptions.identifier}`,
|
|
119
|
+
type: 'module'
|
|
120
|
+
}).port;
|
|
86
121
|
}
|
|
87
122
|
/**
|
|
88
123
|
* Pass along any sync status updates to this listener
|
|
89
124
|
*/
|
|
90
|
-
this.clientProvider = new SharedSyncClientProvider(this.webOptions, (
|
|
91
|
-
this.updateSyncStatus(
|
|
125
|
+
this.clientProvider = new SharedSyncClientProvider(this.webOptions, (status) => {
|
|
126
|
+
this.updateSyncStatus(status);
|
|
92
127
|
}, options.db);
|
|
93
|
-
this.syncManager = Comlink.wrap(this.
|
|
128
|
+
this.syncManager = Comlink.wrap(this.messagePort);
|
|
94
129
|
/**
|
|
95
130
|
* The sync worker will call this client provider when it needs
|
|
96
131
|
* to fetch credentials or upload data.
|
|
97
132
|
* This performs bi-directional method calling.
|
|
98
133
|
*/
|
|
99
|
-
Comlink.expose(this.clientProvider, this.
|
|
100
|
-
this.syncManager.setLogLevel(this.
|
|
134
|
+
Comlink.expose(this.clientProvider, this.messagePort);
|
|
135
|
+
this.syncManager.setLogLevel(this.logger.getLevel());
|
|
101
136
|
this.triggerCrudUpload = this.syncManager.triggerCrudUpload;
|
|
102
137
|
/**
|
|
103
138
|
* Opens MessagePort to the existing shared DB worker.
|
|
@@ -124,14 +159,16 @@ export class SharedWebStreamingSyncImplementation extends WebStreamingSyncImplem
|
|
|
124
159
|
const closeSignal = await generateTabCloseSignal(this.abortOnClose.signal);
|
|
125
160
|
// Awaiting here ensures the worker is waiting for the lock
|
|
126
161
|
await this.syncManager.addLockBasedCloseSignal(closeSignal);
|
|
127
|
-
const { identifier } = this.options;
|
|
162
|
+
const { crudUploadThrottleMs, identifier, retryDelayMs } = this.options;
|
|
163
|
+
const flags = { ...this.webOptions.flags, workers: undefined };
|
|
128
164
|
await this.syncManager.setParams({
|
|
129
165
|
dbParams: this.dbAdapter.getConfiguration(),
|
|
130
166
|
streamOptions: {
|
|
167
|
+
crudUploadThrottleMs,
|
|
131
168
|
identifier,
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
169
|
+
retryDelayMs,
|
|
170
|
+
flags: flags
|
|
171
|
+
}
|
|
135
172
|
}, this.options.subscriptions);
|
|
136
173
|
}
|
|
137
174
|
/**
|
|
@@ -140,7 +177,7 @@ export class SharedWebStreamingSyncImplementation extends WebStreamingSyncImplem
|
|
|
140
177
|
*/
|
|
141
178
|
async connect(options) {
|
|
142
179
|
await this.waitForReady();
|
|
143
|
-
return this.syncManager.connect(options
|
|
180
|
+
return this.syncManager.connect(options);
|
|
144
181
|
}
|
|
145
182
|
async disconnect() {
|
|
146
183
|
await this.waitForReady();
|
|
@@ -153,10 +190,8 @@ export class SharedWebStreamingSyncImplementation extends WebStreamingSyncImplem
|
|
|
153
190
|
async dispose() {
|
|
154
191
|
await this.waitForReady();
|
|
155
192
|
await new Promise((resolve) => {
|
|
156
|
-
// This will always be a message port since we use shared workers.
|
|
157
|
-
const messagePort = this.worker.endpoint;
|
|
158
193
|
// Listen for the close acknowledgment from the worker
|
|
159
|
-
messagePort.addEventListener('message', (event) => {
|
|
194
|
+
this.messagePort.addEventListener('message', (event) => {
|
|
160
195
|
const payload = event.data;
|
|
161
196
|
if (payload?.event === SharedSyncClientEvent.CLOSE_ACK) {
|
|
162
197
|
resolve();
|
|
@@ -167,13 +202,13 @@ export class SharedWebStreamingSyncImplementation extends WebStreamingSyncImplem
|
|
|
167
202
|
event: SharedSyncClientEvent.CLOSE_CLIENT,
|
|
168
203
|
data: {}
|
|
169
204
|
};
|
|
170
|
-
messagePort.postMessage(closeMessagePayload);
|
|
205
|
+
this.messagePort.postMessage(closeMessagePayload);
|
|
171
206
|
});
|
|
172
207
|
await super.dispose();
|
|
173
208
|
this.abortOnClose.abort();
|
|
174
209
|
// Release the proxy
|
|
175
210
|
this.syncManager[Comlink.releaseProxy]();
|
|
176
|
-
this.
|
|
211
|
+
this.messagePort.close();
|
|
177
212
|
}
|
|
178
213
|
async waitForReady() {
|
|
179
214
|
return this.isInitialized;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SharedWebStreamingSyncImplementation.js","sourceRoot":"","sources":["../../../../src/db/sync/SharedWebStreamingSyncImplementation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AbstractRemote, AbstractRemoteOptions, ILogger, RemoteConnector } from '@powersync/common';
|
|
2
|
+
export declare class WebRemote extends AbstractRemote {
|
|
3
|
+
protected connector: RemoteConnector;
|
|
4
|
+
protected logger: ILogger;
|
|
5
|
+
constructor(connector: RemoteConnector, logger?: ILogger, options?: Partial<AbstractRemoteOptions>);
|
|
6
|
+
getUserAgent(): string;
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AbstractRemote, DEFAULT_REMOTE_LOGGER, FetchImplementationProvider } from '@powersync/common';
|
|
2
|
+
import { getUserAgentInfo } from './userAgent.js';
|
|
3
|
+
/*
|
|
4
|
+
* Depends on browser's implementation of global fetch.
|
|
5
|
+
*/
|
|
6
|
+
class WebFetchProvider extends FetchImplementationProvider {
|
|
7
|
+
getFetch() {
|
|
8
|
+
return fetch.bind(globalThis);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class WebRemote extends AbstractRemote {
|
|
12
|
+
connector;
|
|
13
|
+
logger;
|
|
14
|
+
constructor(connector, logger = DEFAULT_REMOTE_LOGGER, options) {
|
|
15
|
+
super(connector, logger, {
|
|
16
|
+
...(options ?? {}),
|
|
17
|
+
fetchImplementation: options?.fetchImplementation ?? new WebFetchProvider()
|
|
18
|
+
});
|
|
19
|
+
this.connector = connector;
|
|
20
|
+
this.logger = logger;
|
|
21
|
+
}
|
|
22
|
+
getUserAgent() {
|
|
23
|
+
let ua = [super.getUserAgent(), `powersync-web`];
|
|
24
|
+
try {
|
|
25
|
+
ua.push(...getUserAgentInfo());
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
this.logger.warn('Failed to get user agent info', e);
|
|
29
|
+
}
|
|
30
|
+
return ua.join(' ');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=WebRemote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebRemote.js","sourceRoot":"","sources":["../../../../src/db/sync/WebRemote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAEd,qBAAqB,EAErB,2BAA2B,EAG5B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD;;GAEG;AACH,MAAM,gBAAiB,SAAQ,2BAA2B;IACxD,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,cAAc;IAE/B;IACA;IAFZ,YACY,SAA0B,EAC1B,SAAkB,qBAAqB,EACjD,OAAwC;QAExC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;YACvB,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAClB,mBAAmB,EAAE,OAAO,EAAE,mBAAmB,IAAI,IAAI,gBAAgB,EAAE;SAC5E,CAAC,CAAC;QAPO,cAAS,GAAT,SAAS,CAAiB;QAC1B,WAAM,GAAN,MAAM,CAAiC;IAOnD,CAAC;IAED,YAAY;QACV,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,eAAe,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { AbstractStreamingSyncImplementation, AbstractStreamingSyncImplementationOptions, LockOptions } from '@powersync/
|
|
1
|
+
import { AbstractStreamingSyncImplementation, AbstractStreamingSyncImplementationOptions, LockOptions } from '@powersync/common';
|
|
2
|
+
import { ResolvedWebSQLOpenOptions, WebSQLFlags } from '../adapters/web-sql-flags.js';
|
|
2
3
|
export interface WebStreamingSyncImplementationOptions extends AbstractStreamingSyncImplementationOptions {
|
|
4
|
+
flags?: WebSQLFlags;
|
|
3
5
|
sync?: {
|
|
4
|
-
worker?: string | URL | (() => SharedWorker);
|
|
6
|
+
worker?: string | URL | ((options: ResolvedWebSQLOpenOptions) => SharedWorker);
|
|
5
7
|
};
|
|
6
8
|
}
|
|
7
9
|
export declare class WebStreamingSyncImplementation extends AbstractStreamingSyncImplementation {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AbstractStreamingSyncImplementation, LockType } from '@powersync/shared-internals';
|
|
1
|
+
import { AbstractStreamingSyncImplementation, LockType } from '@powersync/common';
|
|
3
2
|
import { getNavigatorLocks } from '../../shared/navigator.js';
|
|
4
3
|
export class WebStreamingSyncImplementation extends AbstractStreamingSyncImplementation {
|
|
5
4
|
constructor(options) {
|
|
@@ -12,7 +11,7 @@ export class WebStreamingSyncImplementation extends AbstractStreamingSyncImpleme
|
|
|
12
11
|
async obtainLock(lockOptions) {
|
|
13
12
|
const identifier = `streaming-sync-${lockOptions.type}-${this.webOptions.identifier}`;
|
|
14
13
|
if (lockOptions.type == LockType.SYNC) {
|
|
15
|
-
this.logger.
|
|
14
|
+
this.logger.debug('requesting lock for ', identifier);
|
|
16
15
|
}
|
|
17
16
|
return getNavigatorLocks().request(identifier, { signal: lockOptions.signal }, lockOptions.callback);
|
|
18
17
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebStreamingSyncImplementation.js","sourceRoot":"","sources":["../../../../src/db/sync/WebStreamingSyncImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mCAAmC,EAGnC,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAU9D,MAAM,OAAO,8BAA+B,SAAQ,mCAAmC;IACrF,YAAY,OAA8C;QACxD,0DAA0D;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAgD,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,UAAU,CAAI,WAA2B;QAC7C,MAAM,UAAU,GAAG,kBAAkB,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QACtF,IAAI,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,iBAAiB,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvG,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userAgent.js","sourceRoot":"","sources":["../../../../src/db/sync/userAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export * from '@powersync/common';
|
|
2
2
|
export * from './attachments/IndexDBFileSystemAdapter.js';
|
|
3
|
+
export * from './db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js';
|
|
3
4
|
export { WASQLiteVFS } from './db/adapters/wa-sqlite/vfs.js';
|
|
4
5
|
export * from './db/adapters/wa-sqlite/WASQLiteOpenFactory.js';
|
|
5
|
-
export * from './db/adapters/
|
|
6
|
+
export * from './db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js';
|
|
7
|
+
export * from './db/adapters/web-sql-flags.js';
|
|
6
8
|
export * from './db/PowerSyncDatabase.js';
|
|
7
9
|
export * from './db/sync/SharedWebStreamingSyncImplementation.js';
|
|
8
10
|
export * from './db/sync/WebRemote.js';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export * from '@powersync/common';
|
|
2
2
|
export * from './attachments/IndexDBFileSystemAdapter.js';
|
|
3
|
+
export * from './db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js';
|
|
3
4
|
export { WASQLiteVFS } from './db/adapters/wa-sqlite/vfs.js';
|
|
4
5
|
export * from './db/adapters/wa-sqlite/WASQLiteOpenFactory.js';
|
|
5
|
-
export * from './db/adapters/
|
|
6
|
+
export * from './db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js';
|
|
7
|
+
export * from './db/adapters/web-sql-flags.js';
|
|
6
8
|
export * from './db/PowerSyncDatabase.js';
|
|
7
9
|
export * from './db/sync/SharedWebStreamingSyncImplementation.js';
|
|
8
10
|
export * from './db/sync/WebRemote.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,2CAA2C,CAAC;AAC1D,cAAc,0DAA0D,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,iEAAiE,CAAC;AAChF,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mDAAmD,CAAC;AAClE,cAAc,wBAAwB,CAAC;AACvC,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigator.js","sourceRoot":"","sources":["../../../src/shared/navigator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAgB,EAAE;IACjD,IAAI,OAAO,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tab_close_signal.js","sourceRoot":"","sources":["../../../src/shared/tab_close_signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAmB;IACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAgB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAC/C,iBAAiB,EAAE;aAChB,OAAO,CAAC,oBAAoB,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACpE,OAAO,CAAC,IAAK,CAAC,IAAI,CAAC,CAAC;YAEpB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACnC,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ILogger } from '@powersync/common';
|
|
2
|
+
import { ClientConnectionView } from '../../db/adapters/wa-sqlite/DatabaseServer.js';
|
|
3
|
+
import { ResolvedWASQLiteOpenFactoryOptions, WorkerDBOpenerOptions } from '../../db/adapters/wa-sqlite/WASQLiteOpenFactory.js';
|
|
4
|
+
/**
|
|
5
|
+
* Shared state to manage multiple database connections hosted by a worker.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MultiDatabaseServer {
|
|
8
|
+
readonly logger: ILogger;
|
|
9
|
+
private activeDatabases;
|
|
10
|
+
constructor(logger: ILogger);
|
|
11
|
+
handleConnection(options: WorkerDBOpenerOptions): Promise<ClientConnectionView>;
|
|
12
|
+
connectToExisting(name: string, lockName: string): Promise<ClientConnectionView>;
|
|
13
|
+
openConnectionLocally(options: ResolvedWASQLiteOpenFactoryOptions, lockName?: string): Promise<ClientConnectionView>;
|
|
14
|
+
private databaseOpenAttempt;
|
|
15
|
+
closeAll(): Promise<void[]>;
|
|
16
|
+
}
|
|
17
|
+
export declare const isSharedWorker: boolean;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { LogLevels } from '@powersync/common';
|
|
2
1
|
import * as Comlink from 'comlink';
|
|
3
2
|
import { DatabaseServer } from '../../db/adapters/wa-sqlite/DatabaseServer.js';
|
|
4
3
|
import { getNavigatorLocks } from '../../shared/navigator.js';
|
|
5
4
|
import { RawSqliteConnection } from '../../db/adapters/wa-sqlite/RawSqliteConnection.js';
|
|
6
5
|
import { ConcurrentSqliteConnection } from '../../db/adapters/wa-sqlite/ConcurrentConnection.js';
|
|
6
|
+
import { WASQLiteVFS } from '../../db/adapters/wa-sqlite/vfs.js';
|
|
7
7
|
const OPEN_DB_LOCK = 'open-wasqlite-db';
|
|
8
8
|
/**
|
|
9
9
|
* Shared state to manage multiple database connections hosted by a worker.
|
|
@@ -14,14 +14,9 @@ export class MultiDatabaseServer {
|
|
|
14
14
|
constructor(logger) {
|
|
15
15
|
this.logger = logger;
|
|
16
16
|
}
|
|
17
|
-
async handleConnection(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (record.level >= logLevel)
|
|
21
|
-
this.logger.log(record);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
return Comlink.proxy(await this.openConnectionLocally(logger, database, lockName));
|
|
17
|
+
async handleConnection(options) {
|
|
18
|
+
this.logger.setLevel(options.logLevel);
|
|
19
|
+
return Comlink.proxy(await this.openConnectionLocally(options, options.lockName));
|
|
25
20
|
}
|
|
26
21
|
async connectToExisting(name, lockName) {
|
|
27
22
|
return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
|
|
@@ -32,37 +27,34 @@ export class MultiDatabaseServer {
|
|
|
32
27
|
return Comlink.proxy(await server.connect(lockName));
|
|
33
28
|
});
|
|
34
29
|
}
|
|
35
|
-
async openConnectionLocally(
|
|
30
|
+
async openConnectionLocally(options, lockName) {
|
|
36
31
|
// Especially on Firefox, we're sometimes seeing "NoModificationAllowedError"s when opening OPFS databases we can
|
|
37
32
|
// work around by retrying.
|
|
38
33
|
const maxAttempts = 3;
|
|
39
34
|
let server;
|
|
40
35
|
for (let count = 0; count < maxAttempts - 1; count++) {
|
|
41
36
|
try {
|
|
42
|
-
server = await this.databaseOpenAttempt(
|
|
37
|
+
server = await this.databaseOpenAttempt(options);
|
|
43
38
|
}
|
|
44
|
-
catch (
|
|
45
|
-
this.logger.
|
|
46
|
-
level: LogLevels.warn,
|
|
47
|
-
message: `Attempt ${count + 1} of ${maxAttempts} to open database failed, retrying in 1 second...`,
|
|
48
|
-
error
|
|
49
|
-
});
|
|
39
|
+
catch (ex) {
|
|
40
|
+
this.logger.warn(`Attempt ${count + 1} of ${maxAttempts} to open database failed, retrying in 1 second...`, ex);
|
|
50
41
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
51
42
|
}
|
|
52
43
|
}
|
|
53
44
|
// Final attempt if we haven't been able to open the server - rethrow errors if we still can't open.
|
|
54
|
-
server ??= await this.databaseOpenAttempt(
|
|
45
|
+
server ??= await this.databaseOpenAttempt(options);
|
|
55
46
|
return server.connect(lockName);
|
|
56
47
|
}
|
|
57
|
-
async databaseOpenAttempt(
|
|
48
|
+
async databaseOpenAttempt(options) {
|
|
58
49
|
return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
|
|
59
|
-
const {
|
|
60
|
-
let server = this.activeDatabases.get(
|
|
50
|
+
const { dbFilename, isReadOnly, vfs } = options;
|
|
51
|
+
let server = this.activeDatabases.get(dbFilename);
|
|
61
52
|
if (server == null) {
|
|
62
53
|
// We don't need navigator locks for shared workers because all queries run in this shared worker exclusively.
|
|
63
54
|
// For read-only connections, we use a VFS that supports concurrent reads (so a single lock on the connection is
|
|
64
|
-
// fine).
|
|
65
|
-
|
|
55
|
+
// fine). In-memory databases either run in a shared worker or aren't shared across tabs at all, so the internal
|
|
56
|
+
// lock is enough.
|
|
57
|
+
const needsNavigatorLocks = !(isSharedWorker || isReadOnly || vfs == WASQLiteVFS.InMemoryVfs);
|
|
66
58
|
const connection = new RawSqliteConnection(options);
|
|
67
59
|
const withSafeConcurrency = new ConcurrentSqliteConnection(connection, needsNavigatorLocks);
|
|
68
60
|
// Initializing the RawSqliteConnection will run some pragmas that might write to the database file, so we want
|
|
@@ -78,13 +70,13 @@ export class MultiDatabaseServer {
|
|
|
78
70
|
throw e;
|
|
79
71
|
}
|
|
80
72
|
returnLease();
|
|
81
|
-
const onClose = () => this.activeDatabases.delete(
|
|
73
|
+
const onClose = () => this.activeDatabases.delete(dbFilename);
|
|
82
74
|
server = new DatabaseServer({
|
|
83
75
|
inner: withSafeConcurrency,
|
|
84
|
-
logger,
|
|
76
|
+
logger: this.logger,
|
|
85
77
|
onClose
|
|
86
78
|
});
|
|
87
|
-
this.activeDatabases.set(
|
|
79
|
+
this.activeDatabases.set(dbFilename, server);
|
|
88
80
|
}
|
|
89
81
|
return server;
|
|
90
82
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiDatabaseServer.js","sourceRoot":"","sources":["../../../../src/worker/db/MultiDatabaseServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supports both shared and dedicated workers, based on how the worker is constructed (new SharedWorker vs new Worker()).
|
|
3
|
+
*/
|
|
4
|
+
import '@journeyapps/wa-sqlite';
|
|
5
|
+
import { createBaseLogger, createLogger } from '@powersync/common';
|
|
6
|
+
import * as Comlink from 'comlink';
|
|
7
|
+
import { isSharedWorker, MultiDatabaseServer } from './MultiDatabaseServer.js';
|
|
8
|
+
const baseLogger = createBaseLogger();
|
|
9
|
+
baseLogger.useDefaults();
|
|
10
|
+
const logger = createLogger('db-worker');
|
|
11
|
+
const server = new MultiDatabaseServer(logger);
|
|
12
|
+
const exposedFunctions = {
|
|
13
|
+
connect: (config) => server.handleConnection(config),
|
|
14
|
+
connectToExisting: ({ identifier, lockName }) => server.connectToExisting(identifier, lockName)
|
|
15
|
+
};
|
|
16
|
+
// Check if we're in a SharedWorker context
|
|
17
|
+
if (isSharedWorker) {
|
|
18
|
+
const _self = self;
|
|
19
|
+
_self.onconnect = function (event) {
|
|
20
|
+
const port = event.ports[0];
|
|
21
|
+
Comlink.expose(exposedFunctions, port);
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// A dedicated worker can be shared externally
|
|
26
|
+
Comlink.expose(exposedFunctions);
|
|
27
|
+
}
|
|
28
|
+
addEventListener('unload', () => {
|
|
29
|
+
server.closeAll();
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=WASQLiteDB.worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WASQLiteDB.worker.js","sourceRoot":"","sources":["../../../../src/worker/db/WASQLiteDB.worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/E,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;AACtC,UAAU,CAAC,WAAW,EAAE,CAAC;AACzB,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAEzC,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,gBAAgB,GAAyB;IAC7C,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACpD,iBAAiB,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC;CAChG,CAAC;AAEF,2CAA2C;AAC3C,IAAI,cAAc,EAAE,CAAC;IACnB,MAAM,KAAK,GAA4B,IAAW,CAAC;IACnD,KAAK,CAAC,SAAS,GAAG,UAAU,KAA2B;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC;KAAM,CAAC;IACN,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACnC,CAAC;AAED,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC9B,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as Comlink from 'comlink';
|
|
2
|
+
import { WASQLiteVFS } from '../../db/adapters/wa-sqlite/vfs.js';
|
|
3
|
+
import { OpenWorkerConnection } from '../../db/adapters/wa-sqlite/DatabaseClient.js';
|
|
4
|
+
/**
|
|
5
|
+
* Opens a shared or dedicated worker which exposes opening of database connections
|
|
6
|
+
*/
|
|
7
|
+
export declare function openWorkerDatabasePort(workerIdentifier: string, multipleTabs?: boolean, worker?: string | URL, vfs?: WASQLiteVFS): Worker | MessagePort;
|
|
8
|
+
/**
|
|
9
|
+
* @returns A function which allows for opening database connections inside
|
|
10
|
+
* a worker.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getWorkerDatabaseOpener(workerIdentifier: string, multipleTabs?: boolean, worker?: string | URL): Comlink.Remote<OpenWorkerConnection>;
|
|
13
|
+
export declare function resolveWorkerDatabasePortFactory(worker: () => Worker | SharedWorker): Worker | MessagePort;
|
|
14
|
+
export declare function isSharedWorker(worker: Worker | SharedWorker): worker is SharedWorker;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as Comlink from 'comlink';
|
|
2
|
+
import { vfsRequiresDedicatedWorkers } from '../../db/adapters/wa-sqlite/vfs.js';
|
|
3
|
+
/**
|
|
4
|
+
* Opens a shared or dedicated worker which exposes opening of database connections
|
|
5
|
+
*/
|
|
6
|
+
export function openWorkerDatabasePort(workerIdentifier, multipleTabs = true, worker = '', vfs) {
|
|
7
|
+
const needsDedicated = vfs && vfsRequiresDedicatedWorkers(vfs);
|
|
8
|
+
if (worker) {
|
|
9
|
+
return !needsDedicated && multipleTabs
|
|
10
|
+
? new SharedWorker(`${worker}`, {
|
|
11
|
+
/* @vite-ignore */
|
|
12
|
+
name: `shared-DB-worker-${workerIdentifier}`
|
|
13
|
+
}).port
|
|
14
|
+
: new Worker(`${worker}`, {
|
|
15
|
+
/* @vite-ignore */
|
|
16
|
+
name: `DB-worker-${workerIdentifier}`
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
/**
|
|
21
|
+
* Webpack V5 can bundle the worker automatically if the full Worker constructor syntax is used
|
|
22
|
+
* https://webpack.js.org/guides/web-workers/
|
|
23
|
+
* This enables multi tab support by default, but falls back if SharedWorker is not available
|
|
24
|
+
* (in the case of Android)
|
|
25
|
+
*/
|
|
26
|
+
return !needsDedicated && multipleTabs
|
|
27
|
+
? new SharedWorker(new URL('./WASQLiteDB.worker.js', import.meta.url), {
|
|
28
|
+
/* @vite-ignore */
|
|
29
|
+
name: `shared-DB-worker-${workerIdentifier}`,
|
|
30
|
+
type: 'module'
|
|
31
|
+
}).port
|
|
32
|
+
: new Worker(new URL('./WASQLiteDB.worker.js', import.meta.url), {
|
|
33
|
+
/* @vite-ignore */
|
|
34
|
+
name: `DB-worker-${workerIdentifier}`,
|
|
35
|
+
type: 'module'
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @returns A function which allows for opening database connections inside
|
|
41
|
+
* a worker.
|
|
42
|
+
*/
|
|
43
|
+
export function getWorkerDatabaseOpener(workerIdentifier, multipleTabs = true, worker = '') {
|
|
44
|
+
return Comlink.wrap(openWorkerDatabasePort(workerIdentifier, multipleTabs, worker));
|
|
45
|
+
}
|
|
46
|
+
export function resolveWorkerDatabasePortFactory(worker) {
|
|
47
|
+
const workerInstance = worker();
|
|
48
|
+
return isSharedWorker(workerInstance) ? workerInstance.port : workerInstance;
|
|
49
|
+
}
|
|
50
|
+
export function isSharedWorker(worker) {
|
|
51
|
+
return 'port' in worker;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=open-worker-database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-worker-database.js","sourceRoot":"","sources":["../../../../src/worker/db/open-worker-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAe,MAAM,oCAAoC,CAAC;AAG9F;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,gBAAwB,EACxB,YAAY,GAAG,IAAI,EACnB,SAAuB,EAAE,EACzB,GAAiB;IAEjB,MAAM,cAAc,GAAG,GAAG,IAAI,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAE/D,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,cAAc,IAAI,YAAY;YACpC,CAAC,CAAC,IAAI,YAAY,CAAC,GAAG,MAAM,EAAE,EAAE;gBAC5B,kBAAkB;gBAClB,IAAI,EAAE,oBAAoB,gBAAgB,EAAE;aAC7C,CAAC,CAAC,IAAI;YACT,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,EAAE,EAAE;gBACtB,kBAAkB;gBAClB,IAAI,EAAE,aAAa,gBAAgB,EAAE;aACtC,CAAC,CAAC;IACT,CAAC;SAAM,CAAC;QACN;;;;;WAKG;QACH,OAAO,CAAC,cAAc,IAAI,YAAY;YACpC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBACnE,kBAAkB;gBAClB,IAAI,EAAE,oBAAoB,gBAAgB,EAAE;gBAC5C,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC,IAAI;YACT,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;gBAC7D,kBAAkB;gBAClB,IAAI,EAAE,aAAa,gBAAgB,EAAE;gBACrC,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;IACT,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,gBAAwB,EAAE,YAAY,GAAG,IAAI,EAAE,SAAuB,EAAE;IAC9G,OAAO,OAAO,CAAC,IAAI,CAAuB,sBAAsB,CAAC,gBAAgB,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,MAAmC;IAClF,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC;IAChC,OAAO,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA6B;IAC1D,OAAO,MAAM,IAAI,MAAM,CAAC;AAC1B,CAAC"}
|