File size: 1,119 Bytes
b91e262
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { bold, cyan, red, yellow } from '../../../../lib/picocolors'
import { SimpleWebpackError } from './simpleWebpackError'

export function getBabelError(
  fileName: string,
  err: Error & {
    code?: string | number
    loc?: { line: number; column: number }
  }
): SimpleWebpackError | false {
  if (err.code !== 'BABEL_PARSE_ERROR') {
    return false
  }

  // https://github.com/babel/babel/blob/34693d6024da3f026534dd8d569f97ac0109602e/packages/babel-core/src/parser/index.js
  if (err.loc) {
    const lineNumber = Math.max(1, err.loc.line)
    const column = Math.max(1, err.loc.column)

    let message = err.message
      // Remove file information, which instead is provided by webpack.
      .replace(/^.+?: /, '')
      // Remove column information from message
      .replace(
        new RegExp(`[^\\S\\r\\n]*\\(${lineNumber}:${column}\\)[^\\S\\r\\n]*`),
        ''
      )

    return new SimpleWebpackError(
      `${cyan(fileName)}:${yellow(lineNumber.toString())}:${yellow(
        column.toString()
      )}`,
      red(bold('Syntax error')).concat(`: ${message}`)
    )
  }

  return false
}