@powersync/web 1.39.0 → 2.1.0

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 (243) hide show
  1. package/README.md +0 -10
  2. package/bin/powersync.cjs +1 -1
  3. package/dist/index.react_native_web.js +1992 -0
  4. package/dist/index.react_native_web.js.map +1 -0
  5. package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js +2 -0
  6. package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js.map +1 -0
  7. package/dist/worker/FacadeVFS-d1ZDvud7.js +2 -0
  8. package/dist/worker/FacadeVFS-d1ZDvud7.js.map +1 -0
  9. package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js +2 -0
  10. package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js.map +1 -0
  11. package/dist/worker/MemoryVFS-DVJL5F8j.js +2 -0
  12. package/dist/worker/MemoryVFS-DVJL5F8j.js.map +1 -0
  13. package/dist/worker/OPFSCoopSyncVFS-BgTiWPfa.js +2 -0
  14. package/dist/worker/OPFSCoopSyncVFS-BgTiWPfa.js.map +1 -0
  15. package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js +2 -0
  16. package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js.map +1 -0
  17. package/dist/worker/assets/mc-wa-sqlite-DoDpgFfE.wasm +0 -0
  18. package/dist/worker/assets/mc-wa-sqlite-async-DYagSq56.wasm +0 -0
  19. package/dist/worker/assets/wa-sqlite-CagagB9I.wasm +0 -0
  20. package/dist/worker/assets/wa-sqlite-async-DCIP8kAx.wasm +0 -0
  21. package/dist/worker/mc-wa-sqlite-DDFgWP93.js +2 -0
  22. package/dist/worker/mc-wa-sqlite-DDFgWP93.js.map +1 -0
  23. package/dist/worker/mc-wa-sqlite-async-lGclTjKJ.js +2 -0
  24. package/dist/worker/mc-wa-sqlite-async-lGclTjKJ.js.map +1 -0
  25. package/dist/worker/wa-sqlite-B0tZMM0j.js +2 -0
  26. package/dist/worker/wa-sqlite-B0tZMM0j.js.map +1 -0
  27. package/dist/worker/wa-sqlite-async-CM6BmfRh.js +2 -0
  28. package/dist/worker/wa-sqlite-async-CM6BmfRh.js.map +1 -0
  29. package/dist/worker/websockets-Q8W_lerF.js +9 -0
  30. package/dist/worker/websockets-Q8W_lerF.js.map +1 -0
  31. package/dist/worker/worker.js +7 -0
  32. package/dist/worker/worker.js.map +1 -0
  33. package/lib/attachments/IndexDBFileSystemAdapter.js.map +1 -0
  34. package/lib/{src/db → db}/NavigatorTriggerClaimManager.d.ts +1 -1
  35. package/lib/db/NavigatorTriggerClaimManager.js.map +1 -0
  36. package/lib/db/PowerSyncDatabase.d.ts +67 -0
  37. package/lib/{src/db → db}/PowerSyncDatabase.js +49 -63
  38. package/lib/db/PowerSyncDatabase.js.map +1 -0
  39. package/lib/db/adapters/AsyncWebAdapter.d.ts +32 -0
  40. package/lib/{src/db → db}/adapters/AsyncWebAdapter.js +15 -15
  41. package/lib/db/adapters/AsyncWebAdapter.js.map +1 -0
  42. package/lib/db/adapters/SSRDBAdapter.d.ts +17 -0
  43. package/lib/db/adapters/SSRDBAdapter.js +37 -0
  44. package/lib/db/adapters/SSRDBAdapter.js.map +1 -0
  45. package/lib/{src/db → db}/adapters/WebDBAdapter.d.ts +1 -1
  46. package/lib/db/adapters/WebDBAdapter.js.map +1 -0
  47. package/lib/db/adapters/options.d.ts +87 -0
  48. package/lib/db/adapters/options.js +6 -0
  49. package/lib/db/adapters/options.js.map +1 -0
  50. package/lib/db/adapters/resolveAndValidateOptions.d.ts +13 -0
  51. package/lib/db/adapters/resolveAndValidateOptions.js +41 -0
  52. package/lib/db/adapters/resolveAndValidateOptions.js.map +1 -0
  53. package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +3 -4
  54. package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.js +2 -2
  55. package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
  56. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
  57. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.js +11 -37
  58. package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
  59. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
  60. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.js +14 -7
  61. package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
  62. package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +22 -12
  63. package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.js +12 -9
  64. package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
  65. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +18 -0
  66. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +137 -0
  67. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
  68. package/lib/{src/db → db}/adapters/wa-sqlite/vfs.d.ts +9 -2
  69. package/lib/{src/db → db}/adapters/wa-sqlite/vfs.js +6 -6
  70. package/lib/db/adapters/wa-sqlite/vfs.js.map +1 -0
  71. package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.d.ts +4 -8
  72. package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.js +4 -11
  73. package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
  74. package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.d.ts +13 -14
  75. package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.js +32 -66
  76. package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
  77. package/lib/db/sync/TabLocalStreamingSyncImplementation.d.ts +19 -0
  78. package/lib/db/sync/TabLocalStreamingSyncImplementation.js +70 -0
  79. package/lib/db/sync/TabLocalStreamingSyncImplementation.js.map +1 -0
  80. package/lib/db/sync/WebRemote.d.ts +10 -0
  81. package/lib/db/sync/WebRemote.js +33 -0
  82. package/lib/db/sync/WebRemote.js.map +1 -0
  83. package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.d.ts +2 -4
  84. package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.js +3 -2
  85. package/lib/db/sync/WebStreamingSyncImplementation.js.map +1 -0
  86. package/lib/db/sync/userAgent.js.map +1 -0
  87. package/lib/{src/index.d.ts → index.d.ts} +1 -3
  88. package/lib/{src/index.js → index.js} +1 -3
  89. package/lib/index.js.map +1 -0
  90. package/lib/shared/navigator.js.map +1 -0
  91. package/lib/shared/tab_close_signal.js.map +1 -0
  92. package/lib/worker/SharedWorkerConnectionRequest.d.ts +5 -0
  93. package/lib/worker/SharedWorkerConnectionRequest.js +2 -0
  94. package/lib/worker/SharedWorkerConnectionRequest.js.map +1 -0
  95. package/lib/worker/client.d.ts +17 -0
  96. package/lib/worker/client.js +90 -0
  97. package/lib/worker/client.js.map +1 -0
  98. package/lib/worker/db/MultiDatabaseServer.d.ts +22 -0
  99. package/lib/{src/worker → worker}/db/MultiDatabaseServer.js +25 -15
  100. package/lib/worker/db/MultiDatabaseServer.js.map +1 -0
  101. package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +13 -0
  102. package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
  103. package/lib/worker/sync/BroadcastLogger.d.ts +27 -0
  104. package/lib/worker/sync/BroadcastLogger.js +65 -0
  105. package/lib/worker/sync/BroadcastLogger.js.map +1 -0
  106. package/lib/{src/worker → worker}/sync/SharedSyncImplementation.d.ts +12 -15
  107. package/lib/{src/worker → worker}/sync/SharedSyncImplementation.js +44 -44
  108. package/lib/worker/sync/SharedSyncImplementation.js.map +1 -0
  109. package/lib/{src/worker → worker}/sync/WorkerClient.d.ts +3 -3
  110. package/lib/{src/worker → worker}/sync/WorkerClient.js +2 -2
  111. package/lib/worker/sync/WorkerClient.js.map +1 -0
  112. package/lib/worker/worker.js +34 -0
  113. package/lib/worker/worker.js.map +1 -0
  114. package/package.json +23 -31
  115. package/src/db/NavigatorTriggerClaimManager.ts +1 -1
  116. package/src/db/PowerSyncDatabase.ts +83 -127
  117. package/src/db/adapters/AsyncWebAdapter.ts +18 -27
  118. package/src/db/adapters/SSRDBAdapter.ts +14 -64
  119. package/src/db/adapters/WebDBAdapter.ts +1 -1
  120. package/src/db/adapters/options.ts +100 -0
  121. package/src/db/adapters/resolveAndValidateOptions.ts +49 -0
  122. package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +4 -5
  123. package/src/db/adapters/wa-sqlite/DatabaseClient.ts +20 -56
  124. package/src/db/adapters/wa-sqlite/DatabaseServer.ts +18 -12
  125. package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +36 -23
  126. package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +70 -125
  127. package/src/db/adapters/wa-sqlite/vfs.ts +13 -8
  128. package/src/db/sync/SSRWebStreamingSyncImplementation.ts +4 -22
  129. package/src/db/sync/SharedWebStreamingSyncImplementation.ts +39 -77
  130. package/src/db/sync/TabLocalStreamingSyncImplementation.ts +90 -0
  131. package/src/db/sync/WebRemote.ts +23 -26
  132. package/src/db/sync/WebStreamingSyncImplementation.ts +4 -5
  133. package/src/index.ts +1 -3
  134. package/src/worker/SharedWorkerConnectionRequest.ts +6 -0
  135. package/src/worker/client.ts +121 -0
  136. package/src/worker/db/MultiDatabaseServer.ts +40 -22
  137. package/src/worker/sync/AbstractSharedSyncClientProvider.ts +4 -10
  138. package/src/worker/sync/BroadcastLogger.ts +35 -103
  139. package/src/worker/sync/SharedSyncImplementation.ts +65 -64
  140. package/src/worker/sync/WorkerClient.ts +4 -4
  141. package/src/worker/worker.ts +38 -0
  142. package/dist/2075a31bb151adbb9767.wasm +0 -0
  143. package/dist/3322bc84de986b63c2cd.wasm +0 -0
  144. package/dist/8e97452e297be23b5e50.wasm +0 -0
  145. package/dist/fbc178b70d530e8ce02b.wasm +0 -0
  146. package/dist/index.umd.js +0 -7821
  147. package/dist/index.umd.js.map +0 -1
  148. package/dist/worker/SharedSyncImplementation.umd.js +0 -16142
  149. package/dist/worker/SharedSyncImplementation.umd.js.map +0 -1
  150. package/dist/worker/WASQLiteDB.umd.js +0 -17437
  151. package/dist/worker/WASQLiteDB.umd.js.map +0 -1
  152. 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
  153. 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
  154. 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
  155. 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
  156. 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
  157. 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
  158. 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
  159. 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
  160. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +0 -3562
  161. 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
  162. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js +0 -1400
  163. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js.map +0 -1
  164. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +0 -2478
  165. 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
  166. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +0 -1681
  167. 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
  168. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +0 -1820
  169. 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
  170. package/lib/package.json +0 -91
  171. package/lib/src/attachments/IndexDBFileSystemAdapter.js.map +0 -1
  172. package/lib/src/db/NavigatorTriggerClaimManager.js.map +0 -1
  173. package/lib/src/db/PowerSyncDatabase.d.ts +0 -78
  174. package/lib/src/db/PowerSyncDatabase.js.map +0 -1
  175. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +0 -23
  176. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +0 -27
  177. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js.map +0 -1
  178. package/lib/src/db/adapters/AsyncWebAdapter.d.ts +0 -50
  179. package/lib/src/db/adapters/AsyncWebAdapter.js.map +0 -1
  180. package/lib/src/db/adapters/SSRDBAdapter.d.ts +0 -30
  181. package/lib/src/db/adapters/SSRDBAdapter.js +0 -69
  182. package/lib/src/db/adapters/SSRDBAdapter.js.map +0 -1
  183. package/lib/src/db/adapters/WebDBAdapter.js.map +0 -1
  184. package/lib/src/db/adapters/wa-sqlite/ConcurrentConnection.js.map +0 -1
  185. package/lib/src/db/adapters/wa-sqlite/DatabaseClient.js.map +0 -1
  186. package/lib/src/db/adapters/wa-sqlite/DatabaseServer.js.map +0 -1
  187. package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js.map +0 -1
  188. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -45
  189. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -146
  190. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +0 -1
  191. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +0 -15
  192. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +0 -22
  193. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js.map +0 -1
  194. package/lib/src/db/adapters/wa-sqlite/vfs.js.map +0 -1
  195. package/lib/src/db/adapters/web-sql-flags.d.ts +0 -92
  196. package/lib/src/db/adapters/web-sql-flags.js +0 -37
  197. package/lib/src/db/adapters/web-sql-flags.js.map +0 -1
  198. package/lib/src/db/sync/SSRWebStreamingSyncImplementation.js.map +0 -1
  199. package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js.map +0 -1
  200. package/lib/src/db/sync/WebRemote.d.ts +0 -7
  201. package/lib/src/db/sync/WebRemote.js +0 -33
  202. package/lib/src/db/sync/WebRemote.js.map +0 -1
  203. package/lib/src/db/sync/WebStreamingSyncImplementation.js.map +0 -1
  204. package/lib/src/db/sync/userAgent.js.map +0 -1
  205. package/lib/src/index.js.map +0 -1
  206. package/lib/src/shared/navigator.js.map +0 -1
  207. package/lib/src/shared/tab_close_signal.js.map +0 -1
  208. package/lib/src/worker/db/MultiDatabaseServer.d.ts +0 -17
  209. package/lib/src/worker/db/MultiDatabaseServer.js.map +0 -1
  210. package/lib/src/worker/db/WASQLiteDB.worker.d.ts +0 -4
  211. package/lib/src/worker/db/WASQLiteDB.worker.js +0 -31
  212. package/lib/src/worker/db/WASQLiteDB.worker.js.map +0 -1
  213. package/lib/src/worker/db/open-worker-database.d.ts +0 -14
  214. package/lib/src/worker/db/open-worker-database.js +0 -53
  215. package/lib/src/worker/db/open-worker-database.js.map +0 -1
  216. package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -19
  217. package/lib/src/worker/sync/AbstractSharedSyncClientProvider.js.map +0 -1
  218. package/lib/src/worker/sync/BroadcastLogger.d.ts +0 -47
  219. package/lib/src/worker/sync/BroadcastLogger.js +0 -129
  220. package/lib/src/worker/sync/BroadcastLogger.js.map +0 -1
  221. package/lib/src/worker/sync/SharedSyncImplementation.js.map +0 -1
  222. package/lib/src/worker/sync/SharedSyncImplementation.worker.js +0 -12
  223. package/lib/src/worker/sync/SharedSyncImplementation.worker.js.map +0 -1
  224. package/lib/src/worker/sync/WorkerClient.js.map +0 -1
  225. package/lib/tsconfig.tsbuildinfo +0 -1
  226. package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +0 -47
  227. package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +0 -24
  228. package/src/db/adapters/web-sql-flags.ts +0 -141
  229. package/src/worker/db/WASQLiteDB.worker.ts +0 -35
  230. package/src/worker/db/open-worker-database.ts +0 -62
  231. package/src/worker/sync/SharedSyncImplementation.worker.ts +0 -14
  232. /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
  233. /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.js +0 -0
  234. /package/lib/{src/db → db}/NavigatorTriggerClaimManager.js +0 -0
  235. /package/lib/{src/db → db}/adapters/WebDBAdapter.js +0 -0
  236. /package/lib/{src/db → db}/sync/userAgent.d.ts +0 -0
  237. /package/lib/{src/db → db}/sync/userAgent.js +0 -0
  238. /package/lib/{src/shared → shared}/navigator.d.ts +0 -0
  239. /package/lib/{src/shared → shared}/navigator.js +0 -0
  240. /package/lib/{src/shared → shared}/tab_close_signal.d.ts +0 -0
  241. /package/lib/{src/shared → shared}/tab_close_signal.js +0 -0
  242. /package/lib/{src/worker → worker}/sync/AbstractSharedSyncClientProvider.js +0 -0
  243. /package/lib/{src/worker/sync/SharedSyncImplementation.worker.d.ts → worker/worker.d.ts} +0 -0
@@ -0,0 +1,17 @@
1
+ import { PowerSyncLogger } from '@powersync/common';
2
+ import { WorkerService } from './SharedWorkerConnectionRequest.js';
3
+ export interface OpenWorkerOptions {
4
+ service: WorkerService;
5
+ databaseIdentifier: string;
6
+ customWorker?: string | URL;
7
+ shared: boolean;
8
+ loggerForErrors: PowerSyncLogger;
9
+ }
10
+ export interface WorkerConnection {
11
+ endpoint: MessagePort | Worker;
12
+ worker: Worker | SharedWorker;
13
+ close: () => void;
14
+ }
15
+ export declare function connectToWorker({ service, databaseIdentifier, customWorker, shared, loggerForErrors }: OpenWorkerOptions): WorkerConnection;
16
+ export declare function connectToExistingWorker(worker: Worker | SharedWorker, logger: PowerSyncLogger, service: WorkerService): WorkerConnection;
17
+ export declare function isSharedWorker(worker: Worker | SharedWorker): worker is SharedWorker;
@@ -0,0 +1,90 @@
1
+ import { LogLevels } from '@powersync/common';
2
+ export function connectToWorker({ service, databaseIdentifier, customWorker, shared, loggerForErrors }) {
3
+ const name = `${shared ? 'shared-' : ''}powersync-${databaseIdentifier}`;
4
+ let worker;
5
+ if (customWorker) {
6
+ worker = shared
7
+ ? new SharedWorker(customWorker, {
8
+ /* @vite-ignore */
9
+ name,
10
+ type: 'module'
11
+ })
12
+ : new Worker(customWorker, {
13
+ /* @vite-ignore */
14
+ name,
15
+ type: 'module'
16
+ });
17
+ }
18
+ else {
19
+ worker = spawnDefaultPowerSyncWorker(shared, name);
20
+ }
21
+ return connectToExistingWorker(worker, loggerForErrors, service);
22
+ }
23
+ /**
24
+ * Opens the default PowerSync worker.
25
+ *
26
+ * When users depend on the web SDK, we assume they use their own bundler (either vite or webpack). Both recognize the
27
+ * syntax of worker constructors with a string literal and will rewrite the URL as part of their bundling processes.
28
+ *
29
+ * React Native / Metro users can't rely on this on the web, as their app is not a JavaScript module and import.meta.url
30
+ * is not rewritten by Metro. For those users, we include a pre-bundled worker they can copy into a static assets
31
+ * directory and load with a custom URI. This also means that defaultWorker cannot work with Metro for React Native Web.
32
+ * We have a custom rollup plugin and conditional exports that replaces this function with a throwing stub for that
33
+ * platform. This allows a helpful error message.
34
+ */
35
+ // Note: When changing this function, also update disableDefaultWorkers in rollup.config.ts.
36
+ function spawnDefaultPowerSyncWorker(shared, name) {
37
+ return shared
38
+ ? new SharedWorker(new URL('./worker.js', import.meta.url), {
39
+ /* @vite-ignore */
40
+ name,
41
+ type: 'module'
42
+ })
43
+ : new Worker(new URL('./worker.js', import.meta.url), {
44
+ /* @vite-ignore */
45
+ name,
46
+ type: 'module'
47
+ });
48
+ }
49
+ export function connectToExistingWorker(worker, logger, service) {
50
+ function logError(event) {
51
+ // TODO: Ideally, we should be able to handle worker errors by forwarding them to async Comlink callers.
52
+ // Currently, comlink calls on errored workers would just be stuck forever.
53
+ logger.log({
54
+ level: LogLevels.error,
55
+ error: event.error,
56
+ message: 'Error in database or sync worker, this likely disrupts PowerSync.'
57
+ });
58
+ }
59
+ worker.addEventListener('error', logError);
60
+ const isShared = isSharedWorker(worker);
61
+ if (isShared) {
62
+ const { port1, port2 } = new MessageChannel();
63
+ const mainPort = worker.port;
64
+ mainPort.start();
65
+ mainPort.postMessage({ port: port1, service }, [port1]);
66
+ port2.start();
67
+ return {
68
+ endpoint: port2,
69
+ worker,
70
+ close() {
71
+ worker.removeEventListener('error', logError);
72
+ port2.close();
73
+ }
74
+ };
75
+ }
76
+ else {
77
+ return {
78
+ endpoint: worker,
79
+ worker,
80
+ close() {
81
+ worker.removeEventListener('error', logError);
82
+ worker.terminate();
83
+ }
84
+ };
85
+ }
86
+ }
87
+ export function isSharedWorker(worker) {
88
+ return 'port' in worker;
89
+ }
90
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/worker/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { PowerSyncLogger } from '@powersync/common';
2
+ import { ClientConnectionView } from '../../db/adapters/wa-sqlite/DatabaseServer.js';
3
+ import { RawWaSqliteDatabaseOptions } from '../../db/adapters/wa-sqlite/RawSqliteConnection.js';
4
+ export interface ConnectToMultiDatabaseServerOptions {
5
+ logLevel: number;
6
+ database: RawWaSqliteDatabaseOptions;
7
+ lockName: string;
8
+ }
9
+ /**
10
+ * Shared state to manage multiple database connections hosted by a worker.
11
+ */
12
+ export declare class MultiDatabaseServer {
13
+ readonly logger: PowerSyncLogger;
14
+ private activeDatabases;
15
+ constructor(logger: PowerSyncLogger);
16
+ handleConnection({ logLevel, database, lockName }: ConnectToMultiDatabaseServerOptions): Promise<ClientConnectionView>;
17
+ connectToExisting(name: string, lockName: string): Promise<ClientConnectionView>;
18
+ openConnectionLocally(logger: PowerSyncLogger, options: RawWaSqliteDatabaseOptions, lockName?: string): Promise<ClientConnectionView>;
19
+ private databaseOpenAttempt;
20
+ closeAll(): Promise<void[]>;
21
+ }
22
+ export declare const isSharedWorker: boolean;
@@ -1,3 +1,4 @@
1
+ import { LogLevels } from '@powersync/common';
1
2
  import * as Comlink from 'comlink';
2
3
  import { DatabaseServer } from '../../db/adapters/wa-sqlite/DatabaseServer.js';
3
4
  import { getNavigatorLocks } from '../../shared/navigator.js';
@@ -14,9 +15,14 @@ export class MultiDatabaseServer {
14
15
  constructor(logger) {
15
16
  this.logger = logger;
16
17
  }
17
- async handleConnection(options) {
18
- this.logger.setLevel(options.logLevel);
19
- return Comlink.proxy(await this.openConnectionLocally(options, options.lockName));
18
+ async handleConnection({ logLevel, database, lockName }) {
19
+ const logger = {
20
+ log: (record) => {
21
+ if (record.level >= logLevel)
22
+ this.logger.log(record);
23
+ }
24
+ };
25
+ return Comlink.proxy(await this.openConnectionLocally(logger, database, lockName));
20
26
  }
21
27
  async connectToExisting(name, lockName) {
22
28
  return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
@@ -27,34 +33,38 @@ export class MultiDatabaseServer {
27
33
  return Comlink.proxy(await server.connect(lockName));
28
34
  });
29
35
  }
30
- async openConnectionLocally(options, lockName) {
36
+ async openConnectionLocally(logger, options, lockName) {
31
37
  // Especially on Firefox, we're sometimes seeing "NoModificationAllowedError"s when opening OPFS databases we can
32
38
  // work around by retrying.
33
39
  const maxAttempts = 3;
34
40
  let server;
35
41
  for (let count = 0; count < maxAttempts - 1; count++) {
36
42
  try {
37
- server = await this.databaseOpenAttempt(options);
43
+ server = await this.databaseOpenAttempt(logger, options);
38
44
  }
39
- catch (ex) {
40
- this.logger.warn(`Attempt ${count + 1} of ${maxAttempts} to open database failed, retrying in 1 second...`, ex);
45
+ catch (error) {
46
+ this.logger.log({
47
+ level: LogLevels.warn,
48
+ message: `Attempt ${count + 1} of ${maxAttempts} to open database failed, retrying in 1 second...`,
49
+ error
50
+ });
41
51
  await new Promise((resolve) => setTimeout(resolve, 1000));
42
52
  }
43
53
  }
44
54
  // Final attempt if we haven't been able to open the server - rethrow errors if we still can't open.
45
- server ??= await this.databaseOpenAttempt(options);
55
+ server ??= await this.databaseOpenAttempt(logger, options);
46
56
  return server.connect(lockName);
47
57
  }
48
- async databaseOpenAttempt(options) {
58
+ async databaseOpenAttempt(logger, options) {
49
59
  return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
50
- const { dbFilename, isReadOnly, vfs } = options;
51
- let server = this.activeDatabases.get(dbFilename);
60
+ const { filename, readonly, vfs } = options;
61
+ let server = this.activeDatabases.get(filename);
52
62
  if (server == null) {
53
63
  // We don't need navigator locks for shared workers because all queries run in this shared worker exclusively.
54
64
  // For read-only connections, we use a VFS that supports concurrent reads (so a single lock on the connection is
55
65
  // fine). In-memory databases either run in a shared worker or aren't shared across tabs at all, so the internal
56
66
  // lock is enough.
57
- const needsNavigatorLocks = !(isSharedWorker || isReadOnly || vfs == WASQLiteVFS.InMemoryVfs);
67
+ const needsNavigatorLocks = !(isSharedWorker || readonly || vfs == WASQLiteVFS.InMemoryVfs);
58
68
  const connection = new RawSqliteConnection(options);
59
69
  const withSafeConcurrency = new ConcurrentSqliteConnection(connection, needsNavigatorLocks);
60
70
  // Initializing the RawSqliteConnection will run some pragmas that might write to the database file, so we want
@@ -70,13 +80,13 @@ export class MultiDatabaseServer {
70
80
  throw e;
71
81
  }
72
82
  returnLease();
73
- const onClose = () => this.activeDatabases.delete(dbFilename);
83
+ const onClose = () => this.activeDatabases.delete(filename);
74
84
  server = new DatabaseServer({
75
85
  inner: withSafeConcurrency,
76
- logger: this.logger,
86
+ logger,
77
87
  onClose
78
88
  });
79
- this.activeDatabases.set(dbFilename, server);
89
+ this.activeDatabases.set(filename, server);
80
90
  }
81
91
  return server;
82
92
  });
@@ -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,13 @@
1
+ import type { LogRecord, PowerSyncCredentials } from '@powersync/common';
2
+ import { SyncStatusJson } from '@powersync/shared-internals';
3
+ /**
4
+ * The client side port should provide these methods.
5
+ */
6
+ export declare abstract class AbstractSharedSyncClientProvider {
7
+ abstract fetchCredentials(): Promise<PowerSyncCredentials | null>;
8
+ abstract invalidateCredentials(): void;
9
+ abstract uploadCrud(): Promise<void>;
10
+ abstract statusChanged(status: SyncStatusJson): void;
11
+ abstract getDBWorkerPort(): Promise<MessagePort>;
12
+ abstract log(record: LogRecord): void;
13
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractSharedSyncClientProvider.js","sourceRoot":"","sources":["../../../src/worker/sync/AbstractSharedSyncClientProvider.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAgB,gCAAgC;CAQrD"}
@@ -0,0 +1,27 @@
1
+ import { PowerSyncLogger, LogRecord } from '@powersync/common';
2
+ import { type WrappedSyncPort } from './SharedSyncImplementation.js';
3
+ /**
4
+ * Broadcasts logs to all clients
5
+ */
6
+ export declare class BroadcastLogger implements PowerSyncLogger {
7
+ private clients;
8
+ private readonly inner;
9
+ private currentLevel;
10
+ sendBroadcasts: boolean;
11
+ constructor(prefix: string, clients: WrappedSyncPort[]);
12
+ log(record: LogRecord): void;
13
+ /**
14
+ * Set the global log level.
15
+ */
16
+ setLevel(level: number): void;
17
+ /**
18
+ * Iterates all clients, catches individual client exceptions
19
+ * and proceeds to execute for all clients.
20
+ */
21
+ protected iterateClients(callback: (client: WrappedSyncPort) => Promise<void>): Promise<void>;
22
+ /**
23
+ * Guards against any logging errors.
24
+ * We don't want a logging exception to cause further issues upstream
25
+ */
26
+ protected sanitizeRecord(record: LogRecord): LogRecord;
27
+ }
@@ -0,0 +1,65 @@
1
+ import { LogLevels, createConsoleLogger } from '@powersync/common';
2
+ /**
3
+ * Broadcasts logs to all clients
4
+ */
5
+ export class BroadcastLogger {
6
+ clients;
7
+ inner;
8
+ currentLevel = LogLevels.info;
9
+ sendBroadcasts = true;
10
+ constructor(prefix, clients) {
11
+ this.clients = clients;
12
+ this.inner = createConsoleLogger({ prefix: prefix });
13
+ }
14
+ log(record) {
15
+ this.inner.log(record);
16
+ if (this.sendBroadcasts && record.level >= this.currentLevel) {
17
+ const sanitized = this.sanitizeRecord(record);
18
+ this.iterateClients((client) => client.clientProvider.log(sanitized));
19
+ }
20
+ }
21
+ /**
22
+ * Set the global log level.
23
+ */
24
+ setLevel(level) {
25
+ this.inner.minLevel = level;
26
+ this.currentLevel = level;
27
+ }
28
+ /**
29
+ * Iterates all clients, catches individual client exceptions
30
+ * and proceeds to execute for all clients.
31
+ */
32
+ async iterateClients(callback) {
33
+ for (const client of this.clients) {
34
+ try {
35
+ await callback(client);
36
+ }
37
+ catch (ex) {
38
+ console.error('Caught exception when iterating client', ex);
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * Guards against any logging errors.
44
+ * We don't want a logging exception to cause further issues upstream
45
+ */
46
+ sanitizeRecord(record) {
47
+ if (!record.error) {
48
+ return record;
49
+ }
50
+ let error;
51
+ try {
52
+ // Try and clone here first. If it fails it won't be passable over a MessagePort
53
+ error = structuredClone(record.error);
54
+ }
55
+ catch (ex) {
56
+ console.error(ex);
57
+ error = 'Could not serialize log params. Check shared worker logs for more details.';
58
+ }
59
+ return {
60
+ ...record,
61
+ error
62
+ };
63
+ }
64
+ }
65
+ //# sourceMappingURL=BroadcastLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BroadcastLogger.js","sourceRoot":"","sources":["../../../src/worker/sync/BroadcastLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAuB,mBAAmB,EAAa,MAAM,mBAAmB,CAAC;AAGpH;;GAEG;AACH,MAAM,OAAO,eAAe;IAQhB;IAPO,KAAK,CAAwC;IACtD,YAAY,GAAW,SAAS,CAAC,IAAI,CAAC;IAE9C,cAAc,GAAG,IAAI,CAAC;IAEtB,YACE,MAAc,EACN,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;QAElC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,MAAiB;QACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,cAAc,CAAC,QAAoD;QACjF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACO,cAAc,CAAC,MAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,gFAAgF;YAChF,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,KAAK,GAAG,4EAA4E,CAAC;QACvF,CAAC;QAED,OAAO;YACL,GAAG,MAAM;YACT,KAAK;SACN,CAAC;IACJ,CAAC;CACF"}
@@ -1,8 +1,10 @@
1
- import { BaseObserver, ConnectionManager, DBAdapter, SubscribedStream, SyncStatus, Mutex, type ILogLevel, type ILogger, type PowerSyncConnectionOptions, type StreamingSyncImplementation, type StreamingSyncImplementationListener, type SyncStatusOptions } from '@powersync/common';
1
+ import { BaseObserver, DBAdapter, SyncStatus } from '@powersync/common';
2
+ import { ConnectionManager, SubscribedStream, type StreamingSyncImplementation, type StreamingSyncImplementationListener, Mutex, ResolvedSyncOptions } from '@powersync/shared-internals';
2
3
  import * as Comlink from 'comlink';
3
4
  import { WebStreamingSyncImplementation, WebStreamingSyncImplementationOptions } from '../../db/sync/WebStreamingSyncImplementation.js';
4
- import { ResolvedWebSQLOpenOptions } from '../../db/adapters/web-sql-flags.js';
5
5
  import { AbstractSharedSyncClientProvider } from './AbstractSharedSyncClientProvider.js';
6
+ import { BroadcastLogger } from './BroadcastLogger.js';
7
+ import { ResolvedWebSQLOpenOptions } from '../../db/adapters/options.js';
6
8
  /**
7
9
  * @internal
8
10
  * Manual message events for shared sync clients
@@ -26,8 +28,9 @@ export type ManualSharedSyncPayload = {
26
28
  * @internal
27
29
  */
28
30
  export type SharedSyncInitOptions = {
29
- streamOptions: Omit<WebStreamingSyncImplementationOptions, 'adapter' | 'uploadCrud' | 'remote' | 'subscriptions'>;
31
+ streamOptions: Omit<WebStreamingSyncImplementationOptions, 'adapter' | 'uploadCrud' | 'remote' | 'subscriptions' | 'logger'>;
30
32
  dbParams: ResolvedWebSQLOpenOptions;
33
+ enableBroadcastLogs: boolean;
31
34
  };
32
35
  /**
33
36
  * @internal
@@ -64,14 +67,14 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
64
67
  protected fetchCredentialsController?: RemoteOperationAbortController;
65
68
  protected uploadDataController?: RemoteOperationAbortController;
66
69
  protected syncParams: SharedSyncInitOptions | null;
67
- protected logger: ILogger;
68
- protected lastConnectOptions: PowerSyncConnectionOptions | undefined;
70
+ protected lastConnectOptions: ResolvedSyncOptions | undefined;
69
71
  protected portMutex: Mutex;
70
72
  private subscriptions;
71
73
  protected connectionManager: ConnectionManager;
72
- syncStatus: SyncStatus;
73
- broadCastLogger: ILogger;
74
+ private syncStatus?;
75
+ logger: BroadcastLogger;
74
76
  protected readonly database: DBAdapter;
77
+ private sharedCloseSignal;
75
78
  constructor();
76
79
  get isConnected(): boolean;
77
80
  /**
@@ -83,12 +86,11 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
83
86
  * This returns a random port which is not closing.
84
87
  */
85
88
  protected getRandomWrappedPort(): Promise<WrappedSyncPort | undefined>;
86
- waitForStatus(status: SyncStatusOptions): Promise<void>;
87
89
  waitUntilStatusMatches(predicate: (status: SyncStatus) => boolean): Promise<void>;
88
90
  waitForReady(): Promise<void>;
89
91
  private collectActiveSubscriptions;
90
92
  updateSubscriptions(port: WrappedSyncPort, subscriptions: SubscribedStream[]): void;
91
- setLogLevel(level: ILogLevel): void;
93
+ setLogLevel(level: number): void;
92
94
  /**
93
95
  * Configures the DBAdapter connection and a streaming sync client.
94
96
  */
@@ -100,7 +102,7 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
100
102
  * The connection will simply be reconnected whenever a new tab
101
103
  * connects.
102
104
  */
103
- connect(options?: PowerSyncConnectionOptions): Promise<void>;
105
+ connect(options: ResolvedSyncOptions, serializedSchema: any): Promise<void>;
104
106
  disconnect(): Promise<void>;
105
107
  /**
106
108
  * Adds a new client tab's message port to the list of connected ports
@@ -126,9 +128,4 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
126
128
  */
127
129
  private openInternalDB;
128
130
  private generateReconnectableDatabase;
129
- /**
130
- * A method to update the all shared statuses for each
131
- * client.
132
- */
133
- private updateAllStatuses;
134
131
  }