gitguide
Version:
AI-powered README generator for any project directory
83 lines ⢠4.14 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateReadme = generateReadme;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const chalk_1 = __importDefault(require("chalk"));
const ora_1 = __importDefault(require("ora"));
const inquirer_1 = __importDefault(require("inquirer"));
const directoryAnalyzer_1 = require("../services/directoryAnalyzer");
const geminiService_1 = require("../services/geminiService");
const config_1 = require("../utils/config");
async function generateReadme(options) {
const targetDir = path_1.default.resolve(options.directory);
const outputPath = path_1.default.join(targetDir, options.output);
// Verify directory exists
if (!await fs_extra_1.default.pathExists(targetDir)) {
console.error(chalk_1.default.red(`ā Directory not found: ${targetDir}`));
process.exit(1);
}
// Check if README already exists
if (await fs_extra_1.default.pathExists(outputPath) && !options.force) {
const { shouldOverwrite } = await inquirer_1.default.prompt([
{
type: 'confirm',
name: 'shouldOverwrite',
message: `${options.output} already exists. Overwrite?`,
default: false
}
]);
if (!shouldOverwrite) {
console.log(chalk_1.default.blue('ā¹ļø Operation cancelled.'));
return;
}
}
console.log(chalk_1.default.blue.bold('\nš GitGuide - Generating README\n'));
console.log(chalk_1.default.white('Target directory:'), chalk_1.default.cyan(targetDir));
console.log(chalk_1.default.white('Output file:'), chalk_1.default.cyan(outputPath));
let spinner = (0, ora_1.default)('Analyzing directory structure...').start();
try {
// Analyze directory
const analyzer = new directoryAnalyzer_1.DirectoryAnalyzer();
const projectData = await analyzer.analyzeDirectory(targetDir);
spinner.succeed('Directory analysis complete');
console.log(chalk_1.default.gray(`Found ${projectData.files.length} files across ${projectData.structure.directories} directories`));
// Generate README
spinner = (0, ora_1.default)('Generating README with AI...').start();
const config = await (0, config_1.getConfig)();
const geminiService = new geminiService_1.GeminiService(config.apiKey);
const readme = await geminiService.generateReadme(projectData);
spinner.succeed('README content generated');
// Save README
spinner = (0, ora_1.default)(`Saving ${options.output}...`).start();
await fs_extra_1.default.writeFile(outputPath, readme.content, 'utf8');
spinner.succeed(`README saved as ${options.output}`);
console.log(chalk_1.default.green('\nā
README generated successfully!'));
console.log(chalk_1.default.blue('š Location:'), chalk_1.default.cyan(outputPath));
console.log(chalk_1.default.blue('š Sections:'), chalk_1.default.gray(readme.sections.join(', ')));
// Offer to open the file
const { shouldOpen } = await inquirer_1.default.prompt([
{
type: 'confirm',
name: 'shouldOpen',
message: 'Would you like to view the generated README?',
default: true
}
]);
if (shouldOpen) {
const content = await fs_extra_1.default.readFile(outputPath, 'utf8');
console.log(chalk_1.default.blue('\nš Generated README Preview:\n'));
console.log(chalk_1.default.gray('ā'.repeat(80)));
console.log(content.slice(0, 500) + (content.length > 500 ? '\n...(truncated)' : ''));
console.log(chalk_1.default.gray('ā'.repeat(80)));
}
}
catch (error) {
spinner.fail('Failed to generate README');
throw error;
}
}
//# sourceMappingURL=generate.js.map