Skip to content

Commit 1ebd49d

Browse files
committed
Fix opening workers
1 parent 7c196a3 commit 1ebd49d

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

packages/web/src/worker/db/open-worker-database.ts

+33-27
Original file line numberDiff line numberDiff line change
@@ -13,44 +13,50 @@ export function openWorkerDatabasePort(
1313
) {
1414
const needsDedicated = vfs == WASQLiteVFS.AccessHandlePoolVFS || vfs == WASQLiteVFS.OPFSCoopSyncVFS;
1515

16-
const handleError = (event: ErrorEvent) => {
17-
// We don't expect worker errors, so turn errors on workers into unhandled errors in this context
18-
// to fail tests.
19-
throw `Unexpected worker error: ${event.error}`;
20-
}
21-
22-
const openWorker = (resolvedUri: string | URL, options: WorkerOptions = {}) => {
23-
const useShared = !needsDedicated && multipleTabs;
24-
if (useShared) {
25-
const sharedWorker = new SharedWorker(`${worker}`, {
26-
...options,
27-
/* @vite-ignore */
28-
name: `shared-DB-worker-${workerIdentifier}`
29-
});
30-
sharedWorker.onerror = handleError;
31-
return sharedWorker.port;
32-
} else {
33-
const dedicatedWorker = new Worker(`${worker}`, {
34-
...options,
35-
/* @vite-ignore */
36-
name: `DB-worker-${workerIdentifier}`
37-
});
38-
dedicatedWorker.onerror = handleError;
16+
const handleErrors = <T extends AbstractWorker>(worker: T) => {
17+
worker.onerror = (event) => {
18+
throw `Unhandled worker error: ${event.message}: ${event.error}`;
19+
};
3920

40-
return dedicatedWorker;
41-
}
21+
return worker;
4222
};
4323

4424
if (worker) {
45-
return openWorker(worker);
25+
return !needsDedicated && multipleTabs
26+
? handleErrors(
27+
new SharedWorker(`${worker}`, {
28+
/* @vite-ignore */
29+
name: `shared-DB-worker-${workerIdentifier}`
30+
})
31+
).port
32+
: handleErrors(
33+
new Worker(`${worker}`, {
34+
/* @vite-ignore */
35+
name: `DB-worker-${workerIdentifier}`
36+
})
37+
);
4638
} else {
4739
/**
4840
* Webpack V5 can bundle the worker automatically if the full Worker constructor syntax is used
4941
* https://webpack.js.org/guides/web-workers/
5042
* This enables multi tab support by default, but falls back if SharedWorker is not available
5143
* (in the case of Android)
5244
*/
53-
return openWorker(new URL('./WASQLiteDB.worker.js', import.meta.url), { type: 'module' });
45+
return !needsDedicated && multipleTabs
46+
? handleErrors(
47+
new SharedWorker(new URL('./WASQLiteDB.worker.js', import.meta.url), {
48+
/* @vite-ignore */
49+
name: `shared-DB-worker-${workerIdentifier}`,
50+
type: 'module'
51+
})
52+
).port
53+
: handleErrors(
54+
new Worker(new URL('./WASQLiteDB.worker.js', import.meta.url), {
55+
/* @vite-ignore */
56+
name: `DB-worker-${workerIdentifier}`,
57+
type: 'module'
58+
})
59+
);
5460
}
5561
}
5662

0 commit comments

Comments
 (0)