tech-debt-score 0.1.10 → 0.1.11

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.
@@ -1 +1 @@
1
- {"version":3,"file":"AnalysisService.d.ts","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAChE,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;IAmJ9D,OAAO,CAAC,iBAAiB;IAyBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAkBzB"}
1
+ {"version":3,"file":"AnalysisService.d.ts","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAChE,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;IAqJ9D,OAAO,CAAC,iBAAiB;IAyBzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAkBzB"}
@@ -89,7 +89,9 @@ export class AnalysisService {
89
89
  for (const rule of this.rules) {
90
90
  const findings = rule.evaluate(allMetrics);
91
91
  allFindings.push(...findings);
92
- const score = rule.calculateScore(findings);
92
+ const score = rule.calculateScore(findings, {
93
+ totalFiles: filePaths.length,
94
+ });
93
95
  rawCategoryScores.push({
94
96
  name: rule.name,
95
97
  score,
@@ -1 +1 @@
1
- {"version":3,"file":"AnalysisService.js","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AnalysisService.js","sourceRoot":"","sources":["../../../src/application/services/AnalysisService.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,9 @@
4
4
  */
5
5
  import type { Metric } from './Metric.js';
6
6
  import type { Finding } from './Finding.js';
7
+ export interface ScoreContext {
8
+ totalFiles: number;
9
+ }
7
10
  export interface Rule {
8
11
  /**
9
12
  * Unique identifier for this rule
@@ -25,7 +28,7 @@ export interface Rule {
25
28
  * Calculate a score (0-100) based on findings
26
29
  * where 100 = no issues, 0 = maximum issues
27
30
  */
28
- calculateScore(findings: Finding[]): number;
31
+ calculateScore(findings: Finding[], context?: ScoreContext): number;
29
32
  }
30
33
  /**
31
34
  * Abstract base class for rules
@@ -36,6 +39,6 @@ export declare abstract class BaseRule implements Rule {
36
39
  readonly description: string;
37
40
  constructor(id: string, name: string, description: string);
38
41
  abstract evaluate(metrics: Metric[]): Finding[];
39
- abstract calculateScore(findings: Finding[]): number;
42
+ abstract calculateScore(findings: Finding[], context?: ScoreContext): number;
40
43
  }
41
44
  //# sourceMappingURL=Rule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IAEvC;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;CAC7C;AAED;;GAEG;AACH,8BAAsB,QAAS,YAAW,IAAI;aAE1B,EAAE,EAAE,MAAM;aACV,IAAI,EAAE,MAAM;aACZ,WAAW,EAAE,MAAM;gBAFnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM;IAGrC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IAC/C,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;CACrD"}
1
+ {"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/Rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IAEvC;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;CACrE;AAED;;GAEG;AACH,8BAAsB,QAAS,YAAW,IAAI;aAE1B,EAAE,EAAE,MAAM;aACV,IAAI,EAAE,MAAM;aACZ,WAAW,EAAE,MAAM;gBAFnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM;IAGrC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IAC/C,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;CAC7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../../src/domain/entities/Rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH;;GAEG;AACH,MAAM,OAAgB,QAAQ;IAC5B,YACkB,EAAU,EACV,IAAY,EACZ,WAAmB;QAFnB,OAAE,GAAF,EAAE,CAAQ;QACV,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;IAClC,CAAC;CAIL"}
1
+ {"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../../src/domain/entities/Rule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH;;GAEG;AACH,MAAM,OAAgB,QAAQ;IAC5B,YACkB,EAAU,EACV,IAAY,EACZ,WAAmB;QAFnB,OAAE,GAAF,EAAE,CAAQ;QACV,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;IAClC,CAAC;CAIL"}
@@ -8,6 +8,8 @@ import type { Finding } from '../entities/Finding.js';
8
8
  export declare class CircularDependencyRule extends BaseRule {
9
9
  constructor();
10
10
  evaluate(metrics: Metric[]): Finding[];
11
- calculateScore(findings: Finding[]): number;
11
+ calculateScore(findings: Finding[], context?: {
12
+ totalFiles: number;
13
+ }): number;
12
14
  }
13
15
  //# sourceMappingURL=CircularDependencyRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CircularDependencyRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/CircularDependencyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,sBAAuB,SAAQ,QAAQ;;IASlD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA6BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;CAgB5C"}
1
+ {"version":3,"file":"CircularDependencyRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/CircularDependencyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,sBAAuB,SAAQ,QAAQ;;IASlD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA6BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CA4B9E"}
@@ -28,11 +28,12 @@ export class CircularDependencyRule extends BaseRule {
28
28
  }
29
29
  return findings;
30
30
  }
31
- calculateScore(findings) {
31
+ calculateScore(findings, context) {
32
32
  if (findings.length === 0)
33
33
  return 100;
34
- // Circular dependencies are serious - heavy penalty
35
- const penalty = findings.reduce((sum, finding) => {
34
+ // Circular dependencies are serious
35
+ // Calculate raw penalty
36
+ const rawPenalty = findings.reduce((sum, finding) => {
36
37
  switch (finding.severity) {
37
38
  case 'high': return sum + 20; // Very bad
38
39
  case 'medium': return sum + 12;
@@ -40,7 +41,16 @@ export class CircularDependencyRule extends BaseRule {
40
41
  default: return sum;
41
42
  }
42
43
  }, 0);
43
- const score = Math.max(0, 100 - penalty);
44
+ // Normalize by project size if context is available
45
+ let finalPenalty = rawPenalty;
46
+ if (context && context.totalFiles > 0) {
47
+ // Density: Penalty points per file
48
+ const density = rawPenalty / context.totalFiles;
49
+ // Scaling: 1 circular dep per 10 files is bad (density 2.0 -> score drop 40?)
50
+ // Let's say density of 5 (1 high severity per 4 files) = 100% deduction
51
+ finalPenalty = density * 20;
52
+ }
53
+ const score = Math.max(0, 100 - finalPenalty);
44
54
  return Math.round(score * 100) / 100;
45
55
  }
46
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CircularDependencyRule.js","sourceRoot":"","sources":["../../../src/domain/rules/CircularDependencyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD;QACE,KAAK,CACH,qBAAqB,EACrB,0BAA0B,EAC1B,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,mCAAmC;QACnC,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;QAEjF,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,yCAAyC;gBACzC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;gBACjC,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEjF,QAAQ,CAAC,IAAI,CACX,IAAI,cAAc,EAAE;qBACjB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,QAAQ,CAAC;qBACtB,WAAW,CACV,iCAAiC,MAAM,CAAC,OAAO,IAAI,cAAc,KAAK,WAAW,kBAAkB,CACpG;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,6FAA6F,CAAC;qBAC7G,KAAK,EAAE,CACX,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB;QAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,oDAAoD;QACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAC/C,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,WAAW;gBACzC,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;gBAC/B,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;YACtB,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"CircularDependencyRule.js","sourceRoot":"","sources":["../../../src/domain/rules/CircularDependencyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,sBAAuB,SAAQ,QAAQ;IAClD;QACE,KAAK,CACH,qBAAqB,EACrB,0BAA0B,EAC1B,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,mCAAmC;QACnC,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;QAEjF,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,yCAAyC;gBACzC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;gBACjC,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEjF,QAAQ,CAAC,IAAI,CACX,IAAI,cAAc,EAAE;qBACjB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,QAAQ,CAAC;qBACtB,WAAW,CACV,iCAAiC,MAAM,CAAC,OAAO,IAAI,cAAc,KAAK,WAAW,kBAAkB,CACpG;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,6FAA6F,CAAC;qBAC7G,KAAK,EAAE,CACX,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB,EAAE,OAAgC;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,oCAAoC;QACpC,wBAAwB;QACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAClD,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,WAAW;gBACzC,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;gBAC/B,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;YACtB,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,oDAAoD;QACpD,IAAI,YAAY,GAAG,UAAU,CAAC;QAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACtC,mCAAmC;YACnC,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAEhD,8EAA8E;YAC9E,wEAAwE;YACxE,YAAY,GAAG,OAAO,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
@@ -10,6 +10,8 @@ export declare class ComplexityRule extends BaseRule {
10
10
  private readonly NESTING_THRESHOLD;
11
11
  constructor();
12
12
  evaluate(metrics: Metric[]): Finding[];
13
- calculateScore(findings: Finding[]): number;
13
+ calculateScore(findings: Finding[], context?: {
14
+ totalFiles: number;
15
+ }): number;
14
16
  }
15
17
  //# sourceMappingURL=ComplexityRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComplexityRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/ComplexityRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,cAAe,SAAQ,QAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;;IAUvC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA+CtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;CAiB5C"}
1
+ {"version":3,"file":"ComplexityRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/ComplexityRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,cAAe,SAAQ,QAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;;IAUvC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA+CtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CA8B9E"}
@@ -43,11 +43,11 @@ export class ComplexityRule extends BaseRule {
43
43
  }
44
44
  return findings;
45
45
  }
46
- calculateScore(findings) {
46
+ calculateScore(findings, context) {
47
47
  if (findings.length === 0)
48
48
  return 100;
49
49
  // Penalty based on severity
50
- const penalty = findings.reduce((sum, finding) => {
50
+ const rawPenalty = findings.reduce((sum, finding) => {
51
51
  switch (finding.severity) {
52
52
  case 'high': return sum + 10;
53
53
  case 'medium': return sum + 5;
@@ -55,8 +55,19 @@ export class ComplexityRule extends BaseRule {
55
55
  default: return sum;
56
56
  }
57
57
  }, 0);
58
+ // Normalize by project size if context is available
59
+ let finalPenalty = rawPenalty;
60
+ if (context && context.totalFiles > 0) {
61
+ // Density: Penalty points per file
62
+ const density = rawPenalty / context.totalFiles;
63
+ // Scaling:
64
+ // If every file has medium complexity (5 pts), density is 5.
65
+ // We want that to be maybe 50% score? So multiply by 10.
66
+ // If every file has high complexity (10 pts), density 10 -> score 0?
67
+ finalPenalty = density * 10;
68
+ }
58
69
  // Cap the penalty and invert to get score
59
- const score = Math.max(0, 100 - penalty);
70
+ const score = Math.max(0, 100 - finalPenalty);
60
71
  return Math.round(score * 100) / 100;
61
72
  }
62
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ComplexityRule.js","sourceRoot":"","sources":["../../../src/domain/rules/ComplexityRule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComplexityRule.js","sourceRoot":"","sources":["../../../src/domain/rules/ComplexityRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAK1C;QACE,KAAK,CACH,YAAY,EACZ,iBAAiB,EACjB,mFAAmF,CACpF,CAAC;QATJ,+CAA+C;QAC9B,yBAAoB,GAAG,EAAE,CAAC;QAC1B,sBAAiB,GAAG,CAAC,CAAC;IAQvC,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,wCAAwC;QACxC,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAuB,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,CACtE,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAuB,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACxF,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;qBACnD,WAAW,CACV,+BAA+B,MAAM,CAAC,KAAK,QAAQ,MAAM,CAAC,OAAO,IAAI,UAAU,EAAE,CAClF;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,sEAAsE,CAAC,CAAC;gBAE1F,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7E,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;qBAClD,WAAW,CACV,iBAAiB,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,OAAO,IAAI,UAAU,EAAE,CAC3E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,+DAA+D,CAAC,CAAC;gBAEnF,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB,EAAE,OAAgC;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,4BAA4B;QAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAClD,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;gBAC7B,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC9B,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;YACtB,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,oDAAoD;QACpD,IAAI,YAAY,GAAG,UAAU,CAAC;QAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACtC,mCAAmC;YACnC,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAEhD,YAAY;YACZ,6DAA6D;YAC7D,yDAAyD;YACzD,qEAAqE;YACrE,YAAY,GAAG,OAAO,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,0CAA0C;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
@@ -10,6 +10,8 @@ export declare class DuplicationRule extends BaseRule {
10
10
  private readonly SIMILARITY_THRESHOLD;
11
11
  constructor();
12
12
  evaluate(metrics: Metric[]): Finding[];
13
- calculateScore(findings: Finding[]): number;
13
+ calculateScore(findings: Finding[], context?: {
14
+ totalFiles: number;
15
+ }): number;
14
16
  }
15
17
  //# sourceMappingURL=DuplicationRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DuplicationRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/DuplicationRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,eAAgB,SAAQ,QAAQ;IAE3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;;IAU7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA8BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;CAgB5C"}
1
+ {"version":3,"file":"DuplicationRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/DuplicationRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,eAAgB,SAAQ,QAAQ;IAE3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAM;IAC3C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;;IAU7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA8BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAwB9E"}
@@ -32,11 +32,11 @@ export class DuplicationRule extends BaseRule {
32
32
  }
33
33
  return findings;
34
34
  }
35
- calculateScore(findings) {
35
+ calculateScore(findings, context) {
36
36
  if (findings.length === 0)
37
37
  return 100;
38
38
  // Each duplication finding reduces score
39
- const penalty = findings.reduce((sum, finding) => {
39
+ const rawPenalty = findings.reduce((sum, finding) => {
40
40
  switch (finding.severity) {
41
41
  case 'high': return sum + 15;
42
42
  case 'medium': return sum + 8;
@@ -44,7 +44,14 @@ export class DuplicationRule extends BaseRule {
44
44
  default: return sum;
45
45
  }
46
46
  }, 0);
47
- const score = Math.max(0, 100 - penalty);
47
+ let finalPenalty = rawPenalty;
48
+ if (context && context.totalFiles > 0) {
49
+ const density = rawPenalty / context.totalFiles;
50
+ // If every file has low duplication (4pts), density 4.
51
+ // 4 * 8 = 32 penalty (Score 68). Reasonable.
52
+ finalPenalty = density * 8;
53
+ }
54
+ const score = Math.max(0, 100 - finalPenalty);
48
55
  return Math.round(score * 100) / 100;
49
56
  }
50
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DuplicationRule.js","sourceRoot":"","sources":["../../../src/domain/rules/DuplicationRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAK3C;QACE,KAAK,CACH,aAAa,EACb,uBAAuB,EACvB,qEAAqE,CACtE,CAAC;QATJ,aAAa;QACI,yBAAoB,GAAG,EAAE,CAAC,CAAC,4CAA4C;QACvE,yBAAoB,GAAG,IAAI,CAAC,CAAC,iBAAiB;IAQ/D,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,wBAAwB;QACxB,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;QAE9E,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEjF,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,QAAQ,CAAC;qBACtB,WAAW,CACV,SAAS,MAAM,CAAC,KAAK,+BAA+B,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAC/E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,2DAA2D,CAAC,CAAC;gBAE/E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB;QAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,yCAAyC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAC/C,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;gBAC7B,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC9B,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;YACtB,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"DuplicationRule.js","sourceRoot":"","sources":["../../../src/domain/rules/DuplicationRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAK3C;QACE,KAAK,CACH,aAAa,EACb,uBAAuB,EACvB,qEAAqE,CACtE,CAAC;QATJ,aAAa;QACI,yBAAoB,GAAG,EAAE,CAAC,CAAC,4CAA4C;QACvE,yBAAoB,GAAG,IAAI,CAAC,CAAC,iBAAiB;IAQ/D,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,wBAAwB;QACxB,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;QAE9E,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEjF,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,QAAQ,CAAC;qBACtB,WAAW,CACV,SAAS,MAAM,CAAC,KAAK,+BAA+B,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAC/E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,2DAA2D,CAAC,CAAC;gBAE/E,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB,EAAE,OAAgC;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,yCAAyC;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAClD,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;gBAC7B,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC9B,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;gBAC3B,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;YACtB,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,IAAI,YAAY,GAAG,UAAU,CAAC;QAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAChD,uDAAuD;YACvD,6CAA6C;YAC7C,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
@@ -11,6 +11,8 @@ export declare class SizeRule extends BaseRule {
11
11
  private readonly MAX_PARAMETERS;
12
12
  constructor();
13
13
  evaluate(metrics: Metric[]): Finding[];
14
- calculateScore(findings: Finding[]): number;
14
+ calculateScore(findings: Finding[], context?: {
15
+ totalFiles: number;
16
+ }): number;
15
17
  }
16
18
  //# sourceMappingURL=SizeRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SizeRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/SizeRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,QAAS,SAAQ,QAAQ;IAEpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAK;;IAUpC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA0DtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;CAe5C"}
1
+ {"version":3,"file":"SizeRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/SizeRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,QAAS,SAAQ,QAAQ;IAEpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAM;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAK;;IAUpC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA0DtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAqB9E"}
@@ -52,10 +52,10 @@ export class SizeRule extends BaseRule {
52
52
  }
53
53
  return findings;
54
54
  }
55
- calculateScore(findings) {
55
+ calculateScore(findings, context) {
56
56
  if (findings.length === 0)
57
57
  return 100;
58
- const penalty = findings.reduce((sum, finding) => {
58
+ const rawPenalty = findings.reduce((sum, finding) => {
59
59
  switch (finding.severity) {
60
60
  case 'high': return sum + 8;
61
61
  case 'medium': return sum + 4;
@@ -63,7 +63,12 @@ export class SizeRule extends BaseRule {
63
63
  default: return sum;
64
64
  }
65
65
  }, 0);
66
- const score = Math.max(0, 100 - penalty);
66
+ let finalPenalty = rawPenalty;
67
+ if (context && context.totalFiles > 0) {
68
+ const density = rawPenalty / context.totalFiles;
69
+ finalPenalty = density * 8;
70
+ }
71
+ const score = Math.max(0, 100 - finalPenalty);
67
72
  return Math.round(score * 100) / 100;
68
73
  }
69
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SizeRule.js","sourceRoot":"","sources":["../../../src/domain/rules/SizeRule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SizeRule.js","sourceRoot":"","sources":["../../../src/domain/rules/SizeRule.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ import type { Finding } from '../entities/Finding.js';
8
8
  export declare class TypeSafetyRule extends BaseRule {
9
9
  constructor();
10
10
  evaluate(metrics: Metric[]): Finding[];
11
- calculateScore(findings: Finding[]): number;
11
+ calculateScore(findings: Finding[], context?: {
12
+ totalFiles: number;
13
+ }): number;
12
14
  }
13
15
  //# sourceMappingURL=TypeSafetyRule.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TypeSafetyRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/TypeSafetyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,cAAe,SAAQ,QAAQ;;IAS1C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA2BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM;CAgB5C"}
1
+ {"version":3,"file":"TypeSafetyRule.d.ts","sourceRoot":"","sources":["../../../src/domain/rules/TypeSafetyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,qBAAa,cAAe,SAAQ,QAAQ;;IAS1C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE;IA2BtC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;CAyB9E"}
@@ -27,7 +27,7 @@ export class TypeSafetyRule extends BaseRule {
27
27
  }
28
28
  return findings;
29
29
  }
30
- calculateScore(findings) {
30
+ calculateScore(findings, context) {
31
31
  if (findings.length === 0)
32
32
  return 100;
33
33
  // Each 'any' usage reduces the score
@@ -37,8 +37,17 @@ export class TypeSafetyRule extends BaseRule {
37
37
  return sum + (match ? parseInt(match[1] ?? '0', 10) : 1);
38
38
  }, 0);
39
39
  // Each 'any' costs 3 points
40
- const penalty = Math.min(100, totalAnyUsages * 3);
41
- const score = Math.max(0, 100 - penalty);
40
+ const rawPenalty = totalAnyUsages * 3;
41
+ let finalPenalty = rawPenalty;
42
+ if (context && context.totalFiles > 0) {
43
+ const density = rawPenalty / context.totalFiles;
44
+ // Density of 3 (1 'any' per file) -> 3 * 5 = 15 penalty (85 score).
45
+ finalPenalty = density * 5;
46
+ }
47
+ else {
48
+ finalPenalty = Math.min(100, rawPenalty);
49
+ }
50
+ const score = Math.max(0, 100 - finalPenalty);
42
51
  return Math.round(score * 100) / 100;
43
52
  }
44
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TypeSafetyRule.js","sourceRoot":"","sources":["../../../src/domain/rules/TypeSafetyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C;QACE,KAAK,CACH,aAAa,EACb,kBAAkB,EAClB,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAEpE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;qBAClD,WAAW,CACV,SAAS,MAAM,CAAC,KAAK,8BAA8B,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAC9E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,2EAA2E,CAAC,CAAC;gBAE/F,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB;QAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,qCAAqC;QACrC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACtD,uDAAuD;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACzD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,4BAA4B;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"TypeSafetyRule.js","sourceRoot":"","sources":["../../../src/domain/rules/TypeSafetyRule.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAC1C;QACE,KAAK,CACH,aAAa,EACb,kBAAkB,EAClB,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,OAAiB;QACxB,MAAM,QAAQ,GAAc,EAAE,CAAC;QAE/B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;QAEpE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE;qBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;qBACnB,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;qBAClD,WAAW,CACV,SAAS,MAAM,CAAC,KAAK,8BAA8B,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAC9E;qBACA,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;qBAC7B,cAAc,CAAC,2EAA2E,CAAC,CAAC;gBAE/F,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;gBAED,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,cAAc,CAAC,QAAmB,EAAE,OAAgC;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QAEtC,qCAAqC;QACrC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YACtD,uDAAuD;YACvD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACzD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,4BAA4B;QAC5B,MAAM,UAAU,GAAG,cAAc,GAAG,CAAC,CAAC;QAEtC,IAAI,YAAY,GAAG,UAAU,CAAC;QAC9B,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YAChD,oEAAoE;YACpE,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tech-debt-score",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "type": "module",
5
5
  "main": "dist/cli/index.js",
6
6
  "bin": {