@powersync/web 1.39.0 → 1.39.1
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 +85 -32
- package/dist/index.umd.js.map +1 -1
- package/dist/worker/SharedSyncImplementation.umd.js +15 -9
- package/dist/worker/SharedSyncImplementation.umd.js.map +1 -1
- package/dist/worker/WASQLiteDB.umd.js +24 -9
- package/dist/worker/WASQLiteDB.umd.js.map +1 -1
- package/lib/package.json +2 -2
- package/lib/src/db/adapters/AsyncWebAdapter.js +1 -1
- package/lib/src/db/adapters/AsyncWebAdapter.js.map +1 -1
- package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.d.ts +8 -0
- package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js +9 -0
- package/lib/src/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -1
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +8 -2
- package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -1
- package/lib/src/db/sync/SharedWebStreamingSyncImplementation.d.ts +1 -0
- package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js +10 -5
- package/lib/src/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -1
- package/lib/src/worker/db/open-worker-database.d.ts +3 -2
- package/lib/src/worker/db/open-worker-database.js +30 -22
- package/lib/src/worker/db/open-worker-database.js.map +1 -1
- package/lib/src/worker/errors.d.ts +2 -0
- package/lib/src/worker/errors.js +7 -0
- package/lib/src/worker/errors.js.map +1 -0
- package/lib/src/worker/sync/SharedSyncImplementation.d.ts +1 -0
- package/lib/src/worker/sync/SharedSyncImplementation.js +2 -1
- package/lib/src/worker/sync/SharedSyncImplementation.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/db/adapters/AsyncWebAdapter.ts +1 -1
- package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +10 -0
- package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +24 -9
- package/src/db/sync/SharedWebStreamingSyncImplementation.ts +17 -11
- package/src/worker/db/open-worker-database.ts +34 -22
- package/src/worker/errors.ts +9 -0
- package/src/worker/sync/SharedSyncImplementation.ts +3 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as Comlink from 'comlink';
|
|
2
2
|
import { vfsRequiresDedicatedWorkers, WASQLiteVFS } from '../../db/adapters/wa-sqlite/vfs.js';
|
|
3
3
|
import { OpenWorkerConnection } from '../../db/adapters/wa-sqlite/DatabaseClient.js';
|
|
4
|
+
import type { ILogger } from '@powersync/common';
|
|
5
|
+
import { logWorkerErrors } from '../errors.js';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Opens a shared or dedicated worker which exposes opening of database connections
|
|
@@ -9,20 +11,23 @@ export function openWorkerDatabasePort(
|
|
|
9
11
|
workerIdentifier: string,
|
|
10
12
|
multipleTabs = true,
|
|
11
13
|
worker: string | URL = '',
|
|
12
|
-
vfs?: WASQLiteVFS
|
|
14
|
+
vfs?: WASQLiteVFS,
|
|
15
|
+
logger?: ILogger
|
|
13
16
|
) {
|
|
14
17
|
const needsDedicated = vfs && vfsRequiresDedicatedWorkers(vfs);
|
|
18
|
+
let resolvedWorker: Worker | SharedWorker;
|
|
15
19
|
|
|
16
20
|
if (worker) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
resolvedWorker =
|
|
22
|
+
!needsDedicated && multipleTabs
|
|
23
|
+
? new SharedWorker(`${worker}`, {
|
|
24
|
+
/* @vite-ignore */
|
|
25
|
+
name: `shared-DB-worker-${workerIdentifier}`
|
|
26
|
+
})
|
|
27
|
+
: new Worker(`${worker}`, {
|
|
28
|
+
/* @vite-ignore */
|
|
29
|
+
name: `DB-worker-${workerIdentifier}`
|
|
30
|
+
});
|
|
26
31
|
} else {
|
|
27
32
|
/**
|
|
28
33
|
* Webpack V5 can bundle the worker automatically if the full Worker constructor syntax is used
|
|
@@ -30,18 +35,21 @@ export function openWorkerDatabasePort(
|
|
|
30
35
|
* This enables multi tab support by default, but falls back if SharedWorker is not available
|
|
31
36
|
* (in the case of Android)
|
|
32
37
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
resolvedWorker =
|
|
39
|
+
!needsDedicated && multipleTabs
|
|
40
|
+
? new SharedWorker(new URL('./WASQLiteDB.worker.js', import.meta.url), {
|
|
41
|
+
/* @vite-ignore */
|
|
42
|
+
name: `shared-DB-worker-${workerIdentifier}`,
|
|
43
|
+
type: 'module'
|
|
44
|
+
})
|
|
45
|
+
: new Worker(new URL('./WASQLiteDB.worker.js', import.meta.url), {
|
|
46
|
+
/* @vite-ignore */
|
|
47
|
+
name: `DB-worker-${workerIdentifier}`,
|
|
48
|
+
type: 'module'
|
|
49
|
+
});
|
|
44
50
|
}
|
|
51
|
+
|
|
52
|
+
return resolveWorkerDatabasePortFactory(() => resolvedWorker, logger);
|
|
45
53
|
}
|
|
46
54
|
|
|
47
55
|
/**
|
|
@@ -52,8 +60,12 @@ export function getWorkerDatabaseOpener(workerIdentifier: string, multipleTabs =
|
|
|
52
60
|
return Comlink.wrap<OpenWorkerConnection>(openWorkerDatabasePort(workerIdentifier, multipleTabs, worker));
|
|
53
61
|
}
|
|
54
62
|
|
|
55
|
-
export function resolveWorkerDatabasePortFactory(worker: () => Worker | SharedWorker) {
|
|
63
|
+
export function resolveWorkerDatabasePortFactory(worker: () => Worker | SharedWorker, logger?: ILogger) {
|
|
56
64
|
const workerInstance = worker();
|
|
65
|
+
if (logger) {
|
|
66
|
+
logWorkerErrors(workerInstance, logger);
|
|
67
|
+
}
|
|
68
|
+
|
|
57
69
|
return isSharedWorker(workerInstance) ? workerInstance.port : workerInstance;
|
|
58
70
|
}
|
|
59
71
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ILogger } from '@powersync/common';
|
|
2
|
+
|
|
3
|
+
export function logWorkerErrors(worker: AbstractWorker, logger: ILogger) {
|
|
4
|
+
function logError(event: ErrorEvent) {
|
|
5
|
+
logger.error('Error in database or sync worker, this likely disrupts PowerSync.', event.error);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
worker.addEventListener('error', logError);
|
|
9
|
+
}
|
|
@@ -122,6 +122,8 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
122
122
|
broadCastLogger: ILogger;
|
|
123
123
|
protected readonly database = this.generateReconnectableDatabase();
|
|
124
124
|
|
|
125
|
+
private sharedCloseSignal = generateTabCloseSignal();
|
|
126
|
+
|
|
125
127
|
constructor() {
|
|
126
128
|
super();
|
|
127
129
|
this.ports = [];
|
|
@@ -508,7 +510,7 @@ export class SharedSyncImplementation extends BaseObserver<SharedSyncImplementat
|
|
|
508
510
|
const remote = Comlink.wrap<OpenWorkerConnection>(workerPort);
|
|
509
511
|
const identifier = this.syncParams!.dbParams.dbFilename;
|
|
510
512
|
|
|
511
|
-
const clientLockName = await
|
|
513
|
+
const clientLockName = await this.sharedCloseSignal;
|
|
512
514
|
|
|
513
515
|
/**
|
|
514
516
|
* The open could fail if the tab is closed while we're busy opening the database.
|