diff options
author | Matteo Collina <hello@matteocollina.com> | 2019-10-27 01:09:03 +0200 |
---|---|---|
committer | Matteo Collina <hello@matteocollina.com> | 2019-10-29 09:36:24 +0100 |
commit | 009952935f253405ac095a4aaaa762fb080b7cb9 (patch) | |
tree | d71ba250495482c7f7d6b371a8b8b4a93d61f451 /lib/_stream_readable.js | |
parent | 1d89c5d1e16d67962db2735efc601b48bd78255d (diff) | |
download | node-new-009952935f253405ac095a4aaaa762fb080b7cb9.tar.gz |
stream: extract Readable.from in its own file
See: https://github.com/nodejs/readable-stream/pull/420
PR-URL: https://github.com/nodejs/node/pull/30140
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Gus Caplan <me@gus.host>
Reviewed-By: Beth Griggs <Bethany.Griggs@uk.ibm.com>
Diffstat (limited to 'lib/_stream_readable.js')
-rw-r--r-- | lib/_stream_readable.js | 39 |
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); }; |