UNPKG

4.73 kBJavaScriptView Raw
1import { __assign } from "tslib";
2import { Severity } from '@sentry/types';
3import { addExceptionMechanism, addExceptionTypeValue, isDOMError, isDOMException, isError, isErrorEvent, isEvent, isPlainObject, SyncPromise, } from '@sentry/utils';
4import { eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent } from './parsers';
5import { computeStackTrace } from './tracekit';
6/**
7 * Builds and Event from a Exception
8 * @hidden
9 */
10export function eventFromException(options, exception, hint) {
11 var syntheticException = (hint && hint.syntheticException) || undefined;
12 var event = eventFromUnknownInput(exception, syntheticException, {
13 attachStacktrace: options.attachStacktrace,
14 });
15 addExceptionMechanism(event, {
16 handled: true,
17 type: 'generic',
18 });
19 event.level = Severity.Error;
20 if (hint && hint.event_id) {
21 event.event_id = hint.event_id;
22 }
23 return SyncPromise.resolve(event);
24}
25/**
26 * Builds and Event from a Message
27 * @hidden
28 */
29export function eventFromMessage(options, message, level, hint) {
30 if (level === void 0) { level = Severity.Info; }
31 var syntheticException = (hint && hint.syntheticException) || undefined;
32 var event = eventFromString(message, syntheticException, {
33 attachStacktrace: options.attachStacktrace,
34 });
35 event.level = level;
36 if (hint && hint.event_id) {
37 event.event_id = hint.event_id;
38 }
39 return SyncPromise.resolve(event);
40}
41/**
42 * @hidden
43 */
44export function eventFromUnknownInput(exception, syntheticException, options) {
45 if (options === void 0) { options = {}; }
46 var event;
47 if (isErrorEvent(exception) && exception.error) {
48 // If it is an ErrorEvent with `error` property, extract it to get actual Error
49 var errorEvent = exception;
50 // eslint-disable-next-line no-param-reassign
51 exception = errorEvent.error;
52 event = eventFromStacktrace(computeStackTrace(exception));
53 return event;
54 }
55 if (isDOMError(exception) || isDOMException(exception)) {
56 // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)
57 // then we just extract the name, code, and message, as they don't provide anything else
58 // https://developer.mozilla.org/en-US/docs/Web/API/DOMError
59 // https://developer.mozilla.org/en-US/docs/Web/API/DOMException
60 var domException = exception;
61 var name_1 = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException');
62 var message = domException.message ? name_1 + ": " + domException.message : name_1;
63 event = eventFromString(message, syntheticException, options);
64 addExceptionTypeValue(event, message);
65 if ('code' in domException) {
66 event.tags = __assign(__assign({}, event.tags), { 'DOMException.code': "" + domException.code });
67 }
68 return event;
69 }
70 if (isError(exception)) {
71 // we have a real Error object, do nothing
72 event = eventFromStacktrace(computeStackTrace(exception));
73 return event;
74 }
75 if (isPlainObject(exception) || isEvent(exception)) {
76 // If it is plain Object or Event, serialize it manually and extract options
77 // This will allow us to group events based on top-level keys
78 // which is much better than creating new group when any key/value change
79 var objectException = exception;
80 event = eventFromPlainObject(objectException, syntheticException, options.rejection);
81 addExceptionMechanism(event, {
82 synthetic: true,
83 });
84 return event;
85 }
86 // If none of previous checks were valid, then it means that it's not:
87 // - an instance of DOMError
88 // - an instance of DOMException
89 // - an instance of Event
90 // - an instance of Error
91 // - a valid ErrorEvent (one with an error property)
92 // - a plain Object
93 //
94 // So bail out and capture it as a simple message:
95 event = eventFromString(exception, syntheticException, options);
96 addExceptionTypeValue(event, "" + exception, undefined);
97 addExceptionMechanism(event, {
98 synthetic: true,
99 });
100 return event;
101}
102/**
103 * @hidden
104 */
105export function eventFromString(input, syntheticException, options) {
106 if (options === void 0) { options = {}; }
107 var event = {
108 message: input,
109 };
110 if (options.attachStacktrace && syntheticException) {
111 var stacktrace = computeStackTrace(syntheticException);
112 var frames_1 = prepareFramesForEvent(stacktrace.stack);
113 event.stacktrace = {
114 frames: frames_1,
115 };
116 }
117 return event;
118}
119//# sourceMappingURL=eventbuilder.js.map
\No newline at end of file