@honeybadger-io/vue 1.0.2 → 1.1.0
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.
- package/README.md +13 -1
- package/dist/honeybadger-vue.esm.js +105 -5
- package/dist/honeybadger-vue.esm.js.map +1 -1
- package/dist/honeybadger-vue.js +107 -7
- package/dist/honeybadger-vue.js.map +1 -1
- package/dist/honeybadger-vue.umd.js +108 -8
- package/dist/honeybadger-vue.umd.js.map +1 -1
- package/honeybadger-vue.d.ts +9 -13
- package/package.json +70 -54
- package/src/error-logging.js +12 -0
- package/src/index.js +23 -4
- package/src/vue-debug.js +74 -0
- package/CHANGELOG.md +0 -77
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
For comprehensive documentation and support, [check out our documentation site](https://docs.honeybadger.io/lib/javascript/index.html).
|
|
11
11
|
|
|
12
|
-
The documentation includes a detailed [Vue integration guide](https://docs.honeybadger.io/lib/javascript/integration/
|
|
12
|
+
The documentation includes a detailed [Vue integration guide](https://docs.honeybadger.io/lib/javascript/integration/vue2.html)
|
|
13
13
|
|
|
14
14
|
## Project Goals
|
|
15
15
|
|
|
@@ -41,6 +41,7 @@ please [file an issue on GitHub](https://github.com/honeybadger-io/honeybadger-v
|
|
|
41
41
|
## Changelog
|
|
42
42
|
|
|
43
43
|
See https://github.com/honeybadger-io/honeybadger-vue/blob/master/CHANGELOG.md
|
|
44
|
+
Changelog is automatically generated with [our release automation process](#release-automation).
|
|
44
45
|
|
|
45
46
|
## Contributing
|
|
46
47
|
|
|
@@ -91,6 +92,17 @@ To perform a release:
|
|
|
91
92
|
2. To publish the release, use `npm publish`. See `npm help publish` for
|
|
92
93
|
documentation.
|
|
93
94
|
|
|
95
|
+
### Release Automation
|
|
96
|
+
|
|
97
|
+
We use [Ship.js](https://github.com/algolia/shipjs) to automate releasing.
|
|
98
|
+
|
|
99
|
+
Ship.js creates a PR once per week when unreleased changes are present. You can also trigger a release PR by saying "@shipjs prepare" in any issue or pull request comment on GitHub.
|
|
100
|
+
|
|
101
|
+
#### Troubleshooting a failed Ship.js release
|
|
102
|
+
|
|
103
|
+
If a ship.js release fails, you need to revert the release commit and delete the release branch (e.g `releases/v1.1.0`)
|
|
104
|
+
Then, you can debug the issue by simulating the release process locally (`npm run release -- --dry-run --yes --no-browse`).
|
|
105
|
+
|
|
94
106
|
### License
|
|
95
107
|
|
|
96
108
|
*honeybadger-vue* is MIT licensed. See the [LICENSE](https://raw.github.com/honeybadger-io/honeybadger-vue/master/LICENSE) file in this repository for details.
|
|
@@ -1,8 +1,90 @@
|
|
|
1
1
|
import Honeybadger from '@honeybadger-io/js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* This was taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.
|
|
5
|
+
* The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
var classifyRE = /(?:^|[-_])(\w)/g;
|
|
9
|
+
var classify = function (str) { return str
|
|
10
|
+
.replace(classifyRE, function (c) { return c.toUpperCase(); })
|
|
11
|
+
.replace(/[-_]/g, ''); };
|
|
12
|
+
|
|
13
|
+
var formatComponentName = function (vm, includeFile) {
|
|
14
|
+
if (vm.$root === vm) {
|
|
15
|
+
return '<Root>'
|
|
16
|
+
}
|
|
17
|
+
var options = typeof vm === 'function' && vm.cid != null
|
|
18
|
+
? vm.options
|
|
19
|
+
: vm._isVue
|
|
20
|
+
? vm.$options || vm.constructor.options
|
|
21
|
+
: vm || {};
|
|
22
|
+
var name = options.name || options._componentTag;
|
|
23
|
+
var file = options.__file;
|
|
24
|
+
if (!name && file) {
|
|
25
|
+
var match = file.match(/([^/\\]+)\.vue$/);
|
|
26
|
+
name = match && match[1];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
(name ? ("<" + (classify(name)) + ">") : '<Anonymous>') +
|
|
31
|
+
(file && includeFile !== false ? (" at " + file) : '')
|
|
32
|
+
)
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
var repeat = function (str, n) {
|
|
36
|
+
var res = '';
|
|
37
|
+
while (n) {
|
|
38
|
+
if (n % 2 === 1) { res += str; }
|
|
39
|
+
if (n > 1) { str += str; }
|
|
40
|
+
n >>= 1;
|
|
41
|
+
}
|
|
42
|
+
return res
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
var generateComponentTrace = function (vm) {
|
|
46
|
+
if (vm._isVue && vm.$parent) {
|
|
47
|
+
var tree = [];
|
|
48
|
+
var currentRecursiveSequence = 0;
|
|
49
|
+
while (vm) {
|
|
50
|
+
if (tree.length > 0) {
|
|
51
|
+
var last = tree[tree.length - 1];
|
|
52
|
+
if (last.constructor === vm.constructor) {
|
|
53
|
+
currentRecursiveSequence++;
|
|
54
|
+
vm = vm.$parent;
|
|
55
|
+
continue
|
|
56
|
+
} else if (currentRecursiveSequence > 0) {
|
|
57
|
+
tree[tree.length - 1] = [last, currentRecursiveSequence];
|
|
58
|
+
currentRecursiveSequence = 0;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
tree.push(vm);
|
|
62
|
+
vm = vm.$parent;
|
|
63
|
+
}
|
|
64
|
+
return '\n\nfound in\n\n' + tree
|
|
65
|
+
.map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
|
|
66
|
+
? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
|
|
67
|
+
: formatComponentName(vm))); })
|
|
68
|
+
.join('\n')
|
|
69
|
+
} else {
|
|
70
|
+
return ("\n\n(found in " + (formatComponentName(vm)) + ")")
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
function logError (Vue, error, vm, info) {
|
|
75
|
+
var message = "Error in " + info + ": \"" + (error && error.toString()) + "\"";
|
|
76
|
+
|
|
77
|
+
var trace = vm ? generateComponentTrace(vm) : '';
|
|
78
|
+
if (Vue.config.warnHandler) {
|
|
79
|
+
Vue.config.warnHandler.call(null, message, vm, trace);
|
|
80
|
+
} else {
|
|
81
|
+
console.error(("[Vue warn]: " + message + trace));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
3
85
|
var HoneybadgerVue = {
|
|
4
86
|
install: function install (Vue, options) {
|
|
5
|
-
var this$1 = this;
|
|
87
|
+
var this$1$1 = this;
|
|
6
88
|
|
|
7
89
|
if (Vue.config.debug) {
|
|
8
90
|
console.log(("Honeybadger configured with " + (options.apiKey)));
|
|
@@ -12,8 +94,12 @@ var HoneybadgerVue = {
|
|
|
12
94
|
Vue.prototype.$honeybadger = Vue.$honeybadger;
|
|
13
95
|
var chainedErrorHandler = Vue.config.errorHandler;
|
|
14
96
|
var extractContext = function (vm) {
|
|
15
|
-
var options = typeof vm === 'function' && vm.cid != null
|
|
16
|
-
vm.
|
|
97
|
+
var options = typeof vm === 'function' && vm.cid != null
|
|
98
|
+
? vm.options
|
|
99
|
+
: vm._isVue
|
|
100
|
+
? vm.$options ||
|
|
101
|
+
vm.constructor.options
|
|
102
|
+
: vm || {};
|
|
17
103
|
var name = options.name || options._componentTag;
|
|
18
104
|
var file = options.__file;
|
|
19
105
|
return {
|
|
@@ -24,14 +110,28 @@ var HoneybadgerVue = {
|
|
|
24
110
|
file: file
|
|
25
111
|
}
|
|
26
112
|
};
|
|
113
|
+
var shouldLogError = function () {
|
|
114
|
+
if (Vue.config.warnHandler) {
|
|
115
|
+
return true
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
var hasConsole = typeof console !== 'undefined';
|
|
119
|
+
var isDebug = Vue.config.debug || process.env.NODE_ENV !== 'production';
|
|
120
|
+
return hasConsole && isDebug
|
|
121
|
+
};
|
|
122
|
+
|
|
27
123
|
Vue.config.errorHandler = function (error, vm, info) {
|
|
28
124
|
honeybadger.notify(error, { context: { vm: extractContext(vm), info: info } });
|
|
29
125
|
if (typeof chainedErrorHandler === 'function') {
|
|
30
|
-
chainedErrorHandler.call(this$1.Vue, error, vm, info);
|
|
126
|
+
chainedErrorHandler.call(this$1$1.Vue, error, vm, info);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (shouldLogError()) {
|
|
130
|
+
logError(Vue, error, vm, info);
|
|
31
131
|
}
|
|
32
132
|
};
|
|
33
133
|
}
|
|
34
134
|
};
|
|
35
135
|
|
|
36
|
-
export default
|
|
136
|
+
export { HoneybadgerVue as default };
|
|
37
137
|
//# sourceMappingURL=honeybadger-vue.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"honeybadger-vue.esm.js","sources":["../../src/index.js"],"sourcesContent":["import Honeybadger from '@honeybadger-io/js'\n\nconst HoneybadgerVue = {\n install (Vue, options) {\n if (Vue.config.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n Vue.$honeybadger = honeybadger\n Vue.prototype.$honeybadger = Vue.$honeybadger\n const chainedErrorHandler = Vue.config.errorHandler\n const extractContext = function (vm) {\n
|
|
1
|
+
{"version":3,"file":"honeybadger-vue.esm.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was 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 formatComponentName = (vm, includeFile) => {\n if (vm.$root === vm) {\n return '<Root>'\n }\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {}\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>') +\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._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 (Vue, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (Vue.config.warnHandler) {\n Vue.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\nconst HoneybadgerVue = {\n install (Vue, options) {\n if (Vue.config.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n Vue.$honeybadger = honeybadger\n Vue.prototype.$honeybadger = Vue.$honeybadger\n const chainedErrorHandler = Vue.config.errorHandler\n const extractContext = function (vm) {\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options ||\n vm.constructor.options\n : vm || {}\n const name = options.name || options._componentTag\n const file = options.__file\n return {\n isRoot: vm.$root === vm,\n name: name,\n props: options.propsData,\n parentVnodeTag: options._parentVnode ? options._parentVnode.tag : undefined,\n file: file\n }\n }\n const shouldLogError = () => {\n if (Vue.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const isDebug = Vue.config.debug || process.env.NODE_ENV !== 'production'\n return hasConsole && isDebug\n }\n\n Vue.config.errorHandler = (error, vm, info) => {\n honeybadger.notify(error, { context: { vm: extractContext(vm), info: info } })\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(this.Vue, error, vm, info)\n }\n\n if (shouldLogError()) {\n logError(Vue, error, vm, info)\n }\n }\n }\n}\n\nexport default HoneybadgerVue\n"],"names":["const","let","this"],"mappings":"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"}
|
package/dist/honeybadger-vue.js
CHANGED
|
@@ -5,20 +5,106 @@ var HoneybadgerVue = (function (exports, Honeybadger) {
|
|
|
5
5
|
|
|
6
6
|
var Honeybadger__default = /*#__PURE__*/_interopDefaultLegacy(Honeybadger);
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* This was taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.
|
|
10
|
+
* The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
var classifyRE = /(?:^|[-_])(\w)/g;
|
|
14
|
+
var classify = function (str) { return str
|
|
15
|
+
.replace(classifyRE, function (c) { return c.toUpperCase(); })
|
|
16
|
+
.replace(/[-_]/g, ''); };
|
|
17
|
+
|
|
18
|
+
var formatComponentName = function (vm, includeFile) {
|
|
19
|
+
if (vm.$root === vm) {
|
|
20
|
+
return '<Root>'
|
|
21
|
+
}
|
|
22
|
+
var options = typeof vm === 'function' && vm.cid != null
|
|
23
|
+
? vm.options
|
|
24
|
+
: vm._isVue
|
|
25
|
+
? vm.$options || vm.constructor.options
|
|
26
|
+
: vm || {};
|
|
27
|
+
var name = options.name || options._componentTag;
|
|
28
|
+
var file = options.__file;
|
|
29
|
+
if (!name && file) {
|
|
30
|
+
var match = file.match(/([^/\\]+)\.vue$/);
|
|
31
|
+
name = match && match[1];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
(name ? ("<" + (classify(name)) + ">") : '<Anonymous>') +
|
|
36
|
+
(file && includeFile !== false ? (" at " + file) : '')
|
|
37
|
+
)
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
var repeat = function (str, n) {
|
|
41
|
+
var res = '';
|
|
42
|
+
while (n) {
|
|
43
|
+
if (n % 2 === 1) { res += str; }
|
|
44
|
+
if (n > 1) { str += str; }
|
|
45
|
+
n >>= 1;
|
|
46
|
+
}
|
|
47
|
+
return res
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
var generateComponentTrace = function (vm) {
|
|
51
|
+
if (vm._isVue && vm.$parent) {
|
|
52
|
+
var tree = [];
|
|
53
|
+
var currentRecursiveSequence = 0;
|
|
54
|
+
while (vm) {
|
|
55
|
+
if (tree.length > 0) {
|
|
56
|
+
var last = tree[tree.length - 1];
|
|
57
|
+
if (last.constructor === vm.constructor) {
|
|
58
|
+
currentRecursiveSequence++;
|
|
59
|
+
vm = vm.$parent;
|
|
60
|
+
continue
|
|
61
|
+
} else if (currentRecursiveSequence > 0) {
|
|
62
|
+
tree[tree.length - 1] = [last, currentRecursiveSequence];
|
|
63
|
+
currentRecursiveSequence = 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
tree.push(vm);
|
|
67
|
+
vm = vm.$parent;
|
|
68
|
+
}
|
|
69
|
+
return '\n\nfound in\n\n' + tree
|
|
70
|
+
.map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
|
|
71
|
+
? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
|
|
72
|
+
: formatComponentName(vm))); })
|
|
73
|
+
.join('\n')
|
|
74
|
+
} else {
|
|
75
|
+
return ("\n\n(found in " + (formatComponentName(vm)) + ")")
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
function logError (Vue, error, vm, info) {
|
|
80
|
+
var message = "Error in " + info + ": \"" + (error && error.toString()) + "\"";
|
|
81
|
+
|
|
82
|
+
var trace = vm ? generateComponentTrace(vm) : '';
|
|
83
|
+
if (Vue.config.warnHandler) {
|
|
84
|
+
Vue.config.warnHandler.call(null, message, vm, trace);
|
|
85
|
+
} else {
|
|
86
|
+
console.error(("[Vue warn]: " + message + trace));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
8
90
|
var HoneybadgerVue = {
|
|
9
91
|
install: function install (Vue, options) {
|
|
10
|
-
var this$1 = this;
|
|
92
|
+
var this$1$1 = this;
|
|
11
93
|
|
|
12
94
|
if (Vue.config.debug) {
|
|
13
95
|
console.log(("Honeybadger configured with " + (options.apiKey)));
|
|
14
96
|
}
|
|
15
|
-
var honeybadger = Honeybadger__default[
|
|
97
|
+
var honeybadger = Honeybadger__default["default"].configure(options);
|
|
16
98
|
Vue.$honeybadger = honeybadger;
|
|
17
99
|
Vue.prototype.$honeybadger = Vue.$honeybadger;
|
|
18
100
|
var chainedErrorHandler = Vue.config.errorHandler;
|
|
19
101
|
var extractContext = function (vm) {
|
|
20
|
-
var options = typeof vm === 'function' && vm.cid != null
|
|
21
|
-
vm.
|
|
102
|
+
var options = typeof vm === 'function' && vm.cid != null
|
|
103
|
+
? vm.options
|
|
104
|
+
: vm._isVue
|
|
105
|
+
? vm.$options ||
|
|
106
|
+
vm.constructor.options
|
|
107
|
+
: vm || {};
|
|
22
108
|
var name = options.name || options._componentTag;
|
|
23
109
|
var file = options.__file;
|
|
24
110
|
return {
|
|
@@ -29,20 +115,34 @@ var HoneybadgerVue = (function (exports, Honeybadger) {
|
|
|
29
115
|
file: file
|
|
30
116
|
}
|
|
31
117
|
};
|
|
118
|
+
var shouldLogError = function () {
|
|
119
|
+
if (Vue.config.warnHandler) {
|
|
120
|
+
return true
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
var hasConsole = typeof console !== 'undefined';
|
|
124
|
+
var isDebug = Vue.config.debug || process.env.NODE_ENV !== 'production';
|
|
125
|
+
return hasConsole && isDebug
|
|
126
|
+
};
|
|
127
|
+
|
|
32
128
|
Vue.config.errorHandler = function (error, vm, info) {
|
|
33
129
|
honeybadger.notify(error, { context: { vm: extractContext(vm), info: info } });
|
|
34
130
|
if (typeof chainedErrorHandler === 'function') {
|
|
35
|
-
chainedErrorHandler.call(this$1.Vue, error, vm, info);
|
|
131
|
+
chainedErrorHandler.call(this$1$1.Vue, error, vm, info);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (shouldLogError()) {
|
|
135
|
+
logError(Vue, error, vm, info);
|
|
36
136
|
}
|
|
37
137
|
};
|
|
38
138
|
}
|
|
39
139
|
};
|
|
40
140
|
|
|
41
|
-
exports
|
|
141
|
+
exports["default"] = HoneybadgerVue;
|
|
42
142
|
|
|
43
143
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
44
144
|
|
|
45
145
|
return exports;
|
|
46
146
|
|
|
47
|
-
}({}, Honeybadger)
|
|
147
|
+
})({}, Honeybadger);
|
|
48
148
|
//# sourceMappingURL=honeybadger-vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"honeybadger-vue.js","sources":["../../src/index.js"],"sourcesContent":["import Honeybadger from '@honeybadger-io/js'\n\nconst HoneybadgerVue = {\n install (Vue, options) {\n if (Vue.config.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n Vue.$honeybadger = honeybadger\n Vue.prototype.$honeybadger = Vue.$honeybadger\n const chainedErrorHandler = Vue.config.errorHandler\n const extractContext = function (vm) {\n
|
|
1
|
+
{"version":3,"file":"honeybadger-vue.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was 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 formatComponentName = (vm, includeFile) => {\n if (vm.$root === vm) {\n return '<Root>'\n }\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {}\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>') +\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._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 (Vue, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (Vue.config.warnHandler) {\n Vue.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\nconst HoneybadgerVue = {\n install (Vue, options) {\n if (Vue.config.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n Vue.$honeybadger = honeybadger\n Vue.prototype.$honeybadger = Vue.$honeybadger\n const chainedErrorHandler = Vue.config.errorHandler\n const extractContext = function (vm) {\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options ||\n vm.constructor.options\n : vm || {}\n const name = options.name || options._componentTag\n const file = options.__file\n return {\n isRoot: vm.$root === vm,\n name: name,\n props: options.propsData,\n parentVnodeTag: options._parentVnode ? options._parentVnode.tag : undefined,\n file: file\n }\n }\n const shouldLogError = () => {\n if (Vue.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const isDebug = Vue.config.debug || process.env.NODE_ENV !== 'production'\n return hasConsole && isDebug\n }\n\n Vue.config.errorHandler = (error, vm, info) => {\n honeybadger.notify(error, { context: { vm: extractContext(vm), info: info } })\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(this.Vue, error, vm, info)\n }\n\n if (shouldLogError()) {\n logError(Vue, error, vm, info)\n }\n }\n }\n}\n\nexport default HoneybadgerVue\n"],"names":["const","let","Honeybadger","this"],"mappings":"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"}
|
|
@@ -2,26 +2,112 @@
|
|
|
2
2
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@honeybadger-io/js')) :
|
|
3
3
|
typeof define === 'function' && define.amd ? define(['exports', '@honeybadger-io/js'], factory) :
|
|
4
4
|
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.HoneybadgerVue = {}, global.Honeybadger));
|
|
5
|
-
}(this, (function (exports, Honeybadger) { 'use strict';
|
|
5
|
+
})(this, (function (exports, Honeybadger) { 'use strict';
|
|
6
6
|
|
|
7
7
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
8
|
|
|
9
9
|
var Honeybadger__default = /*#__PURE__*/_interopDefaultLegacy(Honeybadger);
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* This was taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.
|
|
13
|
+
* The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
var classifyRE = /(?:^|[-_])(\w)/g;
|
|
17
|
+
var classify = function (str) { return str
|
|
18
|
+
.replace(classifyRE, function (c) { return c.toUpperCase(); })
|
|
19
|
+
.replace(/[-_]/g, ''); };
|
|
20
|
+
|
|
21
|
+
var formatComponentName = function (vm, includeFile) {
|
|
22
|
+
if (vm.$root === vm) {
|
|
23
|
+
return '<Root>'
|
|
24
|
+
}
|
|
25
|
+
var options = typeof vm === 'function' && vm.cid != null
|
|
26
|
+
? vm.options
|
|
27
|
+
: vm._isVue
|
|
28
|
+
? vm.$options || vm.constructor.options
|
|
29
|
+
: vm || {};
|
|
30
|
+
var name = options.name || options._componentTag;
|
|
31
|
+
var file = options.__file;
|
|
32
|
+
if (!name && file) {
|
|
33
|
+
var match = file.match(/([^/\\]+)\.vue$/);
|
|
34
|
+
name = match && match[1];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
(name ? ("<" + (classify(name)) + ">") : '<Anonymous>') +
|
|
39
|
+
(file && includeFile !== false ? (" at " + file) : '')
|
|
40
|
+
)
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
var repeat = function (str, n) {
|
|
44
|
+
var res = '';
|
|
45
|
+
while (n) {
|
|
46
|
+
if (n % 2 === 1) { res += str; }
|
|
47
|
+
if (n > 1) { str += str; }
|
|
48
|
+
n >>= 1;
|
|
49
|
+
}
|
|
50
|
+
return res
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
var generateComponentTrace = function (vm) {
|
|
54
|
+
if (vm._isVue && vm.$parent) {
|
|
55
|
+
var tree = [];
|
|
56
|
+
var currentRecursiveSequence = 0;
|
|
57
|
+
while (vm) {
|
|
58
|
+
if (tree.length > 0) {
|
|
59
|
+
var last = tree[tree.length - 1];
|
|
60
|
+
if (last.constructor === vm.constructor) {
|
|
61
|
+
currentRecursiveSequence++;
|
|
62
|
+
vm = vm.$parent;
|
|
63
|
+
continue
|
|
64
|
+
} else if (currentRecursiveSequence > 0) {
|
|
65
|
+
tree[tree.length - 1] = [last, currentRecursiveSequence];
|
|
66
|
+
currentRecursiveSequence = 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
tree.push(vm);
|
|
70
|
+
vm = vm.$parent;
|
|
71
|
+
}
|
|
72
|
+
return '\n\nfound in\n\n' + tree
|
|
73
|
+
.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))); })
|
|
76
|
+
.join('\n')
|
|
77
|
+
} else {
|
|
78
|
+
return ("\n\n(found in " + (formatComponentName(vm)) + ")")
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
function logError (Vue, error, vm, info) {
|
|
83
|
+
var message = "Error in " + info + ": \"" + (error && error.toString()) + "\"";
|
|
84
|
+
|
|
85
|
+
var trace = vm ? generateComponentTrace(vm) : '';
|
|
86
|
+
if (Vue.config.warnHandler) {
|
|
87
|
+
Vue.config.warnHandler.call(null, message, vm, trace);
|
|
88
|
+
} else {
|
|
89
|
+
console.error(("[Vue warn]: " + message + trace));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
11
93
|
var HoneybadgerVue = {
|
|
12
94
|
install: function install (Vue, options) {
|
|
13
|
-
var this$1 = this;
|
|
95
|
+
var this$1$1 = this;
|
|
14
96
|
|
|
15
97
|
if (Vue.config.debug) {
|
|
16
98
|
console.log(("Honeybadger configured with " + (options.apiKey)));
|
|
17
99
|
}
|
|
18
|
-
var honeybadger = Honeybadger__default[
|
|
100
|
+
var honeybadger = Honeybadger__default["default"].configure(options);
|
|
19
101
|
Vue.$honeybadger = honeybadger;
|
|
20
102
|
Vue.prototype.$honeybadger = Vue.$honeybadger;
|
|
21
103
|
var chainedErrorHandler = Vue.config.errorHandler;
|
|
22
104
|
var extractContext = function (vm) {
|
|
23
|
-
var options = typeof vm === 'function' && vm.cid != null
|
|
24
|
-
vm.
|
|
105
|
+
var options = typeof vm === 'function' && vm.cid != null
|
|
106
|
+
? vm.options
|
|
107
|
+
: vm._isVue
|
|
108
|
+
? vm.$options ||
|
|
109
|
+
vm.constructor.options
|
|
110
|
+
: vm || {};
|
|
25
111
|
var name = options.name || options._componentTag;
|
|
26
112
|
var file = options.__file;
|
|
27
113
|
return {
|
|
@@ -32,18 +118,32 @@
|
|
|
32
118
|
file: file
|
|
33
119
|
}
|
|
34
120
|
};
|
|
121
|
+
var shouldLogError = function () {
|
|
122
|
+
if (Vue.config.warnHandler) {
|
|
123
|
+
return true
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
var hasConsole = typeof console !== 'undefined';
|
|
127
|
+
var isDebug = Vue.config.debug || process.env.NODE_ENV !== 'production';
|
|
128
|
+
return hasConsole && isDebug
|
|
129
|
+
};
|
|
130
|
+
|
|
35
131
|
Vue.config.errorHandler = function (error, vm, info) {
|
|
36
132
|
honeybadger.notify(error, { context: { vm: extractContext(vm), info: info } });
|
|
37
133
|
if (typeof chainedErrorHandler === 'function') {
|
|
38
|
-
chainedErrorHandler.call(this$1.Vue, error, vm, info);
|
|
134
|
+
chainedErrorHandler.call(this$1$1.Vue, error, vm, info);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (shouldLogError()) {
|
|
138
|
+
logError(Vue, error, vm, info);
|
|
39
139
|
}
|
|
40
140
|
};
|
|
41
141
|
}
|
|
42
142
|
};
|
|
43
143
|
|
|
44
|
-
exports
|
|
144
|
+
exports["default"] = HoneybadgerVue;
|
|
45
145
|
|
|
46
146
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
47
147
|
|
|
48
|
-
}))
|
|
148
|
+
}));
|
|
49
149
|
//# sourceMappingURL=honeybadger-vue.umd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"honeybadger-vue.umd.js","sources":["../../src/index.js"],"sourcesContent":["import Honeybadger from '@honeybadger-io/js'\n\nconst HoneybadgerVue = {\n install (Vue, options) {\n if (Vue.config.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n Vue.$honeybadger = honeybadger\n Vue.prototype.$honeybadger = Vue.$honeybadger\n const chainedErrorHandler = Vue.config.errorHandler\n const extractContext = function (vm) {\n
|
|
1
|
+
{"version":3,"file":"honeybadger-vue.umd.js","sources":["../../src/vue-debug.js","../../src/error-logging.js","../../src/index.js"],"sourcesContent":["/**\n * This was 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 formatComponentName = (vm, includeFile) => {\n if (vm.$root === vm) {\n return '<Root>'\n }\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {}\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>') +\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._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 (Vue, error, vm, info) {\n const message = `Error in ${info}: \"${error && error.toString()}\"`\n\n const trace = vm ? generateComponentTrace(vm) : ''\n if (Vue.config.warnHandler) {\n Vue.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\nconst HoneybadgerVue = {\n install (Vue, options) {\n if (Vue.config.debug) {\n console.log(`Honeybadger configured with ${options.apiKey}`)\n }\n const honeybadger = Honeybadger.configure(options)\n Vue.$honeybadger = honeybadger\n Vue.prototype.$honeybadger = Vue.$honeybadger\n const chainedErrorHandler = Vue.config.errorHandler\n const extractContext = function (vm) {\n const options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options ||\n vm.constructor.options\n : vm || {}\n const name = options.name || options._componentTag\n const file = options.__file\n return {\n isRoot: vm.$root === vm,\n name: name,\n props: options.propsData,\n parentVnodeTag: options._parentVnode ? options._parentVnode.tag : undefined,\n file: file\n }\n }\n const shouldLogError = () => {\n if (Vue.config.warnHandler) {\n return true\n }\n\n const hasConsole = typeof console !== 'undefined'\n const isDebug = Vue.config.debug || process.env.NODE_ENV !== 'production'\n return hasConsole && isDebug\n }\n\n Vue.config.errorHandler = (error, vm, info) => {\n honeybadger.notify(error, { context: { vm: extractContext(vm), info: info } })\n if (typeof chainedErrorHandler === 'function') {\n chainedErrorHandler.call(this.Vue, error, vm, info)\n }\n\n if (shouldLogError()) {\n logError(Vue, error, vm, info)\n }\n }\n }\n}\n\nexport default HoneybadgerVue\n"],"names":["const","let","Honeybadger","this"],"mappings":";;;;;;;;;;EAAA;;;;;EAKAA,IAAM,UAAU,GAAG,kBAAiB;EACpCA,IAAM,QAAQ,aAAG,KAAI,SAAG,GAAG;KACxB,OAAO,CAAC,UAAU,YAAE,GAAE,SAAG,CAAC,CAAC,WAAW,KAAE,CAAC;KACzC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAC;;EAEvBA,IAAM,mBAAmB,aAAI,EAAE,EAAE,WAAW,EAAE;IAC5C,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE;MACnB,OAAO,QAAQ;KAChB;IACDA,IAAM,OAAO,GAAG,OAAO,EAAE,KAAK,UAAU,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI;QACtD,EAAE,CAAC,OAAO;QACV,EAAE,CAAC,MAAM;UACP,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,OAAO;UACrC,EAAE,IAAI,GAAE;IACdC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,cAAa;IAChDD,IAAM,IAAI,GAAG,OAAO,CAAC,OAAM;IAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;MACjBA,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAC;MAC3C,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAC;KACzB;;IAED;MACE,CAAC,IAAI,WAAO,QAAQ,CAAC,IAAI,EAAC,UAAM,aAAa;OAC5C,IAAI,IAAI,WAAW,KAAK,KAAK,aAAU,IAAI,IAAK,EAAE,CAAC;KACrD;IACF;;EAEDA,IAAM,MAAM,aAAI,GAAG,EAAE,CAAC,EAAE;IACtBC,IAAI,GAAG,GAAG,GAAE;IACZ,OAAO,CAAC,EAAE;MACR,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAE,GAAG,IAAI,MAAG;MAC3B,IAAI,CAAC,GAAG,CAAC,IAAE,GAAG,IAAI,MAAG;MACrB,CAAC,KAAK,EAAC;KACR;IACD,OAAO,GAAG;IACX;;EAEMD,IAAM,sBAAsB,aAAG,IAAG;IACvC,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE;MAC3BA,IAAM,IAAI,GAAG,GAAE;MACfC,IAAI,wBAAwB,GAAG,EAAC;MAChC,OAAO,EAAE,EAAE;QACT,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;UACnBD,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAC;UAClC,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC,WAAW,EAAE;YACvC,wBAAwB,GAAE;YAC1B,EAAE,GAAG,EAAE,CAAC,QAAO;YACf,QAAQ;WACT,MAAM,IAAI,wBAAwB,GAAG,CAAC,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,wBAAwB,EAAC;YACxD,wBAAwB,GAAG,EAAC;WAC7B;SACF;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAC;QACb,EAAE,GAAG,EAAE,CAAC,QAAO;OAChB;MACD,OAAO,kBAAkB,GAAG,IAAI;SAC7B,GAAG,WAAE,EAAE,EAAE,CAAC,EAAE,gBACX,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAE1C,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACV,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAS,EAAE,CAAC,CAAC,EAAC;cAC1C,mBAAmB,CAAC,EAAE,CAAC,KAC3B,CAAC;SACF,IAAI,CAAC,IAAI,CAAC;KACd,MAAM;MACL,4BAAwB,mBAAmB,CAAC,EAAE,EAAC,OAAG;KACnD;;;ECtEI,SAAS,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE;IAC9CA,IAAM,OAAO,GAAG,cAAY,IAAI,aAAM,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAE,QAAG;;IAElEA,IAAM,KAAK,GAAG,EAAE,GAAG,sBAAsB,CAAC,EAAE,CAAC,GAAG,GAAE;IAClD,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;MAC1B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAC;KACtD,MAAM;MACL,OAAO,CAAC,KAAK,mBAAgB,OAAO,GAAG,KAAK,GAAG;KAChD;;;ACPE,MAAC,cAAc,GAAG;IACrB,yBAAO,EAAE,GAAG,EAAE,OAAO,EAAE;;AAAC;MACtB,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE;QACpB,OAAO,CAAC,GAAG,oCAAgC,OAAO,CAAC,MAAM,IAAG;OAC7D;MACDA,IAAM,WAAW,GAAGE,+BAAW,CAAC,SAAS,CAAC,OAAO,EAAC;MAClD,GAAG,CAAC,YAAY,GAAG,YAAW;MAC9B,GAAG,CAAC,SAAS,CAAC,YAAY,GAAG,GAAG,CAAC,aAAY;MAC7CF,IAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC,aAAY;MACnDA,IAAM,cAAc,GAAG,UAAU,EAAE,EAAE;QACnCA,IAAM,OAAO,GAAG,OAAO,EAAE,KAAK,UAAU,IAAI,EAAE,CAAC,GAAG,IAAI,IAAI;YACtD,EAAE,CAAC,OAAO;YACV,EAAE,CAAC,MAAM;cACP,EAAE,CAAC,QAAQ;UACf,EAAE,CAAC,WAAW,CAAC,OAAO;cAClB,EAAE,IAAI,GAAE;QACdA,IAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,cAAa;QAClDA,IAAM,IAAI,GAAG,OAAO,CAAC,OAAM;QAC3B,OAAO;UACL,MAAM,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE;UACvB,IAAI,EAAE,IAAI;UACV,KAAK,EAAE,OAAO,CAAC,SAAS;UACxB,cAAc,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,SAAS;UAC3E,IAAI,EAAE,IAAI;SACX;QACF;MACDA,IAAM,cAAc,eAAM;QACxB,IAAI,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;UAC1B,OAAO,IAAI;SACZ;;QAEDA,IAAM,UAAU,GAAG,OAAO,OAAO,KAAK,YAAW;QACjDA,IAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAY;QACzE,OAAO,UAAU,IAAI,OAAO;QAC7B;;MAED,GAAG,CAAC,MAAM,CAAC,YAAY,aAAI,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE;QAC1C,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAC;QAC9E,IAAI,OAAO,mBAAmB,KAAK,UAAU,EAAE;UAC7C,mBAAmB,CAAC,IAAI,CAACG,QAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAC;SACpD;;QAED,IAAI,cAAc,EAAE,EAAE;UACpB,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAC;SAC/B;QACF;KACF;;;;;;;;;;;"}
|
package/honeybadger-vue.d.ts
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
|
|
2
1
|
// Type definitions for honeybadger.js vue integration
|
|
3
2
|
// Project: https://github.com/honeybadger-io/honeybadger-vue
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
import Vue from 'vue'
|
|
5
|
+
import * as Honeybadger from '@honeybadger-io/js'
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
declare module 'vue/types/vue' {
|
|
8
|
+
interface Vue {
|
|
9
|
+
$honeybadger: typeof Honeybadger
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
export default HoneybadgerVue;
|
|
13
11
|
}
|
|
14
12
|
|
|
15
|
-
declare
|
|
16
|
-
|
|
13
|
+
declare const HoneybadgerVue: {
|
|
14
|
+
install(app: typeof Vue, options?: any): void
|
|
15
|
+
}
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
$honeybadger: typeof Honeybadger;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
17
|
+
export default HoneybadgerVue
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@honeybadger-io/vue",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Honeybadger Vue.js client",
|
|
6
6
|
"author": "Jason Truesdell <jason@yuzuten.com> (https://github.com/JasonTrue)",
|
|
@@ -28,10 +28,11 @@
|
|
|
28
28
|
"scripts": {
|
|
29
29
|
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
|
|
30
30
|
"start": "npm run dev",
|
|
31
|
-
"unit": "jest --config test/unit/jest.conf.js --coverage
|
|
31
|
+
"unit": "jest --config test/unit/jest.conf.js --coverage",
|
|
32
32
|
"e2e": "node test/e2e/runner.js",
|
|
33
|
+
"tsd": "npx tsd",
|
|
33
34
|
"test": "npm run unit",
|
|
34
|
-
"test:all": "npm run unit && npm run e2e",
|
|
35
|
+
"test:all": "npm run tsd && npm run unit && npm run e2e",
|
|
35
36
|
"lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
|
|
36
37
|
"build": "npm run build:umd & npm run build:es & npm run build:unpkg",
|
|
37
38
|
"build:umd": "rollup --config build/rollup.config.js --format umd --file dist/honeybadger-vue.umd.js",
|
|
@@ -41,85 +42,93 @@
|
|
|
41
42
|
"preversion": "npm test",
|
|
42
43
|
"version": "scripts/update-versions.sh",
|
|
43
44
|
"postversion": "git push && git push --tags",
|
|
44
|
-
"prepublishOnly": "npm run build && npm test"
|
|
45
|
+
"prepublishOnly": "npm run build && npm test",
|
|
46
|
+
"prepare": "husky install",
|
|
47
|
+
"release": "shipjs prepare"
|
|
45
48
|
},
|
|
46
49
|
"dependencies": {
|
|
47
|
-
"@honeybadger-io/js": "^
|
|
50
|
+
"@honeybadger-io/js": "^4.0.1"
|
|
48
51
|
},
|
|
49
52
|
"devDependencies": {
|
|
50
|
-
"@babel/core": "^7.12
|
|
51
|
-
"@babel/helper-module-imports": "^7.
|
|
52
|
-
"@babel/plugin-syntax-jsx": "^7.
|
|
53
|
-
"@babel/plugin-transform-modules-commonjs": "^7.
|
|
54
|
-
"@babel/plugin-transform-runtime": "^7.
|
|
55
|
-
"@babel/preset-env": "^7.
|
|
56
|
-
"@babel/register": "^7.
|
|
57
|
-
"@babel/runtime": "^7.
|
|
58
|
-
"@
|
|
59
|
-
"
|
|
60
|
-
"
|
|
53
|
+
"@babel/core": "^7.16.12",
|
|
54
|
+
"@babel/helper-module-imports": "^7.16.7",
|
|
55
|
+
"@babel/plugin-syntax-jsx": "^7.16.7",
|
|
56
|
+
"@babel/plugin-transform-modules-commonjs": "^7.16.8",
|
|
57
|
+
"@babel/plugin-transform-runtime": "^7.16.10",
|
|
58
|
+
"@babel/preset-env": "^7.16.11",
|
|
59
|
+
"@babel/register": "^7.16.9",
|
|
60
|
+
"@babel/runtime": "^7.16.7",
|
|
61
|
+
"@commitlint/cli": "^17.0.0",
|
|
62
|
+
"@commitlint/config-conventional": "^17.0.0",
|
|
63
|
+
"@vue/runtime-core": "^3.2.29",
|
|
64
|
+
"ajv": "^8.9.0",
|
|
65
|
+
"autoprefixer": "^10.4.2",
|
|
61
66
|
"babel-core": "^7.0.0-bridge.0",
|
|
62
67
|
"babel-eslint": "^10.1.0",
|
|
63
68
|
"babel-helper-vue-jsx-merge-props": "^2.0.3",
|
|
64
|
-
"babel-jest": "^
|
|
65
|
-
"babel-loader": "^8.
|
|
69
|
+
"babel-jest": "^28.0.3",
|
|
70
|
+
"babel-loader": "^8.2.3",
|
|
66
71
|
"babel-plugin-dynamic-import-node": "^2.3.3",
|
|
67
72
|
"babel-plugin-transform-vue-jsx": "^4.0.1",
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
73
|
+
"browser-resolve": "^2.0.0",
|
|
74
|
+
"chalk": "^5.0.0",
|
|
75
|
+
"chromedriver": "^101.0.0",
|
|
76
|
+
"copy-webpack-plugin": "^11.0.0",
|
|
71
77
|
"cross-spawn": "^7.0.2",
|
|
72
|
-
"css-loader": "^5.
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"eslint
|
|
78
|
+
"css-loader": "^6.5.1",
|
|
79
|
+
"css-minimizer-webpack-plugin": "^3.4.1",
|
|
80
|
+
"dotenv": "^16.0.0",
|
|
81
|
+
"eslint": "^8.8.0",
|
|
82
|
+
"eslint-config-standard": "^17.0.0",
|
|
76
83
|
"eslint-friendly-formatter": "^4.0.1",
|
|
77
84
|
"eslint-loader": "^4.0.1",
|
|
78
|
-
"eslint-plugin-import": "^2.
|
|
85
|
+
"eslint-plugin-import": "^2.25.4",
|
|
79
86
|
"eslint-plugin-node": "^11.1.0",
|
|
80
|
-
"eslint-plugin-promise": "^
|
|
87
|
+
"eslint-plugin-promise": "^6.0.0",
|
|
81
88
|
"eslint-plugin-standard": "^5.0.0",
|
|
82
|
-
"eslint-plugin-vue": "^
|
|
89
|
+
"eslint-plugin-vue": "^9.0.1",
|
|
83
90
|
"file-loader": "^6.0.0",
|
|
84
91
|
"friendly-errors-webpack-plugin": "^1.7.0",
|
|
85
|
-
"html-webpack-plugin": "^5.
|
|
92
|
+
"html-webpack-plugin": "^5.5.0",
|
|
93
|
+
"husky": "^8.0.0",
|
|
86
94
|
"interactive": "^0.1.9",
|
|
87
|
-
"jest": "^
|
|
95
|
+
"jest": "^28.0.3",
|
|
96
|
+
"jest-environment-jsdom": "^28.0.2",
|
|
88
97
|
"jest-serializer-vue": "^2.0.2",
|
|
89
|
-
"mini-css-extract-plugin": "^
|
|
90
|
-
"nightwatch": "^
|
|
98
|
+
"mini-css-extract-plugin": "^2.5.3",
|
|
99
|
+
"nightwatch": "^2.0.2",
|
|
91
100
|
"nightwatch-xhr": "^0.4.7",
|
|
92
|
-
"node-notifier": "^
|
|
93
|
-
"optimize-css-assets-webpack-plugin": "^5.0.3",
|
|
94
|
-
"ora": "^5.0.0",
|
|
101
|
+
"node-notifier": "^10.0.0",
|
|
95
102
|
"portfinder": "^1.0.13",
|
|
96
|
-
"postcss": "^8.
|
|
97
|
-
"postcss-import": "^14.0.
|
|
98
|
-
"postcss-loader": "^
|
|
99
|
-
"postcss-url": "^10.
|
|
103
|
+
"postcss": "^8.4.5",
|
|
104
|
+
"postcss-import": "^14.0.2",
|
|
105
|
+
"postcss-loader": "^6.2.1",
|
|
106
|
+
"postcss-url": "^10.1.3",
|
|
100
107
|
"rimraf": "^3.0.2",
|
|
101
|
-
"rollup": "^2.
|
|
108
|
+
"rollup": "^2.66.1",
|
|
102
109
|
"rollup-plugin-buble": "^0.19.4",
|
|
103
110
|
"rollup-plugin-conditional": "^3.1.2",
|
|
104
111
|
"rollup-plugin-terser": "^7.0.0",
|
|
105
112
|
"rollup-plugin-vue": "^5.1.6",
|
|
106
113
|
"selenium-server": "^3.0.1",
|
|
107
114
|
"semver": "^7.3.2",
|
|
108
|
-
"shelljs": "^0.8.
|
|
109
|
-
"
|
|
110
|
-
"
|
|
115
|
+
"shelljs": "^0.8.5",
|
|
116
|
+
"shipjs": "0.24.4",
|
|
117
|
+
"sinon": "^14.0.0",
|
|
118
|
+
"terser-webpack-plugin": "^5.3.0",
|
|
119
|
+
"tsd": "^0.20.0",
|
|
111
120
|
"url-loader": "^4.1.0",
|
|
112
|
-
"vue": "^2.
|
|
121
|
+
"vue": "^2.6.14",
|
|
113
122
|
"vue-jest": "^3.0.5",
|
|
114
|
-
"vue-loader": "^
|
|
115
|
-
"vue-style-loader": "^4.1.
|
|
116
|
-
"vue-template-compiler": "^2.
|
|
117
|
-
"webpack": "^5.
|
|
118
|
-
"webpack-bundle-analyzer": "^4.
|
|
119
|
-
"webpack-cli": "^4.
|
|
120
|
-
"webpack-dev-server": "^
|
|
121
|
-
"webpack-merge": "^5.0
|
|
122
|
-
"winston": "^3.
|
|
123
|
+
"vue-loader": "^17.0.0",
|
|
124
|
+
"vue-style-loader": "^4.1.3",
|
|
125
|
+
"vue-template-compiler": "^2.6.14",
|
|
126
|
+
"webpack": "^5.67.0",
|
|
127
|
+
"webpack-bundle-analyzer": "^4.5.0",
|
|
128
|
+
"webpack-cli": "^4.9.2",
|
|
129
|
+
"webpack-dev-server": "^4.7.3",
|
|
130
|
+
"webpack-merge": "^5.8.0",
|
|
131
|
+
"winston": "^3.5.0"
|
|
123
132
|
},
|
|
124
133
|
"engines": {
|
|
125
134
|
"node": ">= 6.0.0",
|
|
@@ -141,5 +150,12 @@
|
|
|
141
150
|
"https-proxy-agent": "^2.2.1",
|
|
142
151
|
"socks-proxy-agent": "^4.0.1"
|
|
143
152
|
},
|
|
144
|
-
"types": "./honeybadger-vue.d.ts"
|
|
153
|
+
"types": "./honeybadger-vue.d.ts",
|
|
154
|
+
"tsd": {
|
|
155
|
+
"compilerOptions": {
|
|
156
|
+
"lib": [
|
|
157
|
+
"DOM"
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
}
|
|
145
161
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { generateComponentTrace } from './vue-debug'
|
|
2
|
+
|
|
3
|
+
export function logError (Vue, error, vm, info) {
|
|
4
|
+
const message = `Error in ${info}: "${error && error.toString()}"`
|
|
5
|
+
|
|
6
|
+
const trace = vm ? generateComponentTrace(vm) : ''
|
|
7
|
+
if (Vue.config.warnHandler) {
|
|
8
|
+
Vue.config.warnHandler.call(null, message, vm, trace)
|
|
9
|
+
} else {
|
|
10
|
+
console.error(`[Vue warn]: ${message}${trace}`)
|
|
11
|
+
}
|
|
12
|
+
}
|
package/src/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Honeybadger from '@honeybadger-io/js'
|
|
2
|
+
import { logError } from './error-logging'
|
|
2
3
|
|
|
3
4
|
const HoneybadgerVue = {
|
|
4
5
|
install (Vue, options) {
|
|
@@ -10,10 +11,14 @@ const HoneybadgerVue = {
|
|
|
10
11
|
Vue.prototype.$honeybadger = Vue.$honeybadger
|
|
11
12
|
const chainedErrorHandler = Vue.config.errorHandler
|
|
12
13
|
const extractContext = function (vm) {
|
|
13
|
-
|
|
14
|
-
vm.
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
const options = typeof vm === 'function' && vm.cid != null
|
|
15
|
+
? vm.options
|
|
16
|
+
: vm._isVue
|
|
17
|
+
? vm.$options ||
|
|
18
|
+
vm.constructor.options
|
|
19
|
+
: vm || {}
|
|
20
|
+
const name = options.name || options._componentTag
|
|
21
|
+
const file = options.__file
|
|
17
22
|
return {
|
|
18
23
|
isRoot: vm.$root === vm,
|
|
19
24
|
name: name,
|
|
@@ -22,11 +27,25 @@ const HoneybadgerVue = {
|
|
|
22
27
|
file: file
|
|
23
28
|
}
|
|
24
29
|
}
|
|
30
|
+
const shouldLogError = () => {
|
|
31
|
+
if (Vue.config.warnHandler) {
|
|
32
|
+
return true
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const hasConsole = typeof console !== 'undefined'
|
|
36
|
+
const isDebug = Vue.config.debug || process.env.NODE_ENV !== 'production'
|
|
37
|
+
return hasConsole && isDebug
|
|
38
|
+
}
|
|
39
|
+
|
|
25
40
|
Vue.config.errorHandler = (error, vm, info) => {
|
|
26
41
|
honeybadger.notify(error, { context: { vm: extractContext(vm), info: info } })
|
|
27
42
|
if (typeof chainedErrorHandler === 'function') {
|
|
28
43
|
chainedErrorHandler.call(this.Vue, error, vm, info)
|
|
29
44
|
}
|
|
45
|
+
|
|
46
|
+
if (shouldLogError()) {
|
|
47
|
+
logError(Vue, error, vm, info)
|
|
48
|
+
}
|
|
30
49
|
}
|
|
31
50
|
}
|
|
32
51
|
}
|
package/src/vue-debug.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This was taken from https://github.com/vuejs/vue/blob/master/src/core/util/debug.js.
|
|
3
|
+
* The method generateStackTrace is used to log errors the same way as Vue logs them when errorHandler is not set.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const classifyRE = /(?:^|[-_])(\w)/g
|
|
7
|
+
const classify = str => str
|
|
8
|
+
.replace(classifyRE, c => c.toUpperCase())
|
|
9
|
+
.replace(/[-_]/g, '')
|
|
10
|
+
|
|
11
|
+
const formatComponentName = (vm, includeFile) => {
|
|
12
|
+
if (vm.$root === vm) {
|
|
13
|
+
return '<Root>'
|
|
14
|
+
}
|
|
15
|
+
const options = typeof vm === 'function' && vm.cid != null
|
|
16
|
+
? vm.options
|
|
17
|
+
: vm._isVue
|
|
18
|
+
? vm.$options || vm.constructor.options
|
|
19
|
+
: vm || {}
|
|
20
|
+
let name = options.name || options._componentTag
|
|
21
|
+
const file = options.__file
|
|
22
|
+
if (!name && file) {
|
|
23
|
+
const match = file.match(/([^/\\]+)\.vue$/)
|
|
24
|
+
name = match && match[1]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
(name ? `<${classify(name)}>` : '<Anonymous>') +
|
|
29
|
+
(file && includeFile !== false ? ` at ${file}` : '')
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const repeat = (str, n) => {
|
|
34
|
+
let res = ''
|
|
35
|
+
while (n) {
|
|
36
|
+
if (n % 2 === 1) res += str
|
|
37
|
+
if (n > 1) str += str
|
|
38
|
+
n >>= 1
|
|
39
|
+
}
|
|
40
|
+
return res
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export const generateComponentTrace = vm => {
|
|
44
|
+
if (vm._isVue && vm.$parent) {
|
|
45
|
+
const tree = []
|
|
46
|
+
let currentRecursiveSequence = 0
|
|
47
|
+
while (vm) {
|
|
48
|
+
if (tree.length > 0) {
|
|
49
|
+
const last = tree[tree.length - 1]
|
|
50
|
+
if (last.constructor === vm.constructor) {
|
|
51
|
+
currentRecursiveSequence++
|
|
52
|
+
vm = vm.$parent
|
|
53
|
+
continue
|
|
54
|
+
} else if (currentRecursiveSequence > 0) {
|
|
55
|
+
tree[tree.length - 1] = [last, currentRecursiveSequence]
|
|
56
|
+
currentRecursiveSequence = 0
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
tree.push(vm)
|
|
60
|
+
vm = vm.$parent
|
|
61
|
+
}
|
|
62
|
+
return '\n\nfound in\n\n' + tree
|
|
63
|
+
.map((vm, i) => `${
|
|
64
|
+
i === 0 ? '---> ' : repeat(' ', 5 + i * 2)
|
|
65
|
+
}${
|
|
66
|
+
Array.isArray(vm)
|
|
67
|
+
? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
|
|
68
|
+
: formatComponentName(vm)
|
|
69
|
+
}`)
|
|
70
|
+
.join('\n')
|
|
71
|
+
} else {
|
|
72
|
+
return `\n\n(found in ${formatComponentName(vm)})`
|
|
73
|
+
}
|
|
74
|
+
}
|
package/CHANGELOG.md
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
All notable changes to this project will be documented in this file.
|
|
3
|
-
|
|
4
|
-
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
5
|
-
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
6
|
-
|
|
7
|
-
## [Unreleased]
|
|
8
|
-
|
|
9
|
-
## [1.0.2] - 2021-02-17
|
|
10
|
-
### Fixed
|
|
11
|
-
- Fix TypeScript errors in Vue 2
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## [1.0.1] - 2021-02-17
|
|
15
|
-
### Fixed
|
|
16
|
-
- Add a module export with an `install` function. This fixes builds in newer Vue apps written in TypeScript
|
|
17
|
-
|
|
18
|
-
## [1.0.0] - 2021-01-19
|
|
19
|
-
### Changed
|
|
20
|
-
- Migrate honeybadger-js dependency to @honeybadger-io/js 3.0.0
|
|
21
|
-
See https://docs.honeybadger.io/lib/javascript/support/upgrading-to-v3.html
|
|
22
|
-
|
|
23
|
-
## [0.0.12] - 2020-09-24
|
|
24
|
-
### Fixed
|
|
25
|
-
- Bump honeybadger-js version
|
|
26
|
-
- Import `Honeybadger` in TypeScript definitions file (fixes potential missing
|
|
27
|
-
name error).
|
|
28
|
-
|
|
29
|
-
## [0.0.11] - 2020-04-24
|
|
30
|
-
### Fixed
|
|
31
|
-
- Update honeybadger-js to 2.2.1 (security release, see
|
|
32
|
-
[here](https://github.com/honeybadger-io/honeybadger-js/blob/master/CHANGELOG.md#220---2020-03-16))
|
|
33
|
-
|
|
34
|
-
## [0.0.10] - 2020-01-08
|
|
35
|
-
### Fixed
|
|
36
|
-
- Fix TypeScript type definitions
|
|
37
|
-
|
|
38
|
-
## [0.0.9] - 2019-12-18
|
|
39
|
-
### Fixed
|
|
40
|
-
- Deps & security updates
|
|
41
|
-
- TypeScript definitions
|
|
42
|
-
|
|
43
|
-
## [0.0.8] - 2019-05-28
|
|
44
|
-
### Fixed
|
|
45
|
-
- Added missing dist/ directory to release
|
|
46
|
-
|
|
47
|
-
## [0.0.7] - 2019-04-16
|
|
48
|
-
### Changed
|
|
49
|
-
- Refactored tests to include debug mode output
|
|
50
|
-
- Changed the debug output based on Vue debug mode
|
|
51
|
-
- Update honeybadger-js to v1.0. See
|
|
52
|
-
https://github.com/honeybadger-io/honeybadger-js/blob/master/CHANGELOG.md
|
|
53
|
-
|
|
54
|
-
## [0.0.6] - 2018-12-08
|
|
55
|
-
### Added
|
|
56
|
-
- Reduced size of context information sent to Notify
|
|
57
|
-
- We now send the props value to honeybadger
|
|
58
|
-
|
|
59
|
-
## [0.0.5] - 2018-12-07
|
|
60
|
-
### Added
|
|
61
|
-
- Dependency updates, additional documentation changes
|
|
62
|
-
|
|
63
|
-
## [0.0.4] - 2018-11-07
|
|
64
|
-
### Added
|
|
65
|
-
- Minor changes in Readme and travis configuration (no code changes)
|
|
66
|
-
|
|
67
|
-
## [0.0.3] - 2018-11-06
|
|
68
|
-
### Added
|
|
69
|
-
- Switch to yarn-based package lock
|
|
70
|
-
|
|
71
|
-
## [0.0.2] - 2018-11-06
|
|
72
|
-
### Added
|
|
73
|
-
- Added src folder to published artifact
|
|
74
|
-
|
|
75
|
-
## [0.0.1] - 2018-11-06
|
|
76
|
-
### Added
|
|
77
|
-
- Initial release (unpublished due to missing artifacts)
|