@powersync/web 0.0.0-dev-20250127153955 → 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 +47 -5
- package/dist/index.umd.js.map +1 -1
- package/dist/worker/SharedSyncImplementation.umd.js +71 -39
- package/dist/worker/SharedSyncImplementation.umd.js.map +1 -1
- package/dist/worker/WASQLiteDB.umd.js +41 -39
- package/dist/worker/WASQLiteDB.umd.js.map +1 -1
- package/lib/package.json +4 -8
- package/lib/src/db/PowerSyncDatabase.d.ts +2 -2
- package/lib/src/db/PowerSyncDatabase.js +4 -2
- 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
|
@@ -33585,10 +33585,12 @@ class PowerSyncDatabase extends _powersync_common__WEBPACK_IMPORTED_MODULE_0__.A
|
|
|
33585
33585
|
}
|
|
33586
33586
|
return (0,_shared_navigator__WEBPACK_IMPORTED_MODULE_2__.getNavigatorLocks)().request(`lock-${this.database.name}`, cb);
|
|
33587
33587
|
}
|
|
33588
|
-
generateSyncStreamImplementation(connector) {
|
|
33588
|
+
generateSyncStreamImplementation(connector, options) {
|
|
33589
33589
|
const remote = new _sync_WebRemote__WEBPACK_IMPORTED_MODULE_7__.WebRemote(connector);
|
|
33590
33590
|
const syncOptions = {
|
|
33591
33591
|
...this.options,
|
|
33592
|
+
retryDelayMs: options.retryDelayMs,
|
|
33593
|
+
crudUploadThrottleMs: options.crudUploadThrottleMs,
|
|
33592
33594
|
flags: this.resolvedFlags,
|
|
33593
33595
|
adapter: this.bucketStorageAdapter,
|
|
33594
33596
|
remote,
|
|
@@ -34084,8 +34086,12 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
34084
34086
|
*/
|
|
34085
34087
|
class WorkerWrappedAsyncDatabaseConnection {
|
|
34086
34088
|
options;
|
|
34089
|
+
releaseSharedConnectionLock;
|
|
34090
|
+
lockAbortController;
|
|
34087
34091
|
constructor(options) {
|
|
34088
34092
|
this.options = options;
|
|
34093
|
+
this.releaseSharedConnectionLock = null;
|
|
34094
|
+
this.lockAbortController = new AbortController();
|
|
34089
34095
|
}
|
|
34090
34096
|
get baseConnection() {
|
|
34091
34097
|
return this.options.baseConnection;
|
|
@@ -34098,6 +34104,30 @@ class WorkerWrappedAsyncDatabaseConnection {
|
|
|
34098
34104
|
*/
|
|
34099
34105
|
async shareConnection() {
|
|
34100
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(() => { }));
|
|
34101
34131
|
const newPort = await remote[comlink__WEBPACK_IMPORTED_MODULE_0__.createEndpoint]();
|
|
34102
34132
|
return { port: newPort, identifier };
|
|
34103
34133
|
}
|
|
@@ -34109,6 +34139,9 @@ class WorkerWrappedAsyncDatabaseConnection {
|
|
|
34109
34139
|
return this.baseConnection.registerOnTableChange(comlink__WEBPACK_IMPORTED_MODULE_0__.proxy(callback));
|
|
34110
34140
|
}
|
|
34111
34141
|
async close() {
|
|
34142
|
+
// Abort any pending lock requests.
|
|
34143
|
+
this.lockAbortController.abort();
|
|
34144
|
+
this.releaseSharedConnectionLock?.();
|
|
34112
34145
|
await this.baseConnection.close();
|
|
34113
34146
|
this.options.remote[comlink__WEBPACK_IMPORTED_MODULE_0__.releaseProxy]();
|
|
34114
34147
|
this.options.onClose?.();
|
|
@@ -34336,6 +34369,7 @@ class WASqliteConnection extends _powersync_common__WEBPACK_IMPORTED_MODULE_1__.
|
|
|
34336
34369
|
await this.openDB();
|
|
34337
34370
|
this.registerBroadcastListeners();
|
|
34338
34371
|
await this.executeSingleStatement(`PRAGMA temp_store = ${this.options.temporaryStorage};`);
|
|
34372
|
+
await this.executeSingleStatement(`PRAGMA cache_size = -${this.options.cacheSizeKb};`);
|
|
34339
34373
|
await this.executeEncryptionPragma();
|
|
34340
34374
|
this.sqliteAPI.update_hook(this.dbP, (updateType, dbName, tableName) => {
|
|
34341
34375
|
if (!tableName) {
|
|
@@ -34529,7 +34563,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
|
|
|
34529
34563
|
super({
|
|
34530
34564
|
name: options.dbFilename,
|
|
34531
34565
|
openConnection: async () => {
|
|
34532
|
-
const { workerPort, temporaryStorage } = options;
|
|
34566
|
+
const { workerPort, temporaryStorage, cacheSizeKb } = options;
|
|
34533
34567
|
if (workerPort) {
|
|
34534
34568
|
const remote = comlink__WEBPACK_IMPORTED_MODULE_0__.wrap(workerPort);
|
|
34535
34569
|
return new _WorkerWrappedAsyncDatabaseConnection__WEBPACK_IMPORTED_MODULE_4__.WorkerWrappedAsyncDatabaseConnection({
|
|
@@ -34538,6 +34572,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
|
|
|
34538
34572
|
baseConnection: await remote({
|
|
34539
34573
|
...options,
|
|
34540
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,
|
|
34541
34576
|
flags: (0,_PowerSyncDatabase__WEBPACK_IMPORTED_MODULE_1__.resolveWebPowerSyncFlags)(options.flags),
|
|
34542
34577
|
encryptionKey: options.encryptionKey
|
|
34543
34578
|
})
|
|
@@ -34549,6 +34584,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
|
|
|
34549
34584
|
debugMode: options.debugMode,
|
|
34550
34585
|
flags: options.flags,
|
|
34551
34586
|
temporaryStorage,
|
|
34587
|
+
cacheSizeKb,
|
|
34552
34588
|
logger: options.logger,
|
|
34553
34589
|
vfs: options.vfs,
|
|
34554
34590
|
encryptionKey: options.encryptionKey,
|
|
@@ -34613,7 +34649,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
|
|
|
34613
34649
|
}
|
|
34614
34650
|
async openConnection() {
|
|
34615
34651
|
const { enableMultiTabs, useWebWorker } = this.resolvedFlags;
|
|
34616
|
-
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;
|
|
34617
34653
|
if (!enableMultiTabs) {
|
|
34618
34654
|
this.logger.warn('Multiple tabs are not enabled in this browser');
|
|
34619
34655
|
}
|
|
@@ -34623,6 +34659,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
|
|
|
34623
34659
|
? (0,_worker_db_open_worker_database__WEBPACK_IMPORTED_MODULE_1__.resolveWorkerDatabasePortFactory)(() => optionsDbWorker({
|
|
34624
34660
|
...this.options,
|
|
34625
34661
|
temporaryStorage,
|
|
34662
|
+
cacheSizeKb,
|
|
34626
34663
|
flags: this.resolvedFlags,
|
|
34627
34664
|
encryptionKey
|
|
34628
34665
|
}))
|
|
@@ -34634,6 +34671,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
|
|
|
34634
34671
|
dbFilename: this.options.dbFilename,
|
|
34635
34672
|
vfs,
|
|
34636
34673
|
temporaryStorage,
|
|
34674
|
+
cacheSizeKb,
|
|
34637
34675
|
flags: this.resolvedFlags,
|
|
34638
34676
|
encryptionKey: encryptionKey
|
|
34639
34677
|
}),
|
|
@@ -34656,6 +34694,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
|
|
|
34656
34694
|
debugMode: this.options.debugMode,
|
|
34657
34695
|
vfs,
|
|
34658
34696
|
temporaryStorage,
|
|
34697
|
+
cacheSizeKb,
|
|
34659
34698
|
flags: this.resolvedFlags,
|
|
34660
34699
|
encryptionKey: encryptionKey
|
|
34661
34700
|
});
|
|
@@ -34726,6 +34765,7 @@ class WASQLitePowerSyncDatabaseOpenFactory extends _AbstractWebPowerSyncDatabase
|
|
|
34726
34765
|
"use strict";
|
|
34727
34766
|
__webpack_require__.r(__webpack_exports__);
|
|
34728
34767
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
34768
|
+
/* harmony export */ DEFAULT_CACHE_SIZE_KB: () => (/* binding */ DEFAULT_CACHE_SIZE_KB),
|
|
34729
34769
|
/* harmony export */ DEFAULT_WEB_SQL_FLAGS: () => (/* binding */ DEFAULT_WEB_SQL_FLAGS),
|
|
34730
34770
|
/* harmony export */ TemporaryStorageOption: () => (/* binding */ TemporaryStorageOption),
|
|
34731
34771
|
/* harmony export */ isServerSide: () => (/* binding */ isServerSide),
|
|
@@ -34736,6 +34776,7 @@ var TemporaryStorageOption;
|
|
|
34736
34776
|
TemporaryStorageOption["MEMORY"] = "memory";
|
|
34737
34777
|
TemporaryStorageOption["FILESYSTEM"] = "file";
|
|
34738
34778
|
})(TemporaryStorageOption || (TemporaryStorageOption = {}));
|
|
34779
|
+
const DEFAULT_CACHE_SIZE_KB = 50 * 1024;
|
|
34739
34780
|
function isServerSide() {
|
|
34740
34781
|
return typeof window == 'undefined';
|
|
34741
34782
|
}
|
|
@@ -34949,10 +34990,10 @@ class SharedWebStreamingSyncImplementation extends _WebStreamingSyncImplementati
|
|
|
34949
34990
|
* This worker will manage all syncing operations remotely.
|
|
34950
34991
|
*/
|
|
34951
34992
|
const resolvedWorkerOptions = {
|
|
34952
|
-
...options,
|
|
34953
34993
|
dbFilename: this.options.identifier,
|
|
34954
|
-
// TODO
|
|
34955
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,
|
|
34956
34997
|
flags: (0,_adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.resolveWebSQLFlags)(options.flags)
|
|
34957
34998
|
};
|
|
34958
34999
|
const syncWorker = options.sync?.worker;
|
|
@@ -43414,6 +43455,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
43414
43455
|
/* harmony export */ AbstractWebPowerSyncDatabaseOpenFactory: () => (/* reexport safe */ _db_adapters_AbstractWebPowerSyncDatabaseOpenFactory__WEBPACK_IMPORTED_MODULE_1__.AbstractWebPowerSyncDatabaseOpenFactory),
|
|
43415
43456
|
/* harmony export */ AbstractWebSQLOpenFactory: () => (/* reexport safe */ _db_adapters_AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_MODULE_2__.AbstractWebSQLOpenFactory),
|
|
43416
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),
|
|
43417
43459
|
/* harmony export */ DEFAULT_MODULE_FACTORIES: () => (/* reexport safe */ _db_adapters_wa_sqlite_WASQLiteConnection__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MODULE_FACTORIES),
|
|
43418
43460
|
/* harmony export */ DEFAULT_POWERSYNC_FLAGS: () => (/* reexport safe */ _db_PowerSyncDatabase__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_POWERSYNC_FLAGS),
|
|
43419
43461
|
/* harmony export */ DEFAULT_WEB_SQL_FLAGS: () => (/* reexport safe */ _db_adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_WEB_SQL_FLAGS),
|