diff options
Diffstat (limited to 'node_modules/is-generator-function/index.js')
| -rw-r--r-- | node_modules/is-generator-function/index.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/node_modules/is-generator-function/index.js b/node_modules/is-generator-function/index.js new file mode 100644 index 00000000..306a299c --- /dev/null +++ b/node_modules/is-generator-function/index.js @@ -0,0 +1,32 @@ +'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; +}; |
