You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							126 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							126 lines
						
					
					
						
							2.7 KiB
						
					
					
				"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); | 
						|
    } | 
						|
  }; | 
						|
}(); |