diff --git a/packages/devtools-kit/src/messaging/presets/broadcast-channel/index.ts b/packages/devtools-kit/src/messaging/presets/broadcast-channel/index.ts index 53db9d1b4..7578747ce 100644 --- a/packages/devtools-kit/src/messaging/presets/broadcast-channel/index.ts +++ b/packages/devtools-kit/src/messaging/presets/broadcast-channel/index.ts @@ -16,6 +16,11 @@ export function createBroadcastChannel(): MergeableChannelOptions { }, on: (handler) => { channel.onmessage = (event) => { + // The channel can receive payloads that are not JSON strings (e.g. an + // object) when it is shared with other code. Parsing a non-string + // value throws `SyntaxError: "[object Object]" is not valid JSON`. + if (typeof event.data !== 'string') + return const parsed = SuperJSON.parse<{ event: string, data: unknown }>(event.data) if (parsed.event === __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY) { handler(parsed.data) diff --git a/packages/devtools-kit/src/messaging/presets/extension/server.ts b/packages/devtools-kit/src/messaging/presets/extension/server.ts index a9367dd83..23ba7c271 100644 --- a/packages/devtools-kit/src/messaging/presets/extension/server.ts +++ b/packages/devtools-kit/src/messaging/presets/extension/server.ts @@ -12,7 +12,7 @@ export function createExtensionServerChannel(): MergeableChannelOptions { }, on: (handler) => { const listener = (event: MessageEvent) => { - if (event.data.source === __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER && event.data.payload) { + if (event.data.source === __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER && typeof event.data.payload === 'string') { handler(SuperJSON.parse(event.data.payload)) } } diff --git a/packages/devtools-kit/src/messaging/presets/vite/client.ts b/packages/devtools-kit/src/messaging/presets/vite/client.ts index 188226118..ae9a803db 100644 --- a/packages/devtools-kit/src/messaging/presets/vite/client.ts +++ b/packages/devtools-kit/src/messaging/presets/vite/client.ts @@ -10,6 +10,10 @@ export function createViteClientChannel(): MergeableChannelOptions { }, on: (handler) => { client?.on(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, (event) => { + // Only parse string payloads; parsing an object/other value throws + // `SyntaxError: "[object Object]" is not valid JSON`. + if (typeof event !== 'string') + return handler(SuperJSON.parse(event)) }) }, diff --git a/packages/devtools-kit/src/messaging/presets/vite/server.ts b/packages/devtools-kit/src/messaging/presets/vite/server.ts index bcfad9979..b52955273 100644 --- a/packages/devtools-kit/src/messaging/presets/vite/server.ts +++ b/packages/devtools-kit/src/messaging/presets/vite/server.ts @@ -10,6 +10,10 @@ export function createViteServerChannel(): MergeableChannelOptions { return { post: data => ws?.send(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, SuperJSON.stringify(data)), on: handler => ws?.on(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, (event) => { + // Only parse string payloads; parsing an object/other value throws + // `SyntaxError: "[object Object]" is not valid JSON`. + if (typeof event !== 'string') + return handler(SuperJSON.parse(event)) }), }