@powersync/web 0.0.0-dev-20260504100448 → 0.0.0-dev-20260630144038
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.react_native_web.js +1879 -0
- package/dist/index.react_native_web.js.map +1 -0
- package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js +2 -0
- package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js.map +1 -0
- package/dist/worker/FacadeVFS-d1ZDvud7.js +2 -0
- package/dist/worker/FacadeVFS-d1ZDvud7.js.map +1 -0
- package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js +2 -0
- package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js.map +1 -0
- package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js +2 -0
- package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js.map +1 -0
- package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js +2 -0
- package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js.map +1 -0
- package/dist/worker/mc-wa-sqlite-DiBqIVE5.js +2 -0
- package/dist/worker/mc-wa-sqlite-DiBqIVE5.js.map +1 -0
- package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js +2 -0
- package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js.map +1 -0
- package/dist/worker/wa-sqlite-BlSx7-_P.js +2 -0
- package/dist/worker/wa-sqlite-BlSx7-_P.js.map +1 -0
- package/dist/worker/wa-sqlite-async-BdR24Ucf.js +2 -0
- package/dist/worker/wa-sqlite-async-BdR24Ucf.js.map +1 -0
- package/dist/worker/websockets-Q8W_lerF.js +9 -0
- package/dist/worker/websockets-Q8W_lerF.js.map +1 -0
- package/dist/worker/worker.js +7 -0
- package/dist/worker/worker.js.map +1 -0
- package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.js +1 -0
- package/lib/attachments/IndexDBFileSystemAdapter.js.map +1 -0
- package/lib/{src/db → db}/NavigatorTriggerClaimManager.d.ts +1 -1
- package/lib/{src/db → db}/NavigatorTriggerClaimManager.js +1 -0
- package/lib/db/NavigatorTriggerClaimManager.js.map +1 -0
- package/lib/db/PowerSyncDatabase.d.ts +67 -0
- package/lib/{src/db → db}/PowerSyncDatabase.js +48 -61
- package/lib/db/PowerSyncDatabase.js.map +1 -0
- package/lib/db/adapters/AsyncWebAdapter.d.ts +32 -0
- package/lib/{src/db → db}/adapters/AsyncWebAdapter.js +15 -14
- package/lib/db/adapters/AsyncWebAdapter.js.map +1 -0
- package/lib/db/adapters/SSRDBAdapter.d.ts +17 -0
- package/lib/db/adapters/SSRDBAdapter.js +37 -0
- package/lib/db/adapters/SSRDBAdapter.js.map +1 -0
- package/lib/{src/db → db}/adapters/WebDBAdapter.d.ts +1 -1
- package/lib/db/adapters/WebDBAdapter.js +2 -0
- package/lib/db/adapters/WebDBAdapter.js.map +1 -0
- package/lib/db/adapters/options.d.ts +87 -0
- package/lib/db/adapters/options.js +6 -0
- package/lib/db/adapters/options.js.map +1 -0
- package/lib/db/adapters/resolveAndValidateOptions.d.ts +5 -0
- package/lib/db/adapters/resolveAndValidateOptions.js +33 -0
- package/lib/db/adapters/resolveAndValidateOptions.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +3 -4
- package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.js +3 -2
- package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
- package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.js +12 -37
- package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
- package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.js +12 -7
- package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +22 -12
- package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.js +12 -10
- package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +18 -0
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +131 -0
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/vfs.js +1 -0
- package/lib/db/adapters/wa-sqlite/vfs.js.map +1 -0
- package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.d.ts +4 -8
- package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.js +5 -11
- package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
- package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.d.ts +13 -14
- package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.js +32 -66
- package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
- package/lib/db/sync/WebRemote.d.ts +10 -0
- package/lib/db/sync/WebRemote.js +33 -0
- package/lib/db/sync/WebRemote.js.map +1 -0
- package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.d.ts +2 -4
- package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.js +4 -2
- package/lib/db/sync/WebStreamingSyncImplementation.js.map +1 -0
- package/lib/{src/db → db}/sync/userAgent.js +1 -0
- package/lib/db/sync/userAgent.js.map +1 -0
- package/lib/{src/index.d.ts → index.d.ts} +1 -3
- package/lib/{src/index.js → index.js} +2 -3
- package/lib/index.js.map +1 -0
- package/lib/{src/shared → shared}/navigator.js +1 -0
- package/lib/shared/navigator.js.map +1 -0
- package/lib/{src/shared → shared}/tab_close_signal.js +1 -0
- package/lib/shared/tab_close_signal.js.map +1 -0
- package/lib/worker/SharedWorkerConnectionRequest.d.ts +5 -0
- package/lib/worker/SharedWorkerConnectionRequest.js +2 -0
- package/lib/worker/SharedWorkerConnectionRequest.js.map +1 -0
- package/lib/worker/client.d.ts +15 -0
- package/lib/worker/client.js +77 -0
- package/lib/worker/client.js.map +1 -0
- package/lib/worker/db/MultiDatabaseServer.d.ts +22 -0
- package/lib/{src/worker → worker}/db/MultiDatabaseServer.js +26 -15
- package/lib/worker/db/MultiDatabaseServer.js.map +1 -0
- package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +13 -0
- package/lib/{src/worker → worker}/sync/AbstractSharedSyncClientProvider.js +1 -0
- package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
- package/lib/worker/sync/BroadcastLogger.d.ts +27 -0
- package/lib/worker/sync/BroadcastLogger.js +65 -0
- package/lib/worker/sync/BroadcastLogger.js.map +1 -0
- package/lib/{src/worker → worker}/sync/SharedSyncImplementation.d.ts +11 -15
- package/lib/{src/worker → worker}/sync/SharedSyncImplementation.js +43 -43
- package/lib/worker/sync/SharedSyncImplementation.js.map +1 -0
- package/lib/{src/worker → worker}/sync/WorkerClient.d.ts +3 -3
- package/lib/{src/worker → worker}/sync/WorkerClient.js +3 -2
- package/lib/worker/sync/WorkerClient.js.map +1 -0
- package/lib/worker/worker.js +34 -0
- package/lib/worker/worker.js.map +1 -0
- package/package.json +22 -29
- package/src/db/NavigatorTriggerClaimManager.ts +1 -1
- package/src/db/PowerSyncDatabase.ts +80 -122
- package/src/db/adapters/AsyncWebAdapter.ts +17 -26
- package/src/db/adapters/SSRDBAdapter.ts +14 -64
- package/src/db/adapters/WebDBAdapter.ts +1 -1
- package/src/db/adapters/options.ts +100 -0
- package/src/db/adapters/resolveAndValidateOptions.ts +40 -0
- package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +4 -5
- package/src/db/adapters/wa-sqlite/DatabaseClient.ts +20 -56
- package/src/db/adapters/wa-sqlite/DatabaseServer.ts +15 -12
- package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +35 -24
- package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +63 -126
- package/src/db/sync/SSRWebStreamingSyncImplementation.ts +4 -22
- package/src/db/sync/SharedWebStreamingSyncImplementation.ts +38 -77
- package/src/db/sync/WebRemote.ts +23 -26
- package/src/db/sync/WebStreamingSyncImplementation.ts +4 -5
- package/src/index.ts +1 -3
- package/src/worker/SharedWorkerConnectionRequest.ts +6 -0
- package/src/worker/client.ts +100 -0
- package/src/worker/db/MultiDatabaseServer.ts +40 -22
- package/src/worker/sync/AbstractSharedSyncClientProvider.ts +4 -10
- package/src/worker/sync/BroadcastLogger.ts +35 -103
- package/src/worker/sync/SharedSyncImplementation.ts +62 -63
- package/src/worker/sync/WorkerClient.ts +4 -4
- package/src/worker/worker.ts +38 -0
- package/dist/index.umd.js +0 -7613
- package/dist/index.umd.js.map +0 -1
- package/dist/worker/SharedSyncImplementation.umd.js +0 -15885
- package/dist/worker/SharedSyncImplementation.umd.js.map +0 -1
- package/dist/worker/WASQLiteDB.umd.js +0 -17164
- package/dist/worker/WASQLiteDB.umd.js.map +0 -1
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-9af0a7.umd.js +0 -31
- 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 +0 -1
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-bbf5a9.umd.js +0 -31
- 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 +0 -1
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js +0 -31
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js.map +0 -1
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js +0 -31
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js.map +0 -1
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +0 -3562
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js.map +0 -1
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +0 -2478
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js.map +0 -1
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +0 -1681
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js.map +0 -1
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +0 -1820
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js.map +0 -1
- package/lib/package.json +0 -91
- package/lib/src/db/PowerSyncDatabase.d.ts +0 -78
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +0 -23
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +0 -26
- package/lib/src/db/adapters/AsyncWebAdapter.d.ts +0 -50
- package/lib/src/db/adapters/SSRDBAdapter.d.ts +0 -30
- package/lib/src/db/adapters/SSRDBAdapter.js +0 -68
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -45
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -145
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +0 -15
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +0 -21
- package/lib/src/db/adapters/web-sql-flags.d.ts +0 -92
- package/lib/src/db/adapters/web-sql-flags.js +0 -36
- package/lib/src/db/sync/WebRemote.d.ts +0 -7
- package/lib/src/db/sync/WebRemote.js +0 -32
- package/lib/src/worker/db/MultiDatabaseServer.d.ts +0 -17
- package/lib/src/worker/db/WASQLiteDB.worker.d.ts +0 -4
- package/lib/src/worker/db/WASQLiteDB.worker.js +0 -30
- package/lib/src/worker/db/open-worker-database.d.ts +0 -14
- package/lib/src/worker/db/open-worker-database.js +0 -52
- package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -19
- package/lib/src/worker/sync/BroadcastLogger.d.ts +0 -47
- package/lib/src/worker/sync/BroadcastLogger.js +0 -128
- package/lib/src/worker/sync/SharedSyncImplementation.worker.d.ts +0 -1
- package/lib/src/worker/sync/SharedSyncImplementation.worker.js +0 -11
- package/lib/tsconfig.tsbuildinfo +0 -1
- package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +0 -47
- package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +0 -24
- package/src/db/adapters/web-sql-flags.ts +0 -141
- package/src/worker/db/WASQLiteDB.worker.ts +0 -35
- package/src/worker/db/open-worker-database.ts +0 -62
- package/src/worker/sync/SharedSyncImplementation.worker.ts +0 -14
- /package/dist/{8e97452e297be23b5e50.wasm → worker/assets/mc-wa-sqlite-CnHbhWvs.wasm} +0 -0
- /package/dist/{2075a31bb151adbb9767.wasm → worker/assets/mc-wa-sqlite-async-D6idQS2r.wasm} +0 -0
- /package/dist/{3322bc84de986b63c2cd.wasm → worker/assets/wa-sqlite-XZW__iJk.wasm} +0 -0
- /package/dist/{fbc178b70d530e8ce02b.wasm → worker/assets/wa-sqlite-async-rHzzC98y.wasm} +0 -0
- /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
- /package/lib/{src/db → db}/adapters/wa-sqlite/vfs.d.ts +0 -0
- /package/lib/{src/db → db}/sync/userAgent.d.ts +0 -0
- /package/lib/{src/shared → shared}/navigator.d.ts +0 -0
- /package/lib/{src/shared → shared}/tab_close_signal.d.ts +0 -0
- /package/lib/{src/db/adapters/WebDBAdapter.js → worker/worker.d.ts} +0 -0
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
import {
|
|
2
|
-
AbortOperation,
|
|
3
2
|
BaseObserver,
|
|
4
|
-
ConnectionManager,
|
|
5
|
-
ConnectionPool,
|
|
6
3
|
DBAdapter,
|
|
7
|
-
DBAdapterDefaultMixin,
|
|
8
|
-
DBAdapterListener,
|
|
9
4
|
DBLockOptions,
|
|
10
5
|
LockContext,
|
|
11
6
|
PowerSyncBackendConnector,
|
|
7
|
+
SyncStatus,
|
|
8
|
+
LogLevels,
|
|
9
|
+
SyncStreamConnectionMethod
|
|
10
|
+
} from '@powersync/common';
|
|
11
|
+
import {
|
|
12
|
+
AbortOperation,
|
|
13
|
+
ConnectionManager,
|
|
12
14
|
SqliteBucketStorage,
|
|
13
15
|
SubscribedStream,
|
|
14
|
-
SyncStatus,
|
|
15
|
-
createLogger,
|
|
16
|
-
Mutex,
|
|
17
|
-
type ILogLevel,
|
|
18
|
-
type ILogger,
|
|
19
|
-
type PowerSyncConnectionOptions,
|
|
20
16
|
type StreamingSyncImplementation,
|
|
21
17
|
type StreamingSyncImplementationListener,
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
Mutex,
|
|
19
|
+
ResolvedSyncOptions,
|
|
20
|
+
SyncStatusSnapshot
|
|
21
|
+
} from '@powersync/shared-internals';
|
|
24
22
|
import * as Comlink from 'comlink';
|
|
25
23
|
import { WebRemote } from '../../db/sync/WebRemote.js';
|
|
26
24
|
import {
|
|
@@ -28,11 +26,11 @@ import {
|
|
|
28
26
|
WebStreamingSyncImplementationOptions
|
|
29
27
|
} from '../../db/sync/WebStreamingSyncImplementation.js';
|
|
30
28
|
|
|
31
|
-
import { ResolvedWebSQLOpenOptions } from '../../db/adapters/web-sql-flags.js';
|
|
32
29
|
import { AbstractSharedSyncClientProvider } from './AbstractSharedSyncClientProvider.js';
|
|
33
30
|
import { BroadcastLogger } from './BroadcastLogger.js';
|
|
34
31
|
import { DatabaseClient, OpenWorkerConnection } from '../../db/adapters/wa-sqlite/DatabaseClient.js';
|
|
35
32
|
import { generateTabCloseSignal } from '../../shared/tab_close_signal.js';
|
|
33
|
+
import { ResolvedWebSQLOpenOptions } from '../../db/adapters/options.js';
|
|
36
34
|
|
|
37
35
|
/**
|
|
38
36
|
* @internal
|
|
@@ -60,8 +58,12 @@ export type ManualSharedSyncPayload = {
|
|
|
60
58
|
* @internal
|
|
61
59
|
*/
|
|
62
60
|
export type SharedSyncInitOptions = {
|
|
63
|
-
streamOptions: Omit<
|
|
61
|
+
streamOptions: Omit<
|
|
62
|
+
WebStreamingSyncImplementationOptions,
|
|
63
|
+
'adapter' | 'uploadCrud' | 'remote' | 'subscriptions' | 'logger'
|
|
64
|
+
>;
|
|
64
65
|
dbParams: ResolvedWebSQLOpenOptions;
|
|
66
|
+
enableBroadcastLogs: boolean;
|
|
65
67
|
};
|
|
66
68
|
|
|
67
69
|
/**
|
|
@@ -112,21 +114,19 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
112
114
|
protected uploadDataController?: RemoteOperationAbortController;
|
|
113
115
|
|
|
114
116
|
protected syncParams: SharedSyncInitOptions | null;
|
|
115
|
-
protected
|
|
116
|
-
protected lastConnectOptions: PowerSyncConnectionOptions | undefined;
|
|
117
|
+
protected lastConnectOptions: ResolvedSyncOptions | undefined;
|
|
117
118
|
protected portMutex: Mutex;
|
|
118
119
|
private subscriptions: SubscribedStream[] = [];
|
|
119
120
|
|
|
120
121
|
protected connectionManager: ConnectionManager;
|
|
121
|
-
syncStatus
|
|
122
|
-
|
|
122
|
+
private syncStatus?: SyncStatusSnapshot;
|
|
123
|
+
logger: BroadcastLogger;
|
|
123
124
|
protected readonly database = this.generateReconnectableDatabase();
|
|
124
125
|
|
|
125
126
|
constructor() {
|
|
126
127
|
super();
|
|
127
128
|
this.ports = [];
|
|
128
129
|
this.syncParams = null;
|
|
129
|
-
this.logger = createLogger('shared-sync');
|
|
130
130
|
this.lastConnectOptions = undefined;
|
|
131
131
|
this.portMutex = new Mutex();
|
|
132
132
|
|
|
@@ -139,8 +139,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
139
139
|
});
|
|
140
140
|
});
|
|
141
141
|
|
|
142
|
-
this.
|
|
143
|
-
this.broadCastLogger = new BroadcastLogger(this.ports);
|
|
142
|
+
this.logger = new BroadcastLogger('shared-sync', this.ports);
|
|
144
143
|
|
|
145
144
|
this.connectionManager = new ConnectionManager({
|
|
146
145
|
createSyncImplementation: async () => {
|
|
@@ -148,8 +147,10 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
148
147
|
|
|
149
148
|
const sync = this.generateStreamingImplementation();
|
|
150
149
|
const onDispose = sync.registerListener({
|
|
151
|
-
statusChanged: (
|
|
152
|
-
this.
|
|
150
|
+
statusChanged: (snapshot) => {
|
|
151
|
+
this.syncStatus = snapshot;
|
|
152
|
+
const json = snapshot.toJSON();
|
|
153
|
+
this.ports.forEach((p) => p.clientProvider.statusChanged(json));
|
|
153
154
|
}
|
|
154
155
|
});
|
|
155
156
|
|
|
@@ -158,7 +159,8 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
158
159
|
onDispose
|
|
159
160
|
};
|
|
160
161
|
},
|
|
161
|
-
logger: this.logger
|
|
162
|
+
logger: this.logger,
|
|
163
|
+
defaultConnectionMethod: SyncStreamConnectionMethod.HTTP
|
|
162
164
|
});
|
|
163
165
|
}
|
|
164
166
|
|
|
@@ -192,12 +194,6 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
192
194
|
});
|
|
193
195
|
}
|
|
194
196
|
|
|
195
|
-
async waitForStatus(status: SyncStatusOptions): Promise<void> {
|
|
196
|
-
return this.withSyncImplementation(async (sync) => {
|
|
197
|
-
return sync.waitForStatus(status);
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
|
|
201
197
|
async waitUntilStatusMatches(predicate: (status: SyncStatus) => boolean): Promise<void> {
|
|
202
198
|
return this.withSyncImplementation(async (sync) => {
|
|
203
199
|
return sync.waitUntilStatusMatches(predicate);
|
|
@@ -209,7 +205,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
209
205
|
}
|
|
210
206
|
|
|
211
207
|
private collectActiveSubscriptions() {
|
|
212
|
-
this.logger.debug
|
|
208
|
+
this.logger.log({ level: LogLevels.debug, message: 'Collecting active stream subscriptions across tabs' });
|
|
213
209
|
const active = new Map<string, SubscribedStream>();
|
|
214
210
|
for (const port of this.ports) {
|
|
215
211
|
for (const stream of port.currentSubscriptions) {
|
|
@@ -218,7 +214,10 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
218
214
|
}
|
|
219
215
|
}
|
|
220
216
|
this.subscriptions = [...active.values()];
|
|
221
|
-
this.logger.
|
|
217
|
+
this.logger.log({
|
|
218
|
+
level: LogLevels.debug,
|
|
219
|
+
message: `Collected stream subscriptions, ${JSON.stringify(this.subscriptions)}`
|
|
220
|
+
});
|
|
222
221
|
this.connectionManager.syncStreamImplementation?.updateSubscriptions(this.subscriptions);
|
|
223
222
|
}
|
|
224
223
|
|
|
@@ -227,9 +226,8 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
227
226
|
this.collectActiveSubscriptions();
|
|
228
227
|
}
|
|
229
228
|
|
|
230
|
-
setLogLevel(level:
|
|
229
|
+
setLogLevel(level: number) {
|
|
231
230
|
this.logger.setLevel(level);
|
|
232
|
-
this.broadCastLogger.setLevel(level);
|
|
233
231
|
}
|
|
234
232
|
|
|
235
233
|
/**
|
|
@@ -247,16 +245,18 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
247
245
|
|
|
248
246
|
// First time setting params
|
|
249
247
|
this.syncParams = params;
|
|
250
|
-
|
|
251
|
-
this.logger = this.broadCastLogger;
|
|
252
|
-
}
|
|
248
|
+
this.logger.sendBroadcasts = params.enableBroadcastLogs;
|
|
253
249
|
|
|
254
250
|
// Ensure we have a usable database connection, the reconnectable database will connect lazily on first use.
|
|
255
251
|
await this.database.readLock(async () => {});
|
|
256
252
|
|
|
257
253
|
self.onerror = (event) => {
|
|
258
254
|
// Share any uncaught events on the broadcast logger
|
|
259
|
-
this.logger.
|
|
255
|
+
this.logger.log({
|
|
256
|
+
level: LogLevels.error,
|
|
257
|
+
message: 'Uncaught exception in PowerSync shared sync worker',
|
|
258
|
+
error: event
|
|
259
|
+
});
|
|
260
260
|
};
|
|
261
261
|
|
|
262
262
|
this.iterateListeners((l) => l.initialized?.());
|
|
@@ -274,9 +274,9 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
274
274
|
* The connection will simply be reconnected whenever a new tab
|
|
275
275
|
* connects.
|
|
276
276
|
*/
|
|
277
|
-
async connect(options
|
|
277
|
+
async connect(options: ResolvedSyncOptions, serializedSchema: any) {
|
|
278
278
|
this.lastConnectOptions = options;
|
|
279
|
-
return this.connectionManager.connect(CONNECTOR_PLACEHOLDER, options ?? {});
|
|
279
|
+
return this.connectionManager.connect(CONNECTOR_PLACEHOLDER, options ?? {}, serializedSchema);
|
|
280
280
|
}
|
|
281
281
|
|
|
282
282
|
async disconnect() {
|
|
@@ -298,7 +298,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
298
298
|
this.ports.push(portProvider);
|
|
299
299
|
|
|
300
300
|
// Give the newly connected client the latest status
|
|
301
|
-
const status = this.
|
|
301
|
+
const status = this.syncStatus;
|
|
302
302
|
if (status) {
|
|
303
303
|
portProvider.clientProvider.statusChanged(status.toJSON());
|
|
304
304
|
}
|
|
@@ -321,7 +321,10 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
321
321
|
return await this.portMutex.runExclusive(async () => {
|
|
322
322
|
const index = this.ports.findIndex((p) => p == port);
|
|
323
323
|
if (index < 0) {
|
|
324
|
-
this.logger.
|
|
324
|
+
this.logger.log({
|
|
325
|
+
level: LogLevels.warn,
|
|
326
|
+
message: `Could not remove port ${port} since it is not present in active ports.`
|
|
327
|
+
});
|
|
325
328
|
return () => {};
|
|
326
329
|
}
|
|
327
330
|
|
|
@@ -397,10 +400,13 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
397
400
|
throw new Error('No client port found to invalidate credentials');
|
|
398
401
|
}
|
|
399
402
|
try {
|
|
400
|
-
this.logger.log(
|
|
403
|
+
this.logger.log({
|
|
404
|
+
level: LogLevels.info,
|
|
405
|
+
message: 'calling the last port client provider to invalidate credentials'
|
|
406
|
+
});
|
|
401
407
|
lastPort.clientProvider.invalidateCredentials();
|
|
402
|
-
} catch (
|
|
403
|
-
this.logger.error
|
|
408
|
+
} catch (error) {
|
|
409
|
+
this.logger.log({ level: LogLevels.error, message: 'error invalidating credentials', error });
|
|
404
410
|
}
|
|
405
411
|
},
|
|
406
412
|
fetchCredentials: async () => {
|
|
@@ -417,7 +423,10 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
417
423
|
|
|
418
424
|
abortController.signal.onabort = reject;
|
|
419
425
|
try {
|
|
420
|
-
this.logger.log(
|
|
426
|
+
this.logger.log({
|
|
427
|
+
level: LogLevels.info,
|
|
428
|
+
message: 'calling the last port client provider for credentials'
|
|
429
|
+
});
|
|
421
430
|
resolve(await lastPort.clientProvider.fetchCredentials());
|
|
422
431
|
} catch (ex) {
|
|
423
432
|
reject(ex);
|
|
@@ -542,7 +551,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
542
551
|
clearTimeout(timeout);
|
|
543
552
|
|
|
544
553
|
client.closeListeners.push(async () => {
|
|
545
|
-
this.logger.info
|
|
554
|
+
this.logger.log({ level: LogLevels.info, message: 'Aborting open connection because associated tab closed.' });
|
|
546
555
|
handleClosed(db);
|
|
547
556
|
/**
|
|
548
557
|
* Don't await this close operation. It might never resolve if the tab is closed.
|
|
@@ -550,7 +559,9 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
550
559
|
* We then call close. The close operation is configured to fire-and-forget, the main promise will reject immediately.
|
|
551
560
|
*/
|
|
552
561
|
db.markRemoteClosed();
|
|
553
|
-
db.close().catch((
|
|
562
|
+
db.close().catch((error) =>
|
|
563
|
+
this.logger.log({ level: LogLevels.warn, message: 'error closing database connection', error })
|
|
564
|
+
);
|
|
554
565
|
});
|
|
555
566
|
return db;
|
|
556
567
|
}
|
|
@@ -559,7 +570,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
559
570
|
const syncParams = this.syncParams;
|
|
560
571
|
const sharedSync = this;
|
|
561
572
|
|
|
562
|
-
class
|
|
573
|
+
return new (class extends DBAdapter {
|
|
563
574
|
private connectionState:
|
|
564
575
|
| null
|
|
565
576
|
| DatabaseClient<ResolvedWebSQLOpenOptions>
|
|
@@ -628,19 +639,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
628
639
|
async refreshSchema(): Promise<void> {
|
|
629
640
|
// Not used by sync client.
|
|
630
641
|
}
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
const Adapter = DBAdapterDefaultMixin(ReconnectPool);
|
|
634
|
-
return new Adapter();
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
/**
|
|
638
|
-
* A method to update the all shared statuses for each
|
|
639
|
-
* client.
|
|
640
|
-
*/
|
|
641
|
-
private updateAllStatuses(status: SyncStatusOptions) {
|
|
642
|
-
this.syncStatus = new SyncStatus(status);
|
|
643
|
-
this.ports.forEach((p) => p.clientProvider.statusChanged(status));
|
|
642
|
+
})();
|
|
644
643
|
}
|
|
645
644
|
}
|
|
646
645
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { ILogLevel, PowerSyncConnectionOptions, SubscribedStream } from '@powersync/common';
|
|
2
1
|
import * as Comlink from 'comlink';
|
|
3
2
|
import { getNavigatorLocks } from '../../shared/navigator.js';
|
|
4
3
|
import {
|
|
@@ -8,6 +7,7 @@ import {
|
|
|
8
7
|
SharedSyncInitOptions,
|
|
9
8
|
WrappedSyncPort
|
|
10
9
|
} from './SharedSyncImplementation.js';
|
|
10
|
+
import { SubscribedStream, ResolvedSyncOptions } from '@powersync/shared-internals';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* A client to the shared sync worker.
|
|
@@ -65,7 +65,7 @@ export class WorkerClient {
|
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
setLogLevel(level:
|
|
68
|
+
setLogLevel(level: number) {
|
|
69
69
|
this.sync.setLogLevel(level);
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -82,8 +82,8 @@ export class WorkerClient {
|
|
|
82
82
|
return this.sync.getWriteCheckpoint();
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
connect(options
|
|
86
|
-
return this.sync.connect(options);
|
|
85
|
+
connect(options: ResolvedSyncOptions, schema: any) {
|
|
86
|
+
return this.sync.connect(options, schema);
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
updateSubscriptions(subscriptions: SubscribedStream[]) {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as Comlink from 'comlink';
|
|
2
|
+
|
|
3
|
+
import { createConsoleLogger, LogLevels } from '@powersync/common';
|
|
4
|
+
import { isSharedWorker, MultiDatabaseServer } from './db/MultiDatabaseServer.js';
|
|
5
|
+
import { SharedSyncImplementation } from './sync/SharedSyncImplementation.js';
|
|
6
|
+
import { OpenWorkerConnection } from '../db/adapters/wa-sqlite/DatabaseClient.js';
|
|
7
|
+
import { SharedWorkerConnectionRequest } from './SharedWorkerConnectionRequest.js';
|
|
8
|
+
import { WorkerClient } from './sync/WorkerClient.js';
|
|
9
|
+
|
|
10
|
+
const server = new MultiDatabaseServer(createConsoleLogger({ prefix: 'db-worker', minLevel: LogLevels.trace }));
|
|
11
|
+
|
|
12
|
+
const exposedDatabaseFunctions: OpenWorkerConnection = {
|
|
13
|
+
connect: (config) => server.handleConnection(config),
|
|
14
|
+
connectToExisting: ({ identifier, lockName }) => server.connectToExisting(identifier, lockName)
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
if (isSharedWorker) {
|
|
18
|
+
const sharedSyncImplementation = new SharedSyncImplementation();
|
|
19
|
+
|
|
20
|
+
// A shared worker can either be an IndexedDB-VFS database server or a shared sync coordinator.
|
|
21
|
+
// To be able to know what service a client is connecting to, we let clients send an inner MessagePort through the
|
|
22
|
+
// top-level port along with a tag describing what they need.
|
|
23
|
+
const _self = self as unknown as SharedWorkerGlobalScope;
|
|
24
|
+
_self.onconnect = (outerEvent: MessageEvent) => {
|
|
25
|
+
const port = outerEvent.ports[0];
|
|
26
|
+
port.onmessage = (event: MessageEvent<SharedWorkerConnectionRequest>) => {
|
|
27
|
+
const { service, port } = event.data;
|
|
28
|
+
if (service === 'database') {
|
|
29
|
+
Comlink.expose(exposedDatabaseFunctions, port);
|
|
30
|
+
} else if (service === 'sync') {
|
|
31
|
+
new WorkerClient(sharedSyncImplementation, port);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
} else {
|
|
36
|
+
// Dedicated workers are only used for databases, so we don't need an intermediate layer.
|
|
37
|
+
Comlink.expose(exposedDatabaseFunctions);
|
|
38
|
+
}
|