@honeybadger-io/js 4.8.0 → 4.8.2

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.
@@ -195,509 +195,564 @@ var stackTraceParser_esm = /*#__PURE__*/Object.freeze({
195
195
 
196
196
  var require$$0 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);
197
197
 
198
- var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
199
- if (k2 === undefined) k2 = k;
200
- var desc = Object.getOwnPropertyDescriptor(m, k);
201
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
202
- desc = { enumerable: true, get: function() { return m[k]; } };
203
- }
204
- Object.defineProperty(o, k2, desc);
205
- }) : (function(o, m, k, k2) {
206
- if (k2 === undefined) k2 = k;
207
- o[k2] = m[k];
208
- }));
209
- var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
210
- Object.defineProperty(o, "default", { enumerable: true, value: v });
211
- }) : function(o, v) {
212
- o["default"] = v;
213
- });
214
- var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
215
- if (mod && mod.__esModule) return mod;
216
- var result = {};
217
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
218
- __setModuleDefault(result, mod);
219
- return result;
220
- };
221
- var __awaiter$1 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
222
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
223
- return new (P || (P = Promise))(function (resolve, reject) {
224
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
225
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
226
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
227
- step((generator = generator.apply(thisArg, _arguments || [])).next());
228
- });
229
- };
230
- var __generator$1 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {
231
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
232
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
233
- function verb(n) { return function (v) { return step([n, v]); }; }
234
- function step(op) {
235
- if (f) throw new TypeError("Generator is already executing.");
236
- while (_) try {
237
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
238
- if (y = 0, t) op = [op[0] & 2, t.value];
239
- switch (op[0]) {
240
- case 0: case 1: t = op; break;
241
- case 4: _.label++; return { value: op[1], done: false };
242
- case 5: _.label++; y = op[1]; op = [0]; continue;
243
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
244
- default:
245
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
246
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
247
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
248
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
249
- if (t[2]) _.ops.pop();
250
- _.trys.pop(); continue;
251
- }
252
- op = body.call(thisArg, _);
253
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
254
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
255
- }
256
- };
257
- Object.defineProperty(util$1, "__esModule", { value: true });
258
- util$1.isBrowserConfig = util$1.clone = util$1.formatCGIData = util$1.filterUrl = util$1.filter = util$1.generateStackTrace = util$1.endpoint = util$1.instrument = util$1.isErrorObject = util$1.makeNotice = util$1.logger = util$1.sanitize = util$1.shallowClone = util$1.runAfterNotifyHandlers = util$1.runBeforeNotifyHandlers = util$1.getSourceForBacktrace = util$1.getCauses = util$1.makeBacktrace = util$1.objectIsExtensible = util$1.objectIsEmpty = util$1.mergeNotice = util$1.merge = void 0;
259
- var stackTraceParser = __importStar(require$$0);
260
- function merge(obj1, obj2) {
261
- var result = {};
262
- for (var k in obj1) {
263
- result[k] = obj1[k];
264
- }
265
- for (var k in obj2) {
266
- result[k] = obj2[k];
267
- }
268
- return result;
269
- }
270
- util$1.merge = merge;
271
- function mergeNotice(notice1, notice2) {
272
- var result = merge(notice1, notice2);
273
- if (notice1.context && notice2.context) {
274
- result.context = merge(notice1.context, notice2.context);
275
- }
276
- return result;
277
- }
278
- util$1.mergeNotice = mergeNotice;
279
- function objectIsEmpty(obj) {
280
- for (var k in obj) {
281
- if (Object.prototype.hasOwnProperty.call(obj, k)) {
282
- return false;
283
- }
284
- }
285
- return true;
286
- }
287
- util$1.objectIsEmpty = objectIsEmpty;
288
- function objectIsExtensible(obj) {
289
- if (typeof Object.isExtensible !== 'function') {
290
- return true;
291
- }
292
- return Object.isExtensible(obj);
293
- }
294
- util$1.objectIsExtensible = objectIsExtensible;
295
- function makeBacktrace(stack, shift) {
296
- if (shift === void 0) { shift = 0; }
297
- try {
298
- var backtrace = stackTraceParser
299
- .parse(stack)
300
- .map(function (line) {
301
- return {
302
- file: line.file,
303
- method: line.methodName,
304
- number: line.lineNumber,
305
- column: line.column
306
- };
307
- });
308
- backtrace.splice(0, shift);
309
- return backtrace;
310
- }
311
- catch (_err) {
312
- // TODO: log error
313
- return [];
314
- }
315
- }
316
- util$1.makeBacktrace = makeBacktrace;
317
- function getCauses(notice) {
318
- if (notice.cause) {
319
- var causes = [];
320
- var cause = notice;
321
- while (causes.length < 3 && (cause = cause.cause)) {
322
- causes.push({
323
- class: cause.name,
324
- message: cause.message,
325
- backtrace: typeof cause.stack == 'string' ? makeBacktrace(cause.stack) : null
326
- });
327
- }
328
- return causes;
329
- }
330
- return [];
331
- }
332
- util$1.getCauses = getCauses;
333
- function getSourceForBacktrace(backtrace, getSourceFileHandler) {
334
- return __awaiter$1(this, void 0, void 0, function () {
335
- var result, index, trace, fileContent;
336
- return __generator$1(this, function (_a) {
337
- switch (_a.label) {
338
- case 0:
339
- result = [];
340
- if (!getSourceFileHandler || !backtrace || !backtrace.length) {
341
- return [2 /*return*/, result];
342
- }
343
- index = 0;
344
- _a.label = 1;
345
- case 1:
346
- if (!backtrace.length) return [3 /*break*/, 3];
347
- trace = backtrace.splice(0)[index];
348
- return [4 /*yield*/, getSourceFileHandler(trace.file)];
349
- case 2:
350
- fileContent = _a.sent();
351
- result[index] = getSourceCodeSnippet(fileContent, trace.number);
352
- index++;
353
- return [3 /*break*/, 1];
354
- case 3: return [2 /*return*/, result];
355
- }
356
- });
357
- });
358
- }
359
- util$1.getSourceForBacktrace = getSourceForBacktrace;
360
- function runBeforeNotifyHandlers(notice, handlers) {
361
- var result = true;
362
- for (var i = 0, len = handlers.length; i < len; i++) {
363
- var handler = handlers[i];
364
- if (handler(notice) === false) {
365
- result = false;
366
- }
367
- }
368
- return result;
369
- }
370
- util$1.runBeforeNotifyHandlers = runBeforeNotifyHandlers;
371
- function runAfterNotifyHandlers(notice, handlers, error) {
372
- if (notice && notice.afterNotify) {
373
- notice.afterNotify(error, notice);
374
- }
375
- for (var i = 0, len = handlers.length; i < len; i++) {
376
- handlers[i](error, notice);
377
- }
378
- return true;
379
- }
380
- util$1.runAfterNotifyHandlers = runAfterNotifyHandlers;
381
- // Returns a new object with properties from other object.
382
- function shallowClone(obj) {
383
- if (typeof (obj) !== 'object' || obj === null) {
384
- return {};
385
- }
386
- var result = {};
387
- for (var k in obj) {
388
- result[k] = obj[k];
389
- }
390
- return result;
391
- }
392
- util$1.shallowClone = shallowClone;
393
- function sanitize$1(obj, maxDepth) {
394
- if (maxDepth === void 0) { maxDepth = 8; }
395
- var seenObjects = [];
396
- function seen(obj) {
397
- if (!obj || typeof (obj) !== 'object') {
398
- return false;
399
- }
400
- for (var i = 0; i < seenObjects.length; i++) {
401
- var value = seenObjects[i];
402
- if (value === obj) {
403
- return true;
404
- }
405
- }
406
- seenObjects.push(obj);
407
- return false;
408
- }
409
- function canSerialize(obj) {
410
- var typeOfObj = typeof obj;
411
- // Functions are TMI
412
- if (/function/.test(typeOfObj)) {
413
- // Let special toJSON method pass as it's used by JSON.stringify (#722)
414
- return obj.name === 'toJSON';
415
- }
416
- // Symbols can't convert to strings.
417
- if (/symbol/.test(typeOfObj)) {
418
- return false;
419
- }
420
- if (obj === null) {
421
- return false;
422
- }
423
- // No prototype, likely created with `Object.create(null)`.
424
- if (typeof obj === 'object' && typeof obj.hasOwnProperty === 'undefined') {
425
- return false;
426
- }
427
- return true;
428
- }
429
- function serialize(obj, depth) {
430
- if (depth === void 0) { depth = 0; }
431
- if (depth >= maxDepth) {
432
- return '[DEPTH]';
433
- }
434
- // Inspect invalid types
435
- if (!canSerialize(obj)) {
436
- return Object.prototype.toString.call(obj);
437
- }
438
- // Halt circular references
439
- if (seen(obj)) {
440
- return '[RECURSION]';
441
- }
442
- // Serialize inside arrays
443
- if (Array.isArray(obj)) {
444
- return obj.map(function (o) { return safeSerialize(o, depth + 1); });
445
- }
446
- // Serialize inside objects
447
- if (typeof (obj) === 'object') {
448
- var ret = {};
449
- for (var k in obj) {
450
- var v = obj[k];
451
- if (Object.prototype.hasOwnProperty.call(obj, k) && (k != null) && (v != null)) {
452
- ret[k] = safeSerialize(v, depth + 1);
453
- }
454
- }
455
- return ret;
456
- }
457
- // Return everything else untouched
458
- return obj;
459
- }
460
- function safeSerialize(obj, depth) {
461
- if (depth === void 0) { depth = 0; }
462
- try {
463
- return serialize(obj, depth);
464
- }
465
- catch (e) {
466
- return "[ERROR] ".concat(e);
467
- }
468
- }
469
- return safeSerialize(obj);
470
- }
471
- util$1.sanitize = sanitize$1;
472
- function logger(client) {
473
- var log = function (method) {
474
- return function () {
475
- var _a;
476
- var args = [];
477
- for (var _i = 0; _i < arguments.length; _i++) {
478
- args[_i] = arguments[_i];
479
- }
480
- if (method === 'debug') {
481
- if (!client.config.debug) {
482
- return;
483
- }
484
- // Log at default level so that you don't need to also enable verbose
485
- // logging in Chrome.
486
- method = 'log';
487
- }
488
- args.unshift('[Honeybadger]');
489
- (_a = client.config.logger)[method].apply(_a, args);
490
- };
491
- };
492
- return {
493
- log: log('log'),
494
- info: log('info'),
495
- debug: log('debug'),
496
- warn: log('warn'),
497
- error: log('error')
498
- };
499
- }
500
- util$1.logger = logger;
501
- /**
502
- * Converts any object into a notice object (which at minimum has the same
503
- * properties as Error, but supports additional Honeybadger properties.)
504
- */
505
- function makeNotice(thing) {
506
- var notice;
507
- if (!thing) {
508
- notice = {};
509
- }
510
- else if (isErrorObject(thing)) {
511
- var e = thing;
512
- notice = merge(thing, { name: e.name, message: e.message, stack: e.stack, cause: e.cause });
513
- }
514
- else if (typeof thing === 'object') {
515
- notice = shallowClone(thing);
516
- }
517
- else {
518
- var m = String(thing);
519
- notice = { message: m };
520
- }
521
- return notice;
522
- }
523
- util$1.makeNotice = makeNotice;
524
- function isErrorObject(thing) {
525
- return thing instanceof Error
526
- || Object.prototype.toString.call(thing) === '[object Error]'; // Important for cross-realm objects
527
- }
528
- util$1.isErrorObject = isErrorObject;
529
- /**
530
- * Instrument an existing function inside an object (usually global).
531
- * @param {!Object} object
532
- * @param {!String} name
533
- * @param {!Function} replacement
534
- */
535
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
536
- function instrument(object, name, replacement) {
537
- if (!object || !name || !replacement || !(name in object)) {
538
- return;
539
- }
540
- var original = object[name];
541
- while (original && original.__hb_original) {
542
- original = original.__hb_original;
543
- }
544
- try {
545
- object[name] = replacement(original);
546
- object[name].__hb_original = original;
547
- }
548
- catch (_e) {
549
- // Ignores errors like this one:
550
- // Error: TypeError: Cannot set property onunhandledrejection of [object Object] which has only a getter
551
- // User-Agent: Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/12.1 Chrome/79.0.3945.136 Mobile Safari/537.36
552
- }
553
- }
554
- util$1.instrument = instrument;
555
- function endpoint(base, path) {
556
- var endpoint = base.trim().replace(/\/$/, '');
557
- path = path.trim().replace(/(^\/|\/$)/g, '');
558
- return "".concat(endpoint, "/").concat(path);
559
- }
560
- util$1.endpoint = endpoint;
561
- function generateStackTrace() {
562
- try {
563
- throw new Error('');
564
- }
565
- catch (e) {
566
- if (e.stack) {
567
- return e.stack;
568
- }
569
- }
570
- var maxStackSize = 10;
571
- var stack = [];
572
- var curr = arguments.callee;
573
- while (curr && stack.length < maxStackSize) {
574
- if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) {
575
- stack.push(RegExp.$1 || '<anonymous>');
576
- }
577
- else {
578
- stack.push('<anonymous>');
579
- }
580
- try {
581
- curr = curr.caller;
582
- }
583
- catch (e) {
584
- break;
585
- }
586
- }
587
- return stack.join('\n');
588
- }
589
- util$1.generateStackTrace = generateStackTrace;
590
- function filter(obj, filters) {
591
- if (!is('Object', obj)) {
592
- return;
593
- }
594
- if (!is('Array', filters)) {
595
- filters = [];
596
- }
597
- var seen = [];
598
- function filter(obj) {
599
- var k, newObj;
600
- if (is('Object', obj) || is('Array', obj)) {
601
- if (seen.indexOf(obj) !== -1) {
602
- return '[CIRCULAR DATA STRUCTURE]';
603
- }
604
- seen.push(obj);
605
- }
606
- if (is('Object', obj)) {
607
- newObj = {};
608
- for (k in obj) {
609
- if (filterMatch(k, filters)) {
610
- newObj[k] = '[FILTERED]';
611
- }
612
- else {
613
- newObj[k] = filter(obj[k]);
614
- }
615
- }
616
- return newObj;
617
- }
618
- if (is('Array', obj)) {
619
- return obj.map(function (v) {
620
- return filter(v);
621
- });
622
- }
623
- if (is('Function', obj)) {
624
- return '[FUNC]';
625
- }
626
- return obj;
627
- }
628
- return filter(obj);
629
- }
630
- util$1.filter = filter;
631
- function filterMatch(key, filters) {
632
- for (var i = 0; i < filters.length; i++) {
633
- if (key.toLowerCase().indexOf(filters[i].toLowerCase()) !== -1) {
634
- return true;
635
- }
636
- }
637
- return false;
638
- }
639
- function is(type, obj) {
640
- var klass = Object.prototype.toString.call(obj).slice(8, -1);
641
- return obj !== undefined && obj !== null && klass === type;
642
- }
643
- function filterUrl(url, filters) {
644
- if (!filters) {
645
- return url;
646
- }
647
- if (typeof url !== 'string') {
648
- return url;
649
- }
650
- var query = url.split(/\?/, 2)[1];
651
- if (!query) {
652
- return url;
653
- }
654
- var result = url;
655
- query.split(/[&]\s?/).forEach(function (pair) {
656
- var _a = pair.split('=', 2), key = _a[0], value = _a[1];
657
- if (filterMatch(key, filters)) {
658
- result = result.replace("".concat(key, "=").concat(value), "".concat(key, "=[FILTERED]"));
659
- }
660
- });
661
- return result;
662
- }
663
- util$1.filterUrl = filterUrl;
664
- function formatCGIData(vars, prefix) {
665
- if (prefix === void 0) { prefix = ''; }
666
- var formattedVars = {};
667
- Object.keys(vars).forEach(function (key) {
668
- var formattedKey = prefix + key.replace(/\W/g, '_').toUpperCase();
669
- formattedVars[formattedKey] = vars[key];
670
- });
671
- return formattedVars;
672
- }
673
- util$1.formatCGIData = formatCGIData;
674
- function clone(obj) {
675
- return JSON.parse(JSON.stringify(obj));
676
- }
677
- util$1.clone = clone;
678
- function getSourceCodeSnippet(fileData, lineNumber, sourceRadius) {
679
- if (sourceRadius === void 0) { sourceRadius = 2; }
680
- if (!fileData) {
681
- return null;
682
- }
683
- var lines = fileData.split('\n');
684
- // add one empty line because array index starts from 0, but error line number is counted from 1
685
- lines.unshift('');
686
- var start = lineNumber - sourceRadius;
687
- var end = lineNumber + sourceRadius;
688
- var result = {};
689
- for (var i = start; i <= end; i++) {
690
- var line = lines[i];
691
- if (typeof line === 'string') {
692
- result[i] = line;
693
- }
694
- }
695
- return result;
696
- }
697
- function isBrowserConfig(config) {
698
- return config.async !== undefined;
699
- }
700
- util$1.isBrowserConfig = isBrowserConfig;
198
+ (function (exports) {
199
+ var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
200
+ if (k2 === undefined) k2 = k;
201
+ var desc = Object.getOwnPropertyDescriptor(m, k);
202
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
203
+ desc = { enumerable: true, get: function() { return m[k]; } };
204
+ }
205
+ Object.defineProperty(o, k2, desc);
206
+ }) : (function(o, m, k, k2) {
207
+ if (k2 === undefined) k2 = k;
208
+ o[k2] = m[k];
209
+ }));
210
+ var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
211
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
212
+ }) : function(o, v) {
213
+ o["default"] = v;
214
+ });
215
+ var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
216
+ if (mod && mod.__esModule) return mod;
217
+ var result = {};
218
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
219
+ __setModuleDefault(result, mod);
220
+ return result;
221
+ };
222
+ var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) {
223
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
224
+ return new (P || (P = Promise))(function (resolve, reject) {
225
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
226
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
227
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
228
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
229
+ });
230
+ };
231
+ var __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) {
232
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
233
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
234
+ function verb(n) { return function (v) { return step([n, v]); }; }
235
+ function step(op) {
236
+ if (f) throw new TypeError("Generator is already executing.");
237
+ while (_) try {
238
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
239
+ if (y = 0, t) op = [op[0] & 2, t.value];
240
+ switch (op[0]) {
241
+ case 0: case 1: t = op; break;
242
+ case 4: _.label++; return { value: op[1], done: false };
243
+ case 5: _.label++; y = op[1]; op = [0]; continue;
244
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
245
+ default:
246
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
247
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
248
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
249
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
250
+ if (t[2]) _.ops.pop();
251
+ _.trys.pop(); continue;
252
+ }
253
+ op = body.call(thisArg, _);
254
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
255
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
256
+ }
257
+ };
258
+ Object.defineProperty(exports, "__esModule", { value: true });
259
+ exports.isBrowserConfig = exports.clone = exports.formatCGIData = exports.filterUrl = exports.filter = exports.generateStackTrace = exports.endpoint = exports.instrument = exports.isErrorObject = exports.makeNotice = exports.logger = exports.sanitize = exports.shallowClone = exports.runAfterNotifyHandlers = exports.runBeforeNotifyHandlers = exports.getSourceForBacktrace = exports.getCauses = exports.calculateBacktraceShift = exports.DEFAULT_BACKTRACE_SHIFT = exports.makeBacktrace = exports.objectIsExtensible = exports.objectIsEmpty = exports.mergeNotice = exports.merge = void 0;
260
+ var stackTraceParser = __importStar(require$$0);
261
+ function merge(obj1, obj2) {
262
+ var result = {};
263
+ for (var k in obj1) {
264
+ result[k] = obj1[k];
265
+ }
266
+ for (var k in obj2) {
267
+ result[k] = obj2[k];
268
+ }
269
+ return result;
270
+ }
271
+ exports.merge = merge;
272
+ function mergeNotice(notice1, notice2) {
273
+ var result = merge(notice1, notice2);
274
+ if (notice1.context && notice2.context) {
275
+ result.context = merge(notice1.context, notice2.context);
276
+ }
277
+ return result;
278
+ }
279
+ exports.mergeNotice = mergeNotice;
280
+ function objectIsEmpty(obj) {
281
+ for (var k in obj) {
282
+ if (Object.prototype.hasOwnProperty.call(obj, k)) {
283
+ return false;
284
+ }
285
+ }
286
+ return true;
287
+ }
288
+ exports.objectIsEmpty = objectIsEmpty;
289
+ function objectIsExtensible(obj) {
290
+ if (typeof Object.isExtensible !== 'function') {
291
+ return true;
292
+ }
293
+ return Object.isExtensible(obj);
294
+ }
295
+ exports.objectIsExtensible = objectIsExtensible;
296
+ function makeBacktrace(stack, filterHbSourceCode, logger) {
297
+ if (filterHbSourceCode === void 0) { filterHbSourceCode = false; }
298
+ if (logger === void 0) { logger = console; }
299
+ try {
300
+ var backtrace = stackTraceParser
301
+ .parse(stack)
302
+ .map(function (line) {
303
+ return {
304
+ file: line.file,
305
+ method: line.methodName,
306
+ number: line.lineNumber,
307
+ column: line.column
308
+ };
309
+ });
310
+ if (filterHbSourceCode) {
311
+ backtrace.splice(0, calculateBacktraceShift(backtrace));
312
+ }
313
+ return backtrace;
314
+ }
315
+ catch (err) {
316
+ logger.debug(err);
317
+ return [];
318
+ }
319
+ }
320
+ exports.makeBacktrace = makeBacktrace;
321
+ function isFrameFromHbSourceCode(frame) {
322
+ var hasHbFile = false;
323
+ var hasHbMethod = false;
324
+ if (frame.file) {
325
+ hasHbFile = frame.file.toLowerCase().indexOf('@honeybadger-io') > -1;
326
+ }
327
+ if (frame.method) {
328
+ hasHbMethod = frame.method.toLowerCase().indexOf('@honeybadger-io') > -1;
329
+ }
330
+ return hasHbFile || hasHbMethod;
331
+ }
332
+ exports.DEFAULT_BACKTRACE_SHIFT = 3;
333
+ /**
334
+ * If {@link generateStackTrace} is used, we want to exclude frames that come from
335
+ * Honeybadger's source code.
336
+ *
337
+ * Logic:
338
+ * - For each frame, increment the shift if source code is from Honeybadger
339
+ * - If a frame from an <anonymous> file is encountered increment the shift ONLY if between Honeybadger source code
340
+ * (i.e. previous and next frames are from Honeybadger)
341
+ * - Exit when frame encountered is not from Honeybadger source code
342
+ *
343
+ * Note: this will not always work, especially in browser versions where code
344
+ * is minified, uglified and bundled.
345
+ * For those cases we default to 3:
346
+ * - generateStackTrace
347
+ * - makeNotice
348
+ * - notify
349
+ */
350
+ function calculateBacktraceShift(backtrace) {
351
+ var shift = 0;
352
+ for (var i = 0; i < backtrace.length; i++) {
353
+ var frame = backtrace[i];
354
+ if (isFrameFromHbSourceCode(frame)) {
355
+ shift++;
356
+ continue;
357
+ }
358
+ if (!frame.file || frame.file === '<anonymous>') {
359
+ var nextFrame = backtrace[i + 1];
360
+ if (nextFrame && isFrameFromHbSourceCode(nextFrame)) {
361
+ shift++;
362
+ continue;
363
+ }
364
+ }
365
+ break;
366
+ }
367
+ return shift || exports.DEFAULT_BACKTRACE_SHIFT;
368
+ }
369
+ exports.calculateBacktraceShift = calculateBacktraceShift;
370
+ function getCauses(notice, logger) {
371
+ if (notice.cause) {
372
+ var causes = [];
373
+ var cause = notice;
374
+ while (causes.length < 3 && (cause = cause.cause)) {
375
+ causes.push({
376
+ class: cause.name,
377
+ message: cause.message,
378
+ backtrace: typeof cause.stack == 'string' ? makeBacktrace(cause.stack, false, logger) : null
379
+ });
380
+ }
381
+ return causes;
382
+ }
383
+ return [];
384
+ }
385
+ exports.getCauses = getCauses;
386
+ function getSourceForBacktrace(backtrace, getSourceFileHandler) {
387
+ return __awaiter(this, void 0, void 0, function () {
388
+ var result, index, trace, fileContent;
389
+ return __generator(this, function (_a) {
390
+ switch (_a.label) {
391
+ case 0:
392
+ result = [];
393
+ if (!getSourceFileHandler || !backtrace || !backtrace.length) {
394
+ return [2 /*return*/, result];
395
+ }
396
+ index = 0;
397
+ _a.label = 1;
398
+ case 1:
399
+ if (!backtrace.length) return [3 /*break*/, 3];
400
+ trace = backtrace.splice(0)[index];
401
+ return [4 /*yield*/, getSourceFileHandler(trace.file)];
402
+ case 2:
403
+ fileContent = _a.sent();
404
+ result[index] = getSourceCodeSnippet(fileContent, trace.number);
405
+ index++;
406
+ return [3 /*break*/, 1];
407
+ case 3: return [2 /*return*/, result];
408
+ }
409
+ });
410
+ });
411
+ }
412
+ exports.getSourceForBacktrace = getSourceForBacktrace;
413
+ function runBeforeNotifyHandlers(notice, handlers) {
414
+ var result = true;
415
+ for (var i = 0, len = handlers.length; i < len; i++) {
416
+ var handler = handlers[i];
417
+ if (handler(notice) === false) {
418
+ result = false;
419
+ }
420
+ }
421
+ return result;
422
+ }
423
+ exports.runBeforeNotifyHandlers = runBeforeNotifyHandlers;
424
+ function runAfterNotifyHandlers(notice, handlers, error) {
425
+ if (notice && notice.afterNotify) {
426
+ notice.afterNotify(error, notice);
427
+ }
428
+ for (var i = 0, len = handlers.length; i < len; i++) {
429
+ handlers[i](error, notice);
430
+ }
431
+ return true;
432
+ }
433
+ exports.runAfterNotifyHandlers = runAfterNotifyHandlers;
434
+ // Returns a new object with properties from other object.
435
+ function shallowClone(obj) {
436
+ if (typeof (obj) !== 'object' || obj === null) {
437
+ return {};
438
+ }
439
+ var result = {};
440
+ for (var k in obj) {
441
+ result[k] = obj[k];
442
+ }
443
+ return result;
444
+ }
445
+ exports.shallowClone = shallowClone;
446
+ function sanitize(obj, maxDepth) {
447
+ if (maxDepth === void 0) { maxDepth = 8; }
448
+ var seenObjects = [];
449
+ function seen(obj) {
450
+ if (!obj || typeof (obj) !== 'object') {
451
+ return false;
452
+ }
453
+ for (var i = 0; i < seenObjects.length; i++) {
454
+ var value = seenObjects[i];
455
+ if (value === obj) {
456
+ return true;
457
+ }
458
+ }
459
+ seenObjects.push(obj);
460
+ return false;
461
+ }
462
+ function canSerialize(obj) {
463
+ var typeOfObj = typeof obj;
464
+ // Functions are TMI
465
+ if (/function/.test(typeOfObj)) {
466
+ // Let special toJSON method pass as it's used by JSON.stringify (#722)
467
+ return obj.name === 'toJSON';
468
+ }
469
+ // Symbols can't convert to strings.
470
+ if (/symbol/.test(typeOfObj)) {
471
+ return false;
472
+ }
473
+ if (obj === null) {
474
+ return false;
475
+ }
476
+ // No prototype, likely created with `Object.create(null)`.
477
+ if (typeof obj === 'object' && typeof obj.hasOwnProperty === 'undefined') {
478
+ return false;
479
+ }
480
+ return true;
481
+ }
482
+ function serialize(obj, depth) {
483
+ if (depth === void 0) { depth = 0; }
484
+ if (depth >= maxDepth) {
485
+ return '[DEPTH]';
486
+ }
487
+ // Inspect invalid types
488
+ if (!canSerialize(obj)) {
489
+ return Object.prototype.toString.call(obj);
490
+ }
491
+ // Halt circular references
492
+ if (seen(obj)) {
493
+ return '[RECURSION]';
494
+ }
495
+ // Serialize inside arrays
496
+ if (Array.isArray(obj)) {
497
+ return obj.map(function (o) { return safeSerialize(o, depth + 1); });
498
+ }
499
+ // Serialize inside objects
500
+ if (typeof (obj) === 'object') {
501
+ var ret = {};
502
+ for (var k in obj) {
503
+ var v = obj[k];
504
+ if (Object.prototype.hasOwnProperty.call(obj, k) && (k != null) && (v != null)) {
505
+ ret[k] = safeSerialize(v, depth + 1);
506
+ }
507
+ }
508
+ return ret;
509
+ }
510
+ // Return everything else untouched
511
+ return obj;
512
+ }
513
+ function safeSerialize(obj, depth) {
514
+ if (depth === void 0) { depth = 0; }
515
+ try {
516
+ return serialize(obj, depth);
517
+ }
518
+ catch (e) {
519
+ return "[ERROR] ".concat(e);
520
+ }
521
+ }
522
+ return safeSerialize(obj);
523
+ }
524
+ exports.sanitize = sanitize;
525
+ function logger(client) {
526
+ var log = function (method) {
527
+ return function () {
528
+ var _a;
529
+ var args = [];
530
+ for (var _i = 0; _i < arguments.length; _i++) {
531
+ args[_i] = arguments[_i];
532
+ }
533
+ if (method === 'debug') {
534
+ if (!client.config.debug) {
535
+ return;
536
+ }
537
+ // Log at default level so that you don't need to also enable verbose
538
+ // logging in Chrome.
539
+ method = 'log';
540
+ }
541
+ args.unshift('[Honeybadger]');
542
+ (_a = client.config.logger)[method].apply(_a, args);
543
+ };
544
+ };
545
+ return {
546
+ log: log('log'),
547
+ info: log('info'),
548
+ debug: log('debug'),
549
+ warn: log('warn'),
550
+ error: log('error')
551
+ };
552
+ }
553
+ exports.logger = logger;
554
+ /**
555
+ * Converts any object into a notice object (which at minimum has the same
556
+ * properties as Error, but supports additional Honeybadger properties.)
557
+ */
558
+ function makeNotice(thing) {
559
+ var notice;
560
+ if (!thing) {
561
+ notice = {};
562
+ }
563
+ else if (isErrorObject(thing)) {
564
+ var e = thing;
565
+ notice = merge(thing, { name: e.name, message: e.message, stack: e.stack, cause: e.cause });
566
+ }
567
+ else if (typeof thing === 'object') {
568
+ notice = shallowClone(thing);
569
+ }
570
+ else {
571
+ var m = String(thing);
572
+ notice = { message: m };
573
+ }
574
+ return notice;
575
+ }
576
+ exports.makeNotice = makeNotice;
577
+ function isErrorObject(thing) {
578
+ return thing instanceof Error
579
+ || Object.prototype.toString.call(thing) === '[object Error]'; // Important for cross-realm objects
580
+ }
581
+ exports.isErrorObject = isErrorObject;
582
+ /**
583
+ * Instrument an existing function inside an object (usually global).
584
+ * @param {!Object} object
585
+ * @param {!String} name
586
+ * @param {!Function} replacement
587
+ */
588
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
589
+ function instrument(object, name, replacement) {
590
+ if (!object || !name || !replacement || !(name in object)) {
591
+ return;
592
+ }
593
+ var original = object[name];
594
+ while (original && original.__hb_original) {
595
+ original = original.__hb_original;
596
+ }
597
+ try {
598
+ object[name] = replacement(original);
599
+ object[name].__hb_original = original;
600
+ }
601
+ catch (_e) {
602
+ // Ignores errors like this one:
603
+ // Error: TypeError: Cannot set property onunhandledrejection of [object Object] which has only a getter
604
+ // User-Agent: Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/12.1 Chrome/79.0.3945.136 Mobile Safari/537.36
605
+ }
606
+ }
607
+ exports.instrument = instrument;
608
+ function endpoint(base, path) {
609
+ var endpoint = base.trim().replace(/\/$/, '');
610
+ path = path.trim().replace(/(^\/|\/$)/g, '');
611
+ return "".concat(endpoint, "/").concat(path);
612
+ }
613
+ exports.endpoint = endpoint;
614
+ function generateStackTrace() {
615
+ try {
616
+ throw new Error('');
617
+ }
618
+ catch (e) {
619
+ if (e.stack) {
620
+ return e.stack;
621
+ }
622
+ }
623
+ var maxStackSize = 10;
624
+ var stack = [];
625
+ var curr = arguments.callee;
626
+ while (curr && stack.length < maxStackSize) {
627
+ if (/function(?:\s+([\w$]+))+\s*\(/.test(curr.toString())) {
628
+ stack.push(RegExp.$1 || '<anonymous>');
629
+ }
630
+ else {
631
+ stack.push('<anonymous>');
632
+ }
633
+ try {
634
+ curr = curr.caller;
635
+ }
636
+ catch (e) {
637
+ break;
638
+ }
639
+ }
640
+ return stack.join('\n');
641
+ }
642
+ exports.generateStackTrace = generateStackTrace;
643
+ function filter(obj, filters) {
644
+ if (!is('Object', obj)) {
645
+ return;
646
+ }
647
+ if (!is('Array', filters)) {
648
+ filters = [];
649
+ }
650
+ var seen = [];
651
+ function filter(obj) {
652
+ var k, newObj;
653
+ if (is('Object', obj) || is('Array', obj)) {
654
+ if (seen.indexOf(obj) !== -1) {
655
+ return '[CIRCULAR DATA STRUCTURE]';
656
+ }
657
+ seen.push(obj);
658
+ }
659
+ if (is('Object', obj)) {
660
+ newObj = {};
661
+ for (k in obj) {
662
+ if (filterMatch(k, filters)) {
663
+ newObj[k] = '[FILTERED]';
664
+ }
665
+ else {
666
+ newObj[k] = filter(obj[k]);
667
+ }
668
+ }
669
+ return newObj;
670
+ }
671
+ if (is('Array', obj)) {
672
+ return obj.map(function (v) {
673
+ return filter(v);
674
+ });
675
+ }
676
+ if (is('Function', obj)) {
677
+ return '[FUNC]';
678
+ }
679
+ return obj;
680
+ }
681
+ return filter(obj);
682
+ }
683
+ exports.filter = filter;
684
+ function filterMatch(key, filters) {
685
+ for (var i = 0; i < filters.length; i++) {
686
+ if (key.toLowerCase().indexOf(filters[i].toLowerCase()) !== -1) {
687
+ return true;
688
+ }
689
+ }
690
+ return false;
691
+ }
692
+ function is(type, obj) {
693
+ var klass = Object.prototype.toString.call(obj).slice(8, -1);
694
+ return obj !== undefined && obj !== null && klass === type;
695
+ }
696
+ function filterUrl(url, filters) {
697
+ if (!filters) {
698
+ return url;
699
+ }
700
+ if (typeof url !== 'string') {
701
+ return url;
702
+ }
703
+ var query = url.split(/\?/, 2)[1];
704
+ if (!query) {
705
+ return url;
706
+ }
707
+ var result = url;
708
+ query.split(/[&]\s?/).forEach(function (pair) {
709
+ var _a = pair.split('=', 2), key = _a[0], value = _a[1];
710
+ if (filterMatch(key, filters)) {
711
+ result = result.replace("".concat(key, "=").concat(value), "".concat(key, "=[FILTERED]"));
712
+ }
713
+ });
714
+ return result;
715
+ }
716
+ exports.filterUrl = filterUrl;
717
+ function formatCGIData(vars, prefix) {
718
+ if (prefix === void 0) { prefix = ''; }
719
+ var formattedVars = {};
720
+ Object.keys(vars).forEach(function (key) {
721
+ var formattedKey = prefix + key.replace(/\W/g, '_').toUpperCase();
722
+ formattedVars[formattedKey] = vars[key];
723
+ });
724
+ return formattedVars;
725
+ }
726
+ exports.formatCGIData = formatCGIData;
727
+ function clone(obj) {
728
+ return JSON.parse(JSON.stringify(obj));
729
+ }
730
+ exports.clone = clone;
731
+ function getSourceCodeSnippet(fileData, lineNumber, sourceRadius) {
732
+ if (sourceRadius === void 0) { sourceRadius = 2; }
733
+ if (!fileData) {
734
+ return null;
735
+ }
736
+ var lines = fileData.split('\n');
737
+ // add one empty line because array index starts from 0, but error line number is counted from 1
738
+ lines.unshift('');
739
+ var start = lineNumber - sourceRadius;
740
+ var end = lineNumber + sourceRadius;
741
+ var result = {};
742
+ for (var i = start; i <= end; i++) {
743
+ var line = lines[i];
744
+ if (typeof line === 'string') {
745
+ result[i] = line;
746
+ }
747
+ }
748
+ return result;
749
+ }
750
+ function isBrowserConfig(config) {
751
+ return config.async !== undefined;
752
+ }
753
+ exports.isBrowserConfig = isBrowserConfig;
754
+
755
+ } (util$1));
701
756
 
702
757
  var store = {};
703
758
 
@@ -757,7 +812,7 @@ var store_1 = store;
757
812
  var notifier = {
758
813
  name: 'honeybadger-js',
759
814
  url: 'https://github.com/honeybadger-io/honeybadger-js',
760
- version: '4.8.0'
815
+ version: '4.8.2'
761
816
  };
762
817
  // Split at commas and spaces
763
818
  var TAG_SEPARATOR = /,|\s+/;
@@ -979,12 +1034,13 @@ var Client = /** @class */ (function () {
979
1034
  revision: notice.revision || this.config.revision,
980
1035
  tags: uniqueTags,
981
1036
  });
982
- var backtraceShift = 0;
983
1037
  if (typeof notice.stack !== 'string' || !notice.stack.trim()) {
984
1038
  notice.stack = (0, util_1$4.generateStackTrace)();
985
- backtraceShift = 2;
1039
+ notice.backtrace = (0, util_1$4.makeBacktrace)(notice.stack, true, this.logger);
1040
+ }
1041
+ else {
1042
+ notice.backtrace = (0, util_1$4.makeBacktrace)(notice.stack, false, this.logger);
986
1043
  }
987
- notice.backtrace = (0, util_1$4.makeBacktrace)(notice.stack, backtraceShift);
988
1044
  return notice;
989
1045
  };
990
1046
  Client.prototype.addBreadcrumb = function (message, opts) {
@@ -1030,7 +1086,7 @@ var Client = /** @class */ (function () {
1030
1086
  backtrace: notice.backtrace,
1031
1087
  fingerprint: notice.fingerprint,
1032
1088
  tags: notice.tags,
1033
- causes: (0, util_1$4.getCauses)(notice),
1089
+ causes: (0, util_1$4.getCauses)(notice, this.logger),
1034
1090
  },
1035
1091
  request: {
1036
1092
  url: (0, util_1$4.filterUrl)(notice.url, this.config.filters),