flow-coverage-report
Version:
Generate an HTML report of the flow coverage data
146 lines (109 loc) • 5.33 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = generateFlowCoverageReport;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _path = _interopRequireDefault(require("path"));
var _config = require("./cli/config");
var _flow = require("./flow");
var _promisified = require("./promisified");
var _reportHtml = _interopRequireDefault(require("./report-html"));
var _reportBadge = _interopRequireDefault(require("./report-badge"));
var _reportJson = _interopRequireDefault(require("./report-json"));
var _reportText = _interopRequireDefault(require("./report-text"));
// User Scenarios
// 1. generate text report from a project dir
// 2. generate text report from a project dir and save json to file
// 3. generate text report from a project dir and html report
// 4. generate text/html report from a saved json file
// 5. set a custom threshold
// 6. set a custom output dir
// 7. usa a saved json file to compute coverage trend (and fail on negative trends)
function generateFlowCoverageReport(_x) {
return _generateFlowCoverageReport.apply(this, arguments);
}
function _generateFlowCoverageReport() {
_generateFlowCoverageReport = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(options) {
var projectDir, temporaryDirPath, coverageData, reportResults, reportTypes;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
// Apply defaults to options.
projectDir = options.projectDir;
if (!(process.env.VERBOSE && process.env.VERBOSE === 'DUMP_JSON')) {
_context.next = 6;
break;
}
_context.next = 4;
return (0, _promisified.withTmpDir)('flow-coverage-report');
case 4:
temporaryDirPath = _context.sent;
console.log("Verbose DUMP_JSON mode enabled (".concat(temporaryDirPath, ")"));
case 6:
options.flowCommandPath = options.flowCommandPath || 'flow';
options.flowCommandTimeout = options.flowCommandTimeout || _config.DEFAULT_FLOW_TIMEOUT; // Defaults to 15s
options.outputDir = options.outputDir || './flow-coverage';
options.outputDir = _path["default"].isAbsolute(options.outputDir) ? options.outputDir : _path["default"].resolve(_path["default"].join(projectDir, options.outputDir));
options.globIncludePatterns = options.globIncludePatterns || [];
options.globExcludePatterns = options.globExcludePatterns || [];
options.concurrentFiles = options.concurrentFiles || 1;
if (!Array.isArray(options.globExcludePatterns)) {
options.globExcludePatterns = [options.globExcludePatterns];
} // Apply validation checks.
if (projectDir) {
_context.next = 16;
break;
}
throw new TypeError('projectDir option is mandatory');
case 16:
if (!(options.globIncludePatterns.length === 0)) {
_context.next = 18;
break;
}
throw new TypeError('empty globIncludePatterns option');
case 18:
if (options.threshold) {
_context.next = 20;
break;
}
throw new TypeError('threshold option is mandatory');
case 20:
_context.next = 22;
return (0, _flow.collectFlowCoverage)(options, temporaryDirPath);
case 22:
coverageData = _context.sent;
reportResults = [];
reportTypes = options.reportTypes || ['text'];
if (reportTypes.includes('json')) {
reportResults.push(_reportJson["default"].generate(coverageData, options));
}
if (reportTypes.includes('text')) {
reportResults.push(_reportText["default"].generate(coverageData, options));
} // Run the badge reporter implicitly if the html report has been included.
if (reportTypes.includes('badge') || reportTypes.includes('html')) {
reportResults.push(_reportBadge["default"].generate(coverageData, options));
}
if (reportTypes.includes('html')) {
// eslint-disable-next-line promise/prefer-await-to-then
reportResults.push(_reportHtml["default"].generate(coverageData, options).then(function () {
console.log("View generated HTML Report at file://".concat(options.outputDir, "/index.html"));
}));
}
_context.next = 31;
return Promise.all(reportResults);
case 31:
return _context.abrupt("return", [coverageData, options]);
case 32:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _generateFlowCoverageReport.apply(this, arguments);
}
//# sourceMappingURL=index.js.map