| "use strict"; | 
|   | 
| exports.__esModule = true; | 
|   | 
| var _symbol = require("../core-js/symbol"); | 
|   | 
| var _symbol2 = _interopRequireDefault(_symbol); | 
|   | 
| var _promise = require("../core-js/promise"); | 
|   | 
| var _promise2 = _interopRequireDefault(_promise); | 
|   | 
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | 
|   | 
| exports.default = function () { | 
|   function AwaitValue(value) { | 
|     this.value = value; | 
|   } | 
|   | 
|   function AsyncGenerator(gen) { | 
|     var front, back; | 
|   | 
|     function send(key, arg) { | 
|       return new _promise2.default(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; | 
|   | 
|         if (value instanceof AwaitValue) { | 
|           _promise2.default.resolve(value.value).then(function (arg) { | 
|             resume("next", arg); | 
|           }, function (arg) { | 
|             resume("throw", arg); | 
|           }); | 
|         } else { | 
|           settle(result.done ? "return" : "normal", result.value); | 
|         } | 
|       } 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 _symbol2.default === "function" && _symbol2.default.asyncIterator) { | 
|     AsyncGenerator.prototype[_symbol2.default.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); | 
|   }; | 
|   | 
|   return { | 
|     wrap: function wrap(fn) { | 
|       return function () { | 
|         return new AsyncGenerator(fn.apply(this, arguments)); | 
|       }; | 
|     }, | 
|     await: function _await(value) { | 
|       return new AwaitValue(value); | 
|     } | 
|   }; | 
| }(); |