@powersync/web 0.0.0-dev-20260414110516 → 0.0.0-dev-20260504100448

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 (76) hide show
  1. package/dist/2075a31bb151adbb9767.wasm +0 -0
  2. package/dist/3322bc84de986b63c2cd.wasm +0 -0
  3. package/dist/8e97452e297be23b5e50.wasm +0 -0
  4. package/dist/fbc178b70d530e8ce02b.wasm +0 -0
  5. package/dist/index.umd.js +4289 -4786
  6. package/dist/index.umd.js.map +1 -1
  7. package/dist/worker/SharedSyncImplementation.umd.js +37 -798
  8. package/dist/worker/SharedSyncImplementation.umd.js.map +1 -1
  9. package/dist/worker/WASQLiteDB.umd.js +99 -737
  10. package/dist/worker/WASQLiteDB.umd.js.map +1 -1
  11. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-9af0a7.umd.js +31 -0
  12. 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 +1 -0
  13. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-bbf5a9.umd.js +31 -0
  14. 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 +1 -0
  15. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js +31 -0
  16. package/dist/worker/{node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-cc5fcc.umd.js.map → node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js.map} +1 -1
  17. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js +31 -0
  18. package/dist/worker/{node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js.map → node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js.map} +1 -1
  19. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +3562 -0
  20. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js.map +1 -0
  21. package/dist/worker/{node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_src_examples-0df390.umd.js → node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js} +16 -16
  22. package/dist/worker/{node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_src_examples-0df390.umd.js.map → node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js.map} +1 -1
  23. package/dist/worker/{node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_src_examples-151024.umd.js → node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js} +12 -12
  24. package/dist/worker/{node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_src_examples-151024.umd.js.map → node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js.map} +1 -1
  25. package/dist/worker/{node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_src_examples-c01ef0.umd.js → node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js} +14 -14
  26. package/dist/worker/{node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_src_examples-c01ef0.umd.js.map → node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js.map} +1 -1
  27. package/lib/package.json +4 -7
  28. package/lib/src/db/PowerSyncDatabase.d.ts +1 -1
  29. package/lib/src/db/PowerSyncDatabase.js +0 -8
  30. package/lib/src/db/adapters/AsyncWebAdapter.d.ts +13 -3
  31. package/lib/src/db/adapters/AsyncWebAdapter.js +115 -21
  32. package/lib/src/db/adapters/wa-sqlite/DatabaseServer.js +1 -2
  33. package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js +1 -1
  34. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +16 -2
  35. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +60 -38
  36. package/lib/src/db/adapters/wa-sqlite/vfs.d.ts +7 -18
  37. package/lib/src/db/adapters/wa-sqlite/vfs.js +34 -49
  38. package/lib/src/db/sync/SSRWebStreamingSyncImplementation.d.ts +4 -0
  39. package/lib/src/db/sync/SSRWebStreamingSyncImplementation.js +4 -0
  40. package/lib/src/db/sync/SharedWebStreamingSyncImplementation.d.ts +0 -1
  41. package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js +0 -3
  42. package/lib/src/db/sync/WebRemote.d.ts +1 -3
  43. package/lib/src/db/sync/WebRemote.js +0 -12
  44. package/lib/src/worker/db/MultiDatabaseServer.js +4 -1
  45. package/lib/src/worker/db/open-worker-database.js +2 -2
  46. package/lib/src/worker/sync/SharedSyncImplementation.d.ts +0 -2
  47. package/lib/src/worker/sync/SharedSyncImplementation.js +4 -16
  48. package/lib/src/worker/sync/WorkerClient.d.ts +0 -1
  49. package/lib/src/worker/sync/WorkerClient.js +0 -3
  50. package/lib/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +5 -8
  52. package/src/db/PowerSyncDatabase.ts +1 -9
  53. package/src/db/adapters/AsyncWebAdapter.ts +138 -22
  54. package/src/db/adapters/wa-sqlite/DatabaseServer.ts +4 -2
  55. package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +4 -1
  56. package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +89 -44
  57. package/src/db/adapters/wa-sqlite/vfs.ts +33 -49
  58. package/src/db/sync/SSRWebStreamingSyncImplementation.ts +5 -0
  59. package/src/db/sync/SharedWebStreamingSyncImplementation.ts +0 -4
  60. package/src/db/sync/WebRemote.ts +0 -16
  61. package/src/worker/db/MultiDatabaseServer.ts +4 -1
  62. package/src/worker/db/open-worker-database.ts +2 -2
  63. package/src/worker/sync/SharedSyncImplementation.ts +4 -18
  64. package/src/worker/sync/WorkerClient.ts +0 -4
  65. package/dist/26d61ca9f5694d064635.wasm +0 -0
  66. package/dist/b4c6283dc473b6b3fd24.wasm +0 -0
  67. package/dist/c78985091a0b22aaef03.wasm +0 -0
  68. package/dist/ca59e199e1138b553fad.wasm +0 -0
  69. package/dist/worker/node_modules_pnpm_bson_6_10_4_node_modules_bson_lib_bson_mjs.umd.js +0 -4646
  70. package/dist/worker/node_modules_pnpm_bson_6_10_4_node_modules_bson_lib_bson_mjs.umd.js.map +0 -1
  71. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-b9c070.umd.js +0 -31
  72. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-b9c070.umd.js.map +0 -1
  73. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-c99c07.umd.js +0 -31
  74. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-c99c07.umd.js.map +0 -1
  75. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-cc5fcc.umd.js +0 -31
  76. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_5_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js +0 -31
@@ -49,7 +49,6 @@ export declare class SharedWebStreamingSyncImplementation extends WebStreamingSy
49
49
  connect(options?: PowerSyncConnectionOptions): Promise<void>;
50
50
  disconnect(): Promise<void>;
51
51
  getWriteCheckpoint(): Promise<string>;
52
- hasCompletedSync(): Promise<boolean>;
53
52
  dispose(): Promise<void>;
54
53
  waitForReady(): Promise<void>;
55
54
  updateSubscriptions(subscriptions: SubscribedStream[]): void;
@@ -187,9 +187,6 @@ export class SharedWebStreamingSyncImplementation extends WebStreamingSyncImplem
187
187
  await this.waitForReady();
188
188
  return this.syncManager.getWriteCheckpoint();
189
189
  }
190
- async hasCompletedSync() {
191
- return this.syncManager.hasCompletedSync();
192
- }
193
190
  async dispose() {
194
191
  await this.waitForReady();
195
192
  await new Promise((resolve) => {
@@ -1,9 +1,7 @@
1
- import { AbstractRemote, AbstractRemoteOptions, BSONImplementation, ILogger, RemoteConnector } from '@powersync/common';
1
+ import { AbstractRemote, AbstractRemoteOptions, ILogger, RemoteConnector } from '@powersync/common';
2
2
  export declare class WebRemote extends AbstractRemote {
3
3
  protected connector: RemoteConnector;
4
4
  protected logger: ILogger;
5
- private _bson;
6
5
  constructor(connector: RemoteConnector, logger?: ILogger, options?: Partial<AbstractRemoteOptions>);
7
6
  getUserAgent(): string;
8
- getBSON(): Promise<BSONImplementation>;
9
7
  }
@@ -11,7 +11,6 @@ class WebFetchProvider extends FetchImplementationProvider {
11
11
  export class WebRemote extends AbstractRemote {
12
12
  connector;
13
13
  logger;
14
- _bson;
15
14
  constructor(connector, logger = DEFAULT_REMOTE_LOGGER, options) {
16
15
  super(connector, logger, {
17
16
  ...(options ?? {}),
@@ -30,15 +29,4 @@ export class WebRemote extends AbstractRemote {
30
29
  }
31
30
  return ua.join(' ');
32
31
  }
33
- async getBSON() {
34
- if (this._bson) {
35
- return this._bson;
36
- }
37
- /**
38
- * Dynamic import to be used only when needed.
39
- */
40
- const { BSON } = await import('bson');
41
- this._bson = BSON;
42
- return this._bson;
43
- }
44
32
  }
@@ -49,7 +49,10 @@ export class MultiDatabaseServer {
49
49
  const { dbFilename } = options;
50
50
  let server = this.activeDatabases.get(dbFilename);
51
51
  if (server == null) {
52
- const needsNavigatorLocks = !isSharedWorker;
52
+ // We don't need navigator locks for shared workers because all queries run in this shared worker exclusively.
53
+ // For read-only connections, we use a VFS that supports concurrent reads (so a single lock on the connection is
54
+ // fine).
55
+ const needsNavigatorLocks = !(isSharedWorker || options.isReadOnly);
53
56
  const connection = new RawSqliteConnection(options);
54
57
  const withSafeConcurrency = new ConcurrentSqliteConnection(connection, needsNavigatorLocks);
55
58
  // Initializing the RawSqliteConnection will run some pragmas that might write to the database file, so we want
@@ -1,10 +1,10 @@
1
1
  import * as Comlink from 'comlink';
2
- import { WASQLiteVFS } from '../../db/adapters/wa-sqlite/vfs.js';
2
+ import { vfsRequiresDedicatedWorkers } from '../../db/adapters/wa-sqlite/vfs.js';
3
3
  /**
4
4
  * Opens a shared or dedicated worker which exposes opening of database connections
5
5
  */
6
6
  export function openWorkerDatabasePort(workerIdentifier, multipleTabs = true, worker = '', vfs) {
7
- const needsDedicated = vfs == WASQLiteVFS.AccessHandlePoolVFS || vfs == WASQLiteVFS.OPFSCoopSyncVFS;
7
+ const needsDedicated = vfs && vfsRequiresDedicatedWorkers(vfs);
8
8
  if (worker) {
9
9
  return !needsDedicated && multipleTabs
10
10
  ? new SharedWorker(`${worker}`, {
@@ -73,7 +73,6 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
73
73
  broadCastLogger: ILogger;
74
74
  protected readonly database: DBAdapter;
75
75
  constructor();
76
- get lastSyncedAt(): Date | undefined;
77
76
  get isConnected(): boolean;
78
77
  /**
79
78
  * Gets the last client port which we know is safe from unexpected closes.
@@ -119,7 +118,6 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
119
118
  */
120
119
  removePort(port: WrappedSyncPort): Promise<() => void>;
121
120
  triggerCrudUpload(): void;
122
- hasCompletedSync(): Promise<boolean>;
123
121
  getWriteCheckpoint(): Promise<string>;
124
122
  protected withSyncImplementation<T>(callback: (sync: StreamingSyncImplementation) => Promise<T>): Promise<T>;
125
123
  protected generateStreamingImplementation(): WebStreamingSyncImplementation;
@@ -77,9 +77,6 @@ export class SharedSyncImplementation extends BaseObserver {
77
77
  logger: this.logger
78
78
  });
79
79
  }
80
- get lastSyncedAt() {
81
- return this.connectionManager.syncStreamImplementation?.lastSyncedAt;
82
- }
83
80
  get isConnected() {
84
81
  return this.connectionManager.syncStreamImplementation?.isConnected ?? false;
85
82
  }
@@ -245,11 +242,6 @@ export class SharedSyncImplementation extends BaseObserver {
245
242
  sync.triggerCrudUpload();
246
243
  });
247
244
  }
248
- async hasCompletedSync() {
249
- return this.withSyncImplementation(async (sync) => {
250
- return sync.hasCompletedSync();
251
- });
252
- }
253
245
  async getWriteCheckpoint() {
254
246
  return this.withSyncImplementation(async (sync) => {
255
247
  return sync.getWriteCheckpoint();
@@ -467,14 +459,10 @@ export class SharedSyncImplementation extends BaseObserver {
467
459
  // We can poke the crud in case we missed any updates.
468
460
  const impl = sharedSync.connectionManager.syncStreamImplementation;
469
461
  impl?.triggerCrudUpload();
470
- /**
471
- * FIXME or IMPROVE ME
472
- * The Rust client implementation stores sync state on the connection level.
473
- * Reopening the database causes a state machine error which should cause the
474
- * StreamingSyncImplementation to reconnect. It would be nicer if we could trigger
475
- * this reconnect earlier.
476
- * This reconnect is not required for IndexedDB.
477
- */
462
+ // The Rust client implementation stores sync state on the connection level. Reopening the database causes a
463
+ // disruption of the connection state and forces us to reconnect. We want to do that as soon as possible to
464
+ // minimize downtime.
465
+ impl?.markConnectionMayHaveChanged();
478
466
  }
479
467
  }
480
468
  async readLock(fn, options) {
@@ -24,7 +24,6 @@ export declare class WorkerClient {
24
24
  triggerCrudUpload(): void;
25
25
  setParams(params: SharedSyncInitOptions, subscriptions: SubscribedStream[]): Promise<void>;
26
26
  getWriteCheckpoint(): Promise<string>;
27
- hasCompletedSync(): Promise<boolean>;
28
27
  connect(options?: PowerSyncConnectionOptions): Promise<void>;
29
28
  updateSubscriptions(subscriptions: SubscribedStream[]): void;
30
29
  disconnect(): Promise<void>;
@@ -67,9 +67,6 @@ export class WorkerClient {
67
67
  getWriteCheckpoint() {
68
68
  return this.sync.getWriteCheckpoint();
69
69
  }
70
- hasCompletedSync() {
71
- return this.sync.hasCompletedSync();
72
- }
73
70
  connect(options) {
74
71
  return this.sync.connect(options);
75
72
  }