File size: 1,284 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 40 41 42 43 44 45 | import { bold, cyan, red, yellow } from '../../../../lib/picocolors'
import { SimpleWebpackError } from './simpleWebpackError'
const regexScssError =
/SassError: (.+)\n\s+on line (\d+) [\s\S]*?>> (.+)\n\s*(-+)\^$/m
export function getScssError(
fileName: string,
fileContent: string | null,
err: Error
): SimpleWebpackError | false {
if (err.name !== 'SassError') {
return false
}
const res = regexScssError.exec(err.message)
if (res) {
const [, reason, _lineNumer, backupFrame, columnString] = res
const lineNumber = Math.max(1, parseInt(_lineNumer, 10))
const column = columnString?.length ?? 1
let frame: string | undefined
if (fileContent) {
try {
const { codeFrameColumns } =
require('next/dist/compiled/babel/code-frame') as typeof import('next/dist/compiled/babel/code-frame')
frame = codeFrameColumns(
fileContent,
{ start: { line: lineNumber, column } },
{ forceColor: true }
) as string
} catch {}
}
return new SimpleWebpackError(
`${cyan(fileName)}:${yellow(lineNumber.toString())}:${yellow(
column.toString()
)}`,
red(bold('Syntax error')).concat(`: ${reason}\n\n${frame ?? backupFrame}`)
)
}
return false
}
|