UNPKG

esxdoc

Version:

Good Documentation Generator For JavaScript

69 lines (58 loc) 2.09 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _DocBuilder = require('./DocBuilder.js'); var _DocBuilder2 = _interopRequireDefault(_DocBuilder); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Coverage output builder class. */ class CoverageBuilder extends _DocBuilder2.default { /** * execute building output. * @param {function(coverage: CoverageObject, filePath: string)} callback - is called with coverage. * @param {function(badge: string, filePath: string)} badgeCallback - is called with coverage badge. */ exec(callback, badgeCallback) { const docs = this._find({ kind: ['class', 'method', 'member', 'get', 'set', 'constructor', 'function', 'variable'] }); const expectCount = docs.length; let actualCount = 0; const files = {}; for (const doc of docs) { const filePath = doc.longname.split('~')[0]; if (!files[filePath]) files[filePath] = { expectCount: 0, actualCount: 0, undocumentLines: [] }; files[filePath].expectCount++; if (doc.undocument) { files[filePath].undocumentLines.push(doc.lineNumber); } else { actualCount++; files[filePath].actualCount++; } } /* eslint-disable no-extra-parens */ const coveragePercent = expectCount === 0 ? 0 : Math.floor(10000 * actualCount / expectCount) / 100; const coverage = { coverage: `${ coveragePercent }%`, expectCount: expectCount, actualCount: actualCount, files: files }; callback(coverage, 'coverage.json'); // create badge const ratio = Math.floor(100 * actualCount / expectCount); let color; if (ratio < 50) { color = '#db654f'; } else if (ratio < 90) { color = '#dab226'; } else { color = '#4fc921'; } let badge = this._readTemplate('image/badge.svg'); badge = badge.replace(/@ratio@/g, `${ ratio }%`); badge = badge.replace(/@color@/g, color); badgeCallback(badge, 'badge.svg'); } } exports.default = CoverageBuilder;