@sentry/browser 7.0.0-beta.0 → 7.0.0-rc.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.
Files changed (190) hide show
  1. package/README.md +2 -3
  2. package/cjs/client.js +125 -102
  3. package/cjs/client.js.map +1 -1
  4. package/cjs/eventbuilder.js +225 -165
  5. package/cjs/eventbuilder.js.map +1 -1
  6. package/cjs/exports.js +55 -59
  7. package/cjs/exports.js.map +1 -1
  8. package/cjs/flags.js +7 -3
  9. package/cjs/flags.js.map +1 -1
  10. package/cjs/helpers.js +125 -97
  11. package/cjs/helpers.js.map +1 -1
  12. package/cjs/index.js +77 -10
  13. package/cjs/index.js.map +1 -1
  14. package/cjs/integrations/breadcrumbs.js +222 -174
  15. package/cjs/integrations/breadcrumbs.js.map +1 -1
  16. package/cjs/integrations/dedupe.js +184 -142
  17. package/cjs/integrations/dedupe.js.map +1 -1
  18. package/cjs/integrations/globalhandlers.js +211 -170
  19. package/cjs/integrations/globalhandlers.js.map +1 -1
  20. package/cjs/integrations/httpcontext.js +51 -0
  21. package/cjs/integrations/httpcontext.js.map +1 -0
  22. package/cjs/integrations/index.js +18 -14
  23. package/cjs/integrations/index.js.map +1 -1
  24. package/cjs/integrations/linkederrors.js +81 -50
  25. package/cjs/integrations/linkederrors.js.map +1 -1
  26. package/cjs/integrations/trycatch.js +252 -208
  27. package/cjs/integrations/trycatch.js.map +1 -1
  28. package/cjs/sdk.js +166 -125
  29. package/cjs/sdk.js.map +1 -1
  30. package/cjs/stack-parsers.js +143 -93
  31. package/cjs/stack-parsers.js.map +1 -1
  32. package/cjs/transports/fetch.js +30 -15
  33. package/cjs/transports/fetch.js.map +1 -1
  34. package/cjs/transports/index.js +10 -6
  35. package/cjs/transports/index.js.map +1 -1
  36. package/cjs/transports/utils.js +56 -52
  37. package/cjs/transports/utils.js.map +1 -1
  38. package/cjs/transports/xhr.js +40 -30
  39. package/cjs/transports/xhr.js.map +1 -1
  40. package/esm/client.js +124 -101
  41. package/esm/client.js.map +1 -1
  42. package/esm/eventbuilder.js +218 -158
  43. package/esm/eventbuilder.js.map +1 -1
  44. package/esm/exports.js +12 -8
  45. package/esm/exports.js.map +1 -1
  46. package/esm/flags.js +5 -2
  47. package/esm/flags.js.map +1 -1
  48. package/esm/helpers.js +124 -96
  49. package/esm/helpers.js.map +1 -1
  50. package/esm/index.js +27 -7
  51. package/esm/index.js.map +1 -1
  52. package/esm/integrations/breadcrumbs.js +218 -171
  53. package/esm/integrations/breadcrumbs.js.map +1 -1
  54. package/esm/integrations/dedupe.js +181 -139
  55. package/esm/integrations/dedupe.js.map +1 -1
  56. package/esm/integrations/globalhandlers.js +208 -167
  57. package/esm/integrations/globalhandlers.js.map +1 -1
  58. package/esm/integrations/httpcontext.js +49 -0
  59. package/esm/integrations/httpcontext.js.map +1 -0
  60. package/esm/integrations/index.js +7 -7
  61. package/esm/integrations/index.js.map +1 -1
  62. package/esm/integrations/linkederrors.js +77 -46
  63. package/esm/integrations/linkederrors.js.map +1 -1
  64. package/esm/integrations/trycatch.js +249 -205
  65. package/esm/integrations/trycatch.js.map +1 -1
  66. package/esm/sdk.js +163 -123
  67. package/esm/sdk.js.map +1 -1
  68. package/esm/stack-parsers.js +134 -91
  69. package/esm/stack-parsers.js.map +1 -1
  70. package/esm/transports/fetch.js +28 -13
  71. package/esm/transports/fetch.js.map +1 -1
  72. package/esm/transports/index.js +3 -3
  73. package/esm/transports/index.js.map +1 -1
  74. package/esm/transports/utils.js +55 -51
  75. package/esm/transports/utils.js.map +1 -1
  76. package/esm/transports/xhr.js +38 -28
  77. package/esm/transports/xhr.js.map +1 -1
  78. package/package.json +4 -4
  79. package/types/client.d.ts +5 -4
  80. package/types/client.d.ts.map +1 -1
  81. package/types/exports.d.ts +3 -4
  82. package/types/exports.d.ts.map +1 -1
  83. package/types/helpers.d.ts +2 -1
  84. package/types/helpers.d.ts.map +1 -1
  85. package/types/index.d.ts +1 -1
  86. package/types/integrations/{useragent.d.ts → httpcontext.d.ts} +3 -3
  87. package/types/integrations/httpcontext.d.ts.map +1 -0
  88. package/types/integrations/index.d.ts +1 -1
  89. package/types/integrations/index.d.ts.map +1 -1
  90. package/types/sdk.d.ts +2 -2
  91. package/types/sdk.d.ts.map +1 -1
  92. package/types/transports/fetch.d.ts +3 -5
  93. package/types/transports/fetch.d.ts.map +1 -1
  94. package/types/transports/types.d.ts +10 -0
  95. package/types/transports/types.d.ts.map +1 -0
  96. package/types/transports/utils.d.ts +1 -1
  97. package/types/transports/utils.d.ts.map +1 -1
  98. package/types/transports/xhr.d.ts +3 -7
  99. package/types/transports/xhr.d.ts.map +1 -1
  100. package/cjs/client.d.ts +0 -63
  101. package/cjs/client.d.ts.map +0 -1
  102. package/cjs/eventbuilder.d.ts +0 -37
  103. package/cjs/eventbuilder.d.ts.map +0 -1
  104. package/cjs/exports.d.ts +0 -11
  105. package/cjs/exports.d.ts.map +0 -1
  106. package/cjs/flags.d.ts +0 -3
  107. package/cjs/flags.d.ts.map +0 -1
  108. package/cjs/helpers.d.ts +0 -47
  109. package/cjs/helpers.d.ts.map +0 -1
  110. package/cjs/index.d.ts +0 -15
  111. package/cjs/index.d.ts.map +0 -1
  112. package/cjs/integrations/breadcrumbs.d.ts +0 -46
  113. package/cjs/integrations/breadcrumbs.d.ts.map +0 -1
  114. package/cjs/integrations/dedupe.d.ts +0 -21
  115. package/cjs/integrations/dedupe.d.ts.map +0 -1
  116. package/cjs/integrations/globalhandlers.d.ts +0 -30
  117. package/cjs/integrations/globalhandlers.d.ts.map +0 -1
  118. package/cjs/integrations/index.d.ts +0 -7
  119. package/cjs/integrations/index.d.ts.map +0 -1
  120. package/cjs/integrations/linkederrors.d.ts +0 -42
  121. package/cjs/integrations/linkederrors.d.ts.map +0 -1
  122. package/cjs/integrations/trycatch.d.ts +0 -33
  123. package/cjs/integrations/trycatch.d.ts.map +0 -1
  124. package/cjs/integrations/useragent.d.ts +0 -17
  125. package/cjs/integrations/useragent.d.ts.map +0 -1
  126. package/cjs/integrations/useragent.js +0 -40
  127. package/cjs/integrations/useragent.js.map +0 -1
  128. package/cjs/sdk.d.ts +0 -112
  129. package/cjs/sdk.d.ts.map +0 -1
  130. package/cjs/stack-parsers.d.ts +0 -9
  131. package/cjs/stack-parsers.d.ts.map +0 -1
  132. package/cjs/transports/fetch.d.ts +0 -10
  133. package/cjs/transports/fetch.d.ts.map +0 -1
  134. package/cjs/transports/index.d.ts +0 -3
  135. package/cjs/transports/index.d.ts.map +0 -1
  136. package/cjs/transports/utils.d.ts +0 -48
  137. package/cjs/transports/utils.d.ts.map +0 -1
  138. package/cjs/transports/xhr.d.ts +0 -11
  139. package/cjs/transports/xhr.d.ts.map +0 -1
  140. package/cjs/version.d.ts +0 -2
  141. package/cjs/version.d.ts.map +0 -1
  142. package/cjs/version.js +0 -4
  143. package/cjs/version.js.map +0 -1
  144. package/esm/client.d.ts +0 -63
  145. package/esm/client.d.ts.map +0 -1
  146. package/esm/eventbuilder.d.ts +0 -37
  147. package/esm/eventbuilder.d.ts.map +0 -1
  148. package/esm/exports.d.ts +0 -11
  149. package/esm/exports.d.ts.map +0 -1
  150. package/esm/flags.d.ts +0 -3
  151. package/esm/flags.d.ts.map +0 -1
  152. package/esm/helpers.d.ts +0 -47
  153. package/esm/helpers.d.ts.map +0 -1
  154. package/esm/index.d.ts +0 -15
  155. package/esm/index.d.ts.map +0 -1
  156. package/esm/integrations/breadcrumbs.d.ts +0 -46
  157. package/esm/integrations/breadcrumbs.d.ts.map +0 -1
  158. package/esm/integrations/dedupe.d.ts +0 -21
  159. package/esm/integrations/dedupe.d.ts.map +0 -1
  160. package/esm/integrations/globalhandlers.d.ts +0 -30
  161. package/esm/integrations/globalhandlers.d.ts.map +0 -1
  162. package/esm/integrations/index.d.ts +0 -7
  163. package/esm/integrations/index.d.ts.map +0 -1
  164. package/esm/integrations/linkederrors.d.ts +0 -42
  165. package/esm/integrations/linkederrors.d.ts.map +0 -1
  166. package/esm/integrations/trycatch.d.ts +0 -33
  167. package/esm/integrations/trycatch.d.ts.map +0 -1
  168. package/esm/integrations/useragent.d.ts +0 -17
  169. package/esm/integrations/useragent.d.ts.map +0 -1
  170. package/esm/integrations/useragent.js +0 -38
  171. package/esm/integrations/useragent.js.map +0 -1
  172. package/esm/sdk.d.ts +0 -112
  173. package/esm/sdk.d.ts.map +0 -1
  174. package/esm/stack-parsers.d.ts +0 -9
  175. package/esm/stack-parsers.d.ts.map +0 -1
  176. package/esm/transports/fetch.d.ts +0 -10
  177. package/esm/transports/fetch.d.ts.map +0 -1
  178. package/esm/transports/index.d.ts +0 -3
  179. package/esm/transports/index.d.ts.map +0 -1
  180. package/esm/transports/utils.d.ts +0 -48
  181. package/esm/transports/utils.d.ts.map +0 -1
  182. package/esm/transports/xhr.d.ts +0 -11
  183. package/esm/transports/xhr.d.ts.map +0 -1
  184. package/esm/version.d.ts +0 -2
  185. package/esm/version.d.ts.map +0 -1
  186. package/esm/version.js +0 -3
  187. package/esm/version.js.map +0 -1
  188. package/types/integrations/useragent.d.ts.map +0 -1
  189. package/types/version.d.ts +0 -2
  190. package/types/version.d.ts.map +0 -1
@@ -1,210 +1,258 @@
1
- Object.defineProperty(exports, "__esModule", { value: true });
2
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
3
- /* eslint-disable max-lines */
4
- const core_1 = require("@sentry/core");
5
- const utils_1 = require("@sentry/utils");
6
- exports.BREADCRUMB_INTEGRATION_ID = 'Breadcrumbs';
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+
3
+ var core = require('@sentry/core');
4
+ var utils = require('@sentry/utils');
5
+
6
+ /** JSDoc */
7
+
8
+ var BREADCRUMB_INTEGRATION_ID = 'Breadcrumbs';
9
+
7
10
  /**
8
11
  * Default Breadcrumbs instrumentations
9
12
  * TODO: Deprecated - with v6, this will be renamed to `Instrument`
10
13
  */
11
- class Breadcrumbs {
12
- /**
13
- * @inheritDoc
14
- */
15
- constructor(options) {
16
- /**
17
- * @inheritDoc
18
- */
19
- this.name = Breadcrumbs.id;
20
- this.options = Object.assign({ console: true, dom: true, fetch: true, history: true, sentry: true, xhr: true }, options);
14
+ class Breadcrumbs {
15
+ /**
16
+ * @inheritDoc
17
+ */
18
+ static __initStatic() {this.id = BREADCRUMB_INTEGRATION_ID;}
19
+
20
+ /**
21
+ * @inheritDoc
22
+ */
23
+ __init() {this.name = Breadcrumbs.id;}
24
+
25
+ /**
26
+ * Options of the breadcrumbs integration.
27
+ */
28
+ // This field is public, because we use it in the browser client to check if the `sentry` option is enabled.
29
+
30
+
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ constructor(options) {;Breadcrumbs.prototype.__init.call(this);
35
+ this.options = {
36
+ console: true,
37
+ dom: true,
38
+ fetch: true,
39
+ history: true,
40
+ sentry: true,
41
+ xhr: true,
42
+ ...options,
43
+ };
44
+ }
45
+
46
+ /**
47
+ * Instrument browser built-ins w/ breadcrumb capturing
48
+ * - Console API
49
+ * - DOM API (click/typing)
50
+ * - XMLHttpRequest API
51
+ * - Fetch API
52
+ * - History API
53
+ */
54
+ setupOnce() {
55
+ if (this.options.console) {
56
+ utils.addInstrumentationHandler('console', _consoleBreadcrumb);
21
57
  }
22
- /**
23
- * Instrument browser built-ins w/ breadcrumb capturing
24
- * - Console API
25
- * - DOM API (click/typing)
26
- * - XMLHttpRequest API
27
- * - Fetch API
28
- * - History API
29
- */
30
- setupOnce() {
31
- if (this.options.console) {
32
- utils_1.addInstrumentationHandler('console', _consoleBreadcrumb);
33
- }
34
- if (this.options.dom) {
35
- utils_1.addInstrumentationHandler('dom', _domBreadcrumb(this.options.dom));
36
- }
37
- if (this.options.xhr) {
38
- utils_1.addInstrumentationHandler('xhr', _xhrBreadcrumb);
39
- }
40
- if (this.options.fetch) {
41
- utils_1.addInstrumentationHandler('fetch', _fetchBreadcrumb);
42
- }
43
- if (this.options.history) {
44
- utils_1.addInstrumentationHandler('history', _historyBreadcrumb);
45
- }
58
+ if (this.options.dom) {
59
+ utils.addInstrumentationHandler('dom', _domBreadcrumb(this.options.dom));
46
60
  }
47
- }
48
- exports.Breadcrumbs = Breadcrumbs;
49
- /**
50
- * @inheritDoc
51
- */
52
- Breadcrumbs.id = exports.BREADCRUMB_INTEGRATION_ID;
61
+ if (this.options.xhr) {
62
+ utils.addInstrumentationHandler('xhr', _xhrBreadcrumb);
63
+ }
64
+ if (this.options.fetch) {
65
+ utils.addInstrumentationHandler('fetch', _fetchBreadcrumb);
66
+ }
67
+ if (this.options.history) {
68
+ utils.addInstrumentationHandler('history', _historyBreadcrumb);
69
+ }
70
+ }
71
+ } Breadcrumbs.__initStatic();
72
+
53
73
  /**
54
74
  * A HOC that creaes a function that creates breadcrumbs from DOM API calls.
55
75
  * This is a HOC so that we get access to dom options in the closure.
56
76
  */
57
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
77
  function _domBreadcrumb(dom) {
59
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
60
78
  function _innerDomBreadcrumb(handlerData) {
61
- let target;
62
- let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;
63
- if (typeof keyAttrs === 'string') {
64
- keyAttrs = [keyAttrs];
65
- }
66
- // Accessing event.target can throw (see getsentry/raven-js#838, #768)
67
- try {
68
- target = handlerData.event.target
69
- ? utils_1.htmlTreeAsString(handlerData.event.target, keyAttrs)
70
- : utils_1.htmlTreeAsString(handlerData.event, keyAttrs);
71
- }
72
- catch (e) {
73
- target = '<unknown>';
74
- }
75
- if (target.length === 0) {
76
- return;
77
- }
78
- core_1.getCurrentHub().addBreadcrumb({
79
- category: `ui.${handlerData.name}`,
80
- message: target,
81
- }, {
82
- event: handlerData.event,
83
- name: handlerData.name,
84
- global: handlerData.global,
85
- });
79
+ let target;
80
+ let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;
81
+
82
+ if (typeof keyAttrs === 'string') {
83
+ keyAttrs = [keyAttrs];
86
84
  }
87
- return _innerDomBreadcrumb;
85
+
86
+ // Accessing event.target can throw (see getsentry/raven-js#838, #768)
87
+ try {
88
+ target = handlerData.event.target
89
+ ? utils.htmlTreeAsString(handlerData.event.target , keyAttrs)
90
+ : utils.htmlTreeAsString(handlerData.event , keyAttrs);
91
+ } catch (e) {
92
+ target = '<unknown>';
93
+ }
94
+
95
+ if (target.length === 0) {
96
+ return;
97
+ }
98
+
99
+ core.getCurrentHub().addBreadcrumb(
100
+ {
101
+ category: `ui.${handlerData.name}`,
102
+ message: target,
103
+ },
104
+ {
105
+ event: handlerData.event,
106
+ name: handlerData.name,
107
+ global: handlerData.global,
108
+ },
109
+ );
110
+ }
111
+
112
+ return _innerDomBreadcrumb;
88
113
  }
114
+
89
115
  /**
90
116
  * Creates breadcrumbs from console API calls
91
117
  */
92
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
93
118
  function _consoleBreadcrumb(handlerData) {
94
- const breadcrumb = {
95
- category: 'console',
96
- data: {
97
- arguments: handlerData.args,
98
- logger: 'console',
99
- },
100
- level: utils_1.severityLevelFromString(handlerData.level),
101
- message: utils_1.safeJoin(handlerData.args, ' '),
102
- };
103
- if (handlerData.level === 'assert') {
104
- if (handlerData.args[0] === false) {
105
- breadcrumb.message = `Assertion failed: ${utils_1.safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;
106
- breadcrumb.data.arguments = handlerData.args.slice(1);
107
- }
108
- else {
109
- // Don't capture a breadcrumb for passed assertions
110
- return;
111
- }
119
+ var breadcrumb = {
120
+ category: 'console',
121
+ data: {
122
+ arguments: handlerData.args,
123
+ logger: 'console',
124
+ },
125
+ level: utils.severityLevelFromString(handlerData.level),
126
+ message: utils.safeJoin(handlerData.args, ' '),
127
+ };
128
+
129
+ if (handlerData.level === 'assert') {
130
+ if (handlerData.args[0] === false) {
131
+ breadcrumb.message = `Assertion failed: ${utils.safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;
132
+ breadcrumb.data.arguments = handlerData.args.slice(1);
133
+ } else {
134
+ // Don't capture a breadcrumb for passed assertions
135
+ return;
112
136
  }
113
- core_1.getCurrentHub().addBreadcrumb(breadcrumb, {
114
- input: handlerData.args,
115
- level: handlerData.level,
116
- });
137
+ }
138
+
139
+ core.getCurrentHub().addBreadcrumb(breadcrumb, {
140
+ input: handlerData.args,
141
+ level: handlerData.level,
142
+ });
117
143
  }
144
+
118
145
  /**
119
146
  * Creates breadcrumbs from XHR API calls
120
147
  */
121
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
122
148
  function _xhrBreadcrumb(handlerData) {
123
- if (handlerData.endTimestamp) {
124
- // We only capture complete, non-sentry requests
125
- if (handlerData.xhr.__sentry_own_request__) {
126
- return;
127
- }
128
- const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};
129
- core_1.getCurrentHub().addBreadcrumb({
130
- category: 'xhr',
131
- data: {
132
- method,
133
- url,
134
- status_code,
135
- },
136
- type: 'http',
137
- }, {
138
- xhr: handlerData.xhr,
139
- input: body,
140
- });
141
- return;
149
+ if (handlerData.endTimestamp) {
150
+ // We only capture complete, non-sentry requests
151
+ if (handlerData.xhr.__sentry_own_request__) {
152
+ return;
142
153
  }
154
+
155
+ const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};
156
+
157
+ core.getCurrentHub().addBreadcrumb(
158
+ {
159
+ category: 'xhr',
160
+ data: {
161
+ method,
162
+ url,
163
+ status_code,
164
+ },
165
+ type: 'http',
166
+ },
167
+ {
168
+ xhr: handlerData.xhr,
169
+ input: body,
170
+ },
171
+ );
172
+
173
+ return;
174
+ }
143
175
  }
176
+
144
177
  /**
145
178
  * Creates breadcrumbs from fetch API calls
146
179
  */
147
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
148
180
  function _fetchBreadcrumb(handlerData) {
149
- // We only capture complete fetch requests
150
- if (!handlerData.endTimestamp) {
151
- return;
152
- }
153
- if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {
154
- // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)
155
- return;
156
- }
157
- if (handlerData.error) {
158
- core_1.getCurrentHub().addBreadcrumb({
159
- category: 'fetch',
160
- data: handlerData.fetchData,
161
- level: 'error',
162
- type: 'http',
163
- }, {
164
- data: handlerData.error,
165
- input: handlerData.args,
166
- });
167
- }
168
- else {
169
- core_1.getCurrentHub().addBreadcrumb({
170
- category: 'fetch',
171
- data: Object.assign(Object.assign({}, handlerData.fetchData), { status_code: handlerData.response.status }),
172
- type: 'http',
173
- }, {
174
- input: handlerData.args,
175
- response: handlerData.response,
176
- });
177
- }
181
+ // We only capture complete fetch requests
182
+ if (!handlerData.endTimestamp) {
183
+ return;
184
+ }
185
+
186
+ if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {
187
+ // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)
188
+ return;
189
+ }
190
+
191
+ if (handlerData.error) {
192
+ core.getCurrentHub().addBreadcrumb(
193
+ {
194
+ category: 'fetch',
195
+ data: handlerData.fetchData,
196
+ level: 'error',
197
+ type: 'http',
198
+ },
199
+ {
200
+ data: handlerData.error,
201
+ input: handlerData.args,
202
+ },
203
+ );
204
+ } else {
205
+ core.getCurrentHub().addBreadcrumb(
206
+ {
207
+ category: 'fetch',
208
+ data: {
209
+ ...handlerData.fetchData,
210
+ status_code: handlerData.response.status,
211
+ },
212
+ type: 'http',
213
+ },
214
+ {
215
+ input: handlerData.args,
216
+ response: handlerData.response,
217
+ },
218
+ );
219
+ }
178
220
  }
221
+
179
222
  /**
180
223
  * Creates breadcrumbs from history API calls
181
224
  */
182
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
183
225
  function _historyBreadcrumb(handlerData) {
184
- const global = utils_1.getGlobalObject();
185
- let from = handlerData.from;
186
- let to = handlerData.to;
187
- const parsedLoc = utils_1.parseUrl(global.location.href);
188
- let parsedFrom = utils_1.parseUrl(from);
189
- const parsedTo = utils_1.parseUrl(to);
190
- // Initial pushState doesn't provide `from` information
191
- if (!parsedFrom.path) {
192
- parsedFrom = parsedLoc;
193
- }
194
- // Use only the path component of the URL if the URL matches the current
195
- // document (almost all the time when using pushState)
196
- if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {
197
- to = parsedTo.relative;
198
- }
199
- if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {
200
- from = parsedFrom.relative;
201
- }
202
- core_1.getCurrentHub().addBreadcrumb({
203
- category: 'navigation',
204
- data: {
205
- from,
206
- to,
207
- },
208
- });
226
+ var global = utils.getGlobalObject();
227
+ let from = handlerData.from;
228
+ let to = handlerData.to;
229
+ var parsedLoc = utils.parseUrl(global.location.href);
230
+ let parsedFrom = utils.parseUrl(from);
231
+ var parsedTo = utils.parseUrl(to);
232
+
233
+ // Initial pushState doesn't provide `from` information
234
+ if (!parsedFrom.path) {
235
+ parsedFrom = parsedLoc;
236
+ }
237
+
238
+ // Use only the path component of the URL if the URL matches the current
239
+ // document (almost all the time when using pushState)
240
+ if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {
241
+ to = parsedTo.relative;
242
+ }
243
+ if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {
244
+ from = parsedFrom.relative;
245
+ }
246
+
247
+ core.getCurrentHub().addBreadcrumb({
248
+ category: 'navigation',
249
+ data: {
250
+ from,
251
+ to,
252
+ },
253
+ });
209
254
  }
210
- //# sourceMappingURL=breadcrumbs.js.map
255
+
256
+ exports.BREADCRUMB_INTEGRATION_ID = BREADCRUMB_INTEGRATION_ID;
257
+ exports.Breadcrumbs = Breadcrumbs;
258
+ //# sourceMappingURL=breadcrumbs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"breadcrumbs.js","sourceRoot":"","sources":["../../../../src/integrations/breadcrumbs.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable max-lines */\nimport { getCurrentHub } from '@sentry/core';\nimport { Integration } from '@sentry/types';\nimport {\n addInstrumentationHandler,\n getGlobalObject,\n htmlTreeAsString,\n parseUrl,\n safeJoin,\n severityLevelFromString,\n} from '@sentry/utils';\n\n/** JSDoc */\ninterface BreadcrumbsOptions {\n console: boolean;\n dom: boolean | { serializeAttribute: string | string[] };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\nexport const BREADCRUMB_INTEGRATION_ID = 'Breadcrumbs';\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\nexport class Breadcrumbs implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = BREADCRUMB_INTEGRATION_ID;\n\n /**\n * @inheritDoc\n */\n public name: string = Breadcrumbs.id;\n\n /**\n * Options of the breadcrumbs integration.\n */\n // This field is public, because we use it in the browser client to check if the `sentry` option is enabled.\n public readonly options: Readonly<BreadcrumbsOptions>;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial<BreadcrumbsOptions>) {\n this.options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n }\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - Console API\n * - DOM API (click/typing)\n * - XMLHttpRequest API\n * - Fetch API\n * - History API\n */\n public setupOnce(): void {\n if (this.options.console) {\n addInstrumentationHandler('console', _consoleBreadcrumb);\n }\n if (this.options.dom) {\n addInstrumentationHandler('dom', _domBreadcrumb(this.options.dom));\n }\n if (this.options.xhr) {\n addInstrumentationHandler('xhr', _xhrBreadcrumb);\n }\n if (this.options.fetch) {\n addInstrumentationHandler('fetch', _fetchBreadcrumb);\n }\n if (this.options.history) {\n addInstrumentationHandler('history', _historyBreadcrumb);\n }\n }\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _domBreadcrumb(dom: BreadcrumbsOptions['dom']): (handlerData: { [key: string]: any }) => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _innerDomBreadcrumb(handlerData: { [key: string]: any }): void {\n let target;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = handlerData.event.target\n ? htmlTreeAsString(handlerData.event.target as Node, keyAttrs)\n : htmlTreeAsString(handlerData.event as unknown as Node, keyAttrs);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n getCurrentHub().addBreadcrumb(\n {\n category: `ui.${handlerData.name}`,\n message: target,\n },\n {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n },\n );\n }\n\n return _innerDomBreadcrumb;\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _consoleBreadcrumb(handlerData: { [key: string]: any }): void {\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n getCurrentHub().addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _xhrBreadcrumb(handlerData: { [key: string]: any }): void {\n if (handlerData.endTimestamp) {\n // We only capture complete, non-sentry requests\n if (handlerData.xhr.__sentry_own_request__) {\n return;\n }\n\n const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};\n\n getCurrentHub().addBreadcrumb(\n {\n category: 'xhr',\n data: {\n method,\n url,\n status_code,\n },\n type: 'http',\n },\n {\n xhr: handlerData.xhr,\n input: body,\n },\n );\n\n return;\n }\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _fetchBreadcrumb(handlerData: { [key: string]: any }): void {\n // We only capture complete fetch requests\n if (!handlerData.endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: handlerData.fetchData,\n level: 'error',\n type: 'http',\n },\n {\n data: handlerData.error,\n input: handlerData.args,\n },\n );\n } else {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: {\n ...handlerData.fetchData,\n status_code: handlerData.response.status,\n },\n type: 'http',\n },\n {\n input: handlerData.args,\n response: handlerData.response,\n },\n );\n }\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _historyBreadcrumb(handlerData: { [key: string]: any }): void {\n const global = getGlobalObject<Window>();\n let from = handlerData.from;\n let to = handlerData.to;\n const parsedLoc = parseUrl(global.location.href);\n let parsedFrom = parseUrl(from);\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n getCurrentHub().addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n}\n"]}
1
+ {"version":3,"file":"breadcrumbs.js","sources":["../../../../src/integrations/breadcrumbs.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable max-lines */\nimport { getCurrentHub } from '@sentry/core';\nimport { Integration } from '@sentry/types';\nimport {\n addInstrumentationHandler,\n getGlobalObject,\n htmlTreeAsString,\n parseUrl,\n safeJoin,\n severityLevelFromString,\n} from '@sentry/utils';\n\n/** JSDoc */\ninterface BreadcrumbsOptions {\n console: boolean;\n dom: boolean | { serializeAttribute: string | string[] };\n fetch: boolean;\n history: boolean;\n sentry: boolean;\n xhr: boolean;\n}\n\nexport const BREADCRUMB_INTEGRATION_ID = 'Breadcrumbs';\n\n/**\n * Default Breadcrumbs instrumentations\n * TODO: Deprecated - with v6, this will be renamed to `Instrument`\n */\nexport class Breadcrumbs implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = BREADCRUMB_INTEGRATION_ID;\n\n /**\n * @inheritDoc\n */\n public name: string = Breadcrumbs.id;\n\n /**\n * Options of the breadcrumbs integration.\n */\n // This field is public, because we use it in the browser client to check if the `sentry` option is enabled.\n public readonly options: Readonly<BreadcrumbsOptions>;\n\n /**\n * @inheritDoc\n */\n public constructor(options?: Partial<BreadcrumbsOptions>) {\n this.options = {\n console: true,\n dom: true,\n fetch: true,\n history: true,\n sentry: true,\n xhr: true,\n ...options,\n };\n }\n\n /**\n * Instrument browser built-ins w/ breadcrumb capturing\n * - Console API\n * - DOM API (click/typing)\n * - XMLHttpRequest API\n * - Fetch API\n * - History API\n */\n public setupOnce(): void {\n if (this.options.console) {\n addInstrumentationHandler('console', _consoleBreadcrumb);\n }\n if (this.options.dom) {\n addInstrumentationHandler('dom', _domBreadcrumb(this.options.dom));\n }\n if (this.options.xhr) {\n addInstrumentationHandler('xhr', _xhrBreadcrumb);\n }\n if (this.options.fetch) {\n addInstrumentationHandler('fetch', _fetchBreadcrumb);\n }\n if (this.options.history) {\n addInstrumentationHandler('history', _historyBreadcrumb);\n }\n }\n}\n\n/**\n * A HOC that creaes a function that creates breadcrumbs from DOM API calls.\n * This is a HOC so that we get access to dom options in the closure.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _domBreadcrumb(dom: BreadcrumbsOptions['dom']): (handlerData: { [key: string]: any }) => void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function _innerDomBreadcrumb(handlerData: { [key: string]: any }): void {\n let target;\n let keyAttrs = typeof dom === 'object' ? dom.serializeAttribute : undefined;\n\n if (typeof keyAttrs === 'string') {\n keyAttrs = [keyAttrs];\n }\n\n // Accessing event.target can throw (see getsentry/raven-js#838, #768)\n try {\n target = handlerData.event.target\n ? htmlTreeAsString(handlerData.event.target as Node, keyAttrs)\n : htmlTreeAsString(handlerData.event as unknown as Node, keyAttrs);\n } catch (e) {\n target = '<unknown>';\n }\n\n if (target.length === 0) {\n return;\n }\n\n getCurrentHub().addBreadcrumb(\n {\n category: `ui.${handlerData.name}`,\n message: target,\n },\n {\n event: handlerData.event,\n name: handlerData.name,\n global: handlerData.global,\n },\n );\n }\n\n return _innerDomBreadcrumb;\n}\n\n/**\n * Creates breadcrumbs from console API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _consoleBreadcrumb(handlerData: { [key: string]: any }): void {\n const breadcrumb = {\n category: 'console',\n data: {\n arguments: handlerData.args,\n logger: 'console',\n },\n level: severityLevelFromString(handlerData.level),\n message: safeJoin(handlerData.args, ' '),\n };\n\n if (handlerData.level === 'assert') {\n if (handlerData.args[0] === false) {\n breadcrumb.message = `Assertion failed: ${safeJoin(handlerData.args.slice(1), ' ') || 'console.assert'}`;\n breadcrumb.data.arguments = handlerData.args.slice(1);\n } else {\n // Don't capture a breadcrumb for passed assertions\n return;\n }\n }\n\n getCurrentHub().addBreadcrumb(breadcrumb, {\n input: handlerData.args,\n level: handlerData.level,\n });\n}\n\n/**\n * Creates breadcrumbs from XHR API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _xhrBreadcrumb(handlerData: { [key: string]: any }): void {\n if (handlerData.endTimestamp) {\n // We only capture complete, non-sentry requests\n if (handlerData.xhr.__sentry_own_request__) {\n return;\n }\n\n const { method, url, status_code, body } = handlerData.xhr.__sentry_xhr__ || {};\n\n getCurrentHub().addBreadcrumb(\n {\n category: 'xhr',\n data: {\n method,\n url,\n status_code,\n },\n type: 'http',\n },\n {\n xhr: handlerData.xhr,\n input: body,\n },\n );\n\n return;\n }\n}\n\n/**\n * Creates breadcrumbs from fetch API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _fetchBreadcrumb(handlerData: { [key: string]: any }): void {\n // We only capture complete fetch requests\n if (!handlerData.endTimestamp) {\n return;\n }\n\n if (handlerData.fetchData.url.match(/sentry_key/) && handlerData.fetchData.method === 'POST') {\n // We will not create breadcrumbs for fetch requests that contain `sentry_key` (internal sentry requests)\n return;\n }\n\n if (handlerData.error) {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: handlerData.fetchData,\n level: 'error',\n type: 'http',\n },\n {\n data: handlerData.error,\n input: handlerData.args,\n },\n );\n } else {\n getCurrentHub().addBreadcrumb(\n {\n category: 'fetch',\n data: {\n ...handlerData.fetchData,\n status_code: handlerData.response.status,\n },\n type: 'http',\n },\n {\n input: handlerData.args,\n response: handlerData.response,\n },\n );\n }\n}\n\n/**\n * Creates breadcrumbs from history API calls\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction _historyBreadcrumb(handlerData: { [key: string]: any }): void {\n const global = getGlobalObject<Window>();\n let from = handlerData.from;\n let to = handlerData.to;\n const parsedLoc = parseUrl(global.location.href);\n let parsedFrom = parseUrl(from);\n const parsedTo = parseUrl(to);\n\n // Initial pushState doesn't provide `from` information\n if (!parsedFrom.path) {\n parsedFrom = parsedLoc;\n }\n\n // Use only the path component of the URL if the URL matches the current\n // document (almost all the time when using pushState)\n if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host) {\n to = parsedTo.relative;\n }\n if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host) {\n from = parsedFrom.relative;\n }\n\n getCurrentHub().addBreadcrumb({\n category: 'navigation',\n data: {\n from,\n to,\n },\n });\n}\n"],"names":[],"mappings":";;;;;AAaA;;;AAWA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;"}