Add web worker initialization

This commit is contained in:
omaroughriss 2025-11-27 16:44:41 +01:00
parent f74fcabec7
commit 414f8e5dca

View File

@ -25,35 +25,35 @@ export class Database {
return Database.instance; return Database.instance;
} }
// Initialize the database // ============================================
private async init(): Promise<void> { // INDEXEDDB WEB WORKER
return new Promise((resolve, reject) => { // ============================================
const request = indexedDB.open(this.dbName, this.dbVersion);
request.onupgradeneeded = () => { private initIndexedDBWorker(): void {
const db = request.result; 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 }) => { this.indexedDBWorker.onerror = (error) => {
if (!db.objectStoreNames.contains(name)) { console.error('[Database] IndexedDB Worker error:', error);
let store = db.createObjectStore(name, options as IDBObjectStoreParameters); };
}
indices.forEach(({ name, keyPath, options }) => { private async waitForWorkerReady(): Promise<void> {
store.createIndex(name, keyPath, options); return this.sendMessageToWorker('INIT', {});
});
}
});
};
request.onsuccess = async () => {
this.db = request.result;
resolve();
};
request.onerror = () => {
console.error('Database error:', request.error);
reject(request.error);
};
});
} }
public async getDb(): Promise<IDBDatabase> { public async getDb(): Promise<IDBDatabase> {