apex-code-coverage-transformer
Version:
Transform Salesforce Apex code coverage JSONs into other formats accepted by SonarQube, GitHub, GitLab, Azure, Bitbucket, etc.
66 lines • 2.01 kB
JavaScript
;
import { BaseHandler } from './BaseHandler.js';
import { HandlerRegistry } from './HandlerRegistry.js';
/**
* Handler for generating Istanbul/NYC JSON coverage reports.
*
* Istanbul is the most widely-used JavaScript code coverage tool.
* This format is compatible with NYC, Codecov, and many other tools.
*
* Compatible with:
* - Istanbul/NYC
* - Codecov
* - Coveralls
* - Node.js coverage tools
*
* @see https://istanbul.js.org/
*/
export class IstanbulCoverageHandler extends BaseHandler {
coverageMap = {};
constructor() {
super();
}
processFile(filePath, fileName, lines) {
const statementMap = {};
const s = {};
const lineCoverage = {};
for (const [lineNumber, hits] of Object.entries(lines)) {
const line = Number(lineNumber);
lineCoverage[lineNumber] = hits;
statementMap[lineNumber] = {
start: { line, column: 0 },
end: { line, column: 0 },
};
s[lineNumber] = hits;
}
const coverageFile = {
path: filePath,
statementMap,
fnMap: {},
branchMap: {},
s,
f: {},
b: {},
l: lineCoverage,
};
this.coverageMap[filePath] = coverageFile;
}
finalize() {
// Sort coverage map by file path for deterministic output
const sortedKeys = Object.keys(this.coverageMap).sort();
const sortedMap = {};
for (const key of sortedKeys) {
sortedMap[key] = this.coverageMap[key];
}
return sortedMap;
}
}
// Self-register this handler
HandlerRegistry.register({
name: 'json',
description: 'Istanbul JSON format for Node.js and JavaScript tools',
fileExtension: '.json',
handler: () => new IstanbulCoverageHandler(),
compatibleWith: ['Istanbul/NYC', 'Codecov', 'Coveralls', 'Node.js Tools'],
});
//# sourceMappingURL=istanbulJson.js.map