diff options
Diffstat (limited to 'node_modules/@babel/runtime/helpers/es6/AsyncGenerator.js')
| -rw-r--r-- | node_modules/@babel/runtime/helpers/es6/AsyncGenerator.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/node_modules/@babel/runtime/helpers/es6/AsyncGenerator.js b/node_modules/@babel/runtime/helpers/es6/AsyncGenerator.js new file mode 100644 index 00000000..05d1b4a0 --- /dev/null +++ b/node_modules/@babel/runtime/helpers/es6/AsyncGenerator.js @@ -0,0 +1,100 @@ +import _Symbol from "../../core-js/symbol"; +import _Promise from "../../core-js/promise"; +import AwaitValue from "./AwaitValue"; +export default function AsyncGenerator(gen) { + var front, back; + + function send(key, arg) { + return new _Promise(function (resolve, reject) { + var request = { + key: key, + arg: arg, + resolve: resolve, + reject: reject, + next: null + }; + + if (back) { + back = back.next = request; + } else { + front = back = request; + resume(key, arg); + } + }); + } + + function resume(key, arg) { + try { + var result = gen[key](arg); + var value = result.value; + var wrappedAwait = value instanceof AwaitValue; + + _Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) { + if (wrappedAwait) { + resume("next", arg); + return; + } + + settle(result.done ? "return" : "normal", arg); + }, function (err) { + resume("throw", err); + }); + } catch (err) { + settle("throw", err); + } + } + + function settle(type, value) { + switch (type) { + case "return": + front.resolve({ + value: value, + done: true + }); + break; + + case "throw": + front.reject(value); + break; + + default: + front.resolve({ + value: value, + done: false + }); + break; + } + + front = front.next; + + if (front) { + resume(front.key, front.arg); + } else { + back = null; + } + } + + this._invoke = send; + + if (typeof gen.return !== "function") { + this.return = undefined; + } +} + +if (typeof _Symbol === "function" && _Symbol.asyncIterator) { + AsyncGenerator.prototype[_Symbol.asyncIterator] = function () { + return this; + }; +} + +AsyncGenerator.prototype.next = function (arg) { + return this._invoke("next", arg); +}; + +AsyncGenerator.prototype.throw = function (arg) { + return this._invoke("throw", arg); +}; + +AsyncGenerator.prototype.return = function (arg) { + return this._invoke("return", arg); +};
\ No newline at end of file |
