| 'use strict'; |
| var bind = require('../internals/function-bind-context'); |
| var uncurryThis = require('../internals/function-uncurry-this'); |
| var isConstructor = require('../internals/is-constructor'); |
| var getAsyncIterator = require('../internals/get-async-iterator'); |
| var getIterator = require('../internals/get-iterator'); |
| var getIteratorDirect = require('../internals/get-iterator-direct'); |
| var getIteratorMethod = require('../internals/get-iterator-method'); |
| var getMethod = require('../internals/get-method'); |
| var getBuiltIn = require('../internals/get-built-in'); |
| var getBuiltInPrototypeMethod = require('../internals/get-built-in-prototype-method'); |
| var wellKnownSymbol = require('../internals/well-known-symbol'); |
| var AsyncFromSyncIterator = require('../internals/async-from-sync-iterator'); |
| var toArray = require('../internals/async-iterator-iteration').toArray; |
|
|
| var ASYNC_ITERATOR = wellKnownSymbol('asyncIterator'); |
| var arrayIterator = uncurryThis(getBuiltInPrototypeMethod('Array', 'values')); |
| var arrayIteratorNext = uncurryThis(arrayIterator([]).next); |
|
|
| var safeArrayIterator = function () { |
| return new SafeArrayIterator(this); |
| }; |
|
|
| var SafeArrayIterator = function (O) { |
| this.iterator = arrayIterator(O); |
| }; |
|
|
| SafeArrayIterator.prototype.next = function () { |
| return arrayIteratorNext(this.iterator); |
| }; |
|
|
| |
| |
| module.exports = function fromAsync(items ) { |
| var C = this; |
| var argumentsLength = arguments.length; |
| var mapfn = argumentsLength > 1 ? arguments[1] : undefined; |
| var thisArg = argumentsLength > 2 ? arguments[2] : undefined; |
| return new (getBuiltIn('Promise'))(function (resolve) { |
| if (mapfn !== undefined) mapfn = bind(mapfn, thisArg); |
| var usingAsyncIterator = getMethod(items, ASYNC_ITERATOR); |
| var usingSyncIterator = usingAsyncIterator ? undefined : getIteratorMethod(items) || safeArrayIterator; |
| var A = isConstructor(C) ? new C() : []; |
| var iterator = usingAsyncIterator |
| ? getAsyncIterator(items, usingAsyncIterator) |
| : new AsyncFromSyncIterator(getIteratorDirect(getIterator(items, usingSyncIterator))); |
| resolve(toArray(iterator, mapfn, A)); |
| }); |
| }; |
|
|