summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/node-gyp/node_modules/readable-stream/lib/internal/streams/async_iterator.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/node-gyp/node_modules/readable-stream/lib/internal/streams/async_iterator.js')
-rw-r--r--deps/npm/node_modules/node-gyp/node_modules/readable-stream/lib/internal/streams/async_iterator.js204
1 files changed, 91 insertions, 113 deletions
diff --git a/deps/npm/node_modules/node-gyp/node_modules/readable-stream/lib/internal/streams/async_iterator.js b/deps/npm/node_modules/node-gyp/node_modules/readable-stream/lib/internal/streams/async_iterator.js
index 9fb615a2f3..bcae6108c0 100644
--- a/deps/npm/node_modules/node-gyp/node_modules/readable-stream/lib/internal/streams/async_iterator.js
+++ b/deps/npm/node_modules/node-gyp/node_modules/readable-stream/lib/internal/streams/async_iterator.js
@@ -1,34 +1,26 @@
'use strict';
-var _Object$setPrototypeO;
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-var finished = require('./end-of-stream');
-
-var kLastResolve = Symbol('lastResolve');
-var kLastReject = Symbol('lastReject');
-var kError = Symbol('error');
-var kEnded = Symbol('ended');
-var kLastPromise = Symbol('lastPromise');
-var kHandlePromise = Symbol('handlePromise');
-var kStream = Symbol('stream');
-
+const finished = require('./end-of-stream');
+const kLastResolve = Symbol('lastResolve');
+const kLastReject = Symbol('lastReject');
+const kError = Symbol('error');
+const kEnded = Symbol('ended');
+const kLastPromise = Symbol('lastPromise');
+const kHandlePromise = Symbol('handlePromise');
+const kStream = Symbol('stream');
function createIterResult(value, done) {
return {
- value: value,
- done: done
+ value,
+ done
};
}
-
function readAndResolve(iter) {
- var resolve = iter[kLastResolve];
-
+ const resolve = iter[kLastResolve];
if (resolve !== null) {
- var data = iter[kStream].read(); // we defer if data is null
+ const data = iter[kStream].read();
+ // we defer if data is null
// we can be expecting either 'end' or
// 'error'
-
if (data !== null) {
iter[kLastPromise] = null;
iter[kLastResolve] = null;
@@ -37,171 +29,157 @@ function readAndResolve(iter) {
}
}
}
-
function onReadable(iter) {
// we wait for the next tick, because it might
// emit an error with process.nextTick
process.nextTick(readAndResolve, iter);
}
-
function wrapForNext(lastPromise, iter) {
- return function (resolve, reject) {
- lastPromise.then(function () {
+ return (resolve, reject) => {
+ lastPromise.then(() => {
if (iter[kEnded]) {
resolve(createIterResult(undefined, true));
return;
}
-
iter[kHandlePromise](resolve, reject);
}, reject);
};
}
-
-var AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
-var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {
+const AsyncIteratorPrototype = Object.getPrototypeOf(function () {});
+const ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf({
get stream() {
return this[kStream];
},
-
- next: function next() {
- var _this = this;
-
+ next() {
// if we have detected an error in the meanwhile
// reject straight away
- var error = this[kError];
-
+ const error = this[kError];
if (error !== null) {
return Promise.reject(error);
}
-
if (this[kEnded]) {
return Promise.resolve(createIterResult(undefined, true));
}
-
if (this[kStream].destroyed) {
// We need to defer via nextTick because if .destroy(err) is
// called, the error will be emitted via nextTick, and
// we cannot guarantee that there is no error lingering around
// waiting to be emitted.
- return new Promise(function (resolve, reject) {
- process.nextTick(function () {
- if (_this[kError]) {
- reject(_this[kError]);
+ return new Promise((resolve, reject) => {
+ process.nextTick(() => {
+ if (this[kError]) {
+ reject(this[kError]);
} else {
resolve(createIterResult(undefined, true));
}
});
});
- } // if we have multiple next() calls
+ }
+
+ // if we have multiple next() calls
// we will wait for the previous Promise to finish
// this logic is optimized to support for await loops,
// where next() is only called once at a time
-
-
- var lastPromise = this[kLastPromise];
- var promise;
-
+ const lastPromise = this[kLastPromise];
+ let promise;
if (lastPromise) {
promise = new Promise(wrapForNext(lastPromise, this));
} else {
// fast path needed to support multiple this.push()
// without triggering the next() queue
- var data = this[kStream].read();
-
+ const data = this[kStream].read();
if (data !== null) {
return Promise.resolve(createIterResult(data, false));
}
-
promise = new Promise(this[kHandlePromise]);
}
-
this[kLastPromise] = promise;
return promise;
- }
-}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {
- return this;
-}), _defineProperty(_Object$setPrototypeO, "return", function _return() {
- var _this2 = this;
-
- // destroy(err, cb) is a private API
- // we can guarantee we have that here, because we control the
- // Readable class this is attached to
- return new Promise(function (resolve, reject) {
- _this2[kStream].destroy(null, function (err) {
- if (err) {
- reject(err);
- return;
- }
-
- resolve(createIterResult(undefined, true));
+ },
+ [Symbol.asyncIterator]() {
+ return this;
+ },
+ return() {
+ // destroy(err, cb) is a private API
+ // we can guarantee we have that here, because we control the
+ // Readable class this is attached to
+ return new Promise((resolve, reject) => {
+ this[kStream].destroy(null, err => {
+ if (err) {
+ reject(err);
+ return;
+ }
+ resolve(createIterResult(undefined, true));
+ });
});
- });
-}), _Object$setPrototypeO), AsyncIteratorPrototype);
-
-var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {
- var _Object$create;
-
- var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {
- value: stream,
- writable: true
- }), _defineProperty(_Object$create, kLastResolve, {
- value: null,
- writable: true
- }), _defineProperty(_Object$create, kLastReject, {
- value: null,
- writable: true
- }), _defineProperty(_Object$create, kError, {
- value: null,
- writable: true
- }), _defineProperty(_Object$create, kEnded, {
- value: stream._readableState.endEmitted,
- writable: true
- }), _defineProperty(_Object$create, kHandlePromise, {
- value: function value(resolve, reject) {
- var data = iterator[kStream].read();
-
- if (data) {
- iterator[kLastPromise] = null;
- iterator[kLastResolve] = null;
- iterator[kLastReject] = null;
- resolve(createIterResult(data, false));
- } else {
- iterator[kLastResolve] = resolve;
- iterator[kLastReject] = reject;
- }
+ }
+}, AsyncIteratorPrototype);
+const createReadableStreamAsyncIterator = stream => {
+ const iterator = Object.create(ReadableStreamAsyncIteratorPrototype, {
+ [kStream]: {
+ value: stream,
+ writable: true
+ },
+ [kLastResolve]: {
+ value: null,
+ writable: true
+ },
+ [kLastReject]: {
+ value: null,
+ writable: true
},
- writable: true
- }), _Object$create));
+ [kError]: {
+ value: null,
+ writable: true
+ },
+ [kEnded]: {
+ value: stream._readableState.endEmitted,
+ writable: true
+ },
+ // the function passed to new Promise
+ // is cached so we avoid allocating a new
+ // closure at every run
+ [kHandlePromise]: {
+ value: (resolve, reject) => {
+ const data = iterator[kStream].read();
+ if (data) {
+ iterator[kLastPromise] = null;
+ iterator[kLastResolve] = null;
+ iterator[kLastReject] = null;
+ resolve(createIterResult(data, false));
+ } else {
+ iterator[kLastResolve] = resolve;
+ iterator[kLastReject] = reject;
+ }
+ },
+ writable: true
+ }
+ });
iterator[kLastPromise] = null;
- finished(stream, function (err) {
+ finished(stream, err => {
if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {
- var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise
+ const reject = iterator[kLastReject];
+ // reject if we are waiting for data in the Promise
// returned by next() and store the error
-
if (reject !== null) {
iterator[kLastPromise] = null;
iterator[kLastResolve] = null;
iterator[kLastReject] = null;
reject(err);
}
-
iterator[kError] = err;
return;
}
-
- var resolve = iterator[kLastResolve];
-
+ const resolve = iterator[kLastResolve];
if (resolve !== null) {
iterator[kLastPromise] = null;
iterator[kLastResolve] = null;
iterator[kLastReject] = null;
resolve(createIterResult(undefined, true));
}
-
iterator[kEnded] = true;
});
stream.on('readable', onReadable.bind(null, iterator));
return iterator;
};
-
module.exports = createReadableStreamAsyncIterator; \ No newline at end of file