| 'use strict'; |
| |
| var toStr = Object.prototype.toString; |
| var fnToStr = Function.prototype.toString; |
| var isFnRegex = /^\s*(?:function)?\*/; |
| var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; |
| var getProto = Object.getPrototypeOf; |
| var getGeneratorFunc = function () { // eslint-disable-line consistent-return |
| if (!hasToStringTag) { |
| return false; |
| } |
| try { |
| return Function('return function*() {}')(); |
| } catch (e) { |
| } |
| }; |
| var generatorFunc = getGeneratorFunc(); |
| var GeneratorFunction = generatorFunc ? getProto(generatorFunc) : {}; |
| |
| module.exports = function isGeneratorFunction(fn) { |
| if (typeof fn !== 'function') { |
| return false; |
| } |
| if (isFnRegex.test(fnToStr.call(fn))) { |
| return true; |
| } |
| if (!hasToStringTag) { |
| var str = toStr.call(fn); |
| return str === '[object GeneratorFunction]'; |
| } |
| return getProto(fn) === GeneratorFunction; |
| }; |