| 1 | 'use strict';
|
|---|
| 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 getIteratorFlattenable = require('../internals/get-iterator-flattenable');
|
|---|
| 9 | var IS_PURE = require('../internals/is-pure');
|
|---|
| 10 |
|
|---|
| 11 | var FORCED = IS_PURE || function () {
|
|---|
| 12 | // Should not throw when an underlying iterator's `return` method is null
|
|---|
| 13 | // https://bugs.webkit.org/show_bug.cgi?id=288714
|
|---|
| 14 | try {
|
|---|
| 15 | // eslint-disable-next-line es/no-iterator -- required for testing
|
|---|
| 16 | Iterator.from({ 'return': null })['return']();
|
|---|
| 17 | } catch (error) {
|
|---|
| 18 | return true;
|
|---|
| 19 | }
|
|---|
| 20 | }();
|
|---|
| 21 |
|
|---|
| 22 | var IteratorProxy = createIteratorProxy(function () {
|
|---|
| 23 | return call(this.next, this.iterator);
|
|---|
| 24 | }, true);
|
|---|
| 25 |
|
|---|
| 26 | // `Iterator.from` method
|
|---|
| 27 | // https://tc39.es/ecma262/#sec-iterator.from
|
|---|
| 28 | $({ target: 'Iterator', stat: true, forced: FORCED }, {
|
|---|
| 29 | from: function from(O) {
|
|---|
| 30 | var iteratorRecord = getIteratorFlattenable(typeof O == 'string' ? toObject(O) : O, true);
|
|---|
| 31 | return isPrototypeOf(IteratorPrototype, iteratorRecord.iterator)
|
|---|
| 32 | ? iteratorRecord.iterator
|
|---|
| 33 | : new IteratorProxy(iteratorRecord);
|
|---|
| 34 | }
|
|---|
| 35 | });
|
|---|