UNPKG

flow-coverage-report

Version:

Generate an HTML report of the flow coverage data

277 lines (232 loc) 12.3 kB
'use strict'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _path = _interopRequireDefault(require("path")); var _react = _interopRequireDefault(require("react")); var _server = _interopRequireDefault(require("react-dom/server")); var _mkdirp = _interopRequireDefault(require("mkdirp")); var _promisified = require("./promisified"); var _htmlReportPage = require("./components/html-report-page"); var baseSemanticAssets = ['themes', 'default', 'assets']; var assetsList = ['jquery-3.1.0.min.js', 'semantic.min.js', 'semantic.min.css', 'semantic-tablesort.js', 'index.js', 'codemirror.js', 'codemirror.css', 'codemirror-javascript-mode.js', 'codemirror-annotatescrollbar-addon.js', 'codemirror-simplescrollbars-addon.js', 'codemirror-simplescrollbars-addon.css', 'flow-highlight-source.js', 'flow-highlight-source.css', 'flow-coverage-report.css'].concat([['images', 'flags.png'], ['fonts', 'icons.eot'], ['fonts', 'icons.otf'], ['fonts', 'icons.svg'], ['fonts', 'icons.ttf'], ['fonts', 'icons.woff'], ['fonts', 'icons.woff2']].map(function (element) { return _path["default"].join.apply(null, baseSemanticAssets.concat(element)); })); function copyAsset(_x, _x2) { return _copyAsset.apply(this, arguments); } function _copyAsset() { _copyAsset = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(outputDir, assetName) { var srcfileReady, createDestDir, destFileWritten, _yield$Promise$all, _yield$Promise$all2, srcFileData; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: destFileWritten = function _destFileWritten(data) { return (0, _promisified.writeFile)(_path["default"].join(outputDir, 'assets', assetName), data); }; srcfileReady = (0, _promisified.readFile)(_path["default"].join(__dirname, '..', '..', 'assets', assetName)); createDestDir = (0, _mkdirp["default"])(_path["default"].join(outputDir, 'assets', _path["default"].dirname(assetName))); _context.next = 5; return Promise.all([srcfileReady, createDestDir]); case 5: _yield$Promise$all = _context.sent; _yield$Promise$all2 = (0, _slicedToArray2["default"])(_yield$Promise$all, 1); srcFileData = _yield$Promise$all2[0]; return _context.abrupt("return", destFileWritten(srcFileData)); case 9: case "end": return _context.stop(); } } }, _callee); })); return _copyAsset.apply(this, arguments); } function copyAssets(outputDir /* : string */ ) { return Promise.all(assetsList.map(copyAsset.bind(null, outputDir))); } function renderHTMLReport(_x3) { return _renderHTMLReport.apply(this, arguments); } function _renderHTMLReport() { _renderHTMLReport = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(opt /* : Object */ ) { var relativeToFilename, prefixAssets, summaryReportContent, _summaryReportContent, sourceReportContent, _sourceReportContent, waitForReportContent, result, reportFilePath, reportFileContent; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _sourceReportContent = function _sourceReportContent3() { _sourceReportContent = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() { var srcPath, dirName, toRelative, buff, reportFileContent, reportFilePath; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: srcPath = _path["default"].join(opt.projectDir, opt.filename); dirName = _path["default"].dirname(opt.filename); toRelative = relativeToFilename.bind(null, 'sourcefiles'); _context3.next = 5; return (0, _mkdirp["default"])(_path["default"].join(opt.outputDir, 'sourcefiles', dirName)); case 5: _context3.next = 7; return (0, _promisified.readFile)(srcPath); case 7: buff = _context3.sent; reportFileContent = '<!DOCTYPE html>\n' + _server["default"].renderToStaticMarkup( /*#__PURE__*/_react["default"].createElement(_htmlReportPage.HTMLReportSourceFilePage, { htmlTemplateOptions: opt.htmlTemplateOptions, coverageGeneratedAt: opt.coverageGeneratedAt, coverageSummaryData: opt.coverageSummaryData, coverageData: opt.coverageData, fileName: opt.filename, fileContent: buff, summaryRelLink: toRelative('index.html'), threshold: opt.threshold, assets: { css: ['semantic.min.css', 'codemirror.css', 'flow-highlight-source.css', 'flow-coverage-report.css', 'codemirror-simplescrollbars-addon.css'].map(prefixAssets).map(toRelative), js: ['jquery-3.1.0.min.js', 'semantic.min.js', 'semantic-tablesort.js', 'codemirror.js', 'codemirror-javascript-mode.js', 'codemirror-annotatescrollbar-addon.js', 'codemirror-simplescrollbars-addon.js', 'flow-highlight-source.js', 'index.js'].map(prefixAssets).map(toRelative) } })); reportFilePath = _path["default"].join(opt.outputDir, 'sourcefiles', opt.filename) + '.html'; return _context3.abrupt("return", { reportFilePath: reportFilePath, reportFileContent: reportFileContent }); case 11: case "end": return _context3.stop(); } } }, _callee3); })); return _sourceReportContent.apply(this, arguments); }; sourceReportContent = function _sourceReportContent2() { return _sourceReportContent.apply(this, arguments); }; _summaryReportContent = function _summaryReportContent3() { _summaryReportContent = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var toRelative, reportFilePath, reportFileContent; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: toRelative = relativeToFilename.bind(null, ''); reportFilePath = _path["default"].join(opt.outputDir, 'index.html'); reportFileContent = '<!DOCTYPE html>\n' + _server["default"].renderToStaticMarkup( /*#__PURE__*/_react["default"].createElement(_htmlReportPage.HTMLReportSummaryPage, { htmlTemplateOptions: opt.htmlTemplateOptions, coverageGeneratedAt: opt.coverageGeneratedAt, coverageSummaryData: opt.coverageSummaryData, assets: { css: ['semantic.min.css', 'flow-coverage-report.css'].map(prefixAssets).map(toRelative), js: ['jquery-3.1.0.min.js', 'semantic.min.js', 'semantic-tablesort.js', 'index.js'].map(prefixAssets).map(toRelative) } })); return _context2.abrupt("return", { reportFilePath: reportFilePath, reportFileContent: reportFileContent }); case 4: case "end": return _context2.stop(); } } }, _callee2); })); return _summaryReportContent.apply(this, arguments); }; summaryReportContent = function _summaryReportContent2() { return _summaryReportContent.apply(this, arguments); }; prefixAssets = function _prefixAssets(filePath) { return _path["default"].join('assets', filePath); }; relativeToFilename = function _relativeToFilename(prefixDir, dest) { return _path["default"].relative(_path["default"].join(prefixDir, _path["default"].dirname(opt.filename || '')), dest); }; if (!(opt.filename && opt.filename.includes('..'))) { _context4.next = 8; break; } throw new Error('filename is not relative to the projectDir: ' + [opt.projectDir, opt.filename].join(' - ')); case 8: _context4.t0 = opt.type; _context4.next = _context4.t0 === 'summary' ? 11 : _context4.t0 === 'sourcefile' ? 13 : 15; break; case 11: waitForReportContent = summaryReportContent(); return _context4.abrupt("break", 16); case 13: waitForReportContent = sourceReportContent(); return _context4.abrupt("break", 16); case 15: throw new Error('Unknown report type: ' + opt.type); case 16: _context4.next = 18; return waitForReportContent; case 18: result = _context4.sent; reportFilePath = result.reportFilePath, reportFileContent = result.reportFileContent; _context4.next = 22; return (0, _mkdirp["default"])(_path["default"].dirname(reportFilePath)); case 22: _context4.next = 24; return (0, _promisified.writeFile)(reportFilePath, Buffer.from(reportFileContent)); case 24: case "end": return _context4.stop(); } } }, _callee4); })); return _renderHTMLReport.apply(this, arguments); } function generateFlowCoverageReportHTML(coverageSummaryData, options) { var projectDir = options.projectDir; var outputDir = options.outputDir; if (!outputDir) { throw new Error('Unexpected empty outputDir option'); } var coverageGeneratedAt = coverageSummaryData.generatedAt; var generateSummary = renderHTMLReport({ type: 'summary', filename: null, htmlTemplateOptions: options.htmlTemplateOptions, coverageSummaryData: coverageSummaryData, coverageGeneratedAt: coverageGeneratedAt, projectDir: projectDir, outputDir: outputDir }); var waitForCopyAssets = copyAssets(outputDir); var generateSourceFiles = Object.keys(coverageSummaryData.files).map(function (filename) { var coverageData = coverageSummaryData.files[filename]; return renderHTMLReport({ type: 'sourcefile', coverageGeneratedAt: coverageGeneratedAt, htmlTemplateOptions: options.htmlTemplateOptions, coverageSummaryData: coverageSummaryData, projectDir: projectDir, filename: filename, coverageData: coverageData, outputDir: outputDir }); }); return Promise.all([waitForCopyAssets, generateSummary].concat(generateSourceFiles)); } var ReportHtml = { assetsList: assetsList, render: renderHTMLReport, generate: generateFlowCoverageReportHTML }; var _default = ReportHtml; exports["default"] = _default; //# sourceMappingURL=report-html.js.map