import { worker } from "./main"; let requestId = 0; type WorkerRequest = { resolve: (data: any) => void; reject: (error: Error) => void; }; let initPromise: Promise | null = null; const pending = new Map(); export function initWorker(): Promise { if (initPromise) return initPromise; initPromise = new Promise((resolve, reject) => { worker.onmessage = (e: MessageEvent) => { console.log("Handling worker output"); const msg = e.data; if (msg.type === 'ready') { // Готов — запрос init уже обработан return; } const pendingReq = pending.get(msg.id); if (!pendingReq) return; pending.delete(msg.id); if (msg.type == "success") { pendingReq.resolve(msg.data); } else { console.log(msg) pendingReq.reject(new Error(msg.error || 'Неизвестная ошибка Worker')); } }; worker.onerror = (err) => { console.error('[SQLite Worker] Ошибка:', err); reject(new Error('Ошибка Worker')); }; // Отправляем init const id = ++requestId; pending.set(id, { resolve, reject }); worker.postMessage({ type: 'start', id }); }); return initPromise; } function sendToWorker(type: string, payload?: any): Promise { return new Promise((resolve, reject) => { if (!worker) { reject(new Error('Worker не создан')); return; } const id = ++requestId; pending.set(id, { resolve, reject }); worker.postMessage({ type, id, ...payload }); }); } export async function query(sql: string, params?: any[]): Promise { const result = await sendToWorker('query', { sql, params }); return result; } export async function command(sql: string, params?: any[]): Promise { await sendToWorker('command', { sql, params }); } export async function closeDb(): Promise { await sendToWorker('close'); worker.terminate(); }