From adb578540f95ccafd3d0e8c419760da1cb031dcb Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Sat, 12 Sep 2026 14:57:45 +0500 Subject: [PATCH] feat: add executor support for multifiles result --- web/src/lib/executor/executor.ts | 17 +++++++++++++++++ web/src/lib/executor/executor.worker.ts | 21 +++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/web/src/lib/executor/executor.ts b/web/src/lib/executor/executor.ts index b9e71b5..52807e5 100644 --- a/web/src/lib/executor/executor.ts +++ b/web/src/lib/executor/executor.ts @@ -88,6 +88,12 @@ function ensureWorker(): Worker | null { width?: number; height?: number; data?: Uint8ClampedArray; + files?: { + name: string; + width: number; + height: number; + data: Uint8ClampedArray; + }[]; text?: string; error?: string; errorKey?: string; @@ -102,6 +108,17 @@ function ensureWorker(): Worker | null { height: payload.height, data: new Uint8ClampedArray(payload.data), }); + } else if (payload.ok && Array.isArray(payload.files)) { + entry.resolve({ + files: payload.files.map((file) => ({ + name: file.name, + image: { + width: file.width, + height: file.height, + data: new Uint8ClampedArray(file.data), + }, + })), + }); } else if (payload.ok && typeof payload.text === "string") { entry.resolve(payload.text); } else if (payload.errorKey) { diff --git a/web/src/lib/executor/executor.worker.ts b/web/src/lib/executor/executor.worker.ts index 737b97a..cfe1b2c 100644 --- a/web/src/lib/executor/executor.worker.ts +++ b/web/src/lib/executor/executor.worker.ts @@ -20,6 +20,7 @@ type WorkerResponse = height?: number; data?: Uint8ClampedArray; text?: string; + files?: WorkerImageFile[]; } | { id: number; @@ -29,6 +30,13 @@ type WorkerResponse = errorVars?: Record; }; +type WorkerImageFile = { + name: string; + width: number; + height: number; + data: Uint8ClampedArray; +}; + self.onmessage = (event: MessageEvent) => { void handle(event.data); }; @@ -59,6 +67,19 @@ async function handle(request: WorkerRequest): Promise { } satisfies WorkerResponse); return; } + if ("files" in output) { + const files = output.files.map((file) => ({ + name: file.name, + width: file.image.width, + height: file.image.height, + data: file.image.data, + })); + (self as unknown as Worker).postMessage( + { id: request.id, ok: true, files } satisfies WorkerResponse, + files.map((file) => file.data.buffer), + ); + return; + } (self as unknown as Worker).postMessage( { id: request.id,