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":
| conststreamKeys=ObjectKeys(streamReturningOperators); |
| for(leti=0;i<streamKeys.length;i++){ |
| constkey=streamKeys[i]; |
| constop=streamReturningOperators[key]; |
| functionfn(...args){ |
| if(new.target){ |
| thrownewERR_ILLEGAL_CONSTRUCTOR(); |
| } |
| returnStream.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