ngcompass 0.2.1-beta → 0.2.2-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/dist/cli.cjs +29 -15
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +29 -15
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +29 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +29 -15
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
package/dist/index.js
CHANGED
|
@@ -1,23 +1,37 @@
|
|
|
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
|
|
3
|
-
`);}update(
|
|
4
|
-
`),this.render()):this.stream.write(`${
|
|
5
|
-
`);}stop(){setLiveRedraw(void 0),this.timer&&(clearInterval(this.timer),this.timer=null),this.isTTY&&(this.stream.write("\r\x1B[K"),this.stream.write("\x1B[?25h"));}render(){let
|
|
6
|
-
`))),null}if(!
|
|
7
|
-
`));try{let s=await
|
|
8
|
-
`);});}async function
|
|
9
|
-
`)),
|
|
10
|
-
|
|
11
|
-
`),
|
|
12
|
-
|
|
13
|
-
${
|
|
2
|
+
import {Command}from'commander';import {getConfigReporter,getReporter,getCacheReporter,getRulesReporter}from'@ngcompass/reporters';import {initConfig,validateConfig,resolveConfig,loadPlugins}from'@ngcompass/config';import T from'picocolors';import b from'process';import {createCacheContext,createRuntimeCache}from'@ngcompass/cache';import {PACKAGE_VERSION,enableDebug,DEFAULT_INCLUDE_PATTERNS,setLiveRedraw,formatDuration,pluralise}from'@ngcompass/common';import W from'path';import {collectNeighborhood,filterCyclesByNeighborhood,scopeGraphToNodes,configureRuleExecutor,runAnalysis,buildImportGraphOxc,findCircularDependencies}from'@ngcompass/engine';import {buildExecutionPlan}from'@ngcompass/planner';import {scan}from'@ngcompass/scanner';import {registerAllBuiltinRules,isBuiltinPreset,getRuleListEntries,getGlobalRegistry,resolveRules,getEnabledRules,executeBatchedNewEngineRules,isNewEngineRule}from'@ngcompass/rules';import gr from'fs/promises';import {spawnSync}from'child_process';var z=()=>{process.stdout.isTTY&&process.stdout.write("\x1B[?25h");},w=(e=1)=>{z(),process.exit(e);},C=(e,r)=>{let t=r===void 0?"":`: ${r instanceof Error?r.message:String(r)}`;console.error(`${T.red(e)}${t}`);};function te(e,r){e.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=>{try{let o=await initConfig({cwd:t.cwd,force:t.force});await getConfigReporter().renderInitResult(o),o.success||o.alreadyExists||w();}catch(o){C("Error initializing configuration",o),w();}});}var ie=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],A=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),setLiveRedraw({clear:()=>this.stream.write("\r\x1B[K"),redraw:()=>this.render()})):this.stream.write(`${T.cyan("\u276F")} ${T.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
|
+
`),this.render()):this.stream.write(`${r}
|
|
5
|
+
`);}stop(){setLiveRedraw(void 0),this.timer&&(clearInterval(this.timer),this.timer=null),this.isTTY&&(this.stream.write("\r\x1B[K"),this.stream.write("\x1B[?25h"));}render(){let r=T.cyan(ie[this.frameIndex%ie.length]);this.frameIndex++,this.stream.write(`\r\x1B[K${r} ${T.dim(this.message)}`);}};function _e(e,r){if(e===void 0)return;let t=Number(e);if(!Number.isInteger(t)||t<1)throw Error(`${r} must be a positive integer.`);return t}function ne(e,r){return {maxWorkers:_e(e.maxWorkers,"--max-workers")??r.maxWorkers}}function Y(e){return e==="ui"?"html":e??"console"}function se(e,r){if(e)return Y(e);switch(r){case "json":return "json";case "sarif":return "sarif";case "html":return "html";default:return "console"}}function le(e,r){let t=e.failOnSeverity??"error",o=e.maxWarnings??10;return r.totalErrors>0||t==="warn"&&r.totalWarnings>0||r.totalWarnings>o}function ce(e,r){if(!e?.project)return;let t=e.tsconfigRootDir?W.resolve(r,e.tsconfigRootDir):r;return W.resolve(t,e.project)}function pe(e){return e instanceof Error?e:Error(String(e))}function q(e,r){return `Running analysis: ${e.toLocaleString()}/${r.toLocaleString()} checks complete...`}async function D(e,r,t){let o=performance.now();t.step("\u276F Loading configuration...");let i=await resolveConfig({profile:e.profile,cache:r,cwd:b.cwd()});if(!i.report.valid){let a=i.report.issues.map(c=>{let s=c.path?.join(".")||"root";return `[${c.severity.toUpperCase()}] ${s}: ${c.message}`});return t.error(Error(["Configuration validation failed",...a].join(`
|
|
6
|
+
`))),null}if(!i.config)return t.error(Error("No configuration found")),null;let n=i.config.plugins;if(n&&n.length>0){t.step(`\u276F Loading ${n.length} plugin(s)...`);let a=b.cwd();await loadPlugins(n,a,getGlobalRegistry()),t.info(`Loaded ${n.length} plugin(s)`);}return t.debug(`Config resolve: ${(performance.now()-o).toFixed(2)}ms`),{config:i.config}}async function O(e,r,t,o){let i=performance.now();o.step("\u276F Discovering files...");let n=await scan({rootDir:b.cwd(),include:e.include??[...DEFAULT_INCLUDE_PATTERNS],exclude:e.exclude??[],ignorePatterns:e.ignorePatterns,tsConfigPath:ce(e.parserOptions,b.cwd()),respectGitignore:true,debug:r.debug,cache:t});return n.ok?(o.info(`\u276F Found ${n.data.files.length} files in ${(performance.now()-i).toFixed(0)}ms`),o.debug(`File discovery: ${(performance.now()-i).toFixed(2)}ms`),n.data.files):(o.error(Error(`File discovery failed: ${n.error.message}`)),null)}async function ue(e,r,t){let o=performance.now();t.step("\u276F Loading rules...");let i=e;r.rule&&(t.info(`Filtering analysis to single rule: ${r.rule}`),i={...e,rules:{[r.rule]:"error"},extends:[]});let n=await resolveRules(i,b.cwd());if(!n.ok)return t.error(Error(`Rule resolution failed: ${n.error.message}`)),null;let a=getEnabledRules(n.data.rules);return t.info(`\u276F Loaded ${a.size} active rules in ${(performance.now()-o).toFixed(0)}ms`),t.debug(`Rule resolution: ${(performance.now()-o).toFixed(2)}ms`),a}async function me(e,r,t,o,i,n,a){let c=performance.now();i.step("\u276F Planning analysis...");let s=await buildExecutionPlan({files:e,rules:r,rootDir:b.cwd(),cache:t,debug:o.debug,incremental:o.force?{forceRerun:true}:void 0,workerCount:a,overrides:n.overrides});return s.ok?(s.data.precomputedAnalysis?i.info("\u276F Reused cached analysis plan"):i.info(`\u276F Prepared ${s.data.tasks.length.toLocaleString()} checks in ${(performance.now()-c).toFixed(0)}ms`),i.debug(`Plan build: ${(performance.now()-c).toFixed(2)}ms`),s.data):(i.error(Error(`Execution plan building failed: ${s.error.message}`)),null)}async function fe(e,r,t,o,i,n,a,c,s,y,u){let p=performance.now();configureRuleExecutor(executeBatchedNewEngineRules,isNewEngineRule);let f=await runAnalysis(e,{rootDir:b.cwd(),cache:r,debug:o.debug,files:n,maxWorkers:t.maxWorkers,skipTypeCheck:o.skipTypeCheck,parserOptions:a?.parserOptions,onProgress:c,onFileProgress:s,onNotice:y,onFileSkipped:u});return f.ok?(i.debug(`Execution: ${(performance.now()-p).toFixed(2)}ms`),f.data):(i.error(Error(`Analysis failed: ${f.error.message}`)),null)}async function de(e,r,t,o){if(!r)return;let i=performance.now(),n=[];for(let a of e)a.taskId&&n.push([a.taskId,a]);n.length>0&&(await r.results.setMany(n),t.debug&&o.debug(`Saved ${n.length} results to cache (${(performance.now()-i).toFixed(2)}ms)`));}var tr={taskCount:0,issueCount:0,errorCount:0,warningCount:0,duration:0};function he(e,r){let t=new Map;for(let o of e.tasks){let i=o.filePath;typeof i=="string"&&i.length!==0&&(o.needsTypeChecker||o.needsProjectContext)===r&&t.set(i,(t.get(i)??0)+1);}return t}function H(e,r){let t=e??tr;return {taskCount:t.taskCount+r.taskCount,issueCount:t.issueCount+r.issueCount,errorCount:t.errorCount+r.errorCount,warningCount:t.warningCount+r.warningCount,duration:t.duration+r.duration}}function we(e,r,t){let o=he(e,false),i=he(e,true),n=new Map,a=new Map,c=new Set,s=new Set,y=(u,p,f)=>{if(s.has(u))return;let d=f?s:c;d.has(u)||(d.add(u),r((function(v,l){let m=l.issueCount>0,k=m?T.red("\u276F"):T.green("\u276F"),E=m?T.red(formatDuration(l.duration)):T.green(formatDuration(l.duration));if(m){let x=`${l.issueCount.toLocaleString()} ${pluralise(l.issueCount,"issue")}`;return `${k} ${T.red(v)} ${E} ${T.red(x)}`}return `${k} ${T.dim(v)} ${E}`})(W.relative(t,u)||u,p)));};return u=>{let p=u.filePath;if(s.has(p))return;if(u.typeAware===false){let l=H(n.get(p),u);n.set(p,l);let m=o.get(p)??l.taskCount;if(l.taskCount<m)return;y(p,l,!i.has(p));return}if(u.typeAware===true){var f;let l=H(a.get(p),u);a.set(p,l);let m=i.get(p)??l.taskCount;if(l.taskCount<m)return;y(p,(f=n.get(p),f?{taskCount:f.taskCount+l.taskCount,issueCount:f.issueCount+l.issueCount,errorCount:f.errorCount+l.errorCount,warningCount:f.warningCount+l.warningCount,duration:f.duration+l.duration}:l),true);return}let d=(o.get(p)??0)+(i.get(p)??0),v=H(n.get(p),u);n.set(p,v),v.taskCount<(d||v.taskCount)||y(p,v,true);}}function ve(e,r){e.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("--skip-type-check","Skip rules that require the TypeScript type checker (fastest, lowest memory)").action(async t=>{let o=performance.now(),i=getReporter(Y(t.format),{compact:!!t.compact,outputPath:t.output,quiet:!!t.quiet,noRecommendation:t.recommendation===false}),n=r,a=0;try{let c=await D(t,r,i);if(!c){a=1;return}let{config:s}=c,y=ne(t,s);n=createRuntimeCache(s,b.cwd());let u=se(t.format,s.outputFormat);i=getReporter(u,{compact:!!t.compact,outputPath:t.output??s.outputPath,quiet:!!t.quiet,noRecommendation:t.recommendation===!1});let p=await O(s,t,n,i);if(!p){a=1;return}let f=await ue(s,t,i);if(!f){a=1;return}let d=await me(p,f,n,t,i,s,y.maxWorkers);if(!d){a=1;return}let v=u==="console"?b.stdout:b.stderr,l=new A(v),m=d.tasks.length+(d.skippedTasks?.length??0);l.start(q(0,m));let k=we(d,g=>l.writeLine(g),b.cwd()),E=[],x=await fe(d,n,y,t,i,p,s,(g,P)=>{l.update(q(g,P));},k,g=>{l.writeLine(`${T.yellow("[!]")} ${T.yellow(g)}`);},g=>{E.push(g);});if(l.stop(),!x){a=1;return}let h=performance.now()-o,$={scannedFiles:new Set([...d.tasks.map(g=>g.filePath),...(d.skippedTasks??[]).map(g=>g.filePath)]).size,discoveredFiles:p.length,totalFiles:x.stats.totalFiles,totalTasks:d.tasks.length+(d.skippedTasks?.length??0),cachedTasks:d.precomputedAnalysis?d.tasks.length:void 0,totalErrors:x.stats.totalErrors,totalWarnings:x.stats.totalWarnings,failOnSeverity:s.failOnSeverity,maxWarnings:s.maxWarnings,skippedFiles:E.length||void 0,skippedFilePaths:E.length?E:void 0,duration:h};u==="console"&&i.summary($),i.parseErrors(x.parseErrors),i.report(x.results),u!=="console"&&(i.step("\u276F Writing report..."),i.summary($)),d.precomputedAnalysis||await de(x.results,n,t,i),le(s,x.stats)&&(a=1);}catch(c){i.error(pe(c)),a=1;}finally{n&&n!==r&&await n.flush(),a!==0&&w(a);}});}function xe(e,r){e.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 t=>{try{let o=await validateConfig({cwd:b.cwd(),cache:t.cache?r:void 0,profile:t.profile});await getConfigReporter().renderHealthReport(o.report),o.report.valid||w();}catch(o){C("Error",o),w();}});}var Ee=["ast","config","results","all"],pr=new Set(Ee);function ke(e,r){let t=e.command("cache").description("Inspect and manage analysis cache data");t.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=>{var i;let n,a=(n=i=o.type,pr.has(n)?i:(C(`Invalid cache type: ${i}. Must be one of: ${Ee.join(", ")}`),w())),c=getCacheReporter();b.stdout.write(T.dim(` \u203A Clearing cache...
|
|
7
|
+
`));try{let s=await V(r,{profile:o.profile,allowDisabled:!0});a==="all"?await s.clear():await s.clearType(a),c.renderClearResult(a);}catch(s){C("Error clearing cache",s),w();}}),t.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 i=getCacheReporter();try{let n=await V(r,{profile:o.profile,allowDisabled:!0}),a=await n.getInfo();i.renderCacheInfo(a);}catch(n){C("Error getting cache info",n),w();}}),t.command("path").description("Print the resolved cache directory path").option("-p, --profile <name>","Configuration profile used to resolve cache settings").action(async o=>{let i=await V(r,{profile:o.profile,allowDisabled:true});b.stdout.write(`${i.getCachePath()}
|
|
8
|
+
`);});}async function V(e,r={}){let t=r.cwd??b.cwd();try{let o=await resolveConfig({profile:r.profile,cache:e,cwd:t});return !o.report.valid||!o.config?e:createRuntimeCache(o.config,t,{allowDisabled:r.allowDisabled})??e}catch(o){return C("Unable to resolve cache configuration; using default cache",o),e}}function Se(e){e.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,t)=>{t.preset&&!isBuiltinPreset(t.preset)&&(C(`Unknown preset: "${t.preset}".`),process.stderr.write(T.dim(`Available presets: recommended, strict, all, performance, reactivity
|
|
9
|
+
`)),w());let o=getRuleListEntries(),i=getRulesReporter({preset:t.preset});if(r){let n=o.find(a=>a.name===r);if(!n){C(`Rule "${r}" not found.`),process.stderr.write(T.dim("Run `ngcompass rules` to list available rules.\n")),w();return}i.renderSingleRule(n);}else i.render(o);});}function B(e){let r=[],t=[];for(let[n,a]of e.graph){let c=Z(n,e.rootDir);for(let s of(r.push(c),a))t.push([c,Z(s,e.rootDir)]);}let o={rootDir:e.rootDir,generatedAt:e.generatedAt.toISOString(),fileCount:e.fileCount,focus:e.focus??null,depth:e.focus?e.depth:null,nodeCount:r.length,edgeCount:t.length,nodes:r,edges:t};if(e.cycles===void 0)return JSON.stringify(o,null,2)+`
|
|
10
|
+
`;let i=e.cycles.map(n=>n.map(a=>Z(a,e.rootDir)));return JSON.stringify({...o,cycleCount:i.length,cycles:i},null,2)+`
|
|
11
|
+
`}function Z(e,r){return (W.relative(r,e)||e).replace(/\\/g,"/")}function Re(e,r){e.command("circular").description("Detect circular dependencies in the project import graph").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").option("--focus <file>","Scope to a file and its import neighborhood").option("--depth <n>","Neighborhood radius in import hops for --focus (default: 1)").option("--output <path>","Write the report/export to a file instead of stdout").action(async t=>{let o=(t.format==="json"?"json":"console")=="json",i=getReporter(o?"json":"console",{}),n=r,a=0;try{var c,s,y;let u=(function(h){if(h===void 0)return 1;let $=Number(h);if(Number.isInteger($)&&!($<0))return $})(t.depth);if(u===void 0){i.error(Error("--depth must be a non-negative integer")),a=1;return}let p={profile:t.profile,force:t.force},f=await D(p,r,i);if(!f){a=1;return}let{config:d}=f;n=createRuntimeCache(d,b.cwd());let v=await O(d,p,n,i);if(!v){a=1;return}let l=await Er(v,d.parserOptions,i),m=(function(h,$,g){if(!$)return;let P=X(W.resolve(b.cwd(),$));if(h.has(P))return P;let j=X($),F=[];for(let G of h.keys())G.includes(j)&&F.push(G);if(F.length===1)return F[0];if(F.length===0)return void g.error(Error(`--focus: no file in the import graph matches "${$}"`));let L=F.slice(0,10).map(G=>` ${Q(G)}`).join(`
|
|
12
|
+
`);g.error(Error(`--focus: "${$}" matched ${F.length} files; be more specific:
|
|
13
|
+
${L}`));})(l,t.focus,i);if(t.focus&&!m){a=1;return}let k=m?collectNeighborhood(l,m,u):void 0,E=await kr(l),x=k?filterCyclesByNeighborhood(E,k):E;o?await br({graph:k?scopeGraphToNodes(l,k):l,cycles:x,rootDir:b.cwd(),focus:m?Q(m):void 0,depth:u,fileCount:v.length,generatedAt:new Date},t.output):(c=x,s=m,y=i,c.length>0?y.info((function(h,$){var g;let P=["",T.red(`\u2716 Found ${h.length} circular ${g=h.length,g===1?"dependency":"dependencies"}`),""];for(let j=0;j<h.length;j++){let F=h[j].map(L=>T.cyan(W.relative($,L)||L)).join(T.dim(" \u2192 "));P.push(`${T.dim(`${j+1})`)} ${F}`);}return P.push(""),P.join(`
|
|
14
|
+
`)})(c,b.cwd())):s?y.info(`
|
|
15
|
+
${T.green("\u2714")} No circular dependencies found near ${T.cyan(Q(s))}.
|
|
16
|
+
`):y.info(`
|
|
17
|
+
${T.green("\u2714")} No circular dependencies found.
|
|
18
|
+
`)),x.length>0&&(a=1);}catch(u){i.error(u instanceof Error?u:Error(String(u))),a=1;}finally{n&&n!==r&&await n.flush(),a!==0&&w(a);}});}async function Er(e,r,t){t.step("\u276F Analyzing import graph for circular dependencies...");let o=new A(b.stderr);o.start(`Parsing ${e.length} files and building import graph...`);let{importGraph:i}=await buildImportGraphOxc(e,{rootDir:b.cwd(),parserOptions:r,onProgress:(n,a)=>{let c=(n/a*100).toFixed(0);o.update(`Parsing files (${n}/${a} \u2014 ${c}%)...`);}});return o.stop(),i}async function kr(e){return await new Promise(r=>setImmediate(r)),findCircularDependencies(e)}async function br(e,r){let t=B(e);if(r){let o=W.resolve(b.cwd(),r);await gr.writeFile(o,t,"utf8");let i=W.relative(b.cwd(),o)||o;b.stderr.write(`${T.green("\u2714")} Wrote JSON graph to ${i}
|
|
19
|
+
`);return}b.stdout.write(t);}function X(e){return e.replace(/\\/g,"/")}function Q(e){return X(W.relative(b.cwd(),e)||e)}var Ae="ngcompass-graph.json";function Te(e,r){e.command("graph").description("Export the project dependency graph as JSON").option("-p, --profile <name>","Configuration profile to run").option("--force","Ignore cached results and re-run all checks").option("--focus <file>","Scope the graph to a file and its neighborhood").option("--depth <n>","Neighborhood radius in import hops for --focus (default: 2)").option("--output <path>",`Output path for the JSON file (default: ${Ae})`).option("--stdout","Write JSON to stdout instead of a file").action(async t=>{let o=getReporter(t.stdout?"json":"console",{}),i=r,n=0;try{let a=(function(l){if(l===void 0)return 2;let m=Number(l);if(Number.isInteger(m)&&!(m<0))return m})(t.depth);if(a===void 0){o.error(Error("--depth must be a non-negative integer")),n=1;return}let c={profile:t.profile,force:t.force},s=await D(c,r,o);if(!s){n=1;return}let{config:y}=s;i=createRuntimeCache(y,b.cwd());let u=await O(y,c,i,o);if(!u){n=1;return}let p=await Ir(u,y.parserOptions,o),f=(function(l,m,k){if(!m)return;let E=ee(W.resolve(b.cwd(),m));if(l.has(E))return E;let x=ee(m),h=[];for(let g of l.keys())g.includes(x)&&h.push(g);if(h.length===1)return h[0];if(h.length===0)return void k.error(Error(`--focus: no file in the import graph matches "${m}"`));let $=h.slice(0,10).map(g=>` ${Fe(g)}`).join(`
|
|
20
|
+
`);k.error(Error(`--focus: "${m}" matched ${h.length} files; be more specific:
|
|
21
|
+
${$}`));})(p,t.focus,o);if(t.focus&&!f){n=1;return}let d=f?scopeGraphToNodes(p,collectNeighborhood(p,f,a)):p,v=B({graph:d,rootDir:b.cwd(),focus:f?Fe(f):void 0,depth:a,fileCount:u.length,generatedAt:new Date});t.stdout?b.stdout.write(v):await Nr(v,t.output,o);}catch(a){o.error(a instanceof Error?a:Error(String(a))),n=1;}finally{i&&i!==r&&await i.flush(),n!==0&&w(n);}});}async function Ir(e,r,t){t.step("\u276F Building project import graph...");let o=new A(b.stderr);o.start(`Parsing ${e.length} files and building import graph...`);let{importGraph:i}=await buildImportGraphOxc(e,{rootDir:b.cwd(),parserOptions:r,onProgress:(n,a)=>{let c=(n/a*100).toFixed(0);o.update(`Parsing files (${n}/${a} \u2014 ${c}%)...`);}});return o.stop(),i}async function Nr(e,r,t){t.step("\u276F Writing dependency graph...");let o=W.resolve(b.cwd(),r??Ae);await gr.writeFile(o,e,"utf8");let i=W.relative(b.cwd(),o)||o;t.info(`
|
|
22
|
+
${T.green("\u2714")} Dependency graph written to ${T.cyan(i)}
|
|
23
|
+
`);}function ee(e){return e.replace(/\\/g,"/")}function Fe(e){return ee(W.relative(b.cwd(),e)||e)}function Ie(e,r){te(e),ve(e,r),xe(e,r),ke(e,r),Se(e),Re(e,r),Te(e,r);}var Ne="NGCOMPASS_GC_RESPAWNED",Dr=new Set(["--version","-V","--help","-h"]);function Or(e,r){return e.error?{kind:"fallback"}:e.signal!==null||e.status===null?r<=5e3?{kind:"fallback"}:{kind:"crash",code:1}:{kind:"exit",code:e.status}}function je(){if(typeof globalThis.gc=="function"||b.env[Ne]==="1")return;let e=b.argv.slice(2);if(!(i=>{if(!i.includes("analyze"))return false;for(let n of i)if(Dr.has(n))return false;return true})(e))return;let r=b.argv[1];if(!r)return;let t=performance.now(),o=Or(spawnSync(b.execPath,["--expose-gc",...b.execArgv,r,...e],{stdio:"inherit",env:{...b.env,[Ne]:"1"}}),performance.now()-t);o.kind==="fallback"?b.stderr.write(`[ngcompass] Could not relaunch with --expose-gc (likely low memory); continuing without proactive garbage-collection hints.
|
|
24
|
+
`):(o.kind==="crash"&&b.stderr.write(`[ngcompass] Analysis crashed (likely out of memory); re-run with --skip-type-check or raise --max-old-space-size.
|
|
25
|
+
`),b.exit(o.code));}var De=false,M=async(e,r)=>{if(!De){if(De=true,z(),e)try{let t=new Promise(o=>setTimeout(o,1e4).unref());await Promise.race([e.flush(),t]);}catch(t){C("[ngcompass] Cache flush failed during shutdown",t);}process.exit(r);}},Oe=(e,r,t)=>{C(`[ngcompass] ${r}`,t),M(e,1);},_r=async e=>{let{default:r}=await import('picocolors'),t=process.cwd();process.stdout.write(`
|
|
26
|
+
${r.dim(">")} ${r.dim(`ngcompass@${PACKAGE_VERSION}`)} ${r.dim(e)} ${r.dim(t)}
|
|
27
|
+
${r.dim(">")} ${r.dim("ngcompass")} ${r.dim("run")}
|
|
14
28
|
|
|
15
|
-
${
|
|
29
|
+
${r.bgCyan(r.white(r.bold(` ${e.toUpperCase()} `)))} ${r.cyan(PACKAGE_VERSION)} ${r.dim(t)}
|
|
16
30
|
|
|
17
|
-
`);};async function
|
|
31
|
+
`);};async function We(){je();let e=new Command;e.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",`
|
|
18
32
|
Examples:
|
|
19
33
|
$ ngcompass init
|
|
20
34
|
$ ngcompass analyze --profile strict
|
|
21
35
|
$ ngcompass cache info
|
|
22
|
-
`).hook("preAction",async(
|
|
36
|
+
`).hook("preAction",async(t,o)=>{let i;t.opts().debug&&enableDebug("debug","all");let n=o.opts();if(!n.stdout&&(i=n.format)!=="json"&&i!=="sarif"&&i!=="html"&&i!=="ui"){let a=o.parent,c=a&&a.name()!=="ngcompass"?a.name():o.name();await _r(c);}});let r=createCacheContext();process.on("SIGINT",()=>{M(r,130);}),process.on("SIGTERM",()=>{M(r,143);}),process.on("uncaughtException",t=>{Oe(r,"Unexpected error",t);}),process.on("unhandledRejection",t=>{Oe(r,"Unhandled promise rejection",t);});try{if(registerAllBuiltinRules(),Ie(e,r),!process.argv.slice(2).length)return void e.outputHelp();await e.parseAsync(process.argv),await r.flush(),process.exit(0);}catch(t){C("[ngcompass] Fatal error",t),await M(r,1);}}We().catch(e=>{C("[ngcompass] Fatal error",e),z(),process.exit(1);});export{We as run};//# sourceMappingURL=index.js.map
|
|
23
37
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/exit.ts","../src/commands/init.ts","../src/spinner.ts","../src/commands/analyze/options.ts","../src/commands/analyze/resolve.ts","../src/commands/analyze/steps.ts","../src/commands/analyze/progress.ts","../src/commands/analyze/index.ts","../src/commands/config.ts","../src/commands/cache.ts","../src/commands/rules.ts","../src/commands/index.ts","../src/bin/gc-respawn.ts","../src/bin/ngcompass.ts"],"names":["restoreCursor","process","stdout","isTTY","write","exitWithError","code","exit","printError","message","detail","tail","undefined","Error","String","console","error","pc","red","registerInitCommand","program","_cache","command","description","option","cwd","action","options","result","initConfig","force","getConfigReporter","renderInitResult","success","alreadyExists","FRAMES","Spinner","timer","frameIndex","stream","start","render","setInterval","setLiveRedraw","clear","redraw","cyan","dim","update","writeLine","line","stop","clearInterval","frame","length","parsePositiveIntegerOption","value","optionName","parsed","Number","isInteger","resolvePerformanceOptions","config","maxWorkers","normalizeReporterFormat","format","resolveReporterFormat","cliFormat","configFormat","shouldFailAnalysis","stats","failOnSeverity","maxWarnings","totalErrors","totalWarnings","resolveParserProjectPath","parserOptions","project","rootDir","tsconfigRootDir","path","resolve","toError","formatAnalysisProgressMessage","completed","total","toLocaleString","loadConfigurationStep","cache","reporter","tStart","performance","now","step","configResult","resolveConfig","profile","report","valid","issueLines","issues","map","issue","pathString","join","severity","toUpperCase","pluginList","plugins","configDir","loadPlugins","getGlobalRegistry","info","debug","toFixed","discoverFilesStep","scanResult","scan","include","DEFAULT_INCLUDE_PATTERNS","exclude","ignorePatterns","tsConfigPath","respectGitignore","ok","data","files","resolveRulesStep","effectiveConfig","rule","rules","extends","rulesResult","resolveRules","enabledRules","getEnabledRules","size","buildPlanStep","planResult","buildExecutionPlan","incremental","forceRerun","workerCount","overrides","precomputedAnalysis","tasks","runAnalysisStep","plan","performanceOptions","onProgress","onFileProgress","onNotice","onFileSkipped","configureRuleExecutor","executeBatchedNewEngineRules","isNewEngineRule","runAnalysis","skipTypeCheck","saveToCacheStep","results","cacheEntries","taskId","push","setMany","ZERO_ACC","taskCount","issueCount","errorCount","warningCount","duration","buildExpectedMap","typeAware","Map","task","fp","filePath","needsTypeChecker","needsProjectContext","set","get","mergeAcc","prev","event","base","createFileProgressLogger","syntaxExpected","typeAwareExpected","syntaxDone","typeAwareDone","syntaxPrinted","Set","finalPrinted","print","acc","isFinal","has","guard","add","relativePath","hasIssues","status","green","dur","formatDuration","pluralise","relative","expected","a","totalExpected","registerAnalyzeCommand","startTime","getReporter","compact","outputPath","output","quiet","noRecommendation","recommendation","activeCache","exitCode","createRuntimeCache","reporterFormat","outputFormat","progressStream","stderr","spinner","totalChecks","skippedTasks","logFileProgress","skippedFiles","analysis","yellow","summary","scannedFiles","t","discoveredFiles","totalFiles","totalTasks","cachedTasks","skippedFilePaths","parseErrors","flush","registerConfigCommand","validateConfig","renderHealthReport","CACHE_CLEAR_TYPES","CACHE_CLEAR_TYPE_VALUES","registerCacheCommand","cacheCmd","type","getCacheReporter","resolveRuntimeCache","allowDisabled","clearType","renderClearResult","err","getInfo","renderCacheInfo","getCachePath","fallbackCache","registerRulesCommand","ruleName","opts","preset","isBuiltinPreset","entries","getRuleListEntries","getRulesReporter","find","e","name","renderSingleRule","registerCommands","RESPAWN_GUARD_ENV","HELP_VERSION_FLAGS","resolveRespawnOutcome","elapsedMs","kind","signal","maybeRespawnWithExposeGc","globalThis","gc","env","args","argv","slice","includes","arg","scriptPath","startedAt","outcome","spawnSync","execPath","execArgv","stdio","shutdownInProgress","gracefulShutdown","flushTimeout","Promise","setTimeout","unref","race","handleFatalAsyncFailure","label","reason","printRunBanner","commandName","default","PACKAGE_VERSION","bgCyan","white","bold","run","Command","version","addHelpText","hook","thisCommand","actionCommand","enableDebug","parent","createCacheContext","on","registerAllBuiltinRules","outputHelp","parseAsync","catch"],"mappings":"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","file":"index.js","sourcesContent":["import r from 'picocolors';\nexport const restoreCursor = ()=>{\n process.stdout.isTTY && process.stdout.write('\\x1B[?25h');\n};\nexport const exitWithError = (r = 1)=>{\n restoreCursor(), process.exit(r);\n};\nexport const printError = (o, s)=>{\n let t = void 0 === s ? '' : `: ${s instanceof Error ? s.message : String(s)}`;\n console.error(`${r.red(o)}${t}`);\n};\n","import { getConfigReporter as r } from '@ngcompass/reporters';\nimport { initConfig as t } from '@ngcompass/config';\nimport { exitWithError as i, printError as o } from './exit.js';\nexport function registerInitCommand(e, n) {\n e.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)=>{\n try {\n let o = await t({\n cwd: e.cwd,\n force: e.force\n }), n = r();\n await n.renderInitResult(o), o.success || o.alreadyExists || i();\n } catch (r) {\n o('Error initializing configuration', r), i();\n }\n });\n}\n","import t from 'picocolors';\nimport { setLiveRedraw as e } from '@ngcompass/common';\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(s) {\n (this.message = s, this.frameIndex = 0, this.isTTY) ? (this.stream.write('\\x1B[?25l'), this.render(), this.timer = setInterval(()=>this.render(), 80), e({\n clear: ()=>this.stream.write('\\r\\x1B[K'),\n redraw: ()=>this.render()\n })) : this.stream.write(`${t.cyan('❯')} ${t.dim(s)}\\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 e(void 0), 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","export function parsePositiveIntegerOption(r, e) {\n if (void 0 === r) return;\n let t = Number(r);\n if (!Number.isInteger(t) || t < 1) throw Error(`${e} must be a positive integer.`);\n return t;\n}\nexport function resolvePerformanceOptions(r, e) {\n return {\n maxWorkers: parsePositiveIntegerOption(r.maxWorkers, '--max-workers') ?? e.maxWorkers\n };\n}\n","import r from 'node:path';\nexport function normalizeReporterFormat(r) {\n return 'ui' === r ? 'html' : r ?? 'console';\n}\nexport function resolveReporterFormat(r, t) {\n if (r) return normalizeReporterFormat(r);\n switch(t){\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}\nexport function shouldFailAnalysis(r, t) {\n let o = r.failOnSeverity ?? 'error', e = r.maxWarnings ?? 10;\n return t.totalErrors > 0 || 'warn' === o && t.totalWarnings > 0 || t.totalWarnings > e;\n}\nexport function resolveParserProjectPath(t, o) {\n if (!t?.project) return;\n let e = t.tsconfigRootDir ? r.resolve(o, t.tsconfigRootDir) : o;\n return r.resolve(e, t.project);\n}\nexport function toError(r) {\n return r instanceof Error ? r : Error(String(r));\n}\nexport function formatAnalysisProgressMessage(r, t) {\n return `Running analysis: ${r.toLocaleString()}/${t.toLocaleString()} checks complete...`;\n}\n","import e from 'node:process';\nimport { DEFAULT_INCLUDE_PATTERNS as r } from '@ngcompass/common';\nimport { loadPlugins as o, resolveConfig as n } from '@ngcompass/config';\nimport { configureRuleExecutor as t, runAnalysis as i } from '@ngcompass/engine';\nimport { buildExecutionPlan as a } from '@ngcompass/planner';\nimport { scan as s } from '@ngcompass/scanner';\nimport { executeBatchedNewEngineRules as l, getEnabledRules as c, getGlobalRegistry as d, isNewEngineRule as p, resolveRules as u } from '@ngcompass/rules';\nimport { resolveParserProjectPath as f } from './resolve.js';\nexport async function loadConfigurationStep(r, t, i) {\n let a = performance.now();\n i.step('❯ Loading configuration...');\n let s = await n({\n profile: r.profile,\n cache: t,\n cwd: e.cwd()\n });\n if (!s.report.valid) {\n let e = s.report.issues.map((e)=>{\n let r = e.path?.join('.') || 'root';\n return `[${e.severity.toUpperCase()}] ${r}: ${e.message}`;\n });\n return i.error(Error([\n 'Configuration validation failed',\n ...e\n ].join('\\n'))), null;\n }\n if (!s.config) return i.error(Error('No configuration found')), null;\n let l = s.config.plugins;\n if (l && l.length > 0) {\n i.step(`❯ Loading ${l.length} plugin(s)...`);\n let r = e.cwd();\n await o(l, r, d()), i.info(`Loaded ${l.length} plugin(s)`);\n }\n return i.debug(`Config resolve: ${(performance.now() - a).toFixed(2)}ms`), {\n config: s.config\n };\n}\nexport async function discoverFilesStep(o, n, t, i) {\n let a = performance.now();\n i.step('❯ Discovering files...');\n let l = await s({\n rootDir: e.cwd(),\n include: o.include ?? [\n ...r\n ],\n exclude: o.exclude ?? [],\n ignorePatterns: o.ignorePatterns,\n tsConfigPath: f(o.parserOptions, e.cwd()),\n respectGitignore: !0,\n debug: n.debug,\n cache: t\n });\n return l.ok ? (i.info(`❯ Found ${l.data.files.length} files in ${(performance.now() - a).toFixed(0)}ms`), i.debug(`File discovery: ${(performance.now() - a).toFixed(2)}ms`), l.data.files) : (i.error(Error(`File discovery failed: ${l.error.message}`)), null);\n}\nexport async function resolveRulesStep(r, o, n) {\n let t = performance.now();\n n.step('❯ Loading rules...');\n let i = r;\n o.rule && (n.info(`Filtering analysis to single rule: ${o.rule}`), i = {\n ...r,\n rules: {\n [o.rule]: 'error'\n },\n extends: []\n });\n let a = await u(i, e.cwd());\n if (!a.ok) return n.error(Error(`Rule resolution failed: ${a.error.message}`)), null;\n let s = c(a.data.rules);\n return n.info(`❯ Loaded ${s.size} active rules in ${(performance.now() - t).toFixed(0)}ms`), n.debug(`Rule resolution: ${(performance.now() - t).toFixed(2)}ms`), s;\n}\nexport async function buildPlanStep(r, o, n, t, i, s, l) {\n let c = performance.now();\n i.step('❯ Planning analysis...');\n let d = await a({\n files: r,\n rules: o,\n rootDir: e.cwd(),\n cache: n,\n debug: t.debug,\n incremental: t.force ? {\n forceRerun: !0\n } : void 0,\n workerCount: l,\n overrides: s.overrides\n });\n return d.ok ? (d.data.precomputedAnalysis ? i.info('❯ Reused cached analysis plan') : i.info(`❯ Prepared ${d.data.tasks.length.toLocaleString()} checks in ${(performance.now() - c).toFixed(0)}ms`), i.debug(`Plan build: ${(performance.now() - c).toFixed(2)}ms`), d.data) : (i.error(Error(`Execution plan building failed: ${d.error.message}`)), null);\n}\nexport async function runAnalysisStep(r, o, n, a, s, c, d, u, f, g, m) {\n let w = performance.now();\n t(l, p);\n let $ = await i(r, {\n rootDir: e.cwd(),\n cache: o,\n debug: a.debug,\n files: c,\n maxWorkers: n.maxWorkers,\n skipTypeCheck: a.skipTypeCheck,\n parserOptions: d?.parserOptions,\n onProgress: u,\n onFileProgress: f,\n onNotice: g,\n onFileSkipped: m\n });\n return $.ok ? (s.debug(`Execution: ${(performance.now() - w).toFixed(2)}ms`), $.data) : (s.error(Error(`Analysis failed: ${$.error.message}`)), null);\n}\nexport async function saveToCacheStep(e, r, o, n) {\n if (!r) return;\n let t = performance.now(), i = [];\n for (let r of e)r.taskId && i.push([\n r.taskId,\n r\n ]);\n i.length > 0 && (await r.results.setMany(i), o.debug && n.debug(`Saved ${i.length} results to cache (${(performance.now() - t).toFixed(2)}ms)`));\n}\n","import t from 'node:path';\nimport e from 'picocolors';\nimport { formatDuration as n, pluralise as r } from '@ngcompass/common';\nlet ZERO_ACC = {\n taskCount: 0,\n issueCount: 0,\n errorCount: 0,\n warningCount: 0,\n duration: 0\n};\nfunction buildExpectedMap(t, e) {\n let n = new Map();\n for (let r of t.tasks){\n let t = r.filePath;\n 'string' == typeof t && 0 !== t.length && (r.needsTypeChecker || r.needsProjectContext) === e && n.set(t, (n.get(t) ?? 0) + 1);\n }\n return n;\n}\nfunction mergeAcc(t, e) {\n let n = t ?? ZERO_ACC;\n return {\n taskCount: n.taskCount + e.taskCount,\n issueCount: n.issueCount + e.issueCount,\n errorCount: n.errorCount + e.errorCount,\n warningCount: n.warningCount + e.warningCount,\n duration: n.duration + e.duration\n };\n}\nexport function createFileProgressLogger(o, u, s) {\n let i = buildExpectedMap(o, !1), a = buildExpectedMap(o, !0), C = new Map(), g = new Map(), d = new Set(), l = new Set(), c = (o, i, a)=>{\n if (l.has(o)) return;\n let C = a ? l : d;\n C.has(o) || (C.add(o), u(function(t, o) {\n let u = o.issueCount > 0, s = u ? e.red('❯') : e.green('❯'), i = u ? e.red(n(o.duration)) : e.green(n(o.duration));\n if (u) {\n let n = `${o.issueCount.toLocaleString()} ${r(o.issueCount, 'issue')}`;\n return `${s} ${e.red(t)} ${i} ${e.red(n)}`;\n }\n return `${s} ${e.dim(t)} ${i}`;\n }(t.relative(s, o) || o, i)));\n };\n return (t)=>{\n let e = t.filePath;\n if (l.has(e)) return;\n if (!1 === t.typeAware) {\n let n = mergeAcc(C.get(e), t);\n C.set(e, n);\n let r = i.get(e) ?? n.taskCount;\n if (n.taskCount < r) return;\n c(e, n, !a.has(e));\n return;\n }\n if (!0 === t.typeAware) {\n var n;\n let r = mergeAcc(g.get(e), t);\n g.set(e, r);\n let o = a.get(e) ?? r.taskCount;\n if (r.taskCount < o) return;\n c(e, (n = C.get(e), n ? {\n taskCount: n.taskCount + r.taskCount,\n issueCount: n.issueCount + r.issueCount,\n errorCount: n.errorCount + r.errorCount,\n warningCount: n.warningCount + r.warningCount,\n duration: n.duration + r.duration\n } : r), !0);\n return;\n }\n let r = (i.get(e) ?? 0) + (a.get(e) ?? 0), o = mergeAcc(C.get(e), t);\n C.set(e, o), o.taskCount < (r || o.taskCount) || c(e, o, !0);\n };\n}\n","import t from 'node:process';\nimport o from 'picocolors';\nimport { createRuntimeCache as e } from '@ngcompass/cache';\nimport { getReporter as r } from '@ngcompass/reporters';\nimport { Spinner as s } from '../../spinner.js';\nimport { exitWithError as a } from '../exit.js';\nimport { resolvePerformanceOptions as i } from './options.js';\nimport { formatAnalysisProgressMessage as n, normalizeReporterFormat as p, resolveReporterFormat as l, shouldFailAnalysis as m, toError as c } from './resolve.js';\nimport { buildPlanStep as u, discoverFilesStep as f, loadConfigurationStep as d, resolveRulesStep as h, runAnalysisStep as k, saveToCacheStep as g } from './steps.js';\nimport { createFileProgressLogger as y } from './progress.js';\nexport function registerAnalyzeCommand(w, v) {\n w.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('--skip-type-check', 'Skip rules that require the TypeScript type checker (fastest, lowest memory)').action(async (w)=>{\n let j = performance.now(), x = r(p(w.format), {\n compact: !!w.compact,\n outputPath: w.output,\n quiet: !!w.quiet,\n noRecommendation: !1 === w.recommendation\n }), S = v, q = 0;\n try {\n let a = await d(w, v, x);\n if (!a) {\n q = 1;\n return;\n }\n let { config: p } = a, c = i(w, p);\n S = e(p, t.cwd());\n let F = l(w.format, p.outputFormat);\n x = r(F, {\n compact: !!w.compact,\n outputPath: w.output ?? p.outputPath,\n quiet: !!w.quiet,\n noRecommendation: !1 === w.recommendation\n });\n let P = await f(p, w, S, x);\n if (!P) {\n q = 1;\n return;\n }\n let T = await h(p, w, x);\n if (!T) {\n q = 1;\n return;\n }\n let W = await u(P, T, S, w, x, p, c.maxWorkers);\n if (!W) {\n q = 1;\n return;\n }\n let E = 'console' === F ? t.stdout : t.stderr, z = new s(E), A = W.tasks.length + (W.skippedTasks?.length ?? 0);\n z.start(n(0, A));\n let R = y(W, (t)=>z.writeLine(t), t.cwd()), C = [], L = await k(W, S, c, w, x, P, p, (t, o)=>{\n z.update(n(t, o));\n }, R, (t)=>{\n z.writeLine(`${o.yellow('[!]')} ${o.yellow(t)}`);\n }, (t)=>{\n C.push(t);\n });\n if (z.stop(), !L) {\n q = 1;\n return;\n }\n let O = performance.now() - j, b = {\n scannedFiles: new Set([\n ...W.tasks.map((t)=>t.filePath),\n ...(W.skippedTasks ?? []).map((t)=>t.filePath)\n ]).size,\n discoveredFiles: P.length,\n totalFiles: L.stats.totalFiles,\n totalTasks: W.tasks.length + (W.skippedTasks?.length ?? 0),\n cachedTasks: W.precomputedAnalysis ? W.tasks.length : void 0,\n totalErrors: L.stats.totalErrors,\n totalWarnings: L.stats.totalWarnings,\n failOnSeverity: p.failOnSeverity,\n maxWarnings: p.maxWarnings,\n skippedFiles: C.length || void 0,\n skippedFilePaths: C.length ? C : void 0,\n duration: O\n };\n 'console' === F && x.summary(b), x.parseErrors(L.parseErrors), x.report(L.results), 'console' !== F && (x.step('❯ Writing report...'), x.summary(b)), W.precomputedAnalysis || await g(L.results, S, w, x), m(p, L.stats) && (q = 1);\n } catch (t) {\n x.error(c(t)), q = 1;\n } finally{\n S && S !== v && await S.flush(), 0 !== q && a(q);\n }\n });\n}\n","import o from 'node:process';\nimport { getConfigReporter as r } from '@ngcompass/reporters';\nimport { validateConfig as i } from '@ngcompass/config';\nimport { exitWithError as t, printError as e } from './exit.js';\nexport function registerConfigCommand(a, n) {\n a.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 (a)=>{\n try {\n let e = await i({\n cwd: o.cwd(),\n cache: a.cache ? n : void 0,\n profile: a.profile\n }), c = r();\n await c.renderHealthReport(e.report), e.report.valid || t();\n } catch (o) {\n e('Error', o), t();\n }\n });\n}\n","import { createRuntimeCache as e } from '@ngcompass/cache';\nimport { getCacheReporter as a } from '@ngcompass/reporters';\nimport { resolveConfig as o } from '@ngcompass/config';\nimport t from 'picocolors';\nimport r from 'node:process';\nimport { exitWithError as i, printError as c } from './exit.js';\nlet CACHE_CLEAR_TYPES = [\n 'ast',\n 'config',\n 'results',\n 'all'\n], CACHE_CLEAR_TYPE_VALUES = new Set(CACHE_CLEAR_TYPES);\nexport function registerCacheCommand(e, o) {\n let n = e.command('cache').description('Inspect and manage analysis cache data');\n n.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 var n;\n let l, s = (l = n = e.type, CACHE_CLEAR_TYPE_VALUES.has(l)) ? n : (c(`Invalid cache type: ${n}. Must be one of: ${CACHE_CLEAR_TYPES.join(', ')}`), i()), p = a();\n r.stdout.write(t.dim(' › Clearing cache...\\n'));\n try {\n let a = await resolveRuntimeCache(o, {\n profile: e.profile,\n allowDisabled: !0\n });\n 'all' === s ? await a.clear() : await a.clearType(s), p.renderClearResult(s);\n } catch (e) {\n c('Error clearing cache', e), i();\n }\n }), n.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 = a();\n try {\n let a = await resolveRuntimeCache(o, {\n profile: e.profile,\n allowDisabled: !0\n }), r = await a.getInfo();\n t.renderCacheInfo(r);\n } catch (e) {\n c('Error getting cache info', e), i();\n }\n }), n.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 a = await resolveRuntimeCache(o, {\n profile: e.profile,\n allowDisabled: !0\n });\n r.stdout.write(`${a.getCachePath()}\\n`);\n });\n}\nasync function resolveRuntimeCache(a, t = {}) {\n let i = t.cwd ?? r.cwd();\n try {\n let r = await o({\n profile: t.profile,\n cache: a,\n cwd: i\n });\n if (!r.report.valid || !r.config) return a;\n return e(r.config, i, {\n allowDisabled: t.allowDisabled\n }) ?? a;\n } catch (e) {\n return c('Unable to resolve cache configuration; using default cache', e), a;\n }\n}\n","import { getRulesReporter as e } from '@ngcompass/reporters';\nimport { getRuleListEntries as r, isBuiltinPreset as t } from '@ngcompass/rules';\nimport s from 'picocolors';\nimport { exitWithError as o, printError as i } from './exit.js';\nexport function registerRulesCommand(n) {\n n.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((n, l)=>{\n l.preset && !t(l.preset) && (i(`Unknown preset: \"${l.preset}\".`), process.stderr.write(s.dim('Available presets: recommended, strict, all, performance, reactivity\\n')), o());\n let p = r(), m = e({\n preset: l.preset\n });\n if (n) {\n let e = p.find((e)=>e.name === n);\n if (!e) {\n i(`Rule \"${n}\" not found.`), process.stderr.write(s.dim('Run `ngcompass rules` to list available rules.\\n')), o();\n return;\n }\n m.renderSingleRule(e);\n } else m.render(p);\n });\n}\n","import { registerInitCommand as o } from './init.js';\nimport { registerAnalyzeCommand as r } from './analyze/index.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, e) {\n o(s, e), r(s, e), m(s, e), i(s, e), t(s);\n}\n","import { spawnSync as e } from 'node:child_process';\nimport r from 'node:process';\nlet RESPAWN_GUARD_ENV = 'NGCOMPASS_GC_RESPAWNED', HELP_VERSION_FLAGS = new Set([\n '--version',\n '-V',\n '--help',\n '-h'\n]);\nexport function resolveRespawnOutcome(e, r) {\n return e.error ? {\n kind: 'fallback'\n } : null !== e.signal || null === e.status ? r <= 5000 ? {\n kind: 'fallback'\n } : {\n kind: 'crash',\n code: 1\n } : {\n kind: 'exit',\n code: e.status\n };\n}\nexport function maybeRespawnWithExposeGc() {\n if ('function' == typeof globalThis.gc || '1' === r.env[RESPAWN_GUARD_ENV]) return;\n let n = r.argv.slice(2);\n if (!((e)=>{\n if (!e.includes('analyze')) return !1;\n for (let r of e)if (HELP_VERSION_FLAGS.has(r)) return !1;\n return !0;\n })(n)) return;\n let o = r.argv[1];\n if (!o) return;\n let t = performance.now(), i = resolveRespawnOutcome(e(r.execPath, [\n '--expose-gc',\n ...r.execArgv,\n o,\n ...n\n ], {\n stdio: 'inherit',\n env: {\n ...r.env,\n [RESPAWN_GUARD_ENV]: '1'\n }\n }), performance.now() - t);\n 'fallback' === i.kind ? r.stderr.write(`[ngcompass] Could not relaunch with --expose-gc (likely low memory); continuing without proactive garbage-collection hints.\\n`) : ('crash' === i.kind && r.stderr.write(`[ngcompass] Analysis crashed (likely out of memory); re-run with --skip-type-check or raise --max-old-space-size.\\n`), r.exit(i.code));\n}\n","import { Command as e } from 'commander';\nimport { registerCommands as s } from '../commands/index.js';\nimport { enableDebug as o, PACKAGE_VERSION as n } from '@ngcompass/common';\nimport { createCacheContext as a } from '@ngcompass/cache';\nimport { registerAllBuiltinRules as r } from '@ngcompass/rules';\nimport { restoreCursor as t, printError as c } from '../commands/exit.js';\nimport { maybeRespawnWithExposeGc as i } from './gc-respawn.js';\nlet shutdownInProgress = !1, gracefulShutdown = async (e, s)=>{\n if (!shutdownInProgress) {\n if (shutdownInProgress = !0, t(), e) try {\n let s = new Promise((e)=>setTimeout(e, 10_000).unref());\n await Promise.race([\n e.flush(),\n s\n ]);\n } catch (e) {\n c('[ngcompass] Cache flush failed during shutdown', e);\n }\n process.exit(s);\n }\n}, handleFatalAsyncFailure = (e, s, o)=>{\n c(`[ngcompass] ${s}`, o), gracefulShutdown(e, 1);\n}, printRunBanner = async (e)=>{\n let { default: s } = await import('picocolors'), o = process.cwd();\n process.stdout.write(`\\n${s.dim('>')} ${s.dim(`ngcompass@${n}`)} ${s.dim(e)} ${s.dim(o)}\\n${s.dim('>')} ${s.dim('ngcompass')} ${s.dim('run')}\\n\\n ${s.bgCyan(s.white(s.bold(` ${e.toUpperCase()} `)))} ${s.cyan(n)} ${s.dim(o)}\\n\\n`);\n};\nexport async function run() {\n i();\n let t = new e();\n t.name('ngcompass').description('Static analysis and architecture insights for Angular codebases.').version(n, '-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 (e, s)=>{\n let n;\n if (e.opts().debug && o('debug', 'all'), 'json' !== (n = s.opts().format) && 'sarif' !== n && 'html' !== n && 'ui' !== n) {\n let e = s.parent, o = e && 'ngcompass' !== e.name() ? e.name() : s.name();\n await printRunBanner(o);\n }\n });\n let m = a();\n process.on('SIGINT', ()=>void gracefulShutdown(m, 130)), process.on('SIGTERM', ()=>void gracefulShutdown(m, 143)), process.on('uncaughtException', (e)=>{\n handleFatalAsyncFailure(m, 'Unexpected error', e);\n }), process.on('unhandledRejection', (e)=>{\n handleFatalAsyncFailure(m, 'Unhandled promise rejection', e);\n });\n try {\n if (r(), s(t, m), !process.argv.slice(2).length) return void t.outputHelp();\n await t.parseAsync(process.argv), await m.flush(), process.exit(0);\n } catch (e) {\n c('[ngcompass] Fatal error', e), await gracefulShutdown(m, 1);\n }\n}\nrun().catch((e)=>{\n c('[ngcompass] Fatal error', e), t(), process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/exit.ts","../src/commands/init.ts","../src/spinner.ts","../src/commands/analyze/options.ts","../src/commands/analyze/resolve.ts","../src/commands/analyze/steps.ts","../src/commands/analyze/progress.ts","../src/commands/analyze/index.ts","../src/commands/config.ts","../src/commands/cache.ts","../src/commands/rules.ts","../src/circular-export.ts","../src/commands/circular.ts","../src/commands/graph.ts","../src/commands/index.ts","../src/bin/gc-respawn.ts","../src/bin/ngcompass.ts"],"names":["restoreCursor","process","stdout","isTTY","write","exitWithError","code","exit","printError","message","detail","tail","undefined","Error","String","console","error","pc","red","registerInitCommand","program","_cache","command","description","option","cwd","action","options","result","initConfig","force","getConfigReporter","renderInitResult","success","alreadyExists","FRAMES","Spinner","timer","frameIndex","stream","start","render","setInterval","setLiveRedraw","clear","redraw","cyan","dim","update","writeLine","line","stop","clearInterval","frame","length","parsePositiveIntegerOption","value","optionName","parsed","Number","isInteger","resolvePerformanceOptions","config","maxWorkers","normalizeReporterFormat","format","resolveReporterFormat","cliFormat","configFormat","shouldFailAnalysis","stats","failOnSeverity","maxWarnings","totalErrors","totalWarnings","resolveParserProjectPath","parserOptions","project","rootDir","tsconfigRootDir","path","resolve","toError","formatAnalysisProgressMessage","completed","total","toLocaleString","loadConfigurationStep","cache","reporter","tStart","performance","now","step","configResult","resolveConfig","profile","report","valid","issueLines","issues","map","issue","pathString","join","severity","toUpperCase","pluginList","plugins","configDir","loadPlugins","getGlobalRegistry","info","debug","toFixed","discoverFilesStep","scanResult","scan","include","DEFAULT_INCLUDE_PATTERNS","exclude","ignorePatterns","tsConfigPath","respectGitignore","ok","data","files","resolveRulesStep","effectiveConfig","rule","rules","extends","rulesResult","resolveRules","enabledRules","getEnabledRules","size","buildPlanStep","planResult","buildExecutionPlan","incremental","forceRerun","workerCount","overrides","precomputedAnalysis","tasks","runAnalysisStep","plan","performanceOptions","onProgress","onFileProgress","onNotice","onFileSkipped","configureRuleExecutor","executeBatchedNewEngineRules","isNewEngineRule","runAnalysis","skipTypeCheck","saveToCacheStep","results","cacheEntries","taskId","push","setMany","ZERO_ACC","taskCount","issueCount","errorCount","warningCount","duration","buildExpectedMap","typeAware","Map","task","fp","filePath","needsTypeChecker","needsProjectContext","set","get","mergeAcc","prev","event","base","createFileProgressLogger","syntaxExpected","typeAwareExpected","syntaxDone","typeAwareDone","syntaxPrinted","Set","finalPrinted","print","acc","isFinal","has","guard","add","relativePath","hasIssues","status","green","dur","formatDuration","pluralise","relative","expected","a","totalExpected","registerAnalyzeCommand","startTime","getReporter","compact","outputPath","output","quiet","noRecommendation","recommendation","activeCache","exitCode","createRuntimeCache","reporterFormat","outputFormat","progressStream","stderr","spinner","totalChecks","skippedTasks","logFileProgress","skippedFiles","analysis","yellow","summary","scannedFiles","t","discoveredFiles","totalFiles","totalTasks","cachedTasks","skippedFilePaths","parseErrors","flush","registerConfigCommand","validateConfig","renderHealthReport","CACHE_CLEAR_TYPES","CACHE_CLEAR_TYPE_VALUES","registerCacheCommand","cacheCmd","type","getCacheReporter","resolveRuntimeCache","allowDisabled","clearType","renderClearResult","err","getInfo","renderCacheInfo","getCachePath","fallbackCache","registerRulesCommand","ruleName","opts","preset","isBuiltinPreset","entries","getRuleListEntries","getRulesReporter","find","e","name","renderSingleRule","toJsonGraph","payload","nodes","edges","from","targets","graph","fromLabel","toRelative","to","generatedAt","toISOString","fileCount","focus","depth","nodeCount","edgeCount","cycles","JSON","stringify","cycle","file","cycleCount","replace","registerCircularCommand","rawOptions","isJsonOutput","focusFile","raw","stepOptions","importGraph","buildGraph","input","absolute","normalizeSlashes","needle","matches","key","keys","includes","sample","slice","match","neighborhood","collectNeighborhood","allCycles","detectCycles","filterCyclesByNeighborhood","emitJsonExport","scopeGraphToNodes","Date","n","lines","i","formatted","buildImportGraphOxc","done","pct","Promise","setImmediate","findCircularDependencies","content","finalPath","fs","writeFile","relPath","DEFAULT_OUTPUT_PATH","registerGraphCommand","fullGraph","json","writeJsonFile","registerCommands","RESPAWN_GUARD_ENV","HELP_VERSION_FLAGS","resolveRespawnOutcome","elapsedMs","kind","signal","maybeRespawnWithExposeGc","globalThis","gc","env","args","argv","arg","scriptPath","startedAt","outcome","spawnSync","execPath","execArgv","stdio","shutdownInProgress","gracefulShutdown","flushTimeout","setTimeout","unref","race","handleFatalAsyncFailure","label","reason","printRunBanner","commandName","default","PACKAGE_VERSION","bgCyan","white","bold","run","Command","version","addHelpText","hook","thisCommand","actionCommand","enableDebug","actionOpts","parent","createCacheContext","on","registerAllBuiltinRules","outputHelp","parseAsync","catch"],"mappings":"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","file":"index.js","sourcesContent":["import r from 'picocolors';\nexport const restoreCursor = ()=>{\n process.stdout.isTTY && process.stdout.write('\\x1B[?25h');\n};\nexport const exitWithError = (r = 1)=>{\n restoreCursor(), process.exit(r);\n};\nexport const printError = (o, s)=>{\n let t = void 0 === s ? '' : `: ${s instanceof Error ? s.message : String(s)}`;\n console.error(`${r.red(o)}${t}`);\n};\n","import { getConfigReporter as r } from '@ngcompass/reporters';\nimport { initConfig as t } from '@ngcompass/config';\nimport { exitWithError as i, printError as o } from './exit.js';\nexport function registerInitCommand(e, n) {\n e.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)=>{\n try {\n let o = await t({\n cwd: e.cwd,\n force: e.force\n }), n = r();\n await n.renderInitResult(o), o.success || o.alreadyExists || i();\n } catch (r) {\n o('Error initializing configuration', r), i();\n }\n });\n}\n","import t from 'picocolors';\nimport { setLiveRedraw as e } from '@ngcompass/common';\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(s) {\n (this.message = s, this.frameIndex = 0, this.isTTY) ? (this.stream.write('\\x1B[?25l'), this.render(), this.timer = setInterval(()=>this.render(), 80), e({\n clear: ()=>this.stream.write('\\r\\x1B[K'),\n redraw: ()=>this.render()\n })) : this.stream.write(`${t.cyan('❯')} ${t.dim(s)}\\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 e(void 0), 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","export function parsePositiveIntegerOption(r, e) {\n if (void 0 === r) return;\n let t = Number(r);\n if (!Number.isInteger(t) || t < 1) throw Error(`${e} must be a positive integer.`);\n return t;\n}\nexport function resolvePerformanceOptions(r, e) {\n return {\n maxWorkers: parsePositiveIntegerOption(r.maxWorkers, '--max-workers') ?? e.maxWorkers\n };\n}\n","import r from 'node:path';\nexport function normalizeReporterFormat(r) {\n return 'ui' === r ? 'html' : r ?? 'console';\n}\nexport function resolveReporterFormat(r, t) {\n if (r) return normalizeReporterFormat(r);\n switch(t){\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}\nexport function shouldFailAnalysis(r, t) {\n let o = r.failOnSeverity ?? 'error', e = r.maxWarnings ?? 10;\n return t.totalErrors > 0 || 'warn' === o && t.totalWarnings > 0 || t.totalWarnings > e;\n}\nexport function resolveParserProjectPath(t, o) {\n if (!t?.project) return;\n let e = t.tsconfigRootDir ? r.resolve(o, t.tsconfigRootDir) : o;\n return r.resolve(e, t.project);\n}\nexport function toError(r) {\n return r instanceof Error ? r : Error(String(r));\n}\nexport function formatAnalysisProgressMessage(r, t) {\n return `Running analysis: ${r.toLocaleString()}/${t.toLocaleString()} checks complete...`;\n}\n","import e from 'node:process';\nimport { DEFAULT_INCLUDE_PATTERNS as r } from '@ngcompass/common';\nimport { loadPlugins as o, resolveConfig as n } from '@ngcompass/config';\nimport { configureRuleExecutor as t, runAnalysis as i } from '@ngcompass/engine';\nimport { buildExecutionPlan as a } from '@ngcompass/planner';\nimport { scan as s } from '@ngcompass/scanner';\nimport { executeBatchedNewEngineRules as l, getEnabledRules as c, getGlobalRegistry as d, isNewEngineRule as p, resolveRules as u } from '@ngcompass/rules';\nimport { resolveParserProjectPath as f } from './resolve.js';\nexport async function loadConfigurationStep(r, t, i) {\n let a = performance.now();\n i.step('❯ Loading configuration...');\n let s = await n({\n profile: r.profile,\n cache: t,\n cwd: e.cwd()\n });\n if (!s.report.valid) {\n let e = s.report.issues.map((e)=>{\n let r = e.path?.join('.') || 'root';\n return `[${e.severity.toUpperCase()}] ${r}: ${e.message}`;\n });\n return i.error(Error([\n 'Configuration validation failed',\n ...e\n ].join('\\n'))), null;\n }\n if (!s.config) return i.error(Error('No configuration found')), null;\n let l = s.config.plugins;\n if (l && l.length > 0) {\n i.step(`❯ Loading ${l.length} plugin(s)...`);\n let r = e.cwd();\n await o(l, r, d()), i.info(`Loaded ${l.length} plugin(s)`);\n }\n return i.debug(`Config resolve: ${(performance.now() - a).toFixed(2)}ms`), {\n config: s.config\n };\n}\nexport async function discoverFilesStep(o, n, t, i) {\n let a = performance.now();\n i.step('❯ Discovering files...');\n let l = await s({\n rootDir: e.cwd(),\n include: o.include ?? [\n ...r\n ],\n exclude: o.exclude ?? [],\n ignorePatterns: o.ignorePatterns,\n tsConfigPath: f(o.parserOptions, e.cwd()),\n respectGitignore: !0,\n debug: n.debug,\n cache: t\n });\n return l.ok ? (i.info(`❯ Found ${l.data.files.length} files in ${(performance.now() - a).toFixed(0)}ms`), i.debug(`File discovery: ${(performance.now() - a).toFixed(2)}ms`), l.data.files) : (i.error(Error(`File discovery failed: ${l.error.message}`)), null);\n}\nexport async function resolveRulesStep(r, o, n) {\n let t = performance.now();\n n.step('❯ Loading rules...');\n let i = r;\n o.rule && (n.info(`Filtering analysis to single rule: ${o.rule}`), i = {\n ...r,\n rules: {\n [o.rule]: 'error'\n },\n extends: []\n });\n let a = await u(i, e.cwd());\n if (!a.ok) return n.error(Error(`Rule resolution failed: ${a.error.message}`)), null;\n let s = c(a.data.rules);\n return n.info(`❯ Loaded ${s.size} active rules in ${(performance.now() - t).toFixed(0)}ms`), n.debug(`Rule resolution: ${(performance.now() - t).toFixed(2)}ms`), s;\n}\nexport async function buildPlanStep(r, o, n, t, i, s, l) {\n let c = performance.now();\n i.step('❯ Planning analysis...');\n let d = await a({\n files: r,\n rules: o,\n rootDir: e.cwd(),\n cache: n,\n debug: t.debug,\n incremental: t.force ? {\n forceRerun: !0\n } : void 0,\n workerCount: l,\n overrides: s.overrides\n });\n return d.ok ? (d.data.precomputedAnalysis ? i.info('❯ Reused cached analysis plan') : i.info(`❯ Prepared ${d.data.tasks.length.toLocaleString()} checks in ${(performance.now() - c).toFixed(0)}ms`), i.debug(`Plan build: ${(performance.now() - c).toFixed(2)}ms`), d.data) : (i.error(Error(`Execution plan building failed: ${d.error.message}`)), null);\n}\nexport async function runAnalysisStep(r, o, n, a, s, c, d, u, f, g, m) {\n let w = performance.now();\n t(l, p);\n let $ = await i(r, {\n rootDir: e.cwd(),\n cache: o,\n debug: a.debug,\n files: c,\n maxWorkers: n.maxWorkers,\n skipTypeCheck: a.skipTypeCheck,\n parserOptions: d?.parserOptions,\n onProgress: u,\n onFileProgress: f,\n onNotice: g,\n onFileSkipped: m\n });\n return $.ok ? (s.debug(`Execution: ${(performance.now() - w).toFixed(2)}ms`), $.data) : (s.error(Error(`Analysis failed: ${$.error.message}`)), null);\n}\nexport async function saveToCacheStep(e, r, o, n) {\n if (!r) return;\n let t = performance.now(), i = [];\n for (let r of e)r.taskId && i.push([\n r.taskId,\n r\n ]);\n i.length > 0 && (await r.results.setMany(i), o.debug && n.debug(`Saved ${i.length} results to cache (${(performance.now() - t).toFixed(2)}ms)`));\n}\n","import t from 'node:path';\nimport e from 'picocolors';\nimport { formatDuration as n, pluralise as r } from '@ngcompass/common';\nlet ZERO_ACC = {\n taskCount: 0,\n issueCount: 0,\n errorCount: 0,\n warningCount: 0,\n duration: 0\n};\nfunction buildExpectedMap(t, e) {\n let n = new Map();\n for (let r of t.tasks){\n let t = r.filePath;\n 'string' == typeof t && 0 !== t.length && (r.needsTypeChecker || r.needsProjectContext) === e && n.set(t, (n.get(t) ?? 0) + 1);\n }\n return n;\n}\nfunction mergeAcc(t, e) {\n let n = t ?? ZERO_ACC;\n return {\n taskCount: n.taskCount + e.taskCount,\n issueCount: n.issueCount + e.issueCount,\n errorCount: n.errorCount + e.errorCount,\n warningCount: n.warningCount + e.warningCount,\n duration: n.duration + e.duration\n };\n}\nexport function createFileProgressLogger(o, u, s) {\n let i = buildExpectedMap(o, !1), a = buildExpectedMap(o, !0), C = new Map(), g = new Map(), d = new Set(), l = new Set(), c = (o, i, a)=>{\n if (l.has(o)) return;\n let C = a ? l : d;\n C.has(o) || (C.add(o), u(function(t, o) {\n let u = o.issueCount > 0, s = u ? e.red('❯') : e.green('❯'), i = u ? e.red(n(o.duration)) : e.green(n(o.duration));\n if (u) {\n let n = `${o.issueCount.toLocaleString()} ${r(o.issueCount, 'issue')}`;\n return `${s} ${e.red(t)} ${i} ${e.red(n)}`;\n }\n return `${s} ${e.dim(t)} ${i}`;\n }(t.relative(s, o) || o, i)));\n };\n return (t)=>{\n let e = t.filePath;\n if (l.has(e)) return;\n if (!1 === t.typeAware) {\n let n = mergeAcc(C.get(e), t);\n C.set(e, n);\n let r = i.get(e) ?? n.taskCount;\n if (n.taskCount < r) return;\n c(e, n, !a.has(e));\n return;\n }\n if (!0 === t.typeAware) {\n var n;\n let r = mergeAcc(g.get(e), t);\n g.set(e, r);\n let o = a.get(e) ?? r.taskCount;\n if (r.taskCount < o) return;\n c(e, (n = C.get(e), n ? {\n taskCount: n.taskCount + r.taskCount,\n issueCount: n.issueCount + r.issueCount,\n errorCount: n.errorCount + r.errorCount,\n warningCount: n.warningCount + r.warningCount,\n duration: n.duration + r.duration\n } : r), !0);\n return;\n }\n let r = (i.get(e) ?? 0) + (a.get(e) ?? 0), o = mergeAcc(C.get(e), t);\n C.set(e, o), o.taskCount < (r || o.taskCount) || c(e, o, !0);\n };\n}\n","import t from 'node:process';\nimport o from 'picocolors';\nimport { createRuntimeCache as e } from '@ngcompass/cache';\nimport { getReporter as r } from '@ngcompass/reporters';\nimport { Spinner as s } from '../../spinner.js';\nimport { exitWithError as a } from '../exit.js';\nimport { resolvePerformanceOptions as i } from './options.js';\nimport { formatAnalysisProgressMessage as n, normalizeReporterFormat as p, resolveReporterFormat as l, shouldFailAnalysis as m, toError as c } from './resolve.js';\nimport { buildPlanStep as u, discoverFilesStep as f, loadConfigurationStep as d, resolveRulesStep as h, runAnalysisStep as k, saveToCacheStep as g } from './steps.js';\nimport { createFileProgressLogger as y } from './progress.js';\nexport function registerAnalyzeCommand(w, v) {\n w.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('--skip-type-check', 'Skip rules that require the TypeScript type checker (fastest, lowest memory)').action(async (w)=>{\n let j = performance.now(), x = r(p(w.format), {\n compact: !!w.compact,\n outputPath: w.output,\n quiet: !!w.quiet,\n noRecommendation: !1 === w.recommendation\n }), S = v, q = 0;\n try {\n let a = await d(w, v, x);\n if (!a) {\n q = 1;\n return;\n }\n let { config: p } = a, c = i(w, p);\n S = e(p, t.cwd());\n let F = l(w.format, p.outputFormat);\n x = r(F, {\n compact: !!w.compact,\n outputPath: w.output ?? p.outputPath,\n quiet: !!w.quiet,\n noRecommendation: !1 === w.recommendation\n });\n let P = await f(p, w, S, x);\n if (!P) {\n q = 1;\n return;\n }\n let T = await h(p, w, x);\n if (!T) {\n q = 1;\n return;\n }\n let W = await u(P, T, S, w, x, p, c.maxWorkers);\n if (!W) {\n q = 1;\n return;\n }\n let E = 'console' === F ? t.stdout : t.stderr, z = new s(E), A = W.tasks.length + (W.skippedTasks?.length ?? 0);\n z.start(n(0, A));\n let R = y(W, (t)=>z.writeLine(t), t.cwd()), C = [], L = await k(W, S, c, w, x, P, p, (t, o)=>{\n z.update(n(t, o));\n }, R, (t)=>{\n z.writeLine(`${o.yellow('[!]')} ${o.yellow(t)}`);\n }, (t)=>{\n C.push(t);\n });\n if (z.stop(), !L) {\n q = 1;\n return;\n }\n let O = performance.now() - j, b = {\n scannedFiles: new Set([\n ...W.tasks.map((t)=>t.filePath),\n ...(W.skippedTasks ?? []).map((t)=>t.filePath)\n ]).size,\n discoveredFiles: P.length,\n totalFiles: L.stats.totalFiles,\n totalTasks: W.tasks.length + (W.skippedTasks?.length ?? 0),\n cachedTasks: W.precomputedAnalysis ? W.tasks.length : void 0,\n totalErrors: L.stats.totalErrors,\n totalWarnings: L.stats.totalWarnings,\n failOnSeverity: p.failOnSeverity,\n maxWarnings: p.maxWarnings,\n skippedFiles: C.length || void 0,\n skippedFilePaths: C.length ? C : void 0,\n duration: O\n };\n 'console' === F && x.summary(b), x.parseErrors(L.parseErrors), x.report(L.results), 'console' !== F && (x.step('❯ Writing report...'), x.summary(b)), W.precomputedAnalysis || await g(L.results, S, w, x), m(p, L.stats) && (q = 1);\n } catch (t) {\n x.error(c(t)), q = 1;\n } finally{\n S && S !== v && await S.flush(), 0 !== q && a(q);\n }\n });\n}\n","import o from 'node:process';\nimport { getConfigReporter as r } from '@ngcompass/reporters';\nimport { validateConfig as i } from '@ngcompass/config';\nimport { exitWithError as t, printError as e } from './exit.js';\nexport function registerConfigCommand(a, n) {\n a.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 (a)=>{\n try {\n let e = await i({\n cwd: o.cwd(),\n cache: a.cache ? n : void 0,\n profile: a.profile\n }), c = r();\n await c.renderHealthReport(e.report), e.report.valid || t();\n } catch (o) {\n e('Error', o), t();\n }\n });\n}\n","import { createRuntimeCache as e } from '@ngcompass/cache';\nimport { getCacheReporter as a } from '@ngcompass/reporters';\nimport { resolveConfig as o } from '@ngcompass/config';\nimport t from 'picocolors';\nimport r from 'node:process';\nimport { exitWithError as i, printError as c } from './exit.js';\nlet CACHE_CLEAR_TYPES = [\n 'ast',\n 'config',\n 'results',\n 'all'\n], CACHE_CLEAR_TYPE_VALUES = new Set(CACHE_CLEAR_TYPES);\nexport function registerCacheCommand(e, o) {\n let n = e.command('cache').description('Inspect and manage analysis cache data');\n n.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 var n;\n let l, s = (l = n = e.type, CACHE_CLEAR_TYPE_VALUES.has(l)) ? n : (c(`Invalid cache type: ${n}. Must be one of: ${CACHE_CLEAR_TYPES.join(', ')}`), i()), p = a();\n r.stdout.write(t.dim(' › Clearing cache...\\n'));\n try {\n let a = await resolveRuntimeCache(o, {\n profile: e.profile,\n allowDisabled: !0\n });\n 'all' === s ? await a.clear() : await a.clearType(s), p.renderClearResult(s);\n } catch (e) {\n c('Error clearing cache', e), i();\n }\n }), n.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 = a();\n try {\n let a = await resolveRuntimeCache(o, {\n profile: e.profile,\n allowDisabled: !0\n }), r = await a.getInfo();\n t.renderCacheInfo(r);\n } catch (e) {\n c('Error getting cache info', e), i();\n }\n }), n.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 a = await resolveRuntimeCache(o, {\n profile: e.profile,\n allowDisabled: !0\n });\n r.stdout.write(`${a.getCachePath()}\\n`);\n });\n}\nasync function resolveRuntimeCache(a, t = {}) {\n let i = t.cwd ?? r.cwd();\n try {\n let r = await o({\n profile: t.profile,\n cache: a,\n cwd: i\n });\n if (!r.report.valid || !r.config) return a;\n return e(r.config, i, {\n allowDisabled: t.allowDisabled\n }) ?? a;\n } catch (e) {\n return c('Unable to resolve cache configuration; using default cache', e), a;\n }\n}\n","import { getRulesReporter as e } from '@ngcompass/reporters';\nimport { getRuleListEntries as r, isBuiltinPreset as t } from '@ngcompass/rules';\nimport s from 'picocolors';\nimport { exitWithError as o, printError as i } from './exit.js';\nexport function registerRulesCommand(n) {\n n.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((n, l)=>{\n l.preset && !t(l.preset) && (i(`Unknown preset: \"${l.preset}\".`), process.stderr.write(s.dim('Available presets: recommended, strict, all, performance, reactivity\\n')), o());\n let p = r(), m = e({\n preset: l.preset\n });\n if (n) {\n let e = p.find((e)=>e.name === n);\n if (!e) {\n i(`Rule \"${n}\" not found.`), process.stderr.write(s.dim('Run `ngcompass rules` to list available rules.\\n')), o();\n return;\n }\n m.renderSingleRule(e);\n } else m.render(p);\n });\n}\n","import t from 'node:path';\nexport function toJsonGraph(t) {\n let e = [], o = [];\n for (let [r, n] of t.graph){\n let l = toRelative(r, t.rootDir);\n for (let r of (e.push(l), n))o.push([\n l,\n toRelative(r, t.rootDir)\n ]);\n }\n let r = {\n rootDir: t.rootDir,\n generatedAt: t.generatedAt.toISOString(),\n fileCount: t.fileCount,\n focus: t.focus ?? null,\n depth: t.focus ? t.depth : null,\n nodeCount: e.length,\n edgeCount: o.length,\n nodes: e,\n edges: o\n };\n if (void 0 === t.cycles) return JSON.stringify(r, null, 2) + '\\n';\n let n = t.cycles.map((e)=>e.map((e)=>toRelative(e, t.rootDir)));\n return JSON.stringify({\n ...r,\n cycleCount: n.length,\n cycles: n\n }, null, 2) + '\\n';\n}\nfunction toRelative(e, o) {\n return (t.relative(o, e) || e).replace(/\\\\/g, '/');\n}\n","import e from 'node:fs/promises';\nimport r from 'node:path';\nimport t from 'node:process';\nimport o from 'picocolors';\nimport { createRuntimeCache as i } from '@ngcompass/cache';\nimport { getReporter as n } from '@ngcompass/reporters';\nimport { buildImportGraphOxc as a, findCircularDependencies as s, collectNeighborhood as l, scopeGraphToNodes as c, filterCyclesByNeighborhood as p } from '@ngcompass/engine';\nimport { Spinner as f } from '../spinner.js';\nimport { exitWithError as u } from './exit.js';\nimport { loadConfigurationStep as d, discoverFilesStep as m } from './analyze/steps.js';\nimport { toJsonGraph as h } from '../circular-export.js';\nexport function registerCircularCommand(e, a) {\n e.command('circular').description('Detect circular dependencies in the project import graph').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').option('--focus <file>', 'Scope to a file and its import neighborhood').option('--depth <n>', \"Neighborhood radius in import hops for --focus (default: 1)\").option('--output <path>', 'Write the report/export to a file instead of stdout').action(async (e)=>{\n let s = 'json' == ('json' === e.format ? 'json' : 'console'), f = n(s ? 'json' : 'console', {}), h = a, g = 0;\n try {\n var w, $, v;\n let n = function(e) {\n if (void 0 === e) return 1;\n let r = Number(e);\n if (Number.isInteger(r) && !(r < 0)) return r;\n }(e.depth);\n if (void 0 === n) {\n f.error(Error('--depth must be a non-negative integer')), g = 1;\n return;\n }\n let u = {\n profile: e.profile,\n force: e.force\n }, y = await d(u, a, f);\n if (!y) {\n g = 1;\n return;\n }\n let { config: j } = y;\n h = i(j, t.cwd());\n let b = await m(j, u, h, f);\n if (!b) {\n g = 1;\n return;\n }\n let x = await buildGraph(b, j.parserOptions, f), E = function(e, o, i) {\n if (!o) return;\n let n = normalizeSlashes(r.resolve(t.cwd(), o));\n if (e.has(n)) return n;\n let a = normalizeSlashes(o), s = [];\n for (let r of e.keys())r.includes(a) && s.push(r);\n if (1 === s.length) return s[0];\n if (0 === s.length) return void i.error(Error(`--focus: no file in the import graph matches \"${o}\"`));\n let l = s.slice(0, 10).map((e)=>` ${toRelative(e)}`).join('\\n');\n i.error(Error(`--focus: \"${o}\" matched ${s.length} files; be more specific:\\n${l}`));\n }(x, e.focus, f);\n if (e.focus && !E) {\n g = 1;\n return;\n }\n let S = E ? l(x, E, n) : void 0, z = await detectCycles(x), C = S ? p(z, S) : z;\n s ? await emitJsonExport({\n graph: S ? c(x, S) : x,\n cycles: C,\n rootDir: t.cwd(),\n focus: E ? toRelative(E) : void 0,\n depth: n,\n fileCount: b.length,\n generatedAt: new Date()\n }, e.output) : (w = C, $ = E, v = f, w.length > 0 ? v.info(function(e, t) {\n var i;\n let n = [\n '',\n o.red(`✖ Found ${e.length} circular ${(i = e.length, 1 === i ? 'dependency' : 'dependencies')}`),\n ''\n ];\n for(let i = 0; i < e.length; i++){\n let a = e[i].map((e)=>o.cyan(r.relative(t, e) || e)).join(o.dim(' → '));\n n.push(`${o.dim(`${i + 1})`)} ${a}`);\n }\n return n.push(''), n.join('\\n');\n }(w, t.cwd())) : $ ? v.info(`\\n${o.green('✔')} No circular dependencies found near ${o.cyan(toRelative($))}.\\n`) : v.info(`\\n${o.green('✔')} No circular dependencies found.\\n`)), C.length > 0 && (g = 1);\n } catch (e) {\n f.error(e instanceof Error ? e : Error(String(e))), g = 1;\n } finally{\n h && h !== a && await h.flush(), 0 !== g && u(g);\n }\n });\n}\nasync function buildGraph(e, r, o) {\n o.step('❯ Analyzing import graph for circular dependencies...');\n let i = new f(t.stderr);\n i.start(`Parsing ${e.length} files and building import graph...`);\n let { importGraph: n } = await a(e, {\n rootDir: t.cwd(),\n parserOptions: r,\n onProgress: (e, r)=>{\n let t = (e / r * 100).toFixed(0);\n i.update(`Parsing files (${e}/${r} — ${t}%)...`);\n }\n });\n return i.stop(), n;\n}\nasync function detectCycles(e) {\n return await new Promise((e)=>setImmediate(e)), s(e);\n}\nasync function emitJsonExport(i, n) {\n let a = h(i);\n if (n) {\n let i = r.resolve(t.cwd(), n);\n await e.writeFile(i, a, 'utf8');\n let s = r.relative(t.cwd(), i) || i;\n t.stderr.write(`${o.green('✔')} Wrote JSON graph to ${s}\\n`);\n return;\n }\n t.stdout.write(a);\n}\nfunction normalizeSlashes(e) {\n return e.replace(/\\\\/g, '/');\n}\nfunction toRelative(e) {\n return normalizeSlashes(r.relative(t.cwd(), e) || e);\n}\n","import e from 'node:fs/promises';\nimport r from 'node:path';\nimport t from 'node:process';\nimport o from 'picocolors';\nimport { createRuntimeCache as i } from '@ngcompass/cache';\nimport { getReporter as n } from '@ngcompass/reporters';\nimport { buildImportGraphOxc as a, collectNeighborhood as s, scopeGraphToNodes as p } from '@ngcompass/engine';\nimport { Spinner as l } from '../spinner.js';\nimport { exitWithError as f } from './exit.js';\nimport { loadConfigurationStep as c, discoverFilesStep as u } from './analyze/steps.js';\nimport { toJsonGraph as d } from '../circular-export.js';\nlet DEFAULT_OUTPUT_PATH = 'ngcompass-graph.json';\nexport function registerGraphCommand(e, o) {\n e.command('graph').description('Export the project dependency graph as JSON').option('-p, --profile <name>', 'Configuration profile to run').option('--force', 'Ignore cached results and re-run all checks').option('--focus <file>', 'Scope the graph to a file and its neighborhood').option('--depth <n>', \"Neighborhood radius in import hops for --focus (default: 2)\").option('--output <path>', `Output path for the JSON file (default: ${DEFAULT_OUTPUT_PATH})`).option('--stdout', 'Write JSON to stdout instead of a file').action(async (e)=>{\n let a = n(e.stdout ? 'json' : 'console', {}), l = o, m = 0;\n try {\n let n = function(e) {\n if (void 0 === e) return 2;\n let r = Number(e);\n if (Number.isInteger(r) && !(r < 0)) return r;\n }(e.depth);\n if (void 0 === n) {\n a.error(Error('--depth must be a non-negative integer')), m = 1;\n return;\n }\n let f = {\n profile: e.profile,\n force: e.force\n }, h = await c(f, o, a);\n if (!h) {\n m = 1;\n return;\n }\n let { config: g } = h;\n l = i(g, t.cwd());\n let w = await u(g, f, l, a);\n if (!w) {\n m = 1;\n return;\n }\n let v = await buildGraph(w, g.parserOptions, a), T = function(e, o, i) {\n if (!o) return;\n let n = normalizeSlashes(r.resolve(t.cwd(), o));\n if (e.has(n)) return n;\n let a = normalizeSlashes(o), s = [];\n for (let r of e.keys())r.includes(a) && s.push(r);\n if (1 === s.length) return s[0];\n if (0 === s.length) return void i.error(Error(`--focus: no file in the import graph matches \"${o}\"`));\n let p = s.slice(0, 10).map((e)=>` ${toRelative(e)}`).join('\\n');\n i.error(Error(`--focus: \"${o}\" matched ${s.length} files; be more specific:\\n${p}`));\n }(v, e.focus, a);\n if (e.focus && !T) {\n m = 1;\n return;\n }\n let $ = T ? p(v, s(v, T, n)) : v, y = d({\n graph: $,\n rootDir: t.cwd(),\n focus: T ? toRelative(T) : void 0,\n depth: n,\n fileCount: w.length,\n generatedAt: new Date()\n });\n e.stdout ? t.stdout.write(y) : await writeJsonFile(y, e.output, a);\n } catch (e) {\n a.error(e instanceof Error ? e : Error(String(e))), m = 1;\n } finally{\n l && l !== o && await l.flush(), 0 !== m && f(m);\n }\n });\n}\nasync function buildGraph(e, r, o) {\n o.step('❯ Building project import graph...');\n let i = new l(t.stderr);\n i.start(`Parsing ${e.length} files and building import graph...`);\n let { importGraph: n } = await a(e, {\n rootDir: t.cwd(),\n parserOptions: r,\n onProgress: (e, r)=>{\n let t = (e / r * 100).toFixed(0);\n i.update(`Parsing files (${e}/${r} — ${t}%)...`);\n }\n });\n return i.stop(), n;\n}\nasync function writeJsonFile(i, n, a) {\n a.step('❯ Writing dependency graph...');\n let s = r.resolve(t.cwd(), n ?? DEFAULT_OUTPUT_PATH);\n await e.writeFile(s, i, 'utf8');\n let p = r.relative(t.cwd(), s) || s;\n a.info(`\\n${o.green('✔')} Dependency graph written to ${o.cyan(p)}\\n`);\n}\nfunction normalizeSlashes(e) {\n return e.replace(/\\\\/g, '/');\n}\nfunction toRelative(e) {\n return normalizeSlashes(r.relative(t.cwd(), e) || e);\n}\n","import { registerInitCommand as r } from './init.js';\nimport { registerAnalyzeCommand as o } from './analyze/index.js';\nimport { registerConfigCommand as m } from './config.js';\nimport { registerCacheCommand as i } from './cache.js';\nimport { registerRulesCommand as t } from './rules.js';\nimport { registerCircularCommand as s } from './circular.js';\nimport { registerGraphCommand as f } from './graph.js';\nexport function registerCommands(p, e) {\n r(p, e), o(p, e), m(p, e), i(p, e), t(p), s(p, e), f(p, e);\n}\n","import { spawnSync as e } from 'node:child_process';\nimport r from 'node:process';\nlet RESPAWN_GUARD_ENV = 'NGCOMPASS_GC_RESPAWNED', HELP_VERSION_FLAGS = new Set([\n '--version',\n '-V',\n '--help',\n '-h'\n]);\nexport function resolveRespawnOutcome(e, r) {\n return e.error ? {\n kind: 'fallback'\n } : null !== e.signal || null === e.status ? r <= 5000 ? {\n kind: 'fallback'\n } : {\n kind: 'crash',\n code: 1\n } : {\n kind: 'exit',\n code: e.status\n };\n}\nexport function maybeRespawnWithExposeGc() {\n if ('function' == typeof globalThis.gc || '1' === r.env[RESPAWN_GUARD_ENV]) return;\n let n = r.argv.slice(2);\n if (!((e)=>{\n if (!e.includes('analyze')) return !1;\n for (let r of e)if (HELP_VERSION_FLAGS.has(r)) return !1;\n return !0;\n })(n)) return;\n let o = r.argv[1];\n if (!o) return;\n let t = performance.now(), i = resolveRespawnOutcome(e(r.execPath, [\n '--expose-gc',\n ...r.execArgv,\n o,\n ...n\n ], {\n stdio: 'inherit',\n env: {\n ...r.env,\n [RESPAWN_GUARD_ENV]: '1'\n }\n }), performance.now() - t);\n 'fallback' === i.kind ? r.stderr.write(`[ngcompass] Could not relaunch with --expose-gc (likely low memory); continuing without proactive garbage-collection hints.\\n`) : ('crash' === i.kind && r.stderr.write(`[ngcompass] Analysis crashed (likely out of memory); re-run with --skip-type-check or raise --max-old-space-size.\\n`), r.exit(i.code));\n}\n","import { Command as e } from 'commander';\nimport { registerCommands as s } from '../commands/index.js';\nimport { enableDebug as o, PACKAGE_VERSION as n } from '@ngcompass/common';\nimport { createCacheContext as a } from '@ngcompass/cache';\nimport { registerAllBuiltinRules as r } from '@ngcompass/rules';\nimport { restoreCursor as t, printError as c } from '../commands/exit.js';\nimport { maybeRespawnWithExposeGc as i } from './gc-respawn.js';\nlet shutdownInProgress = !1, gracefulShutdown = async (e, s)=>{\n if (!shutdownInProgress) {\n if (shutdownInProgress = !0, t(), e) try {\n let s = new Promise((e)=>setTimeout(e, 10_000).unref());\n await Promise.race([\n e.flush(),\n s\n ]);\n } catch (e) {\n c('[ngcompass] Cache flush failed during shutdown', e);\n }\n process.exit(s);\n }\n}, handleFatalAsyncFailure = (e, s, o)=>{\n c(`[ngcompass] ${s}`, o), gracefulShutdown(e, 1);\n}, printRunBanner = async (e)=>{\n let { default: s } = await import('picocolors'), o = process.cwd();\n process.stdout.write(`\\n${s.dim('>')} ${s.dim(`ngcompass@${n}`)} ${s.dim(e)} ${s.dim(o)}\\n${s.dim('>')} ${s.dim('ngcompass')} ${s.dim('run')}\\n\\n ${s.bgCyan(s.white(s.bold(` ${e.toUpperCase()} `)))} ${s.cyan(n)} ${s.dim(o)}\\n\\n`);\n};\nexport async function run() {\n i();\n let t = new e();\n t.name('ngcompass').description('Static analysis and architecture insights for Angular codebases.').version(n, '-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 (e, s)=>{\n let n;\n e.opts().debug && o('debug', 'all');\n let a = s.opts();\n if (!a.stdout && 'json' !== (n = a.format) && 'sarif' !== n && 'html' !== n && 'ui' !== n) {\n let e = s.parent, o = e && 'ngcompass' !== e.name() ? e.name() : s.name();\n await printRunBanner(o);\n }\n });\n let m = a();\n process.on('SIGINT', ()=>void gracefulShutdown(m, 130)), process.on('SIGTERM', ()=>void gracefulShutdown(m, 143)), process.on('uncaughtException', (e)=>{\n handleFatalAsyncFailure(m, 'Unexpected error', e);\n }), process.on('unhandledRejection', (e)=>{\n handleFatalAsyncFailure(m, 'Unhandled promise rejection', e);\n });\n try {\n if (r(), s(t, m), !process.argv.slice(2).length) return void t.outputHelp();\n await t.parseAsync(process.argv), await m.flush(), process.exit(0);\n } catch (e) {\n c('[ngcompass] Fatal error', e), await gracefulShutdown(m, 1);\n }\n}\nrun().catch((e)=>{\n c('[ngcompass] Fatal error', e), t(), process.exit(1);\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngcompass",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2-beta",
|
|
4
4
|
"description": "Command line interface for ngcompass",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"bin": {
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"commander": "^11.0.0",
|
|
36
36
|
"picocolors": "^1.1.1",
|
|
37
|
-
"@ngcompass/common": "0.2.
|
|
38
|
-
"@ngcompass/reporters": "0.2.
|
|
39
|
-
"@ngcompass/
|
|
40
|
-
"@ngcompass/
|
|
41
|
-
"@ngcompass/
|
|
42
|
-
"@ngcompass/
|
|
43
|
-
"@ngcompass/
|
|
44
|
-
"@ngcompass/
|
|
45
|
-
"@ngcompass/
|
|
37
|
+
"@ngcompass/common": "0.2.2-beta",
|
|
38
|
+
"@ngcompass/reporters": "0.2.2-beta",
|
|
39
|
+
"@ngcompass/rules": "0.2.2-beta",
|
|
40
|
+
"@ngcompass/cache": "0.2.2-beta",
|
|
41
|
+
"@ngcompass/config": "0.2.2-beta",
|
|
42
|
+
"@ngcompass/engine": "0.2.2-beta",
|
|
43
|
+
"@ngcompass/planner": "0.2.2-beta",
|
|
44
|
+
"@ngcompass/ast": "0.2.2-beta",
|
|
45
|
+
"@ngcompass/scanner": "0.2.2-beta"
|
|
46
46
|
},
|
|
47
47
|
"keywords": [
|
|
48
48
|
"angular",
|