diff --git a/src/services/database.service.ts b/src/services/database.service.ts index ff5e7c5..2d2d887 100755 --- a/src/services/database.service.ts +++ b/src/services/database.service.ts @@ -56,19 +56,34 @@ export class Database { return this.sendMessageToWorker('INIT', {}); } - public async getDb(): Promise { - if (!this.db) { - await this.init(); - } - return this.db!; + private sendMessageToWorker(type: string, payload: any): Promise { + return new Promise((resolve, reject) => { + if (!this.indexedDBWorker) { + reject(new Error('IndexedDB Worker not initialized')); + return; + } + + const id = this.messageIdCounter++; + this.pendingMessages.set(id, { resolve, reject }); + + this.indexedDBWorker.postMessage({ type, payload, id }); + + // Timeout de sécurité (30 secondes) + setTimeout(() => { + if (this.pendingMessages.has(id)) { + this.pendingMessages.delete(id); + reject(new Error(`Worker message timeout for type: ${type}`)); + } + }, 30000); + }); } - public getStoreList(): { [key: string]: string } { - const objectList: { [key: string]: string } = {}; - Object.keys(this.storeDefinitions).forEach((key) => { - objectList[key] = this.storeDefinitions[key as keyof typeof this.storeDefinitions].name; - }); - return objectList; + // ============================================ + // SERVICE WORKER + // ============================================ + + private initServiceWorker(): void { + this.registerServiceWorker('/database.worker.js'); } private async registerServiceWorker(path: string): Promise {