@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.
Files changed (234) hide show
  1. package/bin/powersync.cjs +1 -1
  2. package/dist/index.umd.js +7821 -0
  3. package/dist/index.umd.js.map +1 -0
  4. package/dist/worker/SharedSyncImplementation.umd.js +16139 -0
  5. package/dist/worker/SharedSyncImplementation.umd.js.map +1 -0
  6. package/dist/worker/WASQLiteDB.umd.js +17434 -0
  7. package/dist/worker/WASQLiteDB.umd.js.map +1 -0
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +3562 -0
  17. 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
  18. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js +1400 -0
  19. 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
  20. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +2478 -0
  21. 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
  22. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +1681 -0
  23. 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
  24. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +1820 -0
  25. 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
  26. package/lib/package.json +91 -0
  27. package/lib/src/attachments/IndexDBFileSystemAdapter.js.map +1 -0
  28. package/lib/{db → src/db}/NavigatorTriggerClaimManager.d.ts +1 -1
  29. package/lib/src/db/NavigatorTriggerClaimManager.js.map +1 -0
  30. package/lib/src/db/PowerSyncDatabase.d.ts +78 -0
  31. package/lib/{db → src/db}/PowerSyncDatabase.js +61 -47
  32. package/lib/src/db/PowerSyncDatabase.js.map +1 -0
  33. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +23 -0
  34. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +27 -0
  35. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js.map +1 -0
  36. package/lib/src/db/adapters/AsyncWebAdapter.d.ts +50 -0
  37. package/lib/{db → src/db}/adapters/AsyncWebAdapter.js +14 -14
  38. package/lib/src/db/adapters/AsyncWebAdapter.js.map +1 -0
  39. package/lib/src/db/adapters/SSRDBAdapter.d.ts +30 -0
  40. package/lib/src/db/adapters/SSRDBAdapter.js +69 -0
  41. package/lib/src/db/adapters/SSRDBAdapter.js.map +1 -0
  42. package/lib/{db → src/db}/adapters/WebDBAdapter.d.ts +1 -1
  43. package/lib/src/db/adapters/WebDBAdapter.js.map +1 -0
  44. package/lib/{db → src/db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +4 -3
  45. package/lib/{db → src/db}/adapters/wa-sqlite/ConcurrentConnection.js +2 -2
  46. package/lib/src/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
  47. package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
  48. package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseClient.js +37 -11
  49. package/lib/src/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
  50. package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
  51. package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseServer.js +7 -11
  52. package/lib/src/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
  53. package/lib/{db → src/db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +12 -23
  54. package/lib/{db → src/db}/adapters/wa-sqlite/RawSqliteConnection.js +11 -17
  55. package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
  56. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +45 -0
  57. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +146 -0
  58. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
  59. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +15 -0
  60. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +22 -0
  61. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js.map +1 -0
  62. package/lib/src/db/adapters/wa-sqlite/vfs.d.ts +40 -0
  63. package/lib/src/db/adapters/wa-sqlite/vfs.js +95 -0
  64. package/lib/src/db/adapters/wa-sqlite/vfs.js.map +1 -0
  65. package/lib/src/db/adapters/web-sql-flags.d.ts +92 -0
  66. package/lib/src/db/adapters/web-sql-flags.js +37 -0
  67. package/lib/src/db/adapters/web-sql-flags.js.map +1 -0
  68. package/lib/{db → src/db}/sync/SSRWebStreamingSyncImplementation.d.ts +8 -4
  69. package/lib/{db → src/db}/sync/SSRWebStreamingSyncImplementation.js +11 -4
  70. package/lib/src/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
  71. package/lib/{db → src/db}/sync/SharedWebStreamingSyncImplementation.d.ts +14 -13
  72. package/lib/{db → src/db}/sync/SharedWebStreamingSyncImplementation.js +66 -31
  73. package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
  74. package/lib/src/db/sync/WebRemote.d.ts +7 -0
  75. package/lib/src/db/sync/WebRemote.js +33 -0
  76. package/lib/src/db/sync/WebRemote.js.map +1 -0
  77. package/lib/{db → src/db}/sync/WebStreamingSyncImplementation.d.ts +4 -2
  78. package/lib/{db → src/db}/sync/WebStreamingSyncImplementation.js +2 -3
  79. package/lib/src/db/sync/WebStreamingSyncImplementation.js.map +1 -0
  80. package/lib/src/db/sync/userAgent.js.map +1 -0
  81. package/lib/{index.d.ts → src/index.d.ts} +3 -1
  82. package/lib/{index.js → src/index.js} +3 -1
  83. package/lib/src/index.js.map +1 -0
  84. package/lib/src/shared/navigator.js.map +1 -0
  85. package/lib/src/shared/tab_close_signal.js.map +1 -0
  86. package/lib/src/worker/db/MultiDatabaseServer.d.ts +17 -0
  87. package/lib/{worker → src/worker}/db/MultiDatabaseServer.js +18 -26
  88. package/lib/src/worker/db/MultiDatabaseServer.js.map +1 -0
  89. package/lib/src/worker/db/WASQLiteDB.worker.d.ts +4 -0
  90. package/lib/src/worker/db/WASQLiteDB.worker.js +31 -0
  91. package/lib/src/worker/db/WASQLiteDB.worker.js.map +1 -0
  92. package/lib/src/worker/db/open-worker-database.d.ts +14 -0
  93. package/lib/src/worker/db/open-worker-database.js +53 -0
  94. package/lib/src/worker/db/open-worker-database.js.map +1 -0
  95. package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +19 -0
  96. package/lib/src/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
  97. package/lib/src/worker/sync/BroadcastLogger.d.ts +47 -0
  98. package/lib/src/worker/sync/BroadcastLogger.js +129 -0
  99. package/lib/src/worker/sync/BroadcastLogger.js.map +1 -0
  100. package/lib/{worker → src/worker}/sync/SharedSyncImplementation.d.ts +15 -11
  101. package/lib/{worker → src/worker}/sync/SharedSyncImplementation.js +43 -42
  102. package/lib/src/worker/sync/SharedSyncImplementation.js.map +1 -0
  103. package/lib/src/worker/sync/SharedSyncImplementation.worker.js +12 -0
  104. package/lib/src/worker/sync/SharedSyncImplementation.worker.js.map +1 -0
  105. package/lib/{worker → src/worker}/sync/WorkerClient.d.ts +3 -3
  106. package/lib/{worker → src/worker}/sync/WorkerClient.js +2 -2
  107. package/lib/src/worker/sync/WorkerClient.js.map +1 -0
  108. package/lib/tsconfig.tsbuildinfo +1 -0
  109. package/package.json +29 -22
  110. package/src/db/NavigatorTriggerClaimManager.ts +1 -1
  111. package/src/db/PowerSyncDatabase.ts +122 -80
  112. package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +47 -0
  113. package/src/db/adapters/AsyncWebAdapter.ts +26 -17
  114. package/src/db/adapters/SSRDBAdapter.ts +64 -14
  115. package/src/db/adapters/WebDBAdapter.ts +1 -1
  116. package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +5 -4
  117. package/src/db/adapters/wa-sqlite/DatabaseClient.ts +56 -20
  118. package/src/db/adapters/wa-sqlite/DatabaseServer.ts +12 -15
  119. package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +24 -41
  120. package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +126 -63
  121. package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +24 -0
  122. package/src/db/adapters/wa-sqlite/vfs.ts +67 -54
  123. package/src/db/adapters/web-sql-flags.ts +141 -0
  124. package/src/db/sync/SSRWebStreamingSyncImplementation.ts +22 -4
  125. package/src/db/sync/SharedWebStreamingSyncImplementation.ts +77 -38
  126. package/src/db/sync/WebRemote.ts +26 -23
  127. package/src/db/sync/WebStreamingSyncImplementation.ts +5 -4
  128. package/src/index.ts +3 -1
  129. package/src/worker/db/MultiDatabaseServer.ts +25 -41
  130. package/src/worker/db/WASQLiteDB.worker.ts +35 -0
  131. package/src/worker/db/open-worker-database.ts +62 -0
  132. package/src/worker/sync/AbstractSharedSyncClientProvider.ts +10 -4
  133. package/src/worker/sync/BroadcastLogger.ts +103 -35
  134. package/src/worker/sync/SharedSyncImplementation.ts +63 -62
  135. package/src/worker/sync/SharedSyncImplementation.worker.ts +14 -0
  136. package/src/worker/sync/WorkerClient.ts +4 -4
  137. package/dist/index.react_native_web.js +0 -1879
  138. package/dist/index.react_native_web.js.map +0 -1
  139. package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js +0 -2
  140. package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js.map +0 -1
  141. package/dist/worker/FacadeVFS-d1ZDvud7.js +0 -2
  142. package/dist/worker/FacadeVFS-d1ZDvud7.js.map +0 -1
  143. package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js +0 -2
  144. package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js.map +0 -1
  145. package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js +0 -2
  146. package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js.map +0 -1
  147. package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js +0 -2
  148. package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js.map +0 -1
  149. package/dist/worker/mc-wa-sqlite-DiBqIVE5.js +0 -2
  150. package/dist/worker/mc-wa-sqlite-DiBqIVE5.js.map +0 -1
  151. package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js +0 -2
  152. package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js.map +0 -1
  153. package/dist/worker/wa-sqlite-BlSx7-_P.js +0 -2
  154. package/dist/worker/wa-sqlite-BlSx7-_P.js.map +0 -1
  155. package/dist/worker/wa-sqlite-async-BdR24Ucf.js +0 -2
  156. package/dist/worker/wa-sqlite-async-BdR24Ucf.js.map +0 -1
  157. package/dist/worker/websockets-Q8W_lerF.js +0 -9
  158. package/dist/worker/websockets-Q8W_lerF.js.map +0 -1
  159. package/dist/worker/worker.js +0 -7
  160. package/dist/worker/worker.js.map +0 -1
  161. package/lib/attachments/IndexDBFileSystemAdapter.js.map +0 -1
  162. package/lib/db/NavigatorTriggerClaimManager.js.map +0 -1
  163. package/lib/db/PowerSyncDatabase.d.ts +0 -67
  164. package/lib/db/PowerSyncDatabase.js.map +0 -1
  165. package/lib/db/adapters/AsyncWebAdapter.d.ts +0 -32
  166. package/lib/db/adapters/AsyncWebAdapter.js.map +0 -1
  167. package/lib/db/adapters/SSRDBAdapter.d.ts +0 -17
  168. package/lib/db/adapters/SSRDBAdapter.js +0 -37
  169. package/lib/db/adapters/SSRDBAdapter.js.map +0 -1
  170. package/lib/db/adapters/WebDBAdapter.js.map +0 -1
  171. package/lib/db/adapters/options.d.ts +0 -87
  172. package/lib/db/adapters/options.js +0 -6
  173. package/lib/db/adapters/options.js.map +0 -1
  174. package/lib/db/adapters/resolveAndValidateOptions.d.ts +0 -5
  175. package/lib/db/adapters/resolveAndValidateOptions.js +0 -33
  176. package/lib/db/adapters/resolveAndValidateOptions.js.map +0 -1
  177. package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +0 -1
  178. package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +0 -1
  179. package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +0 -1
  180. package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +0 -1
  181. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -18
  182. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -131
  183. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +0 -1
  184. package/lib/db/adapters/wa-sqlite/vfs.d.ts +0 -50
  185. package/lib/db/adapters/wa-sqlite/vfs.js +0 -77
  186. package/lib/db/adapters/wa-sqlite/vfs.js.map +0 -1
  187. package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +0 -1
  188. package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +0 -1
  189. package/lib/db/sync/WebRemote.d.ts +0 -10
  190. package/lib/db/sync/WebRemote.js +0 -33
  191. package/lib/db/sync/WebRemote.js.map +0 -1
  192. package/lib/db/sync/WebStreamingSyncImplementation.js.map +0 -1
  193. package/lib/db/sync/userAgent.js.map +0 -1
  194. package/lib/index.js.map +0 -1
  195. package/lib/shared/navigator.js.map +0 -1
  196. package/lib/shared/tab_close_signal.js.map +0 -1
  197. package/lib/worker/SharedWorkerConnectionRequest.d.ts +0 -5
  198. package/lib/worker/SharedWorkerConnectionRequest.js +0 -2
  199. package/lib/worker/SharedWorkerConnectionRequest.js.map +0 -1
  200. package/lib/worker/client.d.ts +0 -15
  201. package/lib/worker/client.js +0 -77
  202. package/lib/worker/client.js.map +0 -1
  203. package/lib/worker/db/MultiDatabaseServer.d.ts +0 -22
  204. package/lib/worker/db/MultiDatabaseServer.js.map +0 -1
  205. package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -13
  206. package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +0 -1
  207. package/lib/worker/sync/BroadcastLogger.d.ts +0 -27
  208. package/lib/worker/sync/BroadcastLogger.js +0 -65
  209. package/lib/worker/sync/BroadcastLogger.js.map +0 -1
  210. package/lib/worker/sync/SharedSyncImplementation.js.map +0 -1
  211. package/lib/worker/sync/WorkerClient.js.map +0 -1
  212. package/lib/worker/worker.js +0 -34
  213. package/lib/worker/worker.js.map +0 -1
  214. package/src/db/adapters/options.ts +0 -100
  215. package/src/db/adapters/resolveAndValidateOptions.ts +0 -40
  216. package/src/worker/SharedWorkerConnectionRequest.ts +0 -6
  217. package/src/worker/client.ts +0 -100
  218. package/src/worker/worker.ts +0 -38
  219. /package/dist/{worker/assets/mc-wa-sqlite-async-D6idQS2r.wasm → 2075a31bb151adbb9767.wasm} +0 -0
  220. /package/dist/{worker/assets/wa-sqlite-XZW__iJk.wasm → 3322bc84de986b63c2cd.wasm} +0 -0
  221. /package/dist/{worker/assets/mc-wa-sqlite-CnHbhWvs.wasm → 8e97452e297be23b5e50.wasm} +0 -0
  222. /package/dist/{worker/assets/wa-sqlite-async-rHzzC98y.wasm → fbc178b70d530e8ce02b.wasm} +0 -0
  223. /package/lib/{attachments → src/attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
  224. /package/lib/{attachments → src/attachments}/IndexDBFileSystemAdapter.js +0 -0
  225. /package/lib/{db → src/db}/NavigatorTriggerClaimManager.js +0 -0
  226. /package/lib/{db → src/db}/adapters/WebDBAdapter.js +0 -0
  227. /package/lib/{db → src/db}/sync/userAgent.d.ts +0 -0
  228. /package/lib/{db → src/db}/sync/userAgent.js +0 -0
  229. /package/lib/{shared → src/shared}/navigator.d.ts +0 -0
  230. /package/lib/{shared → src/shared}/navigator.js +0 -0
  231. /package/lib/{shared → src/shared}/tab_close_signal.d.ts +0 -0
  232. /package/lib/{shared → src/shared}/tab_close_signal.js +0 -0
  233. /package/lib/{worker → src/worker}/sync/AbstractSharedSyncClientProvider.js +0 -0
  234. /package/lib/{worker/worker.d.ts → src/worker/sync/SharedSyncImplementation.worker.d.ts} +0 -0
@@ -1,31 +1,34 @@
1
- import { LogRecord, PowerSyncCredentials } from '@powersync/common';
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: SyncStatusJson) => void;
13
+ statusChanged: (status: SyncStatusOptions) => void;
16
14
  protected webDB: WebDBAdapter;
17
- constructor(options: WebStreamingSyncImplementationOptions, statusChanged: (status: SyncStatusJson) => void, webDB: WebDBAdapter);
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").PowerSyncLogger;
23
- log(record: LogRecord): void;
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 worker: WorkerConnection;
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: ResolvedSyncOptions): Promise<void>;
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
- log(record) {
55
- this.logger.log(record);
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
- worker;
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
- this.logLevel = options.logLevel;
74
- this.enableBroadcastLogs = options.enableBroadcastLogs;
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 (typeof syncWorker === 'function') {
77
- this.worker = connectToExistingWorker(syncWorker(), 'sync');
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.worker = connectToWorker({
81
- service: 'sync',
82
- databaseIdentifier: this.webOptions.identifier,
83
- shared: true,
84
- customWorker: syncWorker
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, ({ core, dataFlow }) => {
91
- this.updateSyncStatus(core, dataFlow);
125
+ this.clientProvider = new SharedSyncClientProvider(this.webOptions, (status) => {
126
+ this.updateSyncStatus(status);
92
127
  }, options.db);
93
- this.syncManager = Comlink.wrap(this.worker.endpoint);
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.worker.endpoint);
100
- this.syncManager.setLogLevel(this.logLevel);
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
- serializedSchema: this.options.serializedSchema
133
- },
134
- enableBroadcastLogs: this.enableBroadcastLogs
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, this.options.serializedSchema);
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.worker.close();
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/shared-internals';
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 { LogLevels } from '@powersync/common';
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.log({ level: LogLevels.debug, message: `requesting lock for ${identifier}` });
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/options.js';
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/options.js';
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({ logLevel, database, lockName }) {
18
- const logger = {
19
- log: (record) => {
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(logger, options, lockName) {
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(logger, options);
37
+ server = await this.databaseOpenAttempt(options);
43
38
  }
44
- catch (error) {
45
- this.logger.log({
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(logger, options);
45
+ server ??= await this.databaseOpenAttempt(options);
55
46
  return server.connect(lockName);
56
47
  }
57
- async databaseOpenAttempt(logger, options) {
48
+ async databaseOpenAttempt(options) {
58
49
  return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
59
- const { filename } = options;
60
- let server = this.activeDatabases.get(filename);
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
- const needsNavigatorLocks = !(isSharedWorker || options.readonly);
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(filename);
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(filename, server);
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,4 @@
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';
@@ -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"}