@powersync/web 0.0.0-dev-20260708104358 → 0.0.0-dev-20260917074240

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 (267) hide show
  1. package/README.md +1 -11
  2. package/bin/powersync.cjs +1 -1
  3. package/dist/index.react_native_web.js +2095 -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-Rt5CGCZP.js +2 -0
  16. package/dist/worker/OPFSWriteAheadVFS-Rt5CGCZP.js.map +1 -0
  17. package/dist/worker/assets/mc-wa-sqlite-BHScYYZw.wasm +0 -0
  18. package/dist/worker/assets/mc-wa-sqlite-async-DdlQmAUV.wasm +0 -0
  19. package/dist/worker/assets/wa-sqlite-CIxTmRHQ.wasm +0 -0
  20. package/dist/worker/assets/wa-sqlite-async-zc68fxQq.wasm +0 -0
  21. package/dist/worker/mc-wa-sqlite-PubB6u8c.js +2 -0
  22. package/dist/worker/mc-wa-sqlite-PubB6u8c.js.map +1 -0
  23. package/dist/worker/mc-wa-sqlite-async-DJG_ANKO.js +2 -0
  24. package/dist/worker/mc-wa-sqlite-async-DJG_ANKO.js.map +1 -0
  25. package/dist/worker/wa-sqlite-D1_4mGs8.js +2 -0
  26. package/dist/worker/wa-sqlite-D1_4mGs8.js.map +1 -0
  27. package/dist/worker/wa-sqlite-async-BxkwNY-2.js +2 -0
  28. package/dist/worker/wa-sqlite-async-BxkwNY-2.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 +66 -0
  37. package/lib/{src/db → db}/PowerSyncDatabase.js +60 -79
  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 +18 -69
  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/acquireFromPool.d.ts +7 -0
  48. package/lib/db/adapters/acquireFromPool.js +60 -0
  49. package/lib/db/adapters/acquireFromPool.js.map +1 -0
  50. package/lib/db/adapters/memory-pool/client.d.ts +70 -0
  51. package/lib/db/adapters/memory-pool/client.js +269 -0
  52. package/lib/db/adapters/memory-pool/client.js.map +1 -0
  53. package/lib/db/adapters/memory-pool/shared.d.ts +51 -0
  54. package/lib/db/adapters/memory-pool/shared.js +16 -0
  55. package/lib/db/adapters/memory-pool/shared.js.map +1 -0
  56. package/lib/db/adapters/memory-pool/vfs.d.ts +19 -0
  57. package/lib/db/adapters/memory-pool/vfs.js +247 -0
  58. package/lib/db/adapters/memory-pool/vfs.js.map +1 -0
  59. package/lib/db/adapters/memory-pool/worker.js +45 -0
  60. package/lib/db/adapters/memory-pool/worker.js.map +1 -0
  61. package/lib/db/adapters/options.d.ts +94 -0
  62. package/lib/db/adapters/options.js +6 -0
  63. package/lib/db/adapters/options.js.map +1 -0
  64. package/lib/db/adapters/resolveAndValidateOptions.d.ts +13 -0
  65. package/lib/db/adapters/resolveAndValidateOptions.js +41 -0
  66. package/lib/db/adapters/resolveAndValidateOptions.js.map +1 -0
  67. package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +3 -4
  68. package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.js +2 -2
  69. package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
  70. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
  71. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.js +11 -37
  72. package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
  73. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
  74. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.js +14 -7
  75. package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
  76. package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +30 -12
  77. package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.js +70 -16
  78. package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
  79. package/lib/db/adapters/wa-sqlite/StatementCache.d.ts +16 -0
  80. package/lib/db/adapters/wa-sqlite/StatementCache.js +44 -0
  81. package/lib/db/adapters/wa-sqlite/StatementCache.js.map +1 -0
  82. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +18 -0
  83. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +140 -0
  84. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
  85. package/lib/{src/db → db}/adapters/wa-sqlite/vfs.d.ts +9 -2
  86. package/lib/{src/db → db}/adapters/wa-sqlite/vfs.js +6 -6
  87. package/lib/db/adapters/wa-sqlite/vfs.js.map +1 -0
  88. package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.d.ts +5 -16
  89. package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.js +7 -23
  90. package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
  91. package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.d.ts +15 -15
  92. package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.js +38 -70
  93. package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
  94. package/lib/db/sync/TabLocalStreamingSyncImplementation.d.ts +19 -0
  95. package/lib/db/sync/TabLocalStreamingSyncImplementation.js +70 -0
  96. package/lib/db/sync/TabLocalStreamingSyncImplementation.js.map +1 -0
  97. package/lib/db/sync/WebRemote.d.ts +10 -0
  98. package/lib/db/sync/WebRemote.js +33 -0
  99. package/lib/db/sync/WebRemote.js.map +1 -0
  100. package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.d.ts +2 -4
  101. package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.js +3 -2
  102. package/lib/db/sync/WebStreamingSyncImplementation.js.map +1 -0
  103. package/lib/db/sync/userAgent.js.map +1 -0
  104. package/lib/{src/index.d.ts → index.d.ts} +1 -3
  105. package/lib/{src/index.js → index.js} +1 -3
  106. package/lib/index.js.map +1 -0
  107. package/lib/shared/navigator.js.map +1 -0
  108. package/lib/shared/tab_close_signal.js.map +1 -0
  109. package/lib/worker/SharedWorkerConnectionRequest.d.ts +5 -0
  110. package/lib/worker/SharedWorkerConnectionRequest.js +2 -0
  111. package/lib/worker/SharedWorkerConnectionRequest.js.map +1 -0
  112. package/lib/worker/client.d.ts +17 -0
  113. package/lib/worker/client.js +90 -0
  114. package/lib/worker/client.js.map +1 -0
  115. package/lib/worker/db/MultiDatabaseServer.d.ts +21 -0
  116. package/lib/{src/worker → worker}/db/MultiDatabaseServer.js +45 -24
  117. package/lib/worker/db/MultiDatabaseServer.js.map +1 -0
  118. package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +14 -0
  119. package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
  120. package/lib/worker/sync/BroadcastLogger.d.ts +27 -0
  121. package/lib/worker/sync/BroadcastLogger.js +65 -0
  122. package/lib/worker/sync/BroadcastLogger.js.map +1 -0
  123. package/lib/{src/worker → worker}/sync/SharedSyncImplementation.d.ts +14 -25
  124. package/lib/{src/worker → worker}/sync/SharedSyncImplementation.js +140 -107
  125. package/lib/worker/sync/SharedSyncImplementation.js.map +1 -0
  126. package/lib/{src/worker → worker}/sync/WorkerClient.d.ts +4 -4
  127. package/lib/{src/worker → worker}/sync/WorkerClient.js +5 -5
  128. package/lib/worker/sync/WorkerClient.js.map +1 -0
  129. package/lib/worker/worker.d.ts +1 -0
  130. package/lib/worker/worker.js +34 -0
  131. package/lib/worker/worker.js.map +1 -0
  132. package/package.json +31 -32
  133. package/src/db/NavigatorTriggerClaimManager.ts +1 -1
  134. package/src/db/PowerSyncDatabase.ts +96 -144
  135. package/src/db/adapters/AsyncWebAdapter.ts +29 -86
  136. package/src/db/adapters/SSRDBAdapter.ts +14 -64
  137. package/src/db/adapters/WebDBAdapter.ts +1 -1
  138. package/src/db/adapters/acquireFromPool.ts +73 -0
  139. package/src/db/adapters/memory-pool/client.ts +367 -0
  140. package/src/db/adapters/memory-pool/shared.ts +79 -0
  141. package/src/db/adapters/memory-pool/vfs.ts +293 -0
  142. package/src/db/adapters/memory-pool/worker.ts +53 -0
  143. package/src/db/adapters/options.ts +108 -0
  144. package/src/db/adapters/resolveAndValidateOptions.ts +49 -0
  145. package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +4 -5
  146. package/src/db/adapters/wa-sqlite/DatabaseClient.ts +20 -56
  147. package/src/db/adapters/wa-sqlite/DatabaseServer.ts +18 -12
  148. package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +108 -30
  149. package/src/db/adapters/wa-sqlite/StatementCache.ts +50 -0
  150. package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +82 -125
  151. package/src/db/adapters/wa-sqlite/vfs.ts +13 -8
  152. package/src/db/sync/SSRWebStreamingSyncImplementation.ts +8 -36
  153. package/src/db/sync/SharedWebStreamingSyncImplementation.ts +47 -82
  154. package/src/db/sync/TabLocalStreamingSyncImplementation.ts +90 -0
  155. package/src/db/sync/WebRemote.ts +23 -26
  156. package/src/db/sync/WebStreamingSyncImplementation.ts +4 -5
  157. package/src/index.ts +1 -3
  158. package/src/worker/SharedWorkerConnectionRequest.ts +6 -0
  159. package/src/worker/client.ts +121 -0
  160. package/src/worker/db/MultiDatabaseServer.ts +59 -33
  161. package/src/worker/sync/AbstractSharedSyncClientProvider.ts +5 -10
  162. package/src/worker/sync/BroadcastLogger.ts +35 -103
  163. package/src/worker/sync/SharedSyncImplementation.ts +197 -138
  164. package/src/worker/sync/WorkerClient.ts +8 -8
  165. package/src/worker/worker.ts +38 -0
  166. package/dist/2075a31bb151adbb9767.wasm +0 -0
  167. package/dist/3322bc84de986b63c2cd.wasm +0 -0
  168. package/dist/8e97452e297be23b5e50.wasm +0 -0
  169. package/dist/fbc178b70d530e8ce02b.wasm +0 -0
  170. package/dist/index.umd.js +0 -7821
  171. package/dist/index.umd.js.map +0 -1
  172. package/dist/worker/SharedSyncImplementation.umd.js +0 -16139
  173. package/dist/worker/SharedSyncImplementation.umd.js.map +0 -1
  174. package/dist/worker/WASQLiteDB.umd.js +0 -17434
  175. package/dist/worker/WASQLiteDB.umd.js.map +0 -1
  176. 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
  177. 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
  178. 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
  179. 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
  180. 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
  181. 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
  182. 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
  183. 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
  184. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +0 -3562
  185. 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
  186. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js +0 -1400
  187. 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
  188. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +0 -2478
  189. 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
  190. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +0 -1681
  191. 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
  192. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +0 -1820
  193. 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
  194. package/lib/package.json +0 -91
  195. package/lib/src/attachments/IndexDBFileSystemAdapter.js.map +0 -1
  196. package/lib/src/db/NavigatorTriggerClaimManager.js.map +0 -1
  197. package/lib/src/db/PowerSyncDatabase.d.ts +0 -78
  198. package/lib/src/db/PowerSyncDatabase.js.map +0 -1
  199. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +0 -23
  200. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +0 -27
  201. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js.map +0 -1
  202. package/lib/src/db/adapters/AsyncWebAdapter.d.ts +0 -50
  203. package/lib/src/db/adapters/AsyncWebAdapter.js.map +0 -1
  204. package/lib/src/db/adapters/SSRDBAdapter.d.ts +0 -30
  205. package/lib/src/db/adapters/SSRDBAdapter.js +0 -69
  206. package/lib/src/db/adapters/SSRDBAdapter.js.map +0 -1
  207. package/lib/src/db/adapters/WebDBAdapter.js.map +0 -1
  208. package/lib/src/db/adapters/wa-sqlite/ConcurrentConnection.js.map +0 -1
  209. package/lib/src/db/adapters/wa-sqlite/DatabaseClient.js.map +0 -1
  210. package/lib/src/db/adapters/wa-sqlite/DatabaseServer.js.map +0 -1
  211. package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js.map +0 -1
  212. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -45
  213. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -146
  214. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +0 -1
  215. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +0 -15
  216. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +0 -22
  217. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js.map +0 -1
  218. package/lib/src/db/adapters/wa-sqlite/vfs.js.map +0 -1
  219. package/lib/src/db/adapters/web-sql-flags.d.ts +0 -92
  220. package/lib/src/db/adapters/web-sql-flags.js +0 -37
  221. package/lib/src/db/adapters/web-sql-flags.js.map +0 -1
  222. package/lib/src/db/sync/SSRWebStreamingSyncImplementation.js.map +0 -1
  223. package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js.map +0 -1
  224. package/lib/src/db/sync/WebRemote.d.ts +0 -7
  225. package/lib/src/db/sync/WebRemote.js +0 -33
  226. package/lib/src/db/sync/WebRemote.js.map +0 -1
  227. package/lib/src/db/sync/WebStreamingSyncImplementation.js.map +0 -1
  228. package/lib/src/db/sync/userAgent.js.map +0 -1
  229. package/lib/src/index.js.map +0 -1
  230. package/lib/src/shared/navigator.js.map +0 -1
  231. package/lib/src/shared/tab_close_signal.js.map +0 -1
  232. package/lib/src/worker/db/MultiDatabaseServer.d.ts +0 -17
  233. package/lib/src/worker/db/MultiDatabaseServer.js.map +0 -1
  234. package/lib/src/worker/db/WASQLiteDB.worker.d.ts +0 -4
  235. package/lib/src/worker/db/WASQLiteDB.worker.js +0 -31
  236. package/lib/src/worker/db/WASQLiteDB.worker.js.map +0 -1
  237. package/lib/src/worker/db/open-worker-database.d.ts +0 -14
  238. package/lib/src/worker/db/open-worker-database.js +0 -53
  239. package/lib/src/worker/db/open-worker-database.js.map +0 -1
  240. package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -19
  241. package/lib/src/worker/sync/AbstractSharedSyncClientProvider.js.map +0 -1
  242. package/lib/src/worker/sync/BroadcastLogger.d.ts +0 -47
  243. package/lib/src/worker/sync/BroadcastLogger.js +0 -129
  244. package/lib/src/worker/sync/BroadcastLogger.js.map +0 -1
  245. package/lib/src/worker/sync/SharedSyncImplementation.js.map +0 -1
  246. package/lib/src/worker/sync/SharedSyncImplementation.worker.js +0 -12
  247. package/lib/src/worker/sync/SharedSyncImplementation.worker.js.map +0 -1
  248. package/lib/src/worker/sync/WorkerClient.js.map +0 -1
  249. package/lib/tsconfig.tsbuildinfo +0 -1
  250. package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +0 -47
  251. package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +0 -24
  252. package/src/db/adapters/web-sql-flags.ts +0 -141
  253. package/src/worker/db/WASQLiteDB.worker.ts +0 -35
  254. package/src/worker/db/open-worker-database.ts +0 -62
  255. package/src/worker/sync/SharedSyncImplementation.worker.ts +0 -14
  256. /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
  257. /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.js +0 -0
  258. /package/lib/{src/db → db}/NavigatorTriggerClaimManager.js +0 -0
  259. /package/lib/{src/db → db}/adapters/WebDBAdapter.js +0 -0
  260. /package/lib/{src/worker/sync/SharedSyncImplementation.worker.d.ts → db/adapters/memory-pool/worker.d.ts} +0 -0
  261. /package/lib/{src/db → db}/sync/userAgent.d.ts +0 -0
  262. /package/lib/{src/db → db}/sync/userAgent.js +0 -0
  263. /package/lib/{src/shared → shared}/navigator.d.ts +0 -0
  264. /package/lib/{src/shared → shared}/navigator.js +0 -0
  265. /package/lib/{src/shared → shared}/tab_close_signal.d.ts +0 -0
  266. /package/lib/{src/shared → shared}/tab_close_signal.js +0 -0
  267. /package/lib/{src/worker → worker}/sync/AbstractSharedSyncClientProvider.js +0 -0
@@ -1,10 +1,8 @@
1
1
  export * from '@powersync/common';
2
2
  export * from './attachments/IndexDBFileSystemAdapter.js';
3
- export * from './db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js';
4
3
  export { WASQLiteVFS } from './db/adapters/wa-sqlite/vfs.js';
5
4
  export * from './db/adapters/wa-sqlite/WASQLiteOpenFactory.js';
6
- export * from './db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js';
7
- export * from './db/adapters/web-sql-flags.js';
5
+ export * from './db/adapters/options.js';
8
6
  export * from './db/PowerSyncDatabase.js';
9
7
  export * from './db/sync/SharedWebStreamingSyncImplementation.js';
10
8
  export * from './db/sync/WebRemote.js';
@@ -1,10 +1,8 @@
1
1
  export * from '@powersync/common';
2
2
  export * from './attachments/IndexDBFileSystemAdapter.js';
3
- export * from './db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js';
4
3
  export { WASQLiteVFS } from './db/adapters/wa-sqlite/vfs.js';
5
4
  export * from './db/adapters/wa-sqlite/WASQLiteOpenFactory.js';
6
- export * from './db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js';
7
- export * from './db/adapters/web-sql-flags.js';
5
+ export * from './db/adapters/options.js';
8
6
  export * from './db/PowerSyncDatabase.js';
9
7
  export * from './db/sync/SharedWebStreamingSyncImplementation.js';
10
8
  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,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,0BAA0B,CAAC;AACzC,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,5 @@
1
+ export type WorkerService = 'database' | 'sync';
2
+ export interface SharedWorkerConnectionRequest {
3
+ service: WorkerService;
4
+ port: MessagePort;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SharedWorkerConnectionRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedWorkerConnectionRequest.js","sourceRoot":"","sources":["../../src/worker/SharedWorkerConnectionRequest.ts"],"names":[],"mappings":""}
@@ -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,21 @@
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
+ #private;
14
+ readonly logger: PowerSyncLogger;
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
+ closeAll(): Promise<void[]>;
20
+ }
21
+ export declare const isSharedWorker: boolean;
@@ -1,60 +1,73 @@
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';
4
5
  import { RawSqliteConnection } from '../../db/adapters/wa-sqlite/RawSqliteConnection.js';
5
6
  import { ConcurrentSqliteConnection } from '../../db/adapters/wa-sqlite/ConcurrentConnection.js';
6
7
  import { WASQLiteVFS } from '../../db/adapters/wa-sqlite/vfs.js';
8
+ import { Mutex } from '@powersync/shared-internals';
7
9
  const OPEN_DB_LOCK = 'open-wasqlite-db';
8
10
  /**
9
11
  * Shared state to manage multiple database connections hosted by a worker.
10
12
  */
11
13
  export class MultiDatabaseServer {
12
14
  logger;
13
- activeDatabases = new Map();
15
+ #activeDatabases = new Map();
16
+ #localOpenLock = new Mutex();
14
17
  constructor(logger) {
15
18
  this.logger = logger;
16
19
  }
17
- async handleConnection(options) {
18
- this.logger.setLevel(options.logLevel);
19
- return Comlink.proxy(await this.openConnectionLocally(options, options.lockName));
20
+ async handleConnection({ logLevel, database, lockName }) {
21
+ const logger = {
22
+ log: (record) => {
23
+ if (record.level >= logLevel)
24
+ this.logger.log(record);
25
+ }
26
+ };
27
+ return Comlink.proxy(await this.openConnectionLocally(logger, database, lockName));
20
28
  }
21
29
  async connectToExisting(name, lockName) {
22
30
  return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
23
- const server = this.activeDatabases.get(name);
31
+ const server = this.#activeDatabases.get(name);
24
32
  if (server == null) {
25
33
  throw new Error(`connectToExisting(${name}) failed because the worker doesn't own a database with that name.`);
26
34
  }
27
35
  return Comlink.proxy(await server.connect(lockName));
28
36
  });
29
37
  }
30
- async openConnectionLocally(options, lockName) {
38
+ async openConnectionLocally(logger, options, lockName) {
31
39
  // Especially on Firefox, we're sometimes seeing "NoModificationAllowedError"s when opening OPFS databases we can
32
40
  // work around by retrying.
33
41
  const maxAttempts = 3;
34
42
  let server;
35
43
  for (let count = 0; count < maxAttempts - 1; count++) {
36
44
  try {
37
- server = await this.databaseOpenAttempt(options);
45
+ server = await this.#databaseOpenAttempt(logger, options);
38
46
  }
39
- catch (ex) {
40
- this.logger.warn(`Attempt ${count + 1} of ${maxAttempts} to open database failed, retrying in 1 second...`, ex);
47
+ catch (error) {
48
+ this.logger.log({
49
+ level: LogLevels.warn,
50
+ message: `Attempt ${count + 1} of ${maxAttempts} to open database failed, retrying in 1 second...`,
51
+ error
52
+ });
41
53
  await new Promise((resolve) => setTimeout(resolve, 1000));
42
54
  }
43
55
  }
44
56
  // 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);
57
+ server ??= await this.#databaseOpenAttempt(logger, options);
46
58
  return server.connect(lockName);
47
59
  }
48
- async databaseOpenAttempt(options) {
49
- return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
50
- const { dbFilename, isReadOnly, vfs } = options;
51
- let server = this.activeDatabases.get(dbFilename);
60
+ async #databaseOpenAttempt(logger, options) {
61
+ const { filename, readonly, vfs } = options;
62
+ // We don't need navigator locks for shared workers because all queries run in this shared worker exclusively.
63
+ // For read-only connections, we use a VFS that supports concurrent reads (so a single lock on the connection is
64
+ // fine). In-memory databases either run in a shared worker or aren't shared across tabs at all, so the internal
65
+ // lock is enough.
66
+ const needsNavigatorLocks = !(isSharedWorker || readonly || vfs == WASQLiteVFS.InMemoryVfs);
67
+ const activeDatabases = this.#activeDatabases;
68
+ async function openDatabase() {
69
+ let server = activeDatabases.get(filename);
52
70
  if (server == null) {
53
- // We don't need navigator locks for shared workers because all queries run in this shared worker exclusively.
54
- // For read-only connections, we use a VFS that supports concurrent reads (so a single lock on the connection is
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);
58
71
  const connection = new RawSqliteConnection(options);
59
72
  const withSafeConcurrency = new ConcurrentSqliteConnection(connection, needsNavigatorLocks);
60
73
  // Initializing the RawSqliteConnection will run some pragmas that might write to the database file, so we want
@@ -70,19 +83,27 @@ export class MultiDatabaseServer {
70
83
  throw e;
71
84
  }
72
85
  returnLease();
73
- const onClose = () => this.activeDatabases.delete(dbFilename);
86
+ const onClose = () => activeDatabases.delete(filename);
74
87
  server = new DatabaseServer({
75
88
  inner: withSafeConcurrency,
76
- logger: this.logger,
89
+ logger,
77
90
  onClose
78
91
  });
79
- this.activeDatabases.set(dbFilename, server);
92
+ activeDatabases.set(filename, server);
80
93
  }
81
94
  return server;
82
- });
95
+ }
96
+ if (needsNavigatorLocks) {
97
+ return getNavigatorLocks().request(OPEN_DB_LOCK, openDatabase);
98
+ }
99
+ else {
100
+ // Even if we don't need navigator locks, this avoids a race between the activeDatabases.get() call, the async
101
+ // open logic and the final activeDatabases.set() step.
102
+ return this.#localOpenLock.runExclusive(openDatabase);
103
+ }
83
104
  }
84
105
  closeAll() {
85
- const existingDatabases = [...this.activeDatabases.values()];
106
+ const existingDatabases = [...this.#activeDatabases.values()];
86
107
  return Promise.all(existingDatabases.map((db) => {
87
108
  db.forceClose();
88
109
  }));
@@ -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,14 @@
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 postCheckpointRequest(clientId: string, requestId: string): Promise<string | null>;
11
+ abstract statusChanged(status: SyncStatusJson): void;
12
+ abstract getDBWorkerPort(): Promise<MessagePort>;
13
+ abstract log(record: LogRecord): void;
14
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractSharedSyncClientProvider.js","sourceRoot":"","sources":["../../../src/worker/sync/AbstractSharedSyncClientProvider.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAgB,gCAAgC;CASrD"}
@@ -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' | 'postCheckpointRequest' | 'remote' | 'subscriptions' | 'logger'>;
30
32
  dbParams: ResolvedWebSQLOpenOptions;
33
+ enableBroadcastLogs: boolean;
31
34
  };
32
35
  /**
33
36
  * @internal
@@ -46,32 +49,24 @@ export type WrappedSyncPort = {
46
49
  closeListeners: (() => void | Promise<void>)[];
47
50
  isClosing: boolean;
48
51
  };
49
- /**
50
- * @internal
51
- */
52
- export type RemoteOperationAbortController = {
53
- controller: AbortController;
54
- activePort: WrappedSyncPort;
55
- };
56
52
  /**
57
53
  * @internal
58
54
  * Shared sync implementation which runs inside a shared webworker
59
55
  */
60
56
  export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImplementationListener> {
57
+ #private;
61
58
  protected ports: WrappedSyncPort[];
62
59
  protected isInitialized: Promise<void>;
63
60
  protected statusListener?: () => void;
64
- protected fetchCredentialsController?: RemoteOperationAbortController;
65
- protected uploadDataController?: RemoteOperationAbortController;
66
61
  protected syncParams: SharedSyncInitOptions | null;
67
- protected logger: ILogger;
68
- protected lastConnectOptions: PowerSyncConnectionOptions | undefined;
62
+ protected lastConnectOptions: ResolvedSyncOptions | undefined;
69
63
  protected portMutex: Mutex;
70
64
  private subscriptions;
71
65
  protected connectionManager: ConnectionManager;
72
- syncStatus: SyncStatus;
73
- broadCastLogger: ILogger;
66
+ private syncStatus?;
67
+ logger: BroadcastLogger;
74
68
  protected readonly database: DBAdapter;
69
+ private sharedCloseSignal;
75
70
  constructor();
76
71
  get isConnected(): boolean;
77
72
  /**
@@ -83,12 +78,11 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
83
78
  * This returns a random port which is not closing.
84
79
  */
85
80
  protected getRandomWrappedPort(): Promise<WrappedSyncPort | undefined>;
86
- waitForStatus(status: SyncStatusOptions): Promise<void>;
87
81
  waitUntilStatusMatches(predicate: (status: SyncStatus) => boolean): Promise<void>;
88
82
  waitForReady(): Promise<void>;
89
83
  private collectActiveSubscriptions;
90
84
  updateSubscriptions(port: WrappedSyncPort, subscriptions: SubscribedStream[]): void;
91
- setLogLevel(level: ILogLevel): void;
85
+ setLogLevel(level: number): void;
92
86
  /**
93
87
  * Configures the DBAdapter connection and a streaming sync client.
94
88
  */
@@ -100,7 +94,7 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
100
94
  * The connection will simply be reconnected whenever a new tab
101
95
  * connects.
102
96
  */
103
- connect(options?: PowerSyncConnectionOptions): Promise<void>;
97
+ connect(options: ResolvedSyncOptions, serializedSchema: any): Promise<void>;
104
98
  disconnect(): Promise<void>;
105
99
  /**
106
100
  * Adds a new client tab's message port to the list of connected ports
@@ -118,7 +112,7 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
118
112
  */
119
113
  removePort(port: WrappedSyncPort): Promise<() => void>;
120
114
  triggerCrudUpload(): void;
121
- getWriteCheckpoint(): Promise<string>;
115
+ requestCheckpoint(): Promise<bigint>;
122
116
  protected withSyncImplementation<T>(callback: (sync: StreamingSyncImplementation) => Promise<T>): Promise<T>;
123
117
  protected generateStreamingImplementation(): WebStreamingSyncImplementation;
124
118
  /**
@@ -126,9 +120,4 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
126
120
  */
127
121
  private openInternalDB;
128
122
  private generateReconnectableDatabase;
129
- /**
130
- * A method to update the all shared statuses for each
131
- * client.
132
- */
133
- private updateAllStatuses;
134
123
  }