UNPKG

api-scout

Version:

🔍 Automatically scout, discover and generate beautiful interactive API documentation from your codebase. Supports Express.js, NestJS, FastAPI, Spring Boot with interactive testing and security analysis.

75 lines (58 loc) 2.11 kB
const Scanner = require('./scanner'); const Generator = require('./generator'); const { loadConfig } = require('./utils/config'); const { detectFramework } = require('./utils/framework-detector'); class APIDocsGenerator { constructor(options = {}) { this.options = { input: process.cwd(), output: './docs-output', framework: 'all', template: 'swagger', includePrivate: false, exclude: [], ...options }; this.scanner = new Scanner(this.options); this.generator = new Generator(this.options); } async generate() { console.log('🔍 Scanning codebase...'); // Detect framework if not specified if (this.options.framework === 'all') { const detected = await detectFramework(this.options.input); console.log(`📝 Detected frameworks: ${detected.join(', ')}`); } // Scan for API endpoints const apiData = await this.scanner.scan(); console.log(`📊 Found ${apiData.endpoints.length} API endpoints`); // Generate documentation await this.generator.generate(apiData); console.log(`✅ Documentation generated at: ${this.options.output}`); return apiData; } async watch() { const chokidar = require('chokidar'); console.log(`👀 Watching for changes in: ${this.options.input}`); const watcher = chokidar.watch(this.options.input, { ignored: /(^|[\/\\])\../, // ignore dotfiles persistent: true }); let timeout; const debounceTime = this.options.debounce || 1000; watcher.on('change', (path) => { console.log(`🔄 File changed: ${path}`); clearTimeout(timeout); timeout = setTimeout(async () => { try { await this.generate(); console.log('🔄 Documentation updated'); } catch (error) { console.error('❌ Error updating documentation:', error.message); } }, debounceTime); }); return watcher; } } module.exports = APIDocsGenerator;