diff --git a/src/store/indexeddb-remote-backend.ts b/src/store/indexeddb-remote-backend.ts index d3b5731ee..6ff115255 100644 --- a/src/store/indexeddb-remote-backend.ts +++ b/src/store/indexeddb-remote-backend.ts @@ -37,15 +37,13 @@ export class RemoteIndexedDBStoreBackend implements IIndexeddbBackend { * Construct a new Indexed Database store backend. This requires a call to * connect() before this store can be used. * @constructor - * @param {string} workerScript URL to the worker script + * @param {Function} workerFactory Factory which produces a Worker * @param {string=} dbName Optional database name. The same name must be used * to open the same database. - * @param {Object} WorkerApi The web worker compatible interface object */ constructor( - private readonly workerScript: string, + private readonly workerFactory: () => Worker, private readonly dbName: string, - private readonly WorkerApi: typeof Worker, ) {} /** @@ -137,7 +135,7 @@ export class RemoteIndexedDBStoreBackend implements IIndexeddbBackend { private ensureStarted(): Promise { if (this.startPromise === null) { - this.worker = new this.WorkerApi(this.workerScript); + this.worker = this.workerFactory(); this.worker.onmessage = this.onWorkerMessage; // tell the worker the db name. diff --git a/src/store/indexeddb.ts b/src/store/indexeddb.ts index b65c4eb1e..d256769e9 100644 --- a/src/store/indexeddb.ts +++ b/src/store/indexeddb.ts @@ -43,8 +43,7 @@ const WRITE_DELAY_MS = 1000 * 60 * 5; // once every 5 minutes interface IOpts extends IBaseOpts { indexedDB: IDBFactory; dbName?: string; - workerScript?: string; - workerApi?: typeof Worker; + workerFactory?: () => Worker; } export class IndexedDBStore extends MemoryStore { @@ -111,16 +110,8 @@ export class IndexedDBStore extends MemoryStore { throw new Error('Missing required option: indexedDB'); } - if (opts.workerScript) { - // try & find a webworker-compatible API - let workerApi = opts.workerApi; - if (!workerApi) { - // default to the global Worker object (which is where it in a browser) - workerApi = global.Worker; - } - this.backend = new RemoteIndexedDBStoreBackend( - opts.workerScript, opts.dbName, workerApi, - ); + if (opts.workerFactory) { + this.backend = new RemoteIndexedDBStoreBackend(opts.workerFactory, opts.dbName); } else { this.backend = new LocalIndexedDBStoreBackend(opts.indexedDB, opts.dbName); }