diff --git a/lib/internal/streams/pipeline.js b/lib/internal/streams/pipeline.js index b23f05ca1f206a..89561433c8c132 100644 --- a/lib/internal/streams/pipeline.js +++ b/lib/internal/streams/pipeline.js @@ -144,7 +144,10 @@ async function pump(iterable, writable, finish) { function pipeline(...streams) { const callback = once(popCallback(streams)); - if (ArrayIsArray(streams[0])) streams = streams[0]; + // stream.pipeline(streams, callback) + if (ArrayIsArray(streams[0]) && streams.length === 1) { + streams = streams[0]; + } if (streams.length < 2) { throw new ERR_MISSING_ARGS('streams'); diff --git a/test/parallel/test-stream-pipeline.js b/test/parallel/test-stream-pipeline.js index f4801ece268a5b..78057f9eeffec6 100644 --- a/test/parallel/test-stream-pipeline.js +++ b/test/parallel/test-stream-pipeline.js @@ -1285,3 +1285,19 @@ const net = require('net'); }); const pipelined = addAbortSignal(ac.signal, pipeline([r, w], cb)); } + +{ + pipeline([1, 2, 3], PassThrough({ objectMode: true }), + common.mustSucceed(() => {})); + + let res = ''; + const w = new Writable({ + write(chunk, encoding, callback) { + res += chunk; + callback(); + }, + }); + pipeline(['1', '2', '3'], w, common.mustSucceed(() => { + assert.strictEqual(res, '123'); + })); +}