UNPKG

sonar-js-coverage-convertor

Version:

Convert Istanbul coverage reports to SonarQube Generic Data format for Polymer app usage

4 lines 1.29 kB
#!/usr/bin/env node "use strict";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})}}}};