From 414f8e5dca4c55a6e8a99fc663f5ac3940162d70 Mon Sep 17 00:00:00 2001 From: omaroughriss Date: Thu, 27 Nov 2025 16:44:41 +0100 Subject: [PATCH] Add web worker initialization --- src/services/database.service.ts | 52 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/services/database.service.ts b/src/services/database.service.ts index 3344fde..84a8a61 100755 --- a/src/services/database.service.ts +++ b/src/services/database.service.ts @@ -25,35 +25,35 @@ export class Database { return Database.instance; } - // Initialize the database - private async init(): Promise { - return new Promise((resolve, reject) => { - const request = indexedDB.open(this.dbName, this.dbVersion); + // ============================================ + // INDEXEDDB WEB WORKER + // ============================================ - request.onupgradeneeded = () => { - const db = request.result; + private initIndexedDBWorker(): void { + this.indexedDBWorker = new Worker(new URL('../workers/indexeddb.worker.js', import.meta.url), { type: 'module' }); + + this.indexedDBWorker.onmessage = (event) => { + const { id, type, result, error } = event.data; + const pending = this.pendingMessages.get(id); + + if (pending) { + this.pendingMessages.delete(id); + + if (type === 'SUCCESS') { + pending.resolve(result); + } else if (type === 'ERROR') { + pending.reject(new Error(error)); + } + } + }; - Object.values(this.storeDefinitions).forEach(({ name, options, indices }) => { - if (!db.objectStoreNames.contains(name)) { - let store = db.createObjectStore(name, options as IDBObjectStoreParameters); + this.indexedDBWorker.onerror = (error) => { + console.error('[Database] IndexedDB Worker error:', error); + }; + } - indices.forEach(({ name, keyPath, options }) => { - store.createIndex(name, keyPath, options); - }); - } - }); - }; - - request.onsuccess = async () => { - this.db = request.result; - resolve(); - }; - - request.onerror = () => { - console.error('Database error:', request.error); - reject(request.error); - }; - }); + private async waitForWorkerReady(): Promise { + return this.sendMessageToWorker('INIT', {}); } public async getDb(): Promise {