import fs from "node:fs"; import path from "node:path"; import { test } from "@playwright/test"; const root = path.resolve(import.meta.dirname, "../../.."); test("capture open result error report", async ({ page }) => { test.setTimeout(180_000); await page.goto("/"); await page.waitForTimeout(10000); for (const worker of page.workers()) { await worker.evaluate(() => { const scope = self as unknown as { __openResults: unknown[] }; if (scope.__openResults) return; scope.__openResults = []; const original = self.addEventListener.bind(self); self.addEventListener = ((type: string, listener: EventListenerOrEventListenerObject, options?: unknown) => { if (type !== "message") return original(type, listener, options as AddEventListenerOptions); return original(type, ((event: Event) => { const data = (event as MessageEvent).data; if (data && (data.kind === "result" || data.type === "result")) { scope.__openResults.push({ ok: data.ok, error: data.error ? { code: data.error.code, message: String(data.error.message).slice(0, 600) } : null, status: data.result?.status }); if (scope.__openResults.length > 40) scope.__openResults.shift(); } return typeof listener === "function" ? listener(event) : listener.handleEvent(event); }) as EventListener, options); }) as typeof self.addEventListener; }); } await page.getByTestId("blend-file-input").setInputFiles(path.join(root, "blender-5.2.0/tests/files/sequence_editing/sequence.blend")); await page.waitForTimeout(35000); const results: unknown[] = []; for (const worker of page.workers()) { const collected = await worker.evaluate(() => (self as unknown as { __openResults?: unknown[] }).__openResults ?? []); results.push(collected); } fs.writeFileSync("/tmp/seq-open-result.json", JSON.stringify(results, null, 2)); });