IterableToArrayLike.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. 'use strict';
  2. var callBound = require('call-bind/callBound');
  3. var $arrayPush = callBound('Array.prototype.push');
  4. var getIteratorMethod = require('../helpers/getIteratorMethod');
  5. var AdvanceStringIndex = require('./AdvanceStringIndex');
  6. var GetIterator = require('./GetIterator');
  7. var GetMethod = require('./GetMethod');
  8. var IsArray = require('./IsArray');
  9. var IteratorStep = require('./IteratorStep');
  10. var IteratorValue = require('./IteratorValue');
  11. var ToObject = require('./ToObject');
  12. var Type = require('./Type');
  13. var ES = {
  14. AdvanceStringIndex: AdvanceStringIndex,
  15. GetMethod: GetMethod,
  16. IsArray: IsArray,
  17. Type: Type
  18. };
  19. // https://262.ecma-international.org/7.0/#sec-iterabletoarraylike
  20. module.exports = function IterableToArrayLike(items) {
  21. var usingIterator = getIteratorMethod(ES, items);
  22. if (typeof usingIterator !== 'undefined') {
  23. var iterator = GetIterator(items, usingIterator);
  24. var values = [];
  25. var next = true;
  26. while (next) {
  27. next = IteratorStep(iterator);
  28. if (next) {
  29. var nextValue = IteratorValue(next);
  30. $arrayPush(values, nextValue);
  31. }
  32. }
  33. return values;
  34. }
  35. return ToObject(items);
  36. };