// @flow
const filenameRE = /\(([^)]+\.js):(\d+):(\d+)\)$/

export function rewriteStacktrace (e: any, distDir: string): void {
  if (!e || typeof e.stack !== 'string') {
    return
  }

  const lines = e.stack.split('\n')

  const result = lines.map((line) => {
    return rewriteTraceLine(line, distDir)
  })

  e.stack = result.join('\n')
}

function rewriteTraceLine (trace: string, distDir: string): string {
  const m = trace.match(filenameRE)
  if (m == null) {
    return trace
  }
  const filename = m[1]
  const filenameLink = filename.replace(distDir, '/_next/development').replace(/\\/g, '/')
  trace = trace.replace(filename, filenameLink)
  return trace
}
