1 | Object.defineProperty(exports, "__esModule", { value: true });
|
2 | var tslib_1 = require("tslib");
|
3 | var core_1 = require("@sentry/core");
|
4 | var utils_1 = require("@sentry/utils");
|
5 | var parsers_1 = require("../parsers");
|
6 | var DEFAULT_KEY = 'cause';
|
7 | var DEFAULT_LIMIT = 5;
|
8 |
|
9 | var LinkedErrors = (function () {
|
10 | |
11 |
|
12 |
|
13 | function LinkedErrors(options) {
|
14 | if (options === void 0) { options = {}; }
|
15 | |
16 |
|
17 |
|
18 | this.name = LinkedErrors.id;
|
19 | this._key = options.key || DEFAULT_KEY;
|
20 | this._limit = options.limit || DEFAULT_LIMIT;
|
21 | }
|
22 | |
23 |
|
24 |
|
25 | LinkedErrors.prototype.setupOnce = function () {
|
26 | core_1.addGlobalEventProcessor(function (event, hint) {
|
27 | var self = core_1.getCurrentHub().getIntegration(LinkedErrors);
|
28 | if (self) {
|
29 | var handler = self._handler && self._handler.bind(self);
|
30 | return typeof handler === 'function' ? handler(event, hint) : event;
|
31 | }
|
32 | return event;
|
33 | });
|
34 | };
|
35 | |
36 |
|
37 |
|
38 | LinkedErrors.prototype._handler = function (event, hint) {
|
39 | var _this = this;
|
40 | if (!event.exception || !event.exception.values || !hint || !utils_1.isInstanceOf(hint.originalException, Error)) {
|
41 | return utils_1.SyncPromise.resolve(event);
|
42 | }
|
43 | return new utils_1.SyncPromise(function (resolve) {
|
44 | void _this._walkErrorTree(hint.originalException, _this._key)
|
45 | .then(function (linkedErrors) {
|
46 | if (event && event.exception && event.exception.values) {
|
47 | event.exception.values = tslib_1.__spread(linkedErrors, event.exception.values);
|
48 | }
|
49 | resolve(event);
|
50 | })
|
51 | .then(null, function () {
|
52 | resolve(event);
|
53 | });
|
54 | });
|
55 | };
|
56 | |
57 |
|
58 |
|
59 | LinkedErrors.prototype._walkErrorTree = function (error, key, stack) {
|
60 | var _this = this;
|
61 | if (stack === void 0) { stack = []; }
|
62 | if (!utils_1.isInstanceOf(error[key], Error) || stack.length + 1 >= this._limit) {
|
63 | return utils_1.SyncPromise.resolve(stack);
|
64 | }
|
65 | return new utils_1.SyncPromise(function (resolve, reject) {
|
66 | void parsers_1.getExceptionFromError(error[key])
|
67 | .then(function (exception) {
|
68 | void _this._walkErrorTree(error[key], key, tslib_1.__spread([exception], stack))
|
69 | .then(resolve)
|
70 | .then(null, function () {
|
71 | reject();
|
72 | });
|
73 | })
|
74 | .then(null, function () {
|
75 | reject();
|
76 | });
|
77 | });
|
78 | };
|
79 | |
80 |
|
81 |
|
82 | LinkedErrors.id = 'LinkedErrors';
|
83 | return LinkedErrors;
|
84 | }());
|
85 | exports.LinkedErrors = LinkedErrors;
|
86 |
|
\ | No newline at end of file |