UNPKG

gitguide

Version:

AI-powered README generator for any project directory

83 lines • 4.14 kB
"use strict"; 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