39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
|
import Chalk from 'next/dist/compiled/chalk'
|
||
|
import { SimpleWebpackError } from './simpleWebpackError'
|
||
|
|
||
|
const chalk = new Chalk.constructor({ enabled: true })
|
||
|
const regexCssError = /^(?:CssSyntaxError|SyntaxError)\n\n\((\d+):(\d*)\) (.*)$/s
|
||
|
|
||
|
export function getCssError(
|
||
|
fileName: string,
|
||
|
err: Error
|
||
|
): SimpleWebpackError | false {
|
||
|
if (
|
||
|
!(
|
||
|
(err.name === 'CssSyntaxError' || err.name === 'SyntaxError') &&
|
||
|
(err as any).stack === false &&
|
||
|
!(err instanceof SyntaxError)
|
||
|
)
|
||
|
) {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
// https://github.com/postcss/postcss-loader/blob/d6931da177ac79707bd758436e476036a55e4f59/src/Error.js
|
||
|
|
||
|
const res = regexCssError.exec(err.message)
|
||
|
if (res) {
|
||
|
const [, _lineNumer, _column, reason] = res
|
||
|
const lineNumber = Math.max(1, parseInt(_lineNumer, 10))
|
||
|
const column = Math.max(1, parseInt(_column, 10))
|
||
|
|
||
|
return new SimpleWebpackError(
|
||
|
`${chalk.cyan(fileName)}:${chalk.yellow(
|
||
|
lineNumber.toString()
|
||
|
)}:${chalk.yellow(column.toString())}`,
|
||
|
chalk.red.bold('Syntax error').concat(`: ${reason}`)
|
||
|
)
|
||
|
}
|
||
|
|
||
|
return false
|
||
|
}
|