@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.
- package/README.md +1 -11
- package/bin/powersync.cjs +1 -1
- package/dist/index.react_native_web.js +2095 -0
- package/dist/index.react_native_web.js.map +1 -0
- package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js +2 -0
- package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js.map +1 -0
- package/dist/worker/FacadeVFS-d1ZDvud7.js +2 -0
- package/dist/worker/FacadeVFS-d1ZDvud7.js.map +1 -0
- package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js +2 -0
- package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js.map +1 -0
- package/dist/worker/MemoryVFS-DVJL5F8j.js +2 -0
- package/dist/worker/MemoryVFS-DVJL5F8j.js.map +1 -0
- package/dist/worker/OPFSCoopSyncVFS-BgTiWPfa.js +2 -0
- package/dist/worker/OPFSCoopSyncVFS-BgTiWPfa.js.map +1 -0
- package/dist/worker/OPFSWriteAheadVFS-Rt5CGCZP.js +2 -0
- package/dist/worker/OPFSWriteAheadVFS-Rt5CGCZP.js.map +1 -0
- package/dist/worker/assets/mc-wa-sqlite-BHScYYZw.wasm +0 -0
- package/dist/worker/assets/mc-wa-sqlite-async-DdlQmAUV.wasm +0 -0
- package/dist/worker/assets/wa-sqlite-CIxTmRHQ.wasm +0 -0
- package/dist/worker/assets/wa-sqlite-async-zc68fxQq.wasm +0 -0
- package/dist/worker/mc-wa-sqlite-PubB6u8c.js +2 -0
- package/dist/worker/mc-wa-sqlite-PubB6u8c.js.map +1 -0
- package/dist/worker/mc-wa-sqlite-async-DJG_ANKO.js +2 -0
- package/dist/worker/mc-wa-sqlite-async-DJG_ANKO.js.map +1 -0
- package/dist/worker/wa-sqlite-D1_4mGs8.js +2 -0
- package/dist/worker/wa-sqlite-D1_4mGs8.js.map +1 -0
- package/dist/worker/wa-sqlite-async-BxkwNY-2.js +2 -0
- package/dist/worker/wa-sqlite-async-BxkwNY-2.js.map +1 -0
- package/dist/worker/websockets-Q8W_lerF.js +9 -0
- package/dist/worker/websockets-Q8W_lerF.js.map +1 -0
- package/dist/worker/worker.js +7 -0
- package/dist/worker/worker.js.map +1 -0
- package/lib/attachments/IndexDBFileSystemAdapter.js.map +1 -0
- package/lib/{src/db → db}/NavigatorTriggerClaimManager.d.ts +1 -1
- package/lib/db/NavigatorTriggerClaimManager.js.map +1 -0
- package/lib/db/PowerSyncDatabase.d.ts +66 -0
- package/lib/{src/db → db}/PowerSyncDatabase.js +60 -79
- package/lib/db/PowerSyncDatabase.js.map +1 -0
- package/lib/db/adapters/AsyncWebAdapter.d.ts +32 -0
- package/lib/{src/db → db}/adapters/AsyncWebAdapter.js +18 -69
- package/lib/db/adapters/AsyncWebAdapter.js.map +1 -0
- package/lib/db/adapters/SSRDBAdapter.d.ts +17 -0
- package/lib/db/adapters/SSRDBAdapter.js +37 -0
- package/lib/db/adapters/SSRDBAdapter.js.map +1 -0
- package/lib/{src/db → db}/adapters/WebDBAdapter.d.ts +1 -1
- package/lib/db/adapters/WebDBAdapter.js.map +1 -0
- package/lib/db/adapters/acquireFromPool.d.ts +7 -0
- package/lib/db/adapters/acquireFromPool.js +60 -0
- package/lib/db/adapters/acquireFromPool.js.map +1 -0
- package/lib/db/adapters/memory-pool/client.d.ts +70 -0
- package/lib/db/adapters/memory-pool/client.js +269 -0
- package/lib/db/adapters/memory-pool/client.js.map +1 -0
- package/lib/db/adapters/memory-pool/shared.d.ts +51 -0
- package/lib/db/adapters/memory-pool/shared.js +16 -0
- package/lib/db/adapters/memory-pool/shared.js.map +1 -0
- package/lib/db/adapters/memory-pool/vfs.d.ts +19 -0
- package/lib/db/adapters/memory-pool/vfs.js +247 -0
- package/lib/db/adapters/memory-pool/vfs.js.map +1 -0
- package/lib/db/adapters/memory-pool/worker.js +45 -0
- package/lib/db/adapters/memory-pool/worker.js.map +1 -0
- package/lib/db/adapters/options.d.ts +94 -0
- package/lib/db/adapters/options.js +6 -0
- package/lib/db/adapters/options.js.map +1 -0
- package/lib/db/adapters/resolveAndValidateOptions.d.ts +13 -0
- package/lib/db/adapters/resolveAndValidateOptions.js +41 -0
- package/lib/db/adapters/resolveAndValidateOptions.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +3 -4
- package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.js +2 -2
- package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
- package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.js +11 -37
- package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
- package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.js +14 -7
- package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +30 -12
- package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.js +70 -16
- package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
- package/lib/db/adapters/wa-sqlite/StatementCache.d.ts +16 -0
- package/lib/db/adapters/wa-sqlite/StatementCache.js +44 -0
- package/lib/db/adapters/wa-sqlite/StatementCache.js.map +1 -0
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +18 -0
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +140 -0
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
- package/lib/{src/db → db}/adapters/wa-sqlite/vfs.d.ts +9 -2
- package/lib/{src/db → db}/adapters/wa-sqlite/vfs.js +6 -6
- package/lib/db/adapters/wa-sqlite/vfs.js.map +1 -0
- package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.d.ts +5 -16
- package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.js +7 -23
- package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
- package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.d.ts +15 -15
- package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.js +38 -70
- package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
- package/lib/db/sync/TabLocalStreamingSyncImplementation.d.ts +19 -0
- package/lib/db/sync/TabLocalStreamingSyncImplementation.js +70 -0
- package/lib/db/sync/TabLocalStreamingSyncImplementation.js.map +1 -0
- package/lib/db/sync/WebRemote.d.ts +10 -0
- package/lib/db/sync/WebRemote.js +33 -0
- package/lib/db/sync/WebRemote.js.map +1 -0
- package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.d.ts +2 -4
- package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.js +3 -2
- package/lib/db/sync/WebStreamingSyncImplementation.js.map +1 -0
- package/lib/db/sync/userAgent.js.map +1 -0
- package/lib/{src/index.d.ts → index.d.ts} +1 -3
- package/lib/{src/index.js → index.js} +1 -3
- package/lib/index.js.map +1 -0
- package/lib/shared/navigator.js.map +1 -0
- package/lib/shared/tab_close_signal.js.map +1 -0
- package/lib/worker/SharedWorkerConnectionRequest.d.ts +5 -0
- package/lib/worker/SharedWorkerConnectionRequest.js +2 -0
- package/lib/worker/SharedWorkerConnectionRequest.js.map +1 -0
- package/lib/worker/client.d.ts +17 -0
- package/lib/worker/client.js +90 -0
- package/lib/worker/client.js.map +1 -0
- package/lib/worker/db/MultiDatabaseServer.d.ts +21 -0
- package/lib/{src/worker → worker}/db/MultiDatabaseServer.js +45 -24
- package/lib/worker/db/MultiDatabaseServer.js.map +1 -0
- package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +14 -0
- package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
- package/lib/worker/sync/BroadcastLogger.d.ts +27 -0
- package/lib/worker/sync/BroadcastLogger.js +65 -0
- package/lib/worker/sync/BroadcastLogger.js.map +1 -0
- package/lib/{src/worker → worker}/sync/SharedSyncImplementation.d.ts +14 -25
- package/lib/{src/worker → worker}/sync/SharedSyncImplementation.js +140 -107
- package/lib/worker/sync/SharedSyncImplementation.js.map +1 -0
- package/lib/{src/worker → worker}/sync/WorkerClient.d.ts +4 -4
- package/lib/{src/worker → worker}/sync/WorkerClient.js +5 -5
- package/lib/worker/sync/WorkerClient.js.map +1 -0
- package/lib/worker/worker.d.ts +1 -0
- package/lib/worker/worker.js +34 -0
- package/lib/worker/worker.js.map +1 -0
- package/package.json +31 -32
- package/src/db/NavigatorTriggerClaimManager.ts +1 -1
- package/src/db/PowerSyncDatabase.ts +96 -144
- package/src/db/adapters/AsyncWebAdapter.ts +29 -86
- package/src/db/adapters/SSRDBAdapter.ts +14 -64
- package/src/db/adapters/WebDBAdapter.ts +1 -1
- package/src/db/adapters/acquireFromPool.ts +73 -0
- package/src/db/adapters/memory-pool/client.ts +367 -0
- package/src/db/adapters/memory-pool/shared.ts +79 -0
- package/src/db/adapters/memory-pool/vfs.ts +293 -0
- package/src/db/adapters/memory-pool/worker.ts +53 -0
- package/src/db/adapters/options.ts +108 -0
- package/src/db/adapters/resolveAndValidateOptions.ts +49 -0
- package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +4 -5
- package/src/db/adapters/wa-sqlite/DatabaseClient.ts +20 -56
- package/src/db/adapters/wa-sqlite/DatabaseServer.ts +18 -12
- package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +108 -30
- package/src/db/adapters/wa-sqlite/StatementCache.ts +50 -0
- package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +82 -125
- package/src/db/adapters/wa-sqlite/vfs.ts +13 -8
- package/src/db/sync/SSRWebStreamingSyncImplementation.ts +8 -36
- package/src/db/sync/SharedWebStreamingSyncImplementation.ts +47 -82
- package/src/db/sync/TabLocalStreamingSyncImplementation.ts +90 -0
- package/src/db/sync/WebRemote.ts +23 -26
- package/src/db/sync/WebStreamingSyncImplementation.ts +4 -5
- package/src/index.ts +1 -3
- package/src/worker/SharedWorkerConnectionRequest.ts +6 -0
- package/src/worker/client.ts +121 -0
- package/src/worker/db/MultiDatabaseServer.ts +59 -33
- package/src/worker/sync/AbstractSharedSyncClientProvider.ts +5 -10
- package/src/worker/sync/BroadcastLogger.ts +35 -103
- package/src/worker/sync/SharedSyncImplementation.ts +197 -138
- package/src/worker/sync/WorkerClient.ts +8 -8
- package/src/worker/worker.ts +38 -0
- package/dist/2075a31bb151adbb9767.wasm +0 -0
- package/dist/3322bc84de986b63c2cd.wasm +0 -0
- package/dist/8e97452e297be23b5e50.wasm +0 -0
- package/dist/fbc178b70d530e8ce02b.wasm +0 -0
- package/dist/index.umd.js +0 -7821
- package/dist/index.umd.js.map +0 -1
- package/dist/worker/SharedSyncImplementation.umd.js +0 -16139
- package/dist/worker/SharedSyncImplementation.umd.js.map +0 -1
- package/dist/worker/WASQLiteDB.umd.js +0 -17434
- package/dist/worker/WASQLiteDB.umd.js.map +0 -1
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +0 -3562
- 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
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js +0 -1400
- 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
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +0 -2478
- 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
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +0 -1681
- 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
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +0 -1820
- 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
- package/lib/package.json +0 -91
- package/lib/src/attachments/IndexDBFileSystemAdapter.js.map +0 -1
- package/lib/src/db/NavigatorTriggerClaimManager.js.map +0 -1
- package/lib/src/db/PowerSyncDatabase.d.ts +0 -78
- package/lib/src/db/PowerSyncDatabase.js.map +0 -1
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +0 -23
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +0 -27
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js.map +0 -1
- package/lib/src/db/adapters/AsyncWebAdapter.d.ts +0 -50
- package/lib/src/db/adapters/AsyncWebAdapter.js.map +0 -1
- package/lib/src/db/adapters/SSRDBAdapter.d.ts +0 -30
- package/lib/src/db/adapters/SSRDBAdapter.js +0 -69
- package/lib/src/db/adapters/SSRDBAdapter.js.map +0 -1
- package/lib/src/db/adapters/WebDBAdapter.js.map +0 -1
- package/lib/src/db/adapters/wa-sqlite/ConcurrentConnection.js.map +0 -1
- package/lib/src/db/adapters/wa-sqlite/DatabaseClient.js.map +0 -1
- package/lib/src/db/adapters/wa-sqlite/DatabaseServer.js.map +0 -1
- package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js.map +0 -1
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -45
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -146
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +0 -1
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +0 -15
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +0 -22
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js.map +0 -1
- package/lib/src/db/adapters/wa-sqlite/vfs.js.map +0 -1
- package/lib/src/db/adapters/web-sql-flags.d.ts +0 -92
- package/lib/src/db/adapters/web-sql-flags.js +0 -37
- package/lib/src/db/adapters/web-sql-flags.js.map +0 -1
- package/lib/src/db/sync/SSRWebStreamingSyncImplementation.js.map +0 -1
- package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js.map +0 -1
- package/lib/src/db/sync/WebRemote.d.ts +0 -7
- package/lib/src/db/sync/WebRemote.js +0 -33
- package/lib/src/db/sync/WebRemote.js.map +0 -1
- package/lib/src/db/sync/WebStreamingSyncImplementation.js.map +0 -1
- package/lib/src/db/sync/userAgent.js.map +0 -1
- package/lib/src/index.js.map +0 -1
- package/lib/src/shared/navigator.js.map +0 -1
- package/lib/src/shared/tab_close_signal.js.map +0 -1
- package/lib/src/worker/db/MultiDatabaseServer.d.ts +0 -17
- package/lib/src/worker/db/MultiDatabaseServer.js.map +0 -1
- package/lib/src/worker/db/WASQLiteDB.worker.d.ts +0 -4
- package/lib/src/worker/db/WASQLiteDB.worker.js +0 -31
- package/lib/src/worker/db/WASQLiteDB.worker.js.map +0 -1
- package/lib/src/worker/db/open-worker-database.d.ts +0 -14
- package/lib/src/worker/db/open-worker-database.js +0 -53
- package/lib/src/worker/db/open-worker-database.js.map +0 -1
- package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -19
- package/lib/src/worker/sync/AbstractSharedSyncClientProvider.js.map +0 -1
- package/lib/src/worker/sync/BroadcastLogger.d.ts +0 -47
- package/lib/src/worker/sync/BroadcastLogger.js +0 -129
- package/lib/src/worker/sync/BroadcastLogger.js.map +0 -1
- package/lib/src/worker/sync/SharedSyncImplementation.js.map +0 -1
- package/lib/src/worker/sync/SharedSyncImplementation.worker.js +0 -12
- package/lib/src/worker/sync/SharedSyncImplementation.worker.js.map +0 -1
- package/lib/src/worker/sync/WorkerClient.js.map +0 -1
- package/lib/tsconfig.tsbuildinfo +0 -1
- package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +0 -47
- package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +0 -24
- package/src/db/adapters/web-sql-flags.ts +0 -141
- package/src/worker/db/WASQLiteDB.worker.ts +0 -35
- package/src/worker/db/open-worker-database.ts +0 -62
- package/src/worker/sync/SharedSyncImplementation.worker.ts +0 -14
- /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
- /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.js +0 -0
- /package/lib/{src/db → db}/NavigatorTriggerClaimManager.js +0 -0
- /package/lib/{src/db → db}/adapters/WebDBAdapter.js +0 -0
- /package/lib/{src/worker/sync/SharedSyncImplementation.worker.d.ts → db/adapters/memory-pool/worker.d.ts} +0 -0
- /package/lib/{src/db → db}/sync/userAgent.d.ts +0 -0
- /package/lib/{src/db → db}/sync/userAgent.js +0 -0
- /package/lib/{src/shared → shared}/navigator.d.ts +0 -0
- /package/lib/{src/shared → shared}/navigator.js +0 -0
- /package/lib/{src/shared → shared}/tab_close_signal.d.ts +0 -0
- /package/lib/{src/shared → shared}/tab_close_signal.js +0 -0
- /package/lib/{src/worker → worker}/sync/AbstractSharedSyncClientProvider.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndexDBFileSystemAdapter.js","sourceRoot":"","sources":["../../src/attachments/IndexDBFileSystemAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavigatorTriggerClaimManager.js","sourceRoot":"","sources":["../../src/db/NavigatorTriggerClaimManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;GAGG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAwB;IAClE,KAAK,CAAC,WAAW,CAAC,UAAkB;QAClC,OAAO,IAAI,OAAO,CAAC,CAAC,eAAe,EAAE,EAAE;YACrC,iBAAiB,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;gBACjD,MAAM,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE;oBACtC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC7C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,MAAM,YAAY,GAAG,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,CAAC;QACvD,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC;IACpF,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type PowerSyncBackendConnector, type PowerSyncCloseOptions, BasePowerSyncDatabaseOptions, DatabaseSource, DBAdapter, PowerSyncDatabaseConstructor, CommonPowerSyncDatabase } from '@powersync/common';
|
|
2
|
+
import { BasePowerSyncDatabase, CreateSyncImplementationOptions, Mutex, StreamingSyncImplementation, TriggerManagerConfig } from '@powersync/shared-internals';
|
|
3
|
+
import { WebSpecificOpenOptions, WebSQLOpenOptions } from './adapters/options.js';
|
|
4
|
+
export type WebPowerSyncDatabaseOptions = BasePowerSyncDatabaseOptions & DatabaseSource<WebSQLOpenOptions> & WebSpecificOptions;
|
|
5
|
+
export interface WebSpecificOptions {
|
|
6
|
+
sync?: WebSyncOptions;
|
|
7
|
+
/**
|
|
8
|
+
* Broadcast logs from shared workers, such as the shared sync worker,
|
|
9
|
+
* to individual tabs. This defaults to true.
|
|
10
|
+
*/
|
|
11
|
+
broadcastLogs?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface WebSyncOptions {
|
|
14
|
+
/**
|
|
15
|
+
* Allows you to override the default sync worker.
|
|
16
|
+
*
|
|
17
|
+
* You can either provide a path to the worker script
|
|
18
|
+
* or a factory method that returns a worker.
|
|
19
|
+
*/
|
|
20
|
+
worker?: string | URL | (() => SharedWorker);
|
|
21
|
+
/**
|
|
22
|
+
* The log level for logs from the sync worker.
|
|
23
|
+
*
|
|
24
|
+
* Defaults to {@link LogLevels.info}.
|
|
25
|
+
*/
|
|
26
|
+
logLevel?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @internal Use {@link PowerSyncDatabase} instead, this class is only used by other SDKs also needing web support.
|
|
30
|
+
*/
|
|
31
|
+
export declare class WebPowerSyncDatabase extends BasePowerSyncDatabase<WebPowerSyncDatabaseOptions> {
|
|
32
|
+
static SHARED_MUTEX: Mutex;
|
|
33
|
+
protected resolvedOpenOptions: WebSpecificOpenOptions;
|
|
34
|
+
protected enableBroadcastLogs: boolean;
|
|
35
|
+
constructor(options: WebPowerSyncDatabaseOptions);
|
|
36
|
+
_initialize(): Promise<void>;
|
|
37
|
+
protected generateTriggerManagerConfig(): TriggerManagerConfig;
|
|
38
|
+
protected openDBAdapter(): DBAdapter;
|
|
39
|
+
/**
|
|
40
|
+
* Closes the database connection.
|
|
41
|
+
* By default the sync stream client is only disconnected if
|
|
42
|
+
* multiple tabs are not enabled.
|
|
43
|
+
*/
|
|
44
|
+
close(options?: PowerSyncCloseOptions): Promise<void>;
|
|
45
|
+
protected loadVersion(): Promise<void>;
|
|
46
|
+
protected resolveOfflineSyncStatus(): Promise<void>;
|
|
47
|
+
protected runExclusive<T>(cb: () => Promise<T>): Promise<T>;
|
|
48
|
+
protected generateSyncStreamImplementation(connector: PowerSyncBackendConnector, options: CreateSyncImplementationOptions): StreamingSyncImplementation;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A PowerSync database which provides SQLite functionality
|
|
52
|
+
* which is automatically synced.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* export const db = new PowerSyncDatabase({
|
|
57
|
+
* schema: AppSchema,
|
|
58
|
+
* database: {
|
|
59
|
+
* dbFilename: 'example.db'
|
|
60
|
+
* }
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare const PowerSyncDatabase: PowerSyncDatabaseConstructor<WebPowerSyncDatabaseOptions>;
|
|
65
|
+
export interface PowerSyncDatabase extends CommonPowerSyncDatabase {
|
|
66
|
+
}
|
|
@@ -1,58 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LogLevels } from '@powersync/common';
|
|
2
|
+
import { BasePowerSyncDatabase, Mutex, openDatabase } from '@powersync/shared-internals';
|
|
2
3
|
import { getNavigatorLocks } from '../shared/navigator.js';
|
|
3
4
|
import { NAVIGATOR_TRIGGER_CLAIM_MANAGER } from './NavigatorTriggerClaimManager.js';
|
|
4
5
|
import { WASQLiteOpenFactory } from './adapters/wa-sqlite/WASQLiteOpenFactory.js';
|
|
5
|
-
import { DEFAULT_WEB_SQL_FLAGS, isServerSide, resolveWebSQLFlags } from './adapters/web-sql-flags.js';
|
|
6
6
|
import { SSRStreamingSyncImplementation } from './sync/SSRWebStreamingSyncImplementation.js';
|
|
7
7
|
import { SharedWebStreamingSyncImplementation } from './sync/SharedWebStreamingSyncImplementation.js';
|
|
8
8
|
import { WebRemote } from './sync/WebRemote.js';
|
|
9
|
-
import { WebStreamingSyncImplementation } from './sync/WebStreamingSyncImplementation.js';
|
|
10
9
|
import { AsyncDbAdapter } from './adapters/AsyncWebAdapter.js';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
externallyUnload: false
|
|
14
|
-
};
|
|
15
|
-
export const resolveWebPowerSyncFlags = (flags) => {
|
|
16
|
-
return {
|
|
17
|
-
...DEFAULT_POWERSYNC_FLAGS,
|
|
18
|
-
...flags,
|
|
19
|
-
...resolveWebSQLFlags(flags)
|
|
20
|
-
};
|
|
21
|
-
};
|
|
10
|
+
import { resolveAndValidateOptions } from './adapters/resolveAndValidateOptions.js';
|
|
11
|
+
import { TabLocalStreamingSyncImplementation } from './sync/TabLocalStreamingSyncImplementation.js';
|
|
22
12
|
/**
|
|
23
|
-
*
|
|
13
|
+
* @internal Use {@link PowerSyncDatabase} instead, this class is only used by other SDKs also needing web support.
|
|
24
14
|
*/
|
|
25
|
-
|
|
26
|
-
if ('database' in options && 'encryptionKey' in options) {
|
|
27
|
-
const { database } = options;
|
|
28
|
-
if (isSQLOpenFactory(database) || isDBAdapter(database)) {
|
|
29
|
-
throw new Error(`Invalid configuration: 'encryptionKey' should only be included inside the database object when using a custom ${isSQLOpenFactory(database) ? 'WASQLiteOpenFactory' : 'WASQLiteDBAdapter'} constructor.`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* A PowerSync database which provides SQLite functionality
|
|
35
|
-
* which is automatically synced.
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* ```typescript
|
|
39
|
-
* export const db = new PowerSyncDatabase({
|
|
40
|
-
* schema: AppSchema,
|
|
41
|
-
* database: {
|
|
42
|
-
* dbFilename: 'example.db'
|
|
43
|
-
* }
|
|
44
|
-
* });
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
|
|
48
|
-
options;
|
|
15
|
+
export class WebPowerSyncDatabase extends BasePowerSyncDatabase {
|
|
49
16
|
static SHARED_MUTEX = new Mutex();
|
|
50
|
-
|
|
17
|
+
resolvedOpenOptions;
|
|
18
|
+
enableBroadcastLogs;
|
|
51
19
|
constructor(options) {
|
|
20
|
+
const resolvedOpenOptions = resolveAndValidateOptions('database' in options ? options.database : {});
|
|
52
21
|
super(options);
|
|
53
|
-
this.
|
|
54
|
-
|
|
55
|
-
this.resolvedFlags = resolveWebPowerSyncFlags(options.flags);
|
|
22
|
+
this.resolvedOpenOptions = resolvedOpenOptions;
|
|
23
|
+
this.enableBroadcastLogs = options.broadcastLogs ?? true;
|
|
56
24
|
}
|
|
57
25
|
async _initialize() {
|
|
58
26
|
if (this.database instanceof AsyncDbAdapter) {
|
|
@@ -79,13 +47,14 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
|
|
|
79
47
|
claimManager: NAVIGATOR_TRIGGER_CLAIM_MANAGER
|
|
80
48
|
};
|
|
81
49
|
}
|
|
82
|
-
openDBAdapter(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
50
|
+
openDBAdapter() {
|
|
51
|
+
return openDatabase(this.options, (options) => {
|
|
52
|
+
const defaultFactory = new WASQLiteOpenFactory({
|
|
53
|
+
logger: this.logger,
|
|
54
|
+
open: options
|
|
55
|
+
});
|
|
56
|
+
return defaultFactory.openDB();
|
|
87
57
|
});
|
|
88
|
-
return defaultFactory.openDB();
|
|
89
58
|
}
|
|
90
59
|
/**
|
|
91
60
|
* Closes the database connection.
|
|
@@ -95,27 +64,24 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
|
|
|
95
64
|
close(options) {
|
|
96
65
|
return super.close({
|
|
97
66
|
// Don't disconnect by default if multiple tabs are enabled
|
|
98
|
-
disconnect: options?.disconnect ?? !this.
|
|
67
|
+
disconnect: options?.disconnect ?? !this.resolvedOpenOptions.enableMultiTabs
|
|
99
68
|
});
|
|
100
69
|
}
|
|
101
70
|
async loadVersion() {
|
|
102
|
-
if (
|
|
71
|
+
if (this.resolvedOpenOptions.ssrMode) {
|
|
103
72
|
return;
|
|
104
73
|
}
|
|
105
74
|
return super.loadVersion();
|
|
106
75
|
}
|
|
107
76
|
async resolveOfflineSyncStatus() {
|
|
108
|
-
if (
|
|
77
|
+
if (this.resolvedOpenOptions.ssrMode) {
|
|
109
78
|
return;
|
|
110
79
|
}
|
|
111
80
|
return super.resolveOfflineSyncStatus();
|
|
112
81
|
}
|
|
113
|
-
generateBucketStorageAdapter() {
|
|
114
|
-
return new SqliteBucketStorage(this.database);
|
|
115
|
-
}
|
|
116
82
|
async runExclusive(cb) {
|
|
117
|
-
if (this.
|
|
118
|
-
return
|
|
83
|
+
if (this.resolvedOpenOptions.ssrMode) {
|
|
84
|
+
return WebPowerSyncDatabase.SHARED_MUTEX.runExclusive(cb);
|
|
119
85
|
}
|
|
120
86
|
return getNavigatorLocks().request(`lock-${this.database.name}`, cb);
|
|
121
87
|
}
|
|
@@ -123,36 +89,51 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
|
|
|
123
89
|
const remote = new WebRemote(connector, this.logger);
|
|
124
90
|
const syncOptions = {
|
|
125
91
|
...this.options,
|
|
126
|
-
...options,
|
|
127
|
-
|
|
128
|
-
adapter: this.bucketStorageAdapter,
|
|
129
|
-
remote,
|
|
130
|
-
uploadCrud: async () => {
|
|
131
|
-
await this.waitForReady();
|
|
132
|
-
await connector.uploadData(this);
|
|
133
|
-
},
|
|
134
|
-
identifier: this.database.name,
|
|
135
|
-
logger: this.logger
|
|
92
|
+
...this.commonSyncOptions(connector, options),
|
|
93
|
+
remote
|
|
136
94
|
};
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
95
|
+
if (this.resolvedOpenOptions.ssrMode) {
|
|
96
|
+
return new SSRStreamingSyncImplementation();
|
|
97
|
+
}
|
|
98
|
+
else if (this.resolvedOpenOptions.enableMultiTabs) {
|
|
99
|
+
if (!this.enableBroadcastLogs) {
|
|
100
|
+
const warning = `
|
|
143
101
|
Multiple tabs are enabled, but broadcasting of logs is disabled.
|
|
144
102
|
Logs for shared sync worker will only be available in the shared worker context
|
|
145
103
|
`;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
104
|
+
const logger = this.options.logger;
|
|
105
|
+
logger ? logger.log({ level: LogLevels.warn, message: warning }) : console.warn(warning);
|
|
106
|
+
}
|
|
107
|
+
if ('shareConnection' in this.database) {
|
|
149
108
|
return new SharedWebStreamingSyncImplementation({
|
|
150
109
|
...syncOptions,
|
|
151
|
-
db: this.database // This should always be the case
|
|
110
|
+
db: this.database, // This should always be the case
|
|
111
|
+
logLevel: this.options.sync?.logLevel ?? LogLevels.info,
|
|
112
|
+
enableBroadcastLogs: this.enableBroadcastLogs
|
|
152
113
|
});
|
|
153
|
-
|
|
154
|
-
|
|
114
|
+
}
|
|
115
|
+
this.logger.log({
|
|
116
|
+
level: LogLevels.warn,
|
|
117
|
+
message: "Not using a shared sync worker because the database adapter doesn't support it."
|
|
118
|
+
});
|
|
155
119
|
}
|
|
120
|
+
return new TabLocalStreamingSyncImplementation(syncOptions);
|
|
156
121
|
}
|
|
157
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* A PowerSync database which provides SQLite functionality
|
|
125
|
+
* which is automatically synced.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* export const db = new PowerSyncDatabase({
|
|
130
|
+
* schema: AppSchema,
|
|
131
|
+
* database: {
|
|
132
|
+
* dbFilename: 'example.db'
|
|
133
|
+
* }
|
|
134
|
+
* });
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
// Typed constructor to avoid leaking AbstractPowerSyncDatabase into the public interface
|
|
138
|
+
export const PowerSyncDatabase = WebPowerSyncDatabase;
|
|
158
139
|
//# sourceMappingURL=PowerSyncDatabase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PowerSyncDatabase.js","sourceRoot":"","sources":["../../src/db/PowerSyncDatabase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DBAdapter, DBAdapterListener, DBLockOptions, LockContext } from '@powersync/common';
|
|
2
|
+
import { SharedConnectionWorker, WebDBAdapterConfiguration } from './WebDBAdapter.js';
|
|
3
|
+
import { DatabaseClient } from './wa-sqlite/DatabaseClient.js';
|
|
4
|
+
/**
|
|
5
|
+
* A connection pool implementation delegating to another pool opened asynchronnously.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AsyncDbAdapter extends DBAdapter {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
protected readonly state: Promise<PoolState>;
|
|
10
|
+
protected resolvedWriter?: DatabaseClient;
|
|
11
|
+
private readonly pendingListeners;
|
|
12
|
+
constructor(inner: Promise<PoolConnection>, name: string);
|
|
13
|
+
init(): Promise<void>;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
readLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
16
|
+
writeLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
17
|
+
refreshSchema(): Promise<void>;
|
|
18
|
+
registerListener(listener: Partial<DBAdapterListener>): () => void;
|
|
19
|
+
shareConnection(): Promise<SharedConnectionWorker>;
|
|
20
|
+
getConfiguration(): WebDBAdapterConfiguration;
|
|
21
|
+
}
|
|
22
|
+
export interface PoolConnection {
|
|
23
|
+
writer: DatabaseClient;
|
|
24
|
+
additionalReaders: DatabaseClient[];
|
|
25
|
+
}
|
|
26
|
+
interface PoolState {
|
|
27
|
+
writer: DatabaseClient;
|
|
28
|
+
withConnection<T>(allowReadOnly: boolean, fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
29
|
+
close(): Promise<void>;
|
|
30
|
+
refreshSchema(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DBAdapter } from '@powersync/common';
|
|
2
|
+
import { Mutex, Semaphore } from '@powersync/shared-internals';
|
|
3
|
+
import { acquireFromPool } from './acquireFromPool.js';
|
|
2
4
|
/**
|
|
3
5
|
* A connection pool implementation delegating to another pool opened asynchronnously.
|
|
4
6
|
*/
|
|
5
|
-
class
|
|
7
|
+
export class AsyncDbAdapter extends DBAdapter {
|
|
6
8
|
name;
|
|
7
9
|
state;
|
|
8
10
|
resolvedWriter;
|
|
9
11
|
pendingListeners = new Set();
|
|
10
12
|
constructor(inner, name) {
|
|
13
|
+
super();
|
|
11
14
|
this.name = name;
|
|
12
15
|
this.state = inner.then((client) => {
|
|
13
16
|
for (const pending of this.pendingListeners) {
|
|
@@ -58,6 +61,16 @@ class AsyncConnectionPool {
|
|
|
58
61
|
};
|
|
59
62
|
}
|
|
60
63
|
}
|
|
64
|
+
async shareConnection() {
|
|
65
|
+
const state = await this.state;
|
|
66
|
+
return state.writer.shareConnection();
|
|
67
|
+
}
|
|
68
|
+
getConfiguration() {
|
|
69
|
+
if (this.resolvedWriter) {
|
|
70
|
+
return this.resolvedWriter.getConfiguration();
|
|
71
|
+
}
|
|
72
|
+
throw new Error('AsyncDbAdapter.getConfiguration() can only be called after initializing it.');
|
|
73
|
+
}
|
|
61
74
|
}
|
|
62
75
|
function singleConnectionPoolState(connection) {
|
|
63
76
|
return {
|
|
@@ -83,61 +96,9 @@ function readWritePoolState(writer, readers) {
|
|
|
83
96
|
return {
|
|
84
97
|
writer,
|
|
85
98
|
async withConnection(allowReadOnly, fn, options) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
let release;
|
|
90
|
-
if (options?.timeoutMs) {
|
|
91
|
-
timeout = setTimeout(() => abortController.abort, options.timeoutMs);
|
|
92
|
-
}
|
|
93
|
-
try {
|
|
94
|
-
if (allowReadOnly) {
|
|
95
|
-
let connection;
|
|
96
|
-
// Even if we have a pool of read connections, it's typically very small and we assume that most queries are
|
|
97
|
-
// reads. So, we want to request any connection from the read pool and the dedicated write connection (which
|
|
98
|
-
// can also serve reads). We race for the first connection we can obtain this way, and then abort the other
|
|
99
|
-
// request.
|
|
100
|
-
[connection, release] = await new Promise((resolve, reject) => {
|
|
101
|
-
let didComplete = false;
|
|
102
|
-
function complete() {
|
|
103
|
-
didComplete = true;
|
|
104
|
-
abortController.abort();
|
|
105
|
-
}
|
|
106
|
-
function completeSuccess(connection, returnFn) {
|
|
107
|
-
if (didComplete) {
|
|
108
|
-
// We're not going to use this connection, so return it immediately.
|
|
109
|
-
returnFn();
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
complete();
|
|
113
|
-
resolve([connection, returnFn]);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
function completeError(error) {
|
|
117
|
-
// We either have a working connection already, or we've rejected the promise. Either way, we don't need
|
|
118
|
-
// to do either thing again.
|
|
119
|
-
if (didComplete)
|
|
120
|
-
return;
|
|
121
|
-
complete();
|
|
122
|
-
reject(error);
|
|
123
|
-
}
|
|
124
|
-
writerMutex.acquire(abortSignal).then((unlock) => completeSuccess(writer, unlock), completeError);
|
|
125
|
-
readerSemaphore
|
|
126
|
-
.requestOne(abortSignal)
|
|
127
|
-
.then(({ item, release }) => completeSuccess(item, release), completeError);
|
|
128
|
-
});
|
|
129
|
-
return await connection.readLock(fn);
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
return await writerMutex.runExclusive(() => writer.writeLock(fn), abortSignal);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
finally {
|
|
136
|
-
if (timeout != null) {
|
|
137
|
-
clearTimeout(timeout);
|
|
138
|
-
}
|
|
139
|
-
release?.();
|
|
140
|
-
}
|
|
99
|
+
return acquireFromPool(writerMutex, writer, readerSemaphore, (connection) => {
|
|
100
|
+
return allowReadOnly ? connection.readLock(fn) : connection.writeLock(fn);
|
|
101
|
+
}, options, allowReadOnly);
|
|
141
102
|
},
|
|
142
103
|
async close() {
|
|
143
104
|
await writer.close();
|
|
@@ -149,16 +110,4 @@ function readWritePoolState(writer, readers) {
|
|
|
149
110
|
}
|
|
150
111
|
};
|
|
151
112
|
}
|
|
152
|
-
export class AsyncDbAdapter extends DBAdapterDefaultMixin(AsyncConnectionPool) {
|
|
153
|
-
async shareConnection() {
|
|
154
|
-
const state = await this.state;
|
|
155
|
-
return state.writer.shareConnection();
|
|
156
|
-
}
|
|
157
|
-
getConfiguration() {
|
|
158
|
-
if (this.resolvedWriter) {
|
|
159
|
-
return this.resolvedWriter.getConfiguration();
|
|
160
|
-
}
|
|
161
|
-
throw new Error('AsyncDbAdapter.getConfiguration() can only be called after initializing it.');
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
113
|
//# sourceMappingURL=AsyncWebAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncWebAdapter.js","sourceRoot":"","sources":["../../../src/db/adapters/AsyncWebAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { DBAdapter, DBLockOptions, LockContext } from '@powersync/common';
|
|
2
|
+
import { Mutex } from '@powersync/shared-internals';
|
|
3
|
+
/**
|
|
4
|
+
* Implements a Mock DB adapter for use in Server Side Rendering (SSR).
|
|
5
|
+
* This adapter will return empty results for queries, which will allow
|
|
6
|
+
* server rendered views to initially generate scaffolding components
|
|
7
|
+
*/
|
|
8
|
+
export declare class SSRDBAdapter extends DBAdapter {
|
|
9
|
+
name: string;
|
|
10
|
+
readMutex: Mutex;
|
|
11
|
+
writeMutex: Mutex;
|
|
12
|
+
constructor();
|
|
13
|
+
close(): void;
|
|
14
|
+
readLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
15
|
+
writeLock<T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
16
|
+
refreshSchema(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DBAdapter, LockContext } from '@powersync/common';
|
|
2
|
+
import { Mutex } from '@powersync/shared-internals';
|
|
3
|
+
const MOCK_QUERY_RESPONSE = {
|
|
4
|
+
rowsAffected: 0,
|
|
5
|
+
columnNames: [],
|
|
6
|
+
rawRows: []
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Implements a Mock DB adapter for use in Server Side Rendering (SSR).
|
|
10
|
+
* This adapter will return empty results for queries, which will allow
|
|
11
|
+
* server rendered views to initially generate scaffolding components
|
|
12
|
+
*/
|
|
13
|
+
export class SSRDBAdapter extends DBAdapter {
|
|
14
|
+
name;
|
|
15
|
+
readMutex;
|
|
16
|
+
writeMutex;
|
|
17
|
+
constructor() {
|
|
18
|
+
super();
|
|
19
|
+
this.name = 'SSR DB';
|
|
20
|
+
this.readMutex = new Mutex();
|
|
21
|
+
this.writeMutex = new Mutex();
|
|
22
|
+
}
|
|
23
|
+
close() { }
|
|
24
|
+
async readLock(fn, options) {
|
|
25
|
+
return fn(new StubLockContext());
|
|
26
|
+
}
|
|
27
|
+
async writeLock(fn, options) {
|
|
28
|
+
return fn(new StubLockContext());
|
|
29
|
+
}
|
|
30
|
+
async refreshSchema() { }
|
|
31
|
+
}
|
|
32
|
+
class StubLockContext extends LockContext {
|
|
33
|
+
async executeRaw() {
|
|
34
|
+
return MOCK_QUERY_RESPONSE;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=SSRDBAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSRDBAdapter.js","sourceRoot":"","sources":["../../../src/db/adapters/SSRDBAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAEpD,MAAM,mBAAmB,GAAmB;IAC1C,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,EAAE;IACf,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF;;;;GAIG;AACH,MAAM,OAAO,YAAa,SAAQ,SAAS;IACzC,IAAI,CAAS;IACb,SAAS,CAAQ;IACjB,UAAU,CAAQ;IAElB;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,KAAI,CAAC;IAEV,KAAK,CAAC,QAAQ,CAAI,EAAmC,EAAE,OAAuB;QAC5E,OAAO,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,SAAS,CAAI,EAAmC,EAAE,OAAuB;QAC7E,OAAO,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,aAAa,KAAmB,CAAC;CACxC;AAED,MAAM,eAAgB,SAAQ,WAAW;IACvC,KAAK,CAAC,UAAU;QACd,OAAO,mBAAmB,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebDBAdapter.js","sourceRoot":"","sources":["../../../src/db/adapters/WebDBAdapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DBLockOptions } from '@powersync/common';
|
|
2
|
+
import type { Mutex, Semaphore } from '@powersync/shared-internals';
|
|
3
|
+
/**
|
|
4
|
+
* Internal helper function to acquire a connection from a pool that has a designated writer, additional readers, and
|
|
5
|
+
* also allows dispatching reads to the writer.
|
|
6
|
+
*/
|
|
7
|
+
export declare function acquireFromPool<Connection, Res>(writerMutex: Mutex, writer: Connection, readers: Semaphore<Connection> | undefined, callback: (connection: Connection) => Promise<Res>, options: DBLockOptions | undefined, allowReadOnly: boolean): Promise<Res>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal helper function to acquire a connection from a pool that has a designated writer, additional readers, and
|
|
3
|
+
* also allows dispatching reads to the writer.
|
|
4
|
+
*/
|
|
5
|
+
export async function acquireFromPool(writerMutex, writer, readers, callback, options, allowReadOnly) {
|
|
6
|
+
const abortController = new AbortController();
|
|
7
|
+
const abortSignal = abortController.signal;
|
|
8
|
+
let timeout = null;
|
|
9
|
+
let release;
|
|
10
|
+
if (options?.timeoutMs) {
|
|
11
|
+
timeout = setTimeout(() => abortController.abort('requesting database timed out'), options.timeoutMs);
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
if (allowReadOnly) {
|
|
15
|
+
let connection;
|
|
16
|
+
// Even if we have a pool of read connections, it's typically very small and we assume that most queries are
|
|
17
|
+
// reads. So, we want to request any connection from the read pool and the dedicated write connection (which
|
|
18
|
+
// can also serve reads). We race for the first connection we can obtain this way, and then abort the other
|
|
19
|
+
// request.
|
|
20
|
+
[connection, release] = await new Promise((resolve, reject) => {
|
|
21
|
+
let didComplete = false;
|
|
22
|
+
function complete() {
|
|
23
|
+
didComplete = true;
|
|
24
|
+
abortController.abort();
|
|
25
|
+
}
|
|
26
|
+
function completeSuccess(connection, returnFn) {
|
|
27
|
+
if (didComplete) {
|
|
28
|
+
// We're not going to use this connection, so return it immediately.
|
|
29
|
+
returnFn();
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
complete();
|
|
33
|
+
resolve([connection, returnFn]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function completeError(error) {
|
|
37
|
+
// We either have a working connection already, or we've rejected the promise. Either way, we don't need
|
|
38
|
+
// to do either thing again.
|
|
39
|
+
if (didComplete)
|
|
40
|
+
return;
|
|
41
|
+
complete();
|
|
42
|
+
reject(error);
|
|
43
|
+
}
|
|
44
|
+
writerMutex.acquire(abortSignal).then((unlock) => completeSuccess(writer, unlock), completeError);
|
|
45
|
+
readers?.requestOne(abortSignal).then(({ item, release }) => completeSuccess(item, release), completeError);
|
|
46
|
+
});
|
|
47
|
+
return await callback(connection);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return await writerMutex.runExclusive(() => callback(writer), abortSignal);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
if (timeout != null) {
|
|
55
|
+
clearTimeout(timeout);
|
|
56
|
+
}
|
|
57
|
+
release?.();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=acquireFromPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acquireFromPool.js","sourceRoot":"","sources":["../../../src/db/adapters/acquireFromPool.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAkB,EAClB,MAAkB,EAClB,OAA0C,EAC1C,QAAkD,EAClD,OAAkC,EAClC,aAAsB;IAEtB,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC;IAE3C,IAAI,OAAO,GAAQ,IAAI,CAAC;IACxB,IAAI,OAA6B,CAAC;IAClC,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,+BAA+B,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxG,CAAC;IAED,IAAI,CAAC;QACH,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,UAAsB,CAAC;YAE3B,4GAA4G;YAC5G,4GAA4G;YAC5G,2GAA2G;YAC3G,WAAW;YACX,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,OAAO,CAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACpF,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,SAAS,QAAQ;oBACf,WAAW,GAAG,IAAI,CAAC;oBACnB,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;gBAED,SAAS,eAAe,CAAC,UAAsB,EAAE,QAAkB;oBACjE,IAAI,WAAW,EAAE,CAAC;wBAChB,oEAAoE;wBACpE,QAAQ,EAAE,CAAC;oBACb,CAAC;yBAAM,CAAC;wBACN,QAAQ,EAAE,CAAC;wBACX,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAED,SAAS,aAAa,CAAC,KAAc;oBACnC,wGAAwG;oBACxG,4BAA4B;oBAC5B,IAAI,WAAW;wBAAE,OAAO;oBAExB,QAAQ,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;gBAED,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;gBAClG,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;YAC9G,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
|