coverage-istanbul
Advanced tools
Comparing version
155
lib/index.js
@@ -1,82 +0,17 @@ | ||
'use strict'; | ||
var fs = require('fs'); | ||
var istanbul = require('istanbul'); | ||
var glob = require('glob'); | ||
var libCoverage = require('istanbul-lib-coverage'); | ||
var mapStore = require('istanbul-lib-source-maps').createSourceMapStore({}); | ||
function getTreeSummary(collector) { | ||
var summarizer = new istanbul.TreeSummarizer(); | ||
collector.files().forEach(function (key) { | ||
summarizer.addFileCoverageSummary(key, istanbul.utils.summarizeFileCoverage(collector.fileCoverageFor(key))); | ||
}); | ||
return summarizer.getTreeSummary(); | ||
} | ||
function getPathMap(treeSummary) { | ||
var ret = {}; | ||
function walker(node) { | ||
ret[node.fullPath()] = node; | ||
node.children.forEach(function (child) { | ||
walker(child); | ||
}); | ||
} | ||
walker(treeSummary.root); | ||
return ret; | ||
} | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createE2ECoverage = void 0; | ||
const fs_1 = __importDefault(require("fs")); | ||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment | ||
// @ts-ignore | ||
const istanbul_1 = __importDefault(require("istanbul")); | ||
const glob_1 = __importDefault(require("glob")); | ||
const istanbul_lib_coverage_1 = __importDefault(require("istanbul-lib-coverage")); | ||
const istanbul_lib_source_maps_1 = __importDefault(require("istanbul-lib-source-maps")); | ||
const util_1 = require("./util"); | ||
const mapStore = istanbul_lib_source_maps_1.default.createSourceMapStore({}); | ||
/** | ||
* 合并不同的覆盖率文件,并生成新的结果 | ||
* | ||
* @param {Object} obj 要追加的覆盖率信息 | ||
* @param {Object} coverage 历史累积的覆盖率信息 | ||
* @return {Object} 新累积的覆盖率信息 | ||
*/ | ||
function mergeClientCoverage(obj) { | ||
var coverage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
if (!obj) { | ||
return; | ||
} | ||
Object.keys(obj).forEach(function (filePath) { | ||
var original = coverage[filePath]; | ||
var existResult = obj[filePath]; | ||
var result = void 0; | ||
if (original) { | ||
result = istanbul.utils.mergeFileCoverage(original, existResult); | ||
} else { | ||
result = existResult; | ||
} | ||
coverage[filePath] = result; | ||
}); | ||
return coverage; | ||
} | ||
function getCoverageInfo(collector) { | ||
var treeSummary = getTreeSummary(collector); | ||
var pathMap = getPathMap(treeSummary); | ||
var filePath = treeSummary.root.fullPath(); | ||
var outputNode = pathMap[filePath]; | ||
return { | ||
lines: outputNode.metrics.lines.pct, | ||
statements: outputNode.metrics.statements.pct, | ||
functions: outputNode.metrics.functions.pct, | ||
branches: outputNode.metrics.branches.pct | ||
}; | ||
} | ||
/** | ||
* 生成覆盖率结果 | ||
@@ -88,11 +23,8 @@ * | ||
*/ | ||
function createE2ECoverage(globPattern) { | ||
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | ||
return new Promise(function (resolve, reject) { | ||
var collector = new istanbul.Collector(); | ||
var coverage = void 0; | ||
function createE2ECoverage(globPattern, opts) { | ||
return new Promise((resolve, reject) => { | ||
const collector = new istanbul_1.default.Collector(); | ||
let coverage; | ||
// options is optional | ||
glob(globPattern, {}, function (err, files) { | ||
glob_1.default(globPattern, {}, function (err, files) { | ||
// console.log(files); | ||
@@ -102,33 +34,30 @@ if (err) { | ||
} | ||
// 如果没有过滤出文件,则返回错误 | ||
if (!files || !files.length) { | ||
return reject(new Error('Not exist files by pattern=' + globPattern)); | ||
return reject(new Error(`Not exist files by pattern=${globPattern}`)); | ||
} | ||
// 合并不同的覆盖率生产物 | ||
files.forEach(function (file) { | ||
var fileData = JSON.parse(fs.readFileSync(file)); | ||
coverage = mergeClientCoverage(fileData, coverage); | ||
files.forEach(file => { | ||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment | ||
// @ts-ignore | ||
const fileData = JSON.parse(fs_1.default.readFileSync(file)); | ||
coverage = util_1.mergeClientCoverage(fileData, coverage); | ||
}); | ||
// console.log(coverage) | ||
var coverageMap = libCoverage.createCoverageMap(coverage); | ||
var transformed = mapStore.transformCoverage(coverageMap).then(function (result) { | ||
const coverageMap = istanbul_lib_coverage_1.default.createCoverageMap(coverage); | ||
const transformed = mapStore | ||
.transformCoverage(coverageMap) | ||
.then(result => { | ||
// console.log(JSON.stringify(transformed['map'])); | ||
// console.log(JSON.parse(JSON.stringify(result))) | ||
var final_coverage = JSON.parse(JSON.stringify(result)); | ||
const final_coverage = JSON.parse(JSON.stringify(result)); | ||
// 追加 | ||
collector.add(final_coverage); | ||
// 获取关键信息 | ||
var coverageInfo = getCoverageInfo(collector); | ||
const coverageInfo = util_1.getCoverageInfo(collector); | ||
// console.log(coverageInfo); | ||
// 输出产物 | ||
var sync = true; | ||
var reporter = new istanbul.Reporter(); | ||
reporter.dir = opts.dir || './coverage'; | ||
const sync = true; | ||
const reporter = new istanbul_1.default.Reporter(); | ||
reporter.dir = (opts === null || opts === void 0 ? void 0 : opts.dir) || './coverage'; | ||
reporter.add('lcovonly'); | ||
@@ -140,14 +69,16 @@ reporter.addAll(['clover', 'cobertura', 'html']); | ||
data: coverageInfo, | ||
reporterDir: reporter.dir | ||
reporterDir: reporter.dir, | ||
}); | ||
}); | ||
}).catch(function (err) { | ||
}) | ||
.catch(err => { | ||
reject(err); | ||
}); | ||
// console.log(transformed) | ||
if (process.env.DEBUG) { | ||
console.log('--', typeof transformed); | ||
} | ||
}); | ||
}); | ||
} | ||
module.exports = { | ||
createE2ECoverage: createE2ECoverage | ||
}; | ||
exports.createE2ECoverage = createE2ECoverage; |
{ | ||
"name": "coverage-istanbul", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "istanbul tools for test coverage", | ||
@@ -8,3 +8,7 @@ "main": "lib/index.js", | ||
"prepublishOnly": "npm run build", | ||
"build": "babel ./src --out-dir ./lib" | ||
"build": "tsc -d", | ||
"test": "npm run test:unit", | ||
"test:unit": "mocha 'test/**/*.test.{ts,tsx}'", | ||
"test:cover": "nyc npm run test:unit", | ||
"lint": "eslint . --ext .ts" | ||
}, | ||
@@ -26,2 +30,3 @@ "repository": { | ||
"dependencies": { | ||
"fs-extra": "^9.0.1", | ||
"glob": "^7.1.6", | ||
@@ -34,6 +39,22 @@ "istanbul": "^0.4.5", | ||
"devDependencies": { | ||
"babel-cli": "^6.26.0", | ||
"babel-core": "^6.26.3", | ||
"babel-preset-env": "^1.7.0" | ||
"@babel/types": "^7.10.2", | ||
"@types/chai": "^4.2.12", | ||
"@types/expect": "^24.3.0", | ||
"@types/fs-extra": "^9.0.1", | ||
"@types/glob": "^7.1.1", | ||
"@types/istanbul-lib-coverage": "^2.0.3", | ||
"@types/istanbul-lib-source-maps": "^4.0.1", | ||
"@types/lodash": "^4.14.153", | ||
"@types/mocha": "^8.0.3", | ||
"@types/node": "^14.0.5", | ||
"@typescript-eslint/eslint-plugin": "^3.7.0", | ||
"@typescript-eslint/parser": "^3.7.0", | ||
"chai": "^4.2.0", | ||
"eslint": "^7.5.0", | ||
"mocha": "^8.1.3", | ||
"nyc": "^15.1.0", | ||
"prettier": "^2.0.5", | ||
"ts-node": "^9.0.0", | ||
"typescript": "^3.9.3" | ||
} | ||
} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
176701
1501.57%51
750%1577
557.08%6
20%19
533.33%1
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added