forked from patryk-zielinski93/sdj-api
-
Notifications
You must be signed in to change notification settings - Fork 2
/
coverage.js
64 lines (52 loc) · 1.43 KB
/
coverage.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const fs = require('fs-extra');
const glob = require('glob');
const { createReporter } = require('istanbul-api');
const istanbulCoverage = require('istanbul-lib-coverage');
const reporter = createReporter();
/* [ Configuration ] */
const rootDir = './coverage';
const reportOut = './coverage';
const normalizeJestCoverage = (obj) => {
const result = { ...obj };
Object.entries(result)
.filter(([k, v]) => v.data)
.forEach(([k, v]) => {
result[k] = v.data;
});
return result;
};
const mergeAllReports = (coverageMap, reports) => {
if (Array.isArray(reports) === false) {
return;
}
reports.forEach((reportFile) => {
const coverageReport = fs.readJSONSync(reportFile);
coverageMap.merge(normalizeJestCoverage(coverageReport));
});
};
const findAllCoverageReports = (path, callback) => {
glob(path, {}, (err, reports) => {
callback(reports, err);
});
};
const generateReport = (coverageMap, types) => {
reporter.dir = reportOut;
reporter.addAll(types || ['html', 'text']);
reporter.write(coverageMap);
};
async function main() {
const coverageMap = istanbulCoverage.createCoverageMap({});
findAllCoverageReports(
rootDir + '/**/coverage-final.json',
(reports, err) => {
if (Array.isArray(reports)) {
mergeAllReports(coverageMap, reports);
generateReport(coverageMap, ['lcov']);
}
}
);
}
main().catch((err) => {
console.error(err);
process.exit(1);
});