1
1
import { getCurrentHub } from '@sentry/hub' ;
2
- import { Event , EventHint , Mechanism , Options , Severity } from '@sentry/types' ;
2
+ import { Event , EventHint , Exception , Mechanism , Options , Severity , StackFrame } from '@sentry/types' ;
3
3
import {
4
4
addExceptionMechanism ,
5
5
addExceptionTypeValue ,
6
+ createStackParser ,
6
7
extractExceptionKeysForMessage ,
7
8
isError ,
8
9
isPlainObject ,
9
10
normalizeToSize ,
10
- SyncPromise ,
11
11
} from '@sentry/utils' ;
12
12
13
- import { extractStackFromError , parseError , parseStack , prepareFramesForEvent } from './parsers' ;
13
+ import { node } from './stack-parser' ;
14
+
15
+ /**
16
+ * Extracts stack frames from the error.stack string
17
+ */
18
+ export function extractStackFromError ( error : Error ) : StackFrame [ ] {
19
+ return createStackParser ( node ) ( error . stack || '' ) ;
20
+ }
21
+
22
+ /**
23
+ * Extracts stack frames from the error and builds a Sentry Exception
24
+ */
25
+ export function exceptionFromError ( error : Error ) : Exception {
26
+ return {
27
+ type : error . name || error . constructor . name ,
28
+ value : error . message ,
29
+ stacktrace : { frames : extractStackFromError ( error ) } ,
30
+ } ;
31
+ }
14
32
15
33
/**
16
34
* Builds and Event from a Exception
17
35
* @hidden
18
36
*/
19
- export function eventFromException ( exception : unknown , hint ?: EventHint ) : PromiseLike < Event > {
37
+ export function eventFromException ( exception : unknown , hint ?: EventHint ) : Event {
20
38
// eslint-disable-next-line @typescript-eslint/no-explicit-any
21
39
let ex : any = exception ;
22
40
const providedMechanism : Mechanism | undefined =
@@ -47,19 +65,19 @@ export function eventFromException(exception: unknown, hint?: EventHint): Promis
47
65
mechanism . synthetic = true ;
48
66
}
49
67
50
- return new SyncPromise < Event > ( ( resolve , reject ) =>
51
- parseError ( ex as Error )
52
- . then ( event => {
53
- addExceptionTypeValue ( event , undefined , undefined ) ;
54
- addExceptionMechanism ( event , mechanism ) ;
68
+ const event = {
69
+ exception : {
70
+ values : [ exceptionFromError ( ex as Error ) ] ,
71
+ } ,
72
+ } ;
73
+
74
+ addExceptionTypeValue ( event , undefined , undefined ) ;
75
+ addExceptionMechanism ( event , mechanism ) ;
55
76
56
- resolve ( {
57
- ...event ,
58
- event_id : hint && hint . event_id ,
59
- } ) ;
60
- } )
61
- . then ( null , reject ) ,
62
- ) ;
77
+ return {
78
+ ...event ,
79
+ event_id : hint && hint . event_id ,
80
+ } ;
63
81
}
64
82
65
83
/**
@@ -71,23 +89,18 @@ export function eventFromMessage(
71
89
message : string ,
72
90
level : Severity = Severity . Info ,
73
91
hint ?: EventHint ,
74
- ) : PromiseLike < Event > {
92
+ ) : Event {
75
93
const event : Event = {
76
94
event_id : hint && hint . event_id ,
77
95
level,
78
96
message,
79
97
} ;
80
98
81
- return new SyncPromise < Event > ( resolve => {
82
- if ( options . attachStacktrace && hint && hint . syntheticException ) {
83
- const stack = hint . syntheticException ? extractStackFromError ( hint . syntheticException ) : [ ] ;
84
- const frames = parseStack ( stack ) ;
85
- event . stacktrace = {
86
- frames : prepareFramesForEvent ( frames ) ,
87
- } ;
88
- resolve ( event ) ;
89
- } else {
90
- resolve ( event ) ;
91
- }
92
- } ) ;
99
+ if ( options . attachStacktrace && hint && hint . syntheticException ) {
100
+ event . stacktrace = {
101
+ frames : hint . syntheticException ? extractStackFromError ( hint . syntheticException ) : [ ] ,
102
+ } ;
103
+ }
104
+
105
+ return event ;
93
106
}
0 commit comments