diff --git a/packages/cli-utils/src/threads/index.ts b/packages/cli-utils/src/threads/index.ts index 091c8ca2..7bd47860 100644 --- a/packages/cli-utils/src/threads/index.ts +++ b/packages/cli-utils/src/threads/index.ts @@ -28,6 +28,7 @@ interface ThreadMessage { id?: number; kind: ThreadMessageCodes; data?: any; + extra?: Record; } const workerOpts: WorkerOptions = { @@ -37,6 +38,17 @@ const workerOpts: WorkerOptions = { stdin: false, }; +const getMessageData = (message: ThreadMessage) => { + const data = message.data; + if (message.kind === ThreadMessageCodes.Throw) { + return typeof data === 'object' && data && message.extra != null + ? Object.assign(data, message.extra) + : data; + } else { + return data; + } +}; + const asyncIteratorSymbol = (): typeof Symbol.asyncIterator => (typeof Symbol === 'function' && Symbol.asyncIterator) || ('@@asyncIterator' as any); @@ -106,14 +118,14 @@ function main(url: string | URL): Generator(url: string | URL): Generator { resolve = (value) => { @@ -201,7 +213,11 @@ function thread( async function sendMessage(kind: ThreadMessageCodes, data?: any) { try { - port.postMessage({ id, kind, data }); + const message: ThreadMessage = { id, kind, data }; + // NOTE: Copy error annotations to separate property + if (kind === ThreadMessageCodes.Throw && typeof data === 'object' && data != null) + message.extra = { ...data }; + port.postMessage(message); } catch (error) { cleanup(); if (iterator.throw) {