semantic-complexity 0.0.7-741984fb → 0.0.15-f5745e88

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.
Files changed (163) hide show
  1. package/dist/__tests__/analyzers.test.d.ts +5 -0
  2. package/dist/__tests__/analyzers.test.d.ts.map +1 -0
  3. package/dist/__tests__/analyzers.test.js +357 -0
  4. package/dist/__tests__/analyzers.test.js.map +1 -0
  5. package/dist/__tests__/gate.test.d.ts +5 -0
  6. package/dist/__tests__/gate.test.d.ts.map +1 -0
  7. package/dist/__tests__/gate.test.js +140 -0
  8. package/dist/__tests__/gate.test.js.map +1 -0
  9. package/dist/analyzers/bread.d.ts +63 -0
  10. package/dist/analyzers/bread.d.ts.map +1 -0
  11. package/dist/analyzers/bread.js +415 -0
  12. package/dist/analyzers/bread.js.map +1 -0
  13. package/dist/analyzers/cheese.d.ts +111 -0
  14. package/dist/analyzers/cheese.d.ts.map +1 -0
  15. package/dist/analyzers/cheese.js +881 -0
  16. package/dist/analyzers/cheese.js.map +1 -0
  17. package/dist/analyzers/ham.d.ts +33 -0
  18. package/dist/analyzers/ham.d.ts.map +1 -0
  19. package/dist/analyzers/ham.js +264 -0
  20. package/dist/analyzers/ham.js.map +1 -0
  21. package/dist/analyzers/index.d.ts +7 -0
  22. package/dist/analyzers/index.d.ts.map +1 -0
  23. package/dist/analyzers/index.js +7 -0
  24. package/dist/analyzers/index.js.map +1 -0
  25. package/dist/budget/index.d.ts +50 -0
  26. package/dist/budget/index.d.ts.map +1 -0
  27. package/dist/budget/index.js +138 -0
  28. package/dist/budget/index.js.map +1 -0
  29. package/dist/cli/index.d.ts +6 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +103 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/gate/index.d.ts +31 -0
  34. package/dist/gate/index.d.ts.map +1 -0
  35. package/dist/gate/index.js +117 -0
  36. package/dist/gate/index.js.map +1 -0
  37. package/dist/gate/waiver.d.ts +83 -0
  38. package/dist/gate/waiver.d.ts.map +1 -0
  39. package/dist/gate/waiver.js +425 -0
  40. package/dist/gate/waiver.js.map +1 -0
  41. package/dist/index.d.ts +8 -34
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +8 -49
  44. package/dist/index.js.map +1 -1
  45. package/dist/mcp/index.d.ts +5 -0
  46. package/dist/mcp/index.d.ts.map +1 -0
  47. package/dist/mcp/index.js +351 -0
  48. package/dist/mcp/index.js.map +1 -0
  49. package/dist/recommend/index.d.ts +32 -0
  50. package/dist/recommend/index.d.ts.map +1 -0
  51. package/dist/recommend/index.js +169 -0
  52. package/dist/recommend/index.js.map +1 -0
  53. package/dist/simplex/index.d.ts +26 -0
  54. package/dist/simplex/index.d.ts.map +1 -0
  55. package/dist/simplex/index.js +100 -0
  56. package/dist/simplex/index.js.map +1 -0
  57. package/dist/types/index.d.ts +39 -0
  58. package/dist/types/index.d.ts.map +1 -0
  59. package/dist/types/index.js +5 -0
  60. package/dist/types/index.js.map +1 -0
  61. package/package.json +27 -52
  62. package/LICENSE +0 -21
  63. package/README.md +0 -72
  64. package/dist/ast/index.d.ts +0 -2
  65. package/dist/ast/index.d.ts.map +0 -1
  66. package/dist/ast/index.js +0 -2
  67. package/dist/ast/index.js.map +0 -1
  68. package/dist/ast/parser.d.ts +0 -27
  69. package/dist/ast/parser.d.ts.map +0 -1
  70. package/dist/ast/parser.js +0 -273
  71. package/dist/ast/parser.js.map +0 -1
  72. package/dist/canonical/convergence.d.ts +0 -56
  73. package/dist/canonical/convergence.d.ts.map +0 -1
  74. package/dist/canonical/convergence.js +0 -149
  75. package/dist/canonical/convergence.js.map +0 -1
  76. package/dist/canonical/index.d.ts +0 -11
  77. package/dist/canonical/index.d.ts.map +0 -1
  78. package/dist/canonical/index.js +0 -11
  79. package/dist/canonical/index.js.map +0 -1
  80. package/dist/canonical/profiles.d.ts +0 -40
  81. package/dist/canonical/profiles.d.ts.map +0 -1
  82. package/dist/canonical/profiles.js +0 -182
  83. package/dist/canonical/profiles.js.map +0 -1
  84. package/dist/canonical/types.d.ts +0 -124
  85. package/dist/canonical/types.d.ts.map +0 -1
  86. package/dist/canonical/types.js +0 -46
  87. package/dist/canonical/types.js.map +0 -1
  88. package/dist/compare.d.ts +0 -31
  89. package/dist/compare.d.ts.map +0 -1
  90. package/dist/compare.js +0 -354
  91. package/dist/compare.js.map +0 -1
  92. package/dist/context/index.d.ts +0 -41
  93. package/dist/context/index.d.ts.map +0 -1
  94. package/dist/context/index.js +0 -253
  95. package/dist/context/index.js.map +0 -1
  96. package/dist/gates/delta.d.ts +0 -45
  97. package/dist/gates/delta.d.ts.map +0 -1
  98. package/dist/gates/delta.js +0 -260
  99. package/dist/gates/delta.js.map +0 -1
  100. package/dist/gates/index.d.ts +0 -9
  101. package/dist/gates/index.d.ts.map +0 -1
  102. package/dist/gates/index.js +0 -9
  103. package/dist/gates/index.js.map +0 -1
  104. package/dist/gates/types.d.ts +0 -96
  105. package/dist/gates/types.d.ts.map +0 -1
  106. package/dist/gates/types.js +0 -59
  107. package/dist/gates/types.js.map +0 -1
  108. package/dist/graph/call.d.ts +0 -63
  109. package/dist/graph/call.d.ts.map +0 -1
  110. package/dist/graph/call.js +0 -240
  111. package/dist/graph/call.js.map +0 -1
  112. package/dist/graph/dependency.d.ts +0 -52
  113. package/dist/graph/dependency.d.ts.map +0 -1
  114. package/dist/graph/dependency.js +0 -296
  115. package/dist/graph/dependency.js.map +0 -1
  116. package/dist/graph/index.d.ts +0 -3
  117. package/dist/graph/index.d.ts.map +0 -1
  118. package/dist/graph/index.js +0 -3
  119. package/dist/graph/index.js.map +0 -1
  120. package/dist/metrics/cognitive.d.ts +0 -42
  121. package/dist/metrics/cognitive.d.ts.map +0 -1
  122. package/dist/metrics/cognitive.js +0 -204
  123. package/dist/metrics/cognitive.js.map +0 -1
  124. package/dist/metrics/cyclomatic.d.ts +0 -31
  125. package/dist/metrics/cyclomatic.d.ts.map +0 -1
  126. package/dist/metrics/cyclomatic.js +0 -121
  127. package/dist/metrics/cyclomatic.js.map +0 -1
  128. package/dist/metrics/dimensional.d.ts +0 -32
  129. package/dist/metrics/dimensional.d.ts.map +0 -1
  130. package/dist/metrics/dimensional.js +0 -560
  131. package/dist/metrics/dimensional.js.map +0 -1
  132. package/dist/metrics/index.d.ts +0 -26
  133. package/dist/metrics/index.d.ts.map +0 -1
  134. package/dist/metrics/index.js +0 -120
  135. package/dist/metrics/index.js.map +0 -1
  136. package/dist/metrics/meta.d.ts +0 -90
  137. package/dist/metrics/meta.d.ts.map +0 -1
  138. package/dist/metrics/meta.js +0 -144
  139. package/dist/metrics/meta.js.map +0 -1
  140. package/dist/tensor/canonical.d.ts +0 -53
  141. package/dist/tensor/canonical.d.ts.map +0 -1
  142. package/dist/tensor/canonical.js +0 -192
  143. package/dist/tensor/canonical.js.map +0 -1
  144. package/dist/tensor/index.d.ts +0 -22
  145. package/dist/tensor/index.d.ts.map +0 -1
  146. package/dist/tensor/index.js +0 -22
  147. package/dist/tensor/index.js.map +0 -1
  148. package/dist/tensor/matrix.d.ts +0 -62
  149. package/dist/tensor/matrix.d.ts.map +0 -1
  150. package/dist/tensor/matrix.js +0 -187
  151. package/dist/tensor/matrix.js.map +0 -1
  152. package/dist/tensor/scoring.d.ts +0 -82
  153. package/dist/tensor/scoring.d.ts.map +0 -1
  154. package/dist/tensor/scoring.js +0 -233
  155. package/dist/tensor/scoring.js.map +0 -1
  156. package/dist/tensor/types.d.ts +0 -186
  157. package/dist/tensor/types.d.ts.map +0 -1
  158. package/dist/tensor/types.js +0 -15
  159. package/dist/tensor/types.js.map +0 -1
  160. package/dist/types.d.ts +0 -341
  161. package/dist/types.d.ts.map +0 -1
  162. package/dist/types.js +0 -22
  163. package/dist/types.js.map +0 -1
@@ -1,96 +0,0 @@
1
- /**
2
- * 게이트 시스템 타입 정의
3
- *
4
- * 다단계 승인 워크플로우:
5
- * - Dev: Context 축 담당
6
- * - QA: Behavior 축 담당
7
- * - RA: Security 축 담당
8
- */
9
- import type { MetaDimensions, Snapshot, ModuleType } from '../canonical/types.js';
10
- /**
11
- * 게이트 타입
12
- */
13
- export type GateType = 'dev' | 'qa' | 'ra' | 'ceo';
14
- /**
15
- * 게이트별 담당 축
16
- */
17
- export declare const GATE_RESPONSIBILITIES: Record<GateType, keyof MetaDimensions>;
18
- /**
19
- * 게이트 정보
20
- */
21
- export interface GateInfo {
22
- type: GateType;
23
- name: string;
24
- responsibility: keyof MetaDimensions;
25
- description: string;
26
- }
27
- export declare const GATE_INFO: Record<GateType, GateInfo>;
28
- /**
29
- * 위반 심각도
30
- */
31
- export type ViolationSeverity = 'info' | 'warning' | 'error' | 'critical';
32
- /**
33
- * 위반 정보
34
- */
35
- export interface Violation {
36
- gate: GateType;
37
- dimension: keyof MetaDimensions;
38
- severity: ViolationSeverity;
39
- currentValue: number;
40
- previousValue: number;
41
- delta: number;
42
- threshold: number;
43
- message: string;
44
- suggestion?: string;
45
- }
46
- /**
47
- * Delta 분석 결과
48
- */
49
- export interface DeltaAnalysis {
50
- baseline: Snapshot;
51
- current: Snapshot;
52
- delta: MetaDimensions;
53
- deltaPercent: MetaDimensions;
54
- exceedsThreshold: boolean;
55
- violations: Violation[];
56
- affectedGates: GateType[];
57
- }
58
- /**
59
- * Delta 임계값 설정
60
- */
61
- export interface DeltaThresholds {
62
- /** 절대값 증가 임계값 */
63
- absolute: MetaDimensions;
64
- /** 상대값(%) 증가 임계값 */
65
- relative: MetaDimensions;
66
- }
67
- /**
68
- * 기본 Delta 임계값
69
- */
70
- export declare const DEFAULT_DELTA_THRESHOLDS: DeltaThresholds;
71
- /**
72
- * 게이트 검사 결과
73
- */
74
- export type GateDecision = 'pass' | 'warn' | 'fail';
75
- /**
76
- * 게이트 검사 결과
77
- */
78
- export interface GateResult {
79
- gate: GateType;
80
- decision: GateDecision;
81
- violations: Violation[];
82
- summary: string;
83
- }
84
- /**
85
- * 전체 게이트 파이프라인 결과
86
- */
87
- export interface GatePipelineResult {
88
- moduleType: ModuleType;
89
- baseline: Snapshot;
90
- current: Snapshot;
91
- gates: GateResult[];
92
- overallDecision: GateDecision;
93
- requiredApprovals: GateType[];
94
- summary: string;
95
- }
96
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gates/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMlF;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAEnD;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,cAAc,CAKxE,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,cAAc,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAyBhD,CAAC;AAMF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,cAAc,CAAC;IAChC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,YAAY,EAAE,cAAc,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,aAAa,EAAE,QAAQ,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB,oBAAoB;IACpB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAWtC,CAAC;AAMF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,QAAQ,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,eAAe,EAAE,YAAY,CAAC;IAC9B,iBAAiB,EAAE,QAAQ,EAAE,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -1,59 +0,0 @@
1
- /**
2
- * 게이트 시스템 타입 정의
3
- *
4
- * 다단계 승인 워크플로우:
5
- * - Dev: Context 축 담당
6
- * - QA: Behavior 축 담당
7
- * - RA: Security 축 담당
8
- */
9
- /**
10
- * 게이트별 담당 축
11
- */
12
- export const GATE_RESPONSIBILITIES = {
13
- dev: 'context',
14
- qa: 'behavior',
15
- ra: 'security',
16
- ceo: 'security', // 최종 승인
17
- };
18
- export const GATE_INFO = {
19
- dev: {
20
- type: 'dev',
21
- name: '개발팀',
22
- responsibility: 'context',
23
- description: '맥락 밀도 증가 제한, 코드 복잡도 검토',
24
- },
25
- qa: {
26
- type: 'qa',
27
- name: 'QA/SQA',
28
- responsibility: 'behavior',
29
- description: '행동 변경 제한, 테스트 커버리지 필수',
30
- },
31
- ra: {
32
- type: 'ra',
33
- name: 'RA (Regulatory Affairs)',
34
- responsibility: 'security',
35
- description: '보안 영향 평가, 규제 준수 확인',
36
- },
37
- ceo: {
38
- type: 'ceo',
39
- name: 'CEO',
40
- responsibility: 'security',
41
- description: '최종 승인, 전체 영향 평가',
42
- },
43
- };
44
- /**
45
- * 기본 Delta 임계값
46
- */
47
- export const DEFAULT_DELTA_THRESHOLDS = {
48
- absolute: {
49
- security: 5,
50
- context: 10,
51
- behavior: 5,
52
- },
53
- relative: {
54
- security: 20, // 20% 증가
55
- context: 30, // 30% 증가
56
- behavior: 25, // 25% 증가
57
- },
58
- };
59
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gates/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA2C;IAC3E,GAAG,EAAE,SAAS;IACd,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,UAAU;IACd,GAAG,EAAE,UAAU,EAAE,QAAQ;CAC1B,CAAC;AAYF,MAAM,CAAC,MAAM,SAAS,GAA+B;IACnD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,wBAAwB;KACtC;IACD,EAAE,EAAE;QACF,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,uBAAuB;KACrC;IACD,EAAE,EAAE;QACF,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,yBAAyB;QAC/B,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,oBAAoB;KAClC;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,cAAc,EAAE,UAAU;QAC1B,WAAW,EAAE,iBAAiB;KAC/B;CACF,CAAC;AAqDF;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,QAAQ,EAAE;QACR,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,CAAC;KACZ;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,EAAE,SAAS;QACvB,OAAO,EAAE,EAAE,EAAG,SAAS;QACvB,QAAQ,EAAE,EAAE,EAAE,SAAS;KACxB;CACF,CAAC"}
@@ -1,63 +0,0 @@
1
- import ts from 'typescript';
2
- import type { CallNode, CallEdge, FunctionInfo } from '../types.js';
3
- /**
4
- * 호출 그래프 빌더
5
- */
6
- export declare class CallGraph {
7
- private nodes;
8
- private functionMap;
9
- /**
10
- * 소스 파일에서 호출 그래프 구축
11
- */
12
- analyzeSourceFile(sourceFile: ts.SourceFile): void;
13
- /**
14
- * 함수 노드 조회
15
- */
16
- getNode(functionKey: string): CallNode | undefined;
17
- /**
18
- * 모든 노드 반환
19
- */
20
- getAllNodes(): CallNode[];
21
- /**
22
- * 특정 함수가 호출하는 함수들
23
- */
24
- getCallees(functionKey: string): CallEdge[];
25
- /**
26
- * 특정 함수를 호출하는 함수들
27
- */
28
- getCallers(functionKey: string): CallEdge[];
29
- /**
30
- * 호출 체인 추적 (특정 함수에서 시작하여 호출되는 모든 함수)
31
- */
32
- traceCallChain(functionKey: string, maxDepth?: number): Map<string, number>;
33
- /**
34
- * 재귀 호출 탐지
35
- */
36
- findRecursiveCalls(): FunctionInfo[];
37
- /**
38
- * 함수 복잡도 영향도 계산
39
- * (이 함수가 변경되면 영향받는 함수의 수)
40
- */
41
- calculateImpact(functionKey: string): number;
42
- /**
43
- * 함수 고유 키 생성
44
- */
45
- private getFunctionKey;
46
- /**
47
- * 모든 함수 정보 수집
48
- */
49
- private collectFunctions;
50
- /**
51
- * 호출 관계 분석
52
- */
53
- private analyzeCalls;
54
- /**
55
- * 호출 표현식 처리
56
- */
57
- private processCallExpression;
58
- }
59
- /**
60
- * 호출 그래프를 Mermaid 형식으로 출력 (시각화용)
61
- */
62
- export declare function exportToMermaid(graph: CallGraph): string;
63
- //# sourceMappingURL=call.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/graph/call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGpE;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,WAAW,CAAwC;IAE3D;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,IAAI;IAQlD;;OAEG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIlD;;OAEG;IACH,WAAW,IAAI,QAAQ,EAAE;IAIzB;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE;IAI3C;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE;IAI3C;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAsBvE;;OAEG;IACH,kBAAkB,IAAI,YAAY,EAAE;IA4BpC;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAwB5C;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;OAEG;IACH,OAAO,CAAC,YAAY;IA2DpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAkD9B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAoBxD"}
@@ -1,240 +0,0 @@
1
- import ts from 'typescript';
2
- import { getSourceLocation, extractFunctionInfo } from '../ast/parser.js';
3
- /**
4
- * 호출 그래프 빌더
5
- */
6
- export class CallGraph {
7
- nodes = new Map();
8
- functionMap = new Map();
9
- /**
10
- * 소스 파일에서 호출 그래프 구축
11
- */
12
- analyzeSourceFile(sourceFile) {
13
- // 1단계: 모든 함수 정보 수집
14
- this.collectFunctions(sourceFile);
15
- // 2단계: 호출 관계 분석
16
- this.analyzeCalls(sourceFile);
17
- }
18
- /**
19
- * 함수 노드 조회
20
- */
21
- getNode(functionKey) {
22
- return this.nodes.get(functionKey);
23
- }
24
- /**
25
- * 모든 노드 반환
26
- */
27
- getAllNodes() {
28
- return Array.from(this.nodes.values());
29
- }
30
- /**
31
- * 특정 함수가 호출하는 함수들
32
- */
33
- getCallees(functionKey) {
34
- return this.nodes.get(functionKey)?.calls ?? [];
35
- }
36
- /**
37
- * 특정 함수를 호출하는 함수들
38
- */
39
- getCallers(functionKey) {
40
- return this.nodes.get(functionKey)?.calledBy ?? [];
41
- }
42
- /**
43
- * 호출 체인 추적 (특정 함수에서 시작하여 호출되는 모든 함수)
44
- */
45
- traceCallChain(functionKey, maxDepth = 10) {
46
- const result = new Map();
47
- const visited = new Set();
48
- const traverse = (key, depth) => {
49
- if (depth > maxDepth || visited.has(key))
50
- return;
51
- visited.add(key);
52
- result.set(key, depth);
53
- const node = this.nodes.get(key);
54
- if (!node)
55
- return;
56
- for (const edge of node.calls) {
57
- const calleeKey = this.getFunctionKey(edge.to);
58
- traverse(calleeKey, depth + 1);
59
- }
60
- };
61
- traverse(functionKey, 0);
62
- return result;
63
- }
64
- /**
65
- * 재귀 호출 탐지
66
- */
67
- findRecursiveCalls() {
68
- const recursive = [];
69
- for (const [key, node] of this.nodes) {
70
- // 직접 재귀
71
- const directRecursion = node.calls.some((edge) => this.getFunctionKey(edge.to) === key);
72
- if (directRecursion) {
73
- recursive.push(node.function);
74
- continue;
75
- }
76
- // 간접 재귀 (자기 자신이 호출 체인에 있는지)
77
- const chain = this.traceCallChain(key, 20);
78
- const indirectRecursion = node.calls.some((edge) => {
79
- const calleeKey = this.getFunctionKey(edge.to);
80
- return chain.has(calleeKey) && calleeKey !== key;
81
- });
82
- if (indirectRecursion) {
83
- recursive.push(node.function);
84
- }
85
- }
86
- return recursive;
87
- }
88
- /**
89
- * 함수 복잡도 영향도 계산
90
- * (이 함수가 변경되면 영향받는 함수의 수)
91
- */
92
- calculateImpact(functionKey) {
93
- const visited = new Set();
94
- const countCallers = (key) => {
95
- if (visited.has(key))
96
- return 0;
97
- visited.add(key);
98
- const node = this.nodes.get(key);
99
- if (!node)
100
- return 0;
101
- let count = node.calledBy.length;
102
- for (const edge of node.calledBy) {
103
- const callerKey = this.getFunctionKey(edge.from);
104
- count += countCallers(callerKey);
105
- }
106
- return count;
107
- };
108
- return countCallers(functionKey);
109
- }
110
- // ─── Private Methods ───────────────────────────────────────────
111
- /**
112
- * 함수 고유 키 생성
113
- */
114
- getFunctionKey(func) {
115
- const prefix = func.className ? `${func.className}.` : '';
116
- return `${func.location.filePath}:${prefix}${func.name}:${func.location.startLine}`;
117
- }
118
- /**
119
- * 모든 함수 정보 수집
120
- */
121
- collectFunctions(sourceFile) {
122
- const visit = (node, className) => {
123
- // 클래스 처리
124
- if (ts.isClassDeclaration(node) || ts.isClassExpression(node)) {
125
- const name = node.name?.getText(sourceFile) ?? '<anonymous>';
126
- node.members.forEach((member) => visit(member, name));
127
- return;
128
- }
129
- // 함수 정보 추출
130
- const funcInfo = extractFunctionInfo(node, sourceFile, className);
131
- if (funcInfo) {
132
- const key = this.getFunctionKey(funcInfo);
133
- this.functionMap.set(funcInfo.name, funcInfo);
134
- this.nodes.set(key, {
135
- function: funcInfo,
136
- calls: [],
137
- calledBy: [],
138
- });
139
- }
140
- ts.forEachChild(node, (child) => visit(child, className));
141
- };
142
- visit(sourceFile);
143
- }
144
- /**
145
- * 호출 관계 분석
146
- */
147
- analyzeCalls(sourceFile) {
148
- const visit = (node, currentFunction, inConditional, isAsync) => {
149
- // 함수 컨텍스트 업데이트
150
- if (ts.isFunctionDeclaration(node) ||
151
- ts.isFunctionExpression(node) ||
152
- ts.isArrowFunction(node) ||
153
- ts.isMethodDeclaration(node)) {
154
- const funcInfo = extractFunctionInfo(node, sourceFile);
155
- if (funcInfo) {
156
- const asyncContext = funcInfo.isAsync || isAsync;
157
- ts.forEachChild(node, (child) => visit(child, funcInfo, false, asyncContext));
158
- return;
159
- }
160
- }
161
- // 조건부 컨텍스트 추적
162
- const conditional = inConditional ||
163
- ts.isIfStatement(node) ||
164
- ts.isConditionalExpression(node) ||
165
- ts.isSwitchStatement(node);
166
- // 호출 표현식 분석
167
- if (ts.isCallExpression(node) && currentFunction) {
168
- this.processCallExpression(node, sourceFile, currentFunction, conditional, isAsync);
169
- }
170
- // await 표현식은 async 컨텍스트로 표시
171
- if (ts.isAwaitExpression(node)) {
172
- ts.forEachChild(node, (child) => visit(child, currentFunction, conditional, true));
173
- return;
174
- }
175
- ts.forEachChild(node, (child) => visit(child, currentFunction, conditional, isAsync));
176
- };
177
- // 최상위 레벨 함수부터 분석
178
- ts.forEachChild(sourceFile, (node) => visit(node, null, false, false));
179
- }
180
- /**
181
- * 호출 표현식 처리
182
- */
183
- processCallExpression(node, sourceFile, caller, isConditional, isAsync) {
184
- let calleeName = null;
185
- // 호출 대상 이름 추출
186
- if (ts.isIdentifier(node.expression)) {
187
- calleeName = node.expression.text;
188
- }
189
- else if (ts.isPropertyAccessExpression(node.expression)) {
190
- calleeName = node.expression.name.text;
191
- }
192
- if (!calleeName)
193
- return;
194
- // 호출 대상 함수 찾기
195
- const callee = this.functionMap.get(calleeName);
196
- if (!callee)
197
- return;
198
- const callerKey = this.getFunctionKey(caller);
199
- const calleeKey = this.getFunctionKey(callee);
200
- const callerNode = this.nodes.get(callerKey);
201
- const calleeNode = this.nodes.get(calleeKey);
202
- if (!callerNode || !calleeNode)
203
- return;
204
- const edge = {
205
- from: caller,
206
- to: callee,
207
- location: getSourceLocation(node, sourceFile),
208
- isConditional,
209
- isAsync,
210
- };
211
- // 중복 방지
212
- const isDuplicate = callerNode.calls.some((e) => this.getFunctionKey(e.to) === calleeKey &&
213
- e.location.startLine === edge.location.startLine);
214
- if (!isDuplicate) {
215
- callerNode.calls.push(edge);
216
- calleeNode.calledBy.push(edge);
217
- }
218
- }
219
- }
220
- /**
221
- * 호출 그래프를 Mermaid 형식으로 출력 (시각화용)
222
- */
223
- export function exportToMermaid(graph) {
224
- const lines = ['flowchart TD'];
225
- for (const node of graph.getAllNodes()) {
226
- const shortName = node.function.className
227
- ? `${node.function.className}_${node.function.name}`
228
- : node.function.name;
229
- for (const edge of node.calls) {
230
- const targetName = edge.to.className
231
- ? `${edge.to.className}_${edge.to.name}`
232
- : edge.to.name;
233
- const style = edge.isAsync ? '-.->' : '-->';
234
- const label = edge.isConditional ? '|conditional|' : '';
235
- lines.push(` ${shortName} ${style}${label} ${targetName}`);
236
- }
237
- }
238
- return lines.join('\n');
239
- }
240
- //# sourceMappingURL=call.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/graph/call.ts"],"names":[],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- import type { DependencyNode } from '../types.js';
2
- /**
3
- * 의존성 그래프 빌더
4
- */
5
- export declare class DependencyGraph {
6
- private nodes;
7
- private projectRoot;
8
- constructor(projectRoot: string);
9
- /**
10
- * 프로젝트 루트 경로 반환
11
- */
12
- getProjectRoot(): string;
13
- /**
14
- * 파일의 의존성 분석
15
- */
16
- analyzeFile(filePath: string, content?: string): DependencyNode;
17
- /**
18
- * 디렉토리 내 모든 파일 분석
19
- */
20
- analyzeDirectory(dirPath: string, extensions?: string[]): void;
21
- /**
22
- * 특정 파일에서 시작하는 의존성 트리 구축
23
- */
24
- buildDependencyTree(filePath: string, maxDepth?: number): DependencyNode[];
25
- /**
26
- * 특정 파일을 참조하는 파일들 찾기
27
- */
28
- findDependents(filePath: string, maxDepth?: number): DependencyNode[];
29
- /**
30
- * 노드 조회
31
- */
32
- getNode(filePath: string): DependencyNode | undefined;
33
- /**
34
- * 모든 노드 반환
35
- */
36
- getAllNodes(): DependencyNode[];
37
- /**
38
- * 순환 의존성 탐지
39
- */
40
- findCircularDependencies(): string[][];
41
- private normalizePath;
42
- private readFile;
43
- private resolveImportPath;
44
- private findFiles;
45
- private rebuildReverseReferences;
46
- private calculateDepths;
47
- }
48
- /**
49
- * 의존성 그래프를 DOT 형식으로 출력 (시각화용)
50
- */
51
- export declare function exportToDot(graph: DependencyGraph): string;
52
- //# sourceMappingURL=dependency.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependency.d.ts","sourceRoot":"","sources":["../../src/graph/dependency.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc;IAmD/D;;OAEG;IACH,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,UAAU,WAAiC,GAC1C,IAAI;IAaP;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,cAAc,EAAE;IA2BrE;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,cAAc,EAAE;IAyBhE;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAKrD;;OAEG;IACH,WAAW,IAAI,cAAc,EAAE;IAI/B;;OAEG;IACH,wBAAwB,IAAI,MAAM,EAAE,EAAE;IA2CtC,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,SAAS;IA6BjB,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,eAAe;CA8BxB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAe1D"}