readme-ranker
Version:
A CLI tool to analyze and rank README files for projects, providing actionable suggestions for improvement.
62 lines (61 loc) • 2.61 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.readFile = readFile;
exports.formatReport = formatReport;
exports.formatProgressBar = formatProgressBar;
exports.logMessage = logMessage;
const chalk_1 = __importDefault(require("chalk"));
function readFile(filePath) {
return new Promise((resolve, reject) => {
const fs = require('fs');
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
reject(err);
}
else {
resolve(data);
}
});
});
}
function formatReport(report) {
let output = '';
output += chalk_1.default.bold('Sections:\n');
for (const [section, info] of Object.entries(report.sections)) {
output += ` ${info.present ? chalk_1.default.green('[✔]') : chalk_1.default.red('[ ]')} ${chalk_1.default.cyan(section)}`;
if (!info.present && info.suggestion) {
output += chalk_1.default.yellow(` ← ${info.suggestion}`);
}
output += '\n';
}
output += chalk_1.default.bold('\nLength:\n');
output += ` ${report.length.score === 10 ? chalk_1.default.green('[✔]') : chalk_1.default.red('[ ]')} ${chalk_1.default.yellow(report.length.lines + ' lines')}`;
if (report.length.suggestion) {
output += chalk_1.default.yellow(` ← ${report.length.suggestion}`);
}
output += '\n';
output += chalk_1.default.bold('\nFormatting:\n');
output += ` ${report.formatting.score === 10 ? chalk_1.default.green('[✔]') : chalk_1.default.red('[ ]')} `;
output += `${chalk_1.default.magenta('Headings')}: ${report.formatting.headings}, ${chalk_1.default.magenta('Code Blocks')}: ${report.formatting.codeBlocks}`;
if (report.formatting.suggestion) {
output += chalk_1.default.yellow(` ← ${report.formatting.suggestion}`);
}
output += '\n';
return output;
}
/**
* Returns a colored progress bar and percentage string.
*/
function formatProgressBar(score, maxScore) {
const percent = Math.round((score / maxScore) * 100);
const barLength = 30;
const filledLength = Math.round((percent / 100) * barLength);
const bar = chalk_1.default.green('█').repeat(filledLength) + chalk_1.default.gray('░').repeat(barLength - filledLength);
return `${chalk_1.default.bold('Score:')} ${chalk_1.default.cyan(percent + '%')} ${bar}`;
}
function logMessage(message) {
console.log(message);
}