UNPKG

core-js

Version:
50 lines (44 loc) 2.26 kB
'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); }; // `Array.fromAsync` method implementation // https://github.com/tc39/proposal-array-from-async module.exports = function fromAsync(items /* , mapfn = undefined, thisArg = undefined */) { 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)); }); };