@powersync/web 0.0.0-dev-20250207081035 → 0.0.0-dev-20250210155038
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/dist/index.umd.js +44 -4
- package/dist/index.umd.js.map +1 -1
- package/dist/worker/SharedSyncImplementation.umd.js +54 -23
- package/dist/worker/SharedSyncImplementation.umd.js.map +1 -1
- package/dist/worker/WASQLiteDB.umd.js +24 -23
- package/dist/worker/WASQLiteDB.umd.js.map +1 -1
- package/lib/package.json +2 -6
- package/lib/src/db/adapters/WorkerWrappedAsyncDatabaseConnection.d.ts +2 -0
- package/lib/src/db/adapters/WorkerWrappedAsyncDatabaseConnection.js +31 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteConnection.js +1 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteDBAdapter.d.ts +1 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteDBAdapter.js +4 -2
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +5 -2
- package/lib/src/db/adapters/web-sql-flags.d.ts +10 -0
- package/lib/src/db/adapters/web-sql-flags.js +1 -0
- package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js +3 -3
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -9
package/dist/index.umd.js
CHANGED
|
@@ -34086,8 +34086,12 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
34086
34086
|
*/
|
|
34087
34087
|
class WorkerWrappedAsyncDatabaseConnection {
|
|
34088
34088
|
options;
|
|
34089
|
+
releaseSharedConnectionLock;
|
|
34090
|
+
lockAbortController;
|
|
34089
34091
|
constructor(options) {
|
|
34090
34092
|
this.options = options;
|
|
34093
|
+
this.releaseSharedConnectionLock = null;
|
|
34094
|
+
this.lockAbortController = new AbortController();
|
|
34091
34095
|
}
|
|
34092
34096
|
get baseConnection() {
|
|
34093
34097
|
return this.options.baseConnection;
|
|
@@ -34100,6 +34104,30 @@ class WorkerWrappedAsyncDatabaseConnection {
|
|
|
34100
34104
|
*/
|
|
34101
34105
|
async shareConnection() {
|
|
34102
34106
|
const { identifier, remote } = this.options;
|
|
34107
|
+
/**
|
|
34108
|
+
* Hold a navigator lock in order to avoid features such as Chrome's frozen tabs,
|
|
34109
|
+
* or Edge's sleeping tabs from pausing the thread for this connection.
|
|
34110
|
+
* This promise resolves once a lock is obtained.
|
|
34111
|
+
* This lock will be held as long as this connection is open.
|
|
34112
|
+
* The `shareConnection` method should not be called on multiple tabs concurrently.
|
|
34113
|
+
*/
|
|
34114
|
+
await new Promise((lockObtained) => navigator.locks
|
|
34115
|
+
.request(`shared-connection-${this.options.identifier}`, {
|
|
34116
|
+
signal: this.lockAbortController.signal
|
|
34117
|
+
}, async () => {
|
|
34118
|
+
lockObtained();
|
|
34119
|
+
// Free the lock when the connection is already closed.
|
|
34120
|
+
if (this.lockAbortController.signal.aborted) {
|
|
34121
|
+
return;
|
|
34122
|
+
}
|
|
34123
|
+
// Hold the lock while the shared connection is in use.
|
|
34124
|
+
await new Promise((releaseLock) => {
|
|
34125
|
+
// We can use the resolver to free the lock
|
|
34126
|
+
this.releaseSharedConnectionLock = releaseLock;
|
|
34127
|
+
});
|
|
34128
|
+
})
|
|
34129
|
+
// We aren't concerned with errors here
|
|
34130
|
+
.catch(() => { }));
|
|
34103
34131
|
const newPort = await remote[comlink__WEBPACK_IMPORTED_MODULE_0__.createEndpoint]();
|
|
34104
34132
|
return { port: newPort, identifier };
|
|
34105
34133
|
}
|
|
@@ -34111,6 +34139,9 @@ class WorkerWrappedAsyncDatabaseConnection {
|
|
|
34111
34139
|
return this.baseConnection.registerOnTableChange(comlink__WEBPACK_IMPORTED_MODULE_0__.proxy(callback));
|
|
34112
34140
|
}
|
|
34113
34141
|
async close() {
|
|
34142
|
+
// Abort any pending lock requests.
|
|
34143
|
+
this.lockAbortController.abort();
|
|
34144
|
+
this.releaseSharedConnectionLock?.();
|
|
34114
34145
|
await this.baseConnection.close();
|
|
34115
34146
|
this.options.remote[comlink__WEBPACK_IMPORTED_MODULE_0__.releaseProxy]();
|
|
34116
34147
|
this.options.onClose?.();
|
|
@@ -34338,6 +34369,7 @@ class WASqliteConnection extends _powersync_common__WEBPACK_IMPORTED_MODULE_1__.
|
|
|
34338
34369
|
await this.openDB();
|
|
34339
34370
|
this.registerBroadcastListeners();
|
|
34340
34371
|
await this.executeSingleStatement(`PRAGMA temp_store = ${this.options.temporaryStorage};`);
|
|
34372
|
+
await this.executeSingleStatement(`PRAGMA cache_size = -${this.options.cacheSizeKb};`);
|
|
34341
34373
|
await this.executeEncryptionPragma();
|
|
34342
34374
|
this.sqliteAPI.update_hook(this.dbP, (updateType, dbName, tableName) => {
|
|
34343
34375
|
if (!tableName) {
|
|
@@ -34531,7 +34563,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
|
|
|
34531
34563
|
super({
|
|
34532
34564
|
name: options.dbFilename,
|
|
34533
34565
|
openConnection: async () => {
|
|
34534
|
-
const { workerPort, temporaryStorage } = options;
|
|
34566
|
+
const { workerPort, temporaryStorage, cacheSizeKb } = options;
|
|
34535
34567
|
if (workerPort) {
|
|
34536
34568
|
const remote = comlink__WEBPACK_IMPORTED_MODULE_0__.wrap(workerPort);
|
|
34537
34569
|
return new _WorkerWrappedAsyncDatabaseConnection__WEBPACK_IMPORTED_MODULE_4__.WorkerWrappedAsyncDatabaseConnection({
|
|
@@ -34540,6 +34572,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
|
|
|
34540
34572
|
baseConnection: await remote({
|
|
34541
34573
|
...options,
|
|
34542
34574
|
temporaryStorage: temporaryStorage ?? _web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.TemporaryStorageOption.MEMORY,
|
|
34575
|
+
cacheSizeKb: cacheSizeKb ?? _web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_CACHE_SIZE_KB,
|
|
34543
34576
|
flags: (0,_PowerSyncDatabase__WEBPACK_IMPORTED_MODULE_1__.resolveWebPowerSyncFlags)(options.flags),
|
|
34544
34577
|
encryptionKey: options.encryptionKey
|
|
34545
34578
|
})
|
|
@@ -34551,6 +34584,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
|
|
|
34551
34584
|
debugMode: options.debugMode,
|
|
34552
34585
|
flags: options.flags,
|
|
34553
34586
|
temporaryStorage,
|
|
34587
|
+
cacheSizeKb,
|
|
34554
34588
|
logger: options.logger,
|
|
34555
34589
|
vfs: options.vfs,
|
|
34556
34590
|
encryptionKey: options.encryptionKey,
|
|
@@ -34615,7 +34649,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
|
|
|
34615
34649
|
}
|
|
34616
34650
|
async openConnection() {
|
|
34617
34651
|
const { enableMultiTabs, useWebWorker } = this.resolvedFlags;
|
|
34618
|
-
const { vfs = _WASQLiteConnection__WEBPACK_IMPORTED_MODULE_6__.WASQLiteVFS.IDBBatchAtomicVFS, temporaryStorage = _web_sql_flags__WEBPACK_IMPORTED_MODULE_4__.TemporaryStorageOption.MEMORY, encryptionKey } = this.waOptions;
|
|
34652
|
+
const { vfs = _WASQLiteConnection__WEBPACK_IMPORTED_MODULE_6__.WASQLiteVFS.IDBBatchAtomicVFS, temporaryStorage = _web_sql_flags__WEBPACK_IMPORTED_MODULE_4__.TemporaryStorageOption.MEMORY, cacheSizeKb = _web_sql_flags__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_CACHE_SIZE_KB, encryptionKey } = this.waOptions;
|
|
34619
34653
|
if (!enableMultiTabs) {
|
|
34620
34654
|
this.logger.warn('Multiple tabs are not enabled in this browser');
|
|
34621
34655
|
}
|
|
@@ -34625,6 +34659,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
|
|
|
34625
34659
|
? (0,_worker_db_open_worker_database__WEBPACK_IMPORTED_MODULE_1__.resolveWorkerDatabasePortFactory)(() => optionsDbWorker({
|
|
34626
34660
|
...this.options,
|
|
34627
34661
|
temporaryStorage,
|
|
34662
|
+
cacheSizeKb,
|
|
34628
34663
|
flags: this.resolvedFlags,
|
|
34629
34664
|
encryptionKey
|
|
34630
34665
|
}))
|
|
@@ -34636,6 +34671,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
|
|
|
34636
34671
|
dbFilename: this.options.dbFilename,
|
|
34637
34672
|
vfs,
|
|
34638
34673
|
temporaryStorage,
|
|
34674
|
+
cacheSizeKb,
|
|
34639
34675
|
flags: this.resolvedFlags,
|
|
34640
34676
|
encryptionKey: encryptionKey
|
|
34641
34677
|
}),
|
|
@@ -34658,6 +34694,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
|
|
|
34658
34694
|
debugMode: this.options.debugMode,
|
|
34659
34695
|
vfs,
|
|
34660
34696
|
temporaryStorage,
|
|
34697
|
+
cacheSizeKb,
|
|
34661
34698
|
flags: this.resolvedFlags,
|
|
34662
34699
|
encryptionKey: encryptionKey
|
|
34663
34700
|
});
|
|
@@ -34728,6 +34765,7 @@ class WASQLitePowerSyncDatabaseOpenFactory extends _AbstractWebPowerSyncDatabase
|
|
|
34728
34765
|
"use strict";
|
|
34729
34766
|
__webpack_require__.r(__webpack_exports__);
|
|
34730
34767
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
34768
|
+
/* harmony export */ DEFAULT_CACHE_SIZE_KB: () => (/* binding */ DEFAULT_CACHE_SIZE_KB),
|
|
34731
34769
|
/* harmony export */ DEFAULT_WEB_SQL_FLAGS: () => (/* binding */ DEFAULT_WEB_SQL_FLAGS),
|
|
34732
34770
|
/* harmony export */ TemporaryStorageOption: () => (/* binding */ TemporaryStorageOption),
|
|
34733
34771
|
/* harmony export */ isServerSide: () => (/* binding */ isServerSide),
|
|
@@ -34738,6 +34776,7 @@ var TemporaryStorageOption;
|
|
|
34738
34776
|
TemporaryStorageOption["MEMORY"] = "memory";
|
|
34739
34777
|
TemporaryStorageOption["FILESYSTEM"] = "file";
|
|
34740
34778
|
})(TemporaryStorageOption || (TemporaryStorageOption = {}));
|
|
34779
|
+
const DEFAULT_CACHE_SIZE_KB = 50 * 1024;
|
|
34741
34780
|
function isServerSide() {
|
|
34742
34781
|
return typeof window == 'undefined';
|
|
34743
34782
|
}
|
|
@@ -34951,10 +34990,10 @@ class SharedWebStreamingSyncImplementation extends _WebStreamingSyncImplementati
|
|
|
34951
34990
|
* This worker will manage all syncing operations remotely.
|
|
34952
34991
|
*/
|
|
34953
34992
|
const resolvedWorkerOptions = {
|
|
34954
|
-
...options,
|
|
34955
34993
|
dbFilename: this.options.identifier,
|
|
34956
|
-
// TODO
|
|
34957
34994
|
temporaryStorage: _adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.TemporaryStorageOption.MEMORY,
|
|
34995
|
+
cacheSizeKb: _adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_CACHE_SIZE_KB,
|
|
34996
|
+
...options,
|
|
34958
34997
|
flags: (0,_adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.resolveWebSQLFlags)(options.flags)
|
|
34959
34998
|
};
|
|
34960
34999
|
const syncWorker = options.sync?.worker;
|
|
@@ -43416,6 +43455,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
43416
43455
|
/* harmony export */ AbstractWebPowerSyncDatabaseOpenFactory: () => (/* reexport safe */ _db_adapters_AbstractWebPowerSyncDatabaseOpenFactory__WEBPACK_IMPORTED_MODULE_1__.AbstractWebPowerSyncDatabaseOpenFactory),
|
|
43417
43456
|
/* harmony export */ AbstractWebSQLOpenFactory: () => (/* reexport safe */ _db_adapters_AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_MODULE_2__.AbstractWebSQLOpenFactory),
|
|
43418
43457
|
/* harmony export */ AsyncWASQLiteModuleFactory: () => (/* reexport safe */ _db_adapters_wa_sqlite_WASQLiteConnection__WEBPACK_IMPORTED_MODULE_3__.AsyncWASQLiteModuleFactory),
|
|
43458
|
+
/* harmony export */ DEFAULT_CACHE_SIZE_KB: () => (/* reexport safe */ _db_adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_CACHE_SIZE_KB),
|
|
43419
43459
|
/* harmony export */ DEFAULT_MODULE_FACTORIES: () => (/* reexport safe */ _db_adapters_wa_sqlite_WASQLiteConnection__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MODULE_FACTORIES),
|
|
43420
43460
|
/* harmony export */ DEFAULT_POWERSYNC_FLAGS: () => (/* reexport safe */ _db_PowerSyncDatabase__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_POWERSYNC_FLAGS),
|
|
43421
43461
|
/* harmony export */ DEFAULT_WEB_SQL_FLAGS: () => (/* reexport safe */ _db_adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_WEB_SQL_FLAGS),
|