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 { nodeStackParser } 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 ( nodeStackParser ) ( 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
+ const exception : Exception = {
27
+ type : error . name || error . constructor . name ,
28
+ value : error . message ,
29
+ } ;
30
+
31
+ const frames = extractStackFromError ( error ) ;
32
+ if ( frames . length ) {
33
+ exception . stacktrace = { frames } ;
34
+ }
35
+
36
+ return exception ;
37
+ }
14
38
15
39
/**
16
40
* Builds and Event from a Exception
17
41
* @hidden
18
42
*/
19
- export function eventFromException ( exception : unknown , hint ?: EventHint ) : PromiseLike < Event > {
43
+ export function eventFromError ( exception : unknown , hint ?: EventHint ) : Event {
20
44
// eslint-disable-next-line @typescript-eslint/no-explicit-any
21
45
let ex : any = exception ;
22
46
const providedMechanism : Mechanism | undefined =
@@ -47,19 +71,19 @@ export function eventFromException(exception: unknown, hint?: EventHint): Promis
47
71
mechanism . synthetic = true ;
48
72
}
49
73
50
- return new SyncPromise < Event > ( ( resolve , reject ) =>
51
- parseError ( ex as Error )
52
- . then ( event => {
53
- addExceptionTypeValue ( event , undefined , undefined ) ;
54
- addExceptionMechanism ( event , mechanism ) ;
74
+ const event = {
75
+ exception : {
76
+ values : [ exceptionFromError ( ex as Error ) ] ,
77
+ } ,
78
+ } ;
55
79
56
- resolve ( {
57
- ... event ,
58
- event_id : hint && hint . event_id ,
59
- } ) ;
60
- } )
61
- . then ( null , reject ) ,
62
- ) ;
80
+ addExceptionTypeValue ( event , undefined , undefined ) ;
81
+ addExceptionMechanism ( event , mechanism ) ;
82
+
83
+ return {
84
+ ... event ,
85
+ event_id : hint && hint . event_id ,
86
+ } ;
63
87
}
64
88
65
89
/**
@@ -71,23 +95,19 @@ export function eventFromMessage(
71
95
message : string ,
72
96
level : Severity = Severity . Info ,
73
97
hint ?: EventHint ,
74
- ) : PromiseLike < Event > {
98
+ ) : Event {
75
99
const event : Event = {
76
100
event_id : hint && hint . event_id ,
77
101
level,
78
102
message,
79
103
} ;
80
104
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 ) ;
105
+ if ( options . attachStacktrace && hint && hint . syntheticException ) {
106
+ const frames = extractStackFromError ( hint . syntheticException ) ;
107
+ if ( frames . length ) {
108
+ event . stacktrace = { frames } ;
91
109
}
92
- } ) ;
110
+ }
111
+
112
+ return event ;
93
113
}
0 commit comments