@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
@@ -0,0 +1,247 @@
1
+ // @ts-ignore
2
+ import { FacadeVFS } from '@journeyapps/wa-sqlite/src/FacadeVFS.js';
3
+ import * as VFS from '@journeyapps/wa-sqlite/src/VFS.js';
4
+ import { emptyWalState } from './shared.js';
5
+ const mainDbSentinel = Symbol();
6
+ export class InMemoryWriteAheadLog extends FacadeVFS {
7
+ buffers;
8
+ // The main /database file is the only file for which we create a write-ahead log. All other files (including the
9
+ // journal) are local-only.
10
+ #openedFiles = new Map();
11
+ #files = new Map();
12
+ #tx = undefined;
13
+ #newOverlayPagesToSendToMainTab = new Map();
14
+ writeAheadState = emptyWalState();
15
+ constructor(module, buffers) {
16
+ super('InMemoryWriteAheadLog', module);
17
+ this.buffers = buffers;
18
+ this.#files.set('/database', mainDbSentinel);
19
+ }
20
+ takeChanges() {
21
+ const added = [];
22
+ this.#newOverlayPagesToSendToMainTab.forEach((v, k) => {
23
+ added.push(k);
24
+ added.push(v);
25
+ });
26
+ this.#newOverlayPagesToSendToMainTab.clear();
27
+ return {
28
+ cleared: false,
29
+ walEnd: this.writeAheadState.walEnd,
30
+ fileSize: this.writeAheadState.fileSize,
31
+ added
32
+ };
33
+ }
34
+ jAccess(zName, _pFlags, pResOut) {
35
+ const file = this.#files.get(zName);
36
+ pResOut.setInt32(0, file != null ? 1 : 0, true);
37
+ return VFS.SQLITE_OK;
38
+ }
39
+ jOpen(zName, fileId, flags, pOutFlags) {
40
+ if (flags & VFS.SQLITE_OPEN_MAIN_DB) {
41
+ this.#openedFiles.set(fileId, mainDbSentinel);
42
+ }
43
+ else {
44
+ // Treat all other files, including the mostly unused journal as temporary.
45
+ zName ??= `tmp-${crypto.randomUUID()}`;
46
+ const existing = this.#files.get(zName);
47
+ if (existing != null) {
48
+ this.#openedFiles.set(fileId, existing);
49
+ }
50
+ else {
51
+ if (!(flags & VFS.SQLITE_OPEN_CREATE)) {
52
+ return VFS.SQLITE_IOERR;
53
+ }
54
+ const newFile = new LocalFile(zName);
55
+ newFile.deleteOnClose = (flags & VFS.SQLITE_OPEN_DELETEONCLOSE) != 0;
56
+ this.#openedFiles.set(fileId, newFile);
57
+ this.#files.set(zName, newFile);
58
+ }
59
+ }
60
+ pOutFlags.setInt32(0, flags, true);
61
+ return VFS.SQLITE_OK;
62
+ }
63
+ jClose(fileid) {
64
+ const file = this.#openedFiles.get(fileid);
65
+ this.#openedFiles.delete(fileid);
66
+ if (file != mainDbSentinel && file.deleteOnClose) {
67
+ this.#files.delete(file.name);
68
+ }
69
+ return VFS.SQLITE_OK;
70
+ }
71
+ jRead(fileId, data, offset) {
72
+ const file = this.#openedFiles.get(fileId);
73
+ let endOffset;
74
+ let readableBytes;
75
+ if (file == mainDbSentinel) {
76
+ const { fileSize, overlay } = this.writeAheadState;
77
+ const startOffset = Math.min(offset, fileSize);
78
+ endOffset = Math.min(fileSize, offset + data.byteLength);
79
+ readableBytes = endOffset - startOffset;
80
+ // Try reading from the write-ahead overlay first. A read on the database file is always a complete page, except
81
+ // when reading from the 100-byte header.
82
+ const page = overlay.get(offset < 100 ? 0 : offset);
83
+ if (page != null) {
84
+ const pageOffset = page.logOffset;
85
+ const source = new Uint8Array(this.buffers.writeAheadLog, offset < 100 ? pageOffset + offset : pageOffset, readableBytes);
86
+ data.set(source);
87
+ }
88
+ else {
89
+ // Page is not in WAL overlay, read directly from underlying in-memory buffer.
90
+ data.set(new Uint8Array(this.buffers.database, startOffset, readableBytes));
91
+ }
92
+ }
93
+ else {
94
+ const fileSize = file.size;
95
+ const startOffset = Math.min(offset, fileSize);
96
+ endOffset = Math.min(fileSize, offset + data.byteLength);
97
+ readableBytes = endOffset - startOffset;
98
+ if (readableBytes > 0) {
99
+ data.set(new Uint8Array(file.buffer, startOffset, readableBytes));
100
+ }
101
+ }
102
+ if (readableBytes < data.byteLength) {
103
+ data.fill(0, readableBytes); // Fill rest with zeroes.
104
+ return VFS.SQLITE_IOERR_SHORT_READ;
105
+ }
106
+ return VFS.SQLITE_OK;
107
+ }
108
+ jWrite(fileId, data, offset) {
109
+ const file = this.#openedFiles.get(fileId);
110
+ // wa-sqlite passes a proxy instead of a real Uint8Array.
111
+ const actualBuffer = data.subarray();
112
+ if (file === mainDbSentinel) {
113
+ // Write to the write-ahead overlay.
114
+ let didWrite = false;
115
+ if (this.#tx != null) {
116
+ didWrite = this.#tx.appendPage(offset, actualBuffer);
117
+ }
118
+ else {
119
+ const tx = new WriteAheadTransaction(this.writeAheadState.walEnd, this.writeAheadState.fileSize, this.buffers);
120
+ didWrite = tx.appendPage(offset, actualBuffer);
121
+ this.#commit(tx);
122
+ }
123
+ return didWrite ? VFS.SQLITE_OK : VFS.SQLITE_FULL;
124
+ }
125
+ else {
126
+ const writeLength = data.length;
127
+ const endOffset = offset + writeLength;
128
+ if (endOffset > file.buffer.byteLength) {
129
+ const didGrow = file.growBuffer(endOffset);
130
+ if (!didGrow) {
131
+ return VFS.SQLITE_FULL;
132
+ }
133
+ }
134
+ new Uint8Array(file.buffer, offset, writeLength).set(actualBuffer);
135
+ file.size = Math.max(file.size, endOffset);
136
+ return VFS.SQLITE_OK;
137
+ }
138
+ }
139
+ jTruncate(fileid, size) {
140
+ const file = this.#openedFiles.get(fileid);
141
+ if (file === mainDbSentinel) {
142
+ this.writeAheadState.fileSize = Math.min(this.writeAheadState.fileSize, size);
143
+ }
144
+ else {
145
+ file.size = Math.min(size, file.size);
146
+ }
147
+ return VFS.SQLITE_OK;
148
+ }
149
+ jFileSize(fileid, pSize64) {
150
+ const file = this.#openedFiles.get(fileid);
151
+ if (file === mainDbSentinel) {
152
+ pSize64.setBigInt64(0, BigInt(this.writeAheadState.fileSize), true);
153
+ }
154
+ else {
155
+ pSize64.setBigInt64(0, BigInt(file.size), true);
156
+ }
157
+ return VFS.SQLITE_OK;
158
+ }
159
+ jDelete(name) {
160
+ if (name === '/database') {
161
+ return VFS.SQLITE_IOERR_DELETE;
162
+ }
163
+ this.#files.delete(name);
164
+ return VFS.SQLITE_OK;
165
+ }
166
+ jDeviceCharacteristics() {
167
+ return VFS.SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN | VFS.SQLITE_IOCAP_BATCH_ATOMIC;
168
+ }
169
+ jFileControl(fileid, op) {
170
+ const file = this.#openedFiles.get(fileid);
171
+ if (file !== mainDbSentinel)
172
+ return VFS.SQLITE_NOTFOUND;
173
+ switch (op) {
174
+ case VFS.SQLITE_FCNTL_BEGIN_ATOMIC_WRITE:
175
+ this.#tx = new WriteAheadTransaction(this.writeAheadState.walEnd, this.writeAheadState.fileSize, this.buffers);
176
+ break;
177
+ case VFS.SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE:
178
+ this.#tx = undefined;
179
+ break;
180
+ case VFS.SQLITE_FCNTL_COMMIT_ATOMIC_WRITE:
181
+ this.#commit(this.#tx);
182
+ this.#tx = undefined;
183
+ break;
184
+ default:
185
+ return VFS.SQLITE_NOTFOUND;
186
+ }
187
+ return VFS.SQLITE_OK;
188
+ }
189
+ #commit(tx) {
190
+ this.writeAheadState.walEnd = tx.walEndOffset;
191
+ this.writeAheadState.fileSize = tx.fileSize;
192
+ tx.changedPages.forEach((walEntry, databaseOffset) => {
193
+ this.#newOverlayPagesToSendToMainTab.set(databaseOffset, walEntry);
194
+ this.writeAheadState.overlay.set(databaseOffset, walEntry);
195
+ });
196
+ }
197
+ }
198
+ class WriteAheadTransaction {
199
+ buffers;
200
+ walEndOffset;
201
+ fileSize;
202
+ changedPages = new Map();
203
+ constructor(endOffset, fileSize, buffers) {
204
+ this.buffers = buffers;
205
+ this.walEndOffset = endOffset;
206
+ this.fileSize = fileSize;
207
+ }
208
+ appendPage(offset, data) {
209
+ const currentEnd = this.walEndOffset;
210
+ const newEnd = currentEnd + data.length;
211
+ const wal = this.buffers.writeAheadLog;
212
+ if (newEnd > wal.byteLength) {
213
+ if (!this.#growWal(wal, newEnd))
214
+ return false;
215
+ }
216
+ this.fileSize = Math.max(this.fileSize, offset + data.length);
217
+ new Uint8Array(wal, currentEnd, data.length).set(data);
218
+ this.walEndOffset = newEnd;
219
+ this.changedPages.set(offset, { logOffset: currentEnd, size: data.length });
220
+ return true;
221
+ }
222
+ #growWal(buffer, minSize) {
223
+ const newSize = Math.max(minSize, Math.min(2 * buffer.byteLength, buffer.maxByteLength));
224
+ if (newSize > buffer.maxByteLength) {
225
+ return false;
226
+ }
227
+ buffer.grow(newSize);
228
+ return true;
229
+ }
230
+ }
231
+ class LocalFile {
232
+ deleteOnClose = false;
233
+ name;
234
+ buffer = new ArrayBuffer(1024);
235
+ size = 0;
236
+ constructor(name) {
237
+ this.name = name;
238
+ }
239
+ growBuffer(minSize) {
240
+ const newSize = Math.max(minSize, 2 * this.buffer.byteLength);
241
+ const newBuffer = new ArrayBuffer(newSize);
242
+ new Uint8Array(newBuffer).set(new Uint8Array(this.buffer));
243
+ this.buffer = newBuffer;
244
+ return true;
245
+ }
246
+ }
247
+ //# sourceMappingURL=vfs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../../../src/db/adapters/memory-pool/vfs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import * as Comlink from 'comlink';
2
+ import { applyWalChanges } from './shared.js';
3
+ import { InMemoryWriteAheadLog } from './vfs.js';
4
+ import { RawSqliteConnection } from '../wa-sqlite/RawSqliteConnection.js';
5
+ import { WASQLiteVFS } from '../wa-sqlite/vfs.js';
6
+ import { TemporaryStorageOption } from '../options.js';
7
+ class MemoryDatabaseServer {
8
+ #vfs;
9
+ #connection;
10
+ async open(buffers, options) {
11
+ const { default: factory } = await import('@journeyapps/wa-sqlite/dist/wa-sqlite.mjs');
12
+ const module = await factory();
13
+ const vfs = (this.#vfs = new InMemoryWriteAheadLog(module, buffers));
14
+ const connection = new RawSqliteConnection({
15
+ encryptionKey: undefined,
16
+ vfs: WASQLiteVFS.InMemoryVfs,
17
+ // Unused, since we register our own VFS. Only needed to satisfy the type.
18
+ temporaryStorage: TemporaryStorageOption.MEMORY,
19
+ cacheSizeKb: 50 * 1024,
20
+ preparedStatementsCache: 0,
21
+ ...options,
22
+ // The rest of these options is not overridable: The VFS handles /database reads and writes in a special way and
23
+ // there can only be one database per buffers instance.
24
+ filename: '/database',
25
+ readonly: false
26
+ });
27
+ await connection.initWithModule(module, vfs);
28
+ this.#connection = connection;
29
+ }
30
+ async updateWalState(overlay) {
31
+ const currentState = this.#vfs.writeAheadState;
32
+ applyWalChanges(currentState, overlay);
33
+ }
34
+ async executeRaw(query, params) {
35
+ return await this.#connection.execute(query, params);
36
+ }
37
+ async executeBatch(query, params) {
38
+ return await this.#connection.executeBatch(query, params);
39
+ }
40
+ async takeWalChanges() {
41
+ return this.#vfs.takeChanges();
42
+ }
43
+ }
44
+ Comlink.expose(new MemoryDatabaseServer());
45
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../../../src/db/adapters/memory-pool/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,eAAe,EAAqD,MAAM,aAAa,CAAC;AAEjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAA4C,MAAM,qCAAqC,CAAC;AACpH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,oBAAoB;IACxB,IAAI,CAAyB;IAC7B,WAAW,CAAuB;IAElC,KAAK,CAAC,IAAI,CAAC,OAA0B,EAAE,OAA4C;QACjF,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAErE,MAAM,UAAU,GAAG,IAAI,mBAAmB,CAAC;YACzC,aAAa,EAAE,SAAS;YACxB,GAAG,EAAE,WAAW,CAAC,WAAW;YAC5B,0EAA0E;YAC1E,gBAAgB,EAAE,sBAAsB,CAAC,MAAM;YAC/C,WAAW,EAAE,EAAE,GAAG,IAAI;YACtB,uBAAuB,EAAE,CAAC;YAC1B,GAAG,OAAO;YACV,gHAAgH;YAChH,uDAAuD;YACvD,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAuB;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QAC/C,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,MAA0B;QACxD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,MAAe;QAC/C,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;CACF;AAED,OAAO,CAAC,MAAM,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { SQLOpenOptions } from '@powersync/common';
2
+ import { WASQLiteVFS } from './wa-sqlite/vfs.js';
3
+ export interface WebSpecificOpenOptions {
4
+ /**
5
+ * SQLite operations are currently not supported in SSR mode.
6
+ * A warning will be logged if attempting to use SQLite in SSR.
7
+ * Setting this to `true` will disabled the warning above.
8
+ */
9
+ disableSSRWarning: boolean;
10
+ /**
11
+ * Enables multi tab support.
12
+ *
13
+ * Enabling multi-tab support will transparently make PowerSync manage the sync process in a shared worker collecting
14
+ * Sync Streams across tabs. Additionally, it enables a shared worker for IndexedDB databases.
15
+ *
16
+ * It is still valid to open multiple tabs when this option is disabled, but the experience may be degrated as only
17
+ * one tab can sync at the time.
18
+ *
19
+ * This is enabled by default on Desktop browsers if shared workers are enabled, except for Safari.
20
+ */
21
+ enableMultiTabs: boolean;
22
+ /**
23
+ * The SQLite connection is often executed through a web worker in order to offload computation and because some file
24
+ * system implementations (notably those based on web filesystem APIs like OPFS) are only available in workers.
25
+ *
26
+ * Manually disabling the use of web workers is not recommended, but can be useful for testing or for environments
27
+ * or toolchains where web workers are not supported.
28
+ */
29
+ useWebWorker: boolean;
30
+ /**
31
+ * Open in SSR placeholder mode. DB operations and Sync operations will be a No-op
32
+ */
33
+ ssrMode: boolean;
34
+ /**
35
+ * The log level for database workers.
36
+ *
37
+ * Defaults to {@link LogLevels.info}.
38
+ */
39
+ databaseWorkerLogLevel: number;
40
+ /**
41
+ * Where to store SQLite temporary files. Defaults to 'MEMORY'.
42
+ * Setting this to `FILESYSTEM` can cause issues with larger queries or datasets.
43
+ */
44
+ temporaryStorage: TemporaryStorageOption;
45
+ /**
46
+ * Maximum SQLite cache size. Defaults to 50MB.
47
+ *
48
+ * For details, see: https://www.sqlite.org/pragma.html#pragma_cache_size
49
+ */
50
+ cacheSizeKb: number;
51
+ /**
52
+ * Encryption key for the database.
53
+ * If set, the database will be encrypted using ChaCha20.
54
+ */
55
+ encryptionKey: string | undefined;
56
+ vfs: WASQLiteVFS;
57
+ /**
58
+ * If the {@link vfs} supports it, an additional amount of read-only connections to open. Using additional read
59
+ * connections can speed up queries by dispatching them to multiple workers running them concurrently.
60
+ *
61
+ * {@link WASQLiteVFS.OPFSWriteAheadVFS} is the only VFS with support for multiple connections, so this option is
62
+ * ignored for other VFS implementations.
63
+ *
64
+ * Defaults to 1.
65
+ */
66
+ additionalReaders: number;
67
+ /**
68
+ * Allows you to override the default wasqlite db worker.
69
+ *
70
+ * You can either provide a path to the worker script
71
+ * or a factory method that returns a worker.
72
+ */
73
+ worker?: string | URL | ((options: ResolvedWebSQLOpenOptions) => Worker | SharedWorker);
74
+ /**
75
+ * Use an existing port to an initialized worker.
76
+ * A worker will be initialized if none is provided
77
+ */
78
+ workerPort?: MessagePort | undefined;
79
+ /**
80
+ * If set to a value greater than zero, the worker will cache prepared statements to avoid preparing them every time
81
+ * a query runs.
82
+ *
83
+ * Defaults to 0 (disabling the cache).
84
+ */
85
+ preparedStatementsCache?: number;
86
+ }
87
+ export interface ResolvedWebSQLOpenOptions extends SQLOpenOptions, WebSpecificOpenOptions {
88
+ }
89
+ export interface WebSQLOpenOptions extends SQLOpenOptions, Partial<WebSpecificOpenOptions> {
90
+ }
91
+ export declare enum TemporaryStorageOption {
92
+ MEMORY = "memory",
93
+ FILESYSTEM = "file"
94
+ }
@@ -0,0 +1,6 @@
1
+ export var TemporaryStorageOption;
2
+ (function (TemporaryStorageOption) {
3
+ TemporaryStorageOption["MEMORY"] = "memory";
4
+ TemporaryStorageOption["FILESYSTEM"] = "file";
5
+ })(TemporaryStorageOption || (TemporaryStorageOption = {}));
6
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/db/adapters/options.ts"],"names":[],"mappings":"AAwGA,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,6CAAmB,CAAA;AACrB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC"}
@@ -0,0 +1,13 @@
1
+ import { WebSpecificOpenOptions } from './options.js';
2
+ /**
3
+ * The maximum length of a db filename we support.
4
+ *
5
+ * We configure the same on WA-SQLite (which otherwise defaults to a maximum length of 64). We don't want to support
6
+ * very long path names as Safari maps OPFS files directly to OS files, and APFS has a 255-byte filename limit. Since
7
+ * some VFS append additional characters for pooled file access handles, we want to stay well below that.
8
+ */
9
+ export declare const maxPathNameLength = 128;
10
+ /**
11
+ * @internal
12
+ */
13
+ export declare function resolveAndValidateOptions<And = {}>(options: Partial<WebSpecificOpenOptions> & And): WebSpecificOpenOptions & And;
@@ -0,0 +1,41 @@
1
+ import { LogLevels } from '@powersync/common';
2
+ import { TemporaryStorageOption } from './options.js';
3
+ import { vfsRequiresDedicatedWorkers, WASQLiteVFS } from './wa-sqlite/vfs.js';
4
+ /**
5
+ * The maximum length of a db filename we support.
6
+ *
7
+ * We configure the same on WA-SQLite (which otherwise defaults to a maximum length of 64). We don't want to support
8
+ * very long path names as Safari maps OPFS files directly to OS files, and APFS has a 255-byte filename limit. Since
9
+ * some VFS append additional characters for pooled file access handles, we want to stay well below that.
10
+ */
11
+ export const maxPathNameLength = 128;
12
+ /**
13
+ * @internal
14
+ */
15
+ export function resolveAndValidateOptions(options) {
16
+ const defaults = {
17
+ disableSSRWarning: false,
18
+ ssrMode: !('window' in globalThis),
19
+ /**
20
+ * Multiple tabs are by default not supported on Android, iOS and Safari.
21
+ * Other platforms will have multiple tabs enabled by default.
22
+ */
23
+ enableMultiTabs: typeof globalThis.navigator !== 'undefined' && // For SSR purposes
24
+ typeof SharedWorker !== 'undefined' &&
25
+ !navigator.userAgent.match(/(Android|iPhone|iPod|iPad)/i) &&
26
+ !window.safari,
27
+ useWebWorker: true,
28
+ databaseWorkerLogLevel: LogLevels.info,
29
+ temporaryStorage: TemporaryStorageOption.MEMORY,
30
+ cacheSizeKb: 50 * 1024,
31
+ encryptionKey: undefined,
32
+ vfs: WASQLiteVFS.IDBBatchAtomicVFS,
33
+ additionalReaders: 1
34
+ };
35
+ const resolved = Object.assign(defaults, options);
36
+ if (vfsRequiresDedicatedWorkers(resolved.vfs) && !resolved.useWebWorker) {
37
+ throw new Error(`Invalid configuration: The 'useWebWorker' flag must be true when using an OPFS-based VFS (${resolved.vfs}).`);
38
+ }
39
+ return resolved;
40
+ }
41
+ //# sourceMappingURL=resolveAndValidateOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveAndValidateOptions.js","sourceRoot":"","sources":["../../../src/db/adapters/resolveAndValidateOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAA0B,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,2BAA2B,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAA8C;IAE9C,MAAM,QAAQ,GAA2B;QACvC,iBAAiB,EAAE,KAAK;QACxB,OAAO,EAAE,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC;QAClC;;;WAGG;QACH,eAAe,EACb,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW,IAAI,mBAAmB;YAClE,OAAO,YAAY,KAAK,WAAW;YACnC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,6BAA6B,CAAC;YACzD,CAAE,MAAc,CAAC,MAAM;QACzB,YAAY,EAAE,IAAI;QAClB,sBAAsB,EAAE,SAAS,CAAC,IAAI;QACtC,gBAAgB,EAAE,sBAAsB,CAAC,MAAM;QAC/C,WAAW,EAAE,EAAE,GAAG,IAAI;QACtB,aAAa,EAAE,SAAS;QACxB,GAAG,EAAE,WAAW,CAAC,iBAAiB;QAClC,iBAAiB,EAAE,CAAC;KACrB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,2BAA2B,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CACb,6FAA6F,QAAQ,CAAC,GAAG,IAAI,CAC9G,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,6 +1,5 @@
1
- import { UnlockFn } from '@powersync/common';
2
- import { RawSqliteConnection } from './RawSqliteConnection.js';
3
- import { ResolvedWASQLiteOpenFactoryOptions } from './WASQLiteOpenFactory.js';
1
+ import { UnlockFn } from '@powersync/shared-internals';
2
+ import { RawSqliteConnection, RawWaSqliteDatabaseOptions } from './RawSqliteConnection.js';
4
3
  /**
5
4
  * A wrapper around a {@link RawSqliteConnection} allowing multiple tabs to access it.
6
5
  *
@@ -26,7 +25,7 @@ export declare class ConcurrentSqliteConnection {
26
25
  * In those setups, we use navigator locks instead of an internal mutex to guard access..
27
26
  */
28
27
  constructor(inner: RawSqliteConnection, needsNavigatorLocks: boolean);
29
- get options(): ResolvedWASQLiteOpenFactoryOptions;
28
+ get options(): RawWaSqliteDatabaseOptions;
30
29
  acquireMutex(abort?: AbortSignal): Promise<UnlockFn>;
31
30
  unsafeUseInner(): RawSqliteConnection;
32
31
  /**
@@ -1,4 +1,4 @@
1
- import { Mutex } from '@powersync/common';
1
+ import { Mutex } from '@powersync/shared-internals';
2
2
  /**
3
3
  * A wrapper around a {@link RawSqliteConnection} allowing multiple tabs to access it.
4
4
  *
@@ -37,7 +37,7 @@ export class ConcurrentSqliteConnection {
37
37
  return new Promise((resolve, reject) => {
38
38
  const options = { signal: abort };
39
39
  navigator.locks
40
- .request(`db-lock-${this.options.dbFilename}`, options, (_) => {
40
+ .request(`db-lock-${this.options.filename}`, options, (_) => {
41
41
  return new Promise((returnLock) => {
42
42
  return resolve(() => {
43
43
  returnLock();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConcurrentConnection.js","sourceRoot":"","sources":["../../../../src/db/adapters/wa-sqlite/ConcurrentConnection.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { LockContext, DBLockOptions, DBAdapterListener, ConnectionPool, BaseObserver, SQLOpenOptions } from '@powersync/common';
1
+ import { LockContext, DBLockOptions, SQLOpenOptions, DBAdapter } from '@powersync/common';
2
2
  import { SharedConnectionWorker, WebDBAdapterConfiguration } from '../WebDBAdapter.js';
3
3
  import { ClientConnectionView } from './DatabaseServer.js';
4
4
  import * as Comlink from 'comlink';
5
- import { WorkerDBOpenerOptions } from './WASQLiteOpenFactory.js';
5
+ import type { ConnectToMultiDatabaseServerOptions } from '../../../worker/db/MultiDatabaseServer.js';
6
6
  export interface OpenWorkerConnection {
7
- connect(config: WorkerDBOpenerOptions): Promise<ClientConnectionView>;
7
+ connect(config: ConnectToMultiDatabaseServerOptions): Promise<ClientConnectionView>;
8
8
  connectToExisting(options: {
9
9
  identifier: string;
10
10
  lockName: string;
@@ -31,7 +31,7 @@ export interface ClientOptions {
31
31
  /**
32
32
  * A single-connection {@link ConnectionPool} implementation based on a worker connection.
33
33
  */
34
- export declare class DatabaseClient<Config extends SQLOpenOptions = WebDBAdapterConfiguration> extends BaseObserver<DBAdapterListener> implements ConnectionPool {
34
+ export declare class DatabaseClient<Config extends SQLOpenOptions = WebDBAdapterConfiguration> extends DBAdapter {
35
35
  #private;
36
36
  private readonly options;
37
37
  private readonly config;
@@ -1,9 +1,10 @@
1
- import { DBGetUtilsDefaultMixin, BaseObserver, ConnectionClosedError } from '@powersync/common';
1
+ import { LockContext, DBAdapter, queryResultWithoutRows } from '@powersync/common';
2
2
  import * as Comlink from 'comlink';
3
+ import { ConnectionClosedError } from '@powersync/shared-internals';
3
4
  /**
4
5
  * A single-connection {@link ConnectionPool} implementation based on a worker connection.
5
6
  */
6
- export class DatabaseClient extends BaseObserver {
7
+ export class DatabaseClient extends DBAdapter {
7
8
  options;
8
9
  config;
9
10
  #connection;
@@ -24,9 +25,7 @@ export class DatabaseClient extends BaseObserver {
24
25
  port2.onmessage = (event) => {
25
26
  const tables = event.data;
26
27
  const notification = {
27
- tables,
28
- groupedUpdates: {},
29
- rawUpdates: []
28
+ tables
30
29
  };
31
30
  this.iterateListeners((l) => {
32
31
  l.tablesUpdated && l.tablesUpdated(notification);
@@ -120,15 +119,16 @@ export class DatabaseClient extends BaseObserver {
120
119
  }
121
120
  }
122
121
  /**
123
- * A {@link SqlExecutor} implemented by sending commands to a worker.
122
+ * A {@link LockContext} implemented by sending commands to a worker.
124
123
  *
125
124
  * While an instance is active, it has exclusive access to the underlying database connection (as represented by its
126
125
  * token).
127
126
  */
128
- class ClientSqlExecutor {
127
+ class ClientLockContext extends LockContext {
129
128
  #connection;
130
129
  #token;
131
130
  constructor(connection, token) {
131
+ super();
132
132
  this.#connection = connection;
133
133
  this.#token = token;
134
134
  }
@@ -153,32 +153,8 @@ class ClientSqlExecutor {
153
153
  return useConnectionState(this.#connection, fn);
154
154
  }
155
155
  }
156
- async execute(query, params) {
157
- const rs = await this.#executeOnWorker(query, params);
158
- let rows;
159
- if (rs.resultSet) {
160
- const resultSet = rs.resultSet;
161
- function rowToJavaScriptObject(row) {
162
- const obj = {};
163
- resultSet.columns.forEach((key, idx) => (obj[key] = row[idx]));
164
- return obj;
165
- }
166
- const mapped = resultSet.rows.map(rowToJavaScriptObject);
167
- rows = {
168
- _array: mapped,
169
- length: mapped.length,
170
- item: (idx) => mapped[idx]
171
- };
172
- }
173
- return {
174
- rowsAffected: rs.changes,
175
- insertId: rs.lastInsertRowId,
176
- rows
177
- };
178
- }
179
156
  async executeRaw(query, params) {
180
- const rs = await this.#executeOnWorker(query, params);
181
- return rs.resultSet?.rows ?? [];
157
+ return await this.#executeOnWorker(query, params);
182
158
  }
183
159
  async #executeOnWorker(query, params) {
184
160
  return this.maybeTrace((c) => c.execute(this.#token, query, params), () => query);
@@ -187,14 +163,12 @@ class ClientSqlExecutor {
187
163
  const results = await this.maybeTrace((c) => c.executeBatch(this.#token, query, params), () => `${query} (batch of ${params.length})`);
188
164
  const result = { insertId: undefined, rowsAffected: 0 };
189
165
  for (const source of results) {
190
- result.insertId = source.lastInsertRowId;
191
- result.rowsAffected += source.changes;
166
+ result.insertId = source.insertId;
167
+ result.rowsAffected = (result.rowsAffected ?? 0) + source.rowsAffected;
192
168
  }
193
- return result;
169
+ return queryResultWithoutRows(result);
194
170
  }
195
171
  }
196
- class ClientLockContext extends DBGetUtilsDefaultMixin(ClientSqlExecutor) {
197
- }
198
172
  async function useConnectionState(state, workerPromise, fireActionOnAbort = false) {
199
173
  const controller = state.notifyRemoteClosed;
200
174
  if (controller) {