From c446fcd6fc1ad6b5f7b488caa1d562411992d7be Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Tue, 23 Jul 2019 09:40:13 +0200 Subject: [PATCH 1/4] stream: add readableEnded --- doc/api/stream.md | 9 ++++++ lib/_stream_readable.js | 10 +++++++ lib/internal/streams/end-of-stream.js | 3 +- test/parallel/test-stream-readable-ended.js | 33 +++++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-stream-readable-ended.js diff --git a/doc/api/stream.md b/doc/api/stream.md index 2cdd6ffde31b29..91d253b067f6df 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -1095,6 +1095,15 @@ added: REPLACEME Getter for the property `encoding` of a given `Readable` stream. The `encoding` property can be set using the [`readable.setEncoding()`][] method. +##### readable.readableFinished + + +* {boolean} + +Becomes `true` when [`'end'`][] event is emitted. + ##### readable.readableHighWaterMark From e54d0109dfa653af8590ae4232d92a4d77f92bfa Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sat, 27 Jul 2019 15:28:48 +0300 Subject: [PATCH 4/4] Update test/parallel/test-stream-readable-ended.js Co-Authored-By: Vitaly Kuzmich --- lib/internal/streams/async_iterator.js | 2 +- test/parallel/test-stream-finished.js | 9 +++++++++ test/parallel/test-stream-readable-ended.js | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/internal/streams/async_iterator.js b/lib/internal/streams/async_iterator.js index 89a1dae7fdfb02..0161ca98ef03fb 100644 --- a/lib/internal/streams/async_iterator.js +++ b/lib/internal/streams/async_iterator.js @@ -132,7 +132,7 @@ const createReadableStreamAsyncIterator = (stream) => { [kLastReject]: { value: null, writable: true }, [kError]: { value: null, writable: true }, [kEnded]: { - value: stream._readableState.endEmitted, + value: stream.readableEnded || stream._readableState.endEmitted, writable: true }, // The function passed to new Promise is cached so we avoid allocating a new diff --git a/test/parallel/test-stream-finished.js b/test/parallel/test-stream-finished.js index 329b4ed42b0c43..d6361ea303635d 100644 --- a/test/parallel/test-stream-finished.js +++ b/test/parallel/test-stream-finished.js @@ -3,6 +3,7 @@ const common = require('../common'); const { Writable, Readable, Transform, finished } = require('stream'); const assert = require('assert'); +const EE = require('events'); const fs = require('fs'); const { promisify } = require('util'); @@ -175,3 +176,11 @@ const { promisify } = require('util'); rs.push(null); rs.resume(); } + +{ + const streamLike = new EE(); + streamLike.readableEnded = true; + streamLike.readable = true; + finished(streamLike, common.mustCall); + streamLike.emit('close'); +} diff --git a/test/parallel/test-stream-readable-ended.js b/test/parallel/test-stream-readable-ended.js index 46987deac47c12..a224c68f041d10 100644 --- a/test/parallel/test-stream-readable-ended.js +++ b/test/parallel/test-stream-readable-ended.js @@ -15,7 +15,7 @@ const assert = require('assert'); const readable = new Readable(); readable._read = () => { - // The state finished should start in false. + // The state ended should start in false. assert.strictEqual(readable.readableEnded, false); readable.push('asd'); assert.strictEqual(readable.readableEnded, false);