stream: add isReadable helper · nodejs/node@7cef769 · GitHub
Skip to content

Commit 7cef769

Browse files
ronagdanielleadams
authored andcommitted
stream: add isReadable helper
PR-URL: #41199 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 9c718f8 commit 7cef769

5 files changed

Lines changed: 40 additions & 4 deletions

File tree

doc/api/stream.md

Lines changed: 13 additions & 0 deletions

lib/internal/streams/utils.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const {
88

99
const kDestroyed = Symbol('kDestroyed');
1010
const kIsErrored = Symbol('kIsErrored');
11+
const kIsReadable = Symbol('kIsReadable');
1112
const kIsDisturbed = Symbol('kIsDisturbed');
1213

1314
function isReadableNodeStream(obj) {
@@ -120,6 +121,7 @@ function isDisturbed(stream) {
120121
}
121122

122123
function isReadable(stream) {
124+
if (stream && stream[kIsReadable] != null) return stream[kIsReadable];
123125
const r = isReadableNodeStream(stream);
124126
if (r === null || typeof stream?.readable !== 'boolean') return null;
125127
if (isDestroyed(stream)) return false;
@@ -235,15 +237,16 @@ function isErrored(stream) {
235237

236238
module.exports = {
237239
isDisturbed,
238-
isErrored,
239240
kIsDisturbed,
241+
isErrored,
240242
kIsErrored,
243+
isReadable,
244+
kIsReadable,
241245
isClosed,
242246
isDestroyed,
243247
isDuplexNodeStream,
244248
isFinished,
245249
isIterable,
246-
isReadable,
247250
isReadableNodeStream,
248251
isReadableEnded,
249252
isReadableFinished,

lib/internal/webstreams/readablestream.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ const {
8383
const {
8484
kIsDisturbed,
8585
kIsErrored,
86+
kIsReadable,
8687
} = require('internal/streams/utils');
8788

8889
const {
@@ -261,6 +262,10 @@ class ReadableStream {
261262
return this[kState].state === 'errored';
262263
}
263264

265+
get [kIsReadable]() {
266+
return this[kState].state === 'readable';
267+
}
268+
264269
/**
265270
* @readonly
266271
* @type {boolean}

lib/stream.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ const utils = require('internal/streams/utils');
4444
const Stream = module.exports = require('internal/streams/legacy').Stream;
4545
Stream.isDisturbed = utils.isDisturbed;
4646
Stream.isErrored = utils.isErrored;
47+
Stream.isReadable = utils.isReadable;
4748
Stream.Readable = require('internal/streams/readable');
4849
for (const key of ObjectKeys(operators)) {
4950
const op = operators[key];

test/parallel/test-whatwg-readablestream.js

Lines changed: 16 additions & 2 deletions

0 commit comments

Comments
 (0)