@defai.digital/ax-cli 3.15.21 → 3.15.24

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 (261) hide show
  1. package/README.md +22 -2
  2. package/dist/agent/agent-executor.d.ts +1 -1
  3. package/dist/agent/agent-executor.js +15 -17
  4. package/dist/agent/agent-executor.js.map +1 -1
  5. package/dist/agent/execution/tool-executor.d.ts +6 -0
  6. package/dist/agent/execution/tool-executor.js +16 -1
  7. package/dist/agent/execution/tool-executor.js.map +1 -1
  8. package/dist/agent/llm-agent.js +91 -22
  9. package/dist/agent/llm-agent.js.map +1 -1
  10. package/dist/agent/parallel-tools.d.ts +65 -0
  11. package/dist/agent/parallel-tools.js +146 -0
  12. package/dist/agent/parallel-tools.js.map +1 -0
  13. package/dist/llm/tools.js +1 -1
  14. package/dist/llm/tools.js.map +1 -1
  15. package/dist/ui/components/chat-interface.js +14 -0
  16. package/dist/ui/components/chat-interface.js.map +1 -1
  17. package/dist/ui/hooks/use-input-handler.js +2 -2
  18. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  19. package/dist/ui/utils/image-handler.js +8 -5
  20. package/dist/ui/utils/image-handler.js.map +1 -1
  21. package/package.json +1 -1
  22. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.d.ts +0 -29
  23. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js +0 -103
  24. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js.map +0 -1
  25. package/dist/analyzers/architecture/architecture-analyzer.d.ts +0 -58
  26. package/dist/analyzers/architecture/architecture-analyzer.js +0 -276
  27. package/dist/analyzers/architecture/architecture-analyzer.js.map +0 -1
  28. package/dist/analyzers/architecture/index.d.ts +0 -12
  29. package/dist/analyzers/architecture/index.js +0 -14
  30. package/dist/analyzers/architecture/index.js.map +0 -1
  31. package/dist/analyzers/architecture/pattern-detectors/base-detector.d.ts +0 -27
  32. package/dist/analyzers/architecture/pattern-detectors/base-detector.js +0 -31
  33. package/dist/analyzers/architecture/pattern-detectors/base-detector.js.map +0 -1
  34. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.d.ts +0 -11
  35. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js +0 -57
  36. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js.map +0 -1
  37. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.d.ts +0 -11
  38. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js +0 -43
  39. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js.map +0 -1
  40. package/dist/analyzers/architecture/pattern-detectors/repository-detector.d.ts +0 -11
  41. package/dist/analyzers/architecture/pattern-detectors/repository-detector.js +0 -49
  42. package/dist/analyzers/architecture/pattern-detectors/repository-detector.js.map +0 -1
  43. package/dist/analyzers/architecture/project-structure-scanner.d.ts +0 -54
  44. package/dist/analyzers/architecture/project-structure-scanner.js +0 -204
  45. package/dist/analyzers/architecture/project-structure-scanner.js.map +0 -1
  46. package/dist/analyzers/ast/index.d.ts +0 -13
  47. package/dist/analyzers/ast/index.js +0 -16
  48. package/dist/analyzers/ast/index.js.map +0 -1
  49. package/dist/analyzers/ast/language-parser.d.ts +0 -59
  50. package/dist/analyzers/ast/language-parser.js +0 -107
  51. package/dist/analyzers/ast/language-parser.js.map +0 -1
  52. package/dist/analyzers/ast/multi-language-parser.d.ts +0 -79
  53. package/dist/analyzers/ast/multi-language-parser.js +0 -157
  54. package/dist/analyzers/ast/multi-language-parser.js.map +0 -1
  55. package/dist/analyzers/ast/node-helpers.d.ts +0 -81
  56. package/dist/analyzers/ast/node-helpers.js +0 -128
  57. package/dist/analyzers/ast/node-helpers.js.map +0 -1
  58. package/dist/analyzers/ast/parser.d.ts +0 -60
  59. package/dist/analyzers/ast/parser.js +0 -305
  60. package/dist/analyzers/ast/parser.js.map +0 -1
  61. package/dist/analyzers/ast/traverser.d.ts +0 -67
  62. package/dist/analyzers/ast/traverser.js +0 -156
  63. package/dist/analyzers/ast/traverser.js.map +0 -1
  64. package/dist/analyzers/ast/types.d.ts +0 -107
  65. package/dist/analyzers/ast/types.js +0 -7
  66. package/dist/analyzers/ast/types.js.map +0 -1
  67. package/dist/analyzers/best-practices/base-rule.d.ts +0 -45
  68. package/dist/analyzers/best-practices/base-rule.js +0 -45
  69. package/dist/analyzers/best-practices/base-rule.js.map +0 -1
  70. package/dist/analyzers/best-practices/best-practice-validator.d.ts +0 -35
  71. package/dist/analyzers/best-practices/best-practice-validator.js +0 -181
  72. package/dist/analyzers/best-practices/best-practice-validator.js.map +0 -1
  73. package/dist/analyzers/best-practices/index.d.ts +0 -10
  74. package/dist/analyzers/best-practices/index.js +0 -11
  75. package/dist/analyzers/best-practices/index.js.map +0 -1
  76. package/dist/analyzers/best-practices/rules/index.d.ts +0 -7
  77. package/dist/analyzers/best-practices/rules/index.js +0 -56
  78. package/dist/analyzers/best-practices/rules/index.js.map +0 -1
  79. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.d.ts +0 -17
  80. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js +0 -41
  81. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js.map +0 -1
  82. package/dist/analyzers/best-practices/rules/typescript/function-complexity.d.ts +0 -27
  83. package/dist/analyzers/best-practices/rules/typescript/function-complexity.js +0 -76
  84. package/dist/analyzers/best-practices/rules/typescript/function-complexity.js.map +0 -1
  85. package/dist/analyzers/best-practices/rules/typescript/index.d.ts +0 -15
  86. package/dist/analyzers/best-practices/rules/typescript/index.js +0 -16
  87. package/dist/analyzers/best-practices/rules/typescript/index.js.map +0 -1
  88. package/dist/analyzers/best-practices/rules/typescript/max-file-length.d.ts +0 -18
  89. package/dist/analyzers/best-practices/rules/typescript/max-file-length.js +0 -25
  90. package/dist/analyzers/best-practices/rules/typescript/max-file-length.js.map +0 -1
  91. package/dist/analyzers/best-practices/rules/typescript/no-any-type.d.ts +0 -17
  92. package/dist/analyzers/best-practices/rules/typescript/no-any-type.js +0 -27
  93. package/dist/analyzers/best-practices/rules/typescript/no-any-type.js.map +0 -1
  94. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.d.ts +0 -18
  95. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js +0 -39
  96. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js.map +0 -1
  97. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.d.ts +0 -17
  98. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +0 -38
  99. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +0 -1
  100. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.d.ts +0 -17
  101. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +0 -38
  102. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +0 -1
  103. package/dist/analyzers/best-practices/rules/typescript/prefer-const.d.ts +0 -17
  104. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +0 -35
  105. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +0 -1
  106. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.d.ts +0 -17
  107. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +0 -36
  108. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +0 -1
  109. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.d.ts +0 -17
  110. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js +0 -27
  111. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js.map +0 -1
  112. package/dist/analyzers/best-practices/types.d.ts +0 -86
  113. package/dist/analyzers/best-practices/types.js +0 -7
  114. package/dist/analyzers/best-practices/types.js.map +0 -1
  115. package/dist/analyzers/cache/analysis-cache.d.ts +0 -41
  116. package/dist/analyzers/cache/analysis-cache.js +0 -84
  117. package/dist/analyzers/cache/analysis-cache.js.map +0 -1
  118. package/dist/analyzers/code-smells/base-smell-detector.d.ts +0 -30
  119. package/dist/analyzers/code-smells/base-smell-detector.js +0 -44
  120. package/dist/analyzers/code-smells/base-smell-detector.js.map +0 -1
  121. package/dist/analyzers/code-smells/code-smell-analyzer.d.ts +0 -30
  122. package/dist/analyzers/code-smells/code-smell-analyzer.js +0 -167
  123. package/dist/analyzers/code-smells/code-smell-analyzer.js.map +0 -1
  124. package/dist/analyzers/code-smells/detectors/data-clumps-detector.d.ts +0 -11
  125. package/dist/analyzers/code-smells/detectors/data-clumps-detector.js +0 -64
  126. package/dist/analyzers/code-smells/detectors/data-clumps-detector.js.map +0 -1
  127. package/dist/analyzers/code-smells/detectors/dead-code-detector.d.ts +0 -11
  128. package/dist/analyzers/code-smells/detectors/dead-code-detector.js +0 -58
  129. package/dist/analyzers/code-smells/detectors/dead-code-detector.js.map +0 -1
  130. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.d.ts +0 -11
  131. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +0 -69
  132. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +0 -1
  133. package/dist/analyzers/code-smells/detectors/feature-envy-detector.d.ts +0 -11
  134. package/dist/analyzers/code-smells/detectors/feature-envy-detector.js +0 -70
  135. package/dist/analyzers/code-smells/detectors/feature-envy-detector.js.map +0 -1
  136. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.d.ts +0 -11
  137. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js +0 -59
  138. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js.map +0 -1
  139. package/dist/analyzers/code-smells/detectors/large-class-detector.d.ts +0 -13
  140. package/dist/analyzers/code-smells/detectors/large-class-detector.js +0 -61
  141. package/dist/analyzers/code-smells/detectors/large-class-detector.js.map +0 -1
  142. package/dist/analyzers/code-smells/detectors/long-method-detector.d.ts +0 -12
  143. package/dist/analyzers/code-smells/detectors/long-method-detector.js +0 -55
  144. package/dist/analyzers/code-smells/detectors/long-method-detector.js.map +0 -1
  145. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.d.ts +0 -12
  146. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js +0 -53
  147. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js.map +0 -1
  148. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.d.ts +0 -12
  149. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js +0 -56
  150. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js.map +0 -1
  151. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.d.ts +0 -13
  152. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js +0 -77
  153. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js.map +0 -1
  154. package/dist/analyzers/code-smells/index.d.ts +0 -16
  155. package/dist/analyzers/code-smells/index.js +0 -19
  156. package/dist/analyzers/code-smells/index.js.map +0 -1
  157. package/dist/analyzers/code-smells/types.d.ts +0 -82
  158. package/dist/analyzers/code-smells/types.js +0 -30
  159. package/dist/analyzers/code-smells/types.js.map +0 -1
  160. package/dist/analyzers/dependency/circular-detector.d.ts +0 -17
  161. package/dist/analyzers/dependency/circular-detector.js +0 -73
  162. package/dist/analyzers/dependency/circular-detector.js.map +0 -1
  163. package/dist/analyzers/dependency/coupling-calculator.d.ts +0 -24
  164. package/dist/analyzers/dependency/coupling-calculator.js +0 -86
  165. package/dist/analyzers/dependency/coupling-calculator.js.map +0 -1
  166. package/dist/analyzers/dependency/dependency-analyzer.d.ts +0 -44
  167. package/dist/analyzers/dependency/dependency-analyzer.js +0 -218
  168. package/dist/analyzers/dependency/dependency-analyzer.js.map +0 -1
  169. package/dist/analyzers/dependency/dependency-graph.d.ts +0 -57
  170. package/dist/analyzers/dependency/dependency-graph.js +0 -198
  171. package/dist/analyzers/dependency/dependency-graph.js.map +0 -1
  172. package/dist/analyzers/dependency/index.d.ts +0 -8
  173. package/dist/analyzers/dependency/index.js +0 -8
  174. package/dist/analyzers/dependency/index.js.map +0 -1
  175. package/dist/analyzers/dependency/types.d.ts +0 -105
  176. package/dist/analyzers/dependency/types.js +0 -5
  177. package/dist/analyzers/dependency/types.js.map +0 -1
  178. package/dist/analyzers/errors.d.ts +0 -51
  179. package/dist/analyzers/errors.js +0 -79
  180. package/dist/analyzers/errors.js.map +0 -1
  181. package/dist/analyzers/git/churn-calculator.d.ts +0 -36
  182. package/dist/analyzers/git/churn-calculator.js +0 -257
  183. package/dist/analyzers/git/churn-calculator.js.map +0 -1
  184. package/dist/analyzers/git/git-analyzer.d.ts +0 -19
  185. package/dist/analyzers/git/git-analyzer.js +0 -79
  186. package/dist/analyzers/git/git-analyzer.js.map +0 -1
  187. package/dist/analyzers/git/hotspot-detector.d.ts +0 -34
  188. package/dist/analyzers/git/hotspot-detector.js +0 -173
  189. package/dist/analyzers/git/hotspot-detector.js.map +0 -1
  190. package/dist/analyzers/git/index.d.ts +0 -7
  191. package/dist/analyzers/git/index.js +0 -7
  192. package/dist/analyzers/git/index.js.map +0 -1
  193. package/dist/analyzers/git/types.d.ts +0 -88
  194. package/dist/analyzers/git/types.js +0 -5
  195. package/dist/analyzers/git/types.js.map +0 -1
  196. package/dist/analyzers/metrics/halstead-calculator.d.ts +0 -30
  197. package/dist/analyzers/metrics/halstead-calculator.js +0 -150
  198. package/dist/analyzers/metrics/halstead-calculator.js.map +0 -1
  199. package/dist/analyzers/metrics/index.d.ts +0 -9
  200. package/dist/analyzers/metrics/index.js +0 -9
  201. package/dist/analyzers/metrics/index.js.map +0 -1
  202. package/dist/analyzers/metrics/maintainability-calculator.d.ts +0 -17
  203. package/dist/analyzers/metrics/maintainability-calculator.js +0 -46
  204. package/dist/analyzers/metrics/maintainability-calculator.js.map +0 -1
  205. package/dist/analyzers/metrics/metrics-analyzer.d.ts +0 -32
  206. package/dist/analyzers/metrics/metrics-analyzer.js +0 -144
  207. package/dist/analyzers/metrics/metrics-analyzer.js.map +0 -1
  208. package/dist/analyzers/metrics/types.d.ts +0 -67
  209. package/dist/analyzers/metrics/types.js +0 -5
  210. package/dist/analyzers/metrics/types.js.map +0 -1
  211. package/dist/analyzers/security/base-detector.d.ts +0 -58
  212. package/dist/analyzers/security/base-detector.js +0 -104
  213. package/dist/analyzers/security/base-detector.js.map +0 -1
  214. package/dist/analyzers/security/detectors/command-injection-detector.d.ts +0 -12
  215. package/dist/analyzers/security/detectors/command-injection-detector.js +0 -84
  216. package/dist/analyzers/security/detectors/command-injection-detector.js.map +0 -1
  217. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.d.ts +0 -16
  218. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js +0 -140
  219. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js.map +0 -1
  220. package/dist/analyzers/security/detectors/insecure-deserialization-detector.d.ts +0 -12
  221. package/dist/analyzers/security/detectors/insecure-deserialization-detector.js +0 -109
  222. package/dist/analyzers/security/detectors/insecure-deserialization-detector.js.map +0 -1
  223. package/dist/analyzers/security/detectors/insecure-random-detector.d.ts +0 -12
  224. package/dist/analyzers/security/detectors/insecure-random-detector.js +0 -61
  225. package/dist/analyzers/security/detectors/insecure-random-detector.js.map +0 -1
  226. package/dist/analyzers/security/detectors/path-traversal-detector.d.ts +0 -12
  227. package/dist/analyzers/security/detectors/path-traversal-detector.js +0 -82
  228. package/dist/analyzers/security/detectors/path-traversal-detector.js.map +0 -1
  229. package/dist/analyzers/security/detectors/sql-injection-detector.d.ts +0 -12
  230. package/dist/analyzers/security/detectors/sql-injection-detector.js +0 -88
  231. package/dist/analyzers/security/detectors/sql-injection-detector.js.map +0 -1
  232. package/dist/analyzers/security/detectors/weak-crypto-detector.d.ts +0 -12
  233. package/dist/analyzers/security/detectors/weak-crypto-detector.js +0 -104
  234. package/dist/analyzers/security/detectors/weak-crypto-detector.js.map +0 -1
  235. package/dist/analyzers/security/detectors/xss-detector.d.ts +0 -12
  236. package/dist/analyzers/security/detectors/xss-detector.js +0 -90
  237. package/dist/analyzers/security/detectors/xss-detector.js.map +0 -1
  238. package/dist/analyzers/security/index.d.ts +0 -16
  239. package/dist/analyzers/security/index.js +0 -18
  240. package/dist/analyzers/security/index.js.map +0 -1
  241. package/dist/analyzers/security/security-analyzer.d.ts +0 -38
  242. package/dist/analyzers/security/security-analyzer.js +0 -215
  243. package/dist/analyzers/security/security-analyzer.js.map +0 -1
  244. package/dist/analyzers/security/types.d.ts +0 -95
  245. package/dist/analyzers/security/types.js +0 -7
  246. package/dist/analyzers/security/types.js.map +0 -1
  247. package/dist/tools/analysis-tools/architecture-tool.d.ts +0 -46
  248. package/dist/tools/analysis-tools/architecture-tool.js +0 -124
  249. package/dist/tools/analysis-tools/architecture-tool.js.map +0 -1
  250. package/dist/tools/analysis-tools/validation-tool.d.ts +0 -51
  251. package/dist/tools/analysis-tools/validation-tool.js +0 -121
  252. package/dist/tools/analysis-tools/validation-tool.js.map +0 -1
  253. package/dist/tools/analysis-tools.d.ts +0 -73
  254. package/dist/tools/analysis-tools.js +0 -422
  255. package/dist/tools/analysis-tools.js.map +0 -1
  256. package/dist/types/analysis.d.ts +0 -177
  257. package/dist/types/analysis.js +0 -8
  258. package/dist/types/analysis.js.map +0 -1
  259. package/dist/utils/analysis-logger.d.ts +0 -50
  260. package/dist/utils/analysis-logger.js +0 -73
  261. package/dist/utils/analysis-logger.js.map +0 -1
@@ -1,305 +0,0 @@
1
- /**
2
- * AST Parser
3
- *
4
- * Provides TypeScript/JavaScript AST parsing using ts-morph
5
- */
6
- import { Project, ScriptTarget, ModuleKind, SyntaxKind } from 'ts-morph';
7
- export class ASTParser {
8
- project;
9
- constructor() {
10
- this.project = new Project({
11
- compilerOptions: {
12
- target: ScriptTarget.Latest,
13
- module: ModuleKind.CommonJS,
14
- allowJs: true,
15
- skipLibCheck: true,
16
- },
17
- skipAddingFilesFromTsConfig: true,
18
- });
19
- }
20
- /**
21
- * Parse a TypeScript/JavaScript file
22
- */
23
- parseFile(filePath) {
24
- // Check if file was already added (by getSourceFile for semantic analysis)
25
- const existingFile = this.project.getSourceFile(filePath);
26
- const sourceFile = existingFile || this.project.addSourceFileAtPath(filePath);
27
- const shouldRemove = !existingFile; // Only remove if we just added it
28
- try {
29
- const functions = this.extractFunctions(sourceFile);
30
- const classes = this.extractClasses(sourceFile);
31
- const imports = this.extractImports(sourceFile);
32
- const exports = this.extractExports(sourceFile);
33
- return Object.freeze({
34
- filePath,
35
- functions: Object.freeze(functions),
36
- classes: Object.freeze(classes),
37
- imports: Object.freeze(imports),
38
- exports: Object.freeze(exports),
39
- totalLines: sourceFile.getEndLineNumber(),
40
- });
41
- }
42
- finally {
43
- // Clean up to prevent memory leaks, but preserve files needed for semantic analysis
44
- if (shouldRemove) {
45
- this.project.removeSourceFile(sourceFile);
46
- }
47
- }
48
- }
49
- /**
50
- * Parse file content directly
51
- */
52
- parseContent(content, filePath = 'temp.ts') {
53
- const sourceFile = this.project.createSourceFile(filePath, content, { overwrite: true });
54
- try {
55
- const functions = this.extractFunctions(sourceFile);
56
- const classes = this.extractClasses(sourceFile);
57
- const imports = this.extractImports(sourceFile);
58
- const exports = this.extractExports(sourceFile);
59
- return Object.freeze({
60
- filePath,
61
- functions: Object.freeze(functions),
62
- classes: Object.freeze(classes),
63
- imports: Object.freeze(imports),
64
- exports: Object.freeze(exports),
65
- totalLines: sourceFile.getEndLineNumber(),
66
- });
67
- }
68
- finally {
69
- this.project.removeSourceFile(sourceFile);
70
- }
71
- }
72
- /**
73
- * Extract all functions from source file
74
- */
75
- extractFunctions(sourceFile) {
76
- const functions = [];
77
- sourceFile.getFunctions().forEach(func => {
78
- const name = func.getName() || '<anonymous>';
79
- const parameters = this.extractParameters(func);
80
- const startLine = func.getStartLineNumber();
81
- const endLine = func.getEndLineNumber();
82
- functions.push(Object.freeze({
83
- name,
84
- parameters: Object.freeze(parameters),
85
- returnType: func.getReturnType().getText(),
86
- startLine,
87
- endLine,
88
- complexity: this.calculateCyclomaticComplexity(func.getBody()?.getText() || ''),
89
- length: endLine - startLine + 1,
90
- isAsync: func.isAsync(),
91
- isExported: func.isExported(),
92
- }));
93
- });
94
- return functions;
95
- }
96
- /**
97
- * Extract all classes from source file
98
- */
99
- extractClasses(sourceFile) {
100
- const classes = [];
101
- sourceFile.getClasses().forEach(cls => {
102
- const name = cls.getName() || '<anonymous>';
103
- const methods = this.extractMethods(cls);
104
- const properties = this.extractProperties(cls);
105
- const startLine = cls.getStartLineNumber();
106
- const endLine = cls.getEndLineNumber();
107
- classes.push(Object.freeze({
108
- name,
109
- methods: Object.freeze(methods),
110
- properties: Object.freeze(properties),
111
- startLine,
112
- endLine,
113
- length: endLine - startLine + 1,
114
- isExported: cls.isExported(),
115
- extendsClass: cls.getExtends()?.getText(),
116
- implementsInterfaces: Object.freeze(cls.getImplements().map(i => i.getText())),
117
- }));
118
- });
119
- return classes;
120
- }
121
- /**
122
- * Extract methods from a class
123
- */
124
- extractMethods(cls) {
125
- const methods = [];
126
- cls.getMethods().forEach((method) => {
127
- const name = method.getName();
128
- const parameters = this.extractParameters(method);
129
- const startLine = method.getStartLineNumber();
130
- const endLine = method.getEndLineNumber();
131
- // Determine visibility
132
- let visibility = 'public';
133
- if (method.hasModifier(SyntaxKind.PrivateKeyword)) {
134
- visibility = 'private';
135
- }
136
- else if (method.hasModifier(SyntaxKind.ProtectedKeyword)) {
137
- visibility = 'protected';
138
- }
139
- methods.push(Object.freeze({
140
- name,
141
- parameters: Object.freeze(parameters),
142
- returnType: method.getReturnType().getText(),
143
- visibility,
144
- isStatic: method.isStatic(),
145
- isAsync: method.isAsync(),
146
- complexity: this.calculateCyclomaticComplexity(method.getBody()?.getText() || ''),
147
- length: endLine - startLine + 1,
148
- startLine,
149
- endLine,
150
- }));
151
- });
152
- return methods;
153
- }
154
- /**
155
- * Extract properties from a class
156
- */
157
- extractProperties(cls) {
158
- const properties = [];
159
- cls.getProperties().forEach((prop) => {
160
- const name = prop.getName();
161
- // Determine visibility
162
- let visibility = 'public';
163
- if (prop.hasModifier(SyntaxKind.PrivateKeyword)) {
164
- visibility = 'private';
165
- }
166
- else if (prop.hasModifier(SyntaxKind.ProtectedKeyword)) {
167
- visibility = 'protected';
168
- }
169
- properties.push(Object.freeze({
170
- name,
171
- type: prop.getType().getText(),
172
- visibility,
173
- isReadonly: prop.isReadonly(),
174
- isStatic: prop.isStatic(),
175
- hasInitializer: prop.hasInitializer(),
176
- }));
177
- });
178
- return properties;
179
- }
180
- /**
181
- * Extract parameters from a function or method
182
- */
183
- extractParameters(func) {
184
- const parameters = [];
185
- func.getParameters().forEach((param) => {
186
- parameters.push(Object.freeze({
187
- name: param.getName(),
188
- type: param.getType().getText(),
189
- isOptional: param.isOptional(),
190
- hasDefault: param.hasInitializer(),
191
- }));
192
- });
193
- return parameters;
194
- }
195
- /**
196
- * Extract imports from source file
197
- */
198
- extractImports(sourceFile) {
199
- const imports = [];
200
- sourceFile.getImportDeclarations().forEach(imp => {
201
- const moduleSpecifier = imp.getModuleSpecifierValue();
202
- const namedImports = imp.getNamedImports().map(n => n.getName());
203
- const defaultImport = imp.getDefaultImport()?.getText();
204
- const namespaceImport = imp.getNamespaceImport()?.getText();
205
- // Determine if external (starts with letter, not './' or '../')
206
- const isExternal = !moduleSpecifier.startsWith('.') && !moduleSpecifier.startsWith('/');
207
- // Check if type-only import
208
- const isTypeOnly = imp.isTypeOnly();
209
- imports.push(Object.freeze({
210
- moduleSpecifier,
211
- namedImports: Object.freeze(namedImports),
212
- defaultImport,
213
- namespaceImport,
214
- isExternal,
215
- isTypeOnly,
216
- }));
217
- });
218
- return imports;
219
- }
220
- /**
221
- * Extract exports from source file
222
- */
223
- extractExports(sourceFile) {
224
- const exports = [];
225
- // Named exports
226
- sourceFile.getExportDeclarations().forEach(exp => {
227
- exp.getNamedExports().forEach(named => {
228
- exports.push(Object.freeze({
229
- name: named.getName(),
230
- isDefault: false,
231
- type: 'variable',
232
- }));
233
- });
234
- });
235
- // Exported functions
236
- sourceFile.getFunctions().forEach(func => {
237
- if (func.isExported()) {
238
- exports.push(Object.freeze({
239
- name: func.getName() || '<anonymous>',
240
- isDefault: func.isDefaultExport(),
241
- type: 'function',
242
- }));
243
- }
244
- });
245
- // Exported classes
246
- sourceFile.getClasses().forEach(cls => {
247
- if (cls.isExported()) {
248
- exports.push(Object.freeze({
249
- name: cls.getName() || '<anonymous>',
250
- isDefault: cls.isDefaultExport(),
251
- type: 'class',
252
- }));
253
- }
254
- });
255
- return exports;
256
- }
257
- /**
258
- * Calculate cyclomatic complexity (simplified)
259
- */
260
- calculateCyclomaticComplexity(code) {
261
- let complexity = 1;
262
- // Count decision points
263
- const patterns = [
264
- /\bif\b/g,
265
- /\belse\s+if\b/g,
266
- /\bfor\b/g,
267
- /\bwhile\b/g,
268
- /\bcase\b/g,
269
- /\bcatch\b/g,
270
- /&&/g,
271
- /\|\|/g,
272
- /\?/g,
273
- ];
274
- for (const pattern of patterns) {
275
- const matches = code.match(pattern);
276
- if (matches) {
277
- complexity += matches.length;
278
- }
279
- }
280
- return complexity;
281
- }
282
- /**
283
- * Get raw source file for advanced operations
284
- * Note: This keeps the file in the project for semantic analysis (findReferences, etc.)
285
- */
286
- getSourceFile(filePath) {
287
- // Check if file is already in project
288
- const existing = this.project.getSourceFile(filePath);
289
- if (existing) {
290
- return existing;
291
- }
292
- // Add new file and keep it in project for semantic operations
293
- return this.project.addSourceFileAtPath(filePath);
294
- }
295
- /**
296
- * Clear project cache
297
- */
298
- clear() {
299
- const sourceFiles = this.project.getSourceFiles();
300
- for (const sourceFile of sourceFiles) {
301
- this.project.removeSourceFile(sourceFile);
302
- }
303
- }
304
- }
305
- //# sourceMappingURL=parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/analyzers/ast/parser.ts"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- /**
2
- * AST Traverser
3
- *
4
- * Utilities for traversing and visiting AST nodes
5
- */
6
- import type { FileASTInfo, FunctionInfo, ClassInfo, MethodInfo, NodeVisitor } from './types.js';
7
- /**
8
- * Visit all functions in a file AST
9
- */
10
- export declare function visitFunctions(ast: FileASTInfo, visitor: NodeVisitor<FunctionInfo>): void;
11
- /**
12
- * Visit all classes in a file AST
13
- */
14
- export declare function visitClasses(ast: FileASTInfo, visitor: NodeVisitor<ClassInfo>): void;
15
- /**
16
- * Visit all methods in all classes
17
- */
18
- export declare function visitMethods(ast: FileASTInfo, visitor: NodeVisitor<MethodInfo>): void;
19
- /**
20
- * Find first function matching predicate
21
- */
22
- export declare function findFunction(ast: FileASTInfo, predicate: (func: FunctionInfo) => boolean): FunctionInfo | undefined;
23
- /**
24
- * Find all functions matching predicate
25
- */
26
- export declare function findFunctions(ast: FileASTInfo, predicate: (func: FunctionInfo) => boolean): FunctionInfo[];
27
- /**
28
- * Find first class matching predicate
29
- */
30
- export declare function findClass(ast: FileASTInfo, predicate: (cls: ClassInfo) => boolean): ClassInfo | undefined;
31
- /**
32
- * Find all classes matching predicate
33
- */
34
- export declare function findClasses(ast: FileASTInfo, predicate: (cls: ClassInfo) => boolean): ClassInfo[];
35
- /**
36
- * Find method by name in a specific class
37
- */
38
- export declare function findMethodInClass(cls: ClassInfo, methodName: string): MethodInfo | undefined;
39
- /**
40
- * Collect all items matching a condition
41
- */
42
- export declare function collect<T>(items: readonly T[], predicate: (item: T) => boolean): T[];
43
- /**
44
- * Map over all functions and classes
45
- */
46
- export declare function mapAllCallables<T>(ast: FileASTInfo, funcMapper: (func: FunctionInfo) => T, methodMapper: (method: MethodInfo, className: string) => T): T[];
47
- /**
48
- * Count total callables (functions + methods)
49
- */
50
- export declare function countCallables(ast: FileASTInfo): number;
51
- /**
52
- * Get all callable names (functions and methods)
53
- */
54
- export declare function getAllCallableNames(ast: FileASTInfo): string[];
55
- /**
56
- * Check if file has any high-complexity functions/methods
57
- */
58
- export declare function hasHighComplexity(ast: FileASTInfo, threshold?: number): boolean;
59
- /**
60
- * Get complexity statistics
61
- */
62
- export declare function getComplexityStats(ast: FileASTInfo): {
63
- min: number;
64
- max: number;
65
- average: number;
66
- total: number;
67
- };
@@ -1,156 +0,0 @@
1
- /**
2
- * AST Traverser
3
- *
4
- * Utilities for traversing and visiting AST nodes
5
- */
6
- /**
7
- * Visit all functions in a file AST
8
- */
9
- export function visitFunctions(ast, visitor) {
10
- for (const func of ast.functions) {
11
- const result = visitor(func);
12
- if (result === false)
13
- break; // Early exit if visitor returns false
14
- }
15
- }
16
- /**
17
- * Visit all classes in a file AST
18
- */
19
- export function visitClasses(ast, visitor) {
20
- for (const cls of ast.classes) {
21
- const result = visitor(cls);
22
- if (result === false)
23
- break;
24
- }
25
- }
26
- /**
27
- * Visit all methods in all classes
28
- */
29
- export function visitMethods(ast, visitor) {
30
- for (const cls of ast.classes) {
31
- for (const method of cls.methods) {
32
- const result = visitor(method);
33
- if (result === false)
34
- return; // Early exit
35
- }
36
- }
37
- }
38
- /**
39
- * Find first function matching predicate
40
- */
41
- export function findFunction(ast, predicate) {
42
- return ast.functions.find(predicate);
43
- }
44
- /**
45
- * Find all functions matching predicate
46
- */
47
- export function findFunctions(ast, predicate) {
48
- return ast.functions.filter(predicate);
49
- }
50
- /**
51
- * Find first class matching predicate
52
- */
53
- export function findClass(ast, predicate) {
54
- return ast.classes.find(predicate);
55
- }
56
- /**
57
- * Find all classes matching predicate
58
- */
59
- export function findClasses(ast, predicate) {
60
- return ast.classes.filter(predicate);
61
- }
62
- /**
63
- * Find method by name in a specific class
64
- */
65
- export function findMethodInClass(cls, methodName) {
66
- return cls.methods.find(m => m.name === methodName);
67
- }
68
- /**
69
- * Collect all items matching a condition
70
- */
71
- export function collect(items, predicate) {
72
- return items.filter(predicate);
73
- }
74
- /**
75
- * Map over all functions and classes
76
- */
77
- export function mapAllCallables(ast, funcMapper, methodMapper) {
78
- const results = [];
79
- // Map functions
80
- for (const func of ast.functions) {
81
- results.push(funcMapper(func));
82
- }
83
- // Map methods
84
- for (const cls of ast.classes) {
85
- for (const method of cls.methods) {
86
- results.push(methodMapper(method, cls.name));
87
- }
88
- }
89
- return results;
90
- }
91
- /**
92
- * Count total callables (functions + methods)
93
- */
94
- export function countCallables(ast) {
95
- const functionCount = ast.functions.length;
96
- const methodCount = ast.classes.reduce((sum, cls) => sum + cls.methods.length, 0);
97
- return functionCount + methodCount;
98
- }
99
- /**
100
- * Get all callable names (functions and methods)
101
- */
102
- export function getAllCallableNames(ast) {
103
- const names = [];
104
- for (const func of ast.functions) {
105
- names.push(func.name);
106
- }
107
- for (const cls of ast.classes) {
108
- for (const method of cls.methods) {
109
- names.push(`${cls.name}.${method.name}`);
110
- }
111
- }
112
- return names;
113
- }
114
- /**
115
- * Check if file has any high-complexity functions/methods
116
- */
117
- export function hasHighComplexity(ast, threshold = 10) {
118
- // Check functions
119
- for (const func of ast.functions) {
120
- if (func.complexity > threshold)
121
- return true;
122
- }
123
- // Check methods
124
- for (const cls of ast.classes) {
125
- for (const method of cls.methods) {
126
- if (method.complexity > threshold)
127
- return true;
128
- }
129
- }
130
- return false;
131
- }
132
- /**
133
- * Get complexity statistics
134
- */
135
- export function getComplexityStats(ast) {
136
- const complexities = [];
137
- // Collect function complexities
138
- for (const func of ast.functions) {
139
- complexities.push(func.complexity);
140
- }
141
- // Collect method complexities
142
- for (const cls of ast.classes) {
143
- for (const method of cls.methods) {
144
- complexities.push(method.complexity);
145
- }
146
- }
147
- if (complexities.length === 0) {
148
- return { min: 0, max: 0, average: 0, total: 0 };
149
- }
150
- const total = complexities.reduce((sum, c) => sum + c, 0);
151
- const min = Math.min(...complexities);
152
- const max = Math.max(...complexities);
153
- const average = total / complexities.length;
154
- return { min, max, average, total };
155
- }
156
- //# sourceMappingURL=traverser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"traverser.js","sourceRoot":"","sources":["../../../src/analyzers/ast/traverser.ts"],"names":[],"mappings":"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"}
@@ -1,107 +0,0 @@
1
- /**
2
- * AST Parser Types
3
- *
4
- * Type definitions for AST-based analysis
5
- */
6
- import type { SourceFile, FunctionDeclaration, ClassDeclaration, MethodDeclaration, ImportDeclaration, ExportDeclaration } from 'ts-morph';
7
- /**
8
- * Function information extracted from AST
9
- */
10
- export interface FunctionInfo {
11
- readonly name: string;
12
- readonly parameters: ReadonlyArray<ParameterInfo>;
13
- readonly returnType?: string;
14
- readonly startLine: number;
15
- readonly endLine: number;
16
- readonly complexity: number;
17
- readonly length: number;
18
- readonly isAsync: boolean;
19
- readonly isExported: boolean;
20
- }
21
- /**
22
- * Parameter information
23
- */
24
- export interface ParameterInfo {
25
- readonly name: string;
26
- readonly type?: string;
27
- readonly isOptional: boolean;
28
- readonly hasDefault: boolean;
29
- }
30
- /**
31
- * Class information extracted from AST
32
- */
33
- export interface ClassInfo {
34
- readonly name: string;
35
- readonly methods: ReadonlyArray<MethodInfo>;
36
- readonly properties: ReadonlyArray<PropertyInfo>;
37
- readonly startLine: number;
38
- readonly endLine: number;
39
- readonly length: number;
40
- readonly isExported: boolean;
41
- readonly extendsClass?: string;
42
- readonly implementsInterfaces: ReadonlyArray<string>;
43
- }
44
- /**
45
- * Method information
46
- */
47
- export interface MethodInfo {
48
- readonly name: string;
49
- readonly parameters: ReadonlyArray<ParameterInfo>;
50
- readonly returnType?: string;
51
- readonly visibility: 'public' | 'private' | 'protected';
52
- readonly isStatic: boolean;
53
- readonly isAsync: boolean;
54
- readonly complexity: number;
55
- readonly length: number;
56
- readonly startLine: number;
57
- readonly endLine: number;
58
- }
59
- /**
60
- * Property information
61
- */
62
- export interface PropertyInfo {
63
- readonly name: string;
64
- readonly type?: string;
65
- readonly visibility: 'public' | 'private' | 'protected';
66
- readonly isReadonly: boolean;
67
- readonly isStatic: boolean;
68
- readonly hasInitializer: boolean;
69
- }
70
- /**
71
- * Import information
72
- */
73
- export interface ImportInfo {
74
- readonly moduleSpecifier: string;
75
- readonly namedImports: ReadonlyArray<string>;
76
- readonly defaultImport?: string;
77
- readonly namespaceImport?: string;
78
- readonly isExternal: boolean;
79
- readonly isTypeOnly: boolean;
80
- }
81
- /**
82
- * Export information
83
- */
84
- export interface ExportInfo {
85
- readonly name: string;
86
- readonly isDefault: boolean;
87
- readonly type: 'function' | 'class' | 'variable' | 'type';
88
- }
89
- /**
90
- * File AST information
91
- */
92
- export interface FileASTInfo {
93
- readonly filePath: string;
94
- readonly functions: ReadonlyArray<FunctionInfo>;
95
- readonly classes: ReadonlyArray<ClassInfo>;
96
- readonly imports: ReadonlyArray<ImportInfo>;
97
- readonly exports: ReadonlyArray<ExportInfo>;
98
- readonly totalLines: number;
99
- }
100
- /**
101
- * AST node visitor callback
102
- */
103
- export type NodeVisitor<T> = (node: T) => void | boolean;
104
- /**
105
- * Re-export ts-morph types for convenience
106
- */
107
- export type { SourceFile, FunctionDeclaration, ClassDeclaration, MethodDeclaration, ImportDeclaration, ExportDeclaration };
@@ -1,7 +0,0 @@
1
- /**
2
- * AST Parser Types
3
- *
4
- * Type definitions for AST-based analysis
5
- */
6
- export {};
7
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analyzers/ast/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}