UNPKG

1.66 kBJavaScriptView Raw
1'use strict';
2// https://github.com/tc39/proposal-iterator-helpers
3var $ = require('../internals/export');
4var global = require('../internals/global');
5var anInstance = require('../internals/an-instance');
6var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
7var fails = require('../internals/fails');
8var has = require('../internals/has');
9var wellKnownSymbol = require('../internals/well-known-symbol');
10var IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;
11var IS_PURE = require('../internals/is-pure');
12
13var ITERATOR = wellKnownSymbol('iterator');
14var TO_STRING_TAG = wellKnownSymbol('toStringTag');
15
16var NativeIterator = global.Iterator;
17
18// FF56- have non-standard global helper `Iterator`
19var FORCED = IS_PURE
20 || typeof NativeIterator != 'function'
21 || NativeIterator.prototype !== IteratorPrototype
22 // FF44- non-standard `Iterator` passes previous tests
23 || !fails(function () { NativeIterator({}); });
24
25var IteratorConstructor = function Iterator() {
26 anInstance(this, IteratorConstructor);
27};
28
29if (IS_PURE) {
30 IteratorPrototype = {};
31 createNonEnumerableProperty(IteratorPrototype, ITERATOR, function () {
32 return this;
33 });
34}
35
36if (!has(IteratorPrototype, TO_STRING_TAG)) {
37 createNonEnumerableProperty(IteratorPrototype, TO_STRING_TAG, 'Iterator');
38}
39
40if (FORCED || !has(IteratorPrototype, 'constructor') || IteratorPrototype.constructor === Object) {
41 createNonEnumerableProperty(IteratorPrototype, 'constructor', IteratorConstructor);
42}
43
44IteratorConstructor.prototype = IteratorPrototype;
45
46$({ global: true, forced: FORCED }, {
47 Iterator: IteratorConstructor
48});