next-api-analyzer
Version:
Minimal, efficient Next.js API analyzer with Postman-ready testing guides for security, performance, and maintainability
3 lines (2 loc) • 2.08 kB
JavaScript
import{a as c,b as o,c as a,d as m}from"../chunk-X2P5XVDG.mjs";import{Command as f}from"commander";import p from"path";import n from"chalk";var s=new f;s.name("next-api-analyzer").description("Next.js API routes analyzer").version("4.0.1");s.command("analyze").description("Analyze API routes").option("-d, --dir <directory>","API directory","src/app/api").option("-o, --output <file>","Output file","./api-analysis-report.md").option("--json","Output as JSON").option("--security","Security-focused analysis").option("--performance","Performance-focused analysis").action(async e=>{let r=Date.now();try{o.info("\u{1F680} Starting API analysis...");let i={...c,apiDir:e.dir,outputDir:p.dirname(e.output)};e.security&&(i.enableSecurityAnalysis=!0,i.enablePerformanceAnalysis=!1),e.performance&&(i.enablePerformanceAnalysis=!0,i.enableSecurityAnalysis=!1);let l=new m(i),t=await l.analyzeRoutes();if(o.info("\u{1F4CA} Analysis Summary:"),console.log(n.cyan(" Routes:"),t.summary.totalRoutes),console.log(n.green(" Security Score:"),`${t.summary.securityScore.toFixed(1)}%`),console.log(n.blue(" Performance Score:"),`${t.summary.performanceScore.toFixed(1)}%`),console.log(n.magenta(" Maintainability Score:"),`${t.summary.maintainabilityScore.toFixed(1)}%`),console.log(n.yellow(" Recommendations:"),t.recommendations.length),e.json)await a.writeJsonFile(e.output.replace(/\.md$/,".json"),t);else{let y=l.generateReport(t);await a.writeFile(e.output,y)}let u=Date.now()-r;o.success(`\u2705 Analysis complete in ${u}ms! Report saved to: ${e.output}`)}catch(i){o.error("Analysis failed:",i),process.exit(1)}});s.command("init").description("Initialize configuration file").option("-f, --force","Overwrite existing configuration").action(async e=>{try{let r="api-analyzer.config.json";if(await a.fileExists(r)&&!e.force){o.warn("Configuration file already exists. Use --force to overwrite.");return}await a.writeJsonFile(r,c),o.success(`\u2705 Configuration file created: ${r}`)}catch(r){o.error("Failed to create configuration:",r),process.exit(1)}});s.parse();