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
JavaScript
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;