@@ -56,8 +56,7 @@ function middleware(filename, options, cb) {
56
56
cb ( null , res )
57
57
} )
58
58
} catch ( err ) {
59
- err . message = filename + ': ' + err . message
60
- cb ( err )
59
+ cb ( prependFilenameToError ( filename , err ) )
61
60
}
62
61
63
62
return
@@ -83,8 +82,7 @@ function middleware(filename, options, cb) {
83
82
cb ( null , res ) ;
84
83
} ) ;
85
84
} catch ( err ) {
86
- err . message = filename + ': ' + err . message ;
87
- cb ( err ) ;
85
+ cb ( prependFilenameToError ( filename , err ) )
88
86
}
89
87
} ) ;
90
88
}
@@ -108,8 +106,7 @@ function middleware(filename, options, cb) {
108
106
cb ( null , res )
109
107
} )
110
108
} catch ( err ) {
111
- err . message = filename + ': ' + err . message
112
- cb ( err )
109
+ cb ( prependFilenameToError ( filename , err ) )
113
110
}
114
111
} ) ;
115
112
}
@@ -151,6 +148,22 @@ function middleware(filename, options, cb) {
151
148
152
149
// TODO check if layout path has .hbs extension
153
150
151
+ function prependFilenameToError ( filename , err ) {
152
+ // prepend to the message
153
+ err . message = filename + ': ' + err . message
154
+
155
+ // restore error message on stack (https://github.com/wycats/handlebars.js/issues/1562)
156
+ if ( typeof err . stack === 'string' && err . stack . indexOf ( err . name + '\n' ) === 0 && err . stack . indexOf ( err . message ) === - 1 ) {
157
+ Object . defineProperty ( err , 'stack' , {
158
+ configurable : true ,
159
+ value : err . name + ': ' + err . message ,
160
+ writable : true
161
+ } )
162
+ }
163
+
164
+ return err
165
+ }
166
+
154
167
function cacheAndCompile ( filename , str ) {
155
168
var layout_template = handlebars . compile ( str ) ;
156
169
if ( options . cache ) {
0 commit comments