ngcompass 0.1.2-beta → 0.1.3-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -166,8 +166,8 @@ export default defineConfig({
166
166
  | `--rule <id>` | Run one rule in isolation |
167
167
  | `--force` | Ignore cached results |
168
168
  | `-p, --profile <name>` | Run a named config profile |
169
+ | `--mode <mode>` | Performance mode: `eco`, `balanced`, or `turbo` |
169
170
  | `--max-workers <n>` | Limit worker threads |
170
- | `--type-aware-chunk-size <n>` | Tune type-aware batch size |
171
171
  | `--skip-type-check` | Skip rules that require TypeScript type checking |
172
172
 
173
173
  ## CI
package/dist/cli.cjs CHANGED
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
- 'use strict';var commander=require('commander'),reporters=require('@ngcompass/reporters'),config=require('@ngcompass/config'),D=require('path'),C=require('picocolors'),common=require('@ngcompass/common'),f=require('process'),cache=require('@ngcompass/cache'),rules=require('@ngcompass/rules'),engine=require('@ngcompass/engine'),planner=require('@ngcompass/planner'),scanner=require('@ngcompass/scanner');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var D__default=/*#__PURE__*/_interopDefault(D);var C__default=/*#__PURE__*/_interopDefault(C);var f__default=/*#__PURE__*/_interopDefault(f);var c=(o=1)=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h"),process.exit(o);};function G(o,r){o.command("init").description("Create a starter ngcompass configuration in the current project").option("-f, --force","Overwrite an existing configuration file").option("--cwd <path>","Project directory where the configuration will be created",process.cwd()).action(async e=>{try{let i=await config.initConfig({cwd:e.cwd,force:e.force});await reporters.getConfigReporter().renderInitResult(i),i.success||i.alreadyExists||c();}catch(i){console.error(i instanceof Error?i.message:String(i)),c();}});}var _=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],S=class{stream;timer=null;frameIndex=0;message="";isTTY;constructor(r){this.stream=r,this.isTTY=!!r.isTTY;}start(r){this.message=r,this.frameIndex=0,this.isTTY?(this.stream.write("\x1B[?25l"),this.render(),this.timer=setInterval(()=>this.render(),80)):this.stream.write(`${C__default.default.cyan("\u276F")} ${C__default.default.dim(r)}
3
- `);}writeLine(r){this.isTTY&&this.timer?(this.stream.write("\r\x1B[K"),this.stream.write(`${r}
2
+ 'use strict';var commander=require('commander'),reporters=require('@ngcompass/reporters'),config=require('@ngcompass/config'),L=require('path'),h=require('picocolors'),common=require('@ngcompass/common'),k=require('process'),cache=require('@ngcompass/cache'),rules=require('@ngcompass/rules'),engine=require('@ngcompass/engine'),planner=require('@ngcompass/planner'),scanner=require('@ngcompass/scanner');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var L__default=/*#__PURE__*/_interopDefault(L);var h__default=/*#__PURE__*/_interopDefault(h);var k__default=/*#__PURE__*/_interopDefault(k);var f=(t=1)=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h"),process.exit(t);};function ce(t,r){t.command("init").description("Create a starter ngcompass configuration in the current project").option("-f, --force","Overwrite an existing configuration file").option("--cwd <path>","Project directory where the configuration will be created",process.cwd()).action(async e=>{try{let o=await config.initConfig({cwd:e.cwd,force:e.force});await reporters.getConfigReporter().renderInitResult(o),o.success||o.alreadyExists||f();}catch(o){console.error(o instanceof Error?o.message:String(o)),f();}});}var le=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],j=class{stream;timer=null;frameIndex=0;message="";isTTY;constructor(r){this.stream=r,this.isTTY=!!r.isTTY;}start(r){this.message=r,this.frameIndex=0,this.isTTY?(this.stream.write("\x1B[?25l"),this.render(),this.timer=setInterval(()=>this.render(),80)):this.stream.write(`${h__default.default.cyan("\u276F")} ${h__default.default.dim(r)}
3
+ `);}update(r){this.message=r,this.isTTY&&this.timer&&this.render();}writeLine(r){this.isTTY&&this.timer?(this.stream.write("\r\x1B[K"),this.stream.write(`${r}
4
4
  `),this.render()):this.stream.write(`${r}
5
- `);}stop(){this.timer&&(clearInterval(this.timer),this.timer=null),this.isTTY&&(this.stream.write("\r\x1B[K"),this.stream.write("\x1B[?25h"));}render(){let r=C__default.default.cyan(_[this.frameIndex%_.length]);this.frameIndex++,this.stream.write(`\r${r} ${C__default.default.dim(this.message)}`);}};function K(o){return o==="ui"?"html":o??"console"}function V(o){return o<1e3?`${Math.max(0,Math.round(o))}ms`:`${(o/1e3).toFixed(1)}s`}function J(o,r){o.command("analyze").description("Analyze your project and report rule violations and architecture risks").option("-p, --profile <name>","Configuration profile to run").option("--force","Ignore cached results and re-run all checks").option("--format <fmt>","Reporter format: console | json | sarif | html | ui").option("--compact","Use compact, ESLint-style output").option("-q, --quiet","Show summary counts only, suppress violation details").option("--no-recommendation","Suppress fix recommendations from output").option("--output <path>","Output path for UI reports (default: ngcompass-report.html)").option("--rule <id>","Run only one rule (useful for debugging or focused checks)").option("--max-workers <n>","Cap the number of worker threads (lower = less memory, e.g. --max-workers 2)").option("--type-aware-chunk-size <n>","Files per type-aware chunk (default 400; lower = less peak memory)").option("--skip-type-check","Skip rules that require the TypeScript type checker (fastest, lowest memory)").action(async e=>{let i=performance.now(),n=reporters.getReporter(K(e.format),{compact:!!e.compact,outputPath:e.output,quiet:!!e.quiet,noRecommendation:e.recommendation===false}),t=r,a=0;try{var s;let p,k,E=await ke(e,r,n);if(!E){a=1;return}let{config:m}=E;t=cache.createRuntimeCache(m,f__default.default.cwd());let g=(function(d,I){if(d)return K(d);switch(I){case "json":return "json";case "sarif":return "sarif";case "html":return "html";default:return "console"}})(e.format,m.outputFormat);n=reporters.getReporter(g,{compact:!!e.compact,outputPath:e.output??m.outputPath,quiet:!!e.quiet,noRecommendation:e.recommendation===!1});let R=await Ee(m,e,t,n);if(!R){a=1;return}let B=await Re(m,e,n);if(!B){a=1;return}let u=await be(R,B,t,e,n,m);if(!u){a=1;return}let oe=g==="console"?f__default.default.stdout:f__default.default.stderr,F=new S(oe);F.start("Running analysis...");let ie=(function(d,I,ae){let A=new Map;for(let l of d.tasks.map(w=>w.filePath).filter(w=>typeof w=="string"&&w.length>0))A.set(l,(A.get(l)??0)+1);let U=new Map,M=new Set;return l=>{var w;if(M.has(l.filePath))return;let x=U.get(l.filePath),y=x?{filePath:l.filePath,taskCount:x.taskCount+l.taskCount,issueCount:x.issueCount+l.issueCount,errorCount:x.errorCount+l.errorCount,warningCount:x.warningCount+l.warningCount,duration:x.duration+l.duration}:l;U.set(l.filePath,y);let se=A.get(l.filePath)??y.taskCount;if(y.taskCount<se)return;M.add(l.filePath);let N=D__default.default.relative(ae,l.filePath)||l.filePath,W=y.issueCount>0,Y=W?C__default.default.red("\u276F"):C__default.default.green("\u276F"),q=W?C__default.default.red(V(y.duration)):C__default.default.green(V(y.duration));I(W?`${Y} ${C__default.default.red(N)} ${q} ${C__default.default.red((w=y.issueCount,`${w.toLocaleString()} issue${w===1?"":"s"}`))}`:`${Y} ${C__default.default.dim(N)} ${q}`);}})(u,d=>F.writeLine(d),f__default.default.cwd()),h=await Se(u,t,e,n,R,m,void 0,m.maxWorkers,ie);if(F.stop(),!h){a=1;return}let ne=performance.now()-i,O={scannedFiles:new Set([...u.tasks.map(d=>d.filePath),...(u.skippedTasks??[]).map(d=>d.filePath)]).size,discoveredFiles:R.length,totalFiles:h.stats.totalFiles,totalTasks:u.tasks.length+(u.skippedTasks?.length??0),cachedTasks:u.precomputedAnalysis?u.tasks.length:void 0,totalErrors:h.stats.totalErrors,totalWarnings:h.stats.totalWarnings,failOnSeverity:m.failOnSeverity,maxWarnings:m.maxWarnings,duration:ne};g==="console"&&n.summary(O),n.parseErrors(h.parseErrors),n.report(h.results),g!=="console"&&(n.step("\u276F Writing report..."),n.summary(O)),u.precomputedAnalysis||await Pe(h.results,t,e,n),s=h.stats,p=m.failOnSeverity??"error",k=m.maxWarnings??10,(s.totalErrors>0||p==="warn"&&s.totalWarnings>0||s.totalWarnings>k)&&(a=1);}catch(p){n.error(p),a=1;}finally{t&&t!==r&&await t.flush(),a!==0&&c(a);}});}async function ke(o,r,e){let i=performance.now();e.step("\u276F Loading configuration...");let n=await config.resolveConfig({profile:o.profile,cache:r,cwd:f__default.default.cwd()});if(!n.report.valid){let a=n.report.issues.map(s=>{let p=s.path?.join(".")||"root";return `[${s.severity.toUpperCase()}] ${p}: ${s.message}`});return e.error(Error(["Configuration validation failed",...a].join(`
6
- `))),null}if(!n.config)return e.error(Error("No configuration found")),null;let t=n.config.plugins;if(t&&t.length>0){e.step(`\u276F Loading ${t.length} plugin(s)...`);let a=f__default.default.cwd();await config.loadPlugins(t,a,rules.getGlobalRegistry()),e.info(`Loaded ${t.length} plugin(s)`);}return e.debug(`Config resolve: ${(performance.now()-i).toFixed(2)}ms`),{config:n.config}}async function Ee(o,r,e,i){let n=performance.now();i.step("\u276F Discovering files...");let t=await scanner.scan({rootDir:f__default.default.cwd(),include:o.include??[...common.DEFAULT_INCLUDE_PATTERNS],exclude:o.exclude??[],ignorePatterns:o.ignorePatterns,tsConfigPath:(function(a,s){if(!a?.project)return;let p=a.tsconfigRootDir?D__default.default.resolve(s,a.tsconfigRootDir):s;return D__default.default.resolve(p,a.project)})(o.parserOptions,f__default.default.cwd()),respectGitignore:true,debug:r.debug,cache:e});return t.ok?(i.info(`\u276F Found ${t.data.files.length} files in ${(performance.now()-n).toFixed(0)}ms`),i.debug(`File discovery: ${(performance.now()-n).toFixed(2)}ms`),t.data.files):(i.error(Error(`File discovery failed: ${t.error.message}`)),null)}async function Re(o,r,e){let i=performance.now();e.step("\u276F Loading rules...");let n=o;r.rule&&(e.info(`Filtering analysis to single rule: ${r.rule}`),n={...o,rules:{[r.rule]:"error"},extends:[]});let t=await rules.resolveRules(n);if(!t.ok)return e.error(Error(`Rule resolution failed: ${t.error.message}`)),null;let a=rules.getEnabledRules(t.data.rules);return e.info(`\u276F Loaded ${a.size} active rules in ${(performance.now()-i).toFixed(0)}ms`),e.debug(`Rule resolution: ${(performance.now()-i).toFixed(2)}ms`),a}async function be(o,r,e,i,n,t){let a=performance.now();n.step("\u276F Planning analysis...");let s=await planner.buildExecutionPlan({files:o,rules:r,rootDir:f__default.default.cwd(),cache:e,debug:i.debug,incremental:i.force?{forceRerun:true}:void 0,workerCount:t.maxWorkers,overrides:t.overrides});return s.ok?(s.data.precomputedAnalysis?n.info("\u276F Reused cached analysis plan"):n.info(`\u276F Prepared ${s.data.tasks.length.toLocaleString()} checks in ${(performance.now()-a).toFixed(0)}ms`),n.debug(`Plan build: ${(performance.now()-a).toFixed(2)}ms`),s.data):(n.error(Error(`Execution plan building failed: ${s.error.message}`)),null)}async function Se(o,r,e,i,n,t,a,s,p){let k=performance.now();engine.configureRuleExecutor(rules.executeBatchedNewEngineRules,rules.isNewEngineRule);let E=e.maxWorkers?parseInt(e.maxWorkers,10):void 0,m=e.typeAwareChunkSize?parseInt(e.typeAwareChunkSize,10):void 0,g=await engine.runAnalysis(o,{rootDir:f__default.default.cwd(),cache:r,debug:e.debug,files:n,maxWorkers:E??t?.maxWorkers,typeAwareChunkSize:m,skipTypeCheck:e.skipTypeCheck,parserOptions:t?.parserOptions,onProgress:a,onFileProgress:p});return g.ok?(i.debug(`Execution: ${(performance.now()-k).toFixed(2)}ms`),g.data):(i.error(Error(`Analysis failed: ${g.error.message}`)),null)}async function Pe(o,r,e,i){if(!r)return;let n=performance.now(),t=[];for(let a of o)a.taskId&&t.push([a.taskId,a]);t.length>0&&(await r.results.setMany(t),e.debug&&i.debug(`Saved ${t.length} results to cache (${(performance.now()-n).toFixed(2)}ms)`));}function Q(o,r){o.command("config").description("Inspect and validate ngcompass configuration").command("health").description("Run semantic validation checks for the active configuration").option("-p, --profile <name>","Configuration profile to validate").action(async e=>{try{let i=await config.validateConfig({cache:e.cache?r:void 0,profile:e.profile});await reporters.getConfigReporter().renderHealthReport(i.report),i.report.valid||c();}catch(i){let n=i instanceof Error?i.message:String(i);console.error(`Error: ${n}`),c();}});}function Z(o,r){let e=o.command("cache").description("Inspect and manage analysis cache data");e.command("clear").description("Clear cached data for one cache type or all cache types").option("-p, --profile <name>","Configuration profile used to resolve cache settings").option("--type <type>","Cache type to clear: ast | config | results | all","all").action(async i=>{let n=reporters.getCacheReporter();f__default.default.stdout.write(C__default.default.dim(` \u203A Clearing cache...
7
- `));let t=i.type,a=["ast","config","results","all"];a.includes(t)||(console.error(C__default.default.red(`Invalid cache type: ${t}. Must be one of: ${a.join(", ")}`)),c());try{let s=await j(r,{profile:i.profile,allowDisabled:!0});t==="all"?await s.clear():await s.clearType(t),n.renderClearResult(t);}catch(s){console.error(C__default.default.red("Error clearing cache:"),s),c();}}),e.command("info").description("Show cache status, size, and usage details").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async i=>{let n=reporters.getCacheReporter();try{let t=await j(r,{profile:i.profile,allowDisabled:!0}),a=await t.getInfo();n.renderCacheInfo(a);}catch(t){console.error(C__default.default.red("Error getting cache info:"),t),c();}}),e.command("path").description("Print the resolved cache directory path").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async i=>{let n=await j(r,{profile:i.profile,allowDisabled:true});f__default.default.stdout.write(`${n.getCachePath()}
8
- `);});}async function j(o,r={}){let e=r.cwd??f__default.default.cwd();try{let i=await config.resolveConfig({profile:r.profile,cache:o,cwd:e});return !i.report.valid||!i.config?o:cache.createRuntimeCache(i.config,e,{allowDisabled:r.allowDisabled})??o}catch{return o}}function ee(o){o.command("rules [ruleName]").description("Browse available rules or inspect details for a specific rule").option("--preset <name>","Filter by preset: recommended, strict, performance, reactivity, or all").action((r,e)=>{e.preset&&!rules.isBuiltinPreset(e.preset)&&(console.error(C__default.default.red(`Unknown preset: "${e.preset}".`)),console.error(C__default.default.dim("Available presets: recommended, strict, all, performance, reactivity")),c());let i=rules.getRuleListEntries(),n=reporters.getRulesReporter({preset:e.preset});if(r){let t=i.find(a=>a.name===r);if(!t){console.error(C__default.default.red(`Rule "${r}" not found.`)),console.error(C__default.default.dim("Run `ngcompass rules` to list available rules.")),c();return}n.renderSingleRule(t);}else n.render(i);});}function re(o,r){G(o),J(o,r),Q(o,r),Z(o,r),ee(o);}var v=()=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h");},te=false,$=async(o,r)=>{if(!te){if(te=true,v(),o)try{let e=new Promise(i=>setTimeout(i,1e4).unref());await Promise.race([o.flush(),e]);}catch{}process.exit(r);}};async function Ue(){let o=new commander.Command;o.name("ngcompass").description("Static analysis and architecture insights for Angular codebases.").version(common.PACKAGE_VERSION,"-V, --version","Display ngcompass version").option("--debug","Enable detailed debug logs across all modules").addHelpText("after",`
5
+ `);}stop(){this.timer&&(clearInterval(this.timer),this.timer=null),this.isTTY&&(this.stream.write("\r\x1B[K"),this.stream.write("\x1B[?25h"));}render(){let r=h__default.default.cyan(le[this.frameIndex%le.length]);this.frameIndex++,this.stream.write(`\r\x1B[K${r} ${h__default.default.dim(this.message)}`);}};var we={eco:{typeAwareConcurrency:1,typeAwareFileConcurrency:1,typeAwareChunkSize:100,typeAwareIsolation:"auto",typeAwareChunkStrategy:"dependency"},balanced:{typeAwareConcurrency:2,typeAwareFileConcurrency:2,typeAwareChunkSize:300,typeAwareIsolation:"auto",typeAwareChunkStrategy:"simple"},turbo:{typeAwareConcurrency:2,typeAwareFileConcurrency:4,typeAwareChunkSize:500,typeAwareIsolation:"off",typeAwareChunkStrategy:"simple"}},pe=Object.keys(we),me=["auto","process","off"],de=["dependency","simple"];function z(t,r){if(t===void 0)return;let e=Number(t);if(!Number.isInteger(e)||e<1)throw Error(`${r} must be a positive integer.`);return e}function fe(t){return t==="ui"?"html":t??"console"}function D(t){return t<1e3?`${Math.max(0,Math.round(t))}ms`:`${(t/1e3).toFixed(1)}s`}function ge(t,r){return `${t.toLocaleString()} ${r}${t===1?"":"s"}`}function he(t,r,e){return `Running analysis in ${t} mode: ${r.toLocaleString()}/${e.toLocaleString()} checks complete...`}function ye(t,r){t.command("analyze").description("Analyze your project and report rule violations and architecture risks").option("-p, --profile <name>","Configuration profile to run").option("--force","Ignore cached results and re-run all checks").option("--format <fmt>","Reporter format: console | json | sarif | html | ui").option("--compact","Use compact, ESLint-style output").option("-q, --quiet","Show summary counts only, suppress violation details").option("--no-recommendation","Suppress fix recommendations from output").option("--output <path>","Output path for UI reports (default: ngcompass-report.html)").option("--rule <id>","Run only one rule (useful for debugging or focused checks)").option("--mode <mode>","Performance mode: eco | balanced | turbo (default: balanced)","balanced").option("--max-workers <n>","Cap the number of worker threads (lower = less memory, e.g. --max-workers 2)").addOption(new commander.Option("--type-aware-chunk-size <n>","Files per type-aware chunk").hideHelp()).addOption(new commander.Option("--type-aware-concurrency <n>","Concurrent type-aware chunks").hideHelp()).addOption(new commander.Option("--type-aware-file-concurrency <n>","Concurrent files per type-aware chunk").hideHelp()).addOption(new commander.Option("--type-aware-isolation <mode>","Type-aware isolation: auto | process | off").hideHelp()).addOption(new commander.Option("--type-aware-chunk-strategy <mode>","Type-aware chunk ordering: dependency | simple").hideHelp()).option("--skip-type-check","Skip rules that require the TypeScript type checker (fastest, lowest memory)").action(async e=>{let o=performance.now(),a=reporters.getReporter(fe(e.format),{compact:!!e.compact,outputPath:e.output,quiet:!!e.quiet,noRecommendation:e.recommendation===false}),n=r,i=0;try{var l;let p,R,A,K,V,J,Q,X=await He(e,r,a);if(!X){i=1;return}let{config:w}=X,Z=(p=we[(function(u){let C=u??"balanced";if(!pe.includes(C))throw Error(`Invalid performance mode "${C}". Expected one of: ${pe.join(", ")}.`);return C})(e.mode)],R=z(e.maxWorkers,"--max-workers"),A=z(e.typeAwareChunkSize,"--type-aware-chunk-size"),K=z(e.typeAwareConcurrency,"--type-aware-concurrency"),V=z(e.typeAwareFileConcurrency,"--type-aware-file-concurrency"),{maxWorkers:R??w.maxWorkers,typeAwareChunkSize:A??p.typeAwareChunkSize,typeAwareConcurrency:K??p.typeAwareConcurrency,typeAwareFileConcurrency:V??p.typeAwareFileConcurrency,typeAwareIsolation:(function(u){if(u!==void 0){if(!me.includes(u))throw Error(`Invalid --type-aware-isolation "${u}". Expected one of: ${me.join(", ")}.`);return u}})(e.typeAwareIsolation)??p.typeAwareIsolation,typeAwareChunkStrategy:(function(u){if(u!==void 0){if(!de.includes(u))throw Error(`Invalid --type-aware-chunk-strategy "${u}". Expected one of: ${de.join(", ")}.`);return u}})(e.typeAwareChunkStrategy)??p.typeAwareChunkStrategy});n=cache.createRuntimeCache(w,k__default.default.cwd());let T=(function(u,C){if(u)return fe(u);switch(C){case "json":return "json";case "sarif":return "sarif";case "html":return "html";default:return "console"}})(e.format,w.outputFormat);a=reporters.getReporter(T,{compact:!!e.compact,outputPath:e.output??w.outputPath,quiet:!!e.quiet,noRecommendation:e.recommendation===!1});let I=await qe(w,e,n,a);if(!I){i=1;return}let ee=await Ge(w,e,a);if(!ee){i=1;return}let y=await Ke(I,ee,n,e,a,w,Z.maxWorkers);if(!y){i=1;return}let Ee=T==="console"?k__default.default.stdout:k__default.default.stderr,F=new j(Ee),Se=y.tasks.length+(y.skippedTasks?.length??0),re=e.mode??"balanced";F.start(he(re,0,Se));let be=(function(u,C,oe){let P=new Map,v=new Map;for(let m of u.tasks){let s=m.filePath;typeof s=="string"&&s.length!==0&&(m.needsTypeChecker||m.needsProjectContext?v.set(s,(v.get(s)??0)+1):P.set(s,(P.get(s)??0)+1));}let _=new Map,Te=new Map,ne=new Set,O=new Set,B=(m,s)=>{let c=m.get(s.filePath),g=c?{taskCount:c.taskCount+s.taskCount,issueCount:c.issueCount+s.issueCount,errorCount:c.errorCount+s.errorCount,warningCount:c.warningCount+s.warningCount,duration:c.duration+s.duration}:{taskCount:s.taskCount,issueCount:s.issueCount,errorCount:s.errorCount,warningCount:s.warningCount,duration:s.duration};return m.set(s.filePath,g),g},Y=(m,s)=>{if(O.has(m))return;O.add(m);let c=L__default.default.relative(oe,m)||m,g=s.issueCount>0,d=g?h__default.default.red("\u276F"):h__default.default.green("\u276F"),x=g?h__default.default.red(D(s.duration)):h__default.default.green(D(s.duration));C(g?`${d} ${h__default.default.red(c)} ${x} ${h__default.default.red(ge(s.issueCount,"issue"))}`:`${d} ${h__default.default.dim(c)} ${x}`);};return m=>{let s=m.filePath;if(!O.has(s))if(m.typeAware===!1){let c=B(_,m),g=P.get(s)??c.taskCount;if(c.taskCount<g)return;v.has(s)?((d,x)=>{if(ne.has(d)||O.has(d))return;ne.add(d);let ae=L__default.default.relative(oe,d)||d,U=x.issueCount>0,ie=U?h__default.default.red("\u276F"):h__default.default.green("\u276F"),se=U?h__default.default.red(D(x.duration)):h__default.default.green(D(x.duration));C(U?`${ie} ${h__default.default.red(ae)} ${se} ${h__default.default.red(ge(x.issueCount,"issue"))}`:`${ie} ${h__default.default.dim(ae)} ${se}`);})(s,c):Y(s,c);}else if(m.typeAware===!0){let c=B(Te,m),g=v.get(s)??c.taskCount;if(c.taskCount<g)return;let d=_.get(s);Y(s,d?{taskCount:d.taskCount+c.taskCount,issueCount:d.issueCount+c.issueCount,errorCount:d.errorCount+c.errorCount,warningCount:d.warningCount+c.warningCount,duration:d.duration+c.duration}:c);}else {let c=(P.get(s)??0)+(v.get(s)??0),g=B(_,m);if(g.taskCount<(c||g.taskCount))return;Y(s,g);}}})(y,u=>F.writeLine(u),k__default.default.cwd()),$=await Ve(y,n,Z,e,a,I,w,(u,C)=>{F.update(he(re,u,C));},be);if(F.stop(),!$){i=1;return}let Re=performance.now()-o,te={scannedFiles:new Set([...y.tasks.map(u=>u.filePath),...(y.skippedTasks??[]).map(u=>u.filePath)]).size,discoveredFiles:I.length,totalFiles:$.stats.totalFiles,totalTasks:y.tasks.length+(y.skippedTasks?.length??0),cachedTasks:y.precomputedAnalysis?y.tasks.length:void 0,totalErrors:$.stats.totalErrors,totalWarnings:$.stats.totalWarnings,failOnSeverity:w.failOnSeverity,maxWarnings:w.maxWarnings,duration:Re};T==="console"&&a.summary(te),a.parseErrors($.parseErrors),a.report($.results),T!=="console"&&(a.step("\u276F Writing report..."),a.summary(te)),y.precomputedAnalysis||await Je($.results,n,e,a),l=$.stats,J=w.failOnSeverity??"error",Q=w.maxWarnings??10,(l.totalErrors>0||J==="warn"&&l.totalWarnings>0||l.totalWarnings>Q)&&(i=1);}catch(p){a.error(p),i=1;}finally{n&&n!==r&&await n.flush(),i!==0&&f(i);}});}async function He(t,r,e){let o=performance.now();e.step("\u276F Loading configuration...");let a=await config.resolveConfig({profile:t.profile,cache:r,cwd:k__default.default.cwd()});if(!a.report.valid){let i=a.report.issues.map(l=>{let p=l.path?.join(".")||"root";return `[${l.severity.toUpperCase()}] ${p}: ${l.message}`});return e.error(Error(["Configuration validation failed",...i].join(`
6
+ `))),null}if(!a.config)return e.error(Error("No configuration found")),null;let n=a.config.plugins;if(n&&n.length>0){e.step(`\u276F Loading ${n.length} plugin(s)...`);let i=k__default.default.cwd();await config.loadPlugins(n,i,rules.getGlobalRegistry()),e.info(`Loaded ${n.length} plugin(s)`);}return e.debug(`Config resolve: ${(performance.now()-o).toFixed(2)}ms`),{config:a.config}}async function qe(t,r,e,o){let a=performance.now();o.step("\u276F Discovering files...");let n=await scanner.scan({rootDir:k__default.default.cwd(),include:t.include??[...common.DEFAULT_INCLUDE_PATTERNS],exclude:t.exclude??[],ignorePatterns:t.ignorePatterns,tsConfigPath:(function(i,l){if(!i?.project)return;let p=i.tsconfigRootDir?L__default.default.resolve(l,i.tsconfigRootDir):l;return L__default.default.resolve(p,i.project)})(t.parserOptions,k__default.default.cwd()),respectGitignore:true,debug:r.debug,cache:e});return n.ok?(o.info(`\u276F Found ${n.data.files.length} files in ${(performance.now()-a).toFixed(0)}ms`),o.debug(`File discovery: ${(performance.now()-a).toFixed(2)}ms`),n.data.files):(o.error(Error(`File discovery failed: ${n.error.message}`)),null)}async function Ge(t,r,e){let o=performance.now();e.step("\u276F Loading rules...");let a=t;r.rule&&(e.info(`Filtering analysis to single rule: ${r.rule}`),a={...t,rules:{[r.rule]:"error"},extends:[]});let n=await rules.resolveRules(a);if(!n.ok)return e.error(Error(`Rule resolution failed: ${n.error.message}`)),null;let i=rules.getEnabledRules(n.data.rules);return e.info(`\u276F Loaded ${i.size} active rules in ${(performance.now()-o).toFixed(0)}ms`),e.debug(`Rule resolution: ${(performance.now()-o).toFixed(2)}ms`),i}async function Ke(t,r,e,o,a,n,i){let l=performance.now();a.step("\u276F Planning analysis...");let p=await planner.buildExecutionPlan({files:t,rules:r,rootDir:k__default.default.cwd(),cache:e,debug:o.debug,incremental:o.force?{forceRerun:true}:void 0,workerCount:i,overrides:n.overrides});return p.ok?(p.data.precomputedAnalysis?a.info("\u276F Reused cached analysis plan"):a.info(`\u276F Prepared ${p.data.tasks.length.toLocaleString()} checks in ${(performance.now()-l).toFixed(0)}ms`),a.debug(`Plan build: ${(performance.now()-l).toFixed(2)}ms`),p.data):(a.error(Error(`Execution plan building failed: ${p.error.message}`)),null)}async function Ve(t,r,e,o,a,n,i,l,p){let R=performance.now();engine.configureRuleExecutor(rules.executeBatchedNewEngineRules,rules.isNewEngineRule);let A=await engine.runAnalysis(t,{rootDir:k__default.default.cwd(),cache:r,debug:o.debug,files:n,maxWorkers:e.maxWorkers,typeAwareChunkSize:e.typeAwareChunkSize,typeAwareConcurrency:e.typeAwareConcurrency,typeAwareFileConcurrency:e.typeAwareFileConcurrency,typeAwareIsolation:e.typeAwareIsolation,typeAwareChunkStrategy:e.typeAwareChunkStrategy,skipTypeCheck:o.skipTypeCheck,parserOptions:i?.parserOptions,onProgress:l,onFileProgress:p});return A.ok?(a.debug(`Execution: ${(performance.now()-R).toFixed(2)}ms`),A.data):(a.error(Error(`Analysis failed: ${A.error.message}`)),null)}async function Je(t,r,e,o){if(!r)return;let a=performance.now(),n=[];for(let i of t)i.taskId&&n.push([i.taskId,i]);n.length>0&&(await r.results.setMany(n),e.debug&&o.debug(`Saved ${n.length} results to cache (${(performance.now()-a).toFixed(2)}ms)`));}function Ce(t,r){t.command("config").description("Inspect and validate ngcompass configuration").command("health").description("Run semantic validation checks for the active configuration").option("-p, --profile <name>","Configuration profile to validate").action(async e=>{try{let o=await config.validateConfig({cache:e.cache?r:void 0,profile:e.profile});await reporters.getConfigReporter().renderHealthReport(o.report),o.report.valid||f();}catch(o){let a=o instanceof Error?o.message:String(o);console.error(`Error: ${a}`),f();}});}function $e(t,r){let e=t.command("cache").description("Inspect and manage analysis cache data");e.command("clear").description("Clear cached data for one cache type or all cache types").option("-p, --profile <name>","Configuration profile used to resolve cache settings").option("--type <type>","Cache type to clear: ast | config | results | all","all").action(async o=>{let a=reporters.getCacheReporter();k__default.default.stdout.write(h__default.default.dim(` \u203A Clearing cache...
7
+ `));let n=o.type,i=["ast","config","results","all"];i.includes(n)||(console.error(h__default.default.red(`Invalid cache type: ${n}. Must be one of: ${i.join(", ")}`)),f());try{let l=await H(r,{profile:o.profile,allowDisabled:!0});n==="all"?await l.clear():await l.clearType(n),a.renderClearResult(n);}catch(l){console.error(h__default.default.red("Error clearing cache:"),l),f();}}),e.command("info").description("Show cache status, size, and usage details").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async o=>{let a=reporters.getCacheReporter();try{let n=await H(r,{profile:o.profile,allowDisabled:!0}),i=await n.getInfo();a.renderCacheInfo(i);}catch(n){console.error(h__default.default.red("Error getting cache info:"),n),f();}}),e.command("path").description("Print the resolved cache directory path").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async o=>{let a=await H(r,{profile:o.profile,allowDisabled:true});k__default.default.stdout.write(`${a.getCachePath()}
8
+ `);});}async function H(t,r={}){let e=r.cwd??k__default.default.cwd();try{let o=await config.resolveConfig({profile:r.profile,cache:t,cwd:e});return !o.report.valid||!o.config?t:cache.createRuntimeCache(o.config,e,{allowDisabled:r.allowDisabled})??t}catch{return t}}function xe(t){t.command("rules [ruleName]").description("Browse available rules or inspect details for a specific rule").option("--preset <name>","Filter by preset: recommended, strict, performance, reactivity, or all").action((r,e)=>{e.preset&&!rules.isBuiltinPreset(e.preset)&&(console.error(h__default.default.red(`Unknown preset: "${e.preset}".`)),console.error(h__default.default.dim("Available presets: recommended, strict, all, performance, reactivity")),f());let o=rules.getRuleListEntries(),a=reporters.getRulesReporter({preset:e.preset});if(r){let n=o.find(i=>i.name===r);if(!n){console.error(h__default.default.red(`Rule "${r}" not found.`)),console.error(h__default.default.dim("Run `ngcompass rules` to list available rules.")),f();return}a.renderSingleRule(n);}else a.render(o);});}function Ae(t,r){ce(t),ye(t,r),Ce(t,r),$e(t,r),xe(t);}var b=()=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h");},ve=false,S=async(t,r)=>{if(!ve){if(ve=true,b(),t)try{let e=new Promise(o=>setTimeout(o,1e4).unref());await Promise.race([t.flush(),e]);}catch{}process.exit(r);}};async function cr(){let t=new commander.Command;t.name("ngcompass").description("Static analysis and architecture insights for Angular codebases.").version(common.PACKAGE_VERSION,"-V, --version","Display ngcompass version").option("--debug","Enable detailed debug logs across all modules").addHelpText("after",`
9
9
  Examples:
10
10
  $ ngcompass init
11
11
  $ ngcompass analyze --profile strict
12
12
  $ ngcompass cache info
13
- `).hook("preAction",async(e,i)=>{e.opts().debug&&common.enableDebug("debug","all");let n=i.opts();if(n.format!=="json"&&n.format!=="sarif"&&n.format!=="html"&&n.format!=="ui"){let{default:t}=await import('picocolors'),a=i.parent,s=a&&a.name()!=="ngcompass"?a.name():i.name(),p=process.cwd();process.stdout.write(`
14
- ${t.dim(">")} ${t.dim(`ngcompass@${common.PACKAGE_VERSION}`)} ${t.dim(s)} ${t.dim(p)}
15
- ${t.dim(">")} ${t.dim("ngcompass")} ${t.dim("run")}
13
+ `).hook("preAction",async(e,o)=>{e.opts().debug&&common.enableDebug("debug","all");let a=o.opts();if(a.format!=="json"&&a.format!=="sarif"&&a.format!=="html"&&a.format!=="ui"){let{default:n}=await import('picocolors'),i=o.parent,l=i&&i.name()!=="ngcompass"?i.name():o.name(),p=process.cwd();process.stdout.write(`
14
+ ${n.dim(">")} ${n.dim(`ngcompass@${common.PACKAGE_VERSION}`)} ${n.dim(l)} ${n.dim(p)}
15
+ ${n.dim(">")} ${n.dim("ngcompass")} ${n.dim("run")}
16
16
 
17
- ${t.bgCyan(t.white(t.bold(` ${s.toUpperCase()} `)))} ${t.cyan(common.PACKAGE_VERSION)} ${t.dim(p)}
17
+ ${n.bgCyan(n.white(n.bold(` ${l.toUpperCase()} `)))} ${n.cyan(common.PACKAGE_VERSION)} ${n.dim(p)}
18
18
 
19
- `);}});let r=cache.createCacheContext();process.on("SIGINT",()=>{$(r,130);}),process.on("SIGTERM",()=>{$(r,143);}),process.on("uncaughtException",e=>{v(),console.error(`
20
- [ngcompass] Unexpected error: ${e.message}`),$(r,1);}),process.on("unhandledRejection",e=>{v();let i=e instanceof Error?e.message:String(e);console.error(`
21
- [ngcompass] Unhandled promise rejection: ${i}`),$(r,1);});try{if(rules.registerAllBuiltinRules(),re(o,r),!process.argv.slice(2).length)return void o.outputHelp();await o.parseAsync(process.argv),await r.flush(),process.exit(0);}catch(e){v();let i=e instanceof Error?e.message:String(e);console.error(`[ngcompass] Fatal error: ${i}`),await $(r,1);}}Ue().catch(o=>{v();let r=o instanceof Error?o.message:String(o);console.error(`[ngcompass] Fatal error: ${r}`),process.exit(1);});exports.run=Ue;//# sourceMappingURL=cli.cjs.map
19
+ `);}});let r=cache.createCacheContext();process.on("SIGINT",()=>{S(r,130);}),process.on("SIGTERM",()=>{S(r,143);}),process.on("uncaughtException",e=>{b(),console.error(`
20
+ [ngcompass] Unexpected error: ${e.message}`),S(r,1);}),process.on("unhandledRejection",e=>{b();let o=e instanceof Error?e.message:String(e);console.error(`
21
+ [ngcompass] Unhandled promise rejection: ${o}`),S(r,1);});try{if(rules.registerAllBuiltinRules(),Ae(t,r),!process.argv.slice(2).length)return void t.outputHelp();await t.parseAsync(process.argv),await r.flush(),process.exit(0);}catch(e){b();let o=e instanceof Error?e.message:String(e);console.error(`[ngcompass] Fatal error: ${o}`),await S(r,1);}}cr().catch(t=>{b();let r=t instanceof Error?t.message:String(t);console.error(`[ngcompass] Fatal error: ${r}`),process.exit(1);});exports.run=cr;//# sourceMappingURL=cli.cjs.map
22
22
  //# sourceMappingURL=cli.cjs.map
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/exit.ts","../src/commands/init.ts","../src/spinner.ts","../src/commands/analyze.ts","../src/commands/config.ts","../src/commands/cache.ts","../src/commands/rules.ts","../src/commands/index.ts","../src/bin/ngcompass.ts"],"names":["exitWithError","code","process","stdout","isTTY","write","exit","registerInitCommand","program","_cache","command","description","option","cwd","action","options","result","initConfig","force","getConfigReporter","renderInitResult","success","alreadyExists","error","console","Error","message","String","FRAMES","Spinner","timer","frameIndex","stream","start","render","setInterval","pc","cyan","dim","writeLine","line","stop","clearInterval","frame","length","normalizeReporterFormat","format","formatDuration","ms","Math","max","round","toFixed","registerAnalyzeCommand","cache","startTime","performance","now","reporter","getReporter","compact","outputPath","output","quiet","noRecommendation","recommendation","activeCache","exitCode","stats","failOnSeverity","maxWarnings","configResult","loadConfigurationStep","config","createRuntimeCache","reporterFormat","cliFormat","configFormat","outputFormat","files","discoverFilesStep","enabledRules","resolveRulesStep","plan","buildPlanStep","progressStream","stderr","spinner","logFileProgress","expectedTasksByFile","Map","filePath","tasks","map","task","filter","set","get","completedByFile","printedFiles","Set","event","count","has","accumulated","next","taskCount","issueCount","errorCount","warningCount","duration","expectedTasks","add","relativePath","path","relative","hasIssues","status","red","green","toLocaleString","analysis","runAnalysisStep","undefined","maxWorkers","summary","scannedFiles","t","skippedTasks","size","discoveredFiles","totalFiles","totalTasks","cachedTasks","precomputedAnalysis","totalErrors","totalWarnings","parseErrors","report","results","step","saveToCacheStep","flush","tStart","resolveConfig","profile","valid","issueLines","issues","issue","pathString","join","severity","toUpperCase","pluginList","plugins","configDir","loadPlugins","getGlobalRegistry","info","debug","scanResult","scan","rootDir","include","DEFAULT_INCLUDE_PATTERNS","exclude","ignorePatterns","tsConfigPath","parserOptions","project","tsconfigRootDir","resolve","respectGitignore","ok","data","effectiveConfig","rule","rules","extends","rulesResult","resolveRules","getEnabledRules","planResult","buildExecutionPlan","incremental","forceRerun","workerCount","overrides","onProgress","_workerCountForCompatibility","onFileProgress","configureRuleExecutor","executeBatchedNewEngineRules","isNewEngineRule","cliMaxWorkers","parseInt","cliChunkSize","typeAwareChunkSize","runAnalysis","skipTypeCheck","cacheEntries","taskId","push","setMany","registerConfigCommand","validateConfig","renderHealthReport","errorMessage","registerCacheCommand","cacheCmd","getCacheReporter","type","validTypes","includes","resolveRuntimeCache","allowDisabled","clear","clearType","renderClearResult","err","getInfo","renderCacheInfo","getCachePath","fallbackCache","registerRulesCommand","ruleName","opts","preset","isBuiltinPreset","entries","getRuleListEntries","getRulesReporter","find","e","name","renderSingleRule","registerCommands","restoreCursor","shutdownInProgress","gracefulShutdown","flushTimeout","Promise","setTimeout","unref","race","run","Command","version","PACKAGE_VERSION","addHelpText","hook","thisCommand","actionCommand","enableDebug","actionOpts","default","parent","commandName","bgCyan","white","bold","createCacheContext","on","reason","msg","registerAllBuiltinRules","argv","slice","outputHelp","parseAsync","catch"],"mappings":"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","file":"cli.cjs","sourcesContent":["export const exitWithError = (s = 1)=>{\n process.stdout.isTTY && process.stdout.write('\\x1B[?25h'), process.exit(s);\n};\n","import { getConfigReporter as r } from '@ngcompass/reporters';\nimport { initConfig as e } from '@ngcompass/config';\nimport { exitWithError as o } from './exit.js';\nexport function registerInitCommand(t, i) {\n t.command('init').description('Create a starter ngcompass configuration in the current project').option('-f, --force', 'Overwrite an existing configuration file').option('--cwd <path>', 'Project directory where the configuration will be created', process.cwd()).action(async (t)=>{\n try {\n let i = await e({\n cwd: t.cwd,\n force: t.force\n }), c = r();\n await c.renderInitResult(i), i.success || i.alreadyExists || o();\n } catch (r) {\n console.error(r instanceof Error ? r.message : String(r)), o();\n }\n });\n}\n","import t from 'picocolors';\nlet FRAMES = [\n '⠋',\n '⠙',\n '⠹',\n '⠸',\n '⠼',\n '⠴',\n '⠦',\n '⠧',\n '⠇',\n '⠏'\n];\nexport class Spinner {\n stream;\n timer = null;\n frameIndex = 0;\n message = '';\n isTTY;\n constructor(t){\n this.stream = t, this.isTTY = !!t.isTTY;\n }\n start(e) {\n (this.message = e, this.frameIndex = 0, this.isTTY) ? (this.stream.write('\\x1B[?25l'), this.render(), this.timer = setInterval(()=>this.render(), 80)) : this.stream.write(`${t.cyan('❯')} ${t.dim(e)}\\n`);\n }\n writeLine(t) {\n this.isTTY && this.timer ? (this.stream.write('\\r\\x1B[K'), this.stream.write(`${t}\\n`), this.render()) : this.stream.write(`${t}\\n`);\n }\n stop() {\n this.timer && (clearInterval(this.timer), this.timer = null), this.isTTY && (this.stream.write('\\r\\x1B[K'), this.stream.write('\\x1B[?25h'));\n }\n render() {\n let e = t.cyan(FRAMES[this.frameIndex % FRAMES.length]);\n this.frameIndex++, this.stream.write(`\\r${e} ${t.dim(this.message)}`);\n }\n}\n","import e from 'node:path';\nimport r from 'picocolors';\nimport { DEFAULT_INCLUDE_PATTERNS as t } from '@ngcompass/common';\nimport { getReporter as o } from '@ngcompass/reporters';\nimport n from 'node:process';\nimport { createRuntimeCache as a } from '@ngcompass/cache';\nimport { exitWithError as i } from './exit.js';\nimport { Spinner as s } from '../spinner.js';\nimport { getGlobalRegistry as l, executeBatchedNewEngineRules as u, isNewEngineRule as p, resolveRules as c, getEnabledRules as m } from '@ngcompass/rules';\nimport { loadPlugins as f, resolveConfig as d } from '@ngcompass/config';\nimport { runAnalysis as g, configureRuleExecutor as h } from '@ngcompass/engine';\nimport { buildExecutionPlan as w } from '@ngcompass/planner';\nimport { scan as k } from '@ngcompass/scanner';\nfunction normalizeReporterFormat(e) {\n return 'ui' === e ? 'html' : e ?? 'console';\n}\nfunction formatDuration(e) {\n return e < 1000 ? `${Math.max(0, Math.round(e))}ms` : `${(e / 1000).toFixed(1)}s`;\n}\nexport function registerAnalyzeCommand(t, l) {\n t.command('analyze').description('Analyze your project and report rule violations and architecture risks').option('-p, --profile <name>', 'Configuration profile to run').option('--force', 'Ignore cached results and re-run all checks').option('--format <fmt>', 'Reporter format: console | json | sarif | html | ui').option('--compact', 'Use compact, ESLint-style output').option('-q, --quiet', 'Show summary counts only, suppress violation details').option('--no-recommendation', 'Suppress fix recommendations from output').option('--output <path>', 'Output path for UI reports (default: ngcompass-report.html)').option('--rule <id>', 'Run only one rule (useful for debugging or focused checks)').option('--max-workers <n>', 'Cap the number of worker threads (lower = less memory, e.g. --max-workers 2)').option('--type-aware-chunk-size <n>', 'Files per type-aware chunk (default 400; lower = less peak memory)').option('--skip-type-check', 'Skip rules that require the TypeScript type checker (fastest, lowest memory)').action(async (t)=>{\n let u = performance.now(), p = o(normalizeReporterFormat(t.format), {\n compact: !!t.compact,\n outputPath: t.output,\n quiet: !!t.quiet,\n noRecommendation: !1 === t.recommendation\n }), c = l, m = 0;\n try {\n var f;\n let i, d, g = await loadConfigurationStep(t, l, p);\n if (!g) {\n m = 1;\n return;\n }\n let { config: h } = g;\n c = a(h, n.cwd());\n let w = function(e, r) {\n if (e) return normalizeReporterFormat(e);\n switch(r){\n case 'json':\n return 'json';\n case 'sarif':\n return 'sarif';\n case 'html':\n return 'html';\n default:\n return 'console';\n }\n }(t.format, h.outputFormat);\n p = o(w, {\n compact: !!t.compact,\n outputPath: t.output ?? h.outputPath,\n quiet: !!t.quiet,\n noRecommendation: !1 === t.recommendation\n });\n let k = await discoverFilesStep(h, t, c, p);\n if (!k) {\n m = 1;\n return;\n }\n let y = await resolveRulesStep(h, t, p);\n if (!y) {\n m = 1;\n return;\n }\n let $ = await buildPlanStep(k, y, c, t, p, h);\n if (!$) {\n m = 1;\n return;\n }\n let v = 'console' === w ? n.stdout : n.stderr, C = new s(v);\n C.start('Running analysis...');\n let x = function(t, o, n) {\n let a = new Map();\n for (let e of t.tasks.map((e)=>e.filePath).filter((e)=>'string' == typeof e && e.length > 0))a.set(e, (a.get(e) ?? 0) + 1);\n let i = new Map(), s = new Set();\n return (t)=>{\n var l;\n if (s.has(t.filePath)) return;\n let u = i.get(t.filePath), p = u ? {\n filePath: t.filePath,\n taskCount: u.taskCount + t.taskCount,\n issueCount: u.issueCount + t.issueCount,\n errorCount: u.errorCount + t.errorCount,\n warningCount: u.warningCount + t.warningCount,\n duration: u.duration + t.duration\n } : t;\n i.set(t.filePath, p);\n let c = a.get(t.filePath) ?? p.taskCount;\n if (p.taskCount < c) return;\n s.add(t.filePath);\n let m = e.relative(n, t.filePath) || t.filePath, f = p.issueCount > 0, d = f ? r.red('❯') : r.green('❯'), g = f ? r.red(formatDuration(p.duration)) : r.green(formatDuration(p.duration));\n o(f ? `${d} ${r.red(m)} ${g} ${r.red((l = p.issueCount, `${l.toLocaleString()} issue${1 === l ? '' : 's'}`))}` : `${d} ${r.dim(m)} ${g}`);\n };\n }($, (e)=>C.writeLine(e), n.cwd()), S = await runAnalysisStep($, c, t, p, k, h, void 0, h.maxWorkers, x);\n if (C.stop(), !S) {\n m = 1;\n return;\n }\n let F = performance.now() - u, P = {\n scannedFiles: new Set([\n ...$.tasks.map((e)=>e.filePath),\n ...($.skippedTasks ?? []).map((e)=>e.filePath)\n ]).size,\n discoveredFiles: k.length,\n totalFiles: S.stats.totalFiles,\n totalTasks: $.tasks.length + ($.skippedTasks?.length ?? 0),\n cachedTasks: $.precomputedAnalysis ? $.tasks.length : void 0,\n totalErrors: S.stats.totalErrors,\n totalWarnings: S.stats.totalWarnings,\n failOnSeverity: h.failOnSeverity,\n maxWarnings: h.maxWarnings,\n duration: F\n };\n 'console' === w && p.summary(P), p.parseErrors(S.parseErrors), p.report(S.results), 'console' !== w && (p.step('❯ Writing report...'), p.summary(P)), $.precomputedAnalysis || await saveToCacheStep(S.results, c, t, p), f = S.stats, i = h.failOnSeverity ?? 'error', d = h.maxWarnings ?? 10, (f.totalErrors > 0 || 'warn' === i && f.totalWarnings > 0 || f.totalWarnings > d) && (m = 1);\n } catch (e) {\n p.error(e), m = 1;\n } finally{\n c && c !== l && await c.flush(), 0 !== m && i(m);\n }\n });\n}\nasync function loadConfigurationStep(e, r, t) {\n let o = performance.now();\n t.step('❯ Loading configuration...');\n let a = await d({\n profile: e.profile,\n cache: r,\n cwd: n.cwd()\n });\n if (!a.report.valid) {\n let e = a.report.issues.map((e)=>{\n let r = e.path?.join('.') || 'root';\n return `[${e.severity.toUpperCase()}] ${r}: ${e.message}`;\n });\n return t.error(Error([\n 'Configuration validation failed',\n ...e\n ].join('\\n'))), null;\n }\n if (!a.config) return t.error(Error('No configuration found')), null;\n let i = a.config.plugins;\n if (i && i.length > 0) {\n t.step(`❯ Loading ${i.length} plugin(s)...`);\n let e = n.cwd();\n await f(i, e, l()), t.info(`Loaded ${i.length} plugin(s)`);\n }\n return t.debug(`Config resolve: ${(performance.now() - o).toFixed(2)}ms`), {\n config: a.config\n };\n}\nasync function discoverFilesStep(r, o, a, i) {\n let s = performance.now();\n i.step('❯ Discovering files...');\n let l = await k({\n rootDir: n.cwd(),\n include: r.include ?? [\n ...t\n ],\n exclude: r.exclude ?? [],\n ignorePatterns: r.ignorePatterns,\n tsConfigPath: function(r, t) {\n if (!r?.project) return;\n let o = r.tsconfigRootDir ? e.resolve(t, r.tsconfigRootDir) : t;\n return e.resolve(o, r.project);\n }(r.parserOptions, n.cwd()),\n respectGitignore: !0,\n debug: o.debug,\n cache: a\n });\n return l.ok ? (i.info(`❯ Found ${l.data.files.length} files in ${(performance.now() - s).toFixed(0)}ms`), i.debug(`File discovery: ${(performance.now() - s).toFixed(2)}ms`), l.data.files) : (i.error(Error(`File discovery failed: ${l.error.message}`)), null);\n}\nasync function resolveRulesStep(e, r, t) {\n let o = performance.now();\n t.step('❯ Loading rules...');\n let n = e;\n r.rule && (t.info(`Filtering analysis to single rule: ${r.rule}`), n = {\n ...e,\n rules: {\n [r.rule]: 'error'\n },\n extends: []\n });\n let a = await c(n);\n if (!a.ok) return t.error(Error(`Rule resolution failed: ${a.error.message}`)), null;\n let i = m(a.data.rules);\n return t.info(`❯ Loaded ${i.size} active rules in ${(performance.now() - o).toFixed(0)}ms`), t.debug(`Rule resolution: ${(performance.now() - o).toFixed(2)}ms`), i;\n}\nasync function buildPlanStep(e, r, t, o, a, i) {\n let s = performance.now();\n a.step('❯ Planning analysis...');\n let l = await w({\n files: e,\n rules: r,\n rootDir: n.cwd(),\n cache: t,\n debug: o.debug,\n incremental: o.force ? {\n forceRerun: !0\n } : void 0,\n workerCount: i.maxWorkers,\n overrides: i.overrides\n });\n return l.ok ? (l.data.precomputedAnalysis ? a.info('❯ Reused cached analysis plan') : a.info(`❯ Prepared ${l.data.tasks.length.toLocaleString()} checks in ${(performance.now() - s).toFixed(0)}ms`), a.debug(`Plan build: ${(performance.now() - s).toFixed(2)}ms`), l.data) : (a.error(Error(`Execution plan building failed: ${l.error.message}`)), null);\n}\nasync function runAnalysisStep(e, r, t, o, a, i, s, l, c) {\n let m = performance.now();\n h(u, p);\n let f = t.maxWorkers ? parseInt(t.maxWorkers, 10) : void 0, d = t.typeAwareChunkSize ? parseInt(t.typeAwareChunkSize, 10) : void 0, w = await g(e, {\n rootDir: n.cwd(),\n cache: r,\n debug: t.debug,\n files: a,\n maxWorkers: f ?? i?.maxWorkers,\n typeAwareChunkSize: d,\n skipTypeCheck: t.skipTypeCheck,\n parserOptions: i?.parserOptions,\n onProgress: s,\n onFileProgress: c\n });\n return w.ok ? (o.debug(`Execution: ${(performance.now() - m).toFixed(2)}ms`), w.data) : (o.error(Error(`Analysis failed: ${w.error.message}`)), null);\n}\nasync function saveToCacheStep(e, r, t, o) {\n if (!r) return;\n let n = performance.now(), a = [];\n for (let r of e)r.taskId && a.push([\n r.taskId,\n r\n ]);\n a.length > 0 && (await r.results.setMany(a), t.debug && o.debug(`Saved ${a.length} results to cache (${(performance.now() - n).toFixed(2)}ms)`));\n}\n","import { getConfigReporter as o } from '@ngcompass/reporters';\nimport { validateConfig as r } from '@ngcompass/config';\nimport { exitWithError as e } from './exit.js';\nexport function registerConfigCommand(i, t) {\n i.command('config').description('Inspect and validate ngcompass configuration').command('health').description('Run semantic validation checks for the active configuration').option('-p, --profile <name>', 'Configuration profile to validate').action(async (i)=>{\n try {\n let a = await r({\n cache: i.cache ? t : void 0,\n profile: i.profile\n }), n = o();\n await n.renderHealthReport(a.report), a.report.valid || e();\n } catch (r) {\n let o = r instanceof Error ? r.message : String(r);\n console.error(`Error: ${o}`), e();\n }\n });\n}\n","import { createRuntimeCache as e } from '@ngcompass/cache';\nimport { getCacheReporter as o } from '@ngcompass/reporters';\nimport { resolveConfig as a } from '@ngcompass/config';\nimport r from 'picocolors';\nimport t from 'node:process';\nimport { exitWithError as i } from './exit.js';\nexport function registerCacheCommand(e, a) {\n let c = e.command('cache').description('Inspect and manage analysis cache data');\n c.command('clear').description('Clear cached data for one cache type or all cache types').option('-p, --profile <name>', 'Configuration profile used to resolve cache settings').option('--type <type>', 'Cache type to clear: ast | config | results | all', 'all').action(async (e)=>{\n let c = o();\n t.stdout.write(r.dim(' › Clearing cache...\\n'));\n let l = e.type, n = [\n 'ast',\n 'config',\n 'results',\n 'all'\n ];\n n.includes(l) || (console.error(r.red(`Invalid cache type: ${l}. Must be one of: ${n.join(', ')}`)), i());\n try {\n let o = await resolveRuntimeCache(a, {\n profile: e.profile,\n allowDisabled: !0\n });\n 'all' === l ? await o.clear() : await o.clearType(l), c.renderClearResult(l);\n } catch (e) {\n console.error(r.red('Error clearing cache:'), e), i();\n }\n }), c.command('info').description('Show cache status, size, and usage details').option('-p, --profile <name>', 'Configuration profile used to resolve cache settings').action(async (e)=>{\n let t = o();\n try {\n let o = await resolveRuntimeCache(a, {\n profile: e.profile,\n allowDisabled: !0\n }), r = await o.getInfo();\n t.renderCacheInfo(r);\n } catch (e) {\n console.error(r.red('Error getting cache info:'), e), i();\n }\n }), c.command('path').description('Print the resolved cache directory path').option('-p, --profile <name>', 'Configuration profile used to resolve cache settings').action(async (e)=>{\n let o = await resolveRuntimeCache(a, {\n profile: e.profile,\n allowDisabled: !0\n });\n t.stdout.write(`${o.getCachePath()}\\n`);\n });\n}\nasync function resolveRuntimeCache(o, r = {}) {\n let i = r.cwd ?? t.cwd();\n try {\n let t = await a({\n profile: r.profile,\n cache: o,\n cwd: i\n });\n if (!t.report.valid || !t.config) return o;\n return e(t.config, i, {\n allowDisabled: r.allowDisabled\n }) ?? o;\n } catch {\n return o;\n }\n}\n","import { getRulesReporter as e } from '@ngcompass/reporters';\nimport { getRuleListEntries as r, isBuiltinPreset as o } from '@ngcompass/rules';\nimport s from 'picocolors';\nimport { exitWithError as t } from './exit.js';\nexport function registerRulesCommand(i) {\n i.command('rules [ruleName]').description('Browse available rules or inspect details for a specific rule').option('--preset <name>', 'Filter by preset: recommended, strict, performance, reactivity, or all').action((i, l)=>{\n l.preset && !o(l.preset) && (console.error(s.red(`Unknown preset: \"${l.preset}\".`)), console.error(s.dim('Available presets: recommended, strict, all, performance, reactivity')), t());\n let n = r(), m = e({\n preset: l.preset\n });\n if (i) {\n let e = n.find((e)=>e.name === i);\n if (!e) {\n console.error(s.red(`Rule \"${i}\" not found.`)), console.error(s.dim('Run `ngcompass rules` to list available rules.')), t();\n return;\n }\n m.renderSingleRule(e);\n } else m.render(n);\n });\n}\n","import { registerInitCommand as o } from './init.js';\nimport { registerAnalyzeCommand as r } from './analyze.js';\nimport { registerConfigCommand as m } from './config.js';\nimport { registerCacheCommand as i } from './cache.js';\nimport { registerRulesCommand as t } from './rules.js';\nexport function registerCommands(s, f) {\n o(s, f), r(s, f), m(s, f), i(s, f), t(s);\n}\n","import { Command as r } from 'commander';\nimport { registerCommands as o } from '../commands/index.js';\nimport { enableDebug as e, PACKAGE_VERSION as s } from '@ngcompass/common';\nimport { createCacheContext as n } from '@ngcompass/cache';\nimport { registerAllBuiltinRules as t } from '@ngcompass/rules';\nlet restoreCursor = ()=>{\n process.stdout.isTTY && process.stdout.write('\\x1B[?25h');\n}, shutdownInProgress = !1, gracefulShutdown = async (r, o)=>{\n if (!shutdownInProgress) {\n if (shutdownInProgress = !0, restoreCursor(), r) try {\n let o = new Promise((r)=>setTimeout(r, 10_000).unref());\n await Promise.race([\n r.flush(),\n o\n ]);\n } catch {}\n process.exit(o);\n }\n};\nexport async function run() {\n let a = new r();\n a.name('ngcompass').description('Static analysis and architecture insights for Angular codebases.').version(s, '-V, --version', 'Display ngcompass version').option('--debug', 'Enable detailed debug logs across all modules').addHelpText('after', '\\nExamples:\\n $ ngcompass init\\n $ ngcompass analyze --profile strict\\n $ ngcompass cache info\\n').hook('preAction', async (r, o)=>{\n r.opts().debug && e('debug', 'all');\n let n = o.opts();\n if ('json' !== n.format && 'sarif' !== n.format && 'html' !== n.format && 'ui' !== n.format) {\n let { default: r } = await import('picocolors'), e = o.parent, n = e && 'ngcompass' !== e.name() ? e.name() : o.name(), t = process.cwd();\n process.stdout.write(`\\n${r.dim('>')} ${r.dim(`ngcompass@${s}`)} ${r.dim(n)} ${r.dim(t)}\\n${r.dim('>')} ${r.dim('ngcompass')} ${r.dim('run')}\\n\\n ${r.bgCyan(r.white(r.bold(` ${n.toUpperCase()} `)))} ${r.cyan(s)} ${r.dim(t)}\\n\\n`);\n }\n });\n let c = n();\n process.on('SIGINT', ()=>void gracefulShutdown(c, 130)), process.on('SIGTERM', ()=>void gracefulShutdown(c, 143)), process.on('uncaughtException', (r)=>{\n restoreCursor(), console.error(`\\n[ngcompass] Unexpected error: ${r.message}`), gracefulShutdown(c, 1);\n }), process.on('unhandledRejection', (r)=>{\n restoreCursor();\n let o = r instanceof Error ? r.message : String(r);\n console.error(`\\n[ngcompass] Unhandled promise rejection: ${o}`), gracefulShutdown(c, 1);\n });\n try {\n if (t(), o(a, c), !process.argv.slice(2).length) return void a.outputHelp();\n await a.parseAsync(process.argv), await c.flush(), process.exit(0);\n } catch (o) {\n restoreCursor();\n let r = o instanceof Error ? o.message : String(o);\n console.error(`[ngcompass] Fatal error: ${r}`), await gracefulShutdown(c, 1);\n }\n}\nrun().catch((r)=>{\n restoreCursor();\n let o = r instanceof Error ? r.message : String(r);\n console.error(`[ngcompass] Fatal error: ${o}`), process.exit(1);\n});\n"]}
1
+ {"version":3,"sources":["../src/commands/exit.ts","../src/commands/init.ts","../src/spinner.ts","../src/commands/analyze.ts","../src/commands/config.ts","../src/commands/cache.ts","../src/commands/rules.ts","../src/commands/index.ts","../src/bin/ngcompass.ts"],"names":["exitWithError","code","process","stdout","isTTY","write","exit","registerInitCommand","program","_cache","command","description","option","cwd","action","options","result","initConfig","force","getConfigReporter","renderInitResult","success","alreadyExists","error","console","Error","message","String","FRAMES","Spinner","timer","frameIndex","stream","start","render","setInterval","pc","cyan","dim","update","writeLine","line","stop","clearInterval","frame","length","PERFORMANCE_MODE_PRESETS","eco","typeAwareConcurrency","typeAwareFileConcurrency","typeAwareChunkSize","typeAwareIsolation","typeAwareChunkStrategy","balanced","turbo","PERFORMANCE_MODES","Object","keys","TYPE_AWARE_ISOLATION_MODES","TYPE_AWARE_CHUNK_STRATEGIES","parsePositiveIntegerOption","value","optionName","undefined","parsed","Number","isInteger","normalizeReporterFormat","format","formatDuration","ms","Math","max","round","toFixed","pluralise","count","singular","toLocaleString","formatAnalysisProgressMessage","mode","completed","total","registerAnalyzeCommand","cache","addOption","Option","hideHelp","startTime","performance","now","reporter","getReporter","compact","outputPath","output","quiet","noRecommendation","recommendation","activeCache","exitCode","stats","preset","cliMaxWorkers","cliChunkSize","cliTypeAwareConcurrency","cliTypeAwareFileConcurrency","failOnSeverity","maxWarnings","configResult","loadConfigurationStep","config","performanceOptions","includes","join","maxWorkers","createRuntimeCache","reporterFormat","cliFormat","configFormat","outputFormat","files","discoverFilesStep","enabledRules","resolveRulesStep","plan","buildPlanStep","progressStream","stderr","spinner","totalChecks","tasks","skippedTasks","logFileProgress","syntaxExpected","Map","typeAwareExpected","task","fp","filePath","needsTypeChecker","needsProjectContext","set","get","syntaxDone","typeAwareDone","syntaxLinePrinted","Set","finalLinePrinted","accumulate","map","event","prev","next","taskCount","issueCount","errorCount","warningCount","duration","printFinalLine","acc","has","add","relativePath","path","relative","hasIssues","status","red","green","dur","typeAware","expected","syntaxAcc","totalExpected","analysis","runAnalysisStep","summary","scannedFiles","t","size","discoveredFiles","totalFiles","totalTasks","cachedTasks","precomputedAnalysis","totalErrors","totalWarnings","parseErrors","report","results","step","saveToCacheStep","flush","tStart","resolveConfig","profile","valid","issueLines","issues","issue","pathString","severity","toUpperCase","pluginList","plugins","configDir","loadPlugins","getGlobalRegistry","info","debug","scanResult","scan","rootDir","include","DEFAULT_INCLUDE_PATTERNS","exclude","ignorePatterns","tsConfigPath","parserOptions","project","tsconfigRootDir","resolve","respectGitignore","ok","data","effectiveConfig","rule","rules","extends","rulesResult","resolveRules","getEnabledRules","planResult","buildExecutionPlan","incremental","forceRerun","workerCount","overrides","onProgress","onFileProgress","configureRuleExecutor","executeBatchedNewEngineRules","isNewEngineRule","runAnalysis","skipTypeCheck","cacheEntries","taskId","push","setMany","registerConfigCommand","validateConfig","renderHealthReport","errorMessage","registerCacheCommand","cacheCmd","getCacheReporter","type","validTypes","resolveRuntimeCache","allowDisabled","clear","clearType","renderClearResult","err","getInfo","renderCacheInfo","getCachePath","fallbackCache","registerRulesCommand","ruleName","opts","isBuiltinPreset","entries","getRuleListEntries","getRulesReporter","find","e","name","renderSingleRule","registerCommands","restoreCursor","shutdownInProgress","gracefulShutdown","flushTimeout","Promise","setTimeout","unref","race","run","Command","version","PACKAGE_VERSION","addHelpText","hook","thisCommand","actionCommand","enableDebug","actionOpts","default","parent","commandName","bgCyan","white","bold","createCacheContext","on","reason","msg","registerAllBuiltinRules","argv","slice","outputHelp","parseAsync","catch"],"mappings":"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","file":"cli.cjs","sourcesContent":["export const exitWithError = (s = 1)=>{\n process.stdout.isTTY && process.stdout.write('\\x1B[?25h'), process.exit(s);\n};\n","import { getConfigReporter as r } from '@ngcompass/reporters';\nimport { initConfig as e } from '@ngcompass/config';\nimport { exitWithError as o } from './exit.js';\nexport function registerInitCommand(t, i) {\n t.command('init').description('Create a starter ngcompass configuration in the current project').option('-f, --force', 'Overwrite an existing configuration file').option('--cwd <path>', 'Project directory where the configuration will be created', process.cwd()).action(async (t)=>{\n try {\n let i = await e({\n cwd: t.cwd,\n force: t.force\n }), c = r();\n await c.renderInitResult(i), i.success || i.alreadyExists || o();\n } catch (r) {\n console.error(r instanceof Error ? r.message : String(r)), o();\n }\n });\n}\n","import t from 'picocolors';\nlet FRAMES = [\n '⠋',\n '⠙',\n '⠹',\n '⠸',\n '⠼',\n '⠴',\n '⠦',\n '⠧',\n '⠇',\n '⠏'\n];\nexport class Spinner {\n stream;\n timer = null;\n frameIndex = 0;\n message = '';\n isTTY;\n constructor(t){\n this.stream = t, this.isTTY = !!t.isTTY;\n }\n start(e) {\n (this.message = e, this.frameIndex = 0, this.isTTY) ? (this.stream.write('\\x1B[?25l'), this.render(), this.timer = setInterval(()=>this.render(), 80)) : this.stream.write(`${t.cyan('❯')} ${t.dim(e)}\\n`);\n }\n update(t) {\n this.message = t, this.isTTY && this.timer && this.render();\n }\n writeLine(t) {\n this.isTTY && this.timer ? (this.stream.write('\\r\\x1B[K'), this.stream.write(`${t}\\n`), this.render()) : this.stream.write(`${t}\\n`);\n }\n stop() {\n this.timer && (clearInterval(this.timer), this.timer = null), this.isTTY && (this.stream.write('\\r\\x1B[K'), this.stream.write('\\x1B[?25h'));\n }\n render() {\n let e = t.cyan(FRAMES[this.frameIndex % FRAMES.length]);\n this.frameIndex++, this.stream.write(`\\r\\x1B[K${e} ${t.dim(this.message)}`);\n }\n}\n","import { Option as e } from 'commander';\nimport r from 'node:path';\nimport t from 'picocolors';\nimport { DEFAULT_INCLUDE_PATTERNS as o } from '@ngcompass/common';\nimport { getReporter as n } from '@ngcompass/reporters';\nimport a from 'node:process';\nimport { createRuntimeCache as i } from '@ngcompass/cache';\nimport { exitWithError as s } from './exit.js';\nimport { Spinner as u } from '../spinner.js';\nimport { getGlobalRegistry as l, executeBatchedNewEngineRules as p, isNewEngineRule as c, resolveRules as d, getEnabledRules as m } from '@ngcompass/rules';\nimport { loadPlugins as f, resolveConfig as y } from '@ngcompass/config';\nimport { runAnalysis as g, configureRuleExecutor as w } from '@ngcompass/engine';\nimport { buildExecutionPlan as C } from '@ngcompass/planner';\nimport { scan as h } from '@ngcompass/scanner';\nlet PERFORMANCE_MODE_PRESETS = {\n eco: {\n typeAwareConcurrency: 1,\n typeAwareFileConcurrency: 1,\n typeAwareChunkSize: 100,\n typeAwareIsolation: 'auto',\n typeAwareChunkStrategy: 'dependency'\n },\n balanced: {\n typeAwareConcurrency: 2,\n typeAwareFileConcurrency: 2,\n typeAwareChunkSize: 300,\n typeAwareIsolation: 'auto',\n typeAwareChunkStrategy: 'simple'\n },\n turbo: {\n typeAwareConcurrency: 2,\n typeAwareFileConcurrency: 4,\n typeAwareChunkSize: 500,\n typeAwareIsolation: 'off',\n typeAwareChunkStrategy: 'simple'\n }\n}, PERFORMANCE_MODES = Object.keys(PERFORMANCE_MODE_PRESETS), TYPE_AWARE_ISOLATION_MODES = [\n 'auto',\n 'process',\n 'off'\n], TYPE_AWARE_CHUNK_STRATEGIES = [\n 'dependency',\n 'simple'\n];\nfunction parsePositiveIntegerOption(e, r) {\n if (void 0 === e) return;\n let t = Number(e);\n if (!Number.isInteger(t) || t < 1) throw Error(`${r} must be a positive integer.`);\n return t;\n}\nfunction normalizeReporterFormat(e) {\n return 'ui' === e ? 'html' : e ?? 'console';\n}\nfunction formatDuration(e) {\n return e < 1000 ? `${Math.max(0, Math.round(e))}ms` : `${(e / 1000).toFixed(1)}s`;\n}\nfunction pluralise(e, r) {\n return `${e.toLocaleString()} ${r}${1 === e ? '' : 's'}`;\n}\nfunction formatAnalysisProgressMessage(e, r, t) {\n return `Running analysis in ${e} mode: ${r.toLocaleString()}/${t.toLocaleString()} checks complete...`;\n}\nexport function registerAnalyzeCommand(o, l) {\n o.command('analyze').description('Analyze your project and report rule violations and architecture risks').option('-p, --profile <name>', 'Configuration profile to run').option('--force', 'Ignore cached results and re-run all checks').option('--format <fmt>', 'Reporter format: console | json | sarif | html | ui').option('--compact', 'Use compact, ESLint-style output').option('-q, --quiet', 'Show summary counts only, suppress violation details').option('--no-recommendation', 'Suppress fix recommendations from output').option('--output <path>', 'Output path for UI reports (default: ngcompass-report.html)').option('--rule <id>', 'Run only one rule (useful for debugging or focused checks)').option('--mode <mode>', 'Performance mode: eco | balanced | turbo (default: balanced)', 'balanced').option('--max-workers <n>', 'Cap the number of worker threads (lower = less memory, e.g. --max-workers 2)').addOption(new e('--type-aware-chunk-size <n>', 'Files per type-aware chunk').hideHelp()).addOption(new e('--type-aware-concurrency <n>', 'Concurrent type-aware chunks').hideHelp()).addOption(new e('--type-aware-file-concurrency <n>', 'Concurrent files per type-aware chunk').hideHelp()).addOption(new e('--type-aware-isolation <mode>', 'Type-aware isolation: auto | process | off').hideHelp()).addOption(new e('--type-aware-chunk-strategy <mode>', 'Type-aware chunk ordering: dependency | simple').hideHelp()).option('--skip-type-check', 'Skip rules that require the TypeScript type checker (fastest, lowest memory)').action(async (e)=>{\n let o = performance.now(), p = n(normalizeReporterFormat(e.format), {\n compact: !!e.compact,\n outputPath: e.output,\n quiet: !!e.quiet,\n noRecommendation: !1 === e.recommendation\n }), c = l, d = 0;\n try {\n var m;\n let s, f, y, g, w, C, h, k = await loadConfigurationStep(e, l, p);\n if (!k) {\n d = 1;\n return;\n }\n let { config: A } = k, E = (s = PERFORMANCE_MODE_PRESETS[function(e) {\n let r = e ?? 'balanced';\n if (!PERFORMANCE_MODES.includes(r)) throw Error(`Invalid performance mode \"${r}\". Expected one of: ${PERFORMANCE_MODES.join(', ')}.`);\n return r;\n }(e.mode)], f = parsePositiveIntegerOption(e.maxWorkers, '--max-workers'), y = parsePositiveIntegerOption(e.typeAwareChunkSize, '--type-aware-chunk-size'), g = parsePositiveIntegerOption(e.typeAwareConcurrency, '--type-aware-concurrency'), w = parsePositiveIntegerOption(e.typeAwareFileConcurrency, '--type-aware-file-concurrency'), {\n maxWorkers: f ?? A.maxWorkers,\n typeAwareChunkSize: y ?? s.typeAwareChunkSize,\n typeAwareConcurrency: g ?? s.typeAwareConcurrency,\n typeAwareFileConcurrency: w ?? s.typeAwareFileConcurrency,\n typeAwareIsolation: function(e) {\n if (void 0 !== e) {\n if (!TYPE_AWARE_ISOLATION_MODES.includes(e)) throw Error(`Invalid --type-aware-isolation \"${e}\". Expected one of: ${TYPE_AWARE_ISOLATION_MODES.join(', ')}.`);\n return e;\n }\n }(e.typeAwareIsolation) ?? s.typeAwareIsolation,\n typeAwareChunkStrategy: function(e) {\n if (void 0 !== e) {\n if (!TYPE_AWARE_CHUNK_STRATEGIES.includes(e)) throw Error(`Invalid --type-aware-chunk-strategy \"${e}\". Expected one of: ${TYPE_AWARE_CHUNK_STRATEGIES.join(', ')}.`);\n return e;\n }\n }(e.typeAwareChunkStrategy) ?? s.typeAwareChunkStrategy\n });\n c = i(A, a.cwd());\n let S = function(e, r) {\n if (e) return normalizeReporterFormat(e);\n switch(r){\n case 'json':\n return 'json';\n case 'sarif':\n return 'sarif';\n case 'html':\n return 'html';\n default:\n return 'console';\n }\n }(e.format, A.outputFormat);\n p = n(S, {\n compact: !!e.compact,\n outputPath: e.output ?? A.outputPath,\n quiet: !!e.quiet,\n noRecommendation: !1 === e.recommendation\n });\n let $ = await discoverFilesStep(A, e, c, p);\n if (!$) {\n d = 1;\n return;\n }\n let v = await resolveRulesStep(A, e, p);\n if (!v) {\n d = 1;\n return;\n }\n let P = await buildPlanStep($, v, c, e, p, A, E.maxWorkers);\n if (!P) {\n d = 1;\n return;\n }\n let R = 'console' === S ? a.stdout : a.stderr, F = new u(R), O = P.tasks.length + (P.skippedTasks?.length ?? 0), x = e.mode ?? 'balanced';\n F.start(formatAnalysisProgressMessage(x, 0, O));\n let b = function(e, o, n) {\n let a = new Map(), i = new Map();\n for (let r of e.tasks){\n let e = r.filePath;\n 'string' == typeof e && 0 !== e.length && (r.needsTypeChecker || r.needsProjectContext ? i.set(e, (i.get(e) ?? 0) + 1) : a.set(e, (a.get(e) ?? 0) + 1));\n }\n let s = new Map(), u = new Map(), l = new Set(), p = new Set(), c = (e, r)=>{\n let t = e.get(r.filePath), o = t ? {\n taskCount: t.taskCount + r.taskCount,\n issueCount: t.issueCount + r.issueCount,\n errorCount: t.errorCount + r.errorCount,\n warningCount: t.warningCount + r.warningCount,\n duration: t.duration + r.duration\n } : {\n taskCount: r.taskCount,\n issueCount: r.issueCount,\n errorCount: r.errorCount,\n warningCount: r.warningCount,\n duration: r.duration\n };\n return e.set(r.filePath, o), o;\n }, d = (e, a)=>{\n if (p.has(e)) return;\n p.add(e);\n let i = r.relative(n, e) || e, s = a.issueCount > 0, u = s ? t.red('❯') : t.green('❯'), l = s ? t.red(formatDuration(a.duration)) : t.green(formatDuration(a.duration));\n o(s ? `${u} ${t.red(i)} ${l} ${t.red(pluralise(a.issueCount, 'issue'))}` : `${u} ${t.dim(i)} ${l}`);\n };\n return (e)=>{\n let m = e.filePath;\n if (!p.has(m)) if (!1 === e.typeAware) {\n let u = c(s, e), f = a.get(m) ?? u.taskCount;\n if (u.taskCount < f) return;\n i.has(m) ? ((e, a)=>{\n if (l.has(e) || p.has(e)) return;\n l.add(e);\n let i = r.relative(n, e) || e, s = a.issueCount > 0, u = s ? t.red('❯') : t.green('❯'), c = s ? t.red(formatDuration(a.duration)) : t.green(formatDuration(a.duration));\n o(s ? `${u} ${t.red(i)} ${c} ${t.red(pluralise(a.issueCount, 'issue'))}` : `${u} ${t.dim(i)} ${c}`);\n })(m, u) : d(m, u);\n } else if (!0 === e.typeAware) {\n let r = c(u, e), t = i.get(m) ?? r.taskCount;\n if (r.taskCount < t) return;\n let o = s.get(m);\n d(m, o ? {\n taskCount: o.taskCount + r.taskCount,\n issueCount: o.issueCount + r.issueCount,\n errorCount: o.errorCount + r.errorCount,\n warningCount: o.warningCount + r.warningCount,\n duration: o.duration + r.duration\n } : r);\n } else {\n let r = (a.get(m) ?? 0) + (i.get(m) ?? 0), t = c(s, e);\n if (t.taskCount < (r || t.taskCount)) return;\n d(m, t);\n }\n };\n }(P, (e)=>F.writeLine(e), a.cwd()), T = await runAnalysisStep(P, c, E, e, p, $, A, (e, r)=>{\n F.update(formatAnalysisProgressMessage(x, e, r));\n }, b);\n if (F.stop(), !T) {\n d = 1;\n return;\n }\n let I = performance.now() - o, _ = {\n scannedFiles: new Set([\n ...P.tasks.map((e)=>e.filePath),\n ...(P.skippedTasks ?? []).map((e)=>e.filePath)\n ]).size,\n discoveredFiles: $.length,\n totalFiles: T.stats.totalFiles,\n totalTasks: P.tasks.length + (P.skippedTasks?.length ?? 0),\n cachedTasks: P.precomputedAnalysis ? P.tasks.length : void 0,\n totalErrors: T.stats.totalErrors,\n totalWarnings: T.stats.totalWarnings,\n failOnSeverity: A.failOnSeverity,\n maxWarnings: A.maxWarnings,\n duration: I\n };\n 'console' === S && p.summary(_), p.parseErrors(T.parseErrors), p.report(T.results), 'console' !== S && (p.step('❯ Writing report...'), p.summary(_)), P.precomputedAnalysis || await saveToCacheStep(T.results, c, e, p), m = T.stats, C = A.failOnSeverity ?? 'error', h = A.maxWarnings ?? 10, (m.totalErrors > 0 || 'warn' === C && m.totalWarnings > 0 || m.totalWarnings > h) && (d = 1);\n } catch (e) {\n p.error(e), d = 1;\n } finally{\n c && c !== l && await c.flush(), 0 !== d && s(d);\n }\n });\n}\nasync function loadConfigurationStep(e, r, t) {\n let o = performance.now();\n t.step('❯ Loading configuration...');\n let n = await y({\n profile: e.profile,\n cache: r,\n cwd: a.cwd()\n });\n if (!n.report.valid) {\n let e = n.report.issues.map((e)=>{\n let r = e.path?.join('.') || 'root';\n return `[${e.severity.toUpperCase()}] ${r}: ${e.message}`;\n });\n return t.error(Error([\n 'Configuration validation failed',\n ...e\n ].join('\\n'))), null;\n }\n if (!n.config) return t.error(Error('No configuration found')), null;\n let i = n.config.plugins;\n if (i && i.length > 0) {\n t.step(`❯ Loading ${i.length} plugin(s)...`);\n let e = a.cwd();\n await f(i, e, l()), t.info(`Loaded ${i.length} plugin(s)`);\n }\n return t.debug(`Config resolve: ${(performance.now() - o).toFixed(2)}ms`), {\n config: n.config\n };\n}\nasync function discoverFilesStep(e, t, n, i) {\n let s = performance.now();\n i.step('❯ Discovering files...');\n let u = await h({\n rootDir: a.cwd(),\n include: e.include ?? [\n ...o\n ],\n exclude: e.exclude ?? [],\n ignorePatterns: e.ignorePatterns,\n tsConfigPath: function(e, t) {\n if (!e?.project) return;\n let o = e.tsconfigRootDir ? r.resolve(t, e.tsconfigRootDir) : t;\n return r.resolve(o, e.project);\n }(e.parserOptions, a.cwd()),\n respectGitignore: !0,\n debug: t.debug,\n cache: n\n });\n return u.ok ? (i.info(`❯ Found ${u.data.files.length} files in ${(performance.now() - s).toFixed(0)}ms`), i.debug(`File discovery: ${(performance.now() - s).toFixed(2)}ms`), u.data.files) : (i.error(Error(`File discovery failed: ${u.error.message}`)), null);\n}\nasync function resolveRulesStep(e, r, t) {\n let o = performance.now();\n t.step('❯ Loading rules...');\n let n = e;\n r.rule && (t.info(`Filtering analysis to single rule: ${r.rule}`), n = {\n ...e,\n rules: {\n [r.rule]: 'error'\n },\n extends: []\n });\n let a = await d(n);\n if (!a.ok) return t.error(Error(`Rule resolution failed: ${a.error.message}`)), null;\n let i = m(a.data.rules);\n return t.info(`❯ Loaded ${i.size} active rules in ${(performance.now() - o).toFixed(0)}ms`), t.debug(`Rule resolution: ${(performance.now() - o).toFixed(2)}ms`), i;\n}\nasync function buildPlanStep(e, r, t, o, n, i, s) {\n let u = performance.now();\n n.step('❯ Planning analysis...');\n let l = await C({\n files: e,\n rules: r,\n rootDir: a.cwd(),\n cache: t,\n debug: o.debug,\n incremental: o.force ? {\n forceRerun: !0\n } : void 0,\n workerCount: s,\n overrides: i.overrides\n });\n return l.ok ? (l.data.precomputedAnalysis ? n.info('❯ Reused cached analysis plan') : n.info(`❯ Prepared ${l.data.tasks.length.toLocaleString()} checks in ${(performance.now() - u).toFixed(0)}ms`), n.debug(`Plan build: ${(performance.now() - u).toFixed(2)}ms`), l.data) : (n.error(Error(`Execution plan building failed: ${l.error.message}`)), null);\n}\nasync function runAnalysisStep(e, r, t, o, n, i, s, u, l) {\n let d = performance.now();\n w(p, c);\n let m = await g(e, {\n rootDir: a.cwd(),\n cache: r,\n debug: o.debug,\n files: i,\n maxWorkers: t.maxWorkers,\n typeAwareChunkSize: t.typeAwareChunkSize,\n typeAwareConcurrency: t.typeAwareConcurrency,\n typeAwareFileConcurrency: t.typeAwareFileConcurrency,\n typeAwareIsolation: t.typeAwareIsolation,\n typeAwareChunkStrategy: t.typeAwareChunkStrategy,\n skipTypeCheck: o.skipTypeCheck,\n parserOptions: s?.parserOptions,\n onProgress: u,\n onFileProgress: l\n });\n return m.ok ? (n.debug(`Execution: ${(performance.now() - d).toFixed(2)}ms`), m.data) : (n.error(Error(`Analysis failed: ${m.error.message}`)), null);\n}\nasync function saveToCacheStep(e, r, t, o) {\n if (!r) return;\n let n = performance.now(), a = [];\n for (let r of e)r.taskId && a.push([\n r.taskId,\n r\n ]);\n a.length > 0 && (await r.results.setMany(a), t.debug && o.debug(`Saved ${a.length} results to cache (${(performance.now() - n).toFixed(2)}ms)`));\n}\n","import { getConfigReporter as o } from '@ngcompass/reporters';\nimport { validateConfig as r } from '@ngcompass/config';\nimport { exitWithError as e } from './exit.js';\nexport function registerConfigCommand(i, t) {\n i.command('config').description('Inspect and validate ngcompass configuration').command('health').description('Run semantic validation checks for the active configuration').option('-p, --profile <name>', 'Configuration profile to validate').action(async (i)=>{\n try {\n let a = await r({\n cache: i.cache ? t : void 0,\n profile: i.profile\n }), n = o();\n await n.renderHealthReport(a.report), a.report.valid || e();\n } catch (r) {\n let o = r instanceof Error ? r.message : String(r);\n console.error(`Error: ${o}`), e();\n }\n });\n}\n","import { createRuntimeCache as e } from '@ngcompass/cache';\nimport { getCacheReporter as o } from '@ngcompass/reporters';\nimport { resolveConfig as a } from '@ngcompass/config';\nimport r from 'picocolors';\nimport t from 'node:process';\nimport { exitWithError as i } from './exit.js';\nexport function registerCacheCommand(e, a) {\n let c = e.command('cache').description('Inspect and manage analysis cache data');\n c.command('clear').description('Clear cached data for one cache type or all cache types').option('-p, --profile <name>', 'Configuration profile used to resolve cache settings').option('--type <type>', 'Cache type to clear: ast | config | results | all', 'all').action(async (e)=>{\n let c = o();\n t.stdout.write(r.dim(' › Clearing cache...\\n'));\n let l = e.type, n = [\n 'ast',\n 'config',\n 'results',\n 'all'\n ];\n n.includes(l) || (console.error(r.red(`Invalid cache type: ${l}. Must be one of: ${n.join(', ')}`)), i());\n try {\n let o = await resolveRuntimeCache(a, {\n profile: e.profile,\n allowDisabled: !0\n });\n 'all' === l ? await o.clear() : await o.clearType(l), c.renderClearResult(l);\n } catch (e) {\n console.error(r.red('Error clearing cache:'), e), i();\n }\n }), c.command('info').description('Show cache status, size, and usage details').option('-p, --profile <name>', 'Configuration profile used to resolve cache settings').action(async (e)=>{\n let t = o();\n try {\n let o = await resolveRuntimeCache(a, {\n profile: e.profile,\n allowDisabled: !0\n }), r = await o.getInfo();\n t.renderCacheInfo(r);\n } catch (e) {\n console.error(r.red('Error getting cache info:'), e), i();\n }\n }), c.command('path').description('Print the resolved cache directory path').option('-p, --profile <name>', 'Configuration profile used to resolve cache settings').action(async (e)=>{\n let o = await resolveRuntimeCache(a, {\n profile: e.profile,\n allowDisabled: !0\n });\n t.stdout.write(`${o.getCachePath()}\\n`);\n });\n}\nasync function resolveRuntimeCache(o, r = {}) {\n let i = r.cwd ?? t.cwd();\n try {\n let t = await a({\n profile: r.profile,\n cache: o,\n cwd: i\n });\n if (!t.report.valid || !t.config) return o;\n return e(t.config, i, {\n allowDisabled: r.allowDisabled\n }) ?? o;\n } catch {\n return o;\n }\n}\n","import { getRulesReporter as e } from '@ngcompass/reporters';\nimport { getRuleListEntries as r, isBuiltinPreset as o } from '@ngcompass/rules';\nimport s from 'picocolors';\nimport { exitWithError as t } from './exit.js';\nexport function registerRulesCommand(i) {\n i.command('rules [ruleName]').description('Browse available rules or inspect details for a specific rule').option('--preset <name>', 'Filter by preset: recommended, strict, performance, reactivity, or all').action((i, l)=>{\n l.preset && !o(l.preset) && (console.error(s.red(`Unknown preset: \"${l.preset}\".`)), console.error(s.dim('Available presets: recommended, strict, all, performance, reactivity')), t());\n let n = r(), m = e({\n preset: l.preset\n });\n if (i) {\n let e = n.find((e)=>e.name === i);\n if (!e) {\n console.error(s.red(`Rule \"${i}\" not found.`)), console.error(s.dim('Run `ngcompass rules` to list available rules.')), t();\n return;\n }\n m.renderSingleRule(e);\n } else m.render(n);\n });\n}\n","import { registerInitCommand as o } from './init.js';\nimport { registerAnalyzeCommand as r } from './analyze.js';\nimport { registerConfigCommand as m } from './config.js';\nimport { registerCacheCommand as i } from './cache.js';\nimport { registerRulesCommand as t } from './rules.js';\nexport function registerCommands(s, f) {\n o(s, f), r(s, f), m(s, f), i(s, f), t(s);\n}\n","import { Command as r } from 'commander';\nimport { registerCommands as o } from '../commands/index.js';\nimport { enableDebug as e, PACKAGE_VERSION as s } from '@ngcompass/common';\nimport { createCacheContext as n } from '@ngcompass/cache';\nimport { registerAllBuiltinRules as t } from '@ngcompass/rules';\nlet restoreCursor = ()=>{\n process.stdout.isTTY && process.stdout.write('\\x1B[?25h');\n}, shutdownInProgress = !1, gracefulShutdown = async (r, o)=>{\n if (!shutdownInProgress) {\n if (shutdownInProgress = !0, restoreCursor(), r) try {\n let o = new Promise((r)=>setTimeout(r, 10_000).unref());\n await Promise.race([\n r.flush(),\n o\n ]);\n } catch {}\n process.exit(o);\n }\n};\nexport async function run() {\n let a = new r();\n a.name('ngcompass').description('Static analysis and architecture insights for Angular codebases.').version(s, '-V, --version', 'Display ngcompass version').option('--debug', 'Enable detailed debug logs across all modules').addHelpText('after', '\\nExamples:\\n $ ngcompass init\\n $ ngcompass analyze --profile strict\\n $ ngcompass cache info\\n').hook('preAction', async (r, o)=>{\n r.opts().debug && e('debug', 'all');\n let n = o.opts();\n if ('json' !== n.format && 'sarif' !== n.format && 'html' !== n.format && 'ui' !== n.format) {\n let { default: r } = await import('picocolors'), e = o.parent, n = e && 'ngcompass' !== e.name() ? e.name() : o.name(), t = process.cwd();\n process.stdout.write(`\\n${r.dim('>')} ${r.dim(`ngcompass@${s}`)} ${r.dim(n)} ${r.dim(t)}\\n${r.dim('>')} ${r.dim('ngcompass')} ${r.dim('run')}\\n\\n ${r.bgCyan(r.white(r.bold(` ${n.toUpperCase()} `)))} ${r.cyan(s)} ${r.dim(t)}\\n\\n`);\n }\n });\n let c = n();\n process.on('SIGINT', ()=>void gracefulShutdown(c, 130)), process.on('SIGTERM', ()=>void gracefulShutdown(c, 143)), process.on('uncaughtException', (r)=>{\n restoreCursor(), console.error(`\\n[ngcompass] Unexpected error: ${r.message}`), gracefulShutdown(c, 1);\n }), process.on('unhandledRejection', (r)=>{\n restoreCursor();\n let o = r instanceof Error ? r.message : String(r);\n console.error(`\\n[ngcompass] Unhandled promise rejection: ${o}`), gracefulShutdown(c, 1);\n });\n try {\n if (t(), o(a, c), !process.argv.slice(2).length) return void a.outputHelp();\n await a.parseAsync(process.argv), await c.flush(), process.exit(0);\n } catch (o) {\n restoreCursor();\n let r = o instanceof Error ? o.message : String(o);\n console.error(`[ngcompass] Fatal error: ${r}`), await gracefulShutdown(c, 1);\n }\n}\nrun().catch((r)=>{\n restoreCursor();\n let o = r instanceof Error ? r.message : String(r);\n console.error(`[ngcompass] Fatal error: ${o}`), process.exit(1);\n});\n"]}
package/dist/cli.js CHANGED
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import {getConfigReporter,getReporter,getCacheReporter,getRulesReporter}from'@ngcompass/reporters';import {initConfig,validateConfig,resolveConfig,loadPlugins}from'@ngcompass/config';import D from'path';import C from'picocolors';import {PACKAGE_VERSION,enableDebug,DEFAULT_INCLUDE_PATTERNS}from'@ngcompass/common';import f from'process';import {createCacheContext,createRuntimeCache}from'@ngcompass/cache';import {registerAllBuiltinRules,isBuiltinPreset,getRuleListEntries,getGlobalRegistry,resolveRules,getEnabledRules,executeBatchedNewEngineRules,isNewEngineRule}from'@ngcompass/rules';import {configureRuleExecutor,runAnalysis}from'@ngcompass/engine';import {buildExecutionPlan}from'@ngcompass/planner';import {scan}from'@ngcompass/scanner';var c=(o=1)=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h"),process.exit(o);};function G(o,r){o.command("init").description("Create a starter ngcompass configuration in the current project").option("-f, --force","Overwrite an existing configuration file").option("--cwd <path>","Project directory where the configuration will be created",process.cwd()).action(async e=>{try{let i=await initConfig({cwd:e.cwd,force:e.force});await getConfigReporter().renderInitResult(i),i.success||i.alreadyExists||c();}catch(i){console.error(i instanceof Error?i.message:String(i)),c();}});}var _=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],S=class{stream;timer=null;frameIndex=0;message="";isTTY;constructor(r){this.stream=r,this.isTTY=!!r.isTTY;}start(r){this.message=r,this.frameIndex=0,this.isTTY?(this.stream.write("\x1B[?25l"),this.render(),this.timer=setInterval(()=>this.render(),80)):this.stream.write(`${C.cyan("\u276F")} ${C.dim(r)}
3
- `);}writeLine(r){this.isTTY&&this.timer?(this.stream.write("\r\x1B[K"),this.stream.write(`${r}
2
+ import {Command,Option}from'commander';import {getConfigReporter,getReporter,getCacheReporter,getRulesReporter}from'@ngcompass/reporters';import {initConfig,validateConfig,resolveConfig,loadPlugins}from'@ngcompass/config';import L from'path';import h from'picocolors';import {PACKAGE_VERSION,enableDebug,DEFAULT_INCLUDE_PATTERNS}from'@ngcompass/common';import k from'process';import {createCacheContext,createRuntimeCache}from'@ngcompass/cache';import {registerAllBuiltinRules,isBuiltinPreset,getRuleListEntries,getGlobalRegistry,resolveRules,getEnabledRules,executeBatchedNewEngineRules,isNewEngineRule}from'@ngcompass/rules';import {configureRuleExecutor,runAnalysis}from'@ngcompass/engine';import {buildExecutionPlan}from'@ngcompass/planner';import {scan}from'@ngcompass/scanner';var f=(t=1)=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h"),process.exit(t);};function ce(t,r){t.command("init").description("Create a starter ngcompass configuration in the current project").option("-f, --force","Overwrite an existing configuration file").option("--cwd <path>","Project directory where the configuration will be created",process.cwd()).action(async e=>{try{let o=await initConfig({cwd:e.cwd,force:e.force});await getConfigReporter().renderInitResult(o),o.success||o.alreadyExists||f();}catch(o){console.error(o instanceof Error?o.message:String(o)),f();}});}var le=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],j=class{stream;timer=null;frameIndex=0;message="";isTTY;constructor(r){this.stream=r,this.isTTY=!!r.isTTY;}start(r){this.message=r,this.frameIndex=0,this.isTTY?(this.stream.write("\x1B[?25l"),this.render(),this.timer=setInterval(()=>this.render(),80)):this.stream.write(`${h.cyan("\u276F")} ${h.dim(r)}
3
+ `);}update(r){this.message=r,this.isTTY&&this.timer&&this.render();}writeLine(r){this.isTTY&&this.timer?(this.stream.write("\r\x1B[K"),this.stream.write(`${r}
4
4
  `),this.render()):this.stream.write(`${r}
5
- `);}stop(){this.timer&&(clearInterval(this.timer),this.timer=null),this.isTTY&&(this.stream.write("\r\x1B[K"),this.stream.write("\x1B[?25h"));}render(){let r=C.cyan(_[this.frameIndex%_.length]);this.frameIndex++,this.stream.write(`\r${r} ${C.dim(this.message)}`);}};function K(o){return o==="ui"?"html":o??"console"}function V(o){return o<1e3?`${Math.max(0,Math.round(o))}ms`:`${(o/1e3).toFixed(1)}s`}function J(o,r){o.command("analyze").description("Analyze your project and report rule violations and architecture risks").option("-p, --profile <name>","Configuration profile to run").option("--force","Ignore cached results and re-run all checks").option("--format <fmt>","Reporter format: console | json | sarif | html | ui").option("--compact","Use compact, ESLint-style output").option("-q, --quiet","Show summary counts only, suppress violation details").option("--no-recommendation","Suppress fix recommendations from output").option("--output <path>","Output path for UI reports (default: ngcompass-report.html)").option("--rule <id>","Run only one rule (useful for debugging or focused checks)").option("--max-workers <n>","Cap the number of worker threads (lower = less memory, e.g. --max-workers 2)").option("--type-aware-chunk-size <n>","Files per type-aware chunk (default 400; lower = less peak memory)").option("--skip-type-check","Skip rules that require the TypeScript type checker (fastest, lowest memory)").action(async e=>{let i=performance.now(),n=getReporter(K(e.format),{compact:!!e.compact,outputPath:e.output,quiet:!!e.quiet,noRecommendation:e.recommendation===false}),t=r,a=0;try{var s;let p,k,E=await ke(e,r,n);if(!E){a=1;return}let{config:m}=E;t=createRuntimeCache(m,f.cwd());let g=(function(d,I){if(d)return K(d);switch(I){case "json":return "json";case "sarif":return "sarif";case "html":return "html";default:return "console"}})(e.format,m.outputFormat);n=getReporter(g,{compact:!!e.compact,outputPath:e.output??m.outputPath,quiet:!!e.quiet,noRecommendation:e.recommendation===!1});let R=await Ee(m,e,t,n);if(!R){a=1;return}let B=await Re(m,e,n);if(!B){a=1;return}let u=await be(R,B,t,e,n,m);if(!u){a=1;return}let oe=g==="console"?f.stdout:f.stderr,F=new S(oe);F.start("Running analysis...");let ie=(function(d,I,ae){let A=new Map;for(let l of d.tasks.map(w=>w.filePath).filter(w=>typeof w=="string"&&w.length>0))A.set(l,(A.get(l)??0)+1);let U=new Map,M=new Set;return l=>{var w;if(M.has(l.filePath))return;let x=U.get(l.filePath),y=x?{filePath:l.filePath,taskCount:x.taskCount+l.taskCount,issueCount:x.issueCount+l.issueCount,errorCount:x.errorCount+l.errorCount,warningCount:x.warningCount+l.warningCount,duration:x.duration+l.duration}:l;U.set(l.filePath,y);let se=A.get(l.filePath)??y.taskCount;if(y.taskCount<se)return;M.add(l.filePath);let N=D.relative(ae,l.filePath)||l.filePath,W=y.issueCount>0,Y=W?C.red("\u276F"):C.green("\u276F"),q=W?C.red(V(y.duration)):C.green(V(y.duration));I(W?`${Y} ${C.red(N)} ${q} ${C.red((w=y.issueCount,`${w.toLocaleString()} issue${w===1?"":"s"}`))}`:`${Y} ${C.dim(N)} ${q}`);}})(u,d=>F.writeLine(d),f.cwd()),h=await Se(u,t,e,n,R,m,void 0,m.maxWorkers,ie);if(F.stop(),!h){a=1;return}let ne=performance.now()-i,O={scannedFiles:new Set([...u.tasks.map(d=>d.filePath),...(u.skippedTasks??[]).map(d=>d.filePath)]).size,discoveredFiles:R.length,totalFiles:h.stats.totalFiles,totalTasks:u.tasks.length+(u.skippedTasks?.length??0),cachedTasks:u.precomputedAnalysis?u.tasks.length:void 0,totalErrors:h.stats.totalErrors,totalWarnings:h.stats.totalWarnings,failOnSeverity:m.failOnSeverity,maxWarnings:m.maxWarnings,duration:ne};g==="console"&&n.summary(O),n.parseErrors(h.parseErrors),n.report(h.results),g!=="console"&&(n.step("\u276F Writing report..."),n.summary(O)),u.precomputedAnalysis||await Pe(h.results,t,e,n),s=h.stats,p=m.failOnSeverity??"error",k=m.maxWarnings??10,(s.totalErrors>0||p==="warn"&&s.totalWarnings>0||s.totalWarnings>k)&&(a=1);}catch(p){n.error(p),a=1;}finally{t&&t!==r&&await t.flush(),a!==0&&c(a);}});}async function ke(o,r,e){let i=performance.now();e.step("\u276F Loading configuration...");let n=await resolveConfig({profile:o.profile,cache:r,cwd:f.cwd()});if(!n.report.valid){let a=n.report.issues.map(s=>{let p=s.path?.join(".")||"root";return `[${s.severity.toUpperCase()}] ${p}: ${s.message}`});return e.error(Error(["Configuration validation failed",...a].join(`
6
- `))),null}if(!n.config)return e.error(Error("No configuration found")),null;let t=n.config.plugins;if(t&&t.length>0){e.step(`\u276F Loading ${t.length} plugin(s)...`);let a=f.cwd();await loadPlugins(t,a,getGlobalRegistry()),e.info(`Loaded ${t.length} plugin(s)`);}return e.debug(`Config resolve: ${(performance.now()-i).toFixed(2)}ms`),{config:n.config}}async function Ee(o,r,e,i){let n=performance.now();i.step("\u276F Discovering files...");let t=await scan({rootDir:f.cwd(),include:o.include??[...DEFAULT_INCLUDE_PATTERNS],exclude:o.exclude??[],ignorePatterns:o.ignorePatterns,tsConfigPath:(function(a,s){if(!a?.project)return;let p=a.tsconfigRootDir?D.resolve(s,a.tsconfigRootDir):s;return D.resolve(p,a.project)})(o.parserOptions,f.cwd()),respectGitignore:true,debug:r.debug,cache:e});return t.ok?(i.info(`\u276F Found ${t.data.files.length} files in ${(performance.now()-n).toFixed(0)}ms`),i.debug(`File discovery: ${(performance.now()-n).toFixed(2)}ms`),t.data.files):(i.error(Error(`File discovery failed: ${t.error.message}`)),null)}async function Re(o,r,e){let i=performance.now();e.step("\u276F Loading rules...");let n=o;r.rule&&(e.info(`Filtering analysis to single rule: ${r.rule}`),n={...o,rules:{[r.rule]:"error"},extends:[]});let t=await resolveRules(n);if(!t.ok)return e.error(Error(`Rule resolution failed: ${t.error.message}`)),null;let a=getEnabledRules(t.data.rules);return e.info(`\u276F Loaded ${a.size} active rules in ${(performance.now()-i).toFixed(0)}ms`),e.debug(`Rule resolution: ${(performance.now()-i).toFixed(2)}ms`),a}async function be(o,r,e,i,n,t){let a=performance.now();n.step("\u276F Planning analysis...");let s=await buildExecutionPlan({files:o,rules:r,rootDir:f.cwd(),cache:e,debug:i.debug,incremental:i.force?{forceRerun:true}:void 0,workerCount:t.maxWorkers,overrides:t.overrides});return s.ok?(s.data.precomputedAnalysis?n.info("\u276F Reused cached analysis plan"):n.info(`\u276F Prepared ${s.data.tasks.length.toLocaleString()} checks in ${(performance.now()-a).toFixed(0)}ms`),n.debug(`Plan build: ${(performance.now()-a).toFixed(2)}ms`),s.data):(n.error(Error(`Execution plan building failed: ${s.error.message}`)),null)}async function Se(o,r,e,i,n,t,a,s,p){let k=performance.now();configureRuleExecutor(executeBatchedNewEngineRules,isNewEngineRule);let E=e.maxWorkers?parseInt(e.maxWorkers,10):void 0,m=e.typeAwareChunkSize?parseInt(e.typeAwareChunkSize,10):void 0,g=await runAnalysis(o,{rootDir:f.cwd(),cache:r,debug:e.debug,files:n,maxWorkers:E??t?.maxWorkers,typeAwareChunkSize:m,skipTypeCheck:e.skipTypeCheck,parserOptions:t?.parserOptions,onProgress:a,onFileProgress:p});return g.ok?(i.debug(`Execution: ${(performance.now()-k).toFixed(2)}ms`),g.data):(i.error(Error(`Analysis failed: ${g.error.message}`)),null)}async function Pe(o,r,e,i){if(!r)return;let n=performance.now(),t=[];for(let a of o)a.taskId&&t.push([a.taskId,a]);t.length>0&&(await r.results.setMany(t),e.debug&&i.debug(`Saved ${t.length} results to cache (${(performance.now()-n).toFixed(2)}ms)`));}function Q(o,r){o.command("config").description("Inspect and validate ngcompass configuration").command("health").description("Run semantic validation checks for the active configuration").option("-p, --profile <name>","Configuration profile to validate").action(async e=>{try{let i=await validateConfig({cache:e.cache?r:void 0,profile:e.profile});await getConfigReporter().renderHealthReport(i.report),i.report.valid||c();}catch(i){let n=i instanceof Error?i.message:String(i);console.error(`Error: ${n}`),c();}});}function Z(o,r){let e=o.command("cache").description("Inspect and manage analysis cache data");e.command("clear").description("Clear cached data for one cache type or all cache types").option("-p, --profile <name>","Configuration profile used to resolve cache settings").option("--type <type>","Cache type to clear: ast | config | results | all","all").action(async i=>{let n=getCacheReporter();f.stdout.write(C.dim(` \u203A Clearing cache...
7
- `));let t=i.type,a=["ast","config","results","all"];a.includes(t)||(console.error(C.red(`Invalid cache type: ${t}. Must be one of: ${a.join(", ")}`)),c());try{let s=await j(r,{profile:i.profile,allowDisabled:!0});t==="all"?await s.clear():await s.clearType(t),n.renderClearResult(t);}catch(s){console.error(C.red("Error clearing cache:"),s),c();}}),e.command("info").description("Show cache status, size, and usage details").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async i=>{let n=getCacheReporter();try{let t=await j(r,{profile:i.profile,allowDisabled:!0}),a=await t.getInfo();n.renderCacheInfo(a);}catch(t){console.error(C.red("Error getting cache info:"),t),c();}}),e.command("path").description("Print the resolved cache directory path").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async i=>{let n=await j(r,{profile:i.profile,allowDisabled:true});f.stdout.write(`${n.getCachePath()}
8
- `);});}async function j(o,r={}){let e=r.cwd??f.cwd();try{let i=await resolveConfig({profile:r.profile,cache:o,cwd:e});return !i.report.valid||!i.config?o:createRuntimeCache(i.config,e,{allowDisabled:r.allowDisabled})??o}catch{return o}}function ee(o){o.command("rules [ruleName]").description("Browse available rules or inspect details for a specific rule").option("--preset <name>","Filter by preset: recommended, strict, performance, reactivity, or all").action((r,e)=>{e.preset&&!isBuiltinPreset(e.preset)&&(console.error(C.red(`Unknown preset: "${e.preset}".`)),console.error(C.dim("Available presets: recommended, strict, all, performance, reactivity")),c());let i=getRuleListEntries(),n=getRulesReporter({preset:e.preset});if(r){let t=i.find(a=>a.name===r);if(!t){console.error(C.red(`Rule "${r}" not found.`)),console.error(C.dim("Run `ngcompass rules` to list available rules.")),c();return}n.renderSingleRule(t);}else n.render(i);});}function re(o,r){G(o),J(o,r),Q(o,r),Z(o,r),ee(o);}var v=()=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h");},te=false,$=async(o,r)=>{if(!te){if(te=true,v(),o)try{let e=new Promise(i=>setTimeout(i,1e4).unref());await Promise.race([o.flush(),e]);}catch{}process.exit(r);}};async function Ue(){let o=new Command;o.name("ngcompass").description("Static analysis and architecture insights for Angular codebases.").version(PACKAGE_VERSION,"-V, --version","Display ngcompass version").option("--debug","Enable detailed debug logs across all modules").addHelpText("after",`
5
+ `);}stop(){this.timer&&(clearInterval(this.timer),this.timer=null),this.isTTY&&(this.stream.write("\r\x1B[K"),this.stream.write("\x1B[?25h"));}render(){let r=h.cyan(le[this.frameIndex%le.length]);this.frameIndex++,this.stream.write(`\r\x1B[K${r} ${h.dim(this.message)}`);}};var we={eco:{typeAwareConcurrency:1,typeAwareFileConcurrency:1,typeAwareChunkSize:100,typeAwareIsolation:"auto",typeAwareChunkStrategy:"dependency"},balanced:{typeAwareConcurrency:2,typeAwareFileConcurrency:2,typeAwareChunkSize:300,typeAwareIsolation:"auto",typeAwareChunkStrategy:"simple"},turbo:{typeAwareConcurrency:2,typeAwareFileConcurrency:4,typeAwareChunkSize:500,typeAwareIsolation:"off",typeAwareChunkStrategy:"simple"}},pe=Object.keys(we),me=["auto","process","off"],de=["dependency","simple"];function z(t,r){if(t===void 0)return;let e=Number(t);if(!Number.isInteger(e)||e<1)throw Error(`${r} must be a positive integer.`);return e}function fe(t){return t==="ui"?"html":t??"console"}function D(t){return t<1e3?`${Math.max(0,Math.round(t))}ms`:`${(t/1e3).toFixed(1)}s`}function ge(t,r){return `${t.toLocaleString()} ${r}${t===1?"":"s"}`}function he(t,r,e){return `Running analysis in ${t} mode: ${r.toLocaleString()}/${e.toLocaleString()} checks complete...`}function ye(t,r){t.command("analyze").description("Analyze your project and report rule violations and architecture risks").option("-p, --profile <name>","Configuration profile to run").option("--force","Ignore cached results and re-run all checks").option("--format <fmt>","Reporter format: console | json | sarif | html | ui").option("--compact","Use compact, ESLint-style output").option("-q, --quiet","Show summary counts only, suppress violation details").option("--no-recommendation","Suppress fix recommendations from output").option("--output <path>","Output path for UI reports (default: ngcompass-report.html)").option("--rule <id>","Run only one rule (useful for debugging or focused checks)").option("--mode <mode>","Performance mode: eco | balanced | turbo (default: balanced)","balanced").option("--max-workers <n>","Cap the number of worker threads (lower = less memory, e.g. --max-workers 2)").addOption(new Option("--type-aware-chunk-size <n>","Files per type-aware chunk").hideHelp()).addOption(new Option("--type-aware-concurrency <n>","Concurrent type-aware chunks").hideHelp()).addOption(new Option("--type-aware-file-concurrency <n>","Concurrent files per type-aware chunk").hideHelp()).addOption(new Option("--type-aware-isolation <mode>","Type-aware isolation: auto | process | off").hideHelp()).addOption(new Option("--type-aware-chunk-strategy <mode>","Type-aware chunk ordering: dependency | simple").hideHelp()).option("--skip-type-check","Skip rules that require the TypeScript type checker (fastest, lowest memory)").action(async e=>{let o=performance.now(),a=getReporter(fe(e.format),{compact:!!e.compact,outputPath:e.output,quiet:!!e.quiet,noRecommendation:e.recommendation===false}),n=r,i=0;try{var l;let p,R,A,K,V,J,Q,X=await He(e,r,a);if(!X){i=1;return}let{config:w}=X,Z=(p=we[(function(u){let C=u??"balanced";if(!pe.includes(C))throw Error(`Invalid performance mode "${C}". Expected one of: ${pe.join(", ")}.`);return C})(e.mode)],R=z(e.maxWorkers,"--max-workers"),A=z(e.typeAwareChunkSize,"--type-aware-chunk-size"),K=z(e.typeAwareConcurrency,"--type-aware-concurrency"),V=z(e.typeAwareFileConcurrency,"--type-aware-file-concurrency"),{maxWorkers:R??w.maxWorkers,typeAwareChunkSize:A??p.typeAwareChunkSize,typeAwareConcurrency:K??p.typeAwareConcurrency,typeAwareFileConcurrency:V??p.typeAwareFileConcurrency,typeAwareIsolation:(function(u){if(u!==void 0){if(!me.includes(u))throw Error(`Invalid --type-aware-isolation "${u}". Expected one of: ${me.join(", ")}.`);return u}})(e.typeAwareIsolation)??p.typeAwareIsolation,typeAwareChunkStrategy:(function(u){if(u!==void 0){if(!de.includes(u))throw Error(`Invalid --type-aware-chunk-strategy "${u}". Expected one of: ${de.join(", ")}.`);return u}})(e.typeAwareChunkStrategy)??p.typeAwareChunkStrategy});n=createRuntimeCache(w,k.cwd());let T=(function(u,C){if(u)return fe(u);switch(C){case "json":return "json";case "sarif":return "sarif";case "html":return "html";default:return "console"}})(e.format,w.outputFormat);a=getReporter(T,{compact:!!e.compact,outputPath:e.output??w.outputPath,quiet:!!e.quiet,noRecommendation:e.recommendation===!1});let I=await qe(w,e,n,a);if(!I){i=1;return}let ee=await Ge(w,e,a);if(!ee){i=1;return}let y=await Ke(I,ee,n,e,a,w,Z.maxWorkers);if(!y){i=1;return}let Ee=T==="console"?k.stdout:k.stderr,F=new j(Ee),Se=y.tasks.length+(y.skippedTasks?.length??0),re=e.mode??"balanced";F.start(he(re,0,Se));let be=(function(u,C,oe){let P=new Map,v=new Map;for(let m of u.tasks){let s=m.filePath;typeof s=="string"&&s.length!==0&&(m.needsTypeChecker||m.needsProjectContext?v.set(s,(v.get(s)??0)+1):P.set(s,(P.get(s)??0)+1));}let _=new Map,Te=new Map,ne=new Set,O=new Set,B=(m,s)=>{let c=m.get(s.filePath),g=c?{taskCount:c.taskCount+s.taskCount,issueCount:c.issueCount+s.issueCount,errorCount:c.errorCount+s.errorCount,warningCount:c.warningCount+s.warningCount,duration:c.duration+s.duration}:{taskCount:s.taskCount,issueCount:s.issueCount,errorCount:s.errorCount,warningCount:s.warningCount,duration:s.duration};return m.set(s.filePath,g),g},Y=(m,s)=>{if(O.has(m))return;O.add(m);let c=L.relative(oe,m)||m,g=s.issueCount>0,d=g?h.red("\u276F"):h.green("\u276F"),x=g?h.red(D(s.duration)):h.green(D(s.duration));C(g?`${d} ${h.red(c)} ${x} ${h.red(ge(s.issueCount,"issue"))}`:`${d} ${h.dim(c)} ${x}`);};return m=>{let s=m.filePath;if(!O.has(s))if(m.typeAware===!1){let c=B(_,m),g=P.get(s)??c.taskCount;if(c.taskCount<g)return;v.has(s)?((d,x)=>{if(ne.has(d)||O.has(d))return;ne.add(d);let ae=L.relative(oe,d)||d,U=x.issueCount>0,ie=U?h.red("\u276F"):h.green("\u276F"),se=U?h.red(D(x.duration)):h.green(D(x.duration));C(U?`${ie} ${h.red(ae)} ${se} ${h.red(ge(x.issueCount,"issue"))}`:`${ie} ${h.dim(ae)} ${se}`);})(s,c):Y(s,c);}else if(m.typeAware===!0){let c=B(Te,m),g=v.get(s)??c.taskCount;if(c.taskCount<g)return;let d=_.get(s);Y(s,d?{taskCount:d.taskCount+c.taskCount,issueCount:d.issueCount+c.issueCount,errorCount:d.errorCount+c.errorCount,warningCount:d.warningCount+c.warningCount,duration:d.duration+c.duration}:c);}else {let c=(P.get(s)??0)+(v.get(s)??0),g=B(_,m);if(g.taskCount<(c||g.taskCount))return;Y(s,g);}}})(y,u=>F.writeLine(u),k.cwd()),$=await Ve(y,n,Z,e,a,I,w,(u,C)=>{F.update(he(re,u,C));},be);if(F.stop(),!$){i=1;return}let Re=performance.now()-o,te={scannedFiles:new Set([...y.tasks.map(u=>u.filePath),...(y.skippedTasks??[]).map(u=>u.filePath)]).size,discoveredFiles:I.length,totalFiles:$.stats.totalFiles,totalTasks:y.tasks.length+(y.skippedTasks?.length??0),cachedTasks:y.precomputedAnalysis?y.tasks.length:void 0,totalErrors:$.stats.totalErrors,totalWarnings:$.stats.totalWarnings,failOnSeverity:w.failOnSeverity,maxWarnings:w.maxWarnings,duration:Re};T==="console"&&a.summary(te),a.parseErrors($.parseErrors),a.report($.results),T!=="console"&&(a.step("\u276F Writing report..."),a.summary(te)),y.precomputedAnalysis||await Je($.results,n,e,a),l=$.stats,J=w.failOnSeverity??"error",Q=w.maxWarnings??10,(l.totalErrors>0||J==="warn"&&l.totalWarnings>0||l.totalWarnings>Q)&&(i=1);}catch(p){a.error(p),i=1;}finally{n&&n!==r&&await n.flush(),i!==0&&f(i);}});}async function He(t,r,e){let o=performance.now();e.step("\u276F Loading configuration...");let a=await resolveConfig({profile:t.profile,cache:r,cwd:k.cwd()});if(!a.report.valid){let i=a.report.issues.map(l=>{let p=l.path?.join(".")||"root";return `[${l.severity.toUpperCase()}] ${p}: ${l.message}`});return e.error(Error(["Configuration validation failed",...i].join(`
6
+ `))),null}if(!a.config)return e.error(Error("No configuration found")),null;let n=a.config.plugins;if(n&&n.length>0){e.step(`\u276F Loading ${n.length} plugin(s)...`);let i=k.cwd();await loadPlugins(n,i,getGlobalRegistry()),e.info(`Loaded ${n.length} plugin(s)`);}return e.debug(`Config resolve: ${(performance.now()-o).toFixed(2)}ms`),{config:a.config}}async function qe(t,r,e,o){let a=performance.now();o.step("\u276F Discovering files...");let n=await scan({rootDir:k.cwd(),include:t.include??[...DEFAULT_INCLUDE_PATTERNS],exclude:t.exclude??[],ignorePatterns:t.ignorePatterns,tsConfigPath:(function(i,l){if(!i?.project)return;let p=i.tsconfigRootDir?L.resolve(l,i.tsconfigRootDir):l;return L.resolve(p,i.project)})(t.parserOptions,k.cwd()),respectGitignore:true,debug:r.debug,cache:e});return n.ok?(o.info(`\u276F Found ${n.data.files.length} files in ${(performance.now()-a).toFixed(0)}ms`),o.debug(`File discovery: ${(performance.now()-a).toFixed(2)}ms`),n.data.files):(o.error(Error(`File discovery failed: ${n.error.message}`)),null)}async function Ge(t,r,e){let o=performance.now();e.step("\u276F Loading rules...");let a=t;r.rule&&(e.info(`Filtering analysis to single rule: ${r.rule}`),a={...t,rules:{[r.rule]:"error"},extends:[]});let n=await resolveRules(a);if(!n.ok)return e.error(Error(`Rule resolution failed: ${n.error.message}`)),null;let i=getEnabledRules(n.data.rules);return e.info(`\u276F Loaded ${i.size} active rules in ${(performance.now()-o).toFixed(0)}ms`),e.debug(`Rule resolution: ${(performance.now()-o).toFixed(2)}ms`),i}async function Ke(t,r,e,o,a,n,i){let l=performance.now();a.step("\u276F Planning analysis...");let p=await buildExecutionPlan({files:t,rules:r,rootDir:k.cwd(),cache:e,debug:o.debug,incremental:o.force?{forceRerun:true}:void 0,workerCount:i,overrides:n.overrides});return p.ok?(p.data.precomputedAnalysis?a.info("\u276F Reused cached analysis plan"):a.info(`\u276F Prepared ${p.data.tasks.length.toLocaleString()} checks in ${(performance.now()-l).toFixed(0)}ms`),a.debug(`Plan build: ${(performance.now()-l).toFixed(2)}ms`),p.data):(a.error(Error(`Execution plan building failed: ${p.error.message}`)),null)}async function Ve(t,r,e,o,a,n,i,l,p){let R=performance.now();configureRuleExecutor(executeBatchedNewEngineRules,isNewEngineRule);let A=await runAnalysis(t,{rootDir:k.cwd(),cache:r,debug:o.debug,files:n,maxWorkers:e.maxWorkers,typeAwareChunkSize:e.typeAwareChunkSize,typeAwareConcurrency:e.typeAwareConcurrency,typeAwareFileConcurrency:e.typeAwareFileConcurrency,typeAwareIsolation:e.typeAwareIsolation,typeAwareChunkStrategy:e.typeAwareChunkStrategy,skipTypeCheck:o.skipTypeCheck,parserOptions:i?.parserOptions,onProgress:l,onFileProgress:p});return A.ok?(a.debug(`Execution: ${(performance.now()-R).toFixed(2)}ms`),A.data):(a.error(Error(`Analysis failed: ${A.error.message}`)),null)}async function Je(t,r,e,o){if(!r)return;let a=performance.now(),n=[];for(let i of t)i.taskId&&n.push([i.taskId,i]);n.length>0&&(await r.results.setMany(n),e.debug&&o.debug(`Saved ${n.length} results to cache (${(performance.now()-a).toFixed(2)}ms)`));}function Ce(t,r){t.command("config").description("Inspect and validate ngcompass configuration").command("health").description("Run semantic validation checks for the active configuration").option("-p, --profile <name>","Configuration profile to validate").action(async e=>{try{let o=await validateConfig({cache:e.cache?r:void 0,profile:e.profile});await getConfigReporter().renderHealthReport(o.report),o.report.valid||f();}catch(o){let a=o instanceof Error?o.message:String(o);console.error(`Error: ${a}`),f();}});}function $e(t,r){let e=t.command("cache").description("Inspect and manage analysis cache data");e.command("clear").description("Clear cached data for one cache type or all cache types").option("-p, --profile <name>","Configuration profile used to resolve cache settings").option("--type <type>","Cache type to clear: ast | config | results | all","all").action(async o=>{let a=getCacheReporter();k.stdout.write(h.dim(` \u203A Clearing cache...
7
+ `));let n=o.type,i=["ast","config","results","all"];i.includes(n)||(console.error(h.red(`Invalid cache type: ${n}. Must be one of: ${i.join(", ")}`)),f());try{let l=await H(r,{profile:o.profile,allowDisabled:!0});n==="all"?await l.clear():await l.clearType(n),a.renderClearResult(n);}catch(l){console.error(h.red("Error clearing cache:"),l),f();}}),e.command("info").description("Show cache status, size, and usage details").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async o=>{let a=getCacheReporter();try{let n=await H(r,{profile:o.profile,allowDisabled:!0}),i=await n.getInfo();a.renderCacheInfo(i);}catch(n){console.error(h.red("Error getting cache info:"),n),f();}}),e.command("path").description("Print the resolved cache directory path").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async o=>{let a=await H(r,{profile:o.profile,allowDisabled:true});k.stdout.write(`${a.getCachePath()}
8
+ `);});}async function H(t,r={}){let e=r.cwd??k.cwd();try{let o=await resolveConfig({profile:r.profile,cache:t,cwd:e});return !o.report.valid||!o.config?t:createRuntimeCache(o.config,e,{allowDisabled:r.allowDisabled})??t}catch{return t}}function xe(t){t.command("rules [ruleName]").description("Browse available rules or inspect details for a specific rule").option("--preset <name>","Filter by preset: recommended, strict, performance, reactivity, or all").action((r,e)=>{e.preset&&!isBuiltinPreset(e.preset)&&(console.error(h.red(`Unknown preset: "${e.preset}".`)),console.error(h.dim("Available presets: recommended, strict, all, performance, reactivity")),f());let o=getRuleListEntries(),a=getRulesReporter({preset:e.preset});if(r){let n=o.find(i=>i.name===r);if(!n){console.error(h.red(`Rule "${r}" not found.`)),console.error(h.dim("Run `ngcompass rules` to list available rules.")),f();return}a.renderSingleRule(n);}else a.render(o);});}function Ae(t,r){ce(t),ye(t,r),Ce(t,r),$e(t,r),xe(t);}var b=()=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h");},ve=false,S=async(t,r)=>{if(!ve){if(ve=true,b(),t)try{let e=new Promise(o=>setTimeout(o,1e4).unref());await Promise.race([t.flush(),e]);}catch{}process.exit(r);}};async function cr(){let t=new Command;t.name("ngcompass").description("Static analysis and architecture insights for Angular codebases.").version(PACKAGE_VERSION,"-V, --version","Display ngcompass version").option("--debug","Enable detailed debug logs across all modules").addHelpText("after",`
9
9
  Examples:
10
10
  $ ngcompass init
11
11
  $ ngcompass analyze --profile strict
12
12
  $ ngcompass cache info
13
- `).hook("preAction",async(e,i)=>{e.opts().debug&&enableDebug("debug","all");let n=i.opts();if(n.format!=="json"&&n.format!=="sarif"&&n.format!=="html"&&n.format!=="ui"){let{default:t}=await import('picocolors'),a=i.parent,s=a&&a.name()!=="ngcompass"?a.name():i.name(),p=process.cwd();process.stdout.write(`
14
- ${t.dim(">")} ${t.dim(`ngcompass@${PACKAGE_VERSION}`)} ${t.dim(s)} ${t.dim(p)}
15
- ${t.dim(">")} ${t.dim("ngcompass")} ${t.dim("run")}
13
+ `).hook("preAction",async(e,o)=>{e.opts().debug&&enableDebug("debug","all");let a=o.opts();if(a.format!=="json"&&a.format!=="sarif"&&a.format!=="html"&&a.format!=="ui"){let{default:n}=await import('picocolors'),i=o.parent,l=i&&i.name()!=="ngcompass"?i.name():o.name(),p=process.cwd();process.stdout.write(`
14
+ ${n.dim(">")} ${n.dim(`ngcompass@${PACKAGE_VERSION}`)} ${n.dim(l)} ${n.dim(p)}
15
+ ${n.dim(">")} ${n.dim("ngcompass")} ${n.dim("run")}
16
16
 
17
- ${t.bgCyan(t.white(t.bold(` ${s.toUpperCase()} `)))} ${t.cyan(PACKAGE_VERSION)} ${t.dim(p)}
17
+ ${n.bgCyan(n.white(n.bold(` ${l.toUpperCase()} `)))} ${n.cyan(PACKAGE_VERSION)} ${n.dim(p)}
18
18
 
19
- `);}});let r=createCacheContext();process.on("SIGINT",()=>{$(r,130);}),process.on("SIGTERM",()=>{$(r,143);}),process.on("uncaughtException",e=>{v(),console.error(`
20
- [ngcompass] Unexpected error: ${e.message}`),$(r,1);}),process.on("unhandledRejection",e=>{v();let i=e instanceof Error?e.message:String(e);console.error(`
21
- [ngcompass] Unhandled promise rejection: ${i}`),$(r,1);});try{if(registerAllBuiltinRules(),re(o,r),!process.argv.slice(2).length)return void o.outputHelp();await o.parseAsync(process.argv),await r.flush(),process.exit(0);}catch(e){v();let i=e instanceof Error?e.message:String(e);console.error(`[ngcompass] Fatal error: ${i}`),await $(r,1);}}Ue().catch(o=>{v();let r=o instanceof Error?o.message:String(o);console.error(`[ngcompass] Fatal error: ${r}`),process.exit(1);});export{Ue as run};//# sourceMappingURL=cli.js.map
19
+ `);}});let r=createCacheContext();process.on("SIGINT",()=>{S(r,130);}),process.on("SIGTERM",()=>{S(r,143);}),process.on("uncaughtException",e=>{b(),console.error(`
20
+ [ngcompass] Unexpected error: ${e.message}`),S(r,1);}),process.on("unhandledRejection",e=>{b();let o=e instanceof Error?e.message:String(e);console.error(`
21
+ [ngcompass] Unhandled promise rejection: ${o}`),S(r,1);});try{if(registerAllBuiltinRules(),Ae(t,r),!process.argv.slice(2).length)return void t.outputHelp();await t.parseAsync(process.argv),await r.flush(),process.exit(0);}catch(e){b();let o=e instanceof Error?e.message:String(e);console.error(`[ngcompass] Fatal error: ${o}`),await S(r,1);}}cr().catch(t=>{b();let r=t instanceof Error?t.message:String(t);console.error(`[ngcompass] Fatal error: ${r}`),process.exit(1);});export{cr as run};//# sourceMappingURL=cli.js.map
22
22
  //# sourceMappingURL=cli.js.map