Files
Epicnabbo-Catalogus-Updated…/src/lib/services/swf/conversion-worker.ts
T
2026-08-25 22:26:05 +02:00

56 lines
1.2 KiB
TypeScript

import { parentPort } from "node:worker_threads";
import { convertSwfToNitro, extractIconFromSwf } from "./index";
export interface ConvertRequest {
id: number;
type: "convert";
buffer: Buffer;
classname: string;
}
export interface IconRequest {
id: number;
type: "icon";
buffer: Buffer;
classname: string;
}
export type WorkerRequest = ConvertRequest | IconRequest;
export type WorkerResponse =
| {
id: number;
ok: true;
result?: import("./index").ConversionResult;
icon?: Buffer | null;
}
| { id: number; ok: false; error: string };
if (parentPort) {
parentPort.on("message", (msg: WorkerRequest) => {
try {
if (msg.type === "convert") {
const result = convertSwfToNitro(msg.buffer, msg.classname);
parentPort?.postMessage({
id: msg.id,
ok: true,
result,
} satisfies WorkerResponse);
} else {
const icon = extractIconFromSwf(msg.buffer, msg.classname);
parentPort?.postMessage({
id: msg.id,
ok: true,
icon: icon ?? null,
} satisfies WorkerResponse);
}
} catch (err) {
parentPort?.postMessage({
id: msg.id,
ok: false,
error: (err as Error).message,
} satisfies WorkerResponse);
}
});
}