You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
2.2 KiB

4 years ago
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const os = require("os");
const codeFrame = require("babel-code-frame");
const chalk_1 = require("chalk");
const fs = require("fs");
const NormalizedMessage_1 = require("../NormalizedMessage");
const FsHelper_1 = require("../FsHelper");
/**
* Create new code frame formatter.
*
* @param options Options for babel-code-frame - see https://www.npmjs.com/package/babel-code-frame
* @returns {codeframeFormatter}
*/
function createCodeframeFormatter(options) {
return function codeframeFormatter(message, useColors) {
const colors = new chalk_1.default.constructor({ enabled: useColors });
const messageColor = message.isWarningSeverity()
? colors.bold.yellow
: colors.bold.red;
const positionColor = colors.dim;
if (message.code === NormalizedMessage_1.NormalizedMessage.ERROR_CODE_INTERNAL) {
return (messageColor(`INTERNAL ${message.severity.toUpperCase()}(${message.line},${message.character}) `) +
message.content +
(message.stack
? os.EOL + 'stack trace:' + os.EOL + colors.gray(message.stack)
: ''));
}
const file = message.file;
const source = file && FsHelper_1.fileExistsSync(file) && fs.readFileSync(file, 'utf-8');
let frame = '';
if (source) {
frame = codeFrame(source, message.line, // Assertion: `codeFrame` allows passing undefined, typings are incorrect
message.character, Object.assign({}, (options || {}), { highlightCode: useColors }))
.split('\n')
.map(str => ' ' + str)
.join(os.EOL);
}
return (messageColor(message.severity.toUpperCase() +
' in ' +
`${message.file}(${message.line},${message.character}):`) +
os.EOL +
positionColor(message.line + ':' + message.character) +
' ' +
message.content +
(frame ? os.EOL + frame : ''));
};
}
exports.createCodeframeFormatter = createCodeframeFormatter;
//# sourceMappingURL=codeframeFormatter.js.map