'use strict'; var callBound = require('call-bound'); var safeRegexTest = require('safe-regex-test'); var isFnRegex = safeRegexTest(/^\s*(?:function)?\*/); var hasToStringTag = require('has-tostringtag/shams')(); var getProto = require('get-proto'); var toStr = callBound('Object.prototype.toString'); var fnToStr = callBound('Function.prototype.toString'); var getGeneratorFunction = require('generator-function'); /** @type {import('.')} */ module.exports = function isGeneratorFunction(fn) { if (typeof fn !== 'function') { return false; } if (isFnRegex(fnToStr(fn))) { return true; } if (!hasToStringTag) { var str = toStr(fn); return str === '[object GeneratorFunction]'; } if (!getProto) { return false; } var GeneratorFunction = getGeneratorFunction(); return GeneratorFunction && getProto(fn) === GeneratorFunction.prototype; };