@bartekbp/typescript-checkstyle
Version:
Library reporting tsc output in checkstyle format
52 lines • 2.02 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const tsc_output_parser_1 = require("@aivenio/tsc-output-parser");
const checkstyle_formatter_1 = __importDefault(require("checkstyle-formatter"));
const fp_1 = require("lodash/fp");
exports.default = (input) => {
// parsing library doesnt support windows, so let's workaround it
// by replacing windows line endings with linux
const sanitizedInput = input.replace(/\r\n/g, '\n');
const lines = tsc_output_parser_1.parse(sanitizedInput);
const errors = lines.map(line => {
const details = line.value;
const file = details.path.value;
const position = details.cursor.value;
const message = details.message.value;
const errorCode = details.tsError.value.errorString;
return {
file,
details: {
cursor: {
line: position.line,
column: position.col,
},
message,
tsErrorCode: errorCode,
}
};
});
const errorsPerFile = fp_1.groupBy(line => line.file, errors);
const sortedFiles = Object.keys(errorsPerFile);
const fileEntries = sortedFiles.map(filename => {
const errorDetails = errorsPerFile[filename]
.map(error => error.details);
const sortedDetails = fp_1.sortBy(['cursor.line', 'cursor.column'], errorDetails);
const messages = sortedDetails.map(details => ({
line: details.cursor.line,
column: details.cursor.column,
severity: 'error',
message: details.message.trim(),
source: details.tsErrorCode
}));
return {
filename,
messages
};
});
return checkstyle_formatter_1.default(fileEntries);
};
//# sourceMappingURL=format.js.map