@@ -8,19 +8,19 @@ var cwd = process.cwd()
88module . exports = ttyError
99
1010function ttyError ( src , sub , err ) {
11- if ( ! err . filename || ! err . loc ) return err
11+ var longFilename = err . filename || err . fileName
12+ if ( ! longFilename || ! getErrorLocation ( err ) ) return err
1213
13- var longFilename = err . filename
1414 var filename = path . relative ( cwd , longFilename )
15- var loc = err . loc
15+ var loc = getErrorLocation ( err )
1616 var line = loc . line
1717 var col = loc . column + 1
1818
1919 var lineNum = String ( line ) + ' '
2020 var padLen = lineNum . length
2121 var empty = padLeft ( '|' , padLen + 1 )
2222 var arrow = padLeft ( '--> ' , padLen + 4 - 1 )
23- var syntaxError = padLeft ( '' , col ) + '^ Syntax Error'
23+ var syntaxError = padLeft ( '' , col ) + '^ ' + getErrorMessage ( err )
2424
2525 try {
2626 var file = fs . readFileSync ( longFilename , 'utf8' )
@@ -65,3 +65,27 @@ function pad (len, char) {
6565 while ( res . length < len ) res += char
6666 return res
6767}
68+
69+ function getErrorLocation ( err ) {
70+ if ( err . loc ) return err . loc
71+ if ( typeof err . line === 'number' && typeof err . column === 'number' ) {
72+ return {
73+ line : err . line ,
74+ column : err . column
75+ }
76+ }
77+ return null
78+ }
79+
80+ function getErrorMessage ( err ) {
81+ var loc = getErrorLocation ( err )
82+ var message = err . message
83+ // strip file names
84+ . replace ( / ^ .* ?: | w h i l e p a r s i n g f i l e : .* ?$ / g, '' )
85+ // strip position in file
86+ . replace ( '(' + loc . line + ':' + loc . column + ')' , '' )
87+ // same, but for typescript
88+ . replace ( '(' + loc . line + ',' + loc . column + ')' , '' )
89+
90+ return message || 'Syntax Error'
91+ }
0 commit comments