Skip to content

Commit 9b479d6

Browse files
committed
streams: expose stream symbols
This is required for streams interop with e.g. readable-stream. Currently readable-stream helpers will not work with normal node streams which is confusing and bad for the ecosystem.
1 parent 69467fb commit 9b479d6

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

lib/internal/streams/destroy.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const {
1111
Symbol,
1212
} = primordials;
1313
const {
14-
kDestroyed,
14+
kIsDestroyed,
1515
isDestroyed,
1616
isFinished,
1717
isServerRequest
@@ -325,7 +325,7 @@ function destroyer(stream, err) {
325325
}
326326

327327
if (!stream.destroyed) {
328-
stream[kDestroyed] = true;
328+
stream[kIsDestroyed] = true;
329329
}
330330
}
331331

lib/internal/streams/utils.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ const {
66
SymbolIterator,
77
} = primordials;
88

9-
const kDestroyed = Symbol('kDestroyed');
9+
const kIsDestroyed = Symbol('kIsDestroyed');
1010
const kIsErrored = Symbol('kIsErrored');
1111
const kIsReadable = Symbol('kIsReadable');
12+
const kIsWritable = Symbol('kIsWritable');
1213
const kIsDisturbed = Symbol('kIsDisturbed');
1314

1415
function isReadableNodeStream(obj, strict = false) {
@@ -68,7 +69,7 @@ function isDestroyed(stream) {
6869
const wState = stream._writableState;
6970
const rState = stream._readableState;
7071
const state = wState || rState;
71-
return !!(stream.destroyed || stream[kDestroyed] || state?.destroyed);
72+
return !!(stream.destroyed || stream[kIsDestroyed] || state?.destroyed);
7273
}
7374

7475
// Have been end():d.
@@ -126,6 +127,7 @@ function isReadable(stream) {
126127
}
127128

128129
function isWritable(stream) {
130+
if (stream && stream[kIsWritable] != null) return stream[kIsWritable];
129131
if (typeof stream?.writable !== 'boolean') return null;
130132
if (isDestroyed(stream)) return false;
131133
return isWritableNodeStream(stream) &&
@@ -262,13 +264,14 @@ function isErrored(stream) {
262264
}
263265

264266
module.exports = {
265-
kDestroyed,
266-
isDisturbed,
267+
kIsDestroyed,
267268
kIsDisturbed,
268-
isErrored,
269269
kIsErrored,
270-
isReadable,
271270
kIsReadable,
271+
kIsWritable,
272+
isDisturbed,
273+
isErrored,
274+
isReadable,
272275
isClosed,
273276
isDestroyed,
274277
isDuplexNodeStream,

lib/stream.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,19 @@ const promises = require('stream/promises');
5151
const utils = require('internal/streams/utils');
5252

5353
const Stream = module.exports = require('internal/streams/legacy').Stream;
54+
55+
Stream.isDestroyed = utils.isDestroyed;
5456
Stream.isDisturbed = utils.isDisturbed;
5557
Stream.isErrored = utils.isErrored;
5658
Stream.isReadable = utils.isReadable;
59+
Stream.isWritable = utils.isWritable;
60+
61+
Stream.kIsDestroyed = utils.kIsDestroyed;
62+
Stream.kIsErrored = utils.kIsErrored;
63+
Stream.kIsReadable = utils.kIsReadable;
64+
Stream.kIsWritable = utils.kIsWritable;
65+
Stream.kIsDisturbed = utils.kIsDisturbed;
66+
5767
Stream.Readable = require('internal/streams/readable');
5868
for (const key of ObjectKeys(streamReturningOperators)) {
5969
const op = streamReturningOperators[key];

0 commit comments

Comments
 (0)