Add web worker message handler

This commit is contained in:
omaroughriss 2025-11-27 16:47:33 +01:00
parent 245341e3f5
commit 54dcd2b29d

View File

@ -56,19 +56,34 @@ export class Database {
return this.sendMessageToWorker('INIT', {}); return this.sendMessageToWorker('INIT', {});
} }
public async getDb(): Promise<IDBDatabase> { private sendMessageToWorker<T = any>(type: string, payload: any): Promise<T> {
if (!this.db) { return new Promise((resolve, reject) => {
await this.init(); if (!this.indexedDBWorker) {
} reject(new Error('IndexedDB Worker not initialized'));
return this.db!; return;
} }
public getStoreList(): { [key: string]: string } { const id = this.messageIdCounter++;
const objectList: { [key: string]: string } = {}; this.pendingMessages.set(id, { resolve, reject });
Object.keys(this.storeDefinitions).forEach((key) => {
objectList[key] = this.storeDefinitions[key as keyof typeof this.storeDefinitions].name; 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);
}); });
return objectList; }
// ============================================
// SERVICE WORKER
// ============================================
private initServiceWorker(): void {
this.registerServiceWorker('/database.worker.js');
} }
private async registerServiceWorker(path: string): Promise<void> { private async registerServiceWorker(path: string): Promise<void> {