semantic-complexity 0.0.7-741984fb → 0.0.15-29c6b296

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,560 +0,0 @@
1
- /**
2
- * 차원 기반 복잡도 분석 (Dimensional Complexity)
3
- *
4
- * 1D: 제어 흐름 (순환복잡도 기반) - cyclomatic.ts
5
- * 2D: 중첩 (인지복잡도 기반) - cognitive.ts
6
- * 3D: 상태 복잡도 - 이 파일
7
- * 4D: 비동기 복잡도 - 이 파일
8
- * 5D: 숨은 결합 복잡도 - 이 파일
9
- */
10
- import * as ts from 'typescript';
11
- // ─────────────────────────────────────────────────────────────────
12
- // 유틸리티 함수
13
- // ─────────────────────────────────────────────────────────────────
14
- function getLocation(node, sourceFile) {
15
- const { line: startLine, character: startColumn } = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
16
- const { line: endLine, character: endColumn } = sourceFile.getLineAndCharacterOfPosition(node.getEnd());
17
- return {
18
- filePath: sourceFile.fileName,
19
- startLine: startLine + 1,
20
- startColumn: startColumn + 1,
21
- endLine: endLine + 1,
22
- endColumn: endColumn + 1,
23
- };
24
- }
25
- // ─────────────────────────────────────────────────────────────────
26
- // 3D: 상태 복잡도 분석
27
- // ─────────────────────────────────────────────────────────────────
28
- /**
29
- * 상태 복잡도 분석
30
- */
31
- export function analyzeStateComplexity(node, sourceFile) {
32
- const result = {
33
- enumStates: 0,
34
- stateMutations: 0,
35
- stateReads: 0,
36
- stateBranches: 0,
37
- stateMachinePatterns: [],
38
- };
39
- // 상태 관련 변수 이름 패턴
40
- const statePatterns = /^(state|status|mode|phase|step|stage|flag|is[A-Z]|has[A-Z]|can[A-Z])/;
41
- const stateVariables = new Set();
42
- function visit(n) {
43
- // 변수 선언에서 상태 변수 탐지
44
- if (ts.isVariableDeclaration(n) && ts.isIdentifier(n.name)) {
45
- const name = n.name.text;
46
- if (statePatterns.test(name)) {
47
- stateVariables.add(name);
48
- }
49
- // useState, useReducer 패턴
50
- if (n.initializer && ts.isCallExpression(n.initializer)) {
51
- const callText = n.initializer.expression.getText(sourceFile);
52
- if (callText === 'useState' || callText === 'useReducer') {
53
- stateVariables.add(name);
54
- result.enumStates++;
55
- }
56
- }
57
- }
58
- // 상태 변경 탐지 (할당)
59
- if (ts.isBinaryExpression(n) && n.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
60
- if (ts.isIdentifier(n.left)) {
61
- const name = n.left.text;
62
- if (stateVariables.has(name) || statePatterns.test(name)) {
63
- result.stateMutations++;
64
- }
65
- }
66
- // setter 함수 호출 (setXxx)
67
- if (ts.isCallExpression(n.right)) {
68
- const callText = n.right.expression.getText(sourceFile);
69
- if (/^set[A-Z]/.test(callText)) {
70
- result.stateMutations++;
71
- }
72
- }
73
- }
74
- // setter 함수 호출
75
- if (ts.isCallExpression(n)) {
76
- const callText = n.expression.getText(sourceFile);
77
- if (/^set[A-Z]/.test(callText)) {
78
- result.stateMutations++;
79
- }
80
- }
81
- // 상태 읽기 탐지
82
- if (ts.isIdentifier(n) && !ts.isVariableDeclaration(n.parent)) {
83
- const name = n.text;
84
- if (stateVariables.has(name) || statePatterns.test(name)) {
85
- // 할당 대상이 아닌 경우만
86
- if (!ts.isBinaryExpression(n.parent) ||
87
- n.parent.left !== n ||
88
- n.parent.operatorToken.kind !== ts.SyntaxKind.EqualsToken) {
89
- result.stateReads++;
90
- }
91
- }
92
- }
93
- // 상태 기반 분기 (switch on state)
94
- if (ts.isSwitchStatement(n)) {
95
- const expr = n.expression.getText(sourceFile);
96
- if (statePatterns.test(expr) || stateVariables.has(expr)) {
97
- result.stateBranches++;
98
- result.stateMachinePatterns.push({
99
- kind: 'switch-enum',
100
- location: getLocation(n, sourceFile),
101
- stateCount: n.caseBlock.clauses.length,
102
- transitionCount: countTransitionsInSwitch(n, sourceFile),
103
- });
104
- }
105
- }
106
- // if 문에서 상태 체크
107
- if (ts.isIfStatement(n)) {
108
- const condText = n.expression.getText(sourceFile);
109
- if (statePatterns.test(condText)) {
110
- result.stateBranches++;
111
- }
112
- }
113
- ts.forEachChild(n, visit);
114
- }
115
- visit(node);
116
- return result;
117
- }
118
- function countTransitionsInSwitch(node, sourceFile) {
119
- let transitions = 0;
120
- const stateSetterPattern = /^set[A-Z]/;
121
- function visitCase(clause) {
122
- clause.statements.forEach((stmt) => {
123
- const stmtText = stmt.getText(sourceFile);
124
- if (stateSetterPattern.test(stmtText)) {
125
- transitions++;
126
- }
127
- });
128
- }
129
- node.caseBlock.clauses.forEach(visitCase);
130
- return transitions;
131
- }
132
- // ─────────────────────────────────────────────────────────────────
133
- // 4D: 비동기 복잡도 분석
134
- // ─────────────────────────────────────────────────────────────────
135
- /**
136
- * 비동기 복잡도 분석
137
- */
138
- export function analyzeAsyncComplexity(node, sourceFile) {
139
- const result = {
140
- asyncBoundaries: 0,
141
- promiseChains: 0,
142
- retryPatterns: 0,
143
- timeouts: 0,
144
- callbackDepth: 0,
145
- concurrencyPatterns: [],
146
- asyncErrorBoundaries: 0,
147
- };
148
- let maxCallbackDepth = 0;
149
- function visit(n, callbackLevel = 0) {
150
- // async 함수
151
- if (ts.isFunctionDeclaration(n) || ts.isFunctionExpression(n) ||
152
- ts.isArrowFunction(n) || ts.isMethodDeclaration(n)) {
153
- const modifiers = ts.canHaveModifiers(n) ? ts.getModifiers(n) : undefined;
154
- if (modifiers?.some(m => m.kind === ts.SyntaxKind.AsyncKeyword)) {
155
- result.asyncBoundaries++;
156
- }
157
- }
158
- // await 표현식
159
- if (ts.isAwaitExpression(n)) {
160
- result.asyncBoundaries++;
161
- }
162
- // Promise 체인 (.then, .catch, .finally)
163
- if (ts.isCallExpression(n) && ts.isPropertyAccessExpression(n.expression)) {
164
- const propName = n.expression.name.text;
165
- if (propName === 'then' || propName === 'catch' || propName === 'finally') {
166
- result.promiseChains++;
167
- }
168
- }
169
- // 동시성 패턴 (Promise.all, Promise.race, Promise.allSettled)
170
- if (ts.isCallExpression(n) && ts.isPropertyAccessExpression(n.expression)) {
171
- const objText = n.expression.expression.getText(sourceFile);
172
- const propName = n.expression.name.text;
173
- if (objText === 'Promise') {
174
- if (propName === 'all' || propName === 'allSettled') {
175
- const promiseCount = countPromisesInArray(n.arguments[0]);
176
- result.concurrencyPatterns.push({
177
- kind: 'parallel',
178
- location: getLocation(n, sourceFile),
179
- promiseCount,
180
- });
181
- }
182
- else if (propName === 'race') {
183
- const promiseCount = countPromisesInArray(n.arguments[0]);
184
- result.concurrencyPatterns.push({
185
- kind: 'race',
186
- location: getLocation(n, sourceFile),
187
- promiseCount,
188
- });
189
- }
190
- }
191
- }
192
- // 타임아웃/인터벌
193
- if (ts.isCallExpression(n)) {
194
- const callText = n.expression.getText(sourceFile);
195
- if (callText === 'setTimeout' || callText === 'setInterval' ||
196
- callText === 'requestAnimationFrame') {
197
- result.timeouts++;
198
- }
199
- }
200
- // 재시도 패턴 탐지
201
- if (ts.isCallExpression(n)) {
202
- const callText = n.expression.getText(sourceFile);
203
- if (/retry|backoff|attempt/i.test(callText)) {
204
- result.retryPatterns++;
205
- }
206
- }
207
- // 콜백 깊이 추적
208
- if (ts.isCallExpression(n)) {
209
- n.arguments.forEach((arg) => {
210
- if (ts.isFunctionExpression(arg) || ts.isArrowFunction(arg)) {
211
- const newLevel = callbackLevel + 1;
212
- maxCallbackDepth = Math.max(maxCallbackDepth, newLevel);
213
- ts.forEachChild(arg, (child) => visit(child, newLevel));
214
- }
215
- else {
216
- visit(arg, callbackLevel);
217
- }
218
- });
219
- visit(n.expression, callbackLevel);
220
- return; // 이미 자식들을 처리함
221
- }
222
- // async 함수 내 try-catch
223
- if (ts.isTryStatement(n)) {
224
- // 부모가 async 함수인지 확인
225
- let parent = n.parent;
226
- while (parent) {
227
- if (ts.isFunctionDeclaration(parent) || ts.isFunctionExpression(parent) ||
228
- ts.isArrowFunction(parent) || ts.isMethodDeclaration(parent)) {
229
- const modifiers = ts.canHaveModifiers(parent) ? ts.getModifiers(parent) : undefined;
230
- if (modifiers?.some(m => m.kind === ts.SyntaxKind.AsyncKeyword)) {
231
- result.asyncErrorBoundaries++;
232
- }
233
- break;
234
- }
235
- parent = parent.parent;
236
- }
237
- }
238
- ts.forEachChild(n, (child) => visit(child, callbackLevel));
239
- }
240
- visit(node);
241
- result.callbackDepth = maxCallbackDepth;
242
- return result;
243
- }
244
- function countPromisesInArray(node) {
245
- if (!node)
246
- return 0;
247
- if (ts.isArrayLiteralExpression(node)) {
248
- return node.elements.length;
249
- }
250
- return 1; // 동적 배열일 경우
251
- }
252
- // ─────────────────────────────────────────────────────────────────
253
- // 5D: 숨은 결합 복잡도 분석
254
- // ─────────────────────────────────────────────────────────────────
255
- // 잘 알려진 전역 객체들
256
- const GLOBAL_OBJECTS = new Set([
257
- 'window', 'document', 'navigator', 'location', 'history',
258
- 'console', 'localStorage', 'sessionStorage', 'fetch',
259
- 'XMLHttpRequest', 'WebSocket', 'Worker', 'process',
260
- 'global', 'globalThis', 'self',
261
- ]);
262
- // 암묵적 I/O API
263
- const IO_APIS = {
264
- 'console.log': 'console',
265
- 'console.error': 'console',
266
- 'console.warn': 'console',
267
- 'console.info': 'console',
268
- 'console.debug': 'console',
269
- 'fetch': 'fetch',
270
- 'XMLHttpRequest': 'network',
271
- 'WebSocket': 'network',
272
- 'localStorage.getItem': 'storage',
273
- 'localStorage.setItem': 'storage',
274
- 'sessionStorage.getItem': 'storage',
275
- 'sessionStorage.setItem': 'storage',
276
- 'document.getElementById': 'dom',
277
- 'document.querySelector': 'dom',
278
- 'document.querySelectorAll': 'dom',
279
- 'document.createElement': 'dom',
280
- };
281
- /**
282
- * 숨은 결합 복잡도 분석
283
- */
284
- export function analyzeCouplingComplexity(node, sourceFile, scopeVariables = new Set()) {
285
- const result = {
286
- globalAccess: [],
287
- implicitIO: [],
288
- sideEffects: [],
289
- envDependency: [],
290
- closureCaptures: [],
291
- };
292
- // 현재 스코프의 변수들 수집
293
- const localVariables = new Set(scopeVariables);
294
- function collectLocalVariables(n) {
295
- if (ts.isVariableDeclaration(n) && ts.isIdentifier(n.name)) {
296
- localVariables.add(n.name.text);
297
- }
298
- if (ts.isParameter(n) && ts.isIdentifier(n.name)) {
299
- localVariables.add(n.name.text);
300
- }
301
- if (ts.isFunctionDeclaration(n) && n.name) {
302
- localVariables.add(n.name.text);
303
- }
304
- }
305
- function visit(n) {
306
- collectLocalVariables(n);
307
- // 전역 객체 접근
308
- if (ts.isIdentifier(n) && GLOBAL_OBJECTS.has(n.text)) {
309
- // 부모가 프로퍼티 접근이거나 호출인 경우
310
- if (!localVariables.has(n.text)) {
311
- const isWrite = isWriteAccess(n);
312
- result.globalAccess.push({
313
- name: n.text,
314
- kind: 'global',
315
- location: getLocation(n, sourceFile),
316
- isWrite,
317
- });
318
- }
319
- }
320
- // 암묵적 I/O
321
- if (ts.isCallExpression(n)) {
322
- const callText = n.expression.getText(sourceFile);
323
- for (const [api, kind] of Object.entries(IO_APIS)) {
324
- if (callText.startsWith(api.split('.')[0]) && callText.includes(api.split('.')[1] || '')) {
325
- result.implicitIO.push({
326
- kind,
327
- location: getLocation(n, sourceFile),
328
- api: callText,
329
- });
330
- break;
331
- }
332
- }
333
- // fetch, XMLHttpRequest 직접 호출
334
- if (callText === 'fetch') {
335
- result.implicitIO.push({
336
- kind: 'fetch',
337
- location: getLocation(n, sourceFile),
338
- api: 'fetch',
339
- });
340
- }
341
- }
342
- // 환경 의존성
343
- if (ts.isPropertyAccessExpression(n)) {
344
- const objText = n.expression.getText(sourceFile);
345
- const propName = n.name.text;
346
- if (objText === 'process' && propName === 'env') {
347
- result.envDependency.push({
348
- kind: 'process-env',
349
- location: getLocation(n, sourceFile),
350
- property: 'env',
351
- });
352
- }
353
- if (objText === 'window') {
354
- result.envDependency.push({
355
- kind: 'window',
356
- location: getLocation(n, sourceFile),
357
- property: propName,
358
- });
359
- }
360
- if (objText === 'document') {
361
- result.envDependency.push({
362
- kind: 'document',
363
- location: getLocation(n, sourceFile),
364
- property: propName,
365
- });
366
- }
367
- }
368
- // 부작용 탐지
369
- if (ts.isCallExpression(n)) {
370
- const callText = n.expression.getText(sourceFile);
371
- // 이벤트 등록
372
- if (callText.includes('addEventListener') || callText.includes('on')) {
373
- result.sideEffects.push({
374
- kind: 'event',
375
- location: getLocation(n, sourceFile),
376
- target: callText,
377
- description: 'Event listener registration',
378
- });
379
- }
380
- // 구독 패턴
381
- if (callText.includes('subscribe') || callText.includes('observe')) {
382
- result.sideEffects.push({
383
- kind: 'subscription',
384
- location: getLocation(n, sourceFile),
385
- target: callText,
386
- description: 'Subscription pattern',
387
- });
388
- }
389
- // 타이머
390
- if (callText === 'setTimeout' || callText === 'setInterval') {
391
- result.sideEffects.push({
392
- kind: 'timer',
393
- location: getLocation(n, sourceFile),
394
- target: callText,
395
- description: 'Timer side effect',
396
- });
397
- }
398
- }
399
- // 클로저 캡처 탐지 (함수 내부에서 외부 변수 참조)
400
- if ((ts.isFunctionExpression(n) || ts.isArrowFunction(n)) && n.body) {
401
- const functionLocalVars = new Set();
402
- // 파라미터 수집
403
- n.parameters.forEach((p) => {
404
- if (ts.isIdentifier(p.name)) {
405
- functionLocalVars.add(p.name.text);
406
- }
407
- });
408
- const captureCheck = (inner) => {
409
- if (ts.isVariableDeclaration(inner) && ts.isIdentifier(inner.name)) {
410
- functionLocalVars.add(inner.name.text);
411
- }
412
- if (ts.isIdentifier(inner) &&
413
- localVariables.has(inner.text) &&
414
- !functionLocalVars.has(inner.text) &&
415
- !GLOBAL_OBJECTS.has(inner.text)) {
416
- result.closureCaptures.push({
417
- variableName: inner.text,
418
- location: getLocation(inner, sourceFile),
419
- capturedAt: getLocation(n, sourceFile),
420
- isMutable: isVariableMutable(inner.text, node),
421
- });
422
- }
423
- ts.forEachChild(inner, captureCheck);
424
- };
425
- ts.forEachChild(n.body, captureCheck);
426
- }
427
- ts.forEachChild(n, visit);
428
- }
429
- visit(node);
430
- return result;
431
- }
432
- function isWriteAccess(node) {
433
- const parent = node.parent;
434
- if (ts.isBinaryExpression(parent)) {
435
- return parent.left === node &&
436
- parent.operatorToken.kind === ts.SyntaxKind.EqualsToken;
437
- }
438
- return false;
439
- }
440
- function isVariableMutable(name, scope) {
441
- let isMutable = false;
442
- function check(n) {
443
- if (ts.isVariableDeclaration(n) && ts.isIdentifier(n.name) && n.name.text === name) {
444
- const parent = n.parent;
445
- if (ts.isVariableDeclarationList(parent)) {
446
- isMutable = !(parent.flags & ts.NodeFlags.Const);
447
- }
448
- }
449
- ts.forEachChild(n, check);
450
- }
451
- check(scope);
452
- return isMutable;
453
- }
454
- // ─────────────────────────────────────────────────────────────────
455
- // 종합 차원 복잡도 계산
456
- // ─────────────────────────────────────────────────────────────────
457
- /**
458
- * 기본 가중치
459
- */
460
- export const DEFAULT_WEIGHTS = {
461
- control: 1.0,
462
- nesting: 1.5,
463
- state: 2.0,
464
- async: 2.5,
465
- coupling: 3.0,
466
- };
467
- /**
468
- * 상태 복잡도를 스칼라 점수로 변환
469
- */
470
- function scoreStateComplexity(state) {
471
- return (state.enumStates * 1 +
472
- state.stateMutations * 2 +
473
- state.stateReads * 0.5 +
474
- state.stateBranches * 3 +
475
- state.stateMachinePatterns.length * 5);
476
- }
477
- /**
478
- * 비동기 복잡도를 스칼라 점수로 변환
479
- */
480
- function scoreAsyncComplexity(async) {
481
- return (async.asyncBoundaries * 1 +
482
- async.promiseChains * 2 +
483
- async.retryPatterns * 3 +
484
- async.timeouts * 2 +
485
- async.callbackDepth * 3 +
486
- async.concurrencyPatterns.length * 4 +
487
- async.asyncErrorBoundaries * 1);
488
- }
489
- /**
490
- * 결합 복잡도를 스칼라 점수로 변환
491
- */
492
- function scoreCouplingComplexity(coupling) {
493
- return (coupling.globalAccess.length * 2 +
494
- coupling.implicitIO.length * 2 +
495
- coupling.sideEffects.length * 3 +
496
- coupling.envDependency.length * 2 +
497
- coupling.closureCaptures.length * 1);
498
- }
499
- /**
500
- * 차원 기반 복잡도 전체 분석
501
- */
502
- export function analyzeDimensionalComplexity(node, sourceFile, cyclomatic, nestingPenalty, weights = DEFAULT_WEIGHTS) {
503
- // 각 차원 분석
504
- const state = analyzeStateComplexity(node, sourceFile);
505
- const async = analyzeAsyncComplexity(node, sourceFile);
506
- const coupling = analyzeCouplingComplexity(node, sourceFile);
507
- // 스칼라 점수 계산
508
- const stateScore = scoreStateComplexity(state);
509
- const asyncScore = scoreAsyncComplexity(async);
510
- const couplingScore = scoreCouplingComplexity(coupling);
511
- // 가중 합산
512
- const controlWeighted = cyclomatic * weights.control;
513
- const nestingWeighted = nestingPenalty * weights.nesting;
514
- const stateWeighted = stateScore * weights.state;
515
- const asyncWeighted = asyncScore * weights.async;
516
- const couplingWeighted = couplingScore * weights.coupling;
517
- const totalWeighted = controlWeighted + nestingWeighted + stateWeighted + asyncWeighted + couplingWeighted;
518
- // 기여도 계산 (0-1)
519
- const contributions = {
520
- control: totalWeighted > 0 ? controlWeighted / totalWeighted : 0,
521
- nesting: totalWeighted > 0 ? nestingWeighted / totalWeighted : 0,
522
- state: totalWeighted > 0 ? stateWeighted / totalWeighted : 0,
523
- async: totalWeighted > 0 ? asyncWeighted / totalWeighted : 0,
524
- coupling: totalWeighted > 0 ? couplingWeighted / totalWeighted : 0,
525
- };
526
- // 핫스팟 생성
527
- const hotspots = [];
528
- // 각 차원에서 가장 기여도 높은 항목 추출
529
- const dimensionScores = [
530
- { dimension: '1D-control', score: controlWeighted, reason: `${cyclomatic} branch points` },
531
- { dimension: '2D-nesting', score: nestingWeighted, reason: `${nestingPenalty} nesting penalty` },
532
- { dimension: '3D-state', score: stateWeighted, reason: `${state.stateMutations} mutations, ${state.stateBranches} state branches` },
533
- { dimension: '4D-async', score: asyncWeighted, reason: `${async.asyncBoundaries} async boundaries, ${async.promiseChains} chains` },
534
- { dimension: '5D-coupling', score: couplingWeighted, reason: `${coupling.globalAccess.length} global, ${coupling.sideEffects.length} side effects` },
535
- ];
536
- // 상위 3개
537
- dimensionScores.sort((a, b) => b.score - a.score);
538
- for (let i = 0; i < 3 && i < dimensionScores.length; i++) {
539
- if (dimensionScores[i].score > 0) {
540
- hotspots.push({
541
- dimension: dimensionScores[i].dimension,
542
- score: dimensionScores[i].score,
543
- location: getLocation(node, sourceFile),
544
- reason: dimensionScores[i].reason,
545
- });
546
- }
547
- }
548
- return {
549
- control: cyclomatic,
550
- nesting: nestingPenalty,
551
- state,
552
- async,
553
- coupling,
554
- weighted: Math.round(totalWeighted * 10) / 10,
555
- weights,
556
- contributions,
557
- hotspots,
558
- };
559
- }
560
- //# sourceMappingURL=dimensional.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dimensional.js","sourceRoot":"","sources":["../../src/metrics/dimensional.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAYjC,oEAAoE;AACpE,UAAU;AACV,oEAAoE;AAEpE,SAAS,WAAW,CAAC,IAAa,EAAE,UAAyB;IAC3D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,GAC/C,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAC3C,UAAU,CAAC,6BAA6B,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,SAAS,EAAE,SAAS,GAAG,CAAC;QACxB,WAAW,EAAE,WAAW,GAAG,CAAC;QAC5B,OAAO,EAAE,OAAO,GAAG,CAAC;QACpB,SAAS,EAAE,SAAS,GAAG,CAAC;KACzB,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,gBAAgB;AAChB,oEAAoE;AAEpE;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAa,EACb,UAAyB;IAEzB,MAAM,MAAM,GAAoB;QAC9B,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,CAAC;QACjB,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,oBAAoB,EAAE,EAAE;KACzB,CAAC;IAEF,iBAAiB;IACjB,MAAM,aAAa,GAAG,sEAAsE,CAAC;IAC7F,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,SAAS,KAAK,CAAC,CAAU;QACvB,mBAAmB;QACnB,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YACD,0BAA0B;YAC1B,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC9D,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;oBACzD,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACzB,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YACnF,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzD,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,wBAAwB;YACxB,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACxD,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/B,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,eAAe;QACf,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YACpB,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,gBAAgB;gBAChB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC;oBAChC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;oBACnB,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC9D,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,MAAM,CAAC,aAAa,EAAE,CAAC;gBACvB,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC;oBAC/B,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM;oBACtC,eAAe,EAAE,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAC;iBACzD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,eAAe;QACf,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAwB,EAAE,UAAyB;IACnF,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,kBAAkB,GAAG,WAAW,CAAC;IAEvC,SAAS,SAAS,CAAC,MAA8B;QAC/C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,WAAW,EAAE,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,oEAAoE;AACpE,iBAAiB;AACjB,oEAAoE;AAEpE;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAa,EACb,UAAyB;IAEzB,MAAM,MAAM,GAAoB;QAC9B,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,CAAC;QAChB,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,CAAC;QAChB,mBAAmB,EAAE,EAAE;QACvB,oBAAoB,EAAE,CAAC;KACxB,CAAC;IAEF,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,SAAS,KAAK,CAAC,CAAU,EAAE,gBAAwB,CAAC;QAClD,WAAW;QACX,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACzD,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,SAAS,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1E,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChE,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,YAAY;QACZ,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAED,uCAAuC;QACvC,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1E,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC1E,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1E,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5D,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;YAExC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;oBACpD,MAAM,YAAY,GAAG,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;wBAC9B,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;wBACpC,YAAY;qBACb,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;oBAC/B,MAAM,YAAY,GAAG,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;wBAC9B,IAAI,EAAE,MAAM;wBACZ,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;wBACpC,YAAY;qBACb,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,aAAa;gBACvD,QAAQ,KAAK,uBAAuB,EAAE,CAAC;gBACzC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED,YAAY;QACZ,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClD,IAAI,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5C,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;QAED,WAAW;QACX,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC1B,IAAI,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5D,MAAM,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC;oBACnC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;oBACxD,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YACnC,OAAO,CAAC,cAAc;QACxB,CAAC;QAED,uBAAuB;QACvB,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,oBAAoB;YACpB,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACtB,OAAO,MAAM,EAAE,CAAC;gBACd,IAAI,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC;oBACnE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjE,MAAM,SAAS,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACpF,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBAChE,MAAM,CAAC,oBAAoB,EAAE,CAAC;oBAChC,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACzB,CAAC;QACH,CAAC;QAED,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,MAAM,CAAC,aAAa,GAAG,gBAAgB,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAyB;IACrD,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,IAAI,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,CAAC,CAAC,YAAY;AACxB,CAAC;AAED,oEAAoE;AACpE,mBAAmB;AACnB,oEAAoE;AAEpE,eAAe;AACf,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS;IACxD,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO;IACpD,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS;IAClD,QAAQ,EAAE,YAAY,EAAE,MAAM;CAC/B,CAAC,CAAC;AAEH,cAAc;AACd,MAAM,OAAO,GAA2C;IACtD,aAAa,EAAE,SAAS;IACxB,eAAe,EAAE,SAAS;IAC1B,cAAc,EAAE,SAAS;IACzB,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,SAAS;IAC1B,OAAO,EAAE,OAAO;IAChB,gBAAgB,EAAE,SAAS;IAC3B,WAAW,EAAE,SAAS;IACtB,sBAAsB,EAAE,SAAS;IACjC,sBAAsB,EAAE,SAAS;IACjC,wBAAwB,EAAE,SAAS;IACnC,wBAAwB,EAAE,SAAS;IACnC,yBAAyB,EAAE,KAAK;IAChC,wBAAwB,EAAE,KAAK;IAC/B,2BAA2B,EAAE,KAAK;IAClC,wBAAwB,EAAE,KAAK;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,IAAa,EACb,UAAyB,EACzB,iBAA8B,IAAI,GAAG,EAAE;IAEvC,MAAM,MAAM,GAAuB;QACjC,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,EAAE;QACd,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;KACpB,CAAC;IAEF,iBAAiB;IACjB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IAE/C,SAAS,qBAAqB,CAAC,CAAU;QACvC,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1C,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,SAAS,KAAK,CAAC,CAAU;QACvB,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAEzB,WAAW;QACX,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,wBAAwB;YACxB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;oBACvB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,UAAU;QACV,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACzF,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;wBACrB,IAAI;wBACJ,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;wBACpC,GAAG,EAAE,QAAQ;qBACd,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;YACH,CAAC;YAED,8BAA8B;YAC9B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACzB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;oBACrB,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,GAAG,EAAE,OAAO;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,SAAS;QACT,IAAI,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAE7B,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;gBAChD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;oBACxB,IAAI,EAAE,aAAa;oBACnB,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;oBACxB,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC3B,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;oBACxB,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,QAAQ,EAAE,QAAQ;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,SAAS;QACT,IAAI,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAElD,SAAS;YACT,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;oBACtB,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,MAAM,EAAE,QAAQ;oBAChB,WAAW,EAAE,6BAA6B;iBAC3C,CAAC,CAAC;YACL,CAAC;YAED,QAAQ;YACR,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;oBACtB,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,MAAM,EAAE,QAAQ;oBAChB,WAAW,EAAE,sBAAsB;iBACpC,CAAC,CAAC;YACL,CAAC;YAED,MAAM;YACN,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;gBAC5D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;oBACtB,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;oBACpC,MAAM,EAAE,QAAQ;oBAChB,WAAW,EAAE,mBAAmB;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACpE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;YAC5C,UAAU;YACV,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzB,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,CAAC,KAAc,EAAQ,EAAE;gBAC5C,IAAI,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnE,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzC,CAAC;gBACD,IAAI,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;oBACtB,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC9B,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAClC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;wBAC1B,YAAY,EAAE,KAAK,CAAC,IAAI;wBACxB,QAAQ,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;wBACxC,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC;wBACtC,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;qBAC/C,CAAC,CAAC;gBACL,CAAC;gBACD,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACvC,CAAC,CAAC;YAEF,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACxC,CAAC;QAED,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,KAAK,IAAI;YACpB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY,EAAE,KAAc;IACrD,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,SAAS,KAAK,CAAC,CAAU;QACvB,IAAI,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACnF,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,CAAC;IACb,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oEAAoE;AACpE,eAAe;AACf,oEAAoE;AAEpE;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAuB;IACjD,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;CACd,CAAC;AAEF;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAsB;IAClD,OAAO,CACL,KAAK,CAAC,UAAU,GAAG,CAAC;QACpB,KAAK,CAAC,cAAc,GAAG,CAAC;QACxB,KAAK,CAAC,UAAU,GAAG,GAAG;QACtB,KAAK,CAAC,aAAa,GAAG,CAAC;QACvB,KAAK,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CACtC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,KAAsB;IAClD,OAAO,CACL,KAAK,CAAC,eAAe,GAAG,CAAC;QACzB,KAAK,CAAC,aAAa,GAAG,CAAC;QACvB,KAAK,CAAC,aAAa,GAAG,CAAC;QACvB,KAAK,CAAC,QAAQ,GAAG,CAAC;QAClB,KAAK,CAAC,aAAa,GAAG,CAAC;QACvB,KAAK,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;QACpC,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,QAA4B;IAC3D,OAAO,CACL,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAChC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QAC9B,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC/B,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QACjC,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAa,EACb,UAAyB,EACzB,UAAkB,EAClB,cAAsB,EACtB,UAA8B,eAAe;IAE7C,UAAU;IACV,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAE7D,YAAY;IACZ,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAExD,QAAQ;IACR,MAAM,eAAe,GAAG,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IACrD,MAAM,eAAe,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IACzD,MAAM,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;IACjD,MAAM,aAAa,GAAG,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC;IACjD,MAAM,gBAAgB,GAAG,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;IAE1D,MAAM,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,aAAa,GAAG,aAAa,GAAG,gBAAgB,CAAC;IAE3G,eAAe;IACf,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAChE,KAAK,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5D,KAAK,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5D,QAAQ,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;KACnE,CAAC;IAEF,SAAS;IACT,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAE1C,yBAAyB;IACzB,MAAM,eAAe,GAIhB;QACH,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,UAAU,gBAAgB,EAAE;QAC1F,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,cAAc,kBAAkB,EAAE;QAChG,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,eAAe,KAAK,CAAC,aAAa,iBAAiB,EAAE;QACnI,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,sBAAsB,KAAK,CAAC,aAAa,SAAS,EAAE;QACnI,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,YAAY,QAAQ,CAAC,WAAW,CAAC,MAAM,eAAe,EAAE;KACrJ,CAAC;IAEF,QAAQ;IACR,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzD,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;gBACvC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK;gBAC/B,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC;gBACvC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,cAAc;QACvB,KAAK;QACL,KAAK;QACL,QAAQ;QACR,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,GAAG,EAAE;QAC7C,OAAO;QACP,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -1,26 +0,0 @@
1
- import ts from 'typescript';
2
- import type { ComplexityResult, ExtendedComplexityResult, FileAnalysisResult, FunctionInfo, DimensionalWeights } from '../types.js';
3
- export { calculateCyclomaticComplexity, analyzeFunctionCyclomatic, analyzeFileCyclomatic, } from './cyclomatic.js';
4
- export { calculateCognitiveComplexity, analyzeFunctionCognitive, analyzeFileCognitive, } from './cognitive.js';
5
- export { analyzeStateComplexity, analyzeAsyncComplexity, analyzeCouplingComplexity, analyzeDimensionalComplexity, DEFAULT_WEIGHTS, } from './dimensional.js';
6
- /**
7
- * 함수의 순환복잡도와 인지복잡도를 모두 계산
8
- */
9
- export declare function analyzeFunction(functionNode: ts.Node, sourceFile: ts.SourceFile, functionInfo: FunctionInfo): ComplexityResult;
10
- /**
11
- * 함수의 확장된 복잡도 분석 (차원 복잡도 포함)
12
- */
13
- export declare function analyzeFunctionExtended(functionNode: ts.Node, sourceFile: ts.SourceFile, functionInfo: FunctionInfo, weights?: DimensionalWeights): ExtendedComplexityResult;
14
- /**
15
- * 소스 파일의 모든 함수에 대한 복잡도 분석
16
- */
17
- export declare function analyzeFile(sourceFile: ts.SourceFile): FileAnalysisResult;
18
- /**
19
- * 복잡도 등급 판정
20
- */
21
- export declare function getComplexityGrade(cyclomatic: number, cognitive: number): 'low' | 'moderate' | 'high' | 'very-high';
22
- /**
23
- * 복잡도 요약 생성 (MCP용)
24
- */
25
- export declare function generateComplexitySummary(result: FileAnalysisResult): string;
26
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EACV,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,EAAE,CAAC,IAAI,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,YAAY,EAAE,YAAY,GACzB,gBAAgB,CAelB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,EAAE,CAAC,IAAI,EACrB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,kBAAoC,GAC5C,wBAAwB,CA6B1B;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,GAAG,kBAAkB,CAsCzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,CAM3C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CA6B5E"}