From 33418d9dea5fb7b9f3d953cdd31e243d854cb039 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 9 Oct 2025 20:24:20 +0200 Subject: [PATCH] Unify completion callback pattern across browser-javascript and javascript-repl - Remove fallback timeout from ConsoleRuntimeProvider (was causing 2s delays) - Add completion callback support to SandboxedIframe REPL wrapper - Call completion callbacks before window.complete() in both success/error paths - Both browser-javascript and javascript-repl now use identical completion pattern - Ensures console logs are batched and sent before execution completes --- .../web-ui/src/components/SandboxedIframe.ts | 20 +++++++++++++++++++ .../sandbox/ConsoleRuntimeProvider.ts | 9 --------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/web-ui/src/components/SandboxedIframe.ts b/packages/web-ui/src/components/SandboxedIframe.ts index 8d9655df..47155016 100644 --- a/packages/web-ui/src/components/SandboxedIframe.ts +++ b/packages/web-ui/src/components/SandboxedIframe.ts @@ -329,9 +329,29 @@ export class SandboxIframe extends LitElement { (async () => { try { ${userCode} + + // Call completion callbacks before complete() + if (window.__completionCallbacks && window.__completionCallbacks.length > 0) { + try { + await Promise.all(window.__completionCallbacks.map(cb => cb(true))); + } catch (e) { + console.error('Completion callback error:', e); + } + } + window.complete(); } catch (error) { console.error(error?.stack || error?.message || String(error)); + + // Call completion callbacks before complete() (error path) + if (window.__completionCallbacks && window.__completionCallbacks.length > 0) { + try { + await Promise.all(window.__completionCallbacks.map(cb => cb(false))); + } catch (e) { + console.error('Completion callback error:', e); + } + } + window.complete({ message: error?.message || String(error), stack: error?.stack || new Error().stack diff --git a/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts b/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts index 642aa15a..00ebeac2 100644 --- a/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts +++ b/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts @@ -143,15 +143,6 @@ export class ConsoleRuntimeProvider implements SandboxRuntimeProvider { } } }; - - // Fallback timeout for HTML artifacts that don't call complete() - if (document.readyState === "complete" || document.readyState === "interactive") { - setTimeout(() => (window as any).complete(), 2000); - } else { - window.addEventListener("load", () => { - setTimeout(() => (window as any).complete(), 2000); - }); - } }; }