@commercetools-frontend/sentry 27.9.5 → 27.10.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.
@@ -8,6 +8,17 @@ var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
8
8
  var Sentry = require('@sentry/react');
9
9
  var browser = require('@sentry/browser');
10
10
  var history = require('@commercetools-frontend/browser-history');
11
+ var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
12
+ var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
13
+ var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
14
+ var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
15
+ var _endsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/ends-with');
16
+ var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
17
+ var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
18
+ var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
19
+ var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
20
+ var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
21
+ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
11
22
  var _Reflect$construct = require('@babel/runtime-corejs3/core-js-stable/reflect/construct');
12
23
  var _classCallCheck = require('@babel/runtime-corejs3/helpers/classCallCheck');
13
24
  var _createClass = require('@babel/runtime-corejs3/helpers/createClass');
@@ -41,10 +52,60 @@ var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesI
41
52
  var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
42
53
  var Sentry__namespace = /*#__PURE__*/_interopNamespace(Sentry);
43
54
  var history__default = /*#__PURE__*/_interopDefault(history);
55
+ var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
56
+ var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
57
+ var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty);
58
+ var _endsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_endsWithInstanceProperty);
59
+ var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
60
+ var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
61
+ var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
62
+ var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
63
+ var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
64
+ var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
44
65
  var _Reflect$construct__default = /*#__PURE__*/_interopDefault(_Reflect$construct);
45
66
 
46
67
  // NOTE: This string will be replaced on build time with the package version.
47
- var version = "27.9.5";
68
+ var version = "27.10.0";
69
+
70
+ function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
71
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context5 = ownKeys(Object(t), !0)).call(_context5, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context6 = ownKeys(Object(t))).call(_context6, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
72
+ const MEASURE_SUFFIX = ':from-nav';
73
+
74
+ // Sentry measurement names may not contain colons (Relay restricts them to
75
+ // alphanumerics, `-`, `_`, `.`), so `mc:intl-ready:from-nav` becomes
76
+ // `mc.intl-ready`.
77
+ const toMeasurementKey = measureName => _sliceInstanceProperty__default["default"](measureName).call(measureName, 0, -MEASURE_SUFFIX.length).replace(/:/g, '.');
78
+ function addPerformanceMeasurementsToTransaction(event) {
79
+ // The document's `mc:*` measures describe the original page load. Navigation
80
+ // transactions belong to SPA route changes and must not repeat them.
81
+ if (event.contexts?.trace?.op !== 'pageload') return event;
82
+ if (typeof performance === 'undefined' || !performance.getEntriesByType) return event;
83
+ try {
84
+ var _context;
85
+ const markMeasures = _filterInstanceProperty__default["default"](_context = performance.getEntriesByType('measure')).call(_context, entry => {
86
+ var _context2, _context3;
87
+ return _startsWithInstanceProperty__default["default"](_context2 = entry.name).call(_context2, 'mc:') && _endsWithInstanceProperty__default["default"](_context3 = entry.name).call(_context3, MEASURE_SUFFIX);
88
+ });
89
+ for (const entry of markMeasures) {
90
+ var _context4;
91
+ const key = toMeasurementKey(entry.name);
92
+ event.measurements = event.measurements ?? {};
93
+ if (!(key in event.measurements)) {
94
+ event.measurements[key] = {
95
+ value: entry.duration,
96
+ unit: 'millisecond'
97
+ };
98
+ }
99
+ event.contexts.trace.data = _objectSpread(_objectSpread({}, event.contexts.trace.data), {}, {
100
+ [_sliceInstanceProperty__default["default"](_context4 = entry.name).call(_context4, 0, -MEASURE_SUFFIX.length)]: entry.duration
101
+ });
102
+ }
103
+ } catch {
104
+ // A throw here would lose the whole transaction; the measurements are
105
+ // not worth that.
106
+ }
107
+ return event;
108
+ }
48
109
 
49
110
  const makeErrorToCapture = error => {
50
111
  if (error instanceof Error) return error;
@@ -118,7 +179,8 @@ const boot = () => {
118
179
  // We only redact PII from event fields, so hint is unused for now.
119
180
  beforeSend(event, _hint) {
120
181
  return redactUnsafeEventFields(event);
121
- }
182
+ },
183
+ beforeSendTransaction: addPerformanceMeasurementsToTransaction
122
184
  });
123
185
  const sentryScope = Sentry__namespace.getCurrentScope();
124
186
  sentryScope.setTag('role', 'frontend');
@@ -238,6 +300,7 @@ SentryUserLogoutTracker.displayName = 'SentryUserLogoutTracker';
238
300
 
239
301
  exports.SentryUserLogoutTracker = SentryUserLogoutTracker;
240
302
  exports.SentryUserTracker = SentryUserTracker;
303
+ exports.addPerformanceMeasurementsToTransaction = addPerformanceMeasurementsToTransaction;
241
304
  exports.boot = boot;
242
305
  exports.redactUnsafeEventFields = redactUnsafeEventFields;
243
306
  exports.reportErrorToSentry = reportErrorToSentry;
@@ -8,6 +8,17 @@ var _Object$keys = require('@babel/runtime-corejs3/core-js-stable/object/keys');
8
8
  var Sentry = require('@sentry/react');
9
9
  var browser = require('@sentry/browser');
10
10
  var history = require('@commercetools-frontend/browser-history');
11
+ var _defineProperty = require('@babel/runtime-corejs3/helpers/defineProperty');
12
+ var _sliceInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/slice');
13
+ var _filterInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/filter');
14
+ var _startsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/starts-with');
15
+ var _endsWithInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/ends-with');
16
+ var _Object$getOwnPropertySymbols = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols');
17
+ var _Object$getOwnPropertyDescriptor = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor');
18
+ var _forEachInstanceProperty = require('@babel/runtime-corejs3/core-js-stable/instance/for-each');
19
+ var _Object$getOwnPropertyDescriptors = require('@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors');
20
+ var _Object$defineProperties = require('@babel/runtime-corejs3/core-js-stable/object/define-properties');
21
+ var _Object$defineProperty = require('@babel/runtime-corejs3/core-js-stable/object/define-property');
11
22
  var _Reflect$construct = require('@babel/runtime-corejs3/core-js-stable/reflect/construct');
12
23
  var _classCallCheck = require('@babel/runtime-corejs3/helpers/classCallCheck');
13
24
  var _createClass = require('@babel/runtime-corejs3/helpers/createClass');
@@ -41,10 +52,60 @@ var _includesInstanceProperty__default = /*#__PURE__*/_interopDefault(_includesI
41
52
  var _Object$keys__default = /*#__PURE__*/_interopDefault(_Object$keys);
42
53
  var Sentry__namespace = /*#__PURE__*/_interopNamespace(Sentry);
43
54
  var history__default = /*#__PURE__*/_interopDefault(history);
55
+ var _sliceInstanceProperty__default = /*#__PURE__*/_interopDefault(_sliceInstanceProperty);
56
+ var _filterInstanceProperty__default = /*#__PURE__*/_interopDefault(_filterInstanceProperty);
57
+ var _startsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_startsWithInstanceProperty);
58
+ var _endsWithInstanceProperty__default = /*#__PURE__*/_interopDefault(_endsWithInstanceProperty);
59
+ var _Object$getOwnPropertySymbols__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertySymbols);
60
+ var _Object$getOwnPropertyDescriptor__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptor);
61
+ var _forEachInstanceProperty__default = /*#__PURE__*/_interopDefault(_forEachInstanceProperty);
62
+ var _Object$getOwnPropertyDescriptors__default = /*#__PURE__*/_interopDefault(_Object$getOwnPropertyDescriptors);
63
+ var _Object$defineProperties__default = /*#__PURE__*/_interopDefault(_Object$defineProperties);
64
+ var _Object$defineProperty__default = /*#__PURE__*/_interopDefault(_Object$defineProperty);
44
65
  var _Reflect$construct__default = /*#__PURE__*/_interopDefault(_Reflect$construct);
45
66
 
46
67
  // NOTE: This string will be replaced on build time with the package version.
47
- var version = "27.9.5";
68
+ var version = "27.10.0";
69
+
70
+ function ownKeys(e, r) { var t = _Object$keys__default["default"](e); if (_Object$getOwnPropertySymbols__default["default"]) { var o = _Object$getOwnPropertySymbols__default["default"](e); r && (o = _filterInstanceProperty__default["default"](o).call(o, function (r) { return _Object$getOwnPropertyDescriptor__default["default"](e, r).enumerable; })), t.push.apply(t, o); } return t; }
71
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty__default["default"](_context5 = ownKeys(Object(t), !0)).call(_context5, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors__default["default"] ? _Object$defineProperties__default["default"](e, _Object$getOwnPropertyDescriptors__default["default"](t)) : _forEachInstanceProperty__default["default"](_context6 = ownKeys(Object(t))).call(_context6, function (r) { _Object$defineProperty__default["default"](e, r, _Object$getOwnPropertyDescriptor__default["default"](t, r)); }); } return e; }
72
+ const MEASURE_SUFFIX = ':from-nav';
73
+
74
+ // Sentry measurement names may not contain colons (Relay restricts them to
75
+ // alphanumerics, `-`, `_`, `.`), so `mc:intl-ready:from-nav` becomes
76
+ // `mc.intl-ready`.
77
+ const toMeasurementKey = measureName => _sliceInstanceProperty__default["default"](measureName).call(measureName, 0, -MEASURE_SUFFIX.length).replace(/:/g, '.');
78
+ function addPerformanceMeasurementsToTransaction(event) {
79
+ // The document's `mc:*` measures describe the original page load. Navigation
80
+ // transactions belong to SPA route changes and must not repeat them.
81
+ if (event.contexts?.trace?.op !== 'pageload') return event;
82
+ if (typeof performance === 'undefined' || !performance.getEntriesByType) return event;
83
+ try {
84
+ var _context;
85
+ const markMeasures = _filterInstanceProperty__default["default"](_context = performance.getEntriesByType('measure')).call(_context, entry => {
86
+ var _context2, _context3;
87
+ return _startsWithInstanceProperty__default["default"](_context2 = entry.name).call(_context2, 'mc:') && _endsWithInstanceProperty__default["default"](_context3 = entry.name).call(_context3, MEASURE_SUFFIX);
88
+ });
89
+ for (const entry of markMeasures) {
90
+ var _context4;
91
+ const key = toMeasurementKey(entry.name);
92
+ event.measurements = event.measurements ?? {};
93
+ if (!(key in event.measurements)) {
94
+ event.measurements[key] = {
95
+ value: entry.duration,
96
+ unit: 'millisecond'
97
+ };
98
+ }
99
+ event.contexts.trace.data = _objectSpread(_objectSpread({}, event.contexts.trace.data), {}, {
100
+ [_sliceInstanceProperty__default["default"](_context4 = entry.name).call(_context4, 0, -MEASURE_SUFFIX.length)]: entry.duration
101
+ });
102
+ }
103
+ } catch {
104
+ // A throw here would lose the whole transaction; the measurements are
105
+ // not worth that.
106
+ }
107
+ return event;
108
+ }
48
109
 
49
110
  const makeErrorToCapture = error => {
50
111
  if (error instanceof Error) return error;
@@ -118,7 +179,8 @@ const boot = () => {
118
179
  // We only redact PII from event fields, so hint is unused for now.
119
180
  beforeSend(event, _hint) {
120
181
  return redactUnsafeEventFields(event);
121
- }
182
+ },
183
+ beforeSendTransaction: addPerformanceMeasurementsToTransaction
122
184
  });
123
185
  const sentryScope = Sentry__namespace.getCurrentScope();
124
186
  sentryScope.setTag('role', 'frontend');
@@ -238,6 +300,7 @@ SentryUserLogoutTracker.displayName = 'SentryUserLogoutTracker';
238
300
 
239
301
  exports.SentryUserLogoutTracker = SentryUserLogoutTracker;
240
302
  exports.SentryUserTracker = SentryUserTracker;
303
+ exports.addPerformanceMeasurementsToTransaction = addPerformanceMeasurementsToTransaction;
241
304
  exports.boot = boot;
242
305
  exports.redactUnsafeEventFields = redactUnsafeEventFields;
243
306
  exports.reportErrorToSentry = reportErrorToSentry;
@@ -4,6 +4,17 @@ import _Object$keys from '@babel/runtime-corejs3/core-js-stable/object/keys';
4
4
  import * as Sentry from '@sentry/react';
5
5
  import { globalHandlersIntegration } from '@sentry/browser';
6
6
  import history from '@commercetools-frontend/browser-history';
7
+ import _defineProperty from '@babel/runtime-corejs3/helpers/esm/defineProperty';
8
+ import _sliceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/slice';
9
+ import _filterInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/filter';
10
+ import _startsWithInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/starts-with';
11
+ import _endsWithInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/ends-with';
12
+ import _Object$getOwnPropertySymbols from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols';
13
+ import _Object$getOwnPropertyDescriptor from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor';
14
+ import _forEachInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/for-each';
15
+ import _Object$getOwnPropertyDescriptors from '@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors';
16
+ import _Object$defineProperties from '@babel/runtime-corejs3/core-js-stable/object/define-properties';
17
+ import _Object$defineProperty from '@babel/runtime-corejs3/core-js-stable/object/define-property';
7
18
  import _Reflect$construct from '@babel/runtime-corejs3/core-js-stable/reflect/construct';
8
19
  import _classCallCheck from '@babel/runtime-corejs3/helpers/esm/classCallCheck';
9
20
  import _createClass from '@babel/runtime-corejs3/helpers/esm/createClass';
@@ -13,7 +24,47 @@ import _inherits from '@babel/runtime-corejs3/helpers/esm/inherits';
13
24
  import { PureComponent, Component } from 'react';
14
25
 
15
26
  // NOTE: This string will be replaced on build time with the package version.
16
- var version = "27.9.5";
27
+ var version = "27.10.0";
28
+
29
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
30
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context5, _context6; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context5 = ownKeys(Object(t), !0)).call(_context5, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context6 = ownKeys(Object(t))).call(_context6, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
31
+ const MEASURE_SUFFIX = ':from-nav';
32
+
33
+ // Sentry measurement names may not contain colons (Relay restricts them to
34
+ // alphanumerics, `-`, `_`, `.`), so `mc:intl-ready:from-nav` becomes
35
+ // `mc.intl-ready`.
36
+ const toMeasurementKey = measureName => _sliceInstanceProperty(measureName).call(measureName, 0, -MEASURE_SUFFIX.length).replace(/:/g, '.');
37
+ function addPerformanceMeasurementsToTransaction(event) {
38
+ // The document's `mc:*` measures describe the original page load. Navigation
39
+ // transactions belong to SPA route changes and must not repeat them.
40
+ if (event.contexts?.trace?.op !== 'pageload') return event;
41
+ if (typeof performance === 'undefined' || !performance.getEntriesByType) return event;
42
+ try {
43
+ var _context;
44
+ const markMeasures = _filterInstanceProperty(_context = performance.getEntriesByType('measure')).call(_context, entry => {
45
+ var _context2, _context3;
46
+ return _startsWithInstanceProperty(_context2 = entry.name).call(_context2, 'mc:') && _endsWithInstanceProperty(_context3 = entry.name).call(_context3, MEASURE_SUFFIX);
47
+ });
48
+ for (const entry of markMeasures) {
49
+ var _context4;
50
+ const key = toMeasurementKey(entry.name);
51
+ event.measurements = event.measurements ?? {};
52
+ if (!(key in event.measurements)) {
53
+ event.measurements[key] = {
54
+ value: entry.duration,
55
+ unit: 'millisecond'
56
+ };
57
+ }
58
+ event.contexts.trace.data = _objectSpread(_objectSpread({}, event.contexts.trace.data), {}, {
59
+ [_sliceInstanceProperty(_context4 = entry.name).call(_context4, 0, -MEASURE_SUFFIX.length)]: entry.duration
60
+ });
61
+ }
62
+ } catch {
63
+ // A throw here would lose the whole transaction; the measurements are
64
+ // not worth that.
65
+ }
66
+ return event;
67
+ }
17
68
 
18
69
  const makeErrorToCapture = error => {
19
70
  if (error instanceof Error) return error;
@@ -87,7 +138,8 @@ const boot = () => {
87
138
  // We only redact PII from event fields, so hint is unused for now.
88
139
  beforeSend(event, _hint) {
89
140
  return redactUnsafeEventFields(event);
90
- }
141
+ },
142
+ beforeSendTransaction: addPerformanceMeasurementsToTransaction
91
143
  });
92
144
  const sentryScope = Sentry.getCurrentScope();
93
145
  sentryScope.setTag('role', 'frontend');
@@ -205,4 +257,4 @@ let SentryUserLogoutTracker = /*#__PURE__*/function (_Component) {
205
257
  }(Component);
206
258
  SentryUserLogoutTracker.displayName = 'SentryUserLogoutTracker';
207
259
 
208
- export { SentryUserLogoutTracker, SentryUserTracker, boot, redactUnsafeEventFields, reportErrorToSentry, version };
260
+ export { SentryUserLogoutTracker, SentryUserTracker, addPerformanceMeasurementsToTransaction, boot, redactUnsafeEventFields, reportErrorToSentry, version };
@@ -1,4 +1,5 @@
1
1
  export { default as version } from "./version.js";
2
2
  export * from "./sentry.js";
3
+ export { addPerformanceMeasurementsToTransaction } from "./report-performance-marks.js";
3
4
  export { default as SentryUserTracker } from "./sentry-user-tracker/index.js";
4
5
  export { default as SentryUserLogoutTracker } from "./sentry-user-logout-tracker/index.js";
@@ -0,0 +1,2 @@
1
+ import type { TransactionEvent } from '@sentry/types';
2
+ export declare function addPerformanceMeasurementsToTransaction(event: TransactionEvent): TransactionEvent;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commercetools-frontend/sentry",
3
- "version": "27.9.5",
3
+ "version": "27.10.0",
4
4
  "description": "Components to set up Sentry for a MC application",
5
5
  "bugs": "https://github.com/commercetools/merchant-center-application-kit/issues",
6
6
  "repository": {
@@ -36,8 +36,8 @@
36
36
  "@types/prop-types": "^15.7.5",
37
37
  "@types/react": "^19.0.3",
38
38
  "prop-types": "15.8.1",
39
- "@commercetools-frontend/browser-history": "^27.9.5",
40
- "@commercetools-frontend/constants": "^27.9.5"
39
+ "@commercetools-frontend/browser-history": "^27.10.0",
40
+ "@commercetools-frontend/constants": "^27.10.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@emotion/react": "^11.14.0",