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', {});
}
public async getDb(): Promise<IDBDatabase> {
if (!this.db) {
await this.init();
}
return this.db!;
private sendMessageToWorker<T = any>(type: string, payload: any): Promise<T> {
return new Promise((resolve, reject) => {
if (!this.indexedDBWorker) {
reject(new Error('IndexedDB Worker not initialized'));
return;
}
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;
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);
});
return objectList;
}
// ============================================
// SERVICE WORKER
// ============================================
private initServiceWorker(): void {
this.registerServiceWorker('/database.worker.js');
}
private async registerServiceWorker(path: string): Promise<void> {