esnext.iterator.from.js 936 B

12345678910111213141516171819202122
  1. var $ = require('../internals/export');
  2. var call = require('../internals/function-call');
  3. var toObject = require('../internals/to-object');
  4. var isPrototypeOf = require('../internals/object-is-prototype-of');
  5. var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
  6. var createIteratorProxy = require('../internals/iterator-create-proxy');
  7. var getIteratorFlattenable = require('../internals/get-iterator-flattenable');
  8. var IteratorProxy = createIteratorProxy(function () {
  9. return call(this.next, this.iterator);
  10. }, true);
  11. // `Iterator.from` method
  12. // https://github.com/tc39/proposal-iterator-helpers
  13. $({ target: 'Iterator', stat: true }, {
  14. from: function from(O) {
  15. var iteratorRecord = getIteratorFlattenable(typeof O == 'string' ? toObject(O) : O);
  16. return isPrototypeOf(IteratorPrototype, iteratorRecord.iterator)
  17. ? iteratorRecord.iterator
  18. : new IteratorProxy(iteratorRecord);
  19. }
  20. });