@powersync/web 0.0.0-dev-20260630141119 → 0.0.0-dev-20260708103617
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/bin/powersync.cjs +1 -1
- package/dist/index.umd.js +7821 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/worker/SharedSyncImplementation.umd.js +16139 -0
- package/dist/worker/SharedSyncImplementation.umd.js.map +1 -0
- package/dist/worker/WASQLiteDB.umd.js +17434 -0
- package/dist/worker/WASQLiteDB.umd.js.map +1 -0
- 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
- 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
- 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
- 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
- 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
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js.map +1 -0
- 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
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +3562 -0
- 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
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js +1400 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-833585.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +2478 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +1681 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js.map +1 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +1820 -0
- package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js.map +1 -0
- package/lib/package.json +91 -0
- package/lib/src/attachments/IndexDBFileSystemAdapter.js.map +1 -0
- package/lib/{db → src/db}/NavigatorTriggerClaimManager.d.ts +1 -1
- package/lib/src/db/NavigatorTriggerClaimManager.js.map +1 -0
- package/lib/src/db/PowerSyncDatabase.d.ts +78 -0
- package/lib/{db → src/db}/PowerSyncDatabase.js +61 -47
- package/lib/src/db/PowerSyncDatabase.js.map +1 -0
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +23 -0
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +27 -0
- package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js.map +1 -0
- package/lib/src/db/adapters/AsyncWebAdapter.d.ts +50 -0
- package/lib/{db → src/db}/adapters/AsyncWebAdapter.js +14 -14
- package/lib/src/db/adapters/AsyncWebAdapter.js.map +1 -0
- package/lib/src/db/adapters/SSRDBAdapter.d.ts +30 -0
- package/lib/src/db/adapters/SSRDBAdapter.js +69 -0
- package/lib/src/db/adapters/SSRDBAdapter.js.map +1 -0
- package/lib/{db → src/db}/adapters/WebDBAdapter.d.ts +1 -1
- package/lib/src/db/adapters/WebDBAdapter.js.map +1 -0
- package/lib/{db → src/db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +4 -3
- package/lib/{db → src/db}/adapters/wa-sqlite/ConcurrentConnection.js +2 -2
- package/lib/src/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
- package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
- package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseClient.js +37 -11
- package/lib/src/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
- package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
- package/lib/{db → src/db}/adapters/wa-sqlite/DatabaseServer.js +7 -11
- package/lib/src/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
- package/lib/{db → src/db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +12 -23
- package/lib/{db → src/db}/adapters/wa-sqlite/RawSqliteConnection.js +11 -17
- package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +45 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +146 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +15 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +22 -0
- package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js.map +1 -0
- package/lib/src/db/adapters/wa-sqlite/vfs.d.ts +40 -0
- package/lib/src/db/adapters/wa-sqlite/vfs.js +95 -0
- package/lib/src/db/adapters/wa-sqlite/vfs.js.map +1 -0
- package/lib/src/db/adapters/web-sql-flags.d.ts +92 -0
- package/lib/src/db/adapters/web-sql-flags.js +37 -0
- package/lib/src/db/adapters/web-sql-flags.js.map +1 -0
- package/lib/{db → src/db}/sync/SSRWebStreamingSyncImplementation.d.ts +8 -4
- package/lib/{db → src/db}/sync/SSRWebStreamingSyncImplementation.js +11 -4
- package/lib/src/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
- package/lib/{db → src/db}/sync/SharedWebStreamingSyncImplementation.d.ts +14 -13
- package/lib/{db → src/db}/sync/SharedWebStreamingSyncImplementation.js +66 -31
- package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
- package/lib/src/db/sync/WebRemote.d.ts +7 -0
- package/lib/src/db/sync/WebRemote.js +33 -0
- package/lib/src/db/sync/WebRemote.js.map +1 -0
- package/lib/{db → src/db}/sync/WebStreamingSyncImplementation.d.ts +4 -2
- package/lib/{db → src/db}/sync/WebStreamingSyncImplementation.js +2 -3
- package/lib/src/db/sync/WebStreamingSyncImplementation.js.map +1 -0
- package/lib/src/db/sync/userAgent.js.map +1 -0
- package/lib/{index.d.ts → src/index.d.ts} +3 -1
- package/lib/{index.js → src/index.js} +3 -1
- package/lib/src/index.js.map +1 -0
- package/lib/src/shared/navigator.js.map +1 -0
- package/lib/src/shared/tab_close_signal.js.map +1 -0
- package/lib/src/worker/db/MultiDatabaseServer.d.ts +17 -0
- package/lib/{worker → src/worker}/db/MultiDatabaseServer.js +18 -26
- package/lib/src/worker/db/MultiDatabaseServer.js.map +1 -0
- package/lib/src/worker/db/WASQLiteDB.worker.d.ts +4 -0
- package/lib/src/worker/db/WASQLiteDB.worker.js +31 -0
- package/lib/src/worker/db/WASQLiteDB.worker.js.map +1 -0
- package/lib/src/worker/db/open-worker-database.d.ts +14 -0
- package/lib/src/worker/db/open-worker-database.js +53 -0
- package/lib/src/worker/db/open-worker-database.js.map +1 -0
- package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +19 -0
- package/lib/src/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
- package/lib/src/worker/sync/BroadcastLogger.d.ts +47 -0
- package/lib/src/worker/sync/BroadcastLogger.js +129 -0
- package/lib/src/worker/sync/BroadcastLogger.js.map +1 -0
- package/lib/{worker → src/worker}/sync/SharedSyncImplementation.d.ts +15 -11
- package/lib/{worker → src/worker}/sync/SharedSyncImplementation.js +43 -42
- package/lib/src/worker/sync/SharedSyncImplementation.js.map +1 -0
- package/lib/src/worker/sync/SharedSyncImplementation.worker.js +12 -0
- package/lib/src/worker/sync/SharedSyncImplementation.worker.js.map +1 -0
- package/lib/{worker → src/worker}/sync/WorkerClient.d.ts +3 -3
- package/lib/{worker → src/worker}/sync/WorkerClient.js +2 -2
- package/lib/src/worker/sync/WorkerClient.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +29 -22
- package/src/db/NavigatorTriggerClaimManager.ts +1 -1
- package/src/db/PowerSyncDatabase.ts +122 -80
- package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +47 -0
- package/src/db/adapters/AsyncWebAdapter.ts +26 -17
- package/src/db/adapters/SSRDBAdapter.ts +64 -14
- package/src/db/adapters/WebDBAdapter.ts +1 -1
- package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +5 -4
- package/src/db/adapters/wa-sqlite/DatabaseClient.ts +56 -20
- package/src/db/adapters/wa-sqlite/DatabaseServer.ts +12 -15
- package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +24 -41
- package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +126 -63
- package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +24 -0
- package/src/db/adapters/wa-sqlite/vfs.ts +67 -54
- package/src/db/adapters/web-sql-flags.ts +141 -0
- package/src/db/sync/SSRWebStreamingSyncImplementation.ts +22 -4
- package/src/db/sync/SharedWebStreamingSyncImplementation.ts +77 -38
- package/src/db/sync/WebRemote.ts +26 -23
- package/src/db/sync/WebStreamingSyncImplementation.ts +5 -4
- package/src/index.ts +3 -1
- package/src/worker/db/MultiDatabaseServer.ts +25 -41
- package/src/worker/db/WASQLiteDB.worker.ts +35 -0
- package/src/worker/db/open-worker-database.ts +62 -0
- package/src/worker/sync/AbstractSharedSyncClientProvider.ts +10 -4
- package/src/worker/sync/BroadcastLogger.ts +103 -35
- package/src/worker/sync/SharedSyncImplementation.ts +63 -62
- package/src/worker/sync/SharedSyncImplementation.worker.ts +14 -0
- package/src/worker/sync/WorkerClient.ts +4 -4
- package/dist/index.react_native_web.js +0 -1879
- package/dist/index.react_native_web.js.map +0 -1
- package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js +0 -2
- package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js.map +0 -1
- package/dist/worker/FacadeVFS-d1ZDvud7.js +0 -2
- package/dist/worker/FacadeVFS-d1ZDvud7.js.map +0 -1
- package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js +0 -2
- package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js.map +0 -1
- package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js +0 -2
- package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js.map +0 -1
- package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js +0 -2
- package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js.map +0 -1
- package/dist/worker/mc-wa-sqlite-DiBqIVE5.js +0 -2
- package/dist/worker/mc-wa-sqlite-DiBqIVE5.js.map +0 -1
- package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js +0 -2
- package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js.map +0 -1
- package/dist/worker/wa-sqlite-BlSx7-_P.js +0 -2
- package/dist/worker/wa-sqlite-BlSx7-_P.js.map +0 -1
- package/dist/worker/wa-sqlite-async-BdR24Ucf.js +0 -2
- package/dist/worker/wa-sqlite-async-BdR24Ucf.js.map +0 -1
- package/dist/worker/websockets-Q8W_lerF.js +0 -9
- package/dist/worker/websockets-Q8W_lerF.js.map +0 -1
- package/dist/worker/worker.js +0 -7
- package/dist/worker/worker.js.map +0 -1
- package/lib/attachments/IndexDBFileSystemAdapter.js.map +0 -1
- package/lib/db/NavigatorTriggerClaimManager.js.map +0 -1
- package/lib/db/PowerSyncDatabase.d.ts +0 -67
- package/lib/db/PowerSyncDatabase.js.map +0 -1
- package/lib/db/adapters/AsyncWebAdapter.d.ts +0 -32
- package/lib/db/adapters/AsyncWebAdapter.js.map +0 -1
- package/lib/db/adapters/SSRDBAdapter.d.ts +0 -17
- package/lib/db/adapters/SSRDBAdapter.js +0 -37
- package/lib/db/adapters/SSRDBAdapter.js.map +0 -1
- package/lib/db/adapters/WebDBAdapter.js.map +0 -1
- package/lib/db/adapters/options.d.ts +0 -87
- package/lib/db/adapters/options.js +0 -6
- package/lib/db/adapters/options.js.map +0 -1
- package/lib/db/adapters/resolveAndValidateOptions.d.ts +0 -5
- package/lib/db/adapters/resolveAndValidateOptions.js +0 -33
- package/lib/db/adapters/resolveAndValidateOptions.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -18
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -131
- package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +0 -1
- package/lib/db/adapters/wa-sqlite/vfs.d.ts +0 -50
- package/lib/db/adapters/wa-sqlite/vfs.js +0 -77
- package/lib/db/adapters/wa-sqlite/vfs.js.map +0 -1
- package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +0 -1
- package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +0 -1
- package/lib/db/sync/WebRemote.d.ts +0 -10
- package/lib/db/sync/WebRemote.js +0 -33
- package/lib/db/sync/WebRemote.js.map +0 -1
- package/lib/db/sync/WebStreamingSyncImplementation.js.map +0 -1
- package/lib/db/sync/userAgent.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/shared/navigator.js.map +0 -1
- package/lib/shared/tab_close_signal.js.map +0 -1
- package/lib/worker/SharedWorkerConnectionRequest.d.ts +0 -5
- package/lib/worker/SharedWorkerConnectionRequest.js +0 -2
- package/lib/worker/SharedWorkerConnectionRequest.js.map +0 -1
- package/lib/worker/client.d.ts +0 -15
- package/lib/worker/client.js +0 -77
- package/lib/worker/client.js.map +0 -1
- package/lib/worker/db/MultiDatabaseServer.d.ts +0 -22
- package/lib/worker/db/MultiDatabaseServer.js.map +0 -1
- package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -13
- package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +0 -1
- package/lib/worker/sync/BroadcastLogger.d.ts +0 -27
- package/lib/worker/sync/BroadcastLogger.js +0 -65
- package/lib/worker/sync/BroadcastLogger.js.map +0 -1
- package/lib/worker/sync/SharedSyncImplementation.js.map +0 -1
- package/lib/worker/sync/WorkerClient.js.map +0 -1
- package/lib/worker/worker.js +0 -34
- package/lib/worker/worker.js.map +0 -1
- package/src/db/adapters/options.ts +0 -100
- package/src/db/adapters/resolveAndValidateOptions.ts +0 -40
- package/src/worker/SharedWorkerConnectionRequest.ts +0 -6
- package/src/worker/client.ts +0 -100
- package/src/worker/worker.ts +0 -38
- /package/dist/{worker/assets/mc-wa-sqlite-async-D6idQS2r.wasm → 2075a31bb151adbb9767.wasm} +0 -0
- /package/dist/{worker/assets/wa-sqlite-XZW__iJk.wasm → 3322bc84de986b63c2cd.wasm} +0 -0
- /package/dist/{worker/assets/mc-wa-sqlite-CnHbhWvs.wasm → 8e97452e297be23b5e50.wasm} +0 -0
- /package/dist/{worker/assets/wa-sqlite-async-rHzzC98y.wasm → fbc178b70d530e8ce02b.wasm} +0 -0
- /package/lib/{attachments → src/attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
- /package/lib/{attachments → src/attachments}/IndexDBFileSystemAdapter.js +0 -0
- /package/lib/{db → src/db}/NavigatorTriggerClaimManager.js +0 -0
- /package/lib/{db → src/db}/adapters/WebDBAdapter.js +0 -0
- /package/lib/{db → src/db}/sync/userAgent.d.ts +0 -0
- /package/lib/{db → src/db}/sync/userAgent.js +0 -0
- /package/lib/{shared → src/shared}/navigator.d.ts +0 -0
- /package/lib/{shared → src/shared}/navigator.js +0 -0
- /package/lib/{shared → src/shared}/tab_close_signal.d.ts +0 -0
- /package/lib/{shared → src/shared}/tab_close_signal.js +0 -0
- /package/lib/{worker → src/worker}/sync/AbstractSharedSyncClientProvider.js +0 -0
- /package/lib/{worker/worker.d.ts → src/worker/sync/SharedSyncImplementation.worker.d.ts} +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { DBAdapter, SQLOpenFactory, type ILogLevel } from '@powersync/common';
|
|
2
|
+
import { ResolvedWebSQLOpenOptions, WebSQLOpenFactoryOptions } from '../web-sql-flags.js';
|
|
3
|
+
import { WASQLiteVFS } from './vfs.js';
|
|
4
|
+
import { PoolConnection } from '../AsyncWebAdapter.js';
|
|
5
|
+
export interface WASQLiteOpenFactoryOptions extends WebSQLOpenFactoryOptions {
|
|
6
|
+
vfs?: WASQLiteVFS;
|
|
7
|
+
/**
|
|
8
|
+
* If the {@link vfs} supports it, an additional amount of read-only connections to open. Using additional read
|
|
9
|
+
* connections can speed up queries by dispatching them to multiple workers running them concurrently.
|
|
10
|
+
*
|
|
11
|
+
* {@link WASQLiteVFS.OPFSWriteAheadVFS} is the only VFS with support for multiple connections, so this option is
|
|
12
|
+
* ignored for other VFS implementations.
|
|
13
|
+
*
|
|
14
|
+
* Defaults to 1.
|
|
15
|
+
*/
|
|
16
|
+
additionalReaders?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ResolvedWASQLiteOpenFactoryOptions extends ResolvedWebSQLOpenOptions {
|
|
19
|
+
vfs: WASQLiteVFS;
|
|
20
|
+
/**
|
|
21
|
+
* Whether this is a read-only connection opened for the `OPFSWriteAheadVFS` file system.
|
|
22
|
+
*/
|
|
23
|
+
isReadOnly: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface WorkerDBOpenerOptions extends ResolvedWASQLiteOpenFactoryOptions {
|
|
26
|
+
logLevel: ILogLevel;
|
|
27
|
+
/**
|
|
28
|
+
* A lock that is currently held by the client. When the lock is returned, we know the client is gone and that we need
|
|
29
|
+
* to clean up resources.
|
|
30
|
+
*/
|
|
31
|
+
lockName: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Opens a SQLite connection using WA-SQLite.
|
|
35
|
+
*/
|
|
36
|
+
export declare class WASQLiteOpenFactory implements SQLOpenFactory {
|
|
37
|
+
private options;
|
|
38
|
+
private resolvedFlags;
|
|
39
|
+
private logger;
|
|
40
|
+
constructor(options: WASQLiteOpenFactoryOptions);
|
|
41
|
+
get waOptions(): WASQLiteOpenFactoryOptions;
|
|
42
|
+
protected openAdapter(): DBAdapter;
|
|
43
|
+
openDB(): DBAdapter;
|
|
44
|
+
openConnection(): Promise<PoolConnection>;
|
|
45
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { createLogger } from '@powersync/common';
|
|
2
|
+
import * as Comlink from 'comlink';
|
|
3
|
+
import { openWorkerDatabasePort, resolveWorkerDatabasePortFactory } from '../../../worker/db/open-worker-database.js';
|
|
4
|
+
import { DEFAULT_CACHE_SIZE_KB, isServerSide, resolveWebSQLFlags, TemporaryStorageOption } from '../web-sql-flags.js';
|
|
5
|
+
import { SSRDBAdapter } from '../SSRDBAdapter.js';
|
|
6
|
+
import { vfsRequiresDedicatedWorkers, WASQLiteVFS } from './vfs.js';
|
|
7
|
+
import { MultiDatabaseServer } from '../../../worker/db/MultiDatabaseServer.js';
|
|
8
|
+
import { DatabaseClient } from './DatabaseClient.js';
|
|
9
|
+
import { generateTabCloseSignal } from '../../../shared/tab_close_signal.js';
|
|
10
|
+
import { AsyncDbAdapter } from '../AsyncWebAdapter.js';
|
|
11
|
+
/**
|
|
12
|
+
* Opens a SQLite connection using WA-SQLite.
|
|
13
|
+
*/
|
|
14
|
+
export class WASQLiteOpenFactory {
|
|
15
|
+
options;
|
|
16
|
+
resolvedFlags;
|
|
17
|
+
logger;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.options = options;
|
|
20
|
+
assertValidWASQLiteOpenFactoryOptions(options);
|
|
21
|
+
this.resolvedFlags = resolveWebSQLFlags(options.flags);
|
|
22
|
+
this.logger = options.logger ?? createLogger(`WASQLiteOpenFactory - ${this.options.dbFilename}`);
|
|
23
|
+
}
|
|
24
|
+
get waOptions() {
|
|
25
|
+
// Cast to extended type
|
|
26
|
+
return this.options;
|
|
27
|
+
}
|
|
28
|
+
openAdapter() {
|
|
29
|
+
return new AsyncDbAdapter(this.openConnection(), this.options.dbFilename);
|
|
30
|
+
}
|
|
31
|
+
openDB() {
|
|
32
|
+
const { resolvedFlags: { disableSSRWarning, enableMultiTabs, ssrMode = isServerSide() } } = this;
|
|
33
|
+
if (ssrMode) {
|
|
34
|
+
if (!disableSSRWarning) {
|
|
35
|
+
this.logger.warn(`
|
|
36
|
+
Running PowerSync in SSR mode.
|
|
37
|
+
Only empty query results will be returned.
|
|
38
|
+
Disable this warning by setting 'disableSSRWarning: true' in options.`);
|
|
39
|
+
}
|
|
40
|
+
return new SSRDBAdapter();
|
|
41
|
+
}
|
|
42
|
+
if (!enableMultiTabs) {
|
|
43
|
+
this.logger.warn('Multiple tab support is not enabled. Using this site across multiple tabs may not function correctly.');
|
|
44
|
+
}
|
|
45
|
+
return this.openAdapter();
|
|
46
|
+
}
|
|
47
|
+
async openConnection() {
|
|
48
|
+
const { enableMultiTabs, useWebWorker } = this.resolvedFlags;
|
|
49
|
+
const { vfs = WASQLiteVFS.IDBBatchAtomicVFS, temporaryStorage = TemporaryStorageOption.MEMORY, cacheSizeKb = DEFAULT_CACHE_SIZE_KB, encryptionKey } = this.waOptions;
|
|
50
|
+
if (!enableMultiTabs) {
|
|
51
|
+
this.logger.warn('Multiple tabs are not enabled in this browser');
|
|
52
|
+
}
|
|
53
|
+
const resolveOptions = (isReadOnly) => ({
|
|
54
|
+
dbFilename: this.options.dbFilename,
|
|
55
|
+
dbLocation: this.options.dbLocation,
|
|
56
|
+
debugMode: this.options.debugMode,
|
|
57
|
+
vfs,
|
|
58
|
+
temporaryStorage,
|
|
59
|
+
cacheSizeKb,
|
|
60
|
+
flags: this.resolvedFlags,
|
|
61
|
+
encryptionKey: encryptionKey,
|
|
62
|
+
isReadOnly
|
|
63
|
+
});
|
|
64
|
+
let client;
|
|
65
|
+
let additionalReaders = [];
|
|
66
|
+
let requiresPersistentTriggers = vfsRequiresDedicatedWorkers(vfs);
|
|
67
|
+
if (useWebWorker) {
|
|
68
|
+
const optionsDbWorker = this.options.worker;
|
|
69
|
+
const openDatabaseWorker = async (resolvedOptions) => {
|
|
70
|
+
const workerPort = typeof optionsDbWorker == 'function'
|
|
71
|
+
? resolveWorkerDatabasePortFactory(() => optionsDbWorker({
|
|
72
|
+
...this.options,
|
|
73
|
+
temporaryStorage,
|
|
74
|
+
cacheSizeKb,
|
|
75
|
+
flags: this.resolvedFlags,
|
|
76
|
+
encryptionKey
|
|
77
|
+
}))
|
|
78
|
+
: openWorkerDatabasePort(this.options.dbFilename, enableMultiTabs, optionsDbWorker, this.waOptions.vfs);
|
|
79
|
+
const source = Comlink.wrap(workerPort);
|
|
80
|
+
const closeSignal = new AbortController();
|
|
81
|
+
const connection = await source.connect({
|
|
82
|
+
...resolvedOptions,
|
|
83
|
+
logLevel: this.logger.getLevel(),
|
|
84
|
+
lockName: await generateTabCloseSignal(closeSignal.signal)
|
|
85
|
+
});
|
|
86
|
+
const clientOptions = {
|
|
87
|
+
connection,
|
|
88
|
+
source,
|
|
89
|
+
// This tab owns the worker, so we're guaranteed to outlive it.
|
|
90
|
+
remoteCanCloseUnexpectedly: false,
|
|
91
|
+
onClose: () => {
|
|
92
|
+
closeSignal.abort();
|
|
93
|
+
if (workerPort instanceof Worker) {
|
|
94
|
+
workerPort.terminate();
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
workerPort.close();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
return new DatabaseClient(clientOptions, {
|
|
102
|
+
...resolvedOptions,
|
|
103
|
+
requiresPersistentTriggers
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
client = await openDatabaseWorker(resolveOptions(false));
|
|
107
|
+
if (vfs == WASQLiteVFS.OPFSWriteAheadVFS) {
|
|
108
|
+
// This VFS supports concurrent reads, so we can open additional workers to host read-only connections for
|
|
109
|
+
// concurrent reads / writes.
|
|
110
|
+
const additionalReadersCount = this.options.additionalReaders ?? 1;
|
|
111
|
+
for (let i = 0; i < additionalReadersCount; i++) {
|
|
112
|
+
const reader = await openDatabaseWorker(resolveOptions(true));
|
|
113
|
+
additionalReaders.push(reader);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// Don't use a web worker. Instead, open the MultiDatabaseServer a worker would use locally.
|
|
119
|
+
const localServer = new MultiDatabaseServer(this.logger);
|
|
120
|
+
requiresPersistentTriggers = true;
|
|
121
|
+
const resolvedOptions = resolveOptions(false);
|
|
122
|
+
const connection = await localServer.openConnectionLocally(resolvedOptions);
|
|
123
|
+
client = new DatabaseClient({ connection, source: null, remoteCanCloseUnexpectedly: false }, {
|
|
124
|
+
...resolvedOptions,
|
|
125
|
+
requiresPersistentTriggers
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
writer: client,
|
|
130
|
+
additionalReaders
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Asserts that the factory options are valid.
|
|
136
|
+
*/
|
|
137
|
+
function assertValidWASQLiteOpenFactoryOptions(options) {
|
|
138
|
+
// The OPFS VFS only works in dedicated web workers.
|
|
139
|
+
if ('vfs' in options && 'flags' in options) {
|
|
140
|
+
const { vfs, flags = {} } = options;
|
|
141
|
+
if (vfs && vfsRequiresDedicatedWorkers(vfs) && 'useWebWorker' in flags && !flags.useWebWorker) {
|
|
142
|
+
throw new Error(`Invalid configuration: The 'useWebWorker' flag must be true when using an OPFS-based VFS (${vfs}).`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=WASQLiteOpenFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WASQLiteOpenFactory.js","sourceRoot":"","sources":["../../../../../src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AbstractPowerSyncDatabase, DBAdapter, PowerSyncDatabaseOptions } from '@powersync/common';
|
|
2
|
+
import { AbstractWebPowerSyncDatabaseOpenFactory } from '../AbstractWebPowerSyncDatabaseOpenFactory.js';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated {@link PowerSyncDatabase} can now be constructed directly
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const powersync = new PowerSyncDatabase({database: {
|
|
8
|
+
* dbFileName: 'powersync.db'
|
|
9
|
+
* }});
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export declare class WASQLitePowerSyncDatabaseOpenFactory extends AbstractWebPowerSyncDatabaseOpenFactory {
|
|
13
|
+
protected openDB(): DBAdapter;
|
|
14
|
+
generateInstance(options: PowerSyncDatabaseOptions): AbstractPowerSyncDatabase;
|
|
15
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PowerSyncDatabase } from '../../../db/PowerSyncDatabase.js';
|
|
2
|
+
import { AbstractWebPowerSyncDatabaseOpenFactory } from '../AbstractWebPowerSyncDatabaseOpenFactory.js';
|
|
3
|
+
import { WASQLiteOpenFactory } from './WASQLiteOpenFactory.js';
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated {@link PowerSyncDatabase} can now be constructed directly
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* const powersync = new PowerSyncDatabase({database: {
|
|
9
|
+
* dbFileName: 'powersync.db'
|
|
10
|
+
* }});
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export class WASQLitePowerSyncDatabaseOpenFactory extends AbstractWebPowerSyncDatabaseOpenFactory {
|
|
14
|
+
openDB() {
|
|
15
|
+
const factory = new WASQLiteOpenFactory(this.options);
|
|
16
|
+
return factory.openDB();
|
|
17
|
+
}
|
|
18
|
+
generateInstance(options) {
|
|
19
|
+
return new PowerSyncDatabase(options);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=WASQLitePowerSyncDatabaseOpenFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WASQLitePowerSyncDatabaseOpenFactory.js","sourceRoot":"","sources":["../../../../../src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,uCAAuC,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,OAAO,oCAAqC,SAAQ,uCAAuC;IACrF,MAAM;QACd,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,gBAAgB,CAAC,OAAiC;QAChD,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type * as SQLite from '@journeyapps/wa-sqlite';
|
|
2
|
+
import { ResolvedWASQLiteOpenFactoryOptions } from './WASQLiteOpenFactory.js';
|
|
3
|
+
/**
|
|
4
|
+
* List of currently tested virtual filesystems
|
|
5
|
+
*/
|
|
6
|
+
export declare enum WASQLiteVFS {
|
|
7
|
+
IDBBatchAtomicVFS = "IDBBatchAtomicVFS",
|
|
8
|
+
OPFSCoopSyncVFS = "OPFSCoopSyncVFS",
|
|
9
|
+
AccessHandlePoolVFS = "AccessHandlePoolVFS",
|
|
10
|
+
OPFSWriteAheadVFS = "OPFSWriteAheadVFS",
|
|
11
|
+
/**
|
|
12
|
+
* A virtual file system storing data in-memory only, without persistence.
|
|
13
|
+
*
|
|
14
|
+
* This file system can be used in three configurations:
|
|
15
|
+
*
|
|
16
|
+
* 1. In shared workers (the default when available): All tabs share the same in-memory database, which is cleared
|
|
17
|
+
* once the last tab is closed.
|
|
18
|
+
* 2. In dedicated workers (used when `enableMultiTabs` is disabled). Each tab has its own in-memory database cleared
|
|
19
|
+
* when the tab is closed. Queries are offloaded to a dedicated worker.
|
|
20
|
+
* 3. In the context of the tab itself (used when both `enableMultiTabs` and `useWebWorker` are disabled). The per-tab
|
|
21
|
+
* database is hosted in the tab itself, and queries run synchronously. This is _a lot_ faster than any other
|
|
22
|
+
* single-threadedVFS, but can block JavaScript for computationally-intensive queries.
|
|
23
|
+
*
|
|
24
|
+
* This VFS primarily intended for development, but it also useful for online-first deployments not syncing large
|
|
25
|
+
* amounts of data, as it is quicker to start up.
|
|
26
|
+
*/
|
|
27
|
+
InMemoryVfs = "InMemoryVFS"
|
|
28
|
+
}
|
|
29
|
+
export declare function vfsRequiresDedicatedWorkers(vfs: WASQLiteVFS): vfs is WASQLiteVFS.OPFSCoopSyncVFS | WASQLiteVFS.AccessHandlePoolVFS | WASQLiteVFS.OPFSWriteAheadVFS;
|
|
30
|
+
/**
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export type SQLiteModule = Parameters<typeof SQLite.Factory>[0];
|
|
34
|
+
/**
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export declare function loadModuleAndVfs({ vfs, dbFilename, encryptionKey }: ResolvedWASQLiteOpenFactoryOptions): Promise<{
|
|
38
|
+
module: SQLiteModule;
|
|
39
|
+
vfs: SQLiteVFS;
|
|
40
|
+
}>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List of currently tested virtual filesystems
|
|
3
|
+
*/
|
|
4
|
+
export var WASQLiteVFS;
|
|
5
|
+
(function (WASQLiteVFS) {
|
|
6
|
+
WASQLiteVFS["IDBBatchAtomicVFS"] = "IDBBatchAtomicVFS";
|
|
7
|
+
WASQLiteVFS["OPFSCoopSyncVFS"] = "OPFSCoopSyncVFS";
|
|
8
|
+
WASQLiteVFS["AccessHandlePoolVFS"] = "AccessHandlePoolVFS";
|
|
9
|
+
WASQLiteVFS["OPFSWriteAheadVFS"] = "OPFSWriteAheadVFS";
|
|
10
|
+
/**
|
|
11
|
+
* A virtual file system storing data in-memory only, without persistence.
|
|
12
|
+
*
|
|
13
|
+
* This file system can be used in three configurations:
|
|
14
|
+
*
|
|
15
|
+
* 1. In shared workers (the default when available): All tabs share the same in-memory database, which is cleared
|
|
16
|
+
* once the last tab is closed.
|
|
17
|
+
* 2. In dedicated workers (used when `enableMultiTabs` is disabled). Each tab has its own in-memory database cleared
|
|
18
|
+
* when the tab is closed. Queries are offloaded to a dedicated worker.
|
|
19
|
+
* 3. In the context of the tab itself (used when both `enableMultiTabs` and `useWebWorker` are disabled). The per-tab
|
|
20
|
+
* database is hosted in the tab itself, and queries run synchronously. This is _a lot_ faster than any other
|
|
21
|
+
* single-threadedVFS, but can block JavaScript for computationally-intensive queries.
|
|
22
|
+
*
|
|
23
|
+
* This VFS primarily intended for development, but it also useful for online-first deployments not syncing large
|
|
24
|
+
* amounts of data, as it is quicker to start up.
|
|
25
|
+
*/
|
|
26
|
+
WASQLiteVFS["InMemoryVfs"] = "InMemoryVFS";
|
|
27
|
+
})(WASQLiteVFS || (WASQLiteVFS = {}));
|
|
28
|
+
export function vfsRequiresDedicatedWorkers(vfs) {
|
|
29
|
+
return vfs != WASQLiteVFS.IDBBatchAtomicVFS && vfs != WASQLiteVFS.InMemoryVfs;
|
|
30
|
+
}
|
|
31
|
+
async function asyncModuleFactory(encryptionKey) {
|
|
32
|
+
if (encryptionKey) {
|
|
33
|
+
const { default: factory } = await import('@journeyapps/wa-sqlite/dist/mc-wa-sqlite-async.mjs');
|
|
34
|
+
return factory();
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const { default: factory } = await import('@journeyapps/wa-sqlite/dist/wa-sqlite-async.mjs');
|
|
38
|
+
return factory();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function syncModuleFactory(encryptionKey) {
|
|
42
|
+
if (encryptionKey) {
|
|
43
|
+
const { default: factory } = await import('@journeyapps/wa-sqlite/dist/mc-wa-sqlite.mjs');
|
|
44
|
+
return factory();
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const { default: factory } = await import('@journeyapps/wa-sqlite/dist/wa-sqlite.mjs');
|
|
48
|
+
return factory();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
export async function loadModuleAndVfs({ vfs, dbFilename, encryptionKey }) {
|
|
55
|
+
let moduleFactory = syncModuleFactory;
|
|
56
|
+
let resolveVfs;
|
|
57
|
+
switch (vfs) {
|
|
58
|
+
case WASQLiteVFS.IDBBatchAtomicVFS: {
|
|
59
|
+
moduleFactory = asyncModuleFactory;
|
|
60
|
+
const { IDBBatchAtomicVFS } = await import('@journeyapps/wa-sqlite/src/examples/IDBBatchAtomicVFS.js');
|
|
61
|
+
resolveVfs = (module) => {
|
|
62
|
+
// @ts-expect-error The types for this static method are missing upstream
|
|
63
|
+
return IDBBatchAtomicVFS.create(filename, module, { lockPolicy: 'exclusive' });
|
|
64
|
+
};
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
case WASQLiteVFS.AccessHandlePoolVFS: {
|
|
68
|
+
// @ts-expect-error The types for this import are missing upstream
|
|
69
|
+
const { AccessHandlePoolVFS } = await import('@journeyapps/wa-sqlite/src/examples/AccessHandlePoolVFS.js');
|
|
70
|
+
resolveVfs = (module) => AccessHandlePoolVFS.create(dbFilename, module);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case WASQLiteVFS.OPFSCoopSyncVFS: {
|
|
74
|
+
// @ts-expect-error The types for this import are missing upstream
|
|
75
|
+
const { OPFSCoopSyncVFS } = await import('@journeyapps/wa-sqlite/src/examples/OPFSCoopSyncVFS.js');
|
|
76
|
+
resolveVfs = (module) => OPFSCoopSyncVFS.create(dbFilename, module);
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case WASQLiteVFS.OPFSWriteAheadVFS: {
|
|
80
|
+
// @ts-expect-error The types for this import are missing upstream
|
|
81
|
+
const { OPFSWriteAheadVFS } = await import('@journeyapps/wa-sqlite/src/examples/OPFSWriteAheadVFS.js');
|
|
82
|
+
resolveVfs = (module) => OPFSWriteAheadVFS.create(dbFilename, module, {});
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
case WASQLiteVFS.InMemoryVfs: {
|
|
86
|
+
const { MemoryVFS } = await import('@journeyapps/wa-sqlite/src/examples/MemoryVFS.js');
|
|
87
|
+
// @ts-expect-error The types for this static method are missing upstream
|
|
88
|
+
resolveVfs = (module) => MemoryVFS.create(dbFilename, module);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const module = await moduleFactory(encryptionKey);
|
|
93
|
+
return { module, vfs: await resolveVfs(module) };
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=vfs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../../../../../src/db/adapters/wa-sqlite/vfs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type ILogger, SQLOpenOptions } from '@powersync/common';
|
|
2
|
+
/**
|
|
3
|
+
* Common settings used when creating SQL connections on web.
|
|
4
|
+
*/
|
|
5
|
+
export interface WebSQLFlags {
|
|
6
|
+
/**
|
|
7
|
+
* Broadcast logs from shared workers, such as the shared sync worker,
|
|
8
|
+
* to individual tabs. This defaults to true.
|
|
9
|
+
*/
|
|
10
|
+
broadcastLogs?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* SQLite operations are currently not supported in SSR mode.
|
|
13
|
+
* A warning will be logged if attempting to use SQLite in SSR.
|
|
14
|
+
* Setting this to `true` will disabled the warning above.
|
|
15
|
+
*/
|
|
16
|
+
disableSSRWarning?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Enables multi tab support
|
|
19
|
+
*/
|
|
20
|
+
enableMultiTabs?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* The SQLite connection is often executed through a web worker
|
|
23
|
+
* in order to offload computation. This can be used to manually
|
|
24
|
+
* disable the use of web workers in environments where web workers
|
|
25
|
+
* might be unstable.
|
|
26
|
+
*/
|
|
27
|
+
useWebWorker?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Open in SSR placeholder mode. DB operations and Sync operations will be a No-op
|
|
30
|
+
*/
|
|
31
|
+
ssrMode?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export type ResolvedWebSQLFlags = Required<WebSQLFlags>;
|
|
34
|
+
export interface ResolvedWebSQLOpenOptions extends SQLOpenOptions {
|
|
35
|
+
flags: ResolvedWebSQLFlags;
|
|
36
|
+
/**
|
|
37
|
+
* Where to store SQLite temporary files. Defaults to 'MEMORY'.
|
|
38
|
+
* Setting this to `FILESYSTEM` can cause issues with larger queries or datasets.
|
|
39
|
+
*/
|
|
40
|
+
temporaryStorage: TemporaryStorageOption;
|
|
41
|
+
cacheSizeKb: number;
|
|
42
|
+
/**
|
|
43
|
+
* Encryption key for the database.
|
|
44
|
+
* If set, the database will be encrypted using ChaCha20.
|
|
45
|
+
*/
|
|
46
|
+
encryptionKey?: string;
|
|
47
|
+
}
|
|
48
|
+
export declare enum TemporaryStorageOption {
|
|
49
|
+
MEMORY = "memory",
|
|
50
|
+
FILESYSTEM = "file"
|
|
51
|
+
}
|
|
52
|
+
export declare const DEFAULT_CACHE_SIZE_KB: number;
|
|
53
|
+
/**
|
|
54
|
+
* Options for opening a Web SQL connection
|
|
55
|
+
*/
|
|
56
|
+
export interface WebSQLOpenFactoryOptions extends SQLOpenOptions {
|
|
57
|
+
flags?: WebSQLFlags;
|
|
58
|
+
/**
|
|
59
|
+
* Allows you to override the default wasqlite db worker.
|
|
60
|
+
*
|
|
61
|
+
* You can either provide a path to the worker script
|
|
62
|
+
* or a factory method that returns a worker.
|
|
63
|
+
*/
|
|
64
|
+
worker?: string | URL | ((options: ResolvedWebSQLOpenOptions) => Worker | SharedWorker);
|
|
65
|
+
/**
|
|
66
|
+
* Use an existing port to an initialized worker.
|
|
67
|
+
* A worker will be initialized if none is provided
|
|
68
|
+
*/
|
|
69
|
+
workerPort?: MessagePort;
|
|
70
|
+
logger?: ILogger;
|
|
71
|
+
/**
|
|
72
|
+
* Where to store SQLite temporary files. Defaults to 'MEMORY'.
|
|
73
|
+
* Setting this to `FILESYSTEM` can cause issues with larger queries or datasets.
|
|
74
|
+
*
|
|
75
|
+
* For details, see: https://www.sqlite.org/pragma.html#pragma_temp_store
|
|
76
|
+
*/
|
|
77
|
+
temporaryStorage?: TemporaryStorageOption;
|
|
78
|
+
/**
|
|
79
|
+
* Maximum SQLite cache size. Defaults to 50MB.
|
|
80
|
+
*
|
|
81
|
+
* For details, see: https://www.sqlite.org/pragma.html#pragma_cache_size
|
|
82
|
+
*/
|
|
83
|
+
cacheSizeKb?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Encryption key for the database.
|
|
86
|
+
* If set, the database will be encrypted using ChaCha20.
|
|
87
|
+
*/
|
|
88
|
+
encryptionKey?: string;
|
|
89
|
+
}
|
|
90
|
+
export declare function isServerSide(): boolean;
|
|
91
|
+
export declare const DEFAULT_WEB_SQL_FLAGS: ResolvedWebSQLFlags;
|
|
92
|
+
export declare function resolveWebSQLFlags(flags?: WebSQLFlags): ResolvedWebSQLFlags;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export var TemporaryStorageOption;
|
|
2
|
+
(function (TemporaryStorageOption) {
|
|
3
|
+
TemporaryStorageOption["MEMORY"] = "memory";
|
|
4
|
+
TemporaryStorageOption["FILESYSTEM"] = "file";
|
|
5
|
+
})(TemporaryStorageOption || (TemporaryStorageOption = {}));
|
|
6
|
+
export const DEFAULT_CACHE_SIZE_KB = 50 * 1024;
|
|
7
|
+
export function isServerSide() {
|
|
8
|
+
return typeof window == 'undefined';
|
|
9
|
+
}
|
|
10
|
+
export const DEFAULT_WEB_SQL_FLAGS = {
|
|
11
|
+
broadcastLogs: true,
|
|
12
|
+
disableSSRWarning: false,
|
|
13
|
+
ssrMode: isServerSide(),
|
|
14
|
+
/**
|
|
15
|
+
* Multiple tabs are by default not supported on Android, iOS and Safari.
|
|
16
|
+
* Other platforms will have multiple tabs enabled by default.
|
|
17
|
+
*/
|
|
18
|
+
enableMultiTabs: typeof globalThis.navigator !== 'undefined' && // For SSR purposes
|
|
19
|
+
typeof SharedWorker !== 'undefined' &&
|
|
20
|
+
!navigator.userAgent.match(/(Android|iPhone|iPod|iPad)/i) &&
|
|
21
|
+
!window.safari,
|
|
22
|
+
useWebWorker: true
|
|
23
|
+
};
|
|
24
|
+
export function resolveWebSQLFlags(flags) {
|
|
25
|
+
const resolvedFlags = {
|
|
26
|
+
...DEFAULT_WEB_SQL_FLAGS,
|
|
27
|
+
...(flags ?? {})
|
|
28
|
+
};
|
|
29
|
+
if (typeof flags?.enableMultiTabs != 'undefined') {
|
|
30
|
+
resolvedFlags.enableMultiTabs = flags.enableMultiTabs;
|
|
31
|
+
}
|
|
32
|
+
if (flags?.useWebWorker === false) {
|
|
33
|
+
resolvedFlags.enableMultiTabs = false;
|
|
34
|
+
}
|
|
35
|
+
return resolvedFlags;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=web-sql-flags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-sql-flags.js","sourceRoot":"","sources":["../../../../src/db/adapters/web-sql-flags.ts"],"names":[],"mappings":"AAyDA,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,2CAAiB,CAAA;IACjB,6CAAmB,CAAA;AACrB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC;AA8C/C,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,MAAM,IAAI,WAAW,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACxD,aAAa,EAAE,IAAI;IACnB,iBAAiB,EAAE,KAAK;IACxB,OAAO,EAAE,YAAY,EAAE;IACvB;;;OAGG;IACH,eAAe,EACb,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW,IAAI,mBAAmB;QAClE,OAAO,YAAY,KAAK,WAAW;QACnC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,6BAA6B,CAAC;QACzD,CAAE,MAAc,CAAC,MAAM;IACzB,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,MAAM,aAAa,GAAG;QACpB,GAAG,qBAAqB;QACxB,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;KACjB,CAAC;IACF,IAAI,OAAO,KAAK,EAAE,eAAe,IAAI,WAAW,EAAE,CAAC;QACjD,aAAa,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;IACxD,CAAC;IACD,IAAI,KAAK,EAAE,YAAY,KAAK,KAAK,EAAE,CAAC;QAClC,aAAa,CAAC,eAAe,GAAG,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { BaseObserver, SyncStatus } from '@powersync/common';
|
|
2
|
-
import { Mutex, StreamingSyncImplementation, LockOptions } from '@powersync/shared-internals';
|
|
1
|
+
import { AbstractStreamingSyncImplementationOptions, BaseObserver, LockOptions, Mutex, PowerSyncConnectionOptions, StreamingSyncImplementation, SyncStatus, SyncStatusOptions } from '@powersync/common';
|
|
3
2
|
export declare class SSRStreamingSyncImplementation extends BaseObserver implements StreamingSyncImplementation {
|
|
4
3
|
syncMutex: Mutex;
|
|
5
4
|
crudMutex: Mutex;
|
|
6
5
|
isConnected: boolean;
|
|
7
6
|
lastSyncedAt?: Date | undefined;
|
|
8
|
-
|
|
7
|
+
syncStatus: SyncStatus;
|
|
8
|
+
constructor(options: AbstractStreamingSyncImplementationOptions);
|
|
9
9
|
obtainLock<T>(lockOptions: LockOptions<T>): Promise<T>;
|
|
10
10
|
/**
|
|
11
11
|
* This is a no-op in SSR mode
|
|
12
12
|
*/
|
|
13
|
-
connect(): Promise<void>;
|
|
13
|
+
connect(options?: PowerSyncConnectionOptions): Promise<void>;
|
|
14
14
|
dispose(): Promise<void>;
|
|
15
15
|
/**
|
|
16
16
|
* This is a no-op in SSR mode
|
|
@@ -20,6 +20,10 @@ export declare class SSRStreamingSyncImplementation extends BaseObserver impleme
|
|
|
20
20
|
* This SSR Mode implementation is immediately ready.
|
|
21
21
|
*/
|
|
22
22
|
waitForReady(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* This will never resolve in SSR Mode.
|
|
25
|
+
*/
|
|
26
|
+
waitForStatus(status: SyncStatusOptions): Promise<void>;
|
|
23
27
|
/**
|
|
24
28
|
* This will never resolve in SSR Mode.
|
|
25
29
|
*/
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { BaseObserver } from '@powersync/common';
|
|
2
|
-
import { Mutex, LockType } from '@powersync/shared-internals';
|
|
1
|
+
import { BaseObserver, LockType, Mutex, SyncStatus } from '@powersync/common';
|
|
3
2
|
export class SSRStreamingSyncImplementation extends BaseObserver {
|
|
4
3
|
syncMutex;
|
|
5
4
|
crudMutex;
|
|
6
5
|
isConnected;
|
|
7
6
|
lastSyncedAt;
|
|
8
|
-
|
|
7
|
+
syncStatus;
|
|
8
|
+
constructor(options) {
|
|
9
9
|
super();
|
|
10
10
|
this.syncMutex = new Mutex();
|
|
11
11
|
this.crudMutex = new Mutex();
|
|
12
|
+
this.syncStatus = new SyncStatus({});
|
|
12
13
|
this.isConnected = false;
|
|
13
14
|
}
|
|
14
15
|
obtainLock(lockOptions) {
|
|
@@ -18,7 +19,7 @@ export class SSRStreamingSyncImplementation extends BaseObserver {
|
|
|
18
19
|
/**
|
|
19
20
|
* This is a no-op in SSR mode
|
|
20
21
|
*/
|
|
21
|
-
async connect() { }
|
|
22
|
+
async connect(options) { }
|
|
22
23
|
async dispose() { }
|
|
23
24
|
/**
|
|
24
25
|
* This is a no-op in SSR mode
|
|
@@ -28,6 +29,12 @@ export class SSRStreamingSyncImplementation extends BaseObserver {
|
|
|
28
29
|
* This SSR Mode implementation is immediately ready.
|
|
29
30
|
*/
|
|
30
31
|
async waitForReady() { }
|
|
32
|
+
/**
|
|
33
|
+
* This will never resolve in SSR Mode.
|
|
34
|
+
*/
|
|
35
|
+
async waitForStatus(status) {
|
|
36
|
+
return this.waitUntilStatusMatches(() => false);
|
|
37
|
+
}
|
|
31
38
|
/**
|
|
32
39
|
* This will never resolve in SSR Mode.
|
|
33
40
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SSRWebStreamingSyncImplementation.js","sourceRoot":"","sources":["../../../../src/db/sync/SSRWebStreamingSyncImplementation.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAEZ,QAAQ,EACR,KAAK,EAGL,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAE3B,MAAM,OAAO,8BAA+B,SAAQ,YAAY;IAC9D,SAAS,CAAQ;IACjB,SAAS,CAAQ;IAEjB,WAAW,CAAU;IACrB,YAAY,CAAoB;IAChC,UAAU,CAAa;IAEvB,YAAY,OAAmD;QAC7D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,UAAU,CAAI,WAA2B;QACvC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAClF,OAAO,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,OAAoC,IAAkB,CAAC;IAErE,KAAK,CAAC,OAAO,KAAI,CAAC;IAElB;;OAEG;IACH,KAAK,CAAC,UAAU,KAAmB,CAAC;IAEpC;;OAEG;IACH,KAAK,CAAC,YAAY,KAAI,CAAC;IAEvB;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAyB;QAC3C,OAAO,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,UAA2C;QAChE,OAAO,IAAI,OAAO,CAAO,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB;QACtB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,iBAAiB,KAAI,CAAC;IAEtB;;OAEG;IACH,mBAAmB,KAAU,CAAC;IAE9B;;OAEG;IACH,4BAA4B,KAAU,CAAC;CACxC"}
|