tech-debt-score 0.1.4 → 0.1.6
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/adapters/input/FileSystemReader.d.ts.map +1 -1
- package/dist/adapters/input/FileSystemReader.js +4 -5
- package/dist/adapters/input/FileSystemReader.js.map +1 -1
- package/dist/adapters/output/TerminalReporter.d.ts.map +1 -1
- package/dist/adapters/output/TerminalReporter.js +8 -0
- package/dist/adapters/output/TerminalReporter.js.map +1 -1
- package/dist/application/config/AnalysisConfig.d.ts.map +1 -1
- package/dist/application/config/AnalysisConfig.js +10 -2
- package/dist/application/config/AnalysisConfig.js.map +1 -1
- package/dist/application/services/AnalysisService.d.ts.map +1 -1
- package/dist/application/services/AnalysisService.js +29 -11
- package/dist/application/services/AnalysisService.js.map +1 -1
- package/dist/cli/commands/analyze.d.ts.map +1 -1
- package/dist/cli/commands/analyze.js +8 -7
- package/dist/cli/commands/analyze.js.map +1 -1
- package/package.json +8 -2
- package/DEVELOPMENT.md +0 -147
- package/SETUP_COMPLETE.md +0 -188
- package/TECHNICAL_DESIGN.md +0 -563
- package/src/adapters/input/FileSystemReader.ts +0 -47
- package/src/adapters/input/TypeScriptParser.ts +0 -367
- package/src/adapters/output/JsonExporter.ts +0 -48
- package/src/adapters/output/TerminalReporter.ts +0 -88
- package/src/application/config/AnalysisConfig.ts +0 -58
- package/src/application/ports/IFileReader.ts +0 -36
- package/src/application/ports/IParser.ts +0 -40
- package/src/application/ports/IReporter.ts +0 -26
- package/src/application/services/AnalysisService.ts +0 -199
- package/src/application/services/DependencyAnalyzer.ts +0 -158
- package/src/application/services/DuplicationDetector.ts +0 -207
- package/src/cli/commands/analyze.ts +0 -77
- package/src/cli/index.ts +0 -81
- package/src/domain/entities/Finding.ts +0 -79
- package/src/domain/entities/Metric.ts +0 -70
- package/src/domain/entities/Rule.ts +0 -49
- package/src/domain/entities/Score.ts +0 -94
- package/src/domain/index.ts +0 -15
- package/src/domain/rules/CircularDependencyRule.ts +0 -65
- package/src/domain/rules/ComplexityRule.ts +0 -88
- package/src/domain/rules/DuplicationRule.ts +0 -70
- package/src/domain/rules/SizeRule.ts +0 -98
- package/src/domain/rules/TypeSafetyRule.ts +0 -63
- package/src/index.ts +0 -0
- package/src/shared/types.ts +0 -18
- package/tests/application/index.test.ts +0 -12
- package/tests/domain/index.test.ts +0 -14
- package/tests/e2e/index.test.ts +0 -13
- package/tsconfig.json +0 -31
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSystemReader.d.ts","sourceRoot":"","sources":["../../../src/adapters/input/FileSystemReader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE1F,qBAAa,gBAAiB,YAAW,WAAW;IAC5C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"FileSystemReader.d.ts","sourceRoot":"","sources":["../../../src/adapters/input/FileSystemReader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE1F,qBAAa,gBAAiB,YAAW,WAAW;IAC5C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgB/E,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAe/C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAGhE"}
|
|
@@ -10,14 +10,13 @@ export class FileSystemReader {
|
|
|
10
10
|
async scan(rootPath, patterns, ignore) {
|
|
11
11
|
// Resolve the root path to absolute
|
|
12
12
|
const absoluteRoot = resolve(rootPath);
|
|
13
|
-
//
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
const files = await fg(absolutePatterns, {
|
|
13
|
+
// Scan for files using cwd - this is more robust for glob matching
|
|
14
|
+
const files = await fg(patterns, {
|
|
15
|
+
cwd: absoluteRoot,
|
|
17
16
|
ignore,
|
|
18
17
|
absolute: true,
|
|
19
18
|
onlyFiles: true,
|
|
20
|
-
dot: false,
|
|
19
|
+
dot: false,
|
|
21
20
|
});
|
|
22
21
|
return files;
|
|
23
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileSystemReader.js","sourceRoot":"","sources":["../../../src/adapters/input/FileSystemReader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,WAAW,CAAC;AAG3B,MAAM,OAAO,gBAAgB;IAC3B,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,QAAkB,EAAE,MAAgB;QAC/D,oCAAoC;QACpC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEvC,
|
|
1
|
+
{"version":3,"file":"FileSystemReader.js","sourceRoot":"","sources":["../../../src/adapters/input/FileSystemReader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,WAAW,CAAC;AAG3B,MAAM,OAAO,gBAAgB;IAC3B,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,QAAkB,EAAE,MAAgB;QAC/D,oCAAoC;QACpC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEvC,mEAAmE;QACnE,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC/B,GAAG,EAAE,YAAY;YACjB,MAAM;YACN,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;YACf,GAAG,EAAE,KAAK;SACX,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,OAAO;YACL,OAAO;YACP,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,MAAM;aAC1B;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAmB;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalReporter.d.ts","sourceRoot":"","sources":["../../../src/adapters/output/TerminalReporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtF,qBAAa,gBAAiB,YAAW,SAAS;IAC1C,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"TerminalReporter.d.ts","sourceRoot":"","sources":["../../../src/adapters/output/TerminalReporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtF,qBAAa,gBAAiB,YAAW,SAAS;IAC1C,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DrD,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,aAAa;CAOtB"}
|
|
@@ -48,6 +48,14 @@ export class TerminalReporter {
|
|
|
48
48
|
}
|
|
49
49
|
console.log('\n');
|
|
50
50
|
}
|
|
51
|
+
else if (report.metadata.filesAnalyzed > 0) {
|
|
52
|
+
console.log('✨ No issues found! Your codebase looks clean.');
|
|
53
|
+
console.log('\n');
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.log('❓ No files were analyzed. Check your configuration or directory.');
|
|
57
|
+
console.log('\n');
|
|
58
|
+
}
|
|
51
59
|
console.log('═'.repeat(60));
|
|
52
60
|
console.log('\n');
|
|
53
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalReporter.js","sourceRoot":"","sources":["../../../src/adapters/output/TerminalReporter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TerminalReporter.js","sourceRoot":"","sources":["../../../src/adapters/output/TerminalReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisConfig.d.ts","sourceRoot":"","sources":["../../../src/application/config/AnalysisConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"AnalysisConfig.d.ts","sourceRoot":"","sources":["../../../src/application/config/AnalysisConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAkB3D,CAAC"}
|
|
@@ -6,8 +6,16 @@
|
|
|
6
6
|
* Default configuration values
|
|
7
7
|
*/
|
|
8
8
|
export const DEFAULT_CONFIG = {
|
|
9
|
-
patterns: ['
|
|
10
|
-
ignore: [
|
|
9
|
+
patterns: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],
|
|
10
|
+
ignore: [
|
|
11
|
+
'**/node_modules/**',
|
|
12
|
+
'**/dist/**',
|
|
13
|
+
'**/build/**',
|
|
14
|
+
'**/coverage/**',
|
|
15
|
+
'**/.git/**',
|
|
16
|
+
'**/.next/**',
|
|
17
|
+
'**/out/**',
|
|
18
|
+
],
|
|
11
19
|
weights: {
|
|
12
20
|
complexity: 0.30,
|
|
13
21
|
size: 0.25,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisConfig.js","sourceRoot":"","sources":["../../../src/application/config/AnalysisConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqC;IAC9D,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"AnalysisConfig.js","sourceRoot":"","sources":["../../../src/application/config/AnalysisConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAqC;IAC9D,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC;IACxD,MAAM,EAAE;QACN,oBAAoB;QACpB,YAAY;QACZ,aAAa;QACb,gBAAgB;QAChB,YAAY;QACZ,aAAa;QACb,WAAW;KACZ;IACD,OAAO,EAAE;QACP,UAAU,EAAE,IAAI;QAChB,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;KAChB;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisService.d.ts","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAM1D,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAHR,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,SAAS;IAGtC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"AnalysisService.d.ts","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAM1D,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAHR,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,SAAS;IAGtC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAiH9D;;OAEG;YACW,sBAAsB;IA4BpC,OAAO,CAAC,iBAAiB;IAyBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAkBzB"}
|
|
@@ -18,25 +18,43 @@ export class AnalysisService {
|
|
|
18
18
|
// 1. Scan for files
|
|
19
19
|
console.log('📁 Scanning files...');
|
|
20
20
|
const filePaths = await this.fileReader.scan(config.rootPath, config.patterns, config.ignore);
|
|
21
|
-
|
|
21
|
+
if (filePaths.length === 0) {
|
|
22
|
+
console.log(' ❌ No files found matching patterns.');
|
|
23
|
+
console.log(` Root: ${config.rootPath}`);
|
|
24
|
+
console.log(` Patterns: ${config.patterns.join(', ')}`);
|
|
25
|
+
console.log(' Check your directory structure and ensure files exist.');
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.log(` Found ${filePaths.length} files`);
|
|
29
|
+
}
|
|
22
30
|
// 2. Read and parse files
|
|
23
31
|
console.log('🔍 Parsing files...');
|
|
24
32
|
const allMetrics = [];
|
|
25
33
|
const fileContents = new Map();
|
|
34
|
+
let supportedFilesCount = 0;
|
|
26
35
|
for (const filePath of filePaths) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
try {
|
|
37
|
+
const fileResult = await this.fileReader.read(filePath);
|
|
38
|
+
fileContents.set(filePath, fileResult.content);
|
|
39
|
+
if (this.parser.supports(filePath)) {
|
|
40
|
+
supportedFilesCount++;
|
|
41
|
+
const parseResult = await this.parser.parse(filePath, fileResult.content);
|
|
42
|
+
if (parseResult.success) {
|
|
43
|
+
allMetrics.push(...parseResult.metrics);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
console.warn(` ⚠️ Failed to parse ${filePath}: ${parseResult.error}`);
|
|
47
|
+
}
|
|
36
48
|
}
|
|
37
49
|
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
console.warn(` ⚠️ Error reading ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (filePaths.length > 0 && supportedFilesCount === 0) {
|
|
55
|
+
console.log(' ⚠️ None of the found files are supported by the parser (.ts, .js, etc)');
|
|
38
56
|
}
|
|
39
|
-
console.log(` Extracted ${allMetrics.length} metrics`);
|
|
57
|
+
console.log(` Extracted ${allMetrics.length} metrics from ${supportedFilesCount} files`);
|
|
40
58
|
// 3. Analyze dependencies and duplication
|
|
41
59
|
console.log('🔗 Analyzing dependencies and duplication...');
|
|
42
60
|
const additionalMetrics = await this.analyzeAdvancedMetrics(fileContents);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisService.js","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,OAAO,eAAe;IAC1B,YACmB,UAAuB,EACvB,MAAe,EACf,KAAa,EACb,QAAmB;QAHnB,eAAU,GAAV,UAAU,CAAa;QACvB,WAAM,GAAN,MAAM,CAAS;QACf,UAAK,GAAL,KAAK,CAAQ;QACb,aAAQ,GAAR,QAAQ,CAAW;IACnC,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,MAAsB;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,oBAAoB;QACpB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAC1C,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,MAAM,CACd,CAAC;
|
|
1
|
+
{"version":3,"file":"AnalysisService.js","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AA0BA,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD7F"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
2
3
|
import { AnalysisService } from '../../application/services/AnalysisService.js';
|
|
3
4
|
import { FileSystemReader } from '../../adapters/input/FileSystemReader.js';
|
|
4
5
|
import { TypeScriptParser } from '../../adapters/input/TypeScriptParser.js';
|
|
@@ -39,18 +40,18 @@ export async function analyzeCommand(rootPath, jsonOutputPath) {
|
|
|
39
40
|
];
|
|
40
41
|
const analysisService = new AnalysisService(fileReader, parser, rules, reporter);
|
|
41
42
|
// Build configuration
|
|
42
|
-
//
|
|
43
|
-
// -
|
|
44
|
-
|
|
45
|
-
const isCwd = resolve(rootPath) === process.cwd();
|
|
46
|
-
const defaultPatterns = isCwd
|
|
47
|
-
? DEFAULT_CONFIG.patterns
|
|
48
|
-
: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'];
|
|
43
|
+
// Use broad patterns by default and rely on ignore list for exclusions.
|
|
44
|
+
// This makes the tool structure-agnostic (works for src/, lib/, or root files).
|
|
45
|
+
const defaultPatterns = ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'];
|
|
49
46
|
const config = {
|
|
50
47
|
rootPath,
|
|
51
48
|
...DEFAULT_CONFIG,
|
|
52
49
|
patterns: defaultPatterns,
|
|
53
50
|
};
|
|
51
|
+
// Log scan start for transparency
|
|
52
|
+
if (config.patterns.length > 0) {
|
|
53
|
+
console.log(`📂 Scanning for patterns: ${config.patterns.join(', ')}`);
|
|
54
|
+
}
|
|
54
55
|
// Execute analysis
|
|
55
56
|
await analysisService.analyze(config);
|
|
56
57
|
console.log('✅ Analysis complete!\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAG5E,4CAA4C;AAC5C,MAAM,iBAAiB;IACrB,YAAoB,SAAsB;QAAtB,cAAS,GAAT,SAAS,CAAa;IAAG,CAAC;IAE9C,KAAK,CAAC,QAAQ,CAAC,MAAsB;QACnC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,cAAuB;IAC5E,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAExD,kEAAkE;IAClE,MAAM,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEtC,uCAAuC;IACvC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;QACrC,IAAI,gBAAgB,EAAE;QACtB,IAAI,YAAY,CAAC,cAAc,CAAC;KACjC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,YAAY;QAEZ,IAAI,cAAc,EAAE;QACpB,IAAI,QAAQ,EAAE;QACd,IAAI,cAAc,EAAE;QACpB,IAAI,eAAe,EAAE;QACrB,IAAI,sBAAsB,EAAE;KAC7B,CAAC;IAEF,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,UAAU,EACV,MAAM,EACN,KAAK,EACL,QAAQ,CACT,CAAC;IAEF,sBAAsB;IACtB,
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../src/cli/commands/analyze.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAG5E,4CAA4C;AAC5C,MAAM,iBAAiB;IACrB,YAAoB,SAAsB;QAAtB,cAAS,GAAT,SAAS,CAAa;IAAG,CAAC;IAE9C,KAAK,CAAC,QAAQ,CAAC,MAAsB;QACnC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,cAAuB;IAC5E,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAExD,kEAAkE;IAClE,MAAM,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEtC,uCAAuC;IACvC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC;QACrC,IAAI,gBAAgB,EAAE;QACtB,IAAI,YAAY,CAAC,cAAc,CAAC;KACjC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG;QACZ,YAAY;QAEZ,IAAI,cAAc,EAAE;QACpB,IAAI,QAAQ,EAAE;QACd,IAAI,cAAc,EAAE;QACpB,IAAI,eAAe,EAAE;QACrB,IAAI,sBAAsB,EAAE;KAC7B,CAAC;IAEF,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,UAAU,EACV,MAAM,EACN,KAAK,EACL,QAAQ,CACT,CAAC;IAEF,sBAAsB;IACtB,wEAAwE;IACxE,gFAAgF;IAChF,MAAM,eAAe,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEvE,MAAM,MAAM,GAAmB;QAC7B,QAAQ;QACR,GAAG,cAAc;QACjB,QAAQ,EAAE,eAAe;KAC1B,CAAC;IAEF,kCAAkC;IAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,mBAAmB;IACnB,MAAM,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tech-debt-score",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/cli/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -11,8 +11,14 @@
|
|
|
11
11
|
"dev": "tsc && node dist/cli/index.js",
|
|
12
12
|
"analyze": "tsc && node dist/cli/index.js",
|
|
13
13
|
"scan": "npm run build && node dist/cli/index.js .",
|
|
14
|
-
"test": "echo \"Error: no test specified\" && exit 1"
|
|
14
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
15
16
|
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
16
22
|
"repository": {
|
|
17
23
|
"type": "git",
|
|
18
24
|
"url": "git+https://github.com/panduken/tech-debt-score.git"
|
package/DEVELOPMENT.md
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
# Development Guide
|
|
2
|
-
|
|
3
|
-
## Project Structure
|
|
4
|
-
|
|
5
|
-
The project follows **Hexagonal Architecture** (Ports & Adapters pattern):
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
src/
|
|
9
|
-
├── domain/ # ✅ Pure business logic (COMPLETE)
|
|
10
|
-
│ ├── entities/ # Score, Metric, Rule, Finding
|
|
11
|
-
│ └── rules/ # ComplexityRule, SizeRule, TypeSafetyRule
|
|
12
|
-
│
|
|
13
|
-
├── application/ # ✅ Use cases & orchestration (COMPLETE)
|
|
14
|
-
│ ├── services/ # AnalysisService
|
|
15
|
-
│ ├── ports/ # Interface definitions
|
|
16
|
-
│ └── config/ # AnalysisConfig
|
|
17
|
-
│
|
|
18
|
-
├── adapters/ # 🚧 External integrations (PARTIAL)
|
|
19
|
-
│ ├── input/ # FileSystemReader (TODO: implement scan)
|
|
20
|
-
│ │ # TypeScriptParser (TODO: implement AST parsing)
|
|
21
|
-
│ └── output/ # TerminalReporter, JsonExporter (COMPLETE)
|
|
22
|
-
│
|
|
23
|
-
├── cli/ # ✅ Command-line interface (COMPLETE)
|
|
24
|
-
│ └── commands/ # analyze command
|
|
25
|
-
│
|
|
26
|
-
└── shared/ # ✅ Shared types (COMPLETE)
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Current Status
|
|
30
|
-
|
|
31
|
-
### ✅ Completed
|
|
32
|
-
|
|
33
|
-
- [x] Complete hexagonal architecture setup
|
|
34
|
-
- [x] Domain layer (all entities and rules)
|
|
35
|
-
- [x] Application layer (services, ports, config)
|
|
36
|
-
- [x] CLI entry point and analyze command
|
|
37
|
-
- [x] Output adapters (Terminal and JSON reporters)
|
|
38
|
-
- [x] Build system configured and working
|
|
39
|
-
- [x] TypeScript strict mode enabled
|
|
40
|
-
|
|
41
|
-
### 🚧 TODO - High Priority
|
|
42
|
-
|
|
43
|
-
1. **Implement FileSystemReader.scan()** (Currently returns empty array)
|
|
44
|
-
- Use `fast-glob` or `glob` library
|
|
45
|
-
- Implement file pattern matching
|
|
46
|
-
- Respect ignore patterns
|
|
47
|
-
|
|
48
|
-
2. **Implement TypeScriptParser.parse()** (Currently only counts LOC)
|
|
49
|
-
- Use `@typescript-eslint/parser` or TypeScript Compiler API
|
|
50
|
-
- Extract all metrics:
|
|
51
|
-
- Function length
|
|
52
|
-
- Cyclomatic complexity
|
|
53
|
-
- Nesting depth
|
|
54
|
-
- Parameter count
|
|
55
|
-
- `any` usage (TypeScript)
|
|
56
|
-
- TODO/FIXME comments
|
|
57
|
-
|
|
58
|
-
3. **Add Dependencies**
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
npm install fast-glob
|
|
62
|
-
npm install @typescript-eslint/parser @typescript-eslint/typescript-estree
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
4. **Write Tests**
|
|
66
|
-
- Domain layer unit tests (high priority)
|
|
67
|
-
- Application layer integration tests
|
|
68
|
-
- E2E tests with sample codebases
|
|
69
|
-
|
|
70
|
-
### 📋 TODO - Medium Priority
|
|
71
|
-
|
|
72
|
-
- [ ] Add more sophisticated scoring algorithm
|
|
73
|
-
- [ ] Implement code duplication detection
|
|
74
|
-
- [ ] Add test coverage integration
|
|
75
|
-
- [ ] Create configuration file support (`.tech-debt-score.json`)
|
|
76
|
-
- [ ] Add CLI flags for customization
|
|
77
|
-
- [ ] Better error handling and user feedback
|
|
78
|
-
|
|
79
|
-
### 🎯 TODO - Future Enhancements
|
|
80
|
-
|
|
81
|
-
- [ ] Git integration for trend tracking
|
|
82
|
-
- [ ] Additional output formats (HTML, Markdown)
|
|
83
|
-
- [ ] VS Code extension
|
|
84
|
-
- [ ] CI/CD examples (GitHub Actions, GitLab CI)
|
|
85
|
-
- [ ] Multi-language support (Python, Go, Java)
|
|
86
|
-
|
|
87
|
-
## Quick Commands
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
# Build the project
|
|
91
|
-
npm run build
|
|
92
|
-
|
|
93
|
-
# Run analysis (placeholder - needs implementation)
|
|
94
|
-
npm run analyze
|
|
95
|
-
|
|
96
|
-
# Run with specific path
|
|
97
|
-
npm run dev -- ./path/to/code
|
|
98
|
-
|
|
99
|
-
# Run tests (when implemented)
|
|
100
|
-
npm test
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## Architecture Guidelines
|
|
104
|
-
|
|
105
|
-
### Dependency Rule
|
|
106
|
-
|
|
107
|
-
Dependencies point **inward only**:
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
CLI → Application → Domain
|
|
111
|
-
↓
|
|
112
|
-
Adapters (depend on Domain interfaces)
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Domain Layer Rules
|
|
116
|
-
|
|
117
|
-
- ❌ NO filesystem access
|
|
118
|
-
- ❌ NO CLI dependencies
|
|
119
|
-
- ❌ NO Node.js APIs
|
|
120
|
-
- ❌ NO external libraries (except utilities)
|
|
121
|
-
- ✅ Pure TypeScript/JavaScript logic only
|
|
122
|
-
- ✅ 100% unit testable
|
|
123
|
-
|
|
124
|
-
### Testing Strategy
|
|
125
|
-
|
|
126
|
-
1. **Domain Tests**: No mocks needed, test pure logic
|
|
127
|
-
2. **Application Tests**: Use mock adapters
|
|
128
|
-
3. **E2E Tests**: Test with real codebases
|
|
129
|
-
|
|
130
|
-
## Next Steps
|
|
131
|
-
|
|
132
|
-
1. **Implement file scanning** - Get FileSystemReader working
|
|
133
|
-
2. **Implement AST parsing** - Extract real metrics from code
|
|
134
|
-
3. **Test with real code** - Run against this project itself!
|
|
135
|
-
4. **Write tests** - Start with domain layer
|
|
136
|
-
5. **Publish to npm** - Make it available for others
|
|
137
|
-
|
|
138
|
-
## Contributing
|
|
139
|
-
|
|
140
|
-
When adding new features:
|
|
141
|
-
|
|
142
|
-
1. Start with domain layer (pure logic)
|
|
143
|
-
2. Define ports (interfaces) in application layer
|
|
144
|
-
3. Implement adapters for external dependencies
|
|
145
|
-
4. Wire everything together in CLI commands
|
|
146
|
-
|
|
147
|
-
This ensures clean separation and testability!
|
package/SETUP_COMPLETE.md
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
# Project Setup Complete! 🎉
|
|
2
|
-
|
|
3
|
-
## What Was Created
|
|
4
|
-
|
|
5
|
-
Your **tech-debt-score** project now has a complete **Hexagonal Architecture** implementation with:
|
|
6
|
-
|
|
7
|
-
### ✅ Core Structure (20 files created)
|
|
8
|
-
|
|
9
|
-
#### **Domain Layer** (Pure Business Logic - Zero Dependencies)
|
|
10
|
-
|
|
11
|
-
- `src/domain/entities/`
|
|
12
|
-
- `Metric.ts` - Core metric entity with builder pattern
|
|
13
|
-
- `Finding.ts` - Issue representation with builder pattern
|
|
14
|
-
- `Score.ts` - Score entity with calculator service
|
|
15
|
-
- `Rule.ts` - Rule interface and base class
|
|
16
|
-
- `src/domain/rules/`
|
|
17
|
-
- `ComplexityRule.ts` - Evaluates cyclomatic complexity and nesting
|
|
18
|
-
- `SizeRule.ts` - Evaluates file/function size and parameters
|
|
19
|
-
- `TypeSafetyRule.ts` - Detects TypeScript `any` usage
|
|
20
|
-
|
|
21
|
-
#### **Application Layer** (Orchestration)
|
|
22
|
-
|
|
23
|
-
- `src/application/ports/` (Interfaces)
|
|
24
|
-
- `IFileReader.ts` - File system abstraction
|
|
25
|
-
- `IParser.ts` - AST parser abstraction
|
|
26
|
-
- `IReporter.ts` - Output abstraction
|
|
27
|
-
|
|
28
|
-
- `src/application/services/`
|
|
29
|
-
- `AnalysisService.ts` - Main orchestration service
|
|
30
|
-
|
|
31
|
-
- `src/application/config/`
|
|
32
|
-
- `AnalysisConfig.ts` - Configuration with defaults
|
|
33
|
-
|
|
34
|
-
#### **Adapters Layer** (External Integrations)
|
|
35
|
-
|
|
36
|
-
- `src/adapters/input/`
|
|
37
|
-
- `FileSystemReader.ts` - File I/O adapter (⚠️ scan() needs implementation)
|
|
38
|
-
- `TypeScriptParser.ts` - AST parser adapter (⚠️ needs full implementation)
|
|
39
|
-
|
|
40
|
-
- `src/adapters/output/`
|
|
41
|
-
- `TerminalReporter.ts` - Beautiful console output ✅
|
|
42
|
-
- `JsonExporter.ts` - JSON report export ✅
|
|
43
|
-
|
|
44
|
-
#### **CLI Layer** (Entry Point)
|
|
45
|
-
|
|
46
|
-
- `src/cli/`
|
|
47
|
-
- `index.ts` - CLI entry point with help
|
|
48
|
-
- `commands/analyze.ts` - Analyze command (wires everything together)
|
|
49
|
-
|
|
50
|
-
#### **Shared**
|
|
51
|
-
|
|
52
|
-
- `src/shared/types.ts` - Common types
|
|
53
|
-
|
|
54
|
-
### 📄 Documentation
|
|
55
|
-
|
|
56
|
-
- `TECHNICAL_DESIGN.md` - Complete architecture specification
|
|
57
|
-
- `README.md` - Updated with usage and structure
|
|
58
|
-
- `DEVELOPMENT.md` - Development guide with TODO list
|
|
59
|
-
|
|
60
|
-
### 🧪 Test Structure
|
|
61
|
-
|
|
62
|
-
- `tests/domain/` - Unit tests placeholder
|
|
63
|
-
- `tests/application/` - Integration tests placeholder
|
|
64
|
-
- `tests/e2e/` - End-to-end tests placeholder
|
|
65
|
-
|
|
66
|
-
### ⚙️ Configuration
|
|
67
|
-
|
|
68
|
-
- Updated `package.json` with:
|
|
69
|
-
- `type: "module"` for ES modules
|
|
70
|
-
- Build scripts (`build`, `dev`, `analyze`)
|
|
71
|
-
- CLI bin entry point
|
|
72
|
-
- `.gitignore` - Comprehensive ignore rules
|
|
73
|
-
|
|
74
|
-
## Build Status
|
|
75
|
-
|
|
76
|
-
✅ **Project builds successfully!**
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
npm run build
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
All TypeScript strict mode checks pass.
|
|
83
|
-
|
|
84
|
-
## What's Next?
|
|
85
|
-
|
|
86
|
-
The architecture is complete, but **two adapters need implementation** to make it functional:
|
|
87
|
-
|
|
88
|
-
### 🚧 High Priority TODOs
|
|
89
|
-
|
|
90
|
-
1. **FileSystemReader.scan()**
|
|
91
|
-
- Currently returns empty array
|
|
92
|
-
- Needs: `fast-glob` implementation
|
|
93
|
-
2. **TypeScriptParser.parse()**
|
|
94
|
-
- Currently only counts lines
|
|
95
|
-
- Needs: Full AST parsing with `@typescript-eslint/parser`
|
|
96
|
-
- Should extract: complexity, nesting, parameters, `any` usage, comments
|
|
97
|
-
|
|
98
|
-
3. **Add Required Dependencies**
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
npm install fast-glob
|
|
102
|
-
npm install @typescript-eslint/parser @typescript-eslint/typescript-estree
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
4. **Write Tests**
|
|
106
|
-
- Start with domain layer (easiest - no I/O)
|
|
107
|
-
- Add integration tests
|
|
108
|
-
- Create E2E tests with sample code
|
|
109
|
-
|
|
110
|
-
## Architecture Highlights
|
|
111
|
-
|
|
112
|
-
### Clean Separation
|
|
113
|
-
|
|
114
|
-
```
|
|
115
|
-
┌─────────────────────────────────────────┐
|
|
116
|
-
│ CLI (Entry Point) │
|
|
117
|
-
│ No Business Logic │
|
|
118
|
-
└─────────────────┬───────────────────────┘
|
|
119
|
-
↓
|
|
120
|
-
┌─────────────────────────────────────────┐
|
|
121
|
-
│ Application (Orchestration) │
|
|
122
|
-
│ AnalysisService coordinates everything│
|
|
123
|
-
└───┬──────────────────────────────────┬──┘
|
|
124
|
-
↓ ↓
|
|
125
|
-
┌───────────┐ ┌─────────────┐
|
|
126
|
-
│ Adapters │ │ Domain │
|
|
127
|
-
│ (I/O) │ │ (Pure Logic)│
|
|
128
|
-
└───────────┘ └─────────────┘
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### Key Benefits
|
|
132
|
-
|
|
133
|
-
✅ **100% Testable** - Domain layer has zero dependencies
|
|
134
|
-
✅ **Extensible** - Easy to add new parsers, rules, outputs
|
|
135
|
-
✅ **Type-Safe** - Full TypeScript strict mode
|
|
136
|
-
✅ **Portable** - Domain logic works anywhere (Node, Deno, Browser)
|
|
137
|
-
✅ **Maintainable** - Clear separation of concerns
|
|
138
|
-
|
|
139
|
-
## Try It Out
|
|
140
|
-
|
|
141
|
-
Even though the parsers aren't complete, you can still build and run:
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
# Build
|
|
145
|
-
npm run build
|
|
146
|
-
|
|
147
|
-
# See CLI help
|
|
148
|
-
node dist/cli/index.js --help
|
|
149
|
-
|
|
150
|
-
# Try to analyze (will show you the flow)
|
|
151
|
-
node dist/cli/index.js .
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## Files Summary
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
Created: 20 TypeScript source files
|
|
158
|
-
Created: 3 test placeholder files
|
|
159
|
-
Created: 4 documentation files
|
|
160
|
-
Updated: package.json, README.md
|
|
161
|
-
Total: 28 files
|
|
162
|
-
|
|
163
|
-
Lines of Code: ~1,500+ LOC
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
## Architecture Compliance
|
|
167
|
-
|
|
168
|
-
✅ **Domain Layer**: Zero external dependencies
|
|
169
|
-
✅ **Dependency Rule**: All deps point inward
|
|
170
|
-
✅ **Interface Segregation**: Clean port definitions
|
|
171
|
-
✅ **Pure Functions**: Domain logic is side-effect free
|
|
172
|
-
|
|
173
|
-
## Resources Generated
|
|
174
|
-
|
|
175
|
-
- [TECHNICAL_DESIGN.md](./TECHNICAL_DESIGN.md) - Full specification
|
|
176
|
-
- [DEVELOPMENT.md](./DEVELOPMENT.md) - Dev guide
|
|
177
|
-
- [README.md](./README.md) - User documentation
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
**Ready to implement the parsers and make this fully functional!** 🚀
|
|
182
|
-
|
|
183
|
-
The foundation is rock-solid. Now just need to:
|
|
184
|
-
|
|
185
|
-
1. Wire up file scanning
|
|
186
|
-
2. Implement AST parsing
|
|
187
|
-
3. Test it on real code
|
|
188
|
-
4. Ship it! 📦
|