UNPKG

1.54 kBJavaScriptView Raw
1var global = require('../internals/global');
2var shared = require('../internals/shared-store');
3var getPrototypeOf = require('../internals/object-get-prototype-of');
4var has = require('../internals/has');
5var createNonEnumerableProperty = require('../internals/create-non-enumerable-property');
6var wellKnownSymbol = require('../internals/well-known-symbol');
7var IS_PURE = require('../internals/is-pure');
8
9var USE_FUNCTION_CONSTRUCTOR = 'USE_FUNCTION_CONSTRUCTOR';
10var ASYNC_ITERATOR = wellKnownSymbol('asyncIterator');
11var AsyncIterator = global.AsyncIterator;
12var PassedAsyncIteratorPrototype = shared.AsyncIteratorPrototype;
13var AsyncIteratorPrototype, prototype;
14
15if (!IS_PURE) {
16 if (PassedAsyncIteratorPrototype) {
17 AsyncIteratorPrototype = PassedAsyncIteratorPrototype;
18 } else if (typeof AsyncIterator == 'function') {
19 AsyncIteratorPrototype = AsyncIterator.prototype;
20 } else if (shared[USE_FUNCTION_CONSTRUCTOR] || global[USE_FUNCTION_CONSTRUCTOR]) {
21 try {
22 // eslint-disable-next-line no-new-func
23 prototype = getPrototypeOf(getPrototypeOf(getPrototypeOf(Function('return async function*(){}()')())));
24 if (getPrototypeOf(prototype) === Object.prototype) AsyncIteratorPrototype = prototype;
25 } catch (error) { /* empty */ }
26 }
27}
28
29if (!AsyncIteratorPrototype) AsyncIteratorPrototype = {};
30
31if (!has(AsyncIteratorPrototype, ASYNC_ITERATOR)) {
32 createNonEnumerableProperty(AsyncIteratorPrototype, ASYNC_ITERATOR, function () {
33 return this;
34 });
35}
36
37module.exports = AsyncIteratorPrototype;