1 | const os = require('os')
|
2 | const { codeFrameColumns } = require('@babel/code-frame')
|
3 | const chalk = require('chalk')
|
4 | const fs = require('fs')
|
5 |
|
6 | module.exports = codeFrameOptions => (error, useColors) => {
|
7 | const colors = new chalk.constructor({ enabled: useColors })
|
8 | const { file } = error
|
9 | const source = file && fs.existsSync(file) && fs.readFileSync(file, 'utf-8')
|
10 |
|
11 | let frame = ''
|
12 |
|
13 | if (source) {
|
14 | frame = codeFrameColumns(
|
15 | source,
|
16 | {
|
17 | start: {
|
18 | line: error.line,
|
19 | column: error.character,
|
20 | },
|
21 | },
|
22 | Object.assign({}, codeFrameOptions || {}, {
|
23 | highlightCode: useColors,
|
24 | })
|
25 | )
|
26 | }
|
27 |
|
28 | return (
|
29 | colors.dim(`${error.line}:${error.character} `) +
|
30 | error.content +
|
31 | colors.cyan(` (TS${error.code})`) +
|
32 | os.EOL +
|
33 | (frame ? os.EOL + frame : '')
|
34 | )
|
35 | }
|