You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
44 lines
1.1 KiB
'use strict';
|
|
|
|
/* !
|
|
* Chai - getFuncName utility
|
|
* Copyright(c) 2012-2016 Jake Luer <jake@alogicalparadox.com>
|
|
* MIT Licensed
|
|
*/
|
|
|
|
/**
|
|
* ### .getFuncName(constructorFn)
|
|
*
|
|
* Returns the name of a function.
|
|
* When a non-function instance is passed, returns `null`.
|
|
* This also includes a polyfill function if `aFunc.name` is not defined.
|
|
*
|
|
* @name getFuncName
|
|
* @param {Function} funct
|
|
* @namespace Utils
|
|
* @api public
|
|
*/
|
|
|
|
var toString = Function.prototype.toString;
|
|
var functionNameMatch = /\s*function(?:\s|\s*\/\*[^(?:*\/)]+\*\/\s*)*([^\s\(\/]+)/;
|
|
function getFuncName(aFunc) {
|
|
if (typeof aFunc !== 'function') {
|
|
return null;
|
|
}
|
|
|
|
var name = '';
|
|
if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') {
|
|
// Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined
|
|
var match = toString.call(aFunc).match(functionNameMatch);
|
|
if (match) {
|
|
name = match[1];
|
|
}
|
|
} else {
|
|
// If we've got a `name` property we just use it
|
|
name = aFunc.name;
|
|
}
|
|
|
|
return name;
|
|
}
|
|
|
|
module.exports = getFuncName;
|
|
|