barecheck
Version:
Barecheck core Node.js library
77 lines • 2.67 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.calculatePercentage = exports.parseLcovFileData = exports.groupLcovData = void 0;
const lcov_parse_1 = __importDefault(require("lcov-parse"));
const groupByFile = (lcovData) => {
const response = [];
lcovData.forEach((fileData) => {
const lines = fileData.lines.details
.filter(({ hit }) => hit === 0)
.map(({ line }) => line);
if (lines.length > 0) {
response.push({
file: fileData.file,
lines
});
}
});
return response;
};
// TODO: this function is interapted by empty lines
// Need to find a way how we can avoid this in order to keep the whole interval
const groupByFileLines = (filesLines) =>
// eslint-disable-next-line max-statements
filesLines.map(({ file, lines }) => {
const groupedLines = [];
let previousLine = null;
let startLine = null;
const pushCurrentStateToArray = () => groupedLines.push(startLine !== previousLine ? [startLine, previousLine] : previousLine);
// eslint-disable-next-line no-restricted-syntax
for (const line of lines) {
// initialize first element
if (startLine === null) {
startLine = line;
previousLine = line;
// eslint-disable-next-line no-continue
continue;
}
/// group elements to range
if (previousLine !== line - 1) {
pushCurrentStateToArray();
startLine = line;
}
previousLine = line;
}
// Push last element
pushCurrentStateToArray();
return { file, lines: groupedLines };
});
const groupLcovData = (lcovData) => {
const groupedFiles = groupByFile(lcovData);
const groupedFileLines = groupByFileLines(groupedFiles);
return groupedFileLines;
};
exports.groupLcovData = groupLcovData;
// TODO: add types for data and lcovData
const parseLcovFileData = (data) => new Promise((resolve, reject) => (0, lcov_parse_1.default)(data, (err, res) => {
if (err) {
reject(err);
return;
}
resolve(res);
}));
exports.parseLcovFileData = parseLcovFileData;
const calculatePercentage = (lcovData) => {
let hit = 0;
let found = 0;
lcovData.forEach((entry) => {
hit += entry.lines.hit;
found += entry.lines.found;
});
return parseFloat(((hit / found) * 100).toFixed(2));
};
exports.calculatePercentage = calculatePercentage;
//# sourceMappingURL=lcov.js.map