2018-04-18 18:18:06 +02:00
|
|
|
const filenameRE = /\(([^)]+\.js):(\d+):(\d+)\)$/
|
|
|
|
|
2019-02-22 20:49:30 +01:00
|
|
|
export function rewriteStacktrace(e: Error, distDir: string) {
|
2018-07-24 11:24:40 +02:00
|
|
|
if (!e || typeof e.stack !== 'string') {
|
2018-04-18 18:18:06 +02:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
const lines = e.stack.split('\n')
|
|
|
|
|
2019-02-22 20:49:30 +01:00
|
|
|
const result = lines.map((line: string) => {
|
2018-07-24 11:24:40 +02:00
|
|
|
return rewriteTraceLine(line, distDir)
|
|
|
|
})
|
2018-04-18 18:18:06 +02:00
|
|
|
|
|
|
|
e.stack = result.join('\n')
|
|
|
|
}
|
|
|
|
|
2019-02-22 20:49:30 +01:00
|
|
|
function rewriteTraceLine(trace: string, distDir: string) {
|
2018-04-18 18:18:06 +02:00
|
|
|
const m = trace.match(filenameRE)
|
|
|
|
if (m == null) {
|
|
|
|
return trace
|
|
|
|
}
|
2018-07-24 11:24:40 +02:00
|
|
|
const filename = m[1]
|
2019-05-29 13:57:26 +02:00
|
|
|
const filenameLink = filename
|
|
|
|
.replace(distDir, '/_next/development')
|
|
|
|
.replace(/\\/g, '/')
|
2018-07-24 11:24:40 +02:00
|
|
|
trace = trace.replace(filename, filenameLink)
|
2018-04-18 18:18:06 +02:00
|
|
|
return trace
|
|
|
|
}
|