The intention of readable.compose() is that the method returns the Duplex from the internals/streams/compose function unscathed.
Unfortunately, because it's merged onto Readable.prototype as a "stream-returning operator":
|
const streamKeys = ObjectKeys(streamReturningOperators); |
|
for (let i = 0; i < streamKeys.length; i++) { |
|
const key = streamKeys[i]; |
|
const op = streamReturningOperators[key]; |
|
function fn(...args) { |
|
if (new.target) { |
|
throw new ERR_ILLEGAL_CONSTRUCTOR(); |
|
} |
|
return Stream.Readable.from(ReflectApply(op, this, args)); |
|
} |
|
ObjectDefineProperty(fn, 'name', { __proto__: null, value: op.name }); |
|
ObjectDefineProperty(fn, 'length', { __proto__: null, value: op.length }); |
|
ObjectDefineProperty(Stream.Readable.prototype, key, { |
|
__proto__: null, |
|
value: fn, |
|
enumerable: false, |
|
configurable: true, |
|
writable: true, |
|
}); |
|
} |
...its return value is passed via Readable.from(), clobbering the Duplex into a Readable.
The .compose() operator needs specifically to bypass this mechanism.
Refs: #44937
The intention of
readable.compose()is that the method returns the Duplex from the internals/streams/compose function unscathed.Unfortunately, because it's merged onto
Readable.prototypeas a "stream-returning operator":node/lib/stream.js
Lines 64 to 83 in 8a3482e
...its return value is passed via
Readable.from(), clobbering the Duplex into a Readable.The
.compose()operator needs specifically to bypass this mechanism.Refs: #44937