import type { ThreadWorkerLike } from "../../src/communicator/worker-thread/worker-thread-communicator.js"; interface Listener { event: string; handler: (event: { data?: unknown; error?: unknown }) => void; } export interface FakeThreadWorker extends ThreadWorkerLike { deliver(message: unknown): void; emitError(error: unknown): void; emitExit(): void; posted: unknown[]; terminated: boolean; } export function makeFakeThreadWorker(): FakeThreadWorker { const listeners: Listener[] = []; const worker: FakeThreadWorker = { posted: [], terminated: false, postMessage(message: unknown): void { worker.posted.push(message); }, addEventListener(event, handler): void { listeners.push({ event, handler }); }, terminate(): void { worker.terminated = true; }, deliver(message: unknown): void { for (const l of listeners) { if (l.event === "message") { l.handler({ data: message }); } } }, emitError(error: unknown): void { for (const l of listeners) { if (l.event === "error") { l.handler({ error }); } } }, emitExit(): void { for (const l of listeners) { if (l.event === "exit") { l.handler({}); } } }, }; return worker; }