@@ -89,6 +89,12 @@ export interface IDBCacheConfig {
8989 * Low priority slightly delays start of operations to reduce load on the event loop.
9090 */
9191 priority ?: "normal" | "low" ;
92+ /**
93+ * Controls whether to use SharedWorker or Worker for encryption/decryption.
94+ * When true (default), uses SharedWorker if available, falling back to Worker.
95+ * When false, always uses Worker even if SharedWorker is available.
96+ */
97+ useSharedWorker ?: boolean ;
9298}
9399
94100const DB_VERSION = 2 ;
@@ -121,6 +127,7 @@ export class IDBCache implements IDBCacheInterface {
121127 private debug : boolean ;
122128 private maxTotalChunks ?: number ;
123129 private priority : "normal" | "low" = "normal" ;
130+ private useSharedWorker : boolean ;
124131
125132 constructor ( config : IDBCacheConfig ) {
126133 const {
@@ -134,6 +141,7 @@ export class IDBCache implements IDBCacheInterface {
134141 pbkdf2Iterations = DEFAULT_PBKDF2_ITERATIONS ,
135142 maxTotalChunks,
136143 priority = "normal" ,
144+ useSharedWorker = true ,
137145 } = config ;
138146
139147 this . storeName = "cache" ;
@@ -147,6 +155,7 @@ export class IDBCache implements IDBCacheInterface {
147155 this . maxTotalChunks = maxTotalChunks ;
148156 this . pendingRequests = new Map ( ) ;
149157 this . priority = priority ;
158+ this . useSharedWorker = useSharedWorker ;
150159
151160 if ( ! window . indexedDB )
152161 throw new DatabaseError ( "IndexedDB is not supported." ) ;
@@ -194,7 +203,6 @@ export class IDBCache implements IDBCacheInterface {
194203 if ( this . workerReadyPromise ) {
195204 return this . workerReadyPromise ;
196205 }
197-
198206 this . workerReadyPromise = new Promise < void > ( ( resolve , reject ) => {
199207 const rejectAll = ( errorMessage : string ) => {
200208 reject ( new WorkerInitializationError ( errorMessage ) ) ;
@@ -203,8 +211,10 @@ export class IDBCache implements IDBCacheInterface {
203211
204212 const { worker, port } = createWorkerFromFunction (
205213 encryptionWorkerFunction ,
206- rejectAll
214+ rejectAll ,
215+ this . useSharedWorker
207216 ) ;
217+
208218 this . worker = worker ;
209219 this . port = port ;
210220
@@ -259,7 +269,7 @@ export class IDBCache implements IDBCacheInterface {
259269 `Deleting expired item with timestamp ${ timestamp } . It is ${ age } ms older than the expiration.`
260270 ) ;
261271 }
262- cursor . delete ( ) ;
272+ await cursor . delete ( ) ;
263273 } else {
264274 break ;
265275 }
@@ -282,7 +292,7 @@ export class IDBCache implements IDBCacheInterface {
282292 rangeCursor . value . cacheBuster
283293 ) ;
284294 }
285- rangeCursor . delete ( ) ;
295+ await rangeCursor . delete ( ) ;
286296 itemsDeleted ++ ;
287297 rangeCursor = await rangeCursor . continue ( ) ;
288298 }
@@ -352,7 +362,7 @@ export class IDBCache implements IDBCacheInterface {
352362
353363 // Delete all collected chunkKeys
354364 for ( const chunkKey of chunkKeysToDelete ) {
355- store . delete ( chunkKey ) ;
365+ await store . delete ( chunkKey ) ;
356366 if ( this . debug ) {
357367 console . debug ( `Deleted chunk ${ chunkKey } .` ) ;
358368 }
0 commit comments