import markdownTable from 'markdown-table';
import { FilesResults, FileResultFormat } from './common';
export const resultFormatter = (
files: FilesResults,
total: FileResultFormat
): string => {
const formattedFiles = formatFilesResults(files);
const formattedTotal = formatTotal(total);
return `${formattedFiles}${formattedTotal}`;
};
const formatTotal = (total: FileResultFormat): string => {
const table: Array<(string | number)[]> = [];
const { lines, branches, functions, statements } = total.pcts;
const lDelta = formatDelta(total.deltas.lines);
const bDelta = formatDelta(total.deltas.branches);
const fDelta = formatDelta(total.deltas.functions);
const sDelta = formatDelta(total.deltas.statements);
table.push(['Lines', 'Branches', 'Functions', 'Statements']);
table.push([
`${lines}%(${lDelta})`,
`${branches}%(${bDelta})`,
`${functions}%(${fDelta})`,
`${statements}%(${sDelta})`
]);
return '\n\nTotal:\n\n' + markdownTable(table);
};
const formatFilesResults = (files: FilesResults): string => {
let noChange = true;
const table: Array<(string | number)[]> = [];
const header = [
'Ok',
'File (✨=New File)',
'Lines',
'Branches',
'Functions',
'Statements'
];
table.push(header);
Object.keys(files).forEach((file) => {
const { deltas, pcts, decreased, belowThreshold, isNewFile } = files[file];
const row = [
decreased || belowThreshold ? '🔴' : '✅',
`${isNewFile ? '✨ ' : ''}${file}`,
`${pcts.lines}%
(${formatDelta(deltas.lines)})`,
`${pcts.branches}%
(${formatDelta(deltas.branches)})`,
`${pcts.functions}%
(${formatDelta(deltas.functions)})`,
`${pcts.statements}%
(${formatDelta(deltas.statements)})`
];
table.push(row);
noChange = false;
});
return noChange ? 'Coverage values did not change👌.' : markdownTable(table);
};
const formatDelta = (num: number): string => {
return num >= 0 ? `+${num}%` : `${num}%`;
};