@@ -13,44 +13,50 @@ export function openWorkerDatabasePort(
13
13
) {
14
14
const needsDedicated = vfs == WASQLiteVFS . AccessHandlePoolVFS || vfs == WASQLiteVFS . OPFSCoopSyncVFS ;
15
15
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
+ } ;
39
20
40
- return dedicatedWorker ;
41
- }
21
+ return worker ;
42
22
} ;
43
23
44
24
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
+ ) ;
46
38
} else {
47
39
/**
48
40
* Webpack V5 can bundle the worker automatically if the full Worker constructor syntax is used
49
41
* https://webpack.js.org/guides/web-workers/
50
42
* This enables multi tab support by default, but falls back if SharedWorker is not available
51
43
* (in the case of Android)
52
44
*/
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
+ ) ;
54
60
}
55
61
}
56
62
0 commit comments