| 'use strict'; | 
| // https://github.com/tc39/proposal-iterator-helpers | 
| // https://github.com/tc39/proposal-array-from-async | 
| var call = require('../internals/function-call'); | 
| var aCallable = require('../internals/a-callable'); | 
| var anObject = require('../internals/an-object'); | 
| var isObject = require('../internals/is-object'); | 
| var doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer'); | 
| var getBuiltIn = require('../internals/get-built-in'); | 
| var getIteratorDirect = require('../internals/get-iterator-direct'); | 
| var closeAsyncIteration = require('../internals/async-iterator-close'); | 
|   | 
| var createMethod = function (TYPE) { | 
|   var IS_TO_ARRAY = TYPE === 0; | 
|   var IS_FOR_EACH = TYPE === 1; | 
|   var IS_EVERY = TYPE === 2; | 
|   var IS_SOME = TYPE === 3; | 
|   return function (object, fn, target) { | 
|     anObject(object); | 
|     var MAPPING = fn !== undefined; | 
|     if (MAPPING || !IS_TO_ARRAY) aCallable(fn); | 
|     var record = getIteratorDirect(object); | 
|     var Promise = getBuiltIn('Promise'); | 
|     var iterator = record.iterator; | 
|     var next = record.next; | 
|     var counter = 0; | 
|   | 
|     return new Promise(function (resolve, reject) { | 
|       var ifAbruptCloseAsyncIterator = function (error) { | 
|         closeAsyncIteration(iterator, reject, error, reject); | 
|       }; | 
|   | 
|       var loop = function () { | 
|         try { | 
|           if (MAPPING) try { | 
|             doesNotExceedSafeInteger(counter); | 
|           } catch (error5) { ifAbruptCloseAsyncIterator(error5); } | 
|           Promise.resolve(anObject(call(next, iterator))).then(function (step) { | 
|             try { | 
|               if (anObject(step).done) { | 
|                 if (IS_TO_ARRAY) { | 
|                   target.length = counter; | 
|                   resolve(target); | 
|                 } else resolve(IS_SOME ? false : IS_EVERY || undefined); | 
|               } else { | 
|                 var value = step.value; | 
|                 try { | 
|                   if (MAPPING) { | 
|                     var result = fn(value, counter); | 
|   | 
|                     var handler = function ($result) { | 
|                       if (IS_FOR_EACH) { | 
|                         loop(); | 
|                       } else if (IS_EVERY) { | 
|                         $result ? loop() : closeAsyncIteration(iterator, resolve, false, reject); | 
|                       } else if (IS_TO_ARRAY) { | 
|                         try { | 
|                           target[counter++] = $result; | 
|                           loop(); | 
|                         } catch (error4) { ifAbruptCloseAsyncIterator(error4); } | 
|                       } else { | 
|                         $result ? closeAsyncIteration(iterator, resolve, IS_SOME || value, reject) : loop(); | 
|                       } | 
|                     }; | 
|   | 
|                     if (isObject(result)) Promise.resolve(result).then(handler, ifAbruptCloseAsyncIterator); | 
|                     else handler(result); | 
|                   } else { | 
|                     target[counter++] = value; | 
|                     loop(); | 
|                   } | 
|                 } catch (error3) { ifAbruptCloseAsyncIterator(error3); } | 
|               } | 
|             } catch (error2) { reject(error2); } | 
|           }, reject); | 
|         } catch (error) { reject(error); } | 
|       }; | 
|   | 
|       loop(); | 
|     }); | 
|   }; | 
| }; | 
|   | 
| module.exports = { | 
|   toArray: createMethod(0), | 
|   forEach: createMethod(1), | 
|   every: createMethod(2), | 
|   some: createMethod(3), | 
|   find: createMethod(4) | 
| }; |