UNPKG

bare-cov

Version:

Generate coverage reports using Bare and Node.js

76 lines (63 loc) 2.44 kB
function summarizeFileCoverage(file) { const summary = { total: { statements: 0, branches: 0, functions: 0, lines: 0 }, covered: { statements: 0, branches: 0, functions: 0, lines: 0 }, uncovered: { lines: [] } } if (file.s) { const statements = Object.values(file.s) summary.total.statements = statements.length summary.covered.statements = statements.filter((hitCount) => hitCount > 0).length } if (file.b) { for (const branch of Object.values(file.b)) { summary.total.branches += branch.length summary.covered.branches += branch.filter((hitCount) => hitCount > 0).length } } if (file.f) { const functions = Object.values(file.f) summary.total.functions = functions.length summary.covered.functions = functions.filter((hitCount) => hitCount > 0).length } let lineCoverage = file.l if (!lineCoverage && file.s && file.statementMap) { lineCoverage = {} for (const [statementId, hitCount] of Object.entries(file.s)) { const statementInfo = file.statementMap[statementId] if (!statementInfo) continue const { line } = statementInfo.start const lastCount = lineCoverage[line] if (lastCount === undefined || lastCount < hitCount) lineCoverage[line] = hitCount } } const lines = Object.entries(lineCoverage) summary.total.lines = lines.length for (const [line, hitCount] of lines) { if (hitCount > 0) summary.covered.lines++ else summary.uncovered.lines.push(line) } return summary } module.exports = function summarizeCoverage(coverageData) { const summary = { total: { statements: 0, branches: 0, functions: 0, lines: 0 }, covered: { statements: 0, branches: 0, functions: 0, lines: 0 } } const fileSummaries = {} for (const [filename, file] of Object.entries(coverageData)) { const fileSummary = (fileSummaries[filename] = summarizeFileCoverage(file)) summary.total.statements += fileSummary.total.statements summary.covered.statements += fileSummary.covered.statements summary.total.branches += fileSummary.total.branches summary.covered.branches += fileSummary.covered.branches summary.total.functions += fileSummary.total.functions summary.covered.functions += fileSummary.covered.functions summary.total.lines += fileSummary.total.lines summary.covered.lines += fileSummary.covered.lines } return { summary, fileSummaries } }