@honeybadger-io/vue 4.9.2 → 4.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,12 +13,13 @@ var classify = function (str) { return str
13
13
  var ANONYMOUS_COMPONENT = '<Anonymous>';
14
14
  var ROOT_COMPONENT = '<Root>';
15
15
 
16
- var formatComponentName = function (vm, includeFile) {
16
+ var formatComponentName = function (vm, includeFile, isVue3Vm) {
17
17
  if (!vm) {
18
18
  return ANONYMOUS_COMPONENT
19
19
  }
20
20
 
21
- if (vm.$root === vm) {
21
+ // no need to check for root in vue3, better to show name of component, even if $root
22
+ if (!isVue3Vm && vm.$root === vm) {
22
23
  return ROOT_COMPONENT
23
24
  }
24
25
 
@@ -27,7 +28,8 @@ var formatComponentName = function (vm, includeFile) {
27
28
  return ANONYMOUS_COMPONENT
28
29
  }
29
30
 
30
- var name = options.name || options._componentTag;
31
+ // __name found in vue3
32
+ var name = options.name || options._componentTag || options.__name;
31
33
  var file = options.__file;
32
34
  if (!name && file) {
33
35
  var match = file.match(/([^/\\]+)\.vue$/);
@@ -50,12 +52,16 @@ var repeat = function (str, n) {
50
52
  return res
51
53
  };
52
54
 
55
+ var isVue3Vm = function (vm) { return !!(vm && vm.__isVue); };
56
+ var isVue2Vm = function (vm) { return !!(vm && vm._isVue); };
57
+
53
58
  var generateComponentTrace = function (vm) {
54
- if (vm && (vm.__isVue || vm._isVue) && vm.$parent) {
59
+ var vue3Vm = isVue3Vm(vm);
60
+ if ((vue3Vm || isVue2Vm(vm)) && vm.$parent) {
55
61
  var tree = [];
56
62
  var currentRecursiveSequence = 0;
57
63
  while (vm) {
58
- if (tree.length > 0) {
64
+ if (!vue3Vm && tree.length > 0) {
59
65
  var last = tree[tree.length - 1];
60
66
  if (last.constructor === vm.constructor) {
61
67
  currentRecursiveSequence++;
@@ -71,11 +77,11 @@ var generateComponentTrace = function (vm) {
71
77
  }
72
78
  return '\n\nfound in\n\n' + tree
73
79
  .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
74
- ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
75
- : formatComponentName(vm))); })
80
+ ? ((formatComponentName(vm[0], true, vue3Vm)) + "... (" + (vm[1]) + " recursive calls)")
81
+ : formatComponentName(vm, true, vue3Vm))); })
76
82
  .join('\n')
77
83
  } else {
78
- return ("\n\n(found in " + (formatComponentName(vm)) + ")")
84
+ return ("\n\n(found in " + (formatComponentName(vm, true, vue3Vm)) + ")")
79
85
  }
80
86
  };
81
87
 
@@ -1 +1 @@
1
- {"version":3,"file":"honeybadger-vue.esm.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was originally taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.\n * The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = str => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nconst ANONYMOUS_COMPONENT = '<Anonymous>'\nconst ROOT_COMPONENT = '<Root>'\n\nconst formatComponentName = (vm, includeFile) => {\n if (!vm) {\n return ANONYMOUS_COMPONENT\n }\n\n if (vm.$root === vm) {\n return ROOT_COMPONENT\n }\n\n const options = vm.$options\n if (!options) {\n return ANONYMOUS_COMPONENT\n }\n\n let name = options.name || options._componentTag\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nconst repeat = (str, n) => {\n let res = ''\n while (n) {\n if (n % 2 === 1) res += str\n if (n > 1) str += str\n n >>= 1\n }\n return res\n}\n\nexport const generateComponentTrace = vm => {\n if (vm && (vm.__isVue || vm._isVue) && vm.$parent) {\n const tree = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (tree.length > 0) {\n const last = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : repeat(' ', 5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n : formatComponentName(vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm)})`\n }\n}\n","import { generateComponentTrace } from './vue-debug'\n\nexport function logError (app, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (app.config.warnHandler) {\n app.config.warnHandler.call(null, message, vm, trace)\n } else {\n console.error(`[Vue warn]: ${message}${trace}`)\n }\n}\n","import Honeybadger from '@honeybadger-io/js'\nimport { logError } from './error-logging'\n\nfunction shouldLogError (app, options) {\n if (app.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const hasProcess = typeof process !== 'undefined'\n const isDebug = options.debug || (hasProcess && process.env.NODE_ENV !== 'production')\n return hasConsole && isDebug\n}\n\nfunction extractContext (vm) {\n const options = vm.$options || {}\n const name = options.name || options._componentTag\n const file = options.__file\n const parentName = vm.$parent && vm.$parent.$options ? vm.$parent.$options.name : undefined\n\n // Vue2 - $options.propsData\n // Vue3 - $props\n const props = options.propsData || vm.$props\n\n return {\n isRoot: vm.$root === vm,\n name: name,\n props,\n parentName: parentName,\n file: file\n }\n}\n\nfunction install(vue, options) {\n if (options.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n vue.$honeybadger = honeybadger\n\n // vue 2 support -> make available for all components\n if (vue.prototype) {\n vue.prototype.$honeybadger = honeybadger\n }\n\n if (vue.config && vue.config.globalProperties) {\n // vue 3 support -> make available for all components\n vue.config.globalProperties.$honeybadger = honeybadger\n }\n const chainedErrorHandler = vue.config.errorHandler\n vue.config.errorHandler = (error, vm, info) => {\n const metadata = { context: { vm: extractContext(vm), info: info } }\n honeybadger.notify(error, metadata)\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(vue, error, vm, info)\n }\n\n if (shouldLogError(vue, options)) {\n logError(vue, error, vm, info)\n }\n }\n}\n\nexport default {\n install\n}\n"],"names":["const","let"],"mappings":"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"}
1
+ {"version":3,"file":"honeybadger-vue.esm.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was originally taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.\n * The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = str => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nconst ANONYMOUS_COMPONENT = '<Anonymous>'\nconst ROOT_COMPONENT = '<Root>'\n\nconst formatComponentName = (vm, includeFile, isVue3Vm) => {\n if (!vm) {\n return ANONYMOUS_COMPONENT\n }\n\n // no need to check for root in vue3, better to show name of component, even if $root\n if (!isVue3Vm && vm.$root === vm) {\n return ROOT_COMPONENT\n }\n\n const options = vm.$options\n if (!options) {\n return ANONYMOUS_COMPONENT\n }\n\n // __name found in vue3\n let name = options.name || options._componentTag || options.__name\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nconst repeat = (str, n) => {\n let res = ''\n while (n) {\n if (n % 2 === 1) res += str\n if (n > 1) str += str\n n >>= 1\n }\n return res\n}\n\nconst isVue3Vm = vm => !!(vm && vm.__isVue)\nconst isVue2Vm = vm => !!(vm && vm._isVue)\n\nexport const generateComponentTrace = vm => {\n const vue3Vm = isVue3Vm(vm)\n if ((vue3Vm || isVue2Vm(vm)) && vm.$parent) {\n const tree = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (!vue3Vm && tree.length > 0) {\n const last = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : repeat(' ', 5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0], true, vue3Vm)}... (${vm[1]} recursive calls)`\n : formatComponentName(vm, true, vue3Vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm, true, vue3Vm)})`\n }\n}\n","import { generateComponentTrace } from './vue-debug'\n\nexport function logError (app, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (app.config.warnHandler) {\n app.config.warnHandler.call(null, message, vm, trace)\n } else {\n console.error(`[Vue warn]: ${message}${trace}`)\n }\n}\n","import Honeybadger from '@honeybadger-io/js'\nimport { logError } from './error-logging'\n\nfunction shouldLogError (app, options) {\n if (app.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const hasProcess = typeof process !== 'undefined'\n const isDebug = options.debug || (hasProcess && process.env.NODE_ENV !== 'production')\n return hasConsole && isDebug\n}\n\nfunction extractContext (vm) {\n const options = vm.$options || {}\n const name = options.name || options._componentTag\n const file = options.__file\n const parentName = vm.$parent && vm.$parent.$options ? vm.$parent.$options.name : undefined\n\n // Vue2 - $options.propsData\n // Vue3 - $props\n const props = options.propsData || vm.$props\n\n return {\n isRoot: vm.$root === vm,\n name: name,\n props,\n parentName: parentName,\n file: file\n }\n}\n\nfunction install(vue, options) {\n if (options.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n vue.$honeybadger = honeybadger\n\n // vue 2 support -> make available for all components\n if (vue.prototype) {\n vue.prototype.$honeybadger = honeybadger\n }\n\n if (vue.config && vue.config.globalProperties) {\n // vue 3 support -> make available for all components\n vue.config.globalProperties.$honeybadger = honeybadger\n }\n const chainedErrorHandler = vue.config.errorHandler\n vue.config.errorHandler = (error, vm, info) => {\n const metadata = { context: { vm: extractContext(vm), info: info } }\n honeybadger.notify(error, metadata)\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(vue, error, vm, info)\n }\n\n if (shouldLogError(vue, options)) {\n logError(vue, error, vm, info)\n }\n }\n}\n\nexport default {\n install\n}\n"],"names":["const","let"],"mappings":"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"}
@@ -18,12 +18,13 @@ var HoneybadgerVue = (function (exports, Honeybadger) {
18
18
  var ANONYMOUS_COMPONENT = '<Anonymous>';
19
19
  var ROOT_COMPONENT = '<Root>';
20
20
 
21
- var formatComponentName = function (vm, includeFile) {
21
+ var formatComponentName = function (vm, includeFile, isVue3Vm) {
22
22
  if (!vm) {
23
23
  return ANONYMOUS_COMPONENT
24
24
  }
25
25
 
26
- if (vm.$root === vm) {
26
+ // no need to check for root in vue3, better to show name of component, even if $root
27
+ if (!isVue3Vm && vm.$root === vm) {
27
28
  return ROOT_COMPONENT
28
29
  }
29
30
 
@@ -32,7 +33,8 @@ var HoneybadgerVue = (function (exports, Honeybadger) {
32
33
  return ANONYMOUS_COMPONENT
33
34
  }
34
35
 
35
- var name = options.name || options._componentTag;
36
+ // __name found in vue3
37
+ var name = options.name || options._componentTag || options.__name;
36
38
  var file = options.__file;
37
39
  if (!name && file) {
38
40
  var match = file.match(/([^/\\]+)\.vue$/);
@@ -55,12 +57,16 @@ var HoneybadgerVue = (function (exports, Honeybadger) {
55
57
  return res
56
58
  };
57
59
 
60
+ var isVue3Vm = function (vm) { return !!(vm && vm.__isVue); };
61
+ var isVue2Vm = function (vm) { return !!(vm && vm._isVue); };
62
+
58
63
  var generateComponentTrace = function (vm) {
59
- if (vm && (vm.__isVue || vm._isVue) && vm.$parent) {
64
+ var vue3Vm = isVue3Vm(vm);
65
+ if ((vue3Vm || isVue2Vm(vm)) && vm.$parent) {
60
66
  var tree = [];
61
67
  var currentRecursiveSequence = 0;
62
68
  while (vm) {
63
- if (tree.length > 0) {
69
+ if (!vue3Vm && tree.length > 0) {
64
70
  var last = tree[tree.length - 1];
65
71
  if (last.constructor === vm.constructor) {
66
72
  currentRecursiveSequence++;
@@ -76,11 +82,11 @@ var HoneybadgerVue = (function (exports, Honeybadger) {
76
82
  }
77
83
  return '\n\nfound in\n\n' + tree
78
84
  .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
79
- ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
80
- : formatComponentName(vm))); })
85
+ ? ((formatComponentName(vm[0], true, vue3Vm)) + "... (" + (vm[1]) + " recursive calls)")
86
+ : formatComponentName(vm, true, vue3Vm))); })
81
87
  .join('\n')
82
88
  } else {
83
- return ("\n\n(found in " + (formatComponentName(vm)) + ")")
89
+ return ("\n\n(found in " + (formatComponentName(vm, true, vue3Vm)) + ")")
84
90
  }
85
91
  };
86
92
 
@@ -1 +1 @@
1
- {"version":3,"file":"honeybadger-vue.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was originally taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.\n * The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = str => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nconst ANONYMOUS_COMPONENT = '<Anonymous>'\nconst ROOT_COMPONENT = '<Root>'\n\nconst formatComponentName = (vm, includeFile) => {\n if (!vm) {\n return ANONYMOUS_COMPONENT\n }\n\n if (vm.$root === vm) {\n return ROOT_COMPONENT\n }\n\n const options = vm.$options\n if (!options) {\n return ANONYMOUS_COMPONENT\n }\n\n let name = options.name || options._componentTag\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nconst repeat = (str, n) => {\n let res = ''\n while (n) {\n if (n % 2 === 1) res += str\n if (n > 1) str += str\n n >>= 1\n }\n return res\n}\n\nexport const generateComponentTrace = vm => {\n if (vm && (vm.__isVue || vm._isVue) && vm.$parent) {\n const tree = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (tree.length > 0) {\n const last = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : repeat(' ', 5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n : formatComponentName(vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm)})`\n }\n}\n","import { generateComponentTrace } from './vue-debug'\n\nexport function logError (app, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (app.config.warnHandler) {\n app.config.warnHandler.call(null, message, vm, trace)\n } else {\n console.error(`[Vue warn]: ${message}${trace}`)\n }\n}\n","import Honeybadger from '@honeybadger-io/js'\nimport { logError } from './error-logging'\n\nfunction shouldLogError (app, options) {\n if (app.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const hasProcess = typeof process !== 'undefined'\n const isDebug = options.debug || (hasProcess && process.env.NODE_ENV !== 'production')\n return hasConsole && isDebug\n}\n\nfunction extractContext (vm) {\n const options = vm.$options || {}\n const name = options.name || options._componentTag\n const file = options.__file\n const parentName = vm.$parent && vm.$parent.$options ? vm.$parent.$options.name : undefined\n\n // Vue2 - $options.propsData\n // Vue3 - $props\n const props = options.propsData || vm.$props\n\n return {\n isRoot: vm.$root === vm,\n name: name,\n props,\n parentName: parentName,\n file: file\n }\n}\n\nfunction install(vue, options) {\n if (options.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n vue.$honeybadger = honeybadger\n\n // vue 2 support -> make available for all components\n if (vue.prototype) {\n vue.prototype.$honeybadger = honeybadger\n }\n\n if (vue.config && vue.config.globalProperties) {\n // vue 3 support -> make available for all components\n vue.config.globalProperties.$honeybadger = honeybadger\n }\n const chainedErrorHandler = vue.config.errorHandler\n vue.config.errorHandler = (error, vm, info) => {\n const metadata = { context: { vm: extractContext(vm), info: info } }\n honeybadger.notify(error, metadata)\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(vue, error, vm, info)\n }\n\n if (shouldLogError(vue, options)) {\n logError(vue, error, vm, info)\n }\n }\n}\n\nexport default {\n install\n}\n"],"names":["const","let","Honeybadger"],"mappings":"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"}
1
+ {"version":3,"file":"honeybadger-vue.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was originally taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.\n * The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = str => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nconst ANONYMOUS_COMPONENT = '<Anonymous>'\nconst ROOT_COMPONENT = '<Root>'\n\nconst formatComponentName = (vm, includeFile, isVue3Vm) => {\n if (!vm) {\n return ANONYMOUS_COMPONENT\n }\n\n // no need to check for root in vue3, better to show name of component, even if $root\n if (!isVue3Vm && vm.$root === vm) {\n return ROOT_COMPONENT\n }\n\n const options = vm.$options\n if (!options) {\n return ANONYMOUS_COMPONENT\n }\n\n // __name found in vue3\n let name = options.name || options._componentTag || options.__name\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nconst repeat = (str, n) => {\n let res = ''\n while (n) {\n if (n % 2 === 1) res += str\n if (n > 1) str += str\n n >>= 1\n }\n return res\n}\n\nconst isVue3Vm = vm => !!(vm && vm.__isVue)\nconst isVue2Vm = vm => !!(vm && vm._isVue)\n\nexport const generateComponentTrace = vm => {\n const vue3Vm = isVue3Vm(vm)\n if ((vue3Vm || isVue2Vm(vm)) && vm.$parent) {\n const tree = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (!vue3Vm && tree.length > 0) {\n const last = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : repeat(' ', 5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0], true, vue3Vm)}... (${vm[1]} recursive calls)`\n : formatComponentName(vm, true, vue3Vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm, true, vue3Vm)})`\n }\n}\n","import { generateComponentTrace } from './vue-debug'\n\nexport function logError (app, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (app.config.warnHandler) {\n app.config.warnHandler.call(null, message, vm, trace)\n } else {\n console.error(`[Vue warn]: ${message}${trace}`)\n }\n}\n","import Honeybadger from '@honeybadger-io/js'\nimport { logError } from './error-logging'\n\nfunction shouldLogError (app, options) {\n if (app.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const hasProcess = typeof process !== 'undefined'\n const isDebug = options.debug || (hasProcess && process.env.NODE_ENV !== 'production')\n return hasConsole && isDebug\n}\n\nfunction extractContext (vm) {\n const options = vm.$options || {}\n const name = options.name || options._componentTag\n const file = options.__file\n const parentName = vm.$parent && vm.$parent.$options ? vm.$parent.$options.name : undefined\n\n // Vue2 - $options.propsData\n // Vue3 - $props\n const props = options.propsData || vm.$props\n\n return {\n isRoot: vm.$root === vm,\n name: name,\n props,\n parentName: parentName,\n file: file\n }\n}\n\nfunction install(vue, options) {\n if (options.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n vue.$honeybadger = honeybadger\n\n // vue 2 support -> make available for all components\n if (vue.prototype) {\n vue.prototype.$honeybadger = honeybadger\n }\n\n if (vue.config && vue.config.globalProperties) {\n // vue 3 support -> make available for all components\n vue.config.globalProperties.$honeybadger = honeybadger\n }\n const chainedErrorHandler = vue.config.errorHandler\n vue.config.errorHandler = (error, vm, info) => {\n const metadata = { context: { vm: extractContext(vm), info: info } }\n honeybadger.notify(error, metadata)\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(vue, error, vm, info)\n }\n\n if (shouldLogError(vue, options)) {\n logError(vue, error, vm, info)\n }\n }\n}\n\nexport default {\n install\n}\n"],"names":["const","let","Honeybadger"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var HoneybadgerVue=function(n,r){"use strict";function e(n){return n&&"object"==typeof n&&"default"in n?n:{default:n}}var o=e(r),t=/(?:^|[-_])(\w)/g,a="<Anonymous>",i=function(n,r){if(!n)return a;if(n.$root===n)return"<Root>";var e=n.$options;if(!e)return a;var o=e.name||e._componentTag,i=e.__file;if(!o&&i){var u=i.match(/([^/\\]+)\.vue$/);o=u&&u[1]}return(o?"<"+(o.replace(t,(function(n){return n.toUpperCase()})).replace(/[-_]/g,"")+">"):a)+(i&&!1!==r?" at "+i:"")};function u(n,r,e,o){var t="Error in "+o+': "'+(r&&r.toString())+'"',a=e?function(n){if(n&&(n.__isVue||n._isVue)&&n.$parent){for(var r=[],e=0;n;){if(r.length>0){var o=r[r.length-1];if(o.constructor===n.constructor){e++,n=n.$parent;continue}e>0&&(r[r.length-1]=[o,e],e=0)}r.push(n),n=n.$parent}return"\n\nfound in\n\n"+r.map((function(n,r){return""+(0===r?"---\x3e ":function(n,r){for(var e="";r;)r%2==1&&(e+=n),r>1&&(n+=n),r>>=1;return e}(" ",5+2*r))+(Array.isArray(n)?i(n[0])+"... ("+n[1]+" recursive calls)":i(n))})).join("\n")}return"\n\n(found in "+i(n)+")"}(e):"";n.config.warnHandler?n.config.warnHandler.call(null,t,e,a):console.error("[Vue warn]: "+t+a)}function f(n){var r=n.$options||{},e=r.name||r._componentTag,o=r.__file,t=n.$parent&&n.$parent.$options?n.$parent.$options.name:void 0,a=r.propsData||n.$props;return{isRoot:n.$root===n,name:e,props:a,parentName:t,file:o}}var c={install:function(n,r){r.debug&&console.log("Honeybadger configured with "+r.apiKey);var e=o.default.configure(r);n.$honeybadger=e,n.prototype&&(n.prototype.$honeybadger=e),n.config&&n.config.globalProperties&&(n.config.globalProperties.$honeybadger=e);var t=n.config.errorHandler;n.config.errorHandler=function(o,a,i){var c={context:{vm:f(a),info:i}};e.notify(o,c),"function"==typeof t&&t.call(n,o,a,i),function(n,r){if(n.config.warnHandler)return!0;var e="undefined"!=typeof console,o="undefined"!=typeof process,t=r.debug||o&&"production"!==process.env.NODE_ENV;return e&&t}(n,r)&&u(n,o,a,i)}}};return n.default=c,Object.defineProperty(n,"__esModule",{value:!0}),n}({},Honeybadger);
1
+ var HoneybadgerVue=function(n,r){"use strict";function e(n){return n&&"object"==typeof n&&"default"in n?n:{default:n}}var o=e(r),t=/(?:^|[-_])(\w)/g,a="<Anonymous>",i=function(n,r,e){if(!n)return a;if(!e&&n.$root===n)return"<Root>";var o=n.$options;if(!o)return a;var i=o.name||o._componentTag||o.__name,u=o.__file;if(!i&&u){var f=u.match(/([^/\\]+)\.vue$/);i=f&&f[1]}return(i?"<"+(i.replace(t,(function(n){return n.toUpperCase()})).replace(/[-_]/g,"")+">"):a)+(u&&!1!==r?" at "+u:"")};function u(n,r,e,o){var t="Error in "+o+': "'+(r&&r.toString())+'"',a=e?function(n){var r=function(n){return!(!n||!n.__isVue)}(n);if((r||function(n){return!(!n||!n._isVue)}(n))&&n.$parent){for(var e=[],o=0;n;){if(!r&&e.length>0){var t=e[e.length-1];if(t.constructor===n.constructor){o++,n=n.$parent;continue}o>0&&(e[e.length-1]=[t,o],o=0)}e.push(n),n=n.$parent}return"\n\nfound in\n\n"+e.map((function(n,e){return""+(0===e?"---\x3e ":function(n,r){for(var e="";r;)r%2==1&&(e+=n),r>1&&(n+=n),r>>=1;return e}(" ",5+2*e))+(Array.isArray(n)?i(n[0],!0,r)+"... ("+n[1]+" recursive calls)":i(n,!0,r))})).join("\n")}return"\n\n(found in "+i(n,!0,r)+")"}(e):"";n.config.warnHandler?n.config.warnHandler.call(null,t,e,a):console.error("[Vue warn]: "+t+a)}function f(n){var r=n.$options||{},e=r.name||r._componentTag,o=r.__file,t=n.$parent&&n.$parent.$options?n.$parent.$options.name:void 0,a=r.propsData||n.$props;return{isRoot:n.$root===n,name:e,props:a,parentName:t,file:o}}var c={install:function(n,r){r.debug&&console.log("Honeybadger configured with "+r.apiKey);var e=o.default.configure(r);n.$honeybadger=e,n.prototype&&(n.prototype.$honeybadger=e),n.config&&n.config.globalProperties&&(n.config.globalProperties.$honeybadger=e);var t=n.config.errorHandler;n.config.errorHandler=function(o,a,i){var c={context:{vm:f(a),info:i}};e.notify(o,c),"function"==typeof t&&t.call(n,o,a,i),function(n,r){if(n.config.warnHandler)return!0;var e="undefined"!=typeof console,o="undefined"!=typeof process,t=r.debug||o&&"production"!==process.env.NODE_ENV;return e&&t}(n,r)&&u(n,o,a,i)}}};return n.default=c,Object.defineProperty(n,"__esModule",{value:!0}),n}({},Honeybadger);
2
2
  //# sourceMappingURL=honeybadger-vue.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"honeybadger-vue.min.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was originally taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.\n * The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = str => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nconst ANONYMOUS_COMPONENT = '<Anonymous>'\nconst ROOT_COMPONENT = '<Root>'\n\nconst formatComponentName = (vm, includeFile) => {\n if (!vm) {\n return ANONYMOUS_COMPONENT\n }\n\n if (vm.$root === vm) {\n return ROOT_COMPONENT\n }\n\n const options = vm.$options\n if (!options) {\n return ANONYMOUS_COMPONENT\n }\n\n let name = options.name || options._componentTag\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nconst repeat = (str, n) => {\n let res = ''\n while (n) {\n if (n % 2 === 1) res += str\n if (n > 1) str += str\n n >>= 1\n }\n return res\n}\n\nexport const generateComponentTrace = vm => {\n if (vm && (vm.__isVue || vm._isVue) && vm.$parent) {\n const tree = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (tree.length > 0) {\n const last = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : repeat(' ', 5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n : formatComponentName(vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm)})`\n }\n}\n","import { generateComponentTrace } from './vue-debug'\n\nexport function logError (app, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (app.config.warnHandler) {\n app.config.warnHandler.call(null, message, vm, trace)\n } else {\n console.error(`[Vue warn]: ${message}${trace}`)\n }\n}\n","import Honeybadger from '@honeybadger-io/js'\nimport { logError } from './error-logging'\n\nfunction shouldLogError (app, options) {\n if (app.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const hasProcess = typeof process !== 'undefined'\n const isDebug = options.debug || (hasProcess && process.env.NODE_ENV !== 'production')\n return hasConsole && isDebug\n}\n\nfunction extractContext (vm) {\n const options = vm.$options || {}\n const name = options.name || options._componentTag\n const file = options.__file\n const parentName = vm.$parent && vm.$parent.$options ? vm.$parent.$options.name : undefined\n\n // Vue2 - $options.propsData\n // Vue3 - $props\n const props = options.propsData || vm.$props\n\n return {\n isRoot: vm.$root === vm,\n name: name,\n props,\n parentName: parentName,\n file: file\n }\n}\n\nfunction install(vue, options) {\n if (options.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n vue.$honeybadger = honeybadger\n\n // vue 2 support -> make available for all components\n if (vue.prototype) {\n vue.prototype.$honeybadger = honeybadger\n }\n\n if (vue.config && vue.config.globalProperties) {\n // vue 3 support -> make available for all components\n vue.config.globalProperties.$honeybadger = honeybadger\n }\n const chainedErrorHandler = vue.config.errorHandler\n vue.config.errorHandler = (error, vm, info) => {\n const metadata = { context: { vm: extractContext(vm), info: info } }\n honeybadger.notify(error, metadata)\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(vue, error, vm, info)\n }\n\n if (shouldLogError(vue, options)) {\n logError(vue, error, vm, info)\n }\n }\n}\n\nexport default {\n install\n}\n"],"names":["classifyRE","ANONYMOUS_COMPONENT","formatComponentName","vm","includeFile","$root","const","options","$options","let","name","_componentTag","file","__file","match","replace","c","toUpperCase","logError","app","error","info","message","toString","trace","__isVue","_isVue","$parent","tree","currentRecursiveSequence","length","last","constructor","push","map","i","str","n","res","repeat","Array","isArray","join","generateComponentTrace","config","warnHandler","call","console","extractContext","parentName","undefined","props","propsData","$props","isRoot","index","install","vue","debug","log","honeybadger","Honeybadger","configure","$honeybadger","prototype","globalProperties","chainedErrorHandler","errorHandler","metadata","context","notify","hasConsole","hasProcess","process","isDebug","env","NODE_ENV","shouldLogError"],"mappings":"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"}
1
+ {"version":3,"file":"honeybadger-vue.min.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was originally taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.\n * The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = str => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nconst ANONYMOUS_COMPONENT = '<Anonymous>'\nconst ROOT_COMPONENT = '<Root>'\n\nconst formatComponentName = (vm, includeFile, isVue3Vm) => {\n if (!vm) {\n return ANONYMOUS_COMPONENT\n }\n\n // no need to check for root in vue3, better to show name of component, even if $root\n if (!isVue3Vm && vm.$root === vm) {\n return ROOT_COMPONENT\n }\n\n const options = vm.$options\n if (!options) {\n return ANONYMOUS_COMPONENT\n }\n\n // __name found in vue3\n let name = options.name || options._componentTag || options.__name\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nconst repeat = (str, n) => {\n let res = ''\n while (n) {\n if (n % 2 === 1) res += str\n if (n > 1) str += str\n n >>= 1\n }\n return res\n}\n\nconst isVue3Vm = vm => !!(vm && vm.__isVue)\nconst isVue2Vm = vm => !!(vm && vm._isVue)\n\nexport const generateComponentTrace = vm => {\n const vue3Vm = isVue3Vm(vm)\n if ((vue3Vm || isVue2Vm(vm)) && vm.$parent) {\n const tree = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (!vue3Vm && tree.length > 0) {\n const last = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : repeat(' ', 5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0], true, vue3Vm)}... (${vm[1]} recursive calls)`\n : formatComponentName(vm, true, vue3Vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm, true, vue3Vm)})`\n }\n}\n","import { generateComponentTrace } from './vue-debug'\n\nexport function logError (app, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (app.config.warnHandler) {\n app.config.warnHandler.call(null, message, vm, trace)\n } else {\n console.error(`[Vue warn]: ${message}${trace}`)\n }\n}\n","import Honeybadger from '@honeybadger-io/js'\nimport { logError } from './error-logging'\n\nfunction shouldLogError (app, options) {\n if (app.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const hasProcess = typeof process !== 'undefined'\n const isDebug = options.debug || (hasProcess && process.env.NODE_ENV !== 'production')\n return hasConsole && isDebug\n}\n\nfunction extractContext (vm) {\n const options = vm.$options || {}\n const name = options.name || options._componentTag\n const file = options.__file\n const parentName = vm.$parent && vm.$parent.$options ? vm.$parent.$options.name : undefined\n\n // Vue2 - $options.propsData\n // Vue3 - $props\n const props = options.propsData || vm.$props\n\n return {\n isRoot: vm.$root === vm,\n name: name,\n props,\n parentName: parentName,\n file: file\n }\n}\n\nfunction install(vue, options) {\n if (options.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n vue.$honeybadger = honeybadger\n\n // vue 2 support -> make available for all components\n if (vue.prototype) {\n vue.prototype.$honeybadger = honeybadger\n }\n\n if (vue.config && vue.config.globalProperties) {\n // vue 3 support -> make available for all components\n vue.config.globalProperties.$honeybadger = honeybadger\n }\n const chainedErrorHandler = vue.config.errorHandler\n vue.config.errorHandler = (error, vm, info) => {\n const metadata = { context: { vm: extractContext(vm), info: info } }\n honeybadger.notify(error, metadata)\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(vue, error, vm, info)\n }\n\n if (shouldLogError(vue, options)) {\n logError(vue, error, vm, info)\n }\n }\n}\n\nexport default {\n install\n}\n"],"names":["classifyRE","ANONYMOUS_COMPONENT","formatComponentName","vm","includeFile","isVue3Vm","$root","const","options","$options","let","name","_componentTag","__name","file","__file","match","replace","c","toUpperCase","logError","app","error","info","message","toString","trace","vue3Vm","__isVue","_isVue","isVue2Vm","$parent","tree","currentRecursiveSequence","length","last","constructor","push","map","i","str","n","res","repeat","Array","isArray","join","generateComponentTrace","config","warnHandler","call","console","extractContext","parentName","undefined","props","propsData","$props","isRoot","index","install","vue","debug","log","honeybadger","Honeybadger","configure","$honeybadger","prototype","globalProperties","chainedErrorHandler","errorHandler","metadata","context","notify","hasConsole","hasProcess","process","isDebug","env","NODE_ENV","shouldLogError"],"mappings":"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"}
@@ -21,12 +21,13 @@
21
21
  var ANONYMOUS_COMPONENT = '<Anonymous>';
22
22
  var ROOT_COMPONENT = '<Root>';
23
23
 
24
- var formatComponentName = function (vm, includeFile) {
24
+ var formatComponentName = function (vm, includeFile, isVue3Vm) {
25
25
  if (!vm) {
26
26
  return ANONYMOUS_COMPONENT
27
27
  }
28
28
 
29
- if (vm.$root === vm) {
29
+ // no need to check for root in vue3, better to show name of component, even if $root
30
+ if (!isVue3Vm && vm.$root === vm) {
30
31
  return ROOT_COMPONENT
31
32
  }
32
33
 
@@ -35,7 +36,8 @@
35
36
  return ANONYMOUS_COMPONENT
36
37
  }
37
38
 
38
- var name = options.name || options._componentTag;
39
+ // __name found in vue3
40
+ var name = options.name || options._componentTag || options.__name;
39
41
  var file = options.__file;
40
42
  if (!name && file) {
41
43
  var match = file.match(/([^/\\]+)\.vue$/);
@@ -58,12 +60,16 @@
58
60
  return res
59
61
  };
60
62
 
63
+ var isVue3Vm = function (vm) { return !!(vm && vm.__isVue); };
64
+ var isVue2Vm = function (vm) { return !!(vm && vm._isVue); };
65
+
61
66
  var generateComponentTrace = function (vm) {
62
- if (vm && (vm.__isVue || vm._isVue) && vm.$parent) {
67
+ var vue3Vm = isVue3Vm(vm);
68
+ if ((vue3Vm || isVue2Vm(vm)) && vm.$parent) {
63
69
  var tree = [];
64
70
  var currentRecursiveSequence = 0;
65
71
  while (vm) {
66
- if (tree.length > 0) {
72
+ if (!vue3Vm && tree.length > 0) {
67
73
  var last = tree[tree.length - 1];
68
74
  if (last.constructor === vm.constructor) {
69
75
  currentRecursiveSequence++;
@@ -79,11 +85,11 @@
79
85
  }
80
86
  return '\n\nfound in\n\n' + tree
81
87
  .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
82
- ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
83
- : formatComponentName(vm))); })
88
+ ? ((formatComponentName(vm[0], true, vue3Vm)) + "... (" + (vm[1]) + " recursive calls)")
89
+ : formatComponentName(vm, true, vue3Vm))); })
84
90
  .join('\n')
85
91
  } else {
86
- return ("\n\n(found in " + (formatComponentName(vm)) + ")")
92
+ return ("\n\n(found in " + (formatComponentName(vm, true, vue3Vm)) + ")")
87
93
  }
88
94
  };
89
95
 
@@ -1 +1 @@
1
- {"version":3,"file":"honeybadger-vue.umd.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was originally taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.\n * The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = str => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nconst ANONYMOUS_COMPONENT = '<Anonymous>'\nconst ROOT_COMPONENT = '<Root>'\n\nconst formatComponentName = (vm, includeFile) => {\n if (!vm) {\n return ANONYMOUS_COMPONENT\n }\n\n if (vm.$root === vm) {\n return ROOT_COMPONENT\n }\n\n const options = vm.$options\n if (!options) {\n return ANONYMOUS_COMPONENT\n }\n\n let name = options.name || options._componentTag\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nconst repeat = (str, n) => {\n let res = ''\n while (n) {\n if (n % 2 === 1) res += str\n if (n > 1) str += str\n n >>= 1\n }\n return res\n}\n\nexport const generateComponentTrace = vm => {\n if (vm && (vm.__isVue || vm._isVue) && vm.$parent) {\n const tree = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (tree.length > 0) {\n const last = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : repeat(' ', 5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`\n : formatComponentName(vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm)})`\n }\n}\n","import { generateComponentTrace } from './vue-debug'\n\nexport function logError (app, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (app.config.warnHandler) {\n app.config.warnHandler.call(null, message, vm, trace)\n } else {\n console.error(`[Vue warn]: ${message}${trace}`)\n }\n}\n","import Honeybadger from '@honeybadger-io/js'\nimport { logError } from './error-logging'\n\nfunction shouldLogError (app, options) {\n if (app.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const hasProcess = typeof process !== 'undefined'\n const isDebug = options.debug || (hasProcess && process.env.NODE_ENV !== 'production')\n return hasConsole && isDebug\n}\n\nfunction extractContext (vm) {\n const options = vm.$options || {}\n const name = options.name || options._componentTag\n const file = options.__file\n const parentName = vm.$parent && vm.$parent.$options ? vm.$parent.$options.name : undefined\n\n // Vue2 - $options.propsData\n // Vue3 - $props\n const props = options.propsData || vm.$props\n\n return {\n isRoot: vm.$root === vm,\n name: name,\n props,\n parentName: parentName,\n file: file\n }\n}\n\nfunction install(vue, options) {\n if (options.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n vue.$honeybadger = honeybadger\n\n // vue 2 support -> make available for all components\n if (vue.prototype) {\n vue.prototype.$honeybadger = honeybadger\n }\n\n if (vue.config && vue.config.globalProperties) {\n // vue 3 support -> make available for all components\n vue.config.globalProperties.$honeybadger = honeybadger\n }\n const chainedErrorHandler = vue.config.errorHandler\n vue.config.errorHandler = (error, vm, info) => {\n const metadata = { context: { vm: extractContext(vm), info: info } }\n honeybadger.notify(error, metadata)\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(vue, error, vm, info)\n }\n\n if (shouldLogError(vue, options)) {\n logError(vue, error, vm, info)\n }\n }\n}\n\nexport default {\n install\n}\n"],"names":["const","let","Honeybadger"],"mappings":"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"}
1
+ {"version":3,"file":"honeybadger-vue.umd.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was originally taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.\n * The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.\n */\n\nconst classifyRE = /(?:^|[-_])(\\w)/g\nconst classify = str => str\n .replace(classifyRE, c => c.toUpperCase())\n .replace(/[-_]/g, '')\n\nconst ANONYMOUS_COMPONENT = '<Anonymous>'\nconst ROOT_COMPONENT = '<Root>'\n\nconst formatComponentName = (vm, includeFile, isVue3Vm) => {\n if (!vm) {\n return ANONYMOUS_COMPONENT\n }\n\n // no need to check for root in vue3, better to show name of component, even if $root\n if (!isVue3Vm && vm.$root === vm) {\n return ROOT_COMPONENT\n }\n\n const options = vm.$options\n if (!options) {\n return ANONYMOUS_COMPONENT\n }\n\n // __name found in vue3\n let name = options.name || options._componentTag || options.__name\n const file = options.__file\n if (!name && file) {\n const match = file.match(/([^/\\\\]+)\\.vue$/)\n name = match && match[1]\n }\n\n return (\n (name ? `<${classify(name)}>` : ANONYMOUS_COMPONENT) +\n (file && includeFile !== false ? ` at ${file}` : '')\n )\n}\n\nconst repeat = (str, n) => {\n let res = ''\n while (n) {\n if (n % 2 === 1) res += str\n if (n > 1) str += str\n n >>= 1\n }\n return res\n}\n\nconst isVue3Vm = vm => !!(vm && vm.__isVue)\nconst isVue2Vm = vm => !!(vm && vm._isVue)\n\nexport const generateComponentTrace = vm => {\n const vue3Vm = isVue3Vm(vm)\n if ((vue3Vm || isVue2Vm(vm)) && vm.$parent) {\n const tree = []\n let currentRecursiveSequence = 0\n while (vm) {\n if (!vue3Vm && tree.length > 0) {\n const last = tree[tree.length - 1]\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++\n vm = vm.$parent\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence]\n currentRecursiveSequence = 0\n }\n }\n tree.push(vm)\n vm = vm.$parent\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map((vm, i) => `${\n i === 0 ? '---> ' : repeat(' ', 5 + i * 2)\n }${\n Array.isArray(vm)\n ? `${formatComponentName(vm[0], true, vue3Vm)}... (${vm[1]} recursive calls)`\n : formatComponentName(vm, true, vue3Vm)\n }`)\n .join('\\n')\n } else {\n return `\\n\\n(found in ${formatComponentName(vm, true, vue3Vm)})`\n }\n}\n","import { generateComponentTrace } from './vue-debug'\n\nexport function logError (app, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (app.config.warnHandler) {\n app.config.warnHandler.call(null, message, vm, trace)\n } else {\n console.error(`[Vue warn]: ${message}${trace}`)\n }\n}\n","import Honeybadger from '@honeybadger-io/js'\nimport { logError } from './error-logging'\n\nfunction shouldLogError (app, options) {\n if (app.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const hasProcess = typeof process !== 'undefined'\n const isDebug = options.debug || (hasProcess && process.env.NODE_ENV !== 'production')\n return hasConsole && isDebug\n}\n\nfunction extractContext (vm) {\n const options = vm.$options || {}\n const name = options.name || options._componentTag\n const file = options.__file\n const parentName = vm.$parent && vm.$parent.$options ? vm.$parent.$options.name : undefined\n\n // Vue2 - $options.propsData\n // Vue3 - $props\n const props = options.propsData || vm.$props\n\n return {\n isRoot: vm.$root === vm,\n name: name,\n props,\n parentName: parentName,\n file: file\n }\n}\n\nfunction install(vue, options) {\n if (options.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n vue.$honeybadger = honeybadger\n\n // vue 2 support -> make available for all components\n if (vue.prototype) {\n vue.prototype.$honeybadger = honeybadger\n }\n\n if (vue.config && vue.config.globalProperties) {\n // vue 3 support -> make available for all components\n vue.config.globalProperties.$honeybadger = honeybadger\n }\n const chainedErrorHandler = vue.config.errorHandler\n vue.config.errorHandler = (error, vm, info) => {\n const metadata = { context: { vm: extractContext(vm), info: info } }\n honeybadger.notify(error, metadata)\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(vue, error, vm, info)\n }\n\n if (shouldLogError(vue, options)) {\n logError(vue, error, vm, info)\n }\n }\n}\n\nexport default {\n install\n}\n"],"names":["const","let","Honeybadger"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@honeybadger-io/vue",
3
- "version": "4.9.2",
3
+ "version": "4.9.3",
4
4
  "license": "MIT",
5
5
  "description": "Honeybadger Vue.js client",
6
6
  "author": "Jason Truesdell <jason@yuzuten.com> (https://github.com/JasonTrue)",
@@ -42,7 +42,7 @@
42
42
  "devDependencies": {
43
43
  "@babel/plugin-transform-runtime": "^7.18.9",
44
44
  "@babel/preset-env": "^7.18.9",
45
- "@honeybadger-io/js": "^4.9.2",
45
+ "@honeybadger-io/js": "^4.9.3",
46
46
  "@vue/compiler-sfc": "^3.2.37",
47
47
  "@vue/test-utils": "^2.0.2",
48
48
  "babel-plugin-syntax-jsx": "^6.18.0",
@@ -83,5 +83,5 @@
83
83
  ]
84
84
  }
85
85
  },
86
- "gitHead": "73275221e7047ffcb43d4b9c087a8c37c6edae13"
86
+ "gitHead": "cc7afa1435f2c824a076a43d8727db0b46d91970"
87
87
  }
package/src/vue-debug.js CHANGED
@@ -11,12 +11,13 @@ const classify = str => str
11
11
  const ANONYMOUS_COMPONENT = '<Anonymous>'
12
12
  const ROOT_COMPONENT = '<Root>'
13
13
 
14
- const formatComponentName = (vm, includeFile) => {
14
+ const formatComponentName = (vm, includeFile, isVue3Vm) => {
15
15
  if (!vm) {
16
16
  return ANONYMOUS_COMPONENT
17
17
  }
18
18
 
19
- if (vm.$root === vm) {
19
+ // no need to check for root in vue3, better to show name of component, even if $root
20
+ if (!isVue3Vm && vm.$root === vm) {
20
21
  return ROOT_COMPONENT
21
22
  }
22
23
 
@@ -25,7 +26,8 @@ const formatComponentName = (vm, includeFile) => {
25
26
  return ANONYMOUS_COMPONENT
26
27
  }
27
28
 
28
- let name = options.name || options._componentTag
29
+ // __name found in vue3
30
+ let name = options.name || options._componentTag || options.__name
29
31
  const file = options.__file
30
32
  if (!name && file) {
31
33
  const match = file.match(/([^/\\]+)\.vue$/)
@@ -48,12 +50,16 @@ const repeat = (str, n) => {
48
50
  return res
49
51
  }
50
52
 
53
+ const isVue3Vm = vm => !!(vm && vm.__isVue)
54
+ const isVue2Vm = vm => !!(vm && vm._isVue)
55
+
51
56
  export const generateComponentTrace = vm => {
52
- if (vm && (vm.__isVue || vm._isVue) && vm.$parent) {
57
+ const vue3Vm = isVue3Vm(vm)
58
+ if ((vue3Vm || isVue2Vm(vm)) && vm.$parent) {
53
59
  const tree = []
54
60
  let currentRecursiveSequence = 0
55
61
  while (vm) {
56
- if (tree.length > 0) {
62
+ if (!vue3Vm && tree.length > 0) {
57
63
  const last = tree[tree.length - 1]
58
64
  if (last.constructor === vm.constructor) {
59
65
  currentRecursiveSequence++
@@ -72,11 +78,11 @@ export const generateComponentTrace = vm => {
72
78
  i === 0 ? '---> ' : repeat(' ', 5 + i * 2)
73
79
  }${
74
80
  Array.isArray(vm)
75
- ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
76
- : formatComponentName(vm)
81
+ ? `${formatComponentName(vm[0], true, vue3Vm)}... (${vm[1]} recursive calls)`
82
+ : formatComponentName(vm, true, vue3Vm)
77
83
  }`)
78
84
  .join('\n')
79
85
  } else {
80
- return `\n\n(found in ${formatComponentName(vm)})`
86
+ return `\n\n(found in ${formatComponentName(vm, true, vue3Vm)})`
81
87
  }
82
88
  }