wrapAsyncGenerator.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. var _Promise = require("core-js/library/fn/promise.js");
  2. var _Symbol = require("core-js/library/fn/symbol/index.js");
  3. var OverloadYield = require("./OverloadYield.js");
  4. function _wrapAsyncGenerator(e) {
  5. return function () {
  6. return new AsyncGenerator(e.apply(this, arguments));
  7. };
  8. }
  9. function AsyncGenerator(e) {
  10. var r, t;
  11. function resume(r, t) {
  12. try {
  13. var n = e[r](t),
  14. o = n.value,
  15. u = o instanceof OverloadYield;
  16. _Promise.resolve(u ? o.v : o).then(function (t) {
  17. if (u) {
  18. var i = "return" === r ? "return" : "next";
  19. if (!o.k || t.done) return resume(i, t);
  20. t = e[i](t).value;
  21. }
  22. settle(n.done ? "return" : "normal", t);
  23. }, function (e) {
  24. resume("throw", e);
  25. });
  26. } catch (e) {
  27. settle("throw", e);
  28. }
  29. }
  30. function settle(e, n) {
  31. switch (e) {
  32. case "return":
  33. r.resolve({
  34. value: n,
  35. done: !0
  36. });
  37. break;
  38. case "throw":
  39. r.reject(n);
  40. break;
  41. default:
  42. r.resolve({
  43. value: n,
  44. done: !1
  45. });
  46. }
  47. (r = r.next) ? resume(r.key, r.arg) : t = null;
  48. }
  49. this._invoke = function (e, n) {
  50. return new _Promise(function (o, u) {
  51. var i = {
  52. key: e,
  53. arg: n,
  54. resolve: o,
  55. reject: u,
  56. next: null
  57. };
  58. t ? t = t.next = i : (r = t = i, resume(e, n));
  59. });
  60. }, "function" != typeof e["return"] && (this["return"] = void 0);
  61. }
  62. AsyncGenerator.prototype["function" == typeof _Symbol && _Symbol.asyncIterator || "@@asyncIterator"] = function () {
  63. return this;
  64. }, AsyncGenerator.prototype.next = function (e) {
  65. return this._invoke("next", e);
  66. }, AsyncGenerator.prototype["throw"] = function (e) {
  67. return this._invoke("throw", e);
  68. }, AsyncGenerator.prototype["return"] = function (e) {
  69. return this._invoke("return", e);
  70. };
  71. module.exports = _wrapAsyncGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;