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.
29 lines
818 B
29 lines
818 B
"use strict"; |
|
|
|
/** |
|
* Returns a display name for a function |
|
* |
|
* @param {Function} func |
|
* @returns {string} |
|
*/ |
|
module.exports = function functionName(func) { |
|
if (!func) { |
|
return ""; |
|
} |
|
|
|
try { |
|
return ( |
|
func.displayName || |
|
func.name || |
|
// Use function decomposition as a last resort to get function |
|
// name. Does not rely on function decomposition to work - if it |
|
// doesn't debugging will be slightly less informative |
|
// (i.e. toString will say 'spy' rather than 'myFunc'). |
|
(String(func).match(/function ([^\s(]+)/) || [])[1] |
|
); |
|
} catch (e) { |
|
// Stringify may fail and we might get an exception, as a last-last |
|
// resort fall back to empty string. |
|
return ""; |
|
} |
|
};
|
|
|