@powersync/web 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/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 -15
- package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.js +32 -69
- 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 -17
- package/lib/{src/worker → worker}/sync/SharedSyncImplementation.js +43 -51
- package/lib/worker/sync/SharedSyncImplementation.js.map +1 -0
- package/lib/{src/worker → worker}/sync/WorkerClient.d.ts +3 -4
- package/lib/{src/worker → worker}/sync/WorkerClient.js +3 -5
- 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 +23 -33
- 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 -81
- package/src/db/sync/WebRemote.ts +23 -42
- 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 -73
- package/src/worker/sync/WorkerClient.ts +4 -8
- package/src/worker/worker.ts +38 -0
- package/dist/index.umd.js +0 -12277
- package/dist/index.umd.js.map +0 -1
- package/dist/worker/SharedSyncImplementation.umd.js +0 -16655
- package/dist/worker/SharedSyncImplementation.umd.js.map +0 -1
- package/dist/worker/WASQLiteDB.umd.js +0 -17810
- package/dist/worker/WASQLiteDB.umd.js.map +0 -1
- package/dist/worker/node_modules_pnpm_bson_6_10_4_node_modules_bson_lib_bson_mjs.umd.js +0 -4646
- package/dist/worker/node_modules_pnpm_bson_6_10_4_node_modules_bson_lib_bson_mjs.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 -94
- 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 -9
- package/lib/src/db/sync/WebRemote.js +0 -44
- 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,14 +159,11 @@ 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
|
|
|
165
|
-
get lastSyncedAt(): Date | undefined {
|
|
166
|
-
return this.connectionManager.syncStreamImplementation?.lastSyncedAt;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
167
|
get isConnected(): boolean {
|
|
170
168
|
return this.connectionManager.syncStreamImplementation?.isConnected ?? false;
|
|
171
169
|
}
|
|
@@ -196,12 +194,6 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
196
194
|
});
|
|
197
195
|
}
|
|
198
196
|
|
|
199
|
-
async waitForStatus(status: SyncStatusOptions): Promise<void> {
|
|
200
|
-
return this.withSyncImplementation(async (sync) => {
|
|
201
|
-
return sync.waitForStatus(status);
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
|
|
205
197
|
async waitUntilStatusMatches(predicate: (status: SyncStatus) => boolean): Promise<void> {
|
|
206
198
|
return this.withSyncImplementation(async (sync) => {
|
|
207
199
|
return sync.waitUntilStatusMatches(predicate);
|
|
@@ -213,7 +205,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
213
205
|
}
|
|
214
206
|
|
|
215
207
|
private collectActiveSubscriptions() {
|
|
216
|
-
this.logger.debug
|
|
208
|
+
this.logger.log({ level: LogLevels.debug, message: 'Collecting active stream subscriptions across tabs' });
|
|
217
209
|
const active = new Map<string, SubscribedStream>();
|
|
218
210
|
for (const port of this.ports) {
|
|
219
211
|
for (const stream of port.currentSubscriptions) {
|
|
@@ -222,7 +214,10 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
222
214
|
}
|
|
223
215
|
}
|
|
224
216
|
this.subscriptions = [...active.values()];
|
|
225
|
-
this.logger.
|
|
217
|
+
this.logger.log({
|
|
218
|
+
level: LogLevels.debug,
|
|
219
|
+
message: `Collected stream subscriptions, ${JSON.stringify(this.subscriptions)}`
|
|
220
|
+
});
|
|
226
221
|
this.connectionManager.syncStreamImplementation?.updateSubscriptions(this.subscriptions);
|
|
227
222
|
}
|
|
228
223
|
|
|
@@ -231,9 +226,8 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
231
226
|
this.collectActiveSubscriptions();
|
|
232
227
|
}
|
|
233
228
|
|
|
234
|
-
setLogLevel(level:
|
|
229
|
+
setLogLevel(level: number) {
|
|
235
230
|
this.logger.setLevel(level);
|
|
236
|
-
this.broadCastLogger.setLevel(level);
|
|
237
231
|
}
|
|
238
232
|
|
|
239
233
|
/**
|
|
@@ -251,16 +245,18 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
251
245
|
|
|
252
246
|
// First time setting params
|
|
253
247
|
this.syncParams = params;
|
|
254
|
-
|
|
255
|
-
this.logger = this.broadCastLogger;
|
|
256
|
-
}
|
|
248
|
+
this.logger.sendBroadcasts = params.enableBroadcastLogs;
|
|
257
249
|
|
|
258
250
|
// Ensure we have a usable database connection, the reconnectable database will connect lazily on first use.
|
|
259
251
|
await this.database.readLock(async () => {});
|
|
260
252
|
|
|
261
253
|
self.onerror = (event) => {
|
|
262
254
|
// Share any uncaught events on the broadcast logger
|
|
263
|
-
this.logger.
|
|
255
|
+
this.logger.log({
|
|
256
|
+
level: LogLevels.error,
|
|
257
|
+
message: 'Uncaught exception in PowerSync shared sync worker',
|
|
258
|
+
error: event
|
|
259
|
+
});
|
|
264
260
|
};
|
|
265
261
|
|
|
266
262
|
this.iterateListeners((l) => l.initialized?.());
|
|
@@ -278,9 +274,9 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
278
274
|
* The connection will simply be reconnected whenever a new tab
|
|
279
275
|
* connects.
|
|
280
276
|
*/
|
|
281
|
-
async connect(options
|
|
277
|
+
async connect(options: ResolvedSyncOptions, serializedSchema: any) {
|
|
282
278
|
this.lastConnectOptions = options;
|
|
283
|
-
return this.connectionManager.connect(CONNECTOR_PLACEHOLDER, options ?? {});
|
|
279
|
+
return this.connectionManager.connect(CONNECTOR_PLACEHOLDER, options ?? {}, serializedSchema);
|
|
284
280
|
}
|
|
285
281
|
|
|
286
282
|
async disconnect() {
|
|
@@ -302,7 +298,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
302
298
|
this.ports.push(portProvider);
|
|
303
299
|
|
|
304
300
|
// Give the newly connected client the latest status
|
|
305
|
-
const status = this.
|
|
301
|
+
const status = this.syncStatus;
|
|
306
302
|
if (status) {
|
|
307
303
|
portProvider.clientProvider.statusChanged(status.toJSON());
|
|
308
304
|
}
|
|
@@ -325,7 +321,10 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
325
321
|
return await this.portMutex.runExclusive(async () => {
|
|
326
322
|
const index = this.ports.findIndex((p) => p == port);
|
|
327
323
|
if (index < 0) {
|
|
328
|
-
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
|
+
});
|
|
329
328
|
return () => {};
|
|
330
329
|
}
|
|
331
330
|
|
|
@@ -362,12 +361,6 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
362
361
|
});
|
|
363
362
|
}
|
|
364
363
|
|
|
365
|
-
async hasCompletedSync(): Promise<boolean> {
|
|
366
|
-
return this.withSyncImplementation(async (sync) => {
|
|
367
|
-
return sync.hasCompletedSync();
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
|
-
|
|
371
364
|
async getWriteCheckpoint(): Promise<string> {
|
|
372
365
|
return this.withSyncImplementation(async (sync) => {
|
|
373
366
|
return sync.getWriteCheckpoint();
|
|
@@ -407,10 +400,13 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
407
400
|
throw new Error('No client port found to invalidate credentials');
|
|
408
401
|
}
|
|
409
402
|
try {
|
|
410
|
-
this.logger.log(
|
|
403
|
+
this.logger.log({
|
|
404
|
+
level: LogLevels.info,
|
|
405
|
+
message: 'calling the last port client provider to invalidate credentials'
|
|
406
|
+
});
|
|
411
407
|
lastPort.clientProvider.invalidateCredentials();
|
|
412
|
-
} catch (
|
|
413
|
-
this.logger.error
|
|
408
|
+
} catch (error) {
|
|
409
|
+
this.logger.log({ level: LogLevels.error, message: 'error invalidating credentials', error });
|
|
414
410
|
}
|
|
415
411
|
},
|
|
416
412
|
fetchCredentials: async () => {
|
|
@@ -427,7 +423,10 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
427
423
|
|
|
428
424
|
abortController.signal.onabort = reject;
|
|
429
425
|
try {
|
|
430
|
-
this.logger.log(
|
|
426
|
+
this.logger.log({
|
|
427
|
+
level: LogLevels.info,
|
|
428
|
+
message: 'calling the last port client provider for credentials'
|
|
429
|
+
});
|
|
431
430
|
resolve(await lastPort.clientProvider.fetchCredentials());
|
|
432
431
|
} catch (ex) {
|
|
433
432
|
reject(ex);
|
|
@@ -552,7 +551,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
552
551
|
clearTimeout(timeout);
|
|
553
552
|
|
|
554
553
|
client.closeListeners.push(async () => {
|
|
555
|
-
this.logger.info
|
|
554
|
+
this.logger.log({ level: LogLevels.info, message: 'Aborting open connection because associated tab closed.' });
|
|
556
555
|
handleClosed(db);
|
|
557
556
|
/**
|
|
558
557
|
* Don't await this close operation. It might never resolve if the tab is closed.
|
|
@@ -560,7 +559,9 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
560
559
|
* We then call close. The close operation is configured to fire-and-forget, the main promise will reject immediately.
|
|
561
560
|
*/
|
|
562
561
|
db.markRemoteClosed();
|
|
563
|
-
db.close().catch((
|
|
562
|
+
db.close().catch((error) =>
|
|
563
|
+
this.logger.log({ level: LogLevels.warn, message: 'error closing database connection', error })
|
|
564
|
+
);
|
|
564
565
|
});
|
|
565
566
|
return db;
|
|
566
567
|
}
|
|
@@ -569,7 +570,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
569
570
|
const syncParams = this.syncParams;
|
|
570
571
|
const sharedSync = this;
|
|
571
572
|
|
|
572
|
-
class
|
|
573
|
+
return new (class extends DBAdapter {
|
|
573
574
|
private connectionState:
|
|
574
575
|
| null
|
|
575
576
|
| DatabaseClient<ResolvedWebSQLOpenOptions>
|
|
@@ -638,19 +639,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
638
639
|
async refreshSchema(): Promise<void> {
|
|
639
640
|
// Not used by sync client.
|
|
640
641
|
}
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
const Adapter = DBAdapterDefaultMixin(ReconnectPool);
|
|
644
|
-
return new Adapter();
|
|
645
|
-
}
|
|
646
|
-
|
|
647
|
-
/**
|
|
648
|
-
* A method to update the all shared statuses for each
|
|
649
|
-
* client.
|
|
650
|
-
*/
|
|
651
|
-
private updateAllStatuses(status: SyncStatusOptions) {
|
|
652
|
-
this.syncStatus = new SyncStatus(status);
|
|
653
|
-
this.ports.forEach((p) => p.clientProvider.statusChanged(status));
|
|
642
|
+
})();
|
|
654
643
|
}
|
|
655
644
|
}
|
|
656
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,12 +82,8 @@ export class WorkerClient {
|
|
|
82
82
|
return this.sync.getWriteCheckpoint();
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
return this.sync.
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
connect(options?: PowerSyncConnectionOptions) {
|
|
90
|
-
return this.sync.connect(options);
|
|
85
|
+
connect(options: ResolvedSyncOptions, schema: any) {
|
|
86
|
+
return this.sync.connect(options, schema);
|
|
91
87
|
}
|
|
92
88
|
|
|
93
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
|
+
}
|