cdp-lib
Version:
Contains npm modules used primarily by cdp boilerplate generator.
85 lines (72 loc) • 2.77 kB
JavaScript
/* eslint-env node, es6 */
;
const path = require('path');
const fs = require('fs');
const NYC = require('nyc');
const convert = require('convert-source-map');
const config = require('../project.config');
const BUILT_DIR = (() => {
switch (config.target.type) {
case 'classical-module':
return path.join(__dirname, '..', config.dir.src, config.dir.script);
default:
return path.join(__dirname, '..', config.dir.built);
}
})();
const COVERAGE_PATH = path.join(__dirname, '..', config.dir.doc, 'reports/coverage', 'coverage.json');
const coverage = require(COVERAGE_PATH);
function main() {
const nyc = new NYC();
const detectMapFile = (srcPath) => {
let map;
try {
if (fs.existsSync(srcPath + '.map')) {
map = JSON.parse(fs.readFileSync(srcPath + '.map').toString());
} else {
map = convert.fromComment(fs.readFileSync(srcPath).toString()).toObject();
}
} catch (error) {
console.log(' SKIPPED: cannot remap for ' + path.basename(srcPath) + `.`);
return;
}
// restore namespace to path
const prefix = `../${config.dir.src}/` + (config.dir.script ? `${config.dir.script}/` : '');
for (let i = 0, n = map.sources.length; i < n; i++) {
const match = map.sources[i].match(/(^[a-zA-Z0-9/@._-]+:\/\/\/)([a-zA-Z0-9/@._-]+$)/);
if (match && match[2]) {
map.sources[i] = prefix + match[2];
}
}
return map;
};
const trimExternal = (cov) => {
if (config.dir.external) {
for (let file in cov) {
if (cov.hasOwnProperty(file)) {
const regexp_external = new RegExp(config.dir.external, 'g');
if (regexp_external.test(file) || /webpack/g.test(file)) {
delete cov[file];
}
}
}
}
return cov;
};
console.log('remap coverage info...');
let rebuild = {};
for (let file in coverage) {
if (coverage.hasOwnProperty(file)) {
console.log(' processing... : ' + file);
const absPath = path.join(BUILT_DIR, file);
rebuild[absPath] = coverage[file];
rebuild[absPath].path = absPath;
rebuild[absPath].inputSourceMap = detectMapFile(absPath);
if (null == rebuild[absPath].inputSourceMap) {
delete rebuild[absPath];
}
}
}
rebuild = trimExternal(nyc.sourceMaps.remapCoverage(rebuild));
fs.writeFileSync(COVERAGE_PATH, JSON.stringify(rebuild, null, 4));
}
main();