esnext.iterator.from.js 1.1 KB

12345678910111213141516171819202122232425262728
  1. // https://github.com/tc39/proposal-iterator-helpers
  2. var $ = require('../internals/export');
  3. var call = require('../internals/function-call');
  4. var toObject = require('../internals/to-object');
  5. var isPrototypeOf = require('../internals/object-is-prototype-of');
  6. var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
  7. var createIteratorProxy = require('../internals/iterator-create-proxy');
  8. var getIterator = require('../internals/get-iterator');
  9. var getIteratorDirect = require('../internals/get-iterator-direct');
  10. var getIteratorMethod = require('../internals/get-iterator-method');
  11. var IteratorProxy = createIteratorProxy(function () {
  12. return call(this.next, this.iterator);
  13. }, true);
  14. $({ target: 'Iterator', stat: true, forced: true }, {
  15. from: function from(O) {
  16. var object = toObject(O);
  17. var usingIterator = getIteratorMethod(object);
  18. var iterator;
  19. if (usingIterator) {
  20. iterator = getIterator(object, usingIterator);
  21. if (isPrototypeOf(IteratorPrototype, iterator)) return iterator;
  22. } else {
  23. iterator = object;
  24. } return new IteratorProxy(getIteratorDirect(iterator));
  25. }
  26. });