aboutsummaryrefslogtreecommitdiff
path: root/node_modules/@sinonjs/commons/lib/function-name.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@sinonjs/commons/lib/function-name.js')
-rw-r--r--node_modules/@sinonjs/commons/lib/function-name.js29
1 files changed, 29 insertions, 0 deletions
diff --git a/node_modules/@sinonjs/commons/lib/function-name.js b/node_modules/@sinonjs/commons/lib/function-name.js
new file mode 100644
index 0000000..199b04e
--- /dev/null
+++ b/node_modules/@sinonjs/commons/lib/function-name.js
@@ -0,0 +1,29 @@
+"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 "";
+ }
+};