UNPKG

barecheck

Version:
77 lines 2.67 kB
"use strict"; 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