UNPKG

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