UNPKG

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
"use strict"; 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); }