@mycodemap/mycodemap 0.1.0 → 0.2.0

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 (283) hide show
  1. package/CHANGELOG.md +164 -6
  2. package/README.md +407 -141
  3. package/dist/cli/commands/ci.d.ts +7 -1
  4. package/dist/cli/commands/ci.d.ts.map +1 -1
  5. package/dist/cli/commands/ci.js +38 -0
  6. package/dist/cli/commands/ci.js.map +1 -1
  7. package/dist/cli/commands/cycles.d.ts.map +1 -1
  8. package/dist/cli/commands/cycles.js +2 -0
  9. package/dist/cli/commands/cycles.js.map +1 -1
  10. package/dist/cli/commands/export.d.ts +6 -0
  11. package/dist/cli/commands/export.d.ts.map +1 -0
  12. package/dist/cli/commands/export.js +108 -0
  13. package/dist/cli/commands/export.js.map +1 -0
  14. package/dist/cli/commands/generate.d.ts.map +1 -1
  15. package/dist/cli/commands/generate.js +96 -0
  16. package/dist/cli/commands/generate.js.map +1 -1
  17. package/dist/cli/commands/init.d.ts.map +1 -1
  18. package/dist/cli/commands/init.js +3 -1
  19. package/dist/cli/commands/init.js.map +1 -1
  20. package/dist/cli/commands/logs.d.ts +5 -0
  21. package/dist/cli/commands/logs.d.ts.map +1 -0
  22. package/dist/cli/commands/logs.js +189 -0
  23. package/dist/cli/commands/logs.js.map +1 -0
  24. package/dist/cli/commands/report.d.ts +12 -0
  25. package/dist/cli/commands/report.d.ts.map +1 -0
  26. package/dist/cli/commands/report.js +158 -0
  27. package/dist/cli/commands/report.js.map +1 -0
  28. package/dist/cli/commands/server.d.ts +9 -0
  29. package/dist/cli/commands/server.d.ts.map +1 -0
  30. package/dist/cli/commands/server.js +68 -0
  31. package/dist/cli/commands/server.js.map +1 -0
  32. package/dist/cli/commands/watch-foreground.d.ts.map +1 -1
  33. package/dist/cli/commands/watch-foreground.js +2 -0
  34. package/dist/cli/commands/watch-foreground.js.map +1 -1
  35. package/dist/cli/commands/watch.d.ts.map +1 -1
  36. package/dist/cli/commands/watch.js +2 -0
  37. package/dist/cli/commands/watch.js.map +1 -1
  38. package/dist/cli/first-run-guide.d.ts +23 -0
  39. package/dist/cli/first-run-guide.d.ts.map +1 -0
  40. package/dist/cli/first-run-guide.js +83 -0
  41. package/dist/cli/first-run-guide.js.map +1 -0
  42. package/dist/cli/index.js +85 -1
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/cli/platform-check.d.ts +21 -0
  45. package/dist/cli/platform-check.d.ts.map +1 -0
  46. package/dist/cli/platform-check.js +94 -0
  47. package/dist/cli/platform-check.js.map +1 -0
  48. package/dist/cli/tree-sitter-check.d.ts +35 -0
  49. package/dist/cli/tree-sitter-check.d.ts.map +1 -0
  50. package/dist/cli/tree-sitter-check.js +133 -0
  51. package/dist/cli/tree-sitter-check.js.map +1 -0
  52. package/dist/cli/utils/sanitize.d.ts +54 -0
  53. package/dist/cli/utils/sanitize.d.ts.map +1 -0
  54. package/dist/cli/utils/sanitize.js +131 -0
  55. package/dist/cli/utils/sanitize.js.map +1 -0
  56. package/dist/cli-new/commands/export.d.ts +15 -0
  57. package/dist/cli-new/commands/export.d.ts.map +1 -0
  58. package/dist/cli-new/commands/export.js +107 -0
  59. package/dist/cli-new/commands/export.js.map +1 -0
  60. package/dist/cli-new/commands/query.d.ts +14 -0
  61. package/dist/cli-new/commands/query.d.ts.map +1 -0
  62. package/dist/cli-new/commands/query.js +120 -0
  63. package/dist/cli-new/commands/query.js.map +1 -0
  64. package/dist/cli-new/commands/server.d.ts +13 -0
  65. package/dist/cli-new/commands/server.d.ts.map +1 -0
  66. package/dist/cli-new/commands/server.js +94 -0
  67. package/dist/cli-new/commands/server.js.map +1 -0
  68. package/dist/cli-new/index.d.ts +11 -0
  69. package/dist/cli-new/index.d.ts.map +1 -0
  70. package/dist/cli-new/index.js +63 -0
  71. package/dist/cli-new/index.js.map +1 -0
  72. package/dist/cli-new/types/index.d.ts +88 -0
  73. package/dist/cli-new/types/index.d.ts.map +1 -0
  74. package/dist/cli-new/types/index.js +7 -0
  75. package/dist/cli-new/types/index.js.map +1 -0
  76. package/dist/domain/entities/CodeGraph.d.ts +134 -0
  77. package/dist/domain/entities/CodeGraph.d.ts.map +1 -0
  78. package/dist/domain/entities/CodeGraph.js +316 -0
  79. package/dist/domain/entities/CodeGraph.js.map +1 -0
  80. package/dist/domain/entities/Dependency.d.ts +78 -0
  81. package/dist/domain/entities/Dependency.d.ts.map +1 -0
  82. package/dist/domain/entities/Dependency.js +132 -0
  83. package/dist/domain/entities/Dependency.js.map +1 -0
  84. package/dist/domain/entities/Module.d.ts +75 -0
  85. package/dist/domain/entities/Module.d.ts.map +1 -0
  86. package/dist/domain/entities/Module.js +151 -0
  87. package/dist/domain/entities/Module.js.map +1 -0
  88. package/dist/domain/entities/Project.d.ts +50 -0
  89. package/dist/domain/entities/Project.d.ts.map +1 -0
  90. package/dist/domain/entities/Project.js +99 -0
  91. package/dist/domain/entities/Project.js.map +1 -0
  92. package/dist/domain/entities/Symbol.d.ts +75 -0
  93. package/dist/domain/entities/Symbol.d.ts.map +1 -0
  94. package/dist/domain/entities/Symbol.js +130 -0
  95. package/dist/domain/entities/Symbol.js.map +1 -0
  96. package/dist/domain/events/DomainEvent.d.ts +76 -0
  97. package/dist/domain/events/DomainEvent.d.ts.map +1 -0
  98. package/dist/domain/events/DomainEvent.js +153 -0
  99. package/dist/domain/events/DomainEvent.js.map +1 -0
  100. package/dist/domain/index.d.ts +10 -0
  101. package/dist/domain/index.d.ts.map +1 -0
  102. package/dist/domain/index.js +18 -0
  103. package/dist/domain/index.js.map +1 -0
  104. package/dist/domain/repositories/CodeGraphRepository.d.ts +58 -0
  105. package/dist/domain/repositories/CodeGraphRepository.d.ts.map +1 -0
  106. package/dist/domain/repositories/CodeGraphRepository.js +37 -0
  107. package/dist/domain/repositories/CodeGraphRepository.js.map +1 -0
  108. package/dist/domain/services/CodeGraphBuilder.d.ts +50 -0
  109. package/dist/domain/services/CodeGraphBuilder.d.ts.map +1 -0
  110. package/dist/domain/services/CodeGraphBuilder.js +121 -0
  111. package/dist/domain/services/CodeGraphBuilder.js.map +1 -0
  112. package/dist/infrastructure/parser/implementations/GoParser.d.ts +25 -0
  113. package/dist/infrastructure/parser/implementations/GoParser.d.ts.map +1 -0
  114. package/dist/infrastructure/parser/implementations/GoParser.js +158 -0
  115. package/dist/infrastructure/parser/implementations/GoParser.js.map +1 -0
  116. package/dist/infrastructure/parser/implementations/PythonParser.d.ts +30 -0
  117. package/dist/infrastructure/parser/implementations/PythonParser.d.ts.map +1 -0
  118. package/dist/infrastructure/parser/implementations/PythonParser.js +201 -0
  119. package/dist/infrastructure/parser/implementations/PythonParser.js.map +1 -0
  120. package/dist/infrastructure/parser/implementations/TypeScriptParser.d.ts +63 -0
  121. package/dist/infrastructure/parser/implementations/TypeScriptParser.d.ts.map +1 -0
  122. package/dist/infrastructure/parser/implementations/TypeScriptParser.js +420 -0
  123. package/dist/infrastructure/parser/implementations/TypeScriptParser.js.map +1 -0
  124. package/dist/infrastructure/parser/index.d.ts +13 -0
  125. package/dist/infrastructure/parser/index.d.ts.map +1 -0
  126. package/dist/infrastructure/parser/index.js +32 -0
  127. package/dist/infrastructure/parser/index.js.map +1 -0
  128. package/dist/infrastructure/parser/interfaces/ParserBase.d.ts +124 -0
  129. package/dist/infrastructure/parser/interfaces/ParserBase.d.ts.map +1 -0
  130. package/dist/infrastructure/parser/interfaces/ParserBase.js +200 -0
  131. package/dist/infrastructure/parser/interfaces/ParserBase.js.map +1 -0
  132. package/dist/infrastructure/parser/registry/ParserRegistry.d.ts +68 -0
  133. package/dist/infrastructure/parser/registry/ParserRegistry.d.ts.map +1 -0
  134. package/dist/infrastructure/parser/registry/ParserRegistry.js +116 -0
  135. package/dist/infrastructure/parser/registry/ParserRegistry.js.map +1 -0
  136. package/dist/infrastructure/repositories/CodeGraphRepositoryImpl.d.ts +44 -0
  137. package/dist/infrastructure/repositories/CodeGraphRepositoryImpl.d.ts.map +1 -0
  138. package/dist/infrastructure/repositories/CodeGraphRepositoryImpl.js +129 -0
  139. package/dist/infrastructure/repositories/CodeGraphRepositoryImpl.js.map +1 -0
  140. package/dist/infrastructure/repositories/index.d.ts +3 -0
  141. package/dist/infrastructure/repositories/index.d.ts.map +1 -0
  142. package/dist/infrastructure/repositories/index.js +7 -0
  143. package/dist/infrastructure/repositories/index.js.map +1 -0
  144. package/dist/infrastructure/storage/StorageFactory.d.ts +53 -0
  145. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -0
  146. package/dist/infrastructure/storage/StorageFactory.js +150 -0
  147. package/dist/infrastructure/storage/StorageFactory.js.map +1 -0
  148. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts +52 -0
  149. package/dist/infrastructure/storage/adapters/FileSystemStorage.d.ts.map +1 -0
  150. package/dist/infrastructure/storage/adapters/FileSystemStorage.js +315 -0
  151. package/dist/infrastructure/storage/adapters/FileSystemStorage.js.map +1 -0
  152. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts +52 -0
  153. package/dist/infrastructure/storage/adapters/KuzuDBStorage.d.ts.map +1 -0
  154. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js +235 -0
  155. package/dist/infrastructure/storage/adapters/KuzuDBStorage.js.map +1 -0
  156. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts +37 -0
  157. package/dist/infrastructure/storage/adapters/MemoryStorage.d.ts.map +1 -0
  158. package/dist/infrastructure/storage/adapters/MemoryStorage.js +229 -0
  159. package/dist/infrastructure/storage/adapters/MemoryStorage.js.map +1 -0
  160. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts +49 -0
  161. package/dist/infrastructure/storage/adapters/Neo4jStorage.d.ts.map +1 -0
  162. package/dist/infrastructure/storage/adapters/Neo4jStorage.js +222 -0
  163. package/dist/infrastructure/storage/adapters/Neo4jStorage.js.map +1 -0
  164. package/dist/infrastructure/storage/index.d.ts +6 -0
  165. package/dist/infrastructure/storage/index.d.ts.map +1 -0
  166. package/dist/infrastructure/storage/index.js +13 -0
  167. package/dist/infrastructure/storage/index.js.map +1 -0
  168. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts +76 -0
  169. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts.map +1 -0
  170. package/dist/infrastructure/storage/interfaces/StorageBase.js +116 -0
  171. package/dist/infrastructure/storage/interfaces/StorageBase.js.map +1 -0
  172. package/dist/interface/config/index.d.ts +102 -0
  173. package/dist/interface/config/index.d.ts.map +1 -0
  174. package/dist/interface/config/index.js +7 -0
  175. package/dist/interface/config/index.js.map +1 -0
  176. package/dist/interface/types/index.d.ts +425 -0
  177. package/dist/interface/types/index.d.ts.map +1 -0
  178. package/dist/interface/types/index.js +8 -0
  179. package/dist/interface/types/index.js.map +1 -0
  180. package/dist/interface/types/parser.d.ts +103 -0
  181. package/dist/interface/types/parser.d.ts.map +1 -0
  182. package/dist/interface/types/parser.js +7 -0
  183. package/dist/interface/types/parser.js.map +1 -0
  184. package/dist/interface/types/storage.d.ts +98 -0
  185. package/dist/interface/types/storage.d.ts.map +1 -0
  186. package/dist/interface/types/storage.js +7 -0
  187. package/dist/interface/types/storage.js.map +1 -0
  188. package/dist/orchestrator/test-linker.js +1 -1
  189. package/dist/orchestrator/test-linker.js.map +1 -1
  190. package/dist/server/CodeMapServer.d.ts +51 -0
  191. package/dist/server/CodeMapServer.d.ts.map +1 -0
  192. package/dist/server/CodeMapServer.js +146 -0
  193. package/dist/server/CodeMapServer.js.map +1 -0
  194. package/dist/server/handlers/AnalysisHandler.d.ts +82 -0
  195. package/dist/server/handlers/AnalysisHandler.d.ts.map +1 -0
  196. package/dist/server/handlers/AnalysisHandler.js +196 -0
  197. package/dist/server/handlers/AnalysisHandler.js.map +1 -0
  198. package/dist/server/handlers/QueryHandler.d.ts +57 -0
  199. package/dist/server/handlers/QueryHandler.d.ts.map +1 -0
  200. package/dist/server/handlers/QueryHandler.js +260 -0
  201. package/dist/server/handlers/QueryHandler.js.map +1 -0
  202. package/dist/server/index.d.ts +7 -0
  203. package/dist/server/index.d.ts.map +1 -0
  204. package/dist/server/index.js +13 -0
  205. package/dist/server/index.js.map +1 -0
  206. package/dist/server/routes/api.d.ts +8 -0
  207. package/dist/server/routes/api.d.ts.map +1 -0
  208. package/dist/server/routes/api.js +372 -0
  209. package/dist/server/routes/api.js.map +1 -0
  210. package/dist/server/types/index.d.ts +171 -0
  211. package/dist/server/types/index.d.ts.map +1 -0
  212. package/dist/server/types/index.js +7 -0
  213. package/dist/server/types/index.js.map +1 -0
  214. package/dist/types/index.d.ts +6 -372
  215. package/dist/types/index.d.ts.map +1 -1
  216. package/dist/types/index.js +9 -3
  217. package/dist/types/index.js.map +1 -1
  218. package/docs/AI_ASSISTANT_SETUP.md +811 -0
  219. package/docs/PUBLISHING.md +162 -0
  220. package/docs/README.md +37 -0
  221. package/docs/SETUP_GUIDE.md +493 -0
  222. package/docs/ai-guide/COMMANDS.md +369 -0
  223. package/docs/ai-guide/INTEGRATION.md +513 -0
  224. package/docs/ai-guide/OUTPUT.md +465 -0
  225. package/docs/ai-guide/PATTERNS.md +409 -0
  226. package/docs/ai-guide/PROMPTS.md +414 -0
  227. package/docs/ai-guide/QUICKSTART.md +114 -0
  228. package/docs/ai-guide/README.md +66 -0
  229. package/docs/archive/AI_INTEGRATION_GUIDE_ARCHIVED.md +391 -0
  230. package/docs/archive/ARCHIVE.md +39 -0
  231. package/docs/archive/MYCLAUDE_GUIDE.md +305 -0
  232. package/docs/archive/PUBLISH_NPM_DESIGN_V1.md +1699 -0
  233. package/docs/archive/PUBLISH_NPM_DESIGN_V2.md +396 -0
  234. package/docs/archive/README.md +29 -0
  235. package/docs/archive/TASK_DESIGN_COVERAGE_REPORT.md +320 -0
  236. package/docs/archive/TEST_SUMMARY.md +140 -0
  237. package/docs/archive/comprehensive_test_report.md +337 -0
  238. package/docs/archive/design-docs/CI_GATEWAY_DESIGN.md +790 -0
  239. package/docs/archive/design-docs/PUBLISH_NPM_DESIGN_FINAL.md +491 -0
  240. package/docs/archive/design-docs/REFACTOR_ARCHITECTURE_OVERVIEW.md +558 -0
  241. package/docs/archive/design-docs/REFACTOR_CONFIDENCE_DESIGN.md +250 -0
  242. package/docs/archive/design-docs/REFACTOR_GIT_ANALYZER_DESIGN.md +791 -0
  243. package/docs/archive/design-docs/REFACTOR_ORCHESTRATOR_DESIGN.md +1071 -0
  244. package/docs/archive/design-docs/REFACTOR_RESULT_FUSION_DESIGN.md +321 -0
  245. package/docs/archive/design-docs/REFACTOR_TEST_LINKER_DESIGN.md +317 -0
  246. package/docs/archive/myclaude.md +1084 -0
  247. package/docs/archive/plans/2026-03-14-go-language-support-design.md +92 -0
  248. package/docs/archive/product-specs/REFACTOR_REQUIREMENTS.md +976 -0
  249. package/docs/archive/scenario-2-deps-analysis.md +353 -0
  250. package/docs/archive/test-report-symbol-search.md +384 -0
  251. package/docs/archive/test-scenario-4-complexity-analysis.md +460 -0
  252. package/docs/archive/test_report_scenario5.md +615 -0
  253. package/docs/archive/test_scenario_3_impact_analysis_report.md +520 -0
  254. package/docs/design-docs/README.md +26 -0
  255. package/docs/exec-plans/MVP3-IMPLEMENTATION-ROADMAP.md +524 -0
  256. package/docs/exec-plans/README.md +29 -0
  257. package/docs/exec-plans/active/.gitkeep +0 -0
  258. package/docs/exec-plans/completed/.gitkeep +0 -0
  259. package/docs/exec-plans/completed/2026-03-03-deps-path-extension-fix.md +186 -0
  260. package/docs/exec-plans/completed/2026-03-03-post-task-plan.md +135 -0
  261. package/docs/exec-plans/completed/harness-engineering-rollout.md +184 -0
  262. package/docs/exec-plans/tech-debt/.gitkeep +0 -0
  263. package/docs/exec-plans/tech-debt/2026-03-15-lint-guardrail-gap.md +30 -0
  264. package/docs/generated/README.md +19 -0
  265. package/docs/product-specs/MVP3-ARCHITECTURE-COMPARISON.md +504 -0
  266. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-PRD.md +322 -0
  267. package/docs/product-specs/MVP3-ARCHITECTURE-REDESIGN-TECH-PRD.md +1374 -0
  268. package/docs/product-specs/README.md +22 -0
  269. package/docs/references/README.md +15 -0
  270. package/docs/references/tmp.md +527 -0
  271. package/docs/rules/README.md +16 -0
  272. package/docs/rules/architecture-guardrails.md +349 -0
  273. package/docs/rules/code-quality-redlines.md +321 -0
  274. package/docs/rules/deployment.md +23 -0
  275. package/docs/rules/engineering-with-codex-openai.md +202 -0
  276. package/docs/rules/testing.md +73 -0
  277. package/docs/rules/validation.md +39 -0
  278. package/examples/README.md +61 -0
  279. package/examples/claude/codemap-skill.md +94 -0
  280. package/examples/codex/codemap-agent.md +66 -0
  281. package/examples/copilot/copilot-instructions.md +24 -0
  282. package/examples/kimi/codemap-skill.md +92 -0
  283. package/package.json +22 -7
@@ -0,0 +1,121 @@
1
+ // [META] since:2026-03 | owner:architecture-team | stable:true
2
+ // [WHY] Domain service: CodeGraphBuilder - builds CodeGraph from analysis results
3
+ // ============================================
4
+ // 领域服务:代码图构建器 - 从分析结果构建代码图
5
+ // ============================================
6
+ import { randomUUID } from 'crypto';
7
+ import { Project } from '../entities/Project.js';
8
+ import { Module } from '../entities/Module.js';
9
+ import { Symbol as SymbolEntity } from '../entities/Symbol.js';
10
+ import { Dependency } from '../entities/Dependency.js';
11
+ import { CodeGraph } from '../entities/CodeGraph.js';
12
+ /**
13
+ * 代码图构建服务
14
+ *
15
+ * 职责:
16
+ * - 从分析结果构建领域模型
17
+ * - 生成唯一标识符
18
+ * - 建立实体间关系
19
+ * - 确保数据一致性
20
+ */
21
+ export class CodeGraphBuilder {
22
+ moduleIdMap = new Map(); // path -> id
23
+ options;
24
+ constructor(options) {
25
+ this.options = options;
26
+ }
27
+ /**
28
+ * 构建代码图
29
+ * @param projectName - 项目名称
30
+ * @param projectRoot - 项目根路径
31
+ * @param moduleResults - 模块分析结果列表
32
+ */
33
+ build(projectName, projectRoot, moduleResults) {
34
+ // 创建项目
35
+ const project = new Project(this.generateId('proj'), projectName, projectRoot);
36
+ // 创建代码图
37
+ const codeGraph = new CodeGraph(project);
38
+ // 第一遍:创建模块并建立路径到 ID 的映射
39
+ for (const result of moduleResults) {
40
+ const moduleId = this.generateId('mod');
41
+ this.moduleIdMap.set(result.info.path, moduleId);
42
+ const module = new Module(moduleId, project.id, result.info.path, this.detectLanguage(result.info.path), {
43
+ lines: result.info.stats.lines,
44
+ codeLines: result.info.stats.codeLines,
45
+ commentLines: result.info.stats.commentLines,
46
+ blankLines: result.info.stats.blankLines,
47
+ });
48
+ codeGraph.addModule(module);
49
+ }
50
+ // 第二遍:创建符号
51
+ for (const result of moduleResults) {
52
+ const moduleId = this.moduleIdMap.get(result.info.path);
53
+ if (!moduleId)
54
+ continue;
55
+ for (const symbolInfo of result.info.symbols) {
56
+ const symbol = new SymbolEntity(this.generateId('sym'), moduleId, symbolInfo.name, symbolInfo.kind, symbolInfo.location, symbolInfo.visibility);
57
+ codeGraph.addSymbol(symbol);
58
+ }
59
+ }
60
+ // 第三遍:创建依赖关系
61
+ for (const result of moduleResults) {
62
+ const sourceId = this.moduleIdMap.get(result.info.path);
63
+ if (!sourceId)
64
+ continue;
65
+ for (const dep of result.dependencies) {
66
+ const targetId = this.moduleIdMap.get(dep.targetPath);
67
+ if (!targetId)
68
+ continue; // 外部依赖,跳过
69
+ const dependency = new Dependency(this.generateId('dep'), sourceId, targetId, dep.type);
70
+ try {
71
+ codeGraph.addDependency(dependency);
72
+ }
73
+ catch {
74
+ // 依赖已存在,忽略
75
+ }
76
+ }
77
+ }
78
+ return codeGraph;
79
+ }
80
+ /**
81
+ * 从 CodeMap JSON 重建代码图
82
+ */
83
+ rebuildFromJSON(data) {
84
+ return CodeGraph.fromInterface(data);
85
+ }
86
+ /**
87
+ * 生成唯一 ID
88
+ */
89
+ generateId(prefix) {
90
+ return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
91
+ }
92
+ /**
93
+ * 根据文件路径检测语言
94
+ */
95
+ detectLanguage(filePath) {
96
+ const ext = filePath.split('.').pop()?.toLowerCase() ?? '';
97
+ const languageMap = {
98
+ 'ts': 'typescript',
99
+ 'tsx': 'typescript',
100
+ 'js': 'javascript',
101
+ 'jsx': 'javascript',
102
+ 'py': 'python',
103
+ 'go': 'go',
104
+ 'java': 'java',
105
+ 'rs': 'rust',
106
+ 'cpp': 'cpp',
107
+ 'cc': 'cpp',
108
+ 'c': 'c',
109
+ 'h': 'c',
110
+ 'hpp': 'cpp',
111
+ };
112
+ return languageMap[ext] ?? 'unknown';
113
+ }
114
+ /**
115
+ * 创建构建器的工厂方法
116
+ */
117
+ static create(options) {
118
+ return new CodeGraphBuilder(options);
119
+ }
120
+ }
121
+ //# sourceMappingURL=CodeGraphBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeGraphBuilder.js","sourceRoot":"","sources":["../../../src/domain/services/CodeGraphBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ParseOptions, ParseResult } from '../../../interface/types/parser.js';
2
+ import type { ModuleSymbol, ImportInfo, ExportInfo } from '../../../interface/types/index.js';
3
+ import { ParserBase } from '../interfaces/ParserBase.js';
4
+ /**
5
+ * Go 语言解析器
6
+ *
7
+ * TODO-DEBT [L1] [日期:2026-03-17] [作者:AI] [原因:MVP阶段仅实现框架]
8
+ * 问题:目前仅返回空结果
9
+ * 风险:无法实际解析 Go 代码
10
+ * 偿还计划:V1.0 实现完整 Go 解析器
11
+ */
12
+ export declare class GoParser extends ParserBase {
13
+ readonly languageId: "go";
14
+ readonly fileExtensions: string[];
15
+ readonly name = "Go Parser";
16
+ protected supportedFeatures: Set<"call-graph" | "cross-file-analysis" | "complexity-metrics">;
17
+ protected doInitialize(): Promise<void>;
18
+ protected doDispose(): Promise<void>;
19
+ parseFile(filePath: string, content: string, options?: ParseOptions): Promise<ParseResult>;
20
+ extractImports(content: string): Promise<ImportInfo[]>;
21
+ extractExports(content: string): Promise<ExportInfo[]>;
22
+ extractSymbols(content: string): Promise<ModuleSymbol[]>;
23
+ private getLineNumber;
24
+ }
25
+ //# sourceMappingURL=GoParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoParser.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/parser/implementations/GoParser.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAEV,YAAY,EACZ,UAAU,EACV,UAAU,EAEX,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAc,MAAM,6BAA6B,CAAC;AAErE;;;;;;;GAOG;AACH,qBAAa,QAAS,SAAQ,UAAU;IACtC,QAAQ,CAAC,UAAU,EAAG,IAAI,CAAU;IACpC,QAAQ,CAAC,cAAc,WAAU;IACjC,QAAQ,CAAC,IAAI,eAAe;IAE5B,SAAS,CAAC,iBAAiB,mEAIf;cAEI,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cAI7B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC;IAkDjB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwCtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAuBtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwC9D,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,158 @@
1
+ // [META] since:2026-03 | owner:architecture-team | stable:false
2
+ // [WHY] Go language parser - implements ILanguageParser for Go files
3
+ // ============================================
4
+ // Go 语言解析器 - 实现 ILanguageParser 接口
5
+ // ============================================
6
+ import { randomUUID } from 'crypto';
7
+ import { ParserBase, ParseError } from '../interfaces/ParserBase.js';
8
+ /**
9
+ * Go 语言解析器
10
+ *
11
+ * TODO-DEBT [L1] [日期:2026-03-17] [作者:AI] [原因:MVP阶段仅实现框架]
12
+ * 问题:目前仅返回空结果
13
+ * 风险:无法实际解析 Go 代码
14
+ * 偿还计划:V1.0 实现完整 Go 解析器
15
+ */
16
+ export class GoParser extends ParserBase {
17
+ languageId = 'go';
18
+ fileExtensions = ['go'];
19
+ name = 'Go Parser';
20
+ supportedFeatures = new Set([
21
+ 'call-graph',
22
+ 'cross-file-analysis',
23
+ 'complexity-metrics',
24
+ ]);
25
+ async doInitialize() {
26
+ // 无需初始化
27
+ }
28
+ async doDispose() {
29
+ // 无需清理
30
+ }
31
+ async parseFile(filePath, content, options) {
32
+ this.ensureInitialized();
33
+ const startTime = Date.now();
34
+ try {
35
+ const [imports, exports, symbols,] = await Promise.all([
36
+ this.extractImports(content),
37
+ this.extractExports(content),
38
+ this.extractSymbols(content),
39
+ ]);
40
+ const lineCounts = this.countLines(content);
41
+ const module = {
42
+ id: `mod_${randomUUID().replace(/-/g, '').slice(0, 16)}`,
43
+ projectId: '',
44
+ path: filePath,
45
+ language: 'go',
46
+ stats: {
47
+ lines: lineCounts.total,
48
+ codeLines: lineCounts.code,
49
+ commentLines: lineCounts.comment,
50
+ blankLines: lineCounts.blank,
51
+ },
52
+ };
53
+ const parseTime = Date.now() - startTime;
54
+ return {
55
+ filePath,
56
+ language: 'go',
57
+ module,
58
+ symbols,
59
+ imports,
60
+ exports,
61
+ dependencies: [],
62
+ parseTime,
63
+ };
64
+ }
65
+ catch (error) {
66
+ throw new ParseError(`Failed to parse ${filePath}: ${error instanceof Error ? error.message : String(error)}`, filePath);
67
+ }
68
+ }
69
+ async extractImports(content) {
70
+ const imports = [];
71
+ // 单行导入: import "package"
72
+ const singleImportRegex = /import\s+["']([^"']+)["']/g;
73
+ let match;
74
+ while ((match = singleImportRegex.exec(content)) !== null) {
75
+ const [, source] = match;
76
+ imports.push({
77
+ source: source,
78
+ sourceType: source.includes('.') ? 'node_module' : 'relative',
79
+ specifiers: [],
80
+ isTypeOnly: false,
81
+ });
82
+ }
83
+ // 多行导入
84
+ const multiImportRegex = /import\s+\(([^)]+)\)/g;
85
+ while ((match = multiImportRegex.exec(content)) !== null) {
86
+ const [, importBlock] = match;
87
+ const lines = importBlock.split('\n');
88
+ for (const line of lines) {
89
+ const trimmed = line.trim();
90
+ const quoteMatch = trimmed.match(/["']([^"']+)["']/);
91
+ if (quoteMatch) {
92
+ imports.push({
93
+ source: quoteMatch[1],
94
+ sourceType: quoteMatch[1].includes('.') ? 'node_module' : 'relative',
95
+ specifiers: [],
96
+ isTypeOnly: false,
97
+ });
98
+ }
99
+ }
100
+ }
101
+ return imports;
102
+ }
103
+ async extractExports(content) {
104
+ const exports = [];
105
+ // 大写开头的函数/类型是导出的
106
+ const exportRegex = /^(?:func|type|var|const)\s+([A-Z]\w+)/gm;
107
+ let match;
108
+ while ((match = exportRegex.exec(content)) !== null) {
109
+ const [, name] = match;
110
+ const kind = match[0].includes('func') ? 'function' :
111
+ match[0].includes('type') ? 'type' : 'variable';
112
+ exports.push({
113
+ name: name,
114
+ kind,
115
+ isDefault: false,
116
+ isTypeOnly: kind === 'type',
117
+ });
118
+ }
119
+ return exports;
120
+ }
121
+ async extractSymbols(content) {
122
+ const symbols = [];
123
+ // 函数
124
+ const funcRegex = /func\s+(?:\([^)]+\)\s+)?(\w+)\s*\(/g;
125
+ let match;
126
+ while ((match = funcRegex.exec(content)) !== null) {
127
+ const [, name] = match;
128
+ const line = this.getLineNumber(content, match.index);
129
+ symbols.push({
130
+ id: `sym_${randomUUID().replace(/-/g, '').slice(0, 16)}`,
131
+ name: name,
132
+ kind: 'function',
133
+ location: { file: '', line, column: 0 },
134
+ visibility: /^[A-Z]/.test(name) ? 'public' : 'private',
135
+ relatedSymbols: [],
136
+ });
137
+ }
138
+ // 类型定义
139
+ const typeRegex = /type\s+(\w+)\s+(?:struct|interface)/g;
140
+ while ((match = typeRegex.exec(content)) !== null) {
141
+ const [, name] = match;
142
+ const line = this.getLineNumber(content, match.index);
143
+ symbols.push({
144
+ id: `sym_${randomUUID().replace(/-/g, '').slice(0, 16)}`,
145
+ name: name,
146
+ kind: match[0].includes('interface') ? 'interface' : 'class',
147
+ location: { file: '', line, column: 0 },
148
+ visibility: /^[A-Z]/.test(name) ? 'public' : 'private',
149
+ relatedSymbols: [],
150
+ });
151
+ }
152
+ return symbols;
153
+ }
154
+ getLineNumber(content, index) {
155
+ return content.slice(0, index).split('\n').length;
156
+ }
157
+ }
158
+ //# sourceMappingURL=GoParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoParser.js","sourceRoot":"","sources":["../../../../src/infrastructure/parser/implementations/GoParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ParseOptions, ParseResult } from '../../../interface/types/parser.js';
2
+ import type { ModuleSymbol, ImportInfo, ExportInfo } from '../../../interface/types/index.js';
3
+ import { ParserBase } from '../interfaces/ParserBase.js';
4
+ /**
5
+ * Python 语言解析器
6
+ *
7
+ * 支持:
8
+ * - import/from 导入语句
9
+ * - class/function 定义
10
+ * - 模块级变量
11
+ *
12
+ * TODO-DEBT [L1] [日期:2026-03-17] [作者:AI] [原因:MVP阶段简化实现]
13
+ * 问题:使用正则而非 AST 解析
14
+ * 风险:复杂语法可能解析不准确
15
+ * 偿还计划:V1.0 集成 Tree-sitter 实现完整解析
16
+ */
17
+ export declare class PythonParser extends ParserBase {
18
+ readonly languageId: "python";
19
+ readonly fileExtensions: string[];
20
+ readonly name = "Python Parser";
21
+ protected supportedFeatures: Set<"call-graph" | "cross-file-analysis" | "complexity-metrics">;
22
+ protected doInitialize(): Promise<void>;
23
+ protected doDispose(): Promise<void>;
24
+ parseFile(filePath: string, content: string, _options?: ParseOptions): Promise<ParseResult>;
25
+ extractImports(content: string): Promise<ImportInfo[]>;
26
+ extractExports(content: string): Promise<ExportInfo[]>;
27
+ extractSymbols(content: string): Promise<ModuleSymbol[]>;
28
+ private getLineNumber;
29
+ }
30
+ //# sourceMappingURL=PythonParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PythonParser.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/parser/implementations/PythonParser.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAEV,YAAY,EACZ,UAAU,EACV,UAAU,EACX,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAc,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,UAAU,EAAG,QAAQ,CAAU;IACxC,QAAQ,CAAC,cAAc,WAAU;IACjC,QAAQ,CAAC,IAAI,mBAAmB;IAEhC,SAAS,CAAC,iBAAiB,mEAIf;cAEI,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cAI7B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,YAAY,GACtB,OAAO,CAAC,WAAW,CAAC;IAkDjB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA6CtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAsDtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAyC9D,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,201 @@
1
+ // [META] since:2026-03 | owner:architecture-team | stable:false
2
+ // [WHY] Python language parser - implements ILanguageParser for Python files
3
+ // ============================================
4
+ // Python 语言解析器 - 实现 ILanguageParser 接口
5
+ // ============================================
6
+ import { randomUUID } from 'crypto';
7
+ import { ParserBase, ParseError } from '../interfaces/ParserBase.js';
8
+ /**
9
+ * Python 语言解析器
10
+ *
11
+ * 支持:
12
+ * - import/from 导入语句
13
+ * - class/function 定义
14
+ * - 模块级变量
15
+ *
16
+ * TODO-DEBT [L1] [日期:2026-03-17] [作者:AI] [原因:MVP阶段简化实现]
17
+ * 问题:使用正则而非 AST 解析
18
+ * 风险:复杂语法可能解析不准确
19
+ * 偿还计划:V1.0 集成 Tree-sitter 实现完整解析
20
+ */
21
+ export class PythonParser extends ParserBase {
22
+ languageId = 'python';
23
+ fileExtensions = ['py'];
24
+ name = 'Python Parser';
25
+ supportedFeatures = new Set([
26
+ 'call-graph',
27
+ 'cross-file-analysis',
28
+ 'complexity-metrics',
29
+ ]);
30
+ async doInitialize() {
31
+ // 无需初始化
32
+ }
33
+ async doDispose() {
34
+ // 无需清理
35
+ }
36
+ async parseFile(filePath, content, _options) {
37
+ this.ensureInitialized();
38
+ const startTime = Date.now();
39
+ try {
40
+ const [imports, exports, symbols,] = await Promise.all([
41
+ this.extractImports(content),
42
+ this.extractExports(content),
43
+ this.extractSymbols(content),
44
+ ]);
45
+ const lineCounts = this.countLines(content);
46
+ const module = {
47
+ id: `mod_${randomUUID().replace(/-/g, '').slice(0, 16)}`,
48
+ projectId: '',
49
+ path: filePath,
50
+ language: 'python',
51
+ stats: {
52
+ lines: lineCounts.total,
53
+ codeLines: lineCounts.code,
54
+ commentLines: lineCounts.comment,
55
+ blankLines: lineCounts.blank,
56
+ },
57
+ };
58
+ const parseTime = Date.now() - startTime;
59
+ return {
60
+ filePath,
61
+ language: 'python',
62
+ module,
63
+ symbols,
64
+ imports,
65
+ exports,
66
+ dependencies: [],
67
+ parseTime,
68
+ };
69
+ }
70
+ catch (error) {
71
+ throw new ParseError(`Failed to parse ${filePath}: ${error instanceof Error ? error.message : String(error)}`, filePath);
72
+ }
73
+ }
74
+ async extractImports(content) {
75
+ const imports = [];
76
+ // import x
77
+ const importRegex = /^import\s+([\w.]+)(?:\s+as\s+(\w+))?/gm;
78
+ let match;
79
+ while ((match = importRegex.exec(content)) !== null) {
80
+ const [, moduleName, alias] = match;
81
+ imports.push({
82
+ source: moduleName,
83
+ sourceType: moduleName.includes('.') ? 'node_module' : 'relative',
84
+ specifiers: [{
85
+ name: moduleName,
86
+ alias: alias,
87
+ isTypeOnly: false,
88
+ }],
89
+ isTypeOnly: false,
90
+ });
91
+ }
92
+ // from x import y
93
+ const fromImportRegex = /^from\s+([\w.]+)\s+import\s+(.+)$/gm;
94
+ while ((match = fromImportRegex.exec(content)) !== null) {
95
+ const [, moduleName, importsList] = match;
96
+ const names = importsList.split(',').map(n => n.trim());
97
+ imports.push({
98
+ source: moduleName,
99
+ sourceType: moduleName.startsWith('.') ? 'relative' : 'node_module',
100
+ specifiers: names.map(name => {
101
+ const [actualName, alias] = name.split(/\s+as\s+/).map(s => s.trim());
102
+ return {
103
+ name: actualName,
104
+ alias: alias,
105
+ isTypeOnly: false,
106
+ };
107
+ }),
108
+ isTypeOnly: false,
109
+ });
110
+ }
111
+ return imports;
112
+ }
113
+ async extractExports(content) {
114
+ const exports = [];
115
+ // Python 中所有非下划线开头的东西都可以被视为导出
116
+ // __all__ 明确定义了导出内容
117
+ const allRegex = /^__all__\s*=\s*\[([^\]]+)\]/m;
118
+ const allMatch = allRegex.exec(content);
119
+ if (allMatch) {
120
+ const names = allMatch[1].split(',').map(n => n.trim().replace(/['"]/g, ''));
121
+ for (const name of names) {
122
+ if (name) {
123
+ exports.push({
124
+ name: name,
125
+ kind: 'variable',
126
+ isDefault: false,
127
+ isTypeOnly: false,
128
+ });
129
+ }
130
+ }
131
+ }
132
+ else {
133
+ // 默认导出:类定义
134
+ const classRegex = /^class\s+(\w+)/gm;
135
+ let match;
136
+ while ((match = classRegex.exec(content)) !== null) {
137
+ const [, name] = match;
138
+ if (name && !name.startsWith('_')) {
139
+ exports.push({
140
+ name: name,
141
+ kind: 'class',
142
+ isDefault: false,
143
+ isTypeOnly: false,
144
+ });
145
+ }
146
+ }
147
+ // 函数定义
148
+ const funcRegex = /^def\s+(\w+)\s*\(/gm;
149
+ while ((match = funcRegex.exec(content)) !== null) {
150
+ const [, name] = match;
151
+ if (name && !name.startsWith('_')) {
152
+ exports.push({
153
+ name: name,
154
+ kind: 'function',
155
+ isDefault: false,
156
+ isTypeOnly: false,
157
+ });
158
+ }
159
+ }
160
+ }
161
+ return exports;
162
+ }
163
+ async extractSymbols(content) {
164
+ const symbols = [];
165
+ // 类定义
166
+ const classRegex = /^class\s+(\w+)(?:\(([^)]+)\))?/gm;
167
+ let match;
168
+ while ((match = classRegex.exec(content)) !== null) {
169
+ const [, name, bases] = match;
170
+ const line = this.getLineNumber(content, match.index);
171
+ symbols.push({
172
+ id: `sym_${randomUUID().replace(/-/g, '').slice(0, 16)}`,
173
+ name: name,
174
+ kind: 'class',
175
+ location: { file: '', line, column: 0 },
176
+ visibility: name.startsWith('_') ? 'private' : 'public',
177
+ relatedSymbols: [],
178
+ ...(bases && { extends: bases.split(',').map(b => b.trim().split('.').pop()).filter(Boolean) }),
179
+ });
180
+ }
181
+ // 函数定义
182
+ const funcRegex = /^def\s+(\w+)\s*\(/gm;
183
+ while ((match = funcRegex.exec(content)) !== null) {
184
+ const [, name] = match;
185
+ const line = this.getLineNumber(content, match.index);
186
+ symbols.push({
187
+ id: `sym_${randomUUID().replace(/-/g, '').slice(0, 16)}`,
188
+ name: name,
189
+ kind: 'function',
190
+ location: { file: '', line, column: 0 },
191
+ visibility: name.startsWith('_') ? 'private' : 'public',
192
+ relatedSymbols: [],
193
+ });
194
+ }
195
+ return symbols;
196
+ }
197
+ getLineNumber(content, index) {
198
+ return content.slice(0, index).split('\n').length;
199
+ }
200
+ }
201
+ //# sourceMappingURL=PythonParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PythonParser.js","sourceRoot":"","sources":["../../../../src/infrastructure/parser/implementations/PythonParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { ParseOptions, ParseResult, CallGraphInfo } from '../../../interface/types/parser.js';
2
+ import type { ModuleSymbol, ImportInfo, ExportInfo, ComplexityMetrics } from '../../../interface/types/index.js';
3
+ import { ParserBase } from '../interfaces/ParserBase.js';
4
+ /**
5
+ * TypeScript/JavaScript 解析器
6
+ *
7
+ * 基于正则表达式的快速解析器,适用于:
8
+ * - 快速扫描项目结构
9
+ * - 提取导入/导出信息
10
+ * - 识别符号定义
11
+ *
12
+ * TODO-DEBT [L1] [日期:2026-03-17] [作者:AI] [原因:MVP阶段使用简化实现]
13
+ * 问题:使用正则而非完整 AST 解析
14
+ * 风险:复杂语法可能解析不准确
15
+ * 偿还计划:V1.0 集成 Tree-sitter 实现完整解析
16
+ */
17
+ export declare class TypeScriptParser extends ParserBase {
18
+ readonly languageId: "typescript";
19
+ readonly fileExtensions: string[];
20
+ readonly name = "TypeScript Parser";
21
+ protected supportedFeatures: Set<"type-inference" | "generic-types" | "decorators" | "call-graph" | "cross-file-analysis" | "complexity-metrics">;
22
+ /**
23
+ * 初始化解析器
24
+ */
25
+ protected doInitialize(): Promise<void>;
26
+ /**
27
+ * 释放资源
28
+ */
29
+ protected doDispose(): Promise<void>;
30
+ /**
31
+ * 解析单个文件
32
+ */
33
+ parseFile(filePath: string, content: string, options?: ParseOptions): Promise<ParseResult>;
34
+ /**
35
+ * 提取导入信息
36
+ */
37
+ extractImports(content: string): Promise<ImportInfo[]>;
38
+ /**
39
+ * 提取导出信息
40
+ */
41
+ extractExports(content: string): Promise<ExportInfo[]>;
42
+ /**
43
+ * 提取符号信息
44
+ */
45
+ extractSymbols(content: string): Promise<ModuleSymbol[]>;
46
+ /**
47
+ * 构建调用图
48
+ */
49
+ buildCallGraph(content: string): Promise<CallGraphInfo>;
50
+ /**
51
+ * 计算复杂度
52
+ */
53
+ calculateComplexity(content: string): Promise<ComplexityMetrics>;
54
+ private detectLanguage;
55
+ private classifyImportSource;
56
+ private inferSymbolKind;
57
+ private buildDependencies;
58
+ private getLineNumber;
59
+ private createLocation;
60
+ private isKeyword;
61
+ private findFunctionEnd;
62
+ }
63
+ //# sourceMappingURL=TypeScriptParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeScriptParser.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/parser/implementations/TypeScriptParser.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EAEd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAIV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,iBAAiB,EAClB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAc,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,QAAQ,CAAC,UAAU,EAAG,YAAY,CAAU;IAC5C,QAAQ,CAAC,cAAc,WAA4C;IACnE,QAAQ,CAAC,IAAI,uBAAuB;IAEpC,SAAS,CAAC,iBAAiB,uHAOf;IAEZ;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C;;OAEG;cACa,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1C;;OAEG;IACG,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC;IAwEvB;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA6D5D;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAwC5D;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA4E9D;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0C7D;;OAEG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoDtE,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,eAAe;CAkBxB"}