| 'use strict'; | 
| var bind = require('../internals/function-bind-context'); | 
| var uncurryThis = require('../internals/function-uncurry-this'); | 
| var toObject = require('../internals/to-object'); | 
| 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(asyncItems /* , 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) { | 
|     var O = toObject(asyncItems); | 
|     if (mapfn !== undefined) mapfn = bind(mapfn, thisArg); | 
|     var usingAsyncIterator = getMethod(O, ASYNC_ITERATOR); | 
|     var usingSyncIterator = usingAsyncIterator ? undefined : getIteratorMethod(O) || safeArrayIterator; | 
|     var A = isConstructor(C) ? new C() : []; | 
|     var iterator = usingAsyncIterator | 
|       ? getAsyncIterator(O, usingAsyncIterator) | 
|       : new AsyncFromSyncIterator(getIteratorDirect(getIterator(O, usingSyncIterator))); | 
|     resolve(toArray(iterator, mapfn, A)); | 
|   }); | 
| }; |