@honeybadger-io/js 6.16.6 → 6.17.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.
@@ -253,7 +253,7 @@ var require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);
253
253
  }
254
254
  };
255
255
  Object.defineProperty(exports, "__esModule", { value: true });
256
- exports.logDeprecatedMethod = exports.globalThisOrWindow = exports.isBrowserConfig = exports.clone = exports.formatCGIData = exports.filterBreadcrumbs = exports.filterUrl = exports.filter = exports.generateStackTrace = exports.endpoint = exports.instrumentConsole = exports.instrument = exports.isErrorObject = exports.makeNotice = exports.logger = exports.sanitize = exports.shallowClone = exports.runAfterNotifyHandlers = exports.shouldSampleEvent = exports.resolveInsights = exports.runBeforeEventHandlers = exports.runBeforeNotifyHandlers = exports.getSourceForBacktrace = exports.getCauses = exports.calculateBacktraceShift = exports.DEFAULT_BACKTRACE_SHIFT = exports.makeBacktrace = exports.objectIsExtensible = exports.objectIsEmpty = exports.mergeNotice = exports.merge = void 0;
256
+ exports.logDeprecatedMethod = exports.globalThisOrWindow = exports.isBrowserConfig = exports.clone = exports.formatCGIData = exports.filterBreadcrumbs = exports.filterUrl = exports.filter = exports.generateStackTrace = exports.endpoint = exports.instrumentConsole = exports.instrument = exports.isErrorObject = exports.makeNotice = exports.logger = exports.sanitize = exports.shallowClone = exports.runAfterNotifyHandlers = exports.shouldSampleEvent = exports.resolveInsights = exports.runBeforeBreadcrumbHandlers = exports.runBeforeEventHandlers = exports.runBeforeNotifyHandlers = exports.getSourceForBacktrace = exports.getCauses = exports.calculateBacktraceShift = exports.DEFAULT_BACKTRACE_SHIFT = exports.makeBacktrace = exports.objectIsExtensible = exports.objectIsEmpty = exports.mergeNotice = exports.merge = void 0;
257
257
  /* eslint-disable prefer-rest-params */
258
258
  var stackTraceParser = __importStar(require$$0$1);
259
259
  function merge(obj1, obj2) {
@@ -466,6 +466,25 @@ var require$$0$1 = /*@__PURE__*/getAugmentedNamespace(stackTraceParser_esm);
466
466
  });
467
467
  }
468
468
  exports.runBeforeEventHandlers = runBeforeEventHandlers;
469
+ function runBeforeBreadcrumbHandlers(breadcrumb, handlers, logger) {
470
+ for (var i = 0, len = handlers.length; i < len; i++) {
471
+ var result = void 0;
472
+ try {
473
+ result = handlers[i](breadcrumb);
474
+ }
475
+ catch (err) {
476
+ // Breadcrumbs are recorded inside instrumented fetch/XHR/DOM callbacks,
477
+ // so a buggy handler must not throw into the host app. Log and treat as no-op.
478
+ logger === null || logger === void 0 ? void 0 : logger.error('beforeBreadcrumb handler threw; continuing', err);
479
+ continue;
480
+ }
481
+ if (result === false) {
482
+ return false;
483
+ }
484
+ }
485
+ return true;
486
+ }
487
+ exports.runBeforeBreadcrumbHandlers = runBeforeBreadcrumbHandlers;
469
488
  function resolveInsights(config) {
470
489
  var _a, _b;
471
490
  var insights = config.insights;
@@ -1531,12 +1550,14 @@ var Client = /** @class */ (function () {
1531
1550
  this.__store = null;
1532
1551
  this.__beforeNotifyHandlers = [];
1533
1552
  this.__beforeEventHandlers = [];
1553
+ this.__beforeBreadcrumbHandlers = [];
1554
+ this.__runningBeforeBreadcrumbHandlers = false;
1534
1555
  this.__afterNotifyHandlers = [];
1535
1556
  this.__pendingEvents = new Set();
1536
1557
  this.__notifier = {
1537
1558
  name: '@honeybadger-io/core',
1538
1559
  url: 'https://github.com/honeybadger-io/honeybadger-js/tree/master/packages/core',
1539
- version: '6.16.6'
1560
+ version: '6.17.0'
1540
1561
  };
1541
1562
  this.config = __assign(__assign({}, defaults_1.CONFIG), opts);
1542
1563
  this.__initStore();
@@ -1603,6 +1624,10 @@ var Client = /** @class */ (function () {
1603
1624
  this.__beforeEventHandlers.push(handler);
1604
1625
  return this;
1605
1626
  };
1627
+ Client.prototype.beforeBreadcrumb = function (handler) {
1628
+ this.__beforeBreadcrumbHandlers.push(handler);
1629
+ return this;
1630
+ };
1606
1631
  Client.prototype.afterNotify = function (handler) {
1607
1632
  this.__afterNotifyHandlers.push(handler);
1608
1633
  return this;
@@ -1808,12 +1833,29 @@ var Client = /** @class */ (function () {
1808
1833
  var metadata = (0, util_1.shallowClone)(opts.metadata);
1809
1834
  var category = opts.category || 'custom';
1810
1835
  var timestamp = new Date().toISOString();
1811
- this.__store.addBreadcrumb({
1836
+ var breadcrumb = {
1812
1837
  category: category,
1813
1838
  message: message,
1814
1839
  metadata: metadata,
1815
1840
  timestamp: timestamp
1816
- });
1841
+ };
1842
+ // A handler that logs, or the error we log when a handler throws, goes
1843
+ // through instrumented console methods and lands back here. Skipping the
1844
+ // handlers for those breadcrumbs keeps that from recursing.
1845
+ if (!this.__runningBeforeBreadcrumbHandlers) {
1846
+ this.__runningBeforeBreadcrumbHandlers = true;
1847
+ var keep = void 0;
1848
+ try {
1849
+ keep = (0, util_1.runBeforeBreadcrumbHandlers)(breadcrumb, this.__beforeBreadcrumbHandlers, this.logger);
1850
+ }
1851
+ finally {
1852
+ this.__runningBeforeBreadcrumbHandlers = false;
1853
+ }
1854
+ if (!keep) {
1855
+ return this;
1856
+ }
1857
+ }
1858
+ this.__store.addBreadcrumb(breadcrumb);
1817
1859
  return this;
1818
1860
  };
1819
1861
  /**