From 6646d0f31eb3bc41c286ac504ad98f5fe6fa27b4 Mon Sep 17 00:00:00 2001 From: mws19901118 Date: Fri, 13 Mar 2026 21:29:29 -0700 Subject: [PATCH 1/5] feat: add debug logging for forwarded events Adds a new `logForwardedEvents` config flag (debug mode required) that logs all forwarded event activity on both the main thread and web worker: - Main: "Forward event: fn()" for live calls - Main: "Forward queued event: fn()" for calls replayed from queue - Worker: "Forwarded event received: fn()" - Worker: "Forwarded event execute: fn(args...)" Co-Authored-By: Claude Sonnet 4.6 --- src/lib/sandbox/main-forward-trigger.ts | 11 +++++++++- src/lib/types.ts | 4 ++++ .../web-worker/worker-forwarded-trigger.ts | 22 ++++++++++++++++--- .../integrations/event-forwarding/index.html | 1 + 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/lib/sandbox/main-forward-trigger.ts b/src/lib/sandbox/main-forward-trigger.ts index cd788145..8492d982 100644 --- a/src/lib/sandbox/main-forward-trigger.ts +++ b/src/lib/sandbox/main-forward-trigger.ts @@ -1,4 +1,5 @@ import { + debug, emptyObjectValue, getOriginalBehavior, len, @@ -6,10 +7,12 @@ import { } from '../utils'; import { type MainWindow, type PartytownWebWorker, type WinId, WorkerMessageType } from '../types'; import { serializeForWorker } from './main-serialization'; +import { logMain } from '../log'; export const mainForwardTrigger = (worker: PartytownWebWorker, $winId$: WinId, win: MainWindow) => { let queuedForwardCalls = win._ptf; - let forwards = (win.partytown || {}).forward || []; + let config = win.partytown || {}; + let forwards = config.forward || []; let i: number; let mainForwardFn: typeof win; @@ -46,6 +49,9 @@ export const mainForwardTrigger = (worker: PartytownWebWorker, $winId$: WinId, w if (originalFunction) { returnValue = originalFunction(args); } + if (debug && config.logForwardedEvents) { + logMain(`Forward event: ${arr.join('.')}()`); + } forwardCall(arr, args); return returnValue; }; @@ -55,6 +61,9 @@ export const mainForwardTrigger = (worker: PartytownWebWorker, $winId$: WinId, w if (queuedForwardCalls) { for (i = 0; i < len(queuedForwardCalls); i += 2) { + if (debug && config.logForwardedEvents) { + logMain(`Forward queued event: ${queuedForwardCalls[i].join('.')}()`); + } forwardCall(queuedForwardCalls[i], queuedForwardCalls[i + 1]); } } diff --git a/src/lib/types.ts b/src/lib/types.ts index ee6b6f32..f554e733 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -500,6 +500,10 @@ export interface PartytownConfig { * Log setter calls (debug mode required) */ logSetters?: boolean; + /** + * Log forwarded events (debug mode required) + */ + logForwardedEvents?: boolean; /** * Log Image() src requests (debug mode required) */ diff --git a/src/lib/web-worker/worker-forwarded-trigger.ts b/src/lib/web-worker/worker-forwarded-trigger.ts index 86d89e3f..be5830a1 100644 --- a/src/lib/web-worker/worker-forwarded-trigger.ts +++ b/src/lib/web-worker/worker-forwarded-trigger.ts @@ -1,7 +1,8 @@ import { deserializeFromMain } from './worker-serialization'; -import { environments } from './worker-constants'; +import { environments, webWorkerCtx } from './worker-constants'; import type { ForwardMainTriggerData } from '../types'; -import { len } from '../utils'; +import { debug, len } from '../utils'; +import { logWorker } from '../log'; export const workerForwardedTriggerHandle = ({ $winId$, @@ -14,11 +15,26 @@ export const workerForwardedTriggerHandle = ({ let i = 0; let l = len($forward$); + if (debug && webWorkerCtx.$config$.logForwardedEvents) { + logWorker(`Forwarded event received: ${$forward$.join('.')}()`, $winId$); + } + for (; i < l; i++) { if (i + 1 < l) { target = target[$forward$[i]]; } else { - target[$forward$[i]].apply(target, deserializeFromMain(null, $winId$, [], $args$)); + const deserializedArgs = deserializeFromMain(null, $winId$, [], $args$); + if (debug && webWorkerCtx.$config$.logForwardedEvents) { + logWorker( + `Forwarded event execute: ${$forward$.join('.')}(${deserializedArgs + .map((a: any) => + typeof a === 'object' ? JSON.stringify(a)?.slice(0, 60) : String(a) + ) + .join(', ')})`, + $winId$ + ); + } + target[$forward$[i]].apply(target, deserializedArgs); } } } catch (e) { diff --git a/tests/integrations/event-forwarding/index.html b/tests/integrations/event-forwarding/index.html index 08e813cd..85be6dbc 100644 --- a/tests/integrations/event-forwarding/index.html +++ b/tests/integrations/event-forwarding/index.html @@ -19,6 +19,7 @@ logSetters: true, logStackTraces: false, logScriptExecution: true, + logForwardedEvents: true, }; From b39136ebbf89d3e4fb3b40dfc9164d565a912081 Mon Sep 17 00:00:00 2001 From: mws19901118 Date: Fri, 13 Mar 2026 21:46:23 -0700 Subject: [PATCH 2/5] chore: add changeset for logForwardedEvents Co-Authored-By: Claude Sonnet 4.6 --- .changeset/debug-log-forwarded-events.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/debug-log-forwarded-events.md diff --git a/.changeset/debug-log-forwarded-events.md b/.changeset/debug-log-forwarded-events.md new file mode 100644 index 00000000..0f19d8a3 --- /dev/null +++ b/.changeset/debug-log-forwarded-events.md @@ -0,0 +1,5 @@ +--- +'@qwik.dev/partytown': patch +--- + +Add `logForwardedEvents` config flag to enable debug logging for forwarded events and triggers From 31b7f6bac3e90b18f86cab03197c90a655f2508e Mon Sep 17 00:00:00 2001 From: mws19901118 Date: Fri, 13 Mar 2026 21:50:39 -0700 Subject: [PATCH 3/5] docs: add logForwardedEvents to api.md Co-Authored-By: Claude Sonnet 4.6 --- src/integration/api.md | 1 + 1 file changed, 1 insertion(+) diff --git a/src/integration/api.md b/src/integration/api.md index 2e13163d..25348a44 100644 --- a/src/integration/api.md +++ b/src/integration/api.md @@ -28,6 +28,7 @@ export interface PartytownConfig { lib?: string; loadScriptsOnMainThread?: (string | RegExp)[]; logCalls?: boolean; + logForwardedEvents?: boolean; logGetters?: boolean; logImageRequests?: boolean; logMainAccess?: boolean; From c8c480be097efc833b0bea10552124ac3cb36eb0 Mon Sep 17 00:00:00 2001 From: mws19901118 Date: Thu, 21 May 2026 16:23:33 -0700 Subject: [PATCH 4/5] docs: add logForwardedEvents to debugging config table Co-Authored-By: Claude Sonnet 4.6 --- docs/src/routes/debugging/index.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/routes/debugging/index.mdx b/docs/src/routes/debugging/index.mdx index e5649ead..248c0004 100644 --- a/docs/src/routes/debugging/index.mdx +++ b/docs/src/routes/debugging/index.mdx @@ -17,6 +17,7 @@ If you are using Chrome DevTools to see these logs, make sure that the `Verbose` | `logCalls` | Log method calls | | `logGetters` | Log getter calls | | `logSetters` | Log setter calls | +| `logForwardedEvents` | Log forwarded event calls | | `logImageRequests` | Log Image() src requests | | `logScriptExecution` | Log script executions | | `logSendBeaconRequests` | Log navigator.sendBeacon() requests | From 54df5ba186d5a432c44bad6bdda2a4c1040d4458 Mon Sep 17 00:00:00 2001 From: mws19901118 Date: Thu, 21 May 2026 16:56:50 -0700 Subject: [PATCH 5/5] trigger rerun