@powersync/web 0.0.0-dev-20260504100448 → 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.
Files changed (199) hide show
  1. package/bin/powersync.cjs +1 -1
  2. package/dist/index.react_native_web.js +1879 -0
  3. package/dist/index.react_native_web.js.map +1 -0
  4. package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js +2 -0
  5. package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js.map +1 -0
  6. package/dist/worker/FacadeVFS-d1ZDvud7.js +2 -0
  7. package/dist/worker/FacadeVFS-d1ZDvud7.js.map +1 -0
  8. package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js +2 -0
  9. package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js.map +1 -0
  10. package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js +2 -0
  11. package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js.map +1 -0
  12. package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js +2 -0
  13. package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js.map +1 -0
  14. package/dist/worker/mc-wa-sqlite-DiBqIVE5.js +2 -0
  15. package/dist/worker/mc-wa-sqlite-DiBqIVE5.js.map +1 -0
  16. package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js +2 -0
  17. package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js.map +1 -0
  18. package/dist/worker/wa-sqlite-BlSx7-_P.js +2 -0
  19. package/dist/worker/wa-sqlite-BlSx7-_P.js.map +1 -0
  20. package/dist/worker/wa-sqlite-async-BdR24Ucf.js +2 -0
  21. package/dist/worker/wa-sqlite-async-BdR24Ucf.js.map +1 -0
  22. package/dist/worker/websockets-Q8W_lerF.js +9 -0
  23. package/dist/worker/websockets-Q8W_lerF.js.map +1 -0
  24. package/dist/worker/worker.js +7 -0
  25. package/dist/worker/worker.js.map +1 -0
  26. package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.js +1 -0
  27. package/lib/attachments/IndexDBFileSystemAdapter.js.map +1 -0
  28. package/lib/{src/db → db}/NavigatorTriggerClaimManager.d.ts +1 -1
  29. package/lib/{src/db → db}/NavigatorTriggerClaimManager.js +1 -0
  30. package/lib/db/NavigatorTriggerClaimManager.js.map +1 -0
  31. package/lib/db/PowerSyncDatabase.d.ts +67 -0
  32. package/lib/{src/db → db}/PowerSyncDatabase.js +48 -61
  33. package/lib/db/PowerSyncDatabase.js.map +1 -0
  34. package/lib/db/adapters/AsyncWebAdapter.d.ts +32 -0
  35. package/lib/{src/db → db}/adapters/AsyncWebAdapter.js +15 -14
  36. package/lib/db/adapters/AsyncWebAdapter.js.map +1 -0
  37. package/lib/db/adapters/SSRDBAdapter.d.ts +17 -0
  38. package/lib/db/adapters/SSRDBAdapter.js +37 -0
  39. package/lib/db/adapters/SSRDBAdapter.js.map +1 -0
  40. package/lib/{src/db → db}/adapters/WebDBAdapter.d.ts +1 -1
  41. package/lib/db/adapters/WebDBAdapter.js +2 -0
  42. package/lib/db/adapters/WebDBAdapter.js.map +1 -0
  43. package/lib/db/adapters/options.d.ts +87 -0
  44. package/lib/db/adapters/options.js +6 -0
  45. package/lib/db/adapters/options.js.map +1 -0
  46. package/lib/db/adapters/resolveAndValidateOptions.d.ts +5 -0
  47. package/lib/db/adapters/resolveAndValidateOptions.js +33 -0
  48. package/lib/db/adapters/resolveAndValidateOptions.js.map +1 -0
  49. package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +3 -4
  50. package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.js +3 -2
  51. package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
  52. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
  53. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.js +12 -37
  54. package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
  55. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
  56. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.js +12 -7
  57. package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
  58. package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +22 -12
  59. package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.js +12 -10
  60. package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
  61. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +18 -0
  62. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +131 -0
  63. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
  64. package/lib/{src/db → db}/adapters/wa-sqlite/vfs.js +1 -0
  65. package/lib/db/adapters/wa-sqlite/vfs.js.map +1 -0
  66. package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.d.ts +4 -8
  67. package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.js +5 -11
  68. package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
  69. package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.d.ts +13 -14
  70. package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.js +32 -66
  71. package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
  72. package/lib/db/sync/WebRemote.d.ts +10 -0
  73. package/lib/db/sync/WebRemote.js +33 -0
  74. package/lib/db/sync/WebRemote.js.map +1 -0
  75. package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.d.ts +2 -4
  76. package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.js +4 -2
  77. package/lib/db/sync/WebStreamingSyncImplementation.js.map +1 -0
  78. package/lib/{src/db → db}/sync/userAgent.js +1 -0
  79. package/lib/db/sync/userAgent.js.map +1 -0
  80. package/lib/{src/index.d.ts → index.d.ts} +1 -3
  81. package/lib/{src/index.js → index.js} +2 -3
  82. package/lib/index.js.map +1 -0
  83. package/lib/{src/shared → shared}/navigator.js +1 -0
  84. package/lib/shared/navigator.js.map +1 -0
  85. package/lib/{src/shared → shared}/tab_close_signal.js +1 -0
  86. package/lib/shared/tab_close_signal.js.map +1 -0
  87. package/lib/worker/SharedWorkerConnectionRequest.d.ts +5 -0
  88. package/lib/worker/SharedWorkerConnectionRequest.js +2 -0
  89. package/lib/worker/SharedWorkerConnectionRequest.js.map +1 -0
  90. package/lib/worker/client.d.ts +15 -0
  91. package/lib/worker/client.js +77 -0
  92. package/lib/worker/client.js.map +1 -0
  93. package/lib/worker/db/MultiDatabaseServer.d.ts +22 -0
  94. package/lib/{src/worker → worker}/db/MultiDatabaseServer.js +26 -15
  95. package/lib/worker/db/MultiDatabaseServer.js.map +1 -0
  96. package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +13 -0
  97. package/lib/{src/worker → worker}/sync/AbstractSharedSyncClientProvider.js +1 -0
  98. package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
  99. package/lib/worker/sync/BroadcastLogger.d.ts +27 -0
  100. package/lib/worker/sync/BroadcastLogger.js +65 -0
  101. package/lib/worker/sync/BroadcastLogger.js.map +1 -0
  102. package/lib/{src/worker → worker}/sync/SharedSyncImplementation.d.ts +11 -15
  103. package/lib/{src/worker → worker}/sync/SharedSyncImplementation.js +43 -43
  104. package/lib/worker/sync/SharedSyncImplementation.js.map +1 -0
  105. package/lib/{src/worker → worker}/sync/WorkerClient.d.ts +3 -3
  106. package/lib/{src/worker → worker}/sync/WorkerClient.js +3 -2
  107. package/lib/worker/sync/WorkerClient.js.map +1 -0
  108. package/lib/worker/worker.js +34 -0
  109. package/lib/worker/worker.js.map +1 -0
  110. package/package.json +22 -29
  111. package/src/db/NavigatorTriggerClaimManager.ts +1 -1
  112. package/src/db/PowerSyncDatabase.ts +80 -122
  113. package/src/db/adapters/AsyncWebAdapter.ts +17 -26
  114. package/src/db/adapters/SSRDBAdapter.ts +14 -64
  115. package/src/db/adapters/WebDBAdapter.ts +1 -1
  116. package/src/db/adapters/options.ts +100 -0
  117. package/src/db/adapters/resolveAndValidateOptions.ts +40 -0
  118. package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +4 -5
  119. package/src/db/adapters/wa-sqlite/DatabaseClient.ts +20 -56
  120. package/src/db/adapters/wa-sqlite/DatabaseServer.ts +15 -12
  121. package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +35 -24
  122. package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +63 -126
  123. package/src/db/sync/SSRWebStreamingSyncImplementation.ts +4 -22
  124. package/src/db/sync/SharedWebStreamingSyncImplementation.ts +38 -77
  125. package/src/db/sync/WebRemote.ts +23 -26
  126. package/src/db/sync/WebStreamingSyncImplementation.ts +4 -5
  127. package/src/index.ts +1 -3
  128. package/src/worker/SharedWorkerConnectionRequest.ts +6 -0
  129. package/src/worker/client.ts +100 -0
  130. package/src/worker/db/MultiDatabaseServer.ts +40 -22
  131. package/src/worker/sync/AbstractSharedSyncClientProvider.ts +4 -10
  132. package/src/worker/sync/BroadcastLogger.ts +35 -103
  133. package/src/worker/sync/SharedSyncImplementation.ts +62 -63
  134. package/src/worker/sync/WorkerClient.ts +4 -4
  135. package/src/worker/worker.ts +38 -0
  136. package/dist/index.umd.js +0 -7613
  137. package/dist/index.umd.js.map +0 -1
  138. package/dist/worker/SharedSyncImplementation.umd.js +0 -15885
  139. package/dist/worker/SharedSyncImplementation.umd.js.map +0 -1
  140. package/dist/worker/WASQLiteDB.umd.js +0 -17164
  141. package/dist/worker/WASQLiteDB.umd.js.map +0 -1
  142. 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
  143. 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
  144. 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
  145. 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
  146. 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
  147. 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
  148. 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
  149. 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
  150. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +0 -3562
  151. 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
  152. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +0 -2478
  153. 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
  154. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +0 -1681
  155. 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
  156. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +0 -1820
  157. 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
  158. package/lib/package.json +0 -91
  159. package/lib/src/db/PowerSyncDatabase.d.ts +0 -78
  160. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +0 -23
  161. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +0 -26
  162. package/lib/src/db/adapters/AsyncWebAdapter.d.ts +0 -50
  163. package/lib/src/db/adapters/SSRDBAdapter.d.ts +0 -30
  164. package/lib/src/db/adapters/SSRDBAdapter.js +0 -68
  165. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -45
  166. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -145
  167. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +0 -15
  168. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +0 -21
  169. package/lib/src/db/adapters/web-sql-flags.d.ts +0 -92
  170. package/lib/src/db/adapters/web-sql-flags.js +0 -36
  171. package/lib/src/db/sync/WebRemote.d.ts +0 -7
  172. package/lib/src/db/sync/WebRemote.js +0 -32
  173. package/lib/src/worker/db/MultiDatabaseServer.d.ts +0 -17
  174. package/lib/src/worker/db/WASQLiteDB.worker.d.ts +0 -4
  175. package/lib/src/worker/db/WASQLiteDB.worker.js +0 -30
  176. package/lib/src/worker/db/open-worker-database.d.ts +0 -14
  177. package/lib/src/worker/db/open-worker-database.js +0 -52
  178. package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -19
  179. package/lib/src/worker/sync/BroadcastLogger.d.ts +0 -47
  180. package/lib/src/worker/sync/BroadcastLogger.js +0 -128
  181. package/lib/src/worker/sync/SharedSyncImplementation.worker.d.ts +0 -1
  182. package/lib/src/worker/sync/SharedSyncImplementation.worker.js +0 -11
  183. package/lib/tsconfig.tsbuildinfo +0 -1
  184. package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +0 -47
  185. package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +0 -24
  186. package/src/db/adapters/web-sql-flags.ts +0 -141
  187. package/src/worker/db/WASQLiteDB.worker.ts +0 -35
  188. package/src/worker/db/open-worker-database.ts +0 -62
  189. package/src/worker/sync/SharedSyncImplementation.worker.ts +0 -14
  190. /package/dist/{8e97452e297be23b5e50.wasm → worker/assets/mc-wa-sqlite-CnHbhWvs.wasm} +0 -0
  191. /package/dist/{2075a31bb151adbb9767.wasm → worker/assets/mc-wa-sqlite-async-D6idQS2r.wasm} +0 -0
  192. /package/dist/{3322bc84de986b63c2cd.wasm → worker/assets/wa-sqlite-XZW__iJk.wasm} +0 -0
  193. /package/dist/{fbc178b70d530e8ce02b.wasm → worker/assets/wa-sqlite-async-rHzzC98y.wasm} +0 -0
  194. /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
  195. /package/lib/{src/db → db}/adapters/wa-sqlite/vfs.d.ts +0 -0
  196. /package/lib/{src/db → db}/sync/userAgent.d.ts +0 -0
  197. /package/lib/{src/shared → shared}/navigator.d.ts +0 -0
  198. /package/lib/{src/shared → shared}/tab_close_signal.d.ts +0 -0
  199. /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
- type SyncStatusOptions
23
- } from '@powersync/common';
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<WebStreamingSyncImplementationOptions, 'adapter' | 'uploadCrud' | 'remote' | 'subscriptions'>;
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 logger: ILogger;
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: SyncStatus;
122
- broadCastLogger: ILogger;
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.syncStatus = new SyncStatus({});
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: (status) => {
152
- this.updateAllStatuses(status.toJSON());
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('Collecting active stream subscriptions across tabs');
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.debug('Collected stream subscriptions', this.subscriptions);
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: ILogLevel) {
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
- if (params.streamOptions?.flags?.broadcastLogs) {
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.error('Uncaught exception in PowerSync shared sync worker', event);
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?: PowerSyncConnectionOptions) {
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.connectionManager.syncStreamImplementation?.syncStatus;
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.warn(`Could not remove port ${port} since it is not present in active ports.`);
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('calling the last port client provider to invalidate credentials');
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 (ex) {
403
- this.logger.error('error invalidating credentials', ex);
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('calling the last port client provider for credentials');
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('Aborting open connection because associated tab closed.');
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((ex) => this.logger.warn('error closing database connection', ex));
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 ReconnectPool extends BaseObserver<DBAdapterListener> implements ConnectionPool {
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: ILogLevel) {
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?: PowerSyncConnectionOptions) {
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
+ }