@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,43 +0,0 @@
1
- /**
2
- * MVC Pattern Detector
3
- *
4
- * Detects Model-View-Controller architectural pattern.
5
- * Looks for models/, views/, and controllers/ directories.
6
- */
7
- import { BasePatternDetector } from './base-detector.js';
8
- export class MVCDetector extends BasePatternDetector {
9
- detect(structure) {
10
- const hasModels = this.scanner.hasDirectory(structure, 'models');
11
- const hasViews = this.scanner.hasDirectory(structure, 'views');
12
- const hasControllers = this.scanner.hasDirectory(structure, 'controllers');
13
- // Need at least 2 out of 3 components to suggest MVC
14
- const matchCount = [hasModels, hasViews, hasControllers].filter(Boolean)
15
- .length;
16
- if (matchCount < 2) {
17
- return null;
18
- }
19
- const locations = [];
20
- let confidence = 0;
21
- if (hasModels) {
22
- const modelDirs = structure.directories.filter((d) => d.relativePath.toLowerCase().includes('models'));
23
- locations.push(...modelDirs.map((d) => d.relativePath));
24
- confidence += 0.33;
25
- }
26
- if (hasViews) {
27
- const viewDirs = structure.directories.filter((d) => d.relativePath.toLowerCase().includes('views'));
28
- locations.push(...viewDirs.map((d) => d.relativePath));
29
- confidence += 0.33;
30
- }
31
- if (hasControllers) {
32
- const controllerDirs = structure.directories.filter((d) => d.relativePath.toLowerCase().includes('controllers'));
33
- locations.push(...controllerDirs.map((d) => d.relativePath));
34
- confidence += 0.34;
35
- }
36
- return this.createPattern('MVC (Model-View-Controller)', 'architectural', confidence, locations, 'Separates application into Models (data), Views (presentation), and Controllers (logic)', {
37
- hasModels,
38
- hasViews,
39
- hasControllers,
40
- });
41
- }
42
- }
43
- //# sourceMappingURL=mvc-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mvc-detector.js","sourceRoot":"","sources":["../../../../src/analyzers/architecture/pattern-detectors/mvc-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,OAAO,WAAY,SAAQ,mBAAmB;IAClD,MAAM,CAAC,SAA2B;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAE3E,qDAAqD;QACrD,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;aACrE,MAAM,CAAC;QAEV,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnD,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAChD,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YACxD,UAAU,IAAI,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC/C,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YACvD,UAAU,IAAI,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACxD,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CACrD,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAC7D,UAAU,IAAI,IAAI,CAAC;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CACvB,6BAA6B,EAC7B,eAAe,EACf,UAAU,EACV,SAAS,EACT,yFAAyF,EACzF;YACE,SAAS;YACT,QAAQ;YACR,cAAc;SACf,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Repository Pattern Detector
3
- *
4
- * Detects Repository pattern for data access abstraction.
5
- * Looks for files/directories with "repository" in the name.
6
- */
7
- import type { DetectedPattern, ProjectStructure } from '../../../types/analysis.js';
8
- import { BasePatternDetector } from './base-detector.js';
9
- export declare class RepositoryDetector extends BasePatternDetector {
10
- detect(structure: ProjectStructure): DetectedPattern | null;
11
- }
@@ -1,49 +0,0 @@
1
- /**
2
- * Repository Pattern Detector
3
- *
4
- * Detects Repository pattern for data access abstraction.
5
- * Looks for files/directories with "repository" in the name.
6
- */
7
- import { BasePatternDetector } from './base-detector.js';
8
- export class RepositoryDetector extends BasePatternDetector {
9
- detect(structure) {
10
- // Look for repository directories
11
- const hasRepositoryDir = this.scanner.hasDirectory(structure, 'repositories') ||
12
- this.scanner.hasDirectory(structure, 'repository');
13
- // Look for files with "repository" in the name
14
- const repositoryFiles = this.scanner.getFilesByPattern(structure, /repository\.(ts|js|tsx|jsx)$/i);
15
- if (!hasRepositoryDir && repositoryFiles.length === 0) {
16
- return null;
17
- }
18
- const locations = [];
19
- let confidence = 0.6; // Base confidence
20
- // Add directory locations
21
- if (hasRepositoryDir) {
22
- const repoDirs = structure.directories.filter((d) => d.relativePath.toLowerCase().includes('repositories') ||
23
- d.relativePath.toLowerCase().includes('repository'));
24
- locations.push(...repoDirs.map((d) => d.relativePath));
25
- confidence += 0.2;
26
- }
27
- // Add file locations
28
- if (repositoryFiles.length > 0) {
29
- locations.push(...repositoryFiles.map((f) => f.relativePath));
30
- // Check for interfaces/abstractions (higher confidence)
31
- const hasInterfaces = repositoryFiles.some((f) => f.relativePath.toLowerCase().includes('interface') ||
32
- f.relativePath.toLowerCase().includes('abstract') ||
33
- f.relativePath.toLowerCase().includes('i-repository'));
34
- if (hasInterfaces) {
35
- confidence += 0.2;
36
- }
37
- else {
38
- confidence += 0.1;
39
- }
40
- }
41
- return this.createPattern('Repository Pattern', 'structural', Math.min(confidence, 1.0), locations, 'Encapsulates data access logic and provides a collection-like interface for domain entities', {
42
- repositoryCount: repositoryFiles.length,
43
- hasRepositoryDirectory: hasRepositoryDir,
44
- hasInterfaces: repositoryFiles.some((f) => f.relativePath.toLowerCase().includes('interface') ||
45
- f.relativePath.toLowerCase().includes('abstract')),
46
- });
47
- }
48
- }
49
- //# sourceMappingURL=repository-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"repository-detector.js","sourceRoot":"","sources":["../../../../src/analyzers/architecture/pattern-detectors/repository-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,OAAO,kBAAmB,SAAQ,mBAAmB;IACzD,MAAM,CAAC,SAA2B;QAChC,kCAAkC;QAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,cAAc,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAE7E,+CAA+C;QAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CACpD,SAAS,EACT,+BAA+B,CAChC,CAAC;QAEF,IAAI,CAAC,gBAAgB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,IAAI,UAAU,GAAG,GAAG,CAAC,CAAC,kBAAkB;QAExC,0BAA0B;QAC1B,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;gBACrD,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CACtD,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YACvD,UAAU,IAAI,GAAG,CAAC;QACpB,CAAC;QAED,qBAAqB;QACrB,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAE9D,wDAAwD;YACxD,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAClD,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACjD,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CACxD,CAAC;YAEF,IAAI,aAAa,EAAE,CAAC;gBAClB,UAAU,IAAI,GAAG,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,UAAU,IAAI,GAAG,CAAC;YACpB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CACvB,oBAAoB,EACpB,YAAY,EACZ,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,EACzB,SAAS,EACT,6FAA6F,EAC7F;YACE,eAAe,EAAE,eAAe,CAAC,MAAM;YACvC,sBAAsB,EAAE,gBAAgB;YACxC,aAAa,EAAE,eAAe,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAClD,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CACpD;SACF,CACF,CAAC;IACJ,CAAC;CACF"}
@@ -1,54 +0,0 @@
1
- /**
2
- * Project Structure Scanner
3
- *
4
- * Scans project directory structure and gathers file/directory information.
5
- * Implements ignore patterns for common non-source directories.
6
- */
7
- import type { FileInfo, ProjectStructure } from '../../types/analysis.js';
8
- export declare class ProjectStructureScanner {
9
- private readonly ignorePatterns;
10
- /**
11
- * Scan project structure
12
- */
13
- scan(projectPath: string): Promise<ProjectStructure>;
14
- /**
15
- * Validate project path exists and is a directory
16
- */
17
- private validatePath;
18
- /**
19
- * Gather file information with concurrency control
20
- */
21
- private gatherFileInfo;
22
- /**
23
- * Get information for a single file
24
- */
25
- private getFileInfo;
26
- /**
27
- * Gather directory information with concurrency control
28
- */
29
- private gatherDirectoryInfo;
30
- /**
31
- * Get information for a single directory
32
- */
33
- private getDirectoryInfo;
34
- /**
35
- * Group files by extension
36
- */
37
- private groupFilesByExtension;
38
- /**
39
- * Check if structure has a directory matching name (case-insensitive)
40
- */
41
- hasDirectory(structure: ProjectStructure, dirName: string): boolean;
42
- /**
43
- * Check if structure has a file matching name (case-insensitive)
44
- */
45
- hasFile(structure: ProjectStructure, fileName: string): boolean;
46
- /**
47
- * Get files matching a regex pattern
48
- */
49
- getFilesByPattern(structure: ProjectStructure, pattern: RegExp): FileInfo[];
50
- /**
51
- * Get files by extension
52
- */
53
- getFilesByExtension(structure: ProjectStructure, extension: string): FileInfo[];
54
- }
@@ -1,204 +0,0 @@
1
- /**
2
- * Project Structure Scanner
3
- *
4
- * Scans project directory structure and gathers file/directory information.
5
- * Implements ignore patterns for common non-source directories.
6
- */
7
- import { promises as fs } from 'fs';
8
- import path from 'path';
9
- import { glob } from 'glob';
10
- import { ProjectStructureError } from '../errors.js';
11
- export class ProjectStructureScanner {
12
- ignorePatterns = [
13
- '**/node_modules/**',
14
- '**/.git/**',
15
- '**/dist/**',
16
- '**/build/**',
17
- '**/.next/**',
18
- '**/coverage/**',
19
- '**/.cache/**',
20
- '**/.vscode/**',
21
- '**/.idea/**',
22
- '**/.DS_Store',
23
- '**/package-lock.json',
24
- '**/yarn.lock',
25
- '**/pnpm-lock.yaml',
26
- ];
27
- /**
28
- * Scan project structure
29
- */
30
- async scan(projectPath) {
31
- // Validate path
32
- await this.validatePath(projectPath);
33
- // Find all files
34
- const filePaths = await glob('**/*', {
35
- cwd: projectPath,
36
- ignore: this.ignorePatterns,
37
- nodir: true,
38
- absolute: false,
39
- dot: false, // Don't include hidden files
40
- });
41
- // Gather file info in parallel (with concurrency limit)
42
- const files = await this.gatherFileInfo(projectPath, filePaths);
43
- // Find all directories
44
- const dirPaths = await glob('**/', {
45
- cwd: projectPath,
46
- ignore: this.ignorePatterns,
47
- absolute: false,
48
- dot: false,
49
- });
50
- const directories = await this.gatherDirectoryInfo(projectPath, dirPaths);
51
- // Group files by extension
52
- const filesByExtension = this.groupFilesByExtension(files);
53
- const totalLines = files.reduce((sum, f) => sum + f.lines, 0);
54
- return Object.freeze({
55
- rootPath: projectPath,
56
- files: Object.freeze(files),
57
- directories: Object.freeze(directories),
58
- filesByExtension,
59
- totalLines,
60
- totalFiles: files.length,
61
- });
62
- }
63
- /**
64
- * Validate project path exists and is a directory
65
- */
66
- async validatePath(projectPath) {
67
- // Check for path traversal attempts
68
- if (projectPath.includes('..')) {
69
- throw new ProjectStructureError('Path traversal detected', {
70
- path: projectPath,
71
- });
72
- }
73
- try {
74
- const stats = await fs.stat(projectPath);
75
- if (!stats.isDirectory()) {
76
- throw new ProjectStructureError('Path is not a directory', {
77
- path: projectPath,
78
- });
79
- }
80
- }
81
- catch (error) {
82
- if (error.code === 'ENOENT') {
83
- throw new ProjectStructureError('Path does not exist', {
84
- path: projectPath,
85
- });
86
- }
87
- throw new ProjectStructureError(`Failed to access path: ${error.message}`, { path: projectPath });
88
- }
89
- }
90
- /**
91
- * Gather file information with concurrency control
92
- */
93
- async gatherFileInfo(rootPath, relativePaths) {
94
- const CONCURRENCY = 10; // Process 10 files at a time
95
- const results = [];
96
- for (let i = 0; i < relativePaths.length; i += CONCURRENCY) {
97
- const batch = relativePaths.slice(i, i + CONCURRENCY);
98
- const batchResults = await Promise.all(batch.map((relativePath) => this.getFileInfo(rootPath, relativePath).catch((error) => {
99
- console.warn(`Failed to read file ${relativePath}:`, error.message);
100
- return null;
101
- })));
102
- results.push(...batchResults.filter((r) => r !== null));
103
- }
104
- return results;
105
- }
106
- /**
107
- * Get information for a single file
108
- */
109
- async getFileInfo(rootPath, relativePath) {
110
- const fullPath = path.join(rootPath, relativePath);
111
- const stats = await fs.stat(fullPath);
112
- // Count lines
113
- let lines = 0;
114
- try {
115
- const content = await fs.readFile(fullPath, 'utf-8');
116
- lines = content.split('\n').length;
117
- }
118
- catch {
119
- // If file can't be read as text, lines remain 0
120
- lines = 0;
121
- }
122
- return Object.freeze({
123
- path: fullPath,
124
- relativePath,
125
- lines,
126
- size: stats.size,
127
- extension: path.extname(relativePath),
128
- });
129
- }
130
- /**
131
- * Gather directory information with concurrency control
132
- */
133
- async gatherDirectoryInfo(rootPath, relativePaths) {
134
- const CONCURRENCY = 10;
135
- const results = [];
136
- for (let i = 0; i < relativePaths.length; i += CONCURRENCY) {
137
- const batch = relativePaths.slice(i, i + CONCURRENCY);
138
- const batchResults = await Promise.all(batch.map((relativePath) => this.getDirectoryInfo(rootPath, relativePath).catch((error) => {
139
- console.warn(`Failed to read directory ${relativePath}:`, error.message);
140
- return null;
141
- })));
142
- results.push(...batchResults.filter((r) => r !== null));
143
- }
144
- return results;
145
- }
146
- /**
147
- * Get information for a single directory
148
- */
149
- async getDirectoryInfo(rootPath, relativePath) {
150
- const fullPath = path.join(rootPath, relativePath);
151
- const entries = await fs.readdir(fullPath, { withFileTypes: true });
152
- const fileCount = entries.filter((e) => e.isFile()).length;
153
- const subdirCount = entries.filter((e) => e.isDirectory()).length;
154
- return Object.freeze({
155
- path: fullPath,
156
- relativePath,
157
- fileCount,
158
- subdirCount,
159
- });
160
- }
161
- /**
162
- * Group files by extension
163
- */
164
- groupFilesByExtension(files) {
165
- const groups = new Map();
166
- for (const file of files) {
167
- const ext = file.extension || '.no-extension';
168
- let bucket = groups.get(ext);
169
- if (!bucket) {
170
- bucket = [];
171
- groups.set(ext, bucket);
172
- }
173
- bucket.push(file);
174
- }
175
- // Freeze all arrays
176
- return new Map(Array.from(groups.entries()).map(([k, v]) => [k, Object.freeze(v)]));
177
- }
178
- /**
179
- * Check if structure has a directory matching name (case-insensitive)
180
- */
181
- hasDirectory(structure, dirName) {
182
- return structure.directories.some((d) => d.relativePath.toLowerCase().includes(dirName.toLowerCase()));
183
- }
184
- /**
185
- * Check if structure has a file matching name (case-insensitive)
186
- */
187
- hasFile(structure, fileName) {
188
- return structure.files.some((f) => f.relativePath.toLowerCase().includes(fileName.toLowerCase()));
189
- }
190
- /**
191
- * Get files matching a regex pattern
192
- */
193
- getFilesByPattern(structure, pattern) {
194
- return structure.files.filter((f) => pattern.test(f.relativePath));
195
- }
196
- /**
197
- * Get files by extension
198
- */
199
- getFilesByExtension(structure, extension) {
200
- const ext = extension.startsWith('.') ? extension : `.${extension}`;
201
- return Array.from(structure.filesByExtension.get(ext) || []);
202
- }
203
- }
204
- //# sourceMappingURL=project-structure-scanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project-structure-scanner.js","sourceRoot":"","sources":["../../../src/analyzers/architecture/project-structure-scanner.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * AST Analysis Module
3
- *
4
- * Provides AST parsing and traversal utilities.
5
- * Supports TypeScript and JavaScript via ts-morph.
6
- */
7
- export { ASTParser } from './parser.js';
8
- export { MultiLanguageParser, getMultiLanguageParser, resetMultiLanguageParser } from './multi-language-parser.js';
9
- export { getLanguageFromPath, EXTENSION_TO_LANGUAGE, BaseLanguageParser } from './language-parser.js';
10
- export type { SupportedLanguage, LanguageParser } from './language-parser.js';
11
- export * from './types.js';
12
- export * from './node-helpers.js';
13
- export * from './traverser.js';
@@ -1,16 +0,0 @@
1
- /**
2
- * AST Analysis Module
3
- *
4
- * Provides AST parsing and traversal utilities.
5
- * Supports TypeScript and JavaScript via ts-morph.
6
- */
7
- // Core parsers
8
- export { ASTParser } from './parser.js';
9
- export { MultiLanguageParser, getMultiLanguageParser, resetMultiLanguageParser } from './multi-language-parser.js';
10
- // Language detection
11
- export { getLanguageFromPath, EXTENSION_TO_LANGUAGE, BaseLanguageParser } from './language-parser.js';
12
- // Types and utilities
13
- export * from './types.js';
14
- export * from './node-helpers.js';
15
- export * from './traverser.js';
16
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/ast/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAe;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEnH,qBAAqB;AACrB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAGtG,sBAAsB;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
@@ -1,59 +0,0 @@
1
- /**
2
- * Language Parser Interface
3
- *
4
- * Defines the common interface for language parsers.
5
- * Currently only TypeScript/JavaScript are fully supported via ts-morph.
6
- * Other languages are detected but return empty AST info.
7
- */
8
- import type { FileASTInfo } from './types.js';
9
- /**
10
- * Supported programming languages
11
- */
12
- export type SupportedLanguage = 'typescript' | 'javascript' | 'python' | 'rust' | 'go' | 'c' | 'cpp' | 'swift' | 'html' | 'css' | 'java' | 'ruby' | 'php' | 'kotlin' | 'dart' | 'csharp' | 'json' | 'yaml' | 'toml' | 'unknown';
13
- /**
14
- * Map file extensions to languages
15
- */
16
- export declare const EXTENSION_TO_LANGUAGE: Record<string, SupportedLanguage>;
17
- /**
18
- * Get language from file path
19
- */
20
- export declare function getLanguageFromPath(filePath: string): SupportedLanguage;
21
- /**
22
- * Interface for language-specific parsers
23
- */
24
- export interface LanguageParser {
25
- /**
26
- * The language this parser handles
27
- */
28
- readonly language: SupportedLanguage;
29
- /**
30
- * Parse a file from disk
31
- */
32
- parseFile(filePath: string): Promise<FileASTInfo>;
33
- /**
34
- * Parse code content directly
35
- */
36
- parseContent(content: string, filePath?: string): Promise<FileASTInfo>;
37
- /**
38
- * Check if this parser supports a given file
39
- */
40
- supports(filePath: string): boolean;
41
- /**
42
- * Clean up resources
43
- */
44
- dispose(): void;
45
- }
46
- /**
47
- * Abstract base class for language parsers
48
- */
49
- export declare abstract class BaseLanguageParser implements LanguageParser {
50
- abstract readonly language: SupportedLanguage;
51
- abstract parseFile(filePath: string): Promise<FileASTInfo>;
52
- abstract parseContent(content: string, filePath?: string): Promise<FileASTInfo>;
53
- supports(filePath: string): boolean;
54
- dispose(): void;
55
- /**
56
- * Create empty AST info (for error cases)
57
- */
58
- protected createEmptyASTInfo(filePath: string): FileASTInfo;
59
- }
@@ -1,107 +0,0 @@
1
- /**
2
- * Language Parser Interface
3
- *
4
- * Defines the common interface for language parsers.
5
- * Currently only TypeScript/JavaScript are fully supported via ts-morph.
6
- * Other languages are detected but return empty AST info.
7
- */
8
- /**
9
- * Map file extensions to languages
10
- */
11
- export const EXTENSION_TO_LANGUAGE = {
12
- // TypeScript
13
- '.ts': 'typescript',
14
- '.tsx': 'typescript',
15
- // JavaScript
16
- '.js': 'javascript',
17
- '.jsx': 'javascript',
18
- '.mjs': 'javascript',
19
- '.cjs': 'javascript',
20
- // Python
21
- '.py': 'python',
22
- '.pyw': 'python',
23
- // Rust
24
- '.rs': 'rust',
25
- // Go
26
- '.go': 'go',
27
- // C
28
- '.c': 'c',
29
- '.h': 'c',
30
- // C++
31
- '.cpp': 'cpp',
32
- '.cc': 'cpp',
33
- '.cxx': 'cpp',
34
- '.hpp': 'cpp',
35
- '.hh': 'cpp',
36
- '.hxx': 'cpp',
37
- '.c++': 'cpp',
38
- '.h++': 'cpp',
39
- // Swift
40
- '.swift': 'swift',
41
- // HTML
42
- '.html': 'html',
43
- '.htm': 'html',
44
- // CSS
45
- '.css': 'css',
46
- '.scss': 'css',
47
- '.sass': 'css',
48
- '.less': 'css',
49
- // Java
50
- '.java': 'java',
51
- // Ruby
52
- '.rb': 'ruby',
53
- '.rake': 'ruby',
54
- '.gemspec': 'ruby',
55
- // PHP
56
- '.php': 'php',
57
- '.phtml': 'php',
58
- '.php3': 'php',
59
- '.php4': 'php',
60
- '.php5': 'php',
61
- '.phps': 'php',
62
- // Kotlin
63
- '.kt': 'kotlin',
64
- '.kts': 'kotlin',
65
- // Dart
66
- '.dart': 'dart',
67
- // C#
68
- '.cs': 'csharp',
69
- // Config files
70
- '.json': 'json',
71
- '.jsonc': 'json',
72
- '.yaml': 'yaml',
73
- '.yml': 'yaml',
74
- '.toml': 'toml',
75
- };
76
- /**
77
- * Get language from file path
78
- */
79
- export function getLanguageFromPath(filePath) {
80
- const ext = filePath.slice(filePath.lastIndexOf('.')).toLowerCase();
81
- return EXTENSION_TO_LANGUAGE[ext] || 'unknown';
82
- }
83
- /**
84
- * Abstract base class for language parsers
85
- */
86
- export class BaseLanguageParser {
87
- supports(filePath) {
88
- return getLanguageFromPath(filePath) === this.language;
89
- }
90
- dispose() {
91
- // Override in subclasses if cleanup is needed
92
- }
93
- /**
94
- * Create empty AST info (for error cases)
95
- */
96
- createEmptyASTInfo(filePath) {
97
- return Object.freeze({
98
- filePath,
99
- functions: Object.freeze([]),
100
- classes: Object.freeze([]),
101
- imports: Object.freeze([]),
102
- exports: Object.freeze([]),
103
- totalLines: 0,
104
- });
105
- }
106
- }
107
- //# sourceMappingURL=language-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"language-parser.js","sourceRoot":"","sources":["../../../src/analyzers/ast/language-parser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgCH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAsC;IACtE,aAAa;IACb,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,aAAa;IACb,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,SAAS;IACT,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,OAAO;IACP,KAAK,EAAE,MAAM;IACb,KAAK;IACL,KAAK,EAAE,IAAI;IACX,IAAI;IACJ,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,MAAM;IACN,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,MAAM,EAAE,KAAK;IACb,QAAQ;IACR,QAAQ,EAAE,OAAO;IACjB,OAAO;IACP,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,MAAM;IACN,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,OAAO;IACP,OAAO,EAAE,MAAM;IACf,OAAO;IACP,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,MAAM;IAClB,MAAM;IACN,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,SAAS;IACT,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,OAAO;IACP,OAAO,EAAE,MAAM;IACf,KAAK;IACL,KAAK,EAAE,QAAQ;IACf,eAAe;IACf,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,MAAM;IAChB,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;AACjD,CAAC;AAgCD;;GAEG;AACH,MAAM,OAAgB,kBAAkB;IAMtC,QAAQ,CAAC,QAAgB;QACvB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC;IACzD,CAAC;IAED,OAAO;QACL,8CAA8C;IAChD,CAAC;IAED;;OAEG;IACO,kBAAkB,CAAC,QAAgB;QAC3C,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,QAAQ;YACR,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;IACL,CAAC;CACF"}