From 5fc38576660354e1c81eff37b64a2f99ac31a0d3 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 9 Oct 2025 20:47:26 +0200 Subject: [PATCH] Pass return value through execution-complete message instead of logging - Return value now passed to window.complete(error, returnValue) - execution-complete message includes returnValue field - SandboxResult interface updated to include returnValue - executionConsumer passes returnValue in resolved promise - Return values properly captured and available to callers --- packages/web-ui/src/components/SandboxedIframe.ts | 10 +++------- .../src/components/sandbox/ConsoleRuntimeProvider.ts | 3 ++- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/web-ui/src/components/SandboxedIframe.ts b/packages/web-ui/src/components/SandboxedIframe.ts index c4c774cb..623ede0a 100644 --- a/packages/web-ui/src/components/SandboxedIframe.ts +++ b/packages/web-ui/src/components/SandboxedIframe.ts @@ -16,6 +16,7 @@ export interface SandboxResult { console: Array<{ type: string; text: string }>; files?: SandboxFile[]; error?: { message: string; stack: string }; + returnValue?: any; } /** @@ -189,7 +190,7 @@ export class SandboxIframe extends LitElement { } else if (message.type === "execution-complete") { completed = true; cleanup(); - resolve({ success: true, console: logs, files }); + resolve({ success: true, console: logs, files, returnValue: message.returnValue }); return true; } else if (message.type === "execution-error") { completed = true; @@ -335,11 +336,6 @@ export class SandboxIframe extends LitElement { const returnValue = await userCodeFunc(); - // Log return value if present - if (returnValue !== undefined) { - console.log('Return value:', returnValue); - } - // Call completion callbacks before complete() if (window.__completionCallbacks && window.__completionCallbacks.length > 0) { try { @@ -349,7 +345,7 @@ export class SandboxIframe extends LitElement { } } - await window.complete(); + await window.complete(null, returnValue); } catch (error) { console.error(error?.stack || error?.message || String(error)); diff --git a/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts b/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts index 283ff964..92bf55af 100644 --- a/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts +++ b/packages/web-ui/src/components/sandbox/ConsoleRuntimeProvider.ts @@ -120,7 +120,7 @@ export class ConsoleRuntimeProvider implements SandboxRuntimeProvider { // Expose complete() method for user code to call let completionSent = false; - (window as any).complete = async (error?: { message: string; stack: string }) => { + (window as any).complete = async (error?: { message: string; stack: string }, returnValue?: any) => { if (completionSent) return; completionSent = true; @@ -138,6 +138,7 @@ export class ConsoleRuntimeProvider implements SandboxRuntimeProvider { console.log("Reporting execution complete"); await (window as any).sendRuntimeMessage({ type: "execution-complete", + returnValue, }); console.log("Execution completed"); }