| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | 
							- 'use strict';
 
- var call = require('../internals/function-call');
 
- var perform = require('../internals/perform');
 
- var anObject = require('../internals/an-object');
 
- var create = require('../internals/object-create');
 
- var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
 
- var defineBuiltIns = require('../internals/define-built-ins');
 
- var wellKnownSymbol = require('../internals/well-known-symbol');
 
- var InternalStateModule = require('../internals/internal-state');
 
- var getBuiltIn = require('../internals/get-built-in');
 
- var getMethod = require('../internals/get-method');
 
- var AsyncIteratorPrototype = require('../internals/async-iterator-prototype');
 
- var createIterResultObject = require('../internals/create-iter-result-object');
 
- var iteratorClose = require('../internals/iterator-close');
 
- var Promise = getBuiltIn('Promise');
 
- var TO_STRING_TAG = wellKnownSymbol('toStringTag');
 
- var ASYNC_ITERATOR_HELPER = 'AsyncIteratorHelper';
 
- var WRAP_FOR_VALID_ASYNC_ITERATOR = 'WrapForValidAsyncIterator';
 
- var setInternalState = InternalStateModule.set;
 
- var createAsyncIteratorProxyPrototype = function (IS_ITERATOR) {
 
-   var IS_GENERATOR = !IS_ITERATOR;
 
-   var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER);
 
-   var getStateOrEarlyExit = function (that) {
 
-     var stateCompletion = perform(function () {
 
-       return getInternalState(that);
 
-     });
 
-     var stateError = stateCompletion.error;
 
-     var state = stateCompletion.value;
 
-     if (stateError || (IS_GENERATOR && state.done)) {
 
-       return { exit: true, value: stateError ? Promise.reject(state) : Promise.resolve(createIterResultObject(undefined, true)) };
 
-     } return { exit: false, value: state };
 
-   };
 
-   return defineBuiltIns(create(AsyncIteratorPrototype), {
 
-     next: function next() {
 
-       var stateCompletion = getStateOrEarlyExit(this);
 
-       var state = stateCompletion.value;
 
-       if (stateCompletion.exit) return state;
 
-       var handlerCompletion = perform(function () {
 
-         return anObject(state.nextHandler(Promise));
 
-       });
 
-       var handlerError = handlerCompletion.error;
 
-       var value = handlerCompletion.value;
 
-       if (handlerError) state.done = true;
 
-       return handlerError ? Promise.reject(value) : Promise.resolve(value);
 
-     },
 
-     'return': function () {
 
-       var stateCompletion = getStateOrEarlyExit(this);
 
-       var state = stateCompletion.value;
 
-       if (stateCompletion.exit) return state;
 
-       state.done = true;
 
-       var iterator = state.iterator;
 
-       var returnMethod, result;
 
-       var completion = perform(function () {
 
-         if (state.inner) try {
 
-           iteratorClose(state.inner.iterator, 'normal');
 
-         } catch (error) {
 
-           return iteratorClose(iterator, 'throw', error);
 
-         }
 
-         return getMethod(iterator, 'return');
 
-       });
 
-       returnMethod = result = completion.value;
 
-       if (completion.error) return Promise.reject(result);
 
-       if (returnMethod === undefined) return Promise.resolve(createIterResultObject(undefined, true));
 
-       completion = perform(function () {
 
-         return call(returnMethod, iterator);
 
-       });
 
-       result = completion.value;
 
-       if (completion.error) return Promise.reject(result);
 
-       return IS_ITERATOR ? Promise.resolve(result) : Promise.resolve(result).then(function (resolved) {
 
-         anObject(resolved);
 
-         return createIterResultObject(undefined, true);
 
-       });
 
-     }
 
-   });
 
- };
 
- var WrapForValidAsyncIteratorPrototype = createAsyncIteratorProxyPrototype(true);
 
- var AsyncIteratorHelperPrototype = createAsyncIteratorProxyPrototype(false);
 
- createNonEnumerableProperty(AsyncIteratorHelperPrototype, TO_STRING_TAG, 'Async Iterator Helper');
 
- module.exports = function (nextHandler, IS_ITERATOR) {
 
-   var AsyncIteratorProxy = function AsyncIterator(record, state) {
 
-     if (state) {
 
-       state.iterator = record.iterator;
 
-       state.next = record.next;
 
-     } else state = record;
 
-     state.type = IS_ITERATOR ? WRAP_FOR_VALID_ASYNC_ITERATOR : ASYNC_ITERATOR_HELPER;
 
-     state.nextHandler = nextHandler;
 
-     state.counter = 0;
 
-     state.done = false;
 
-     setInternalState(this, state);
 
-   };
 
-   AsyncIteratorProxy.prototype = IS_ITERATOR ? WrapForValidAsyncIteratorPrototype : AsyncIteratorHelperPrototype;
 
-   return AsyncIteratorProxy;
 
- };
 
 
  |