diff --git a/lib/internal/main/worker_thread.js b/lib/internal/main/worker_thread.js index 56ccd9df5e9b53..ade4b822c58013 100644 --- a/lib/internal/main/worker_thread.js +++ b/lib/internal/main/worker_thread.js @@ -162,8 +162,9 @@ port.on('message', (message) => { CJSLoader.Module.runMain(filename); } } else if (message.type === STDIO_PAYLOAD) { - const { stream, chunk, encoding } = message; - process[stream].push(chunk, encoding); + const { stream, chunks } = message; + for (const { chunk, encoding } of chunks) + process[stream].push(chunk, encoding); } else { assert( message.type === STDIO_WANTS_MORE_DATA, diff --git a/lib/internal/worker.js b/lib/internal/worker.js index 5f92a7898e93a9..093efde3a5d7ba 100644 --- a/lib/internal/worker.js +++ b/lib/internal/worker.js @@ -242,8 +242,11 @@ class Worker extends EventEmitter { return this[kOnErrorMessage](message.error); case messageTypes.STDIO_PAYLOAD: { - const { stream, chunk, encoding } = message; - return this[kParentSideStdio][stream].push(chunk, encoding); + const { stream, chunks } = message; + const readable = this[kParentSideStdio][stream]; + for (const { chunk, encoding } of chunks) + readable.push(chunk, encoding); + return; } case messageTypes.STDIO_WANTS_MORE_DATA: { diff --git a/lib/internal/worker/io.js b/lib/internal/worker/io.js index 1167198676b01b..0a97f17595faa8 100644 --- a/lib/internal/worker/io.js +++ b/lib/internal/worker/io.js @@ -206,12 +206,11 @@ class WritableWorkerStdio extends Writable { this[kWritableCallbacks] = []; } - _write(chunk, encoding, cb) { + _writev(chunks, cb) { this[kPort].postMessage({ type: messageTypes.STDIO_PAYLOAD, stream: this[kName], - chunk, - encoding + chunks: chunks.map(({ chunk, encoding }) => ({ chunk, encoding })) }); this[kWritableCallbacks].push(cb); if (this[kPort][kWaitingStreams]++ === 0) @@ -222,7 +221,7 @@ class WritableWorkerStdio extends Writable { this[kPort].postMessage({ type: messageTypes.STDIO_PAYLOAD, stream: this[kName], - chunk: null + chunks: [ { chunk: null, encoding: '' } ] }); cb(); }