@@ -11,7 +11,7 @@ function Exception() {
1111
1212Exception . prototype = new Error ( ) ;
1313
14- function resolveCallStack ( error : Error ) : string {
14+ async function resolveCallStack ( error : Error ) : Promise < string > {
1515 const stackLines : string [ ] = error . stack . split ( "\n" ) ;
1616 const parsed = _ . map ( stackLines , ( line : string ) : any => {
1717 let match = line . match ( / ^ \s * a t ( [ ^ ( ] * ) \( ( .* ?) : ( [ 0 - 9 ] + ) : ( [ 0 - 9 ] + ) \) $ / ) ;
@@ -28,9 +28,9 @@ function resolveCallStack(error: Error): string {
2828 return line ;
2929 } ) ;
3030
31- const fs = require ( "fs" ) ;
31+ const fs = require ( "fs" ) ;
3232
33- const remapped = _ . map ( parsed , ( parsedLine ) => {
33+ const remapped = await Promise . all ( _ . map ( parsed , async ( parsedLine ) => {
3434 if ( _ . isString ( parsedLine ) ) {
3535 return parsedLine ;
3636 }
@@ -47,15 +47,16 @@ function resolveCallStack(error: Error): string {
4747
4848 const mapData = JSON . parse ( fs . readFileSync ( mapFileName ) . toString ( ) ) ;
4949
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+ } ) ) ;
5960
6061 let outputMessage = remapped . join ( "\n" ) ;
6162
@@ -73,7 +74,7 @@ export function installUncaughtExceptionListener(actionOnException?: () => void)
7374 let callstack = err . stack ;
7475 if ( callstack ) {
7576 try {
76- callstack = resolveCallStack ( err ) ;
77+ callstack = await resolveCallStack ( err ) ;
7778 } catch ( err ) {
7879 console . error ( "Error while resolving callStack:" , err ) ;
7980 }
@@ -178,7 +179,7 @@ export class Errors implements IErrors {
178179 const logger = this . $injector . resolve ( "logger" ) ;
179180 const loggerLevel : string = logger . getLevel ( ) . toUpperCase ( ) ;
180181 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 ;
182183
183184 if ( ex . printOnStdout ) {
184185 logger . info ( message ) ;
0 commit comments