@@ -11,7 +11,7 @@ function Exception() {
11
11
12
12
Exception . prototype = new Error ( ) ;
13
13
14
- function resolveCallStack ( error : Error ) : string {
14
+ async function resolveCallStack ( error : Error ) : Promise < string > {
15
15
const stackLines : string [ ] = error . stack . split ( "\n" ) ;
16
16
const parsed = _ . map ( stackLines , ( line : string ) : any => {
17
17
let match = line . match ( / ^ \s * a t ( [ ^ ( ] * ) \( ( .* ?) : ( [ 0 - 9 ] + ) : ( [ 0 - 9 ] + ) \) $ / ) ;
@@ -28,9 +28,9 @@ function resolveCallStack(error: Error): string {
28
28
return line ;
29
29
} ) ;
30
30
31
- const fs = require ( "fs" ) ;
31
+ const fs = require ( "fs" ) ;
32
32
33
- const remapped = _ . map ( parsed , ( parsedLine ) => {
33
+ const remapped = await Promise . all ( _ . map ( parsed , async ( parsedLine ) => {
34
34
if ( _ . isString ( parsedLine ) ) {
35
35
return parsedLine ;
36
36
}
@@ -47,15 +47,16 @@ function resolveCallStack(error: Error): string {
47
47
48
48
const mapData = JSON . parse ( fs . readFileSync ( mapFileName ) . toString ( ) ) ;
49
49
50
- const consumer = new SourceMapConsumer ( mapData ) ;
51
- const sourcePos = consumer . originalPositionFor ( { line : line , column : column } ) ;
52
- if ( sourcePos && sourcePos . source ) {
53
- const source = path . join ( path . dirname ( fileName ) , sourcePos . source ) ;
54
- return util . format ( " at %s (%s:%s:%s)" , functionName , source , sourcePos . line , sourcePos . column ) ;
55
- }
56
-
57
- return util . format ( " at %s (%s:%s:%s)" , functionName , fileName , line , column ) ;
58
- } ) ;
50
+ return await SourceMapConsumer . with ( mapData , mapFileName , ( consumer ) => {
51
+ const sourcePos = consumer . originalPositionFor ( { line : line , column : column } ) ;
52
+ if ( sourcePos && sourcePos . source ) {
53
+ const source = path . join ( path . dirname ( fileName ) , sourcePos . source ) ;
54
+ return util . format ( " at %s (%s:%s:%s)" , functionName , source , sourcePos . line , sourcePos . column ) ;
55
+ }
56
+
57
+ return util . format ( " at %s (%s:%s:%s)" , functionName , fileName , line , column ) ;
58
+ } ) ;
59
+ } ) ) ;
59
60
60
61
let outputMessage = remapped . join ( "\n" ) ;
61
62
@@ -73,7 +74,7 @@ export function installUncaughtExceptionListener(actionOnException?: () => void)
73
74
let callstack = err . stack ;
74
75
if ( callstack ) {
75
76
try {
76
- callstack = resolveCallStack ( err ) ;
77
+ callstack = await resolveCallStack ( err ) ;
77
78
} catch ( err ) {
78
79
console . error ( "Error while resolving callStack:" , err ) ;
79
80
}
@@ -178,7 +179,7 @@ export class Errors implements IErrors {
178
179
const logger = this . $injector . resolve ( "logger" ) ;
179
180
const loggerLevel : string = logger . getLevel ( ) . toUpperCase ( ) ;
180
181
const printCallStack = this . printCallStack || loggerLevel === "TRACE" || loggerLevel === "DEBUG" ;
181
- const message = printCallStack ? resolveCallStack ( ex ) : isInteractive ( ) ? `\x1B[31;1m${ ex . message } \x1B[0m` : ex . message ;
182
+ const message = printCallStack ? await resolveCallStack ( ex ) : isInteractive ( ) ? `\x1B[31;1m${ ex . message } \x1B[0m` : ex . message ;
182
183
183
184
if ( ex . printOnStdout ) {
184
185
logger . info ( message ) ;
0 commit comments