@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,218 +1,278 @@
1
- Object.defineProperty(exports, "__esModule", { value: true });
2
- const utils_1 = require("@sentry/utils");
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+
3
+ var utils = require('@sentry/utils');
4
+
3
5
  /**
4
6
  * This function creates an exception from a JavaScript Error
5
7
  */
6
8
  function exceptionFromError(stackParser, ex) {
7
- // Get the frames first since Opera can lose the stack if we touch anything else first
8
- const frames = parseStackFrames(stackParser, ex);
9
- const exception = {
10
- type: ex && ex.name,
11
- value: extractMessage(ex),
12
- };
13
- if (frames.length) {
14
- exception.stacktrace = { frames };
15
- }
16
- if (exception.type === undefined && exception.value === '') {
17
- exception.value = 'Unrecoverable error caught';
18
- }
19
- return exception;
9
+ // Get the frames first since Opera can lose the stack if we touch anything else first
10
+ var frames = parseStackFrames(stackParser, ex);
11
+
12
+ var exception = {
13
+ type: ex && ex.name,
14
+ value: extractMessage(ex),
15
+ };
16
+
17
+ if (frames.length) {
18
+ exception.stacktrace = { frames };
19
+ }
20
+
21
+ if (exception.type === undefined && exception.value === '') {
22
+ exception.value = 'Unrecoverable error caught';
23
+ }
24
+
25
+ return exception;
20
26
  }
21
- exports.exceptionFromError = exceptionFromError;
27
+
22
28
  /**
23
29
  * @hidden
24
30
  */
25
- function eventFromPlainObject(stackParser, exception, syntheticException, isUnhandledRejection) {
26
- const event = {
27
- exception: {
28
- values: [
29
- {
30
- type: utils_1.isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',
31
- value: `Non-Error ${isUnhandledRejection ? 'promise rejection' : 'exception'} captured with keys: ${utils_1.extractExceptionKeysForMessage(exception)}`,
32
- },
33
- ],
34
- },
35
- extra: {
36
- __serialized__: utils_1.normalizeToSize(exception),
31
+ function eventFromPlainObject(
32
+ stackParser,
33
+ exception,
34
+ syntheticException,
35
+ isUnhandledRejection,
36
+ ) {
37
+ var event = {
38
+ exception: {
39
+ values: [
40
+ {
41
+ type: utils.isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',
42
+ value: `Non-Error ${
43
+ isUnhandledRejection ? 'promise rejection' : 'exception'
44
+ } captured with keys: ${utils.extractExceptionKeysForMessage(exception)}`,
37
45
  },
38
- };
39
- if (syntheticException) {
40
- const frames = parseStackFrames(stackParser, syntheticException);
41
- if (frames.length) {
42
- // event.exception.values[0] has been set above
43
- event.exception.values[0].stacktrace = { frames };
44
- }
46
+ ],
47
+ },
48
+ extra: {
49
+ __serialized__: utils.normalizeToSize(exception),
50
+ },
51
+ };
52
+
53
+ if (syntheticException) {
54
+ var frames = parseStackFrames(stackParser, syntheticException);
55
+ if (frames.length) {
56
+ // event.exception.values[0] has been set above
57
+ (event.exception ).values[0].stacktrace = { frames };
45
58
  }
46
- return event;
59
+ }
60
+
61
+ return event;
47
62
  }
48
- exports.eventFromPlainObject = eventFromPlainObject;
63
+
49
64
  /**
50
65
  * @hidden
51
66
  */
52
67
  function eventFromError(stackParser, ex) {
53
- return {
54
- exception: {
55
- values: [exceptionFromError(stackParser, ex)],
56
- },
57
- };
68
+ return {
69
+ exception: {
70
+ values: [exceptionFromError(stackParser, ex)],
71
+ },
72
+ };
58
73
  }
59
- exports.eventFromError = eventFromError;
74
+
60
75
  /** Parses stack frames from an error */
61
- function parseStackFrames(stackParser, ex) {
62
- // Access and store the stacktrace property before doing ANYTHING
63
- // else to it because Opera is not very good at providing it
64
- // reliably in other circumstances.
65
- const stacktrace = ex.stacktrace || ex.stack || '';
66
- const popSize = getPopSize(ex);
67
- try {
68
- return stackParser(stacktrace, popSize);
69
- }
70
- catch (e) {
71
- // no-empty
72
- }
73
- return [];
76
+ function parseStackFrames(
77
+ stackParser,
78
+ ex,
79
+ ) {
80
+ // Access and store the stacktrace property before doing ANYTHING
81
+ // else to it because Opera is not very good at providing it
82
+ // reliably in other circumstances.
83
+ var stacktrace = ex.stacktrace || ex.stack || '';
84
+
85
+ var popSize = getPopSize(ex);
86
+
87
+ try {
88
+ return stackParser(stacktrace, popSize);
89
+ } catch (e) {
90
+ // no-empty
91
+ }
92
+
93
+ return [];
74
94
  }
75
- exports.parseStackFrames = parseStackFrames;
95
+
76
96
  // Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108
77
- const reactMinifiedRegexp = /Minified React error #\d+;/i;
97
+ var reactMinifiedRegexp = /Minified React error #\d+;/i;
98
+
78
99
  function getPopSize(ex) {
79
- if (ex) {
80
- if (typeof ex.framesToPop === 'number') {
81
- return ex.framesToPop;
82
- }
83
- if (reactMinifiedRegexp.test(ex.message)) {
84
- return 1;
85
- }
100
+ if (ex) {
101
+ if (typeof ex.framesToPop === 'number') {
102
+ return ex.framesToPop;
86
103
  }
87
- return 0;
104
+
105
+ if (reactMinifiedRegexp.test(ex.message)) {
106
+ return 1;
107
+ }
108
+ }
109
+
110
+ return 0;
88
111
  }
112
+
89
113
  /**
90
114
  * There are cases where stacktrace.message is an Event object
91
115
  * https://github.com/getsentry/sentry-javascript/issues/1949
92
116
  * In this specific case we try to extract stacktrace.message.error.message
93
117
  */
94
118
  function extractMessage(ex) {
95
- const message = ex && ex.message;
96
- if (!message) {
97
- return 'No error message';
98
- }
99
- if (message.error && typeof message.error.message === 'string') {
100
- return message.error.message;
101
- }
102
- return message;
119
+ var message = ex && ex.message;
120
+ if (!message) {
121
+ return 'No error message';
122
+ }
123
+ if (message.error && typeof message.error.message === 'string') {
124
+ return message.error.message;
125
+ }
126
+ return message;
103
127
  }
128
+
104
129
  /**
105
130
  * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.
106
131
  * @hidden
107
132
  */
108
- function eventFromException(stackParser, exception, hint, attachStacktrace) {
109
- const syntheticException = (hint && hint.syntheticException) || undefined;
110
- const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);
111
- utils_1.addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }
112
- event.level = 'error';
113
- if (hint && hint.event_id) {
114
- event.event_id = hint.event_id;
115
- }
116
- return utils_1.resolvedSyncPromise(event);
133
+ function eventFromException(
134
+ stackParser,
135
+ exception,
136
+ hint,
137
+ attachStacktrace,
138
+ ) {
139
+ var syntheticException = (hint && hint.syntheticException) || undefined;
140
+ var event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);
141
+ utils.addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }
142
+ event.level = 'error';
143
+ if (hint && hint.event_id) {
144
+ event.event_id = hint.event_id;
145
+ }
146
+ return utils.resolvedSyncPromise(event);
117
147
  }
118
- exports.eventFromException = eventFromException;
148
+
119
149
  /**
120
150
  * Builds and Event from a Message
121
151
  * @hidden
122
152
  */
123
- function eventFromMessage(stackParser, message,
124
- // eslint-disable-next-line deprecation/deprecation
125
- level = 'info', hint, attachStacktrace) {
126
- const syntheticException = (hint && hint.syntheticException) || undefined;
127
- const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);
128
- event.level = level;
129
- if (hint && hint.event_id) {
130
- event.event_id = hint.event_id;
131
- }
132
- return utils_1.resolvedSyncPromise(event);
153
+ function eventFromMessage(
154
+ stackParser,
155
+ message,
156
+ level = 'info',
157
+ hint,
158
+ attachStacktrace,
159
+ ) {
160
+ var syntheticException = (hint && hint.syntheticException) || undefined;
161
+ var event = eventFromString(stackParser, message, syntheticException, attachStacktrace);
162
+ event.level = level;
163
+ if (hint && hint.event_id) {
164
+ event.event_id = hint.event_id;
165
+ }
166
+ return utils.resolvedSyncPromise(event);
133
167
  }
134
- exports.eventFromMessage = eventFromMessage;
168
+
135
169
  /**
136
170
  * @hidden
137
171
  */
138
- function eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace, isUnhandledRejection) {
139
- let event;
140
- if (utils_1.isErrorEvent(exception) && exception.error) {
141
- // If it is an ErrorEvent with `error` property, extract it to get actual Error
142
- const errorEvent = exception;
143
- return eventFromError(stackParser, errorEvent.error);
144
- }
145
- // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name
146
- // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be
147
- // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.
148
- //
149
- // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
150
- // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
151
- // https://webidl.spec.whatwg.org/#es-DOMException-specialness
152
- if (utils_1.isDOMError(exception) || utils_1.isDOMException(exception)) {
153
- const domException = exception;
154
- if ('stack' in exception) {
155
- event = eventFromError(stackParser, exception);
156
- }
157
- else {
158
- const name = domException.name || (utils_1.isDOMError(domException) ? 'DOMError' : 'DOMException');
159
- const message = domException.message ? `${name}: ${domException.message}` : name;
160
- event = eventFromString(stackParser, message, syntheticException, attachStacktrace);
161
- utils_1.addExceptionTypeValue(event, message);
162
- }
163
- if ('code' in domException) {
164
- event.tags = Object.assign(Object.assign({}, event.tags), { 'DOMException.code': `${domException.code}` });
165
- }
166
- return event;
172
+ function eventFromUnknownInput(
173
+ stackParser,
174
+ exception,
175
+ syntheticException,
176
+ attachStacktrace,
177
+ isUnhandledRejection,
178
+ ) {
179
+ let event;
180
+
181
+ if (utils.isErrorEvent(exception ) && (exception ).error) {
182
+ // If it is an ErrorEvent with `error` property, extract it to get actual Error
183
+ var errorEvent = exception ;
184
+ return eventFromError(stackParser, errorEvent.error );
185
+ }
186
+
187
+ // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name
188
+ // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be
189
+ // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.
190
+ //
191
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
192
+ // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
193
+ // https://webidl.spec.whatwg.org/#es-DOMException-specialness
194
+ if (utils.isDOMError(exception ) || utils.isDOMException(exception )) {
195
+ var domException = exception ;
196
+
197
+ if ('stack' in (exception )) {
198
+ event = eventFromError(stackParser, exception );
199
+ } else {
200
+ var name = domException.name || (utils.isDOMError(domException) ? 'DOMError' : 'DOMException');
201
+ var message = domException.message ? `${name}: ${domException.message}` : name;
202
+ event = eventFromString(stackParser, message, syntheticException, attachStacktrace);
203
+ utils.addExceptionTypeValue(event, message);
167
204
  }
168
- if (utils_1.isError(exception)) {
169
- // we have a real Error object, do nothing
170
- return eventFromError(stackParser, exception);
205
+ if ('code' in domException) {
206
+ event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };
171
207
  }
172
- if (utils_1.isPlainObject(exception) || utils_1.isEvent(exception)) {
173
- // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize
174
- // it manually. This will allow us to group events based on top-level keys which is much better than creating a new
175
- // group on any key/value change.
176
- const objectException = exception;
177
- event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);
178
- utils_1.addExceptionMechanism(event, {
179
- synthetic: true,
180
- });
181
- return event;
182
- }
183
- // If none of previous checks were valid, then it means that it's not:
184
- // - an instance of DOMError
185
- // - an instance of DOMException
186
- // - an instance of Event
187
- // - an instance of Error
188
- // - a valid ErrorEvent (one with an error property)
189
- // - a plain Object
190
- //
191
- // So bail out and capture it as a simple message:
192
- event = eventFromString(stackParser, exception, syntheticException, attachStacktrace);
193
- utils_1.addExceptionTypeValue(event, `${exception}`, undefined);
194
- utils_1.addExceptionMechanism(event, {
195
- synthetic: true,
208
+
209
+ return event;
210
+ }
211
+ if (utils.isError(exception)) {
212
+ // we have a real Error object, do nothing
213
+ return eventFromError(stackParser, exception);
214
+ }
215
+ if (utils.isPlainObject(exception) || utils.isEvent(exception)) {
216
+ // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize
217
+ // it manually. This will allow us to group events based on top-level keys which is much better than creating a new
218
+ // group on any key/value change.
219
+ var objectException = exception ;
220
+ event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);
221
+ utils.addExceptionMechanism(event, {
222
+ synthetic: true,
196
223
  });
197
224
  return event;
225
+ }
226
+
227
+ // If none of previous checks were valid, then it means that it's not:
228
+ // - an instance of DOMError
229
+ // - an instance of DOMException
230
+ // - an instance of Event
231
+ // - an instance of Error
232
+ // - a valid ErrorEvent (one with an error property)
233
+ // - a plain Object
234
+ //
235
+ // So bail out and capture it as a simple message:
236
+ event = eventFromString(stackParser, exception , syntheticException, attachStacktrace);
237
+ utils.addExceptionTypeValue(event, `${exception}`, undefined);
238
+ utils.addExceptionMechanism(event, {
239
+ synthetic: true,
240
+ });
241
+
242
+ return event;
198
243
  }
199
- exports.eventFromUnknownInput = eventFromUnknownInput;
244
+
200
245
  /**
201
246
  * @hidden
202
247
  */
203
- function eventFromString(stackParser, input, syntheticException, attachStacktrace) {
204
- const event = {
205
- message: input,
206
- };
207
- if (attachStacktrace && syntheticException) {
208
- const frames = parseStackFrames(stackParser, syntheticException);
209
- if (frames.length) {
210
- event.exception = {
211
- values: [{ value: input, stacktrace: { frames } }],
212
- };
213
- }
248
+ function eventFromString(
249
+ stackParser,
250
+ input,
251
+ syntheticException,
252
+ attachStacktrace,
253
+ ) {
254
+ var event = {
255
+ message: input,
256
+ };
257
+
258
+ if (attachStacktrace && syntheticException) {
259
+ var frames = parseStackFrames(stackParser, syntheticException);
260
+ if (frames.length) {
261
+ event.exception = {
262
+ values: [{ value: input, stacktrace: { frames } }],
263
+ };
214
264
  }
215
- return event;
265
+ }
266
+
267
+ return event;
216
268
  }
269
+
270
+ exports.eventFromError = eventFromError;
271
+ exports.eventFromException = eventFromException;
272
+ exports.eventFromMessage = eventFromMessage;
273
+ exports.eventFromPlainObject = eventFromPlainObject;
217
274
  exports.eventFromString = eventFromString;
218
- //# sourceMappingURL=eventbuilder.js.map
275
+ exports.eventFromUnknownInput = eventFromUnknownInput;
276
+ exports.exceptionFromError = exceptionFromError;
277
+ exports.parseStackFrames = parseStackFrames;
278
+ //# sourceMappingURL=eventbuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventbuilder.js","sourceRoot":"","sources":["../../../src/eventbuilder.ts"],"names":[],"mappings":";AACA,yCAYuB;AAEvB;;GAEG;AACH,SAAgB,kBAAkB,CAAC,WAAwB,EAAE,EAAS;IACpE,sFAAsF;IACtF,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAc;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI;QACnB,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;KAC1B,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,EAAE;QACjB,SAAS,CAAC,UAAU,GAAG,EAAE,MAAM,EAAE,CAAC;KACnC;IAED,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,EAAE,EAAE;QAC1D,SAAS,CAAC,KAAK,GAAG,4BAA4B,CAAC;KAChD;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAlBD,gDAkBC;AAED;;GAEG;AACH,SAAgB,oBAAoB,CAClC,WAAwB,EACxB,SAAkC,EAClC,kBAA0B,EAC1B,oBAA8B;IAE9B,MAAM,KAAK,GAAU;QACnB,SAAS,EAAE;YACT,MAAM,EAAE;gBACN;oBACE,IAAI,EAAE,eAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO;oBAC7G,KAAK,EAAE,aACL,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAC/C,wBAAwB,sCAA8B,CAAC,SAAS,CAAC,EAAE;iBACpE;aACF;SACF;QACD,KAAK,EAAE;YACL,cAAc,EAAE,uBAAe,CAAC,SAAS,CAAC;SAC3C;KACF,CAAC;IAEF,IAAI,kBAAkB,EAAE;QACtB,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,+CAA+C;YAC9C,KAAK,CAAC,SAAqC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,MAAM,EAAE,CAAC;SAChF;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AA/BD,oDA+BC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,WAAwB,EAAE,EAAS;IAChE,OAAO;QACL,SAAS,EAAE;YACT,MAAM,EAAE,CAAC,kBAAkB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;SAC9C;KACF,CAAC;AACJ,CAAC;AAND,wCAMC;AAED,wCAAwC;AACxC,SAAgB,gBAAgB,CAC9B,WAAwB,EACxB,EAAyD;IAEzD,iEAAiE;IACjE,4DAA4D;IAC5D,mCAAmC;IACnC,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;IAEnD,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAE/B,IAAI;QACF,OAAO,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;KACzC;IAAC,OAAO,CAAC,EAAE;QACV,WAAW;KACZ;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAlBD,4CAkBC;AAED,2KAA2K;AAC3K,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAE1D,SAAS,UAAU,CAAC,EAAoC;IACtD,IAAI,EAAE,EAAE;QACN,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,QAAQ,EAAE;YACtC,OAAO,EAAE,CAAC,WAAW,CAAC;SACvB;QAED,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;YACxC,OAAO,CAAC,CAAC;SACV;KACF;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,EAA0C;IAChE,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC;IACjC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,kBAAkB,CAAC;KAC3B;IACD,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;QAC9D,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;KAC9B;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAChC,WAAwB,EACxB,SAAkB,EAClB,IAAgB,EAChB,gBAA0B;IAE1B,MAAM,kBAAkB,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,SAAS,CAAC;IAC1E,MAAM,KAAK,GAAG,qBAAqB,CAAC,WAAW,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IAClG,6BAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,iDAAiD;IAC/E,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;IACtB,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QACzB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;KAChC;IACD,OAAO,2BAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAdD,gDAcC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,WAAwB,EACxB,OAAe;AACf,mDAAmD;AACnD,QAAkC,MAAM,EACxC,IAAgB,EAChB,gBAA0B;IAE1B,MAAM,kBAAkB,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,SAAS,CAAC;IAC1E,MAAM,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IAC1F,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;QACzB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;KAChC;IACD,OAAO,2BAAmB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAfD,4CAeC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CACnC,WAAwB,EACxB,SAAkB,EAClB,kBAA0B,EAC1B,gBAA0B,EAC1B,oBAA8B;IAE9B,IAAI,KAAY,CAAC;IAEjB,IAAI,oBAAY,CAAC,SAAuB,CAAC,IAAK,SAAwB,CAAC,KAAK,EAAE;QAC5E,+EAA+E;QAC/E,MAAM,UAAU,GAAG,SAAuB,CAAC;QAC3C,OAAO,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,KAAc,CAAC,CAAC;KAC/D;IAED,oHAAoH;IACpH,8GAA8G;IAC9G,yGAAyG;IACzG,EAAE;IACF,4DAA4D;IAC5D,gEAAgE;IAChE,8DAA8D;IAC9D,IAAI,kBAAU,CAAC,SAAqB,CAAC,IAAI,sBAAc,CAAC,SAAyB,CAAC,EAAE;QAClF,MAAM,YAAY,GAAG,SAAyB,CAAC;QAE/C,IAAI,OAAO,IAAK,SAAmB,EAAE;YACnC,KAAK,GAAG,cAAc,CAAC,WAAW,EAAE,SAAkB,CAAC,CAAC;SACzD;aAAM;YACL,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,CAAC,kBAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAC3F,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjF,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YACpF,6BAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACvC;QACD,IAAI,MAAM,IAAI,YAAY,EAAE;YAC1B,KAAK,CAAC,IAAI,mCAAQ,KAAK,CAAC,IAAI,KAAE,mBAAmB,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,GAAE,CAAC;SAC7E;QAED,OAAO,KAAK,CAAC;KACd;IACD,IAAI,eAAO,CAAC,SAAS,CAAC,EAAE;QACtB,0CAA0C;QAC1C,OAAO,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;KAC/C;IACD,IAAI,qBAAa,CAAC,SAAS,CAAC,IAAI,eAAO,CAAC,SAAS,CAAC,EAAE;QAClD,kHAAkH;QAClH,mHAAmH;QACnH,iCAAiC;QACjC,MAAM,eAAe,GAAG,SAAoC,CAAC;QAC7D,KAAK,GAAG,oBAAoB,CAAC,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;QACrG,6BAAqB,CAAC,KAAK,EAAE;YAC3B,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;KACd;IAED,sEAAsE;IACtE,4BAA4B;IAC5B,gCAAgC;IAChC,yBAAyB;IACzB,yBAAyB;IACzB,oDAAoD;IACpD,mBAAmB;IACnB,EAAE;IACF,kDAAkD;IAClD,KAAK,GAAG,eAAe,CAAC,WAAW,EAAE,SAAmB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IAChG,6BAAqB,CAAC,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;IACxD,6BAAqB,CAAC,KAAK,EAAE;QAC3B,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAvED,sDAuEC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,WAAwB,EACxB,KAAa,EACb,kBAA0B,EAC1B,gBAA0B;IAE1B,MAAM,KAAK,GAAU;QACnB,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,IAAI,gBAAgB,IAAI,kBAAkB,EAAE;QAC1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,KAAK,CAAC,SAAS,GAAG;gBAChB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;aACnD,CAAC;SACH;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AApBD,0CAoBC","sourcesContent":["import { Event, EventHint, Exception, Severity, SeverityLevel, StackFrame, StackParser } from '@sentry/types';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/utils';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: ex && ex.name,\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n stackParser: StackParser,\n exception: Record<string, unknown>,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: `Non-Error ${\n isUnhandledRejection ? 'promise rejection' : 'exception'\n } captured with keys: ${extractExceptionKeysForMessage(exception)}`,\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception),\n },\n };\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n (event.exception as { values: Exception[] }).values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const popSize = getPopSize(ex);\n\n try {\n return stackParser(stacktrace, popSize);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n }\n\n return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: string,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception as DOMError) || isDOMException(exception as DOMException)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception as Record<string, unknown>;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(\n stackParser: StackParser,\n input: string,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {\n message: input,\n };\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: input, stacktrace: { frames } }],\n };\n }\n }\n\n return event;\n}\n"]}
1
+ {"version":3,"file":"eventbuilder.js","sources":["../../../src/eventbuilder.ts"],"sourcesContent":["import { Event, EventHint, Exception, Severity, SeverityLevel, StackFrame, StackParser } from '@sentry/types';\nimport {\n addExceptionMechanism,\n addExceptionTypeValue,\n extractExceptionKeysForMessage,\n isDOMError,\n isDOMException,\n isError,\n isErrorEvent,\n isEvent,\n isPlainObject,\n normalizeToSize,\n resolvedSyncPromise,\n} from '@sentry/utils';\n\n/**\n * This function creates an exception from a JavaScript Error\n */\nexport function exceptionFromError(stackParser: StackParser, ex: Error): Exception {\n // Get the frames first since Opera can lose the stack if we touch anything else first\n const frames = parseStackFrames(stackParser, ex);\n\n const exception: Exception = {\n type: ex && ex.name,\n value: extractMessage(ex),\n };\n\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n\n return exception;\n}\n\n/**\n * @hidden\n */\nexport function eventFromPlainObject(\n stackParser: StackParser,\n exception: Record<string, unknown>,\n syntheticException?: Error,\n isUnhandledRejection?: boolean,\n): Event {\n const event: Event = {\n exception: {\n values: [\n {\n type: isEvent(exception) ? exception.constructor.name : isUnhandledRejection ? 'UnhandledRejection' : 'Error',\n value: `Non-Error ${\n isUnhandledRejection ? 'promise rejection' : 'exception'\n } captured with keys: ${extractExceptionKeysForMessage(exception)}`,\n },\n ],\n },\n extra: {\n __serialized__: normalizeToSize(exception),\n },\n };\n\n if (syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n // event.exception.values[0] has been set above\n (event.exception as { values: Exception[] }).values[0].stacktrace = { frames };\n }\n }\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromError(stackParser: StackParser, ex: Error): Event {\n return {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n}\n\n/** Parses stack frames from an error */\nexport function parseStackFrames(\n stackParser: StackParser,\n ex: Error & { framesToPop?: number; stacktrace?: string },\n): StackFrame[] {\n // Access and store the stacktrace property before doing ANYTHING\n // else to it because Opera is not very good at providing it\n // reliably in other circumstances.\n const stacktrace = ex.stacktrace || ex.stack || '';\n\n const popSize = getPopSize(ex);\n\n try {\n return stackParser(stacktrace, popSize);\n } catch (e) {\n // no-empty\n }\n\n return [];\n}\n\n// Based on our own mapping pattern - https://github.com/getsentry/sentry/blob/9f08305e09866c8bd6d0c24f5b0aabdd7dd6c59c/src/sentry/lang/javascript/errormapping.py#L83-L108\nconst reactMinifiedRegexp = /Minified React error #\\d+;/i;\n\nfunction getPopSize(ex: Error & { framesToPop?: number }): number {\n if (ex) {\n if (typeof ex.framesToPop === 'number') {\n return ex.framesToPop;\n }\n\n if (reactMinifiedRegexp.test(ex.message)) {\n return 1;\n }\n }\n\n return 0;\n}\n\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex: Error & { message: { error?: Error } }): string {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n\n/**\n * Creates an {@link Event} from all inputs to `captureException` and non-primitive inputs to `captureMessage`.\n * @hidden\n */\nexport function eventFromException(\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromUnknownInput(stackParser, exception, syntheticException, attachStacktrace);\n addExceptionMechanism(event); // defaults to { type: 'generic', handled: true }\n event.level = 'error';\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: string,\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): PromiseLike<Event> {\n const syntheticException = (hint && hint.syntheticException) || undefined;\n const event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n event.level = level;\n if (hint && hint.event_id) {\n event.event_id = hint.event_id;\n }\n return resolvedSyncPromise(event);\n}\n\n/**\n * @hidden\n */\nexport function eventFromUnknownInput(\n stackParser: StackParser,\n exception: unknown,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n isUnhandledRejection?: boolean,\n): Event {\n let event: Event;\n\n if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) {\n // If it is an ErrorEvent with `error` property, extract it to get actual Error\n const errorEvent = exception as ErrorEvent;\n return eventFromError(stackParser, errorEvent.error as Error);\n }\n\n // If it is a `DOMError` (which is a legacy API, but still supported in some browsers) then we just extract the name\n // and message, as it doesn't provide anything else. According to the spec, all `DOMExceptions` should also be\n // `Error`s, but that's not the case in IE11, so in that case we treat it the same as we do a `DOMError`.\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n // https://webidl.spec.whatwg.org/#es-DOMException-specialness\n if (isDOMError(exception as DOMError) || isDOMException(exception as DOMException)) {\n const domException = exception as DOMException;\n\n if ('stack' in (exception as Error)) {\n event = eventFromError(stackParser, exception as Error);\n } else {\n const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');\n const message = domException.message ? `${name}: ${domException.message}` : name;\n event = eventFromString(stackParser, message, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, message);\n }\n if ('code' in domException) {\n event.tags = { ...event.tags, 'DOMException.code': `${domException.code}` };\n }\n\n return event;\n }\n if (isError(exception)) {\n // we have a real Error object, do nothing\n return eventFromError(stackParser, exception);\n }\n if (isPlainObject(exception) || isEvent(exception)) {\n // If it's a plain object or an instance of `Event` (the built-in JS kind, not this SDK's `Event` type), serialize\n // it manually. This will allow us to group events based on top-level keys which is much better than creating a new\n // group on any key/value change.\n const objectException = exception as Record<string, unknown>;\n event = eventFromPlainObject(stackParser, objectException, syntheticException, isUnhandledRejection);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n return event;\n }\n\n // If none of previous checks were valid, then it means that it's not:\n // - an instance of DOMError\n // - an instance of DOMException\n // - an instance of Event\n // - an instance of Error\n // - a valid ErrorEvent (one with an error property)\n // - a plain Object\n //\n // So bail out and capture it as a simple message:\n event = eventFromString(stackParser, exception as string, syntheticException, attachStacktrace);\n addExceptionTypeValue(event, `${exception}`, undefined);\n addExceptionMechanism(event, {\n synthetic: true,\n });\n\n return event;\n}\n\n/**\n * @hidden\n */\nexport function eventFromString(\n stackParser: StackParser,\n input: string,\n syntheticException?: Error,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {\n message: input,\n };\n\n if (attachStacktrace && syntheticException) {\n const frames = parseStackFrames(stackParser, syntheticException);\n if (frames.length) {\n event.exception = {\n values: [{ value: input, stacktrace: { frames } }],\n };\n }\n }\n\n return event;\n}\n"],"names":[],"mappings":";;;;AAeA;AACA;AACA;;AAEA;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;;AAEA;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;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;;AAEA;AACA;AACA;AAEA;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;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;;;;;;;;;"}
package/cjs/exports.js CHANGED
@@ -1,59 +1,55 @@
1
- Object.defineProperty(exports, "__esModule", { value: true });
2
- var core_1 = require("@sentry/core");
3
- exports.addGlobalEventProcessor = core_1.addGlobalEventProcessor;
4
- exports.addBreadcrumb = core_1.addBreadcrumb;
5
- exports.captureException = core_1.captureException;
6
- exports.captureEvent = core_1.captureEvent;
7
- exports.captureMessage = core_1.captureMessage;
8
- exports.configureScope = core_1.configureScope;
9
- exports.createTransport = core_1.createTransport;
10
- exports.getHubFromCarrier = core_1.getHubFromCarrier;
11
- exports.getCurrentHub = core_1.getCurrentHub;
12
- exports.Hub = core_1.Hub;
13
- exports.makeMain = core_1.makeMain;
14
- exports.Scope = core_1.Scope;
15
- exports.Session = core_1.Session;
16
- exports.startTransaction = core_1.startTransaction;
17
- exports.SDK_VERSION = core_1.SDK_VERSION;
18
- exports.setContext = core_1.setContext;
19
- exports.setExtra = core_1.setExtra;
20
- exports.setExtras = core_1.setExtras;
21
- exports.setTag = core_1.setTag;
22
- exports.setTags = core_1.setTags;
23
- exports.setUser = core_1.setUser;
24
- exports.withScope = core_1.withScope;
25
- exports.FunctionToString = core_1.FunctionToString;
26
- exports.InboundFilters = core_1.InboundFilters;
27
- var client_1 = require("./client");
28
- exports.BrowserClient = client_1.BrowserClient;
29
- var transports_1 = require("./transports");
30
- exports.makeFetchTransport = transports_1.makeFetchTransport;
31
- exports.makeXHRTransport = transports_1.makeXHRTransport;
32
- var stack_parsers_1 = require("./stack-parsers");
33
- exports.defaultStackParser = stack_parsers_1.defaultStackParser;
34
- exports.defaultStackLineParsers = stack_parsers_1.defaultStackLineParsers;
35
- exports.chromeStackLineParser = stack_parsers_1.chromeStackLineParser;
36
- exports.geckoStackLineParser = stack_parsers_1.geckoStackLineParser;
37
- exports.opera10StackLineParser = stack_parsers_1.opera10StackLineParser;
38
- exports.opera11StackLineParser = stack_parsers_1.opera11StackLineParser;
39
- exports.winjsStackLineParser = stack_parsers_1.winjsStackLineParser;
40
- var sdk_1 = require("./sdk");
41
- exports.defaultIntegrations = sdk_1.defaultIntegrations;
42
- exports.forceLoad = sdk_1.forceLoad;
43
- exports.init = sdk_1.init;
44
- exports.lastEventId = sdk_1.lastEventId;
45
- exports.onLoad = sdk_1.onLoad;
46
- exports.showReportDialog = sdk_1.showReportDialog;
47
- exports.flush = sdk_1.flush;
48
- exports.close = sdk_1.close;
49
- exports.wrap = sdk_1.wrap;
50
- var version_1 = require("./version");
51
- exports.SDK_NAME = version_1.SDK_NAME;
52
- var integrations_1 = require("./integrations");
53
- exports.GlobalHandlers = integrations_1.GlobalHandlers;
54
- exports.TryCatch = integrations_1.TryCatch;
55
- exports.Breadcrumbs = integrations_1.Breadcrumbs;
56
- exports.LinkedErrors = integrations_1.LinkedErrors;
57
- exports.UserAgent = integrations_1.UserAgent;
58
- exports.Dedupe = integrations_1.Dedupe;
59
- //# sourceMappingURL=exports.js.map
1
+ Object.defineProperty(exports, '__esModule', { value: true });
2
+
3
+ var core = require('@sentry/core');
4
+ var client = require('./client.js');
5
+ require('./transports/index.js');
6
+ var stackParsers = require('./stack-parsers.js');
7
+ var sdk = require('./sdk.js');
8
+ require('./integrations/index.js');
9
+
10
+ ;
11
+
12
+ ;
13
+ ;
14
+
15
+ exports.FunctionToString = core.FunctionToString;
16
+ exports.Hub = core.Hub;
17
+ exports.InboundFilters = core.InboundFilters;
18
+ exports.SDK_VERSION = core.SDK_VERSION;
19
+ exports.Scope = core.Scope;
20
+ exports.addBreadcrumb = core.addBreadcrumb;
21
+ exports.addGlobalEventProcessor = core.addGlobalEventProcessor;
22
+ exports.captureEvent = core.captureEvent;
23
+ exports.captureException = core.captureException;
24
+ exports.captureMessage = core.captureMessage;
25
+ exports.configureScope = core.configureScope;
26
+ exports.createTransport = core.createTransport;
27
+ exports.getCurrentHub = core.getCurrentHub;
28
+ exports.getHubFromCarrier = core.getHubFromCarrier;
29
+ exports.makeMain = core.makeMain;
30
+ exports.setContext = core.setContext;
31
+ exports.setExtra = core.setExtra;
32
+ exports.setExtras = core.setExtras;
33
+ exports.setTag = core.setTag;
34
+ exports.setTags = core.setTags;
35
+ exports.setUser = core.setUser;
36
+ exports.startTransaction = core.startTransaction;
37
+ exports.withScope = core.withScope;
38
+ exports.BrowserClient = client.BrowserClient;
39
+ exports.chromeStackLineParser = stackParsers.chromeStackLineParser;
40
+ exports.defaultStackLineParsers = stackParsers.defaultStackLineParsers;
41
+ exports.defaultStackParser = stackParsers.defaultStackParser;
42
+ exports.geckoStackLineParser = stackParsers.geckoStackLineParser;
43
+ exports.opera10StackLineParser = stackParsers.opera10StackLineParser;
44
+ exports.opera11StackLineParser = stackParsers.opera11StackLineParser;
45
+ exports.winjsStackLineParser = stackParsers.winjsStackLineParser;
46
+ exports.close = sdk.close;
47
+ exports.defaultIntegrations = sdk.defaultIntegrations;
48
+ exports.flush = sdk.flush;
49
+ exports.forceLoad = sdk.forceLoad;
50
+ exports.init = sdk.init;
51
+ exports.lastEventId = sdk.lastEventId;
52
+ exports.onLoad = sdk.onLoad;
53
+ exports.showReportDialog = sdk.showReportDialog;
54
+ exports.wrap = sdk.wrap;
55
+ //# sourceMappingURL=exports.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../../src/exports.ts"],"names":[],"mappings":";AAoBA,qCAyBsB;AAxBpB,yCAAA,uBAAuB,CAAA;AACvB,+BAAA,aAAa,CAAA;AACb,kCAAA,gBAAgB,CAAA;AAChB,8BAAA,YAAY,CAAA;AACZ,gCAAA,cAAc,CAAA;AACd,gCAAA,cAAc,CAAA;AACd,iCAAA,eAAe,CAAA;AACf,mCAAA,iBAAiB,CAAA;AACjB,+BAAA,aAAa,CAAA;AACb,qBAAA,GAAG,CAAA;AACH,0BAAA,QAAQ,CAAA;AACR,uBAAA,KAAK,CAAA;AACL,yBAAA,OAAO,CAAA;AACP,kCAAA,gBAAgB,CAAA;AAChB,6BAAA,WAAW,CAAA;AACX,4BAAA,UAAU,CAAA;AACV,0BAAA,QAAQ,CAAA;AACR,2BAAA,SAAS,CAAA;AACT,wBAAA,MAAM,CAAA;AACN,yBAAA,OAAO,CAAA;AACP,yBAAA,OAAO,CAAA;AACP,2BAAA,SAAS,CAAA;AACT,kCAAA,gBAAgB,CAAA;AAChB,gCAAA,cAAc,CAAA;AAGhB,mCAAyC;AAAhC,iCAAA,aAAa,CAAA;AACtB,2CAAoE;AAA3D,0CAAA,kBAAkB,CAAA;AAAE,wCAAA,gBAAgB,CAAA;AAC7C,iDAQyB;AAPvB,6CAAA,kBAAkB,CAAA;AAClB,kDAAA,uBAAuB,CAAA;AACvB,gDAAA,qBAAqB,CAAA;AACrB,+CAAA,oBAAoB,CAAA;AACpB,iDAAA,sBAAsB,CAAA;AACtB,iDAAA,sBAAsB,CAAA;AACtB,+CAAA,oBAAoB,CAAA;AAEtB,6BAAwH;AAA/G,oCAAA,mBAAmB,CAAA;AAAE,0BAAA,SAAS,CAAA;AAAE,qBAAA,IAAI,CAAA;AAAE,4BAAA,WAAW,CAAA;AAAE,uBAAA,MAAM,CAAA;AAAE,iCAAA,gBAAgB,CAAA;AAAE,sBAAA,KAAK,CAAA;AAAE,sBAAA,KAAK,CAAA;AAAE,qBAAA,IAAI,CAAA;AACxG,qCAAqC;AAA5B,6BAAA,QAAQ,CAAA;AACjB,+CAAwG;AAA/F,wCAAA,cAAc,CAAA;AAAE,kCAAA,QAAQ,CAAA;AAAE,qCAAA,WAAW,CAAA;AAAE,sCAAA,YAAY,CAAA;AAAE,mCAAA,SAAS,CAAA;AAAE,gCAAA,MAAM,CAAA","sourcesContent":["export type {\n Breadcrumb,\n BreadcrumbHint,\n Request,\n SdkInfo,\n Event,\n EventHint,\n Exception,\n // eslint-disable-next-line deprecation/deprecation\n Severity,\n SeverityLevel,\n StackFrame,\n Stacktrace,\n Thread,\n User,\n} from '@sentry/types';\n\nexport type { BrowserOptions } from './client';\nexport type { ReportDialogOptions } from './helpers';\n\nexport {\n addGlobalEventProcessor,\n addBreadcrumb,\n captureException,\n captureEvent,\n captureMessage,\n configureScope,\n createTransport,\n getHubFromCarrier,\n getCurrentHub,\n Hub,\n makeMain,\n Scope,\n Session,\n startTransaction,\n SDK_VERSION,\n setContext,\n setExtra,\n setExtras,\n setTag,\n setTags,\n setUser,\n withScope,\n FunctionToString,\n InboundFilters,\n} from '@sentry/core';\n\nexport { BrowserClient } from './client';\nexport { makeFetchTransport, makeXHRTransport } from './transports';\nexport {\n defaultStackParser,\n defaultStackLineParsers,\n chromeStackLineParser,\n geckoStackLineParser,\n opera10StackLineParser,\n opera11StackLineParser,\n winjsStackLineParser,\n} from './stack-parsers';\nexport { defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap } from './sdk';\nexport { SDK_NAME } from './version';\nexport { GlobalHandlers, TryCatch, Breadcrumbs, LinkedErrors, UserAgent, Dedupe } from './integrations';\n"]}
1
+ {"version":3,"file":"exports.js","sources":["../../../src/exports.ts"],"sourcesContent":["export type {\n Breadcrumb,\n BreadcrumbHint,\n Request,\n SdkInfo,\n Event,\n EventHint,\n Exception,\n // eslint-disable-next-line deprecation/deprecation\n Severity,\n SeverityLevel,\n StackFrame,\n Stacktrace,\n Thread,\n User,\n Session,\n} from '@sentry/types';\n\nexport type { BrowserOptions } from './client';\nexport type { ReportDialogOptions } from './helpers';\n\nexport {\n addGlobalEventProcessor,\n addBreadcrumb,\n captureException,\n captureEvent,\n captureMessage,\n configureScope,\n createTransport,\n getHubFromCarrier,\n getCurrentHub,\n Hub,\n makeMain,\n Scope,\n startTransaction,\n SDK_VERSION,\n setContext,\n setExtra,\n setExtras,\n setTag,\n setTags,\n setUser,\n withScope,\n FunctionToString,\n InboundFilters,\n} from '@sentry/core';\n\nexport { BrowserClient } from './client';\nexport { makeFetchTransport, makeXHRTransport } from './transports';\nexport {\n defaultStackParser,\n defaultStackLineParsers,\n chromeStackLineParser,\n geckoStackLineParser,\n opera10StackLineParser,\n opera11StackLineParser,\n winjsStackLineParser,\n} from './stack-parsers';\nexport { defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close, wrap } from './sdk';\nexport { GlobalHandlers, TryCatch, Breadcrumbs, LinkedErrors, HttpContext, Dedupe } from './integrations';\n"],"names":[],"mappings":";;;;;;;;;AAgBA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}