summaryrefslogtreecommitdiff
path: root/lib/_stream_readable.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/_stream_readable.js')
-rw-r--r--lib/_stream_readable.js39
1 files changed, 4 insertions, 35 deletions
diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js
index 5d2300cf89..91cf2f75b0 100644
--- a/lib/_stream_readable.js
+++ b/lib/_stream_readable.js
@@ -47,6 +47,7 @@ const {
// Lazy loaded to improve the startup performance.
let StringDecoder;
let createReadableStreamAsyncIterator;
+let from;
Object.setPrototypeOf(Readable.prototype, Stream.prototype);
Object.setPrototypeOf(Readable, Stream);
@@ -1209,40 +1210,8 @@ function endReadableNT(state, stream) {
}
Readable.from = function(iterable, opts) {
- let iterator;
- if (iterable && iterable[Symbol.asyncIterator])
- iterator = iterable[Symbol.asyncIterator]();
- else if (iterable && iterable[Symbol.iterator])
- iterator = iterable[Symbol.iterator]();
- else
- throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable);
-
- const readable = new Readable({
- objectMode: true,
- ...opts
- });
- // Reading boolean to protect against _read
- // being called before last iteration completion.
- let reading = false;
- readable._read = function() {
- if (!reading) {
- reading = true;
- next();
- }
- };
- async function next() {
- try {
- const { value, done } = await iterator.next();
- if (done) {
- readable.push(null);
- } else if (readable.push(await value)) {
- next();
- } else {
- reading = false;
- }
- } catch (err) {
- readable.destroy(err);
- }
+ if (from === undefined) {
+ from = require('internal/streams/from');
}
- return readable;
+ return from(Readable, iterable, opts);
};