| | |
| | | 'use strict'; |
| | | var apply = require('../internals/function-apply'); |
| | | var anObject = require('../internals/an-object'); |
| | | var create = require('../internals/object-create'); |
| | | var getMethod = require('../internals/get-method'); |
| | | var redefineAll = require('../internals/redefine-all'); |
| | | var defineBuiltIns = require('../internals/define-built-ins'); |
| | | var InternalStateModule = require('../internals/internal-state'); |
| | | var getBuiltIn = require('../internals/get-built-in'); |
| | | var AsyncIteratorPrototype = require('../internals/async-iterator-prototype'); |
| | | |
| | | var Promise = getBuiltIn('Promise'); |
| | | |
| | | var ASYNC_FROM_SYNC_ITERATOR = 'AsyncFromSyncIterator'; |
| | | var setInternalState = InternalStateModule.set; |
| | | var getInternalState = InternalStateModule.get; |
| | | var getInternalState = InternalStateModule.getterFor(ASYNC_FROM_SYNC_ITERATOR); |
| | | |
| | | var asyncFromSyncIteratorContinuation = function (result, resolve, reject) { |
| | | var done = result.done; |
| | |
| | | |
| | | var AsyncFromSyncIterator = function AsyncIterator(iterator) { |
| | | setInternalState(this, { |
| | | type: ASYNC_FROM_SYNC_ITERATOR, |
| | | iterator: anObject(iterator), |
| | | next: iterator.next |
| | | }); |
| | | }; |
| | | |
| | | AsyncFromSyncIterator.prototype = redefineAll(create(AsyncIteratorPrototype), { |
| | | AsyncFromSyncIterator.prototype = defineBuiltIns(create(AsyncIteratorPrototype), { |
| | | next: function next(arg) { |
| | | var state = getInternalState(this); |
| | | var hasArg = !!arguments.length; |
| | | return new Promise(function (resolve, reject) { |
| | | var result = anObject(state.next.apply(state.iterator, hasArg ? [arg] : [])); |
| | | var result = anObject(apply(state.next, state.iterator, hasArg ? [arg] : [])); |
| | | asyncFromSyncIteratorContinuation(result, resolve, reject); |
| | | }); |
| | | }, |
| | |
| | | return new Promise(function (resolve, reject) { |
| | | var $return = getMethod(iterator, 'return'); |
| | | if ($return === undefined) return resolve({ done: true, value: arg }); |
| | | var result = anObject($return.apply(iterator, hasArg ? [arg] : [])); |
| | | var result = anObject(apply($return, iterator, hasArg ? [arg] : [])); |
| | | asyncFromSyncIteratorContinuation(result, resolve, reject); |
| | | }); |
| | | }, |
| | |
| | | return new Promise(function (resolve, reject) { |
| | | var $throw = getMethod(iterator, 'throw'); |
| | | if ($throw === undefined) return reject(arg); |
| | | var result = anObject($throw.apply(iterator, hasArg ? [arg] : [])); |
| | | var result = anObject(apply($throw, iterator, hasArg ? [arg] : [])); |
| | | asyncFromSyncIteratorContinuation(result, resolve, reject); |
| | | }); |
| | | } |