aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@babel/runtime/helpers/AsyncGenerator.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/@babel/runtime/helpers/AsyncGenerator.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/@babel/runtime/helpers/AsyncGenerator.js')
-rw-r--r--node_modules/@babel/runtime/helpers/AsyncGenerator.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/node_modules/@babel/runtime/helpers/AsyncGenerator.js b/node_modules/@babel/runtime/helpers/AsyncGenerator.js
new file mode 100644
index 00000000..0a023bf5
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/AsyncGenerator.js
@@ -0,0 +1,105 @@
+var _Symbol = require("../core-js/symbol");
+
+var _Promise = require("../core-js/promise");
+
+var AwaitValue = require("./AwaitValue");
+
+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);
+};
+
+module.exports = AsyncGenerator; \ No newline at end of file