11import { 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' ;
33import {
44 addExceptionMechanism ,
55 addExceptionTypeValue ,
6+ createStackParser ,
67 extractExceptionKeysForMessage ,
78 isError ,
89 isPlainObject ,
910 normalizeToSize ,
10- SyncPromise ,
1111} from '@sentry/utils' ;
1212
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+ }
1438
1539/**
1640 * Builds and Event from a Exception
1741 * @hidden
1842 */
19- export function eventFromException ( exception : unknown , hint ?: EventHint ) : PromiseLike < Event > {
43+ export function eventFromError ( exception : unknown , hint ?: EventHint ) : Event {
2044 // eslint-disable-next-line @typescript-eslint/no-explicit-any
2145 let ex : any = exception ;
2246 const providedMechanism : Mechanism | undefined =
@@ -47,19 +71,19 @@ export function eventFromException(exception: unknown, hint?: EventHint): Promis
4771 mechanism . synthetic = true ;
4872 }
4973
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+ } ;
5579
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+ } ;
6387}
6488
6589/**
@@ -71,23 +95,19 @@ export function eventFromMessage(
7195 message : string ,
7296 level : Severity = Severity . Info ,
7397 hint ?: EventHint ,
74- ) : PromiseLike < Event > {
98+ ) : Event {
7599 const event : Event = {
76100 event_id : hint && hint . event_id ,
77101 level,
78102 message,
79103 } ;
80104
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 } ;
91109 }
92- } ) ;
110+ }
111+
112+ return event ;
93113}
0 commit comments