| 'use strict'; |
| |
| var callBound = require('call-bound'); |
| var $arrayPush = callBound('Array.prototype.push'); |
| |
| var getIteratorMethod = require('../helpers/getIteratorMethod'); |
| var AdvanceStringIndex = require('./AdvanceStringIndex'); |
| var GetIterator = require('./GetIterator'); |
| var GetMethod = require('./GetMethod'); |
| var IsArray = require('./IsArray'); |
| var IteratorStep = require('./IteratorStep'); |
| var IteratorValue = require('./IteratorValue'); |
| var ToObject = require('./ToObject'); |
| var ES = { |
| AdvanceStringIndex: AdvanceStringIndex, |
| GetMethod: GetMethod, |
| IsArray: IsArray |
| }; |
| |
| // https://262.ecma-international.org/7.0/#sec-iterabletoarraylike |
| |
| module.exports = function IterableToArrayLike(items) { |
| var usingIterator = getIteratorMethod(ES, items); |
| if (typeof usingIterator !== 'undefined') { |
| var iterator = GetIterator(items, usingIterator); |
| var values = []; |
| var next = true; |
| while (next) { |
| next = IteratorStep(iterator); |
| if (next) { |
| var nextValue = IteratorValue(next); |
| $arrayPush(values, nextValue); |
| } |
| } |
| return values; |
| } |
| |
| return ToObject(items); |
| }; |