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.
- package/dist/__tests__/analyzers.test.d.ts +5 -0
- package/dist/__tests__/analyzers.test.d.ts.map +1 -0
- package/dist/__tests__/analyzers.test.js +357 -0
- package/dist/__tests__/analyzers.test.js.map +1 -0
- package/dist/__tests__/gate.test.d.ts +5 -0
- package/dist/__tests__/gate.test.d.ts.map +1 -0
- package/dist/__tests__/gate.test.js +140 -0
- package/dist/__tests__/gate.test.js.map +1 -0
- package/dist/analyzers/bread.d.ts +63 -0
- package/dist/analyzers/bread.d.ts.map +1 -0
- package/dist/analyzers/bread.js +415 -0
- package/dist/analyzers/bread.js.map +1 -0
- package/dist/analyzers/cheese.d.ts +111 -0
- package/dist/analyzers/cheese.d.ts.map +1 -0
- package/dist/analyzers/cheese.js +881 -0
- package/dist/analyzers/cheese.js.map +1 -0
- package/dist/analyzers/ham.d.ts +33 -0
- package/dist/analyzers/ham.d.ts.map +1 -0
- package/dist/analyzers/ham.js +264 -0
- package/dist/analyzers/ham.js.map +1 -0
- package/dist/analyzers/index.d.ts +7 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +7 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/budget/index.d.ts +50 -0
- package/dist/budget/index.d.ts.map +1 -0
- package/dist/budget/index.js +138 -0
- package/dist/budget/index.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +103 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/gate/index.d.ts +31 -0
- package/dist/gate/index.d.ts.map +1 -0
- package/dist/gate/index.js +117 -0
- package/dist/gate/index.js.map +1 -0
- package/dist/gate/waiver.d.ts +83 -0
- package/dist/gate/waiver.d.ts.map +1 -0
- package/dist/gate/waiver.js +425 -0
- package/dist/gate/waiver.js.map +1 -0
- package/dist/index.d.ts +8 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -49
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +351 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/recommend/index.d.ts +32 -0
- package/dist/recommend/index.d.ts.map +1 -0
- package/dist/recommend/index.js +169 -0
- package/dist/recommend/index.js.map +1 -0
- package/dist/simplex/index.d.ts +26 -0
- package/dist/simplex/index.d.ts.map +1 -0
- package/dist/simplex/index.js +100 -0
- package/dist/simplex/index.js.map +1 -0
- package/dist/types/index.d.ts +39 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +27 -52
- package/LICENSE +0 -21
- package/README.md +0 -72
- package/dist/ast/index.d.ts +0 -2
- package/dist/ast/index.d.ts.map +0 -1
- package/dist/ast/index.js +0 -2
- package/dist/ast/index.js.map +0 -1
- package/dist/ast/parser.d.ts +0 -27
- package/dist/ast/parser.d.ts.map +0 -1
- package/dist/ast/parser.js +0 -273
- package/dist/ast/parser.js.map +0 -1
- package/dist/canonical/convergence.d.ts +0 -56
- package/dist/canonical/convergence.d.ts.map +0 -1
- package/dist/canonical/convergence.js +0 -149
- package/dist/canonical/convergence.js.map +0 -1
- package/dist/canonical/index.d.ts +0 -11
- package/dist/canonical/index.d.ts.map +0 -1
- package/dist/canonical/index.js +0 -11
- package/dist/canonical/index.js.map +0 -1
- package/dist/canonical/profiles.d.ts +0 -40
- package/dist/canonical/profiles.d.ts.map +0 -1
- package/dist/canonical/profiles.js +0 -182
- package/dist/canonical/profiles.js.map +0 -1
- package/dist/canonical/types.d.ts +0 -124
- package/dist/canonical/types.d.ts.map +0 -1
- package/dist/canonical/types.js +0 -46
- package/dist/canonical/types.js.map +0 -1
- package/dist/compare.d.ts +0 -31
- package/dist/compare.d.ts.map +0 -1
- package/dist/compare.js +0 -354
- package/dist/compare.js.map +0 -1
- package/dist/context/index.d.ts +0 -41
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js +0 -253
- package/dist/context/index.js.map +0 -1
- package/dist/gates/delta.d.ts +0 -45
- package/dist/gates/delta.d.ts.map +0 -1
- package/dist/gates/delta.js +0 -260
- package/dist/gates/delta.js.map +0 -1
- package/dist/gates/index.d.ts +0 -9
- package/dist/gates/index.d.ts.map +0 -1
- package/dist/gates/index.js +0 -9
- package/dist/gates/index.js.map +0 -1
- package/dist/gates/types.d.ts +0 -96
- package/dist/gates/types.d.ts.map +0 -1
- package/dist/gates/types.js +0 -59
- package/dist/gates/types.js.map +0 -1
- package/dist/graph/call.d.ts +0 -63
- package/dist/graph/call.d.ts.map +0 -1
- package/dist/graph/call.js +0 -240
- package/dist/graph/call.js.map +0 -1
- package/dist/graph/dependency.d.ts +0 -52
- package/dist/graph/dependency.d.ts.map +0 -1
- package/dist/graph/dependency.js +0 -296
- package/dist/graph/dependency.js.map +0 -1
- package/dist/graph/index.d.ts +0 -3
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js +0 -3
- package/dist/graph/index.js.map +0 -1
- package/dist/metrics/cognitive.d.ts +0 -42
- package/dist/metrics/cognitive.d.ts.map +0 -1
- package/dist/metrics/cognitive.js +0 -204
- package/dist/metrics/cognitive.js.map +0 -1
- package/dist/metrics/cyclomatic.d.ts +0 -31
- package/dist/metrics/cyclomatic.d.ts.map +0 -1
- package/dist/metrics/cyclomatic.js +0 -121
- package/dist/metrics/cyclomatic.js.map +0 -1
- package/dist/metrics/dimensional.d.ts +0 -32
- package/dist/metrics/dimensional.d.ts.map +0 -1
- package/dist/metrics/dimensional.js +0 -560
- package/dist/metrics/dimensional.js.map +0 -1
- package/dist/metrics/index.d.ts +0 -26
- package/dist/metrics/index.d.ts.map +0 -1
- package/dist/metrics/index.js +0 -120
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/meta.d.ts +0 -90
- package/dist/metrics/meta.d.ts.map +0 -1
- package/dist/metrics/meta.js +0 -144
- package/dist/metrics/meta.js.map +0 -1
- package/dist/tensor/canonical.d.ts +0 -53
- package/dist/tensor/canonical.d.ts.map +0 -1
- package/dist/tensor/canonical.js +0 -192
- package/dist/tensor/canonical.js.map +0 -1
- package/dist/tensor/index.d.ts +0 -22
- package/dist/tensor/index.d.ts.map +0 -1
- package/dist/tensor/index.js +0 -22
- package/dist/tensor/index.js.map +0 -1
- package/dist/tensor/matrix.d.ts +0 -62
- package/dist/tensor/matrix.d.ts.map +0 -1
- package/dist/tensor/matrix.js +0 -187
- package/dist/tensor/matrix.js.map +0 -1
- package/dist/tensor/scoring.d.ts +0 -82
- package/dist/tensor/scoring.d.ts.map +0 -1
- package/dist/tensor/scoring.js +0 -233
- package/dist/tensor/scoring.js.map +0 -1
- package/dist/tensor/types.d.ts +0 -186
- package/dist/tensor/types.d.ts.map +0 -1
- package/dist/tensor/types.js +0 -15
- package/dist/tensor/types.js.map +0 -1
- package/dist/types.d.ts +0 -341
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -22
- package/dist/types.js.map +0 -1
package/dist/gates/types.d.ts
DELETED
|
@@ -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"}
|
package/dist/gates/types.js
DELETED
|
@@ -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
|
package/dist/gates/types.js.map
DELETED
|
@@ -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"}
|
package/dist/graph/call.d.ts
DELETED
|
@@ -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
|
package/dist/graph/call.d.ts.map
DELETED
|
@@ -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"}
|
package/dist/graph/call.js
DELETED
|
@@ -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
|
package/dist/graph/call.js.map
DELETED
|
@@ -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"}
|