| 115 | * @returns A promise that resolves with the task result |
| 116 | */ |
| 117 | export function run<T>(taskName: string, data: unknown): Promise<T> { |
| 118 | // If worker already died (e.g., failed to load), reject immediately |
| 119 | // This prevents hanging promises when the worker is not available |
| 120 | if (workerError) { |
| 121 | return Promise.reject(workerError); |
| 122 | } |
| 123 | |
| 124 | const messageId = messageIdCounter++; |
| 125 | const request: WorkerRequest = { messageId, taskName, data }; |
| 126 | |
| 127 | return new Promise<T>((resolve, reject) => { |
| 128 | pendingPromises.set(messageId, { |
| 129 | resolve: resolve as (value: unknown) => void, |
| 130 | reject, |
| 131 | }); |
| 132 | worker.postMessage(request); |
| 133 | }); |
| 134 | } |