Readable constructor has extra properties attached
Comparing Readable in Node.js 18.8.0 and [email protected]:
> stream.Readable
[Function: Readable] {
ReadableState: [Function: ReadableState],
_fromList: [Function: fromList],
from: [Function (anonymous)],
fromWeb: [Function (anonymous)],
toWeb: [Function (anonymous)],
wrap: [Function (anonymous)]
}
> const rs = await import('readable-stream')
undefined
> rs.Readable
<ref *1> [Function: Readable] {
ReadableState: [Function: ReadableState],
_fromList: [Function: fromList],
from: [Function (anonymous)],
fromWeb: [Function (anonymous)],
toWeb: [Function (anonymous)],
wrap: [Function (anonymous)],
_uint8ArrayToBuffer: [Function: _uint8ArrayToBuffer],
_isUint8Array: [Function: isUint8Array],
isDisturbed: [Function: isDisturbed],
isErrored: [Function: isErrored],
isReadable: [Function: isReadable],
Readable: [Circular *1],
Writable: [Function: Writable] {
WritableState: [Function: WritableState],
fromWeb: [Function (anonymous)],
toWeb: [Function (anonymous)]
},
Duplex: [Function: Duplex] {
fromWeb: [Function (anonymous)],
toWeb: [Function (anonymous)],
from: [Function (anonymous)]
},
Transform: [Function: Transform],
PassThrough: [Function: PassThrough],
addAbortSignal: [Function: addAbortSignal],
finished: [Function: eos] {
finished: [Function: finished],
[Symbol(nodejs.util.promisify.custom)]: [Getter]
},
destroy: [Function: destroyer],
pipeline: [Function: pipeline] {
[Symbol(nodejs.util.promisify.custom)]: [Getter]
},
compose: [Function: compose],
Stream: <ref *2> [Function: Stream] {
isDisturbed: [Function: isDisturbed],
isErrored: [Function: isErrored],
isReadable: [Function: isReadable],
Readable: [Circular *1],
Writable: [Function: Writable] {
WritableState: [Function: WritableState],
fromWeb: [Function (anonymous)],
toWeb: [Function (anonymous)]
},
Duplex: [Function: Duplex] {
fromWeb: [Function (anonymous)],
toWeb: [Function (anonymous)],
from: [Function (anonymous)]
},
Transform: [Function: Transform],
PassThrough: [Function: PassThrough],
pipeline: [Function: pipeline] {
[Symbol(nodejs.util.promisify.custom)]: [Getter]
},
addAbortSignal: [Function: addAbortSignal],
finished: [Function: eos] {
finished: [Function: finished],
[Symbol(nodejs.util.promisify.custom)]: [Getter]
},
destroy: [Function: destroyer],
compose: [Function: compose],
promises: [Getter],
Stream: [Circular *2],
_isUint8Array: [Function: isUint8Array],
_uint8ArrayToBuffer: [Function: _uint8ArrayToBuffer]
},
default: [Circular *1]
}
This is done for historic reason. This module exports Readable, while require('stream') exports Stream. I don't like it either, but I didn't think we should break it in v4. Should we do another major and fix it?
You might just get away with some other variant of https://github.com/nodejs/readable-stream/blob/main/lib/ours/index.js#L33-L64.
For my use case, it would be cleaner. Right now I'm just deleting the extra properties off of Readable.
Maybe something to consider in the next major release, but probably not worth artificially forcing a major release just for this.
Would you mind sending a PR? At least we won't forget when we bump the major next year.