sonar-js-coverage-convertor
Version:
Convert Istanbul coverage reports to SonarQube Generic Data format for Polymer app usage
4 lines • 1.29 kB
JavaScript
;const{Builder}=require("xml2js");module.exports=jsObjContent=>{const reportStruct=getReportStruct();const reportXml=`<coverage version="1">
${reportStruct}
</coverage>`;return reportXml;function getReportStruct(){const jsCoverageData=jsObjContent.coverage.project;try{return jsCoverageData.find(project=>project.metrics).metrics.find(metric=>metric.package).package.map(pkg=>pkg.file).map(mapReportStruct).map(buildXmlFromObj).join("\n")}catch(err){console.error("Error creating coverage \n\t",err,"\ntrying again");try{return jsCoverageData.find(project=>project.package).package.map(pkg=>pkg.file).map(mapReportStruct).map(buildXmlFromObj).join("\n")}catch(err){throw err}}}function buildXmlFromObj(objForXml){return new Builder({headless:true,explicitRoot:false}).buildObject(objForXml)}function mapReportStruct(srcObj){srcObj=srcObj[0];return{file:{$:{path:srcObj.$.path},lineToCover:srcObj.line.map(line=>{line=line.$;const lineObj={$:{lineNumber:line.num,covered:!!parseInt(line.count)}};if(line.type==="cond"){let totalLinesToCover=parseInt(line.truecount)+parseInt(line.falsecount,10);let linesCovered=totalLinesToCover-parseInt(line.truecount);lineObj.$.branchesToCover=totalLinesToCover;lineObj.$.coveredBranches=linesCovered}return lineObj})}}}};