diff --git a/lib/internal/streams/duplexify.js b/lib/internal/streams/duplexify.js index 6fb4e35bafa099..bfcd51233ac786 100644 --- a/lib/internal/streams/duplexify.js +++ b/lib/internal/streams/duplexify.js @@ -262,8 +262,6 @@ function _duplexify(pair) { cb(err); } else if (err) { d.destroy(err); - } else if (!readable && !writable) { - d.destroy(); } } diff --git a/test/parallel/test-stream-duplex-from.js b/test/parallel/test-stream-duplex-from.js index ba445f892e4bb6..0e69592ae24990 100644 --- a/test/parallel/test-stream-duplex-from.js +++ b/test/parallel/test-stream-duplex-from.js @@ -2,7 +2,7 @@ const common = require('../common'); const assert = require('assert'); -const { Duplex, Readable, Writable, pipeline } = require('stream'); +const { Duplex, Readable, Writable, pipeline, PassThrough } = require('stream'); const { Blob } = require('buffer'); { @@ -278,3 +278,24 @@ const { Blob } = require('buffer'); duplex.write('test'); } + +{ + const through = new PassThrough({ objectMode: true }); + + let res = ''; + const d = Readable.from(['foo', 'bar'], { objectMode: true }) + .pipe(Duplex.from({ + writable: through, + readable: through + })); + + d.on('data', (data) => { + d.pause(); + setImmediate(() => { + d.resume(); + }); + res += data; + }).on('end', common.mustCall(() => { + assert.strictEqual(res, 'foobar'); + })).on('close', common.mustCall()); +}