@powersync/web 0.0.0-dev-20250207081035 → 0.0.0-dev-20250220093908

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 CHANGED
@@ -34338,6 +34338,7 @@ class WASqliteConnection extends _powersync_common__WEBPACK_IMPORTED_MODULE_1__.
34338
34338
  await this.openDB();
34339
34339
  this.registerBroadcastListeners();
34340
34340
  await this.executeSingleStatement(`PRAGMA temp_store = ${this.options.temporaryStorage};`);
34341
+ await this.executeSingleStatement(`PRAGMA cache_size = -${this.options.cacheSizeKb};`);
34341
34342
  await this.executeEncryptionPragma();
34342
34343
  this.sqliteAPI.update_hook(this.dbP, (updateType, dbName, tableName) => {
34343
34344
  if (!tableName) {
@@ -34531,7 +34532,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
34531
34532
  super({
34532
34533
  name: options.dbFilename,
34533
34534
  openConnection: async () => {
34534
- const { workerPort, temporaryStorage } = options;
34535
+ const { workerPort, temporaryStorage, cacheSizeKb } = options;
34535
34536
  if (workerPort) {
34536
34537
  const remote = comlink__WEBPACK_IMPORTED_MODULE_0__.wrap(workerPort);
34537
34538
  return new _WorkerWrappedAsyncDatabaseConnection__WEBPACK_IMPORTED_MODULE_4__.WorkerWrappedAsyncDatabaseConnection({
@@ -34540,6 +34541,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
34540
34541
  baseConnection: await remote({
34541
34542
  ...options,
34542
34543
  temporaryStorage: temporaryStorage ?? _web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.TemporaryStorageOption.MEMORY,
34544
+ cacheSizeKb: cacheSizeKb ?? _web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_CACHE_SIZE_KB,
34543
34545
  flags: (0,_PowerSyncDatabase__WEBPACK_IMPORTED_MODULE_1__.resolveWebPowerSyncFlags)(options.flags),
34544
34546
  encryptionKey: options.encryptionKey
34545
34547
  })
@@ -34551,6 +34553,7 @@ class WASQLiteDBAdapter extends _LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MO
34551
34553
  debugMode: options.debugMode,
34552
34554
  flags: options.flags,
34553
34555
  temporaryStorage,
34556
+ cacheSizeKb,
34554
34557
  logger: options.logger,
34555
34558
  vfs: options.vfs,
34556
34559
  encryptionKey: options.encryptionKey,
@@ -34615,7 +34618,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
34615
34618
  }
34616
34619
  async openConnection() {
34617
34620
  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;
34621
+ 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
34622
  if (!enableMultiTabs) {
34620
34623
  this.logger.warn('Multiple tabs are not enabled in this browser');
34621
34624
  }
@@ -34625,6 +34628,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
34625
34628
  ? (0,_worker_db_open_worker_database__WEBPACK_IMPORTED_MODULE_1__.resolveWorkerDatabasePortFactory)(() => optionsDbWorker({
34626
34629
  ...this.options,
34627
34630
  temporaryStorage,
34631
+ cacheSizeKb,
34628
34632
  flags: this.resolvedFlags,
34629
34633
  encryptionKey
34630
34634
  }))
@@ -34636,6 +34640,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
34636
34640
  dbFilename: this.options.dbFilename,
34637
34641
  vfs,
34638
34642
  temporaryStorage,
34643
+ cacheSizeKb,
34639
34644
  flags: this.resolvedFlags,
34640
34645
  encryptionKey: encryptionKey
34641
34646
  }),
@@ -34658,6 +34663,7 @@ class WASQLiteOpenFactory extends _AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_M
34658
34663
  debugMode: this.options.debugMode,
34659
34664
  vfs,
34660
34665
  temporaryStorage,
34666
+ cacheSizeKb,
34661
34667
  flags: this.resolvedFlags,
34662
34668
  encryptionKey: encryptionKey
34663
34669
  });
@@ -34728,6 +34734,7 @@ class WASQLitePowerSyncDatabaseOpenFactory extends _AbstractWebPowerSyncDatabase
34728
34734
  "use strict";
34729
34735
  __webpack_require__.r(__webpack_exports__);
34730
34736
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
34737
+ /* harmony export */ DEFAULT_CACHE_SIZE_KB: () => (/* binding */ DEFAULT_CACHE_SIZE_KB),
34731
34738
  /* harmony export */ DEFAULT_WEB_SQL_FLAGS: () => (/* binding */ DEFAULT_WEB_SQL_FLAGS),
34732
34739
  /* harmony export */ TemporaryStorageOption: () => (/* binding */ TemporaryStorageOption),
34733
34740
  /* harmony export */ isServerSide: () => (/* binding */ isServerSide),
@@ -34738,6 +34745,7 @@ var TemporaryStorageOption;
34738
34745
  TemporaryStorageOption["MEMORY"] = "memory";
34739
34746
  TemporaryStorageOption["FILESYSTEM"] = "file";
34740
34747
  })(TemporaryStorageOption || (TemporaryStorageOption = {}));
34748
+ const DEFAULT_CACHE_SIZE_KB = 50 * 1024;
34741
34749
  function isServerSide() {
34742
34750
  return typeof window == 'undefined';
34743
34751
  }
@@ -34951,10 +34959,10 @@ class SharedWebStreamingSyncImplementation extends _WebStreamingSyncImplementati
34951
34959
  * This worker will manage all syncing operations remotely.
34952
34960
  */
34953
34961
  const resolvedWorkerOptions = {
34954
- ...options,
34955
34962
  dbFilename: this.options.identifier,
34956
- // TODO
34957
34963
  temporaryStorage: _adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.TemporaryStorageOption.MEMORY,
34964
+ cacheSizeKb: _adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_CACHE_SIZE_KB,
34965
+ ...options,
34958
34966
  flags: (0,_adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_3__.resolveWebSQLFlags)(options.flags)
34959
34967
  };
34960
34968
  const syncWorker = options.sync?.worker;
@@ -35597,6 +35605,9 @@ class SharedSyncImplementation extends _powersync_common__WEBPACK_IMPORTED_MODUL
35597
35605
  await this.waitForReady();
35598
35606
  // This effectively queues connect and disconnect calls. Ensuring multiple tabs' requests are synchronized
35599
35607
  return (0,_shared_navigator__WEBPACK_IMPORTED_MODULE_8__.getNavigatorLocks)().request('shared-sync-connect', async () => {
35608
+ if (!this.dbAdapter) {
35609
+ await this.openInternalDB();
35610
+ }
35600
35611
  this.syncStreamClient = this.generateStreamingImplementation();
35601
35612
  this.lastConnectOptions = options;
35602
35613
  this.syncStreamClient.registerListener({
@@ -35620,10 +35631,7 @@ class SharedSyncImplementation extends _powersync_common__WEBPACK_IMPORTED_MODUL
35620
35631
  * Adds a new client tab's message port to the list of connected ports
35621
35632
  */
35622
35633
  addPort(port) {
35623
- const portProvider = {
35624
- port,
35625
- clientProvider: comlink__WEBPACK_IMPORTED_MODULE_2__.wrap(port)
35626
- };
35634
+ const portProvider = { port, clientProvider: comlink__WEBPACK_IMPORTED_MODULE_2__.wrap(port) };
35627
35635
  this.ports.push(portProvider);
35628
35636
  // Give the newly connected client the latest status
35629
35637
  const status = this.syncStreamClient?.syncStatus;
@@ -35642,11 +35650,7 @@ class SharedSyncImplementation extends _powersync_common__WEBPACK_IMPORTED_MODUL
35642
35650
  return;
35643
35651
  }
35644
35652
  const trackedPort = this.ports[index];
35645
- if (trackedPort.db) {
35646
- trackedPort.db.close();
35647
- }
35648
- // Release proxy
35649
- trackedPort.clientProvider[comlink__WEBPACK_IMPORTED_MODULE_2__.releaseProxy]();
35653
+ // Remove from the list of active ports
35650
35654
  this.ports.splice(index, 1);
35651
35655
  /**
35652
35656
  * The port might currently be in use. Any active functions might
@@ -35657,12 +35661,22 @@ class SharedSyncImplementation extends _powersync_common__WEBPACK_IMPORTED_MODUL
35657
35661
  abortController.controller.abort(new _powersync_common__WEBPACK_IMPORTED_MODULE_0__.AbortOperation('Closing pending requests after client port is removed'));
35658
35662
  }
35659
35663
  });
35660
- if (this.dbAdapter == trackedPort.db && this.syncStreamClient) {
35661
- await this.disconnect();
35662
- // Ask for a new DB worker port handler
35663
- await this.openInternalDB();
35664
- await this.connect(this.lastConnectOptions);
35664
+ const shouldReconnect = !!this.syncStreamClient;
35665
+ if (this.dbAdapter && this.dbAdapter == trackedPort.db) {
35666
+ if (shouldReconnect) {
35667
+ await this.disconnect();
35668
+ }
35669
+ // Clearing the adapter will result in a new one being opened in connect
35670
+ this.dbAdapter = null;
35671
+ if (shouldReconnect) {
35672
+ await this.connect(this.lastConnectOptions);
35673
+ }
35665
35674
  }
35675
+ if (trackedPort.db) {
35676
+ trackedPort.db.close();
35677
+ }
35678
+ // Release proxy
35679
+ trackedPort.clientProvider[comlink__WEBPACK_IMPORTED_MODULE_2__.releaseProxy]();
35666
35680
  }
35667
35681
  triggerCrudUpload() {
35668
35682
  this.waitForReady().then(() => this.syncStreamClient?.triggerCrudUpload());
@@ -35690,10 +35704,7 @@ class SharedSyncImplementation extends _powersync_common__WEBPACK_IMPORTED_MODUL
35690
35704
  const lastPort = this.ports[this.ports.length - 1];
35691
35705
  return new Promise(async (resolve, reject) => {
35692
35706
  const abortController = new AbortController();
35693
- this.fetchCredentialsController = {
35694
- controller: abortController,
35695
- activePort: lastPort
35696
- };
35707
+ this.fetchCredentialsController = { controller: abortController, activePort: lastPort };
35697
35708
  abortController.signal.onabort = reject;
35698
35709
  try {
35699
35710
  console.log('calling the last port client provider for credentials');
@@ -35712,10 +35723,7 @@ class SharedSyncImplementation extends _powersync_common__WEBPACK_IMPORTED_MODUL
35712
35723
  const lastPort = this.ports[this.ports.length - 1];
35713
35724
  return new Promise(async (resolve, reject) => {
35714
35725
  const abortController = new AbortController();
35715
- this.uploadDataController = {
35716
- controller: abortController,
35717
- activePort: lastPort
35718
- };
35726
+ this.uploadDataController = { controller: abortController, activePort: lastPort };
35719
35727
  // Resolving will make it retry
35720
35728
  abortController.signal.onabort = () => resolve();
35721
35729
  try {
@@ -35736,6 +35744,10 @@ class SharedSyncImplementation extends _powersync_common__WEBPACK_IMPORTED_MODUL
35736
35744
  }
35737
35745
  async openInternalDB() {
35738
35746
  const lastClient = this.ports[this.ports.length - 1];
35747
+ if (!lastClient) {
35748
+ // Should not really happen in practice
35749
+ throw new Error(`Could not open DB connection since no client is connected.`);
35750
+ }
35739
35751
  const workerPort = await lastClient.clientProvider.getDBWorkerPort();
35740
35752
  const remote = comlink__WEBPACK_IMPORTED_MODULE_2__.wrap(workerPort);
35741
35753
  const identifier = this.syncParams.dbParams.dbFilename;
@@ -35743,11 +35755,7 @@ class SharedSyncImplementation extends _powersync_common__WEBPACK_IMPORTED_MODUL
35743
35755
  const locked = new _db_adapters_LockedAsyncDatabaseAdapter__WEBPACK_IMPORTED_MODULE_6__.LockedAsyncDatabaseAdapter({
35744
35756
  name: identifier,
35745
35757
  openConnection: async () => {
35746
- return new _db_adapters_WorkerWrappedAsyncDatabaseConnection__WEBPACK_IMPORTED_MODULE_7__.WorkerWrappedAsyncDatabaseConnection({
35747
- remote,
35748
- baseConnection: db,
35749
- identifier
35750
- });
35758
+ return new _db_adapters_WorkerWrappedAsyncDatabaseConnection__WEBPACK_IMPORTED_MODULE_7__.WorkerWrappedAsyncDatabaseConnection({ remote, baseConnection: db, identifier });
35751
35759
  },
35752
35760
  logger: this.logger
35753
35761
  });
@@ -43416,6 +43424,7 @@ __webpack_require__.r(__webpack_exports__);
43416
43424
  /* harmony export */ AbstractWebPowerSyncDatabaseOpenFactory: () => (/* reexport safe */ _db_adapters_AbstractWebPowerSyncDatabaseOpenFactory__WEBPACK_IMPORTED_MODULE_1__.AbstractWebPowerSyncDatabaseOpenFactory),
43417
43425
  /* harmony export */ AbstractWebSQLOpenFactory: () => (/* reexport safe */ _db_adapters_AbstractWebSQLOpenFactory__WEBPACK_IMPORTED_MODULE_2__.AbstractWebSQLOpenFactory),
43418
43426
  /* harmony export */ AsyncWASQLiteModuleFactory: () => (/* reexport safe */ _db_adapters_wa_sqlite_WASQLiteConnection__WEBPACK_IMPORTED_MODULE_3__.AsyncWASQLiteModuleFactory),
43427
+ /* harmony export */ DEFAULT_CACHE_SIZE_KB: () => (/* reexport safe */ _db_adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_CACHE_SIZE_KB),
43419
43428
  /* harmony export */ DEFAULT_MODULE_FACTORIES: () => (/* reexport safe */ _db_adapters_wa_sqlite_WASQLiteConnection__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MODULE_FACTORIES),
43420
43429
  /* harmony export */ DEFAULT_POWERSYNC_FLAGS: () => (/* reexport safe */ _db_PowerSyncDatabase__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_POWERSYNC_FLAGS),
43421
43430
  /* harmony export */ DEFAULT_WEB_SQL_FLAGS: () => (/* reexport safe */ _db_adapters_web_sql_flags__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_WEB_SQL_FLAGS),