agent-ide 0.1.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 (436) hide show
  1. package/README.md +678 -0
  2. package/bin/agent-ide.js +19 -0
  3. package/bin/mcp-server.js +20 -0
  4. package/dist/application/events/event-bus.d.ts +107 -0
  5. package/dist/application/events/event-bus.d.ts.map +1 -0
  6. package/dist/application/events/event-bus.js +364 -0
  7. package/dist/application/events/event-bus.js.map +1 -0
  8. package/dist/application/events/event-types.d.ts +195 -0
  9. package/dist/application/events/event-types.d.ts.map +1 -0
  10. package/dist/application/events/event-types.js +36 -0
  11. package/dist/application/events/event-types.js.map +1 -0
  12. package/dist/application/events/index.d.ts +6 -0
  13. package/dist/application/events/index.d.ts.map +1 -0
  14. package/dist/application/events/index.js +6 -0
  15. package/dist/application/events/index.js.map +1 -0
  16. package/dist/application/index.d.ts +85 -0
  17. package/dist/application/index.d.ts.map +1 -0
  18. package/dist/application/index.js +138 -0
  19. package/dist/application/index.js.map +1 -0
  20. package/dist/application/services/cache-coordinator.service.d.ts +69 -0
  21. package/dist/application/services/cache-coordinator.service.d.ts.map +1 -0
  22. package/dist/application/services/cache-coordinator.service.js +251 -0
  23. package/dist/application/services/cache-coordinator.service.js.map +1 -0
  24. package/dist/application/services/error-handler.service.d.ts +56 -0
  25. package/dist/application/services/error-handler.service.d.ts.map +1 -0
  26. package/dist/application/services/error-handler.service.js +273 -0
  27. package/dist/application/services/error-handler.service.js.map +1 -0
  28. package/dist/application/services/index.d.ts +8 -0
  29. package/dist/application/services/index.d.ts.map +1 -0
  30. package/dist/application/services/index.js +8 -0
  31. package/dist/application/services/index.js.map +1 -0
  32. package/dist/application/services/module-coordinator.service.d.ts +70 -0
  33. package/dist/application/services/module-coordinator.service.d.ts.map +1 -0
  34. package/dist/application/services/module-coordinator.service.js +418 -0
  35. package/dist/application/services/module-coordinator.service.js.map +1 -0
  36. package/dist/application/services/session-manager.service.d.ts +86 -0
  37. package/dist/application/services/session-manager.service.d.ts.map +1 -0
  38. package/dist/application/services/session-manager.service.js +318 -0
  39. package/dist/application/services/session-manager.service.js.map +1 -0
  40. package/dist/application/services/workflow-engine.service.d.ts +76 -0
  41. package/dist/application/services/workflow-engine.service.d.ts.map +1 -0
  42. package/dist/application/services/workflow-engine.service.js +405 -0
  43. package/dist/application/services/workflow-engine.service.js.map +1 -0
  44. package/dist/application/state/application-state.d.ts +164 -0
  45. package/dist/application/state/application-state.d.ts.map +1 -0
  46. package/dist/application/state/application-state.js +290 -0
  47. package/dist/application/state/application-state.js.map +1 -0
  48. package/dist/application/state/index.d.ts +15 -0
  49. package/dist/application/state/index.d.ts.map +1 -0
  50. package/dist/application/state/index.js +15 -0
  51. package/dist/application/state/index.js.map +1 -0
  52. package/dist/application/state/session-state.d.ts +114 -0
  53. package/dist/application/state/session-state.d.ts.map +1 -0
  54. package/dist/application/state/session-state.js +188 -0
  55. package/dist/application/state/session-state.js.map +1 -0
  56. package/dist/application/state/state-manager.d.ts +122 -0
  57. package/dist/application/state/state-manager.d.ts.map +1 -0
  58. package/dist/application/state/state-manager.js +234 -0
  59. package/dist/application/state/state-manager.js.map +1 -0
  60. package/dist/application/types.d.ts +280 -0
  61. package/dist/application/types.d.ts.map +1 -0
  62. package/dist/application/types.js +13 -0
  63. package/dist/application/types.js.map +1 -0
  64. package/dist/application/workflows/analysis-workflow.d.ts +239 -0
  65. package/dist/application/workflows/analysis-workflow.d.ts.map +1 -0
  66. package/dist/application/workflows/analysis-workflow.js +395 -0
  67. package/dist/application/workflows/analysis-workflow.js.map +1 -0
  68. package/dist/application/workflows/base-workflow.d.ts +108 -0
  69. package/dist/application/workflows/base-workflow.d.ts.map +1 -0
  70. package/dist/application/workflows/base-workflow.js +236 -0
  71. package/dist/application/workflows/base-workflow.js.map +1 -0
  72. package/dist/application/workflows/index.d.ts +115 -0
  73. package/dist/application/workflows/index.d.ts.map +1 -0
  74. package/dist/application/workflows/index.js +218 -0
  75. package/dist/application/workflows/index.js.map +1 -0
  76. package/dist/application/workflows/refactor-workflow.d.ts +107 -0
  77. package/dist/application/workflows/refactor-workflow.d.ts.map +1 -0
  78. package/dist/application/workflows/refactor-workflow.js +310 -0
  79. package/dist/application/workflows/refactor-workflow.js.map +1 -0
  80. package/dist/core/analysis/complexity-analyzer.d.ts +81 -0
  81. package/dist/core/analysis/complexity-analyzer.d.ts.map +1 -0
  82. package/dist/core/analysis/complexity-analyzer.js +254 -0
  83. package/dist/core/analysis/complexity-analyzer.js.map +1 -0
  84. package/dist/core/analysis/dead-code-detector.d.ts +123 -0
  85. package/dist/core/analysis/dead-code-detector.d.ts.map +1 -0
  86. package/dist/core/analysis/dead-code-detector.js +275 -0
  87. package/dist/core/analysis/dead-code-detector.js.map +1 -0
  88. package/dist/core/analysis/duplication-detector.d.ts +150 -0
  89. package/dist/core/analysis/duplication-detector.d.ts.map +1 -0
  90. package/dist/core/analysis/duplication-detector.js +433 -0
  91. package/dist/core/analysis/duplication-detector.js.map +1 -0
  92. package/dist/core/analysis/index.d.ts +9 -0
  93. package/dist/core/analysis/index.d.ts.map +1 -0
  94. package/dist/core/analysis/index.js +13 -0
  95. package/dist/core/analysis/index.js.map +1 -0
  96. package/dist/core/analysis/quality-metrics.d.ts +158 -0
  97. package/dist/core/analysis/quality-metrics.d.ts.map +1 -0
  98. package/dist/core/analysis/quality-metrics.js +442 -0
  99. package/dist/core/analysis/quality-metrics.js.map +1 -0
  100. package/dist/core/dependency/cycle-detector.d.ts +81 -0
  101. package/dist/core/dependency/cycle-detector.d.ts.map +1 -0
  102. package/dist/core/dependency/cycle-detector.js +300 -0
  103. package/dist/core/dependency/cycle-detector.js.map +1 -0
  104. package/dist/core/dependency/dependency-analyzer.d.ts +152 -0
  105. package/dist/core/dependency/dependency-analyzer.d.ts.map +1 -0
  106. package/dist/core/dependency/dependency-analyzer.js +458 -0
  107. package/dist/core/dependency/dependency-analyzer.js.map +1 -0
  108. package/dist/core/dependency/dependency-graph.d.ts +156 -0
  109. package/dist/core/dependency/dependency-graph.d.ts.map +1 -0
  110. package/dist/core/dependency/dependency-graph.js +371 -0
  111. package/dist/core/dependency/dependency-graph.js.map +1 -0
  112. package/dist/core/dependency/index.d.ts +27 -0
  113. package/dist/core/dependency/index.d.ts.map +1 -0
  114. package/dist/core/dependency/index.js +36 -0
  115. package/dist/core/dependency/index.js.map +1 -0
  116. package/dist/core/dependency/types.d.ts +168 -0
  117. package/dist/core/dependency/types.d.ts.map +1 -0
  118. package/dist/core/dependency/types.js +103 -0
  119. package/dist/core/dependency/types.js.map +1 -0
  120. package/dist/core/indexing/file-index.d.ts +117 -0
  121. package/dist/core/indexing/file-index.d.ts.map +1 -0
  122. package/dist/core/indexing/file-index.js +302 -0
  123. package/dist/core/indexing/file-index.js.map +1 -0
  124. package/dist/core/indexing/file-watcher.d.ts +110 -0
  125. package/dist/core/indexing/file-watcher.d.ts.map +1 -0
  126. package/dist/core/indexing/file-watcher.js +280 -0
  127. package/dist/core/indexing/file-watcher.js.map +1 -0
  128. package/dist/core/indexing/index-engine.d.ts +120 -0
  129. package/dist/core/indexing/index-engine.d.ts.map +1 -0
  130. package/dist/core/indexing/index-engine.js +445 -0
  131. package/dist/core/indexing/index-engine.js.map +1 -0
  132. package/dist/core/indexing/index.d.ts +25 -0
  133. package/dist/core/indexing/index.d.ts.map +1 -0
  134. package/dist/core/indexing/index.js +36 -0
  135. package/dist/core/indexing/index.js.map +1 -0
  136. package/dist/core/indexing/symbol-index.d.ts +107 -0
  137. package/dist/core/indexing/symbol-index.d.ts.map +1 -0
  138. package/dist/core/indexing/symbol-index.js +352 -0
  139. package/dist/core/indexing/symbol-index.js.map +1 -0
  140. package/dist/core/indexing/types.d.ts +222 -0
  141. package/dist/core/indexing/types.d.ts.map +1 -0
  142. package/dist/core/indexing/types.js +143 -0
  143. package/dist/core/indexing/types.js.map +1 -0
  144. package/dist/core/move/import-resolver.d.ts +54 -0
  145. package/dist/core/move/import-resolver.d.ts.map +1 -0
  146. package/dist/core/move/import-resolver.js +268 -0
  147. package/dist/core/move/import-resolver.js.map +1 -0
  148. package/dist/core/move/index.d.ts +10 -0
  149. package/dist/core/move/index.d.ts.map +1 -0
  150. package/dist/core/move/index.js +12 -0
  151. package/dist/core/move/index.js.map +1 -0
  152. package/dist/core/move/move-service.d.ts +67 -0
  153. package/dist/core/move/move-service.d.ts.map +1 -0
  154. package/dist/core/move/move-service.js +400 -0
  155. package/dist/core/move/move-service.js.map +1 -0
  156. package/dist/core/move/types.d.ts +266 -0
  157. package/dist/core/move/types.d.ts.map +1 -0
  158. package/dist/core/move/types.js +101 -0
  159. package/dist/core/move/types.js.map +1 -0
  160. package/dist/core/performance/analyzer.d.ts +62 -0
  161. package/dist/core/performance/analyzer.d.ts.map +1 -0
  162. package/dist/core/performance/analyzer.js +378 -0
  163. package/dist/core/performance/analyzer.js.map +1 -0
  164. package/dist/core/performance/cache-manager.d.ts +161 -0
  165. package/dist/core/performance/cache-manager.d.ts.map +1 -0
  166. package/dist/core/performance/cache-manager.js +375 -0
  167. package/dist/core/performance/cache-manager.js.map +1 -0
  168. package/dist/core/performance/index.d.ts +14 -0
  169. package/dist/core/performance/index.d.ts.map +1 -0
  170. package/dist/core/performance/index.js +17 -0
  171. package/dist/core/performance/index.js.map +1 -0
  172. package/dist/core/performance/interfaces.d.ts +188 -0
  173. package/dist/core/performance/interfaces.d.ts.map +1 -0
  174. package/dist/core/performance/interfaces.js +17 -0
  175. package/dist/core/performance/interfaces.js.map +1 -0
  176. package/dist/core/performance/memory-manager.d.ts +176 -0
  177. package/dist/core/performance/memory-manager.d.ts.map +1 -0
  178. package/dist/core/performance/memory-manager.js +364 -0
  179. package/dist/core/performance/memory-manager.js.map +1 -0
  180. package/dist/core/performance/monitor.d.ts +92 -0
  181. package/dist/core/performance/monitor.d.ts.map +1 -0
  182. package/dist/core/performance/monitor.js +228 -0
  183. package/dist/core/performance/monitor.js.map +1 -0
  184. package/dist/core/refactor/design-patterns.d.ts +178 -0
  185. package/dist/core/refactor/design-patterns.d.ts.map +1 -0
  186. package/dist/core/refactor/design-patterns.js +656 -0
  187. package/dist/core/refactor/design-patterns.js.map +1 -0
  188. package/dist/core/refactor/extract-function.d.ts +175 -0
  189. package/dist/core/refactor/extract-function.d.ts.map +1 -0
  190. package/dist/core/refactor/extract-function.js +478 -0
  191. package/dist/core/refactor/extract-function.js.map +1 -0
  192. package/dist/core/refactor/index.d.ts +8 -0
  193. package/dist/core/refactor/index.d.ts.map +1 -0
  194. package/dist/core/refactor/index.js +11 -0
  195. package/dist/core/refactor/index.js.map +1 -0
  196. package/dist/core/refactor/inline-function.d.ts +175 -0
  197. package/dist/core/refactor/inline-function.d.ts.map +1 -0
  198. package/dist/core/refactor/inline-function.js +425 -0
  199. package/dist/core/refactor/inline-function.js.map +1 -0
  200. package/dist/core/rename/index.d.ts +9 -0
  201. package/dist/core/rename/index.d.ts.map +1 -0
  202. package/dist/core/rename/index.js +13 -0
  203. package/dist/core/rename/index.js.map +1 -0
  204. package/dist/core/rename/reference-updater.d.ts +77 -0
  205. package/dist/core/rename/reference-updater.d.ts.map +1 -0
  206. package/dist/core/rename/reference-updater.js +400 -0
  207. package/dist/core/rename/reference-updater.js.map +1 -0
  208. package/dist/core/rename/rename-engine.d.ts +69 -0
  209. package/dist/core/rename/rename-engine.d.ts.map +1 -0
  210. package/dist/core/rename/rename-engine.js +350 -0
  211. package/dist/core/rename/rename-engine.js.map +1 -0
  212. package/dist/core/rename/scope-analyzer.d.ts +75 -0
  213. package/dist/core/rename/scope-analyzer.d.ts.map +1 -0
  214. package/dist/core/rename/scope-analyzer.js +269 -0
  215. package/dist/core/rename/scope-analyzer.js.map +1 -0
  216. package/dist/core/rename/types.d.ts +163 -0
  217. package/dist/core/rename/types.d.ts.map +1 -0
  218. package/dist/core/rename/types.js +80 -0
  219. package/dist/core/rename/types.js.map +1 -0
  220. package/dist/core/search/engines/text-engine.d.ts +52 -0
  221. package/dist/core/search/engines/text-engine.d.ts.map +1 -0
  222. package/dist/core/search/engines/text-engine.js +376 -0
  223. package/dist/core/search/engines/text-engine.js.map +1 -0
  224. package/dist/core/search/index.d.ts +10 -0
  225. package/dist/core/search/index.d.ts.map +1 -0
  226. package/dist/core/search/index.js +11 -0
  227. package/dist/core/search/index.js.map +1 -0
  228. package/dist/core/search/service.d.ts +105 -0
  229. package/dist/core/search/service.d.ts.map +1 -0
  230. package/dist/core/search/service.js +384 -0
  231. package/dist/core/search/service.js.map +1 -0
  232. package/dist/core/search/types.d.ts +357 -0
  233. package/dist/core/search/types.d.ts.map +1 -0
  234. package/dist/core/search/types.js +47 -0
  235. package/dist/core/search/types.js.map +1 -0
  236. package/dist/infrastructure/cache/cache-manager.d.ts +113 -0
  237. package/dist/infrastructure/cache/cache-manager.d.ts.map +1 -0
  238. package/dist/infrastructure/cache/cache-manager.js +279 -0
  239. package/dist/infrastructure/cache/cache-manager.js.map +1 -0
  240. package/dist/infrastructure/cache/index.d.ts +138 -0
  241. package/dist/infrastructure/cache/index.d.ts.map +1 -0
  242. package/dist/infrastructure/cache/index.js +266 -0
  243. package/dist/infrastructure/cache/index.js.map +1 -0
  244. package/dist/infrastructure/cache/memory-cache.d.ts +94 -0
  245. package/dist/infrastructure/cache/memory-cache.d.ts.map +1 -0
  246. package/dist/infrastructure/cache/memory-cache.js +327 -0
  247. package/dist/infrastructure/cache/memory-cache.js.map +1 -0
  248. package/dist/infrastructure/cache/strategies.d.ts +99 -0
  249. package/dist/infrastructure/cache/strategies.d.ts.map +1 -0
  250. package/dist/infrastructure/cache/strategies.js +230 -0
  251. package/dist/infrastructure/cache/strategies.js.map +1 -0
  252. package/dist/infrastructure/cache/types.d.ts +220 -0
  253. package/dist/infrastructure/cache/types.d.ts.map +1 -0
  254. package/dist/infrastructure/cache/types.js +42 -0
  255. package/dist/infrastructure/cache/types.js.map +1 -0
  256. package/dist/infrastructure/parser/base.d.ts +126 -0
  257. package/dist/infrastructure/parser/base.d.ts.map +1 -0
  258. package/dist/infrastructure/parser/base.js +269 -0
  259. package/dist/infrastructure/parser/base.js.map +1 -0
  260. package/dist/infrastructure/parser/factory.d.ts +141 -0
  261. package/dist/infrastructure/parser/factory.d.ts.map +1 -0
  262. package/dist/infrastructure/parser/factory.js +306 -0
  263. package/dist/infrastructure/parser/factory.js.map +1 -0
  264. package/dist/infrastructure/parser/index.d.ts +12 -0
  265. package/dist/infrastructure/parser/index.d.ts.map +1 -0
  266. package/dist/infrastructure/parser/index.js +12 -0
  267. package/dist/infrastructure/parser/index.js.map +1 -0
  268. package/dist/infrastructure/parser/interface.d.ts +108 -0
  269. package/dist/infrastructure/parser/interface.d.ts.map +1 -0
  270. package/dist/infrastructure/parser/interface.js +72 -0
  271. package/dist/infrastructure/parser/interface.js.map +1 -0
  272. package/dist/infrastructure/parser/registry.d.ts +141 -0
  273. package/dist/infrastructure/parser/registry.d.ts.map +1 -0
  274. package/dist/infrastructure/parser/registry.js +289 -0
  275. package/dist/infrastructure/parser/registry.js.map +1 -0
  276. package/dist/infrastructure/parser/types.d.ts +172 -0
  277. package/dist/infrastructure/parser/types.d.ts.map +1 -0
  278. package/dist/infrastructure/parser/types.js +147 -0
  279. package/dist/infrastructure/parser/types.js.map +1 -0
  280. package/dist/infrastructure/storage/file-system.d.ts +74 -0
  281. package/dist/infrastructure/storage/file-system.d.ts.map +1 -0
  282. package/dist/infrastructure/storage/file-system.js +334 -0
  283. package/dist/infrastructure/storage/file-system.js.map +1 -0
  284. package/dist/infrastructure/storage/file-watcher.d.ts +84 -0
  285. package/dist/infrastructure/storage/file-watcher.d.ts.map +1 -0
  286. package/dist/infrastructure/storage/file-watcher.js +249 -0
  287. package/dist/infrastructure/storage/file-watcher.js.map +1 -0
  288. package/dist/infrastructure/storage/index.d.ts +11 -0
  289. package/dist/infrastructure/storage/index.d.ts.map +1 -0
  290. package/dist/infrastructure/storage/index.js +16 -0
  291. package/dist/infrastructure/storage/index.js.map +1 -0
  292. package/dist/infrastructure/storage/path-utils.d.ts +96 -0
  293. package/dist/infrastructure/storage/path-utils.d.ts.map +1 -0
  294. package/dist/infrastructure/storage/path-utils.js +272 -0
  295. package/dist/infrastructure/storage/path-utils.js.map +1 -0
  296. package/dist/infrastructure/storage/types.d.ts +106 -0
  297. package/dist/infrastructure/storage/types.d.ts.map +1 -0
  298. package/dist/infrastructure/storage/types.js +53 -0
  299. package/dist/infrastructure/storage/types.js.map +1 -0
  300. package/dist/interfaces/cli/cli.d.ts +70 -0
  301. package/dist/interfaces/cli/cli.d.ts.map +1 -0
  302. package/dist/interfaces/cli/cli.js +1054 -0
  303. package/dist/interfaces/cli/cli.js.map +1 -0
  304. package/dist/interfaces/cli/index.d.ts +7 -0
  305. package/dist/interfaces/cli/index.d.ts.map +1 -0
  306. package/dist/interfaces/cli/index.js +22 -0
  307. package/dist/interfaces/cli/index.js.map +1 -0
  308. package/dist/interfaces/mcp/index.d.ts +7 -0
  309. package/dist/interfaces/mcp/index.d.ts.map +1 -0
  310. package/dist/interfaces/mcp/index.js +6 -0
  311. package/dist/interfaces/mcp/index.js.map +1 -0
  312. package/dist/interfaces/mcp/mcp-server.d.ts +34 -0
  313. package/dist/interfaces/mcp/mcp-server.d.ts.map +1 -0
  314. package/dist/interfaces/mcp/mcp-server.js +154 -0
  315. package/dist/interfaces/mcp/mcp-server.js.map +1 -0
  316. package/dist/interfaces/mcp/mcp.d.ts +44 -0
  317. package/dist/interfaces/mcp/mcp.d.ts.map +1 -0
  318. package/dist/interfaces/mcp/mcp.js +559 -0
  319. package/dist/interfaces/mcp/mcp.js.map +1 -0
  320. package/dist/plugins/javascript/index.d.ts +12 -0
  321. package/dist/plugins/javascript/index.d.ts.map +1 -0
  322. package/dist/plugins/javascript/index.js +16 -0
  323. package/dist/plugins/javascript/index.js.map +1 -0
  324. package/dist/plugins/javascript/parser.d.ts +81 -0
  325. package/dist/plugins/javascript/parser.d.ts.map +1 -0
  326. package/dist/plugins/javascript/parser.js +457 -0
  327. package/dist/plugins/javascript/parser.js.map +1 -0
  328. package/dist/plugins/javascript/types.d.ts +131 -0
  329. package/dist/plugins/javascript/types.d.ts.map +1 -0
  330. package/dist/plugins/javascript/types.js +366 -0
  331. package/dist/plugins/javascript/types.js.map +1 -0
  332. package/dist/plugins/swift/index.d.ts +11 -0
  333. package/dist/plugins/swift/index.d.ts.map +1 -0
  334. package/dist/plugins/swift/index.js +15 -0
  335. package/dist/plugins/swift/index.js.map +1 -0
  336. package/dist/plugins/swift/parser.d.ts +98 -0
  337. package/dist/plugins/swift/parser.d.ts.map +1 -0
  338. package/dist/plugins/swift/parser.js +612 -0
  339. package/dist/plugins/swift/parser.js.map +1 -0
  340. package/dist/plugins/swift/types.d.ts +196 -0
  341. package/dist/plugins/swift/types.d.ts.map +1 -0
  342. package/dist/plugins/swift/types.js +268 -0
  343. package/dist/plugins/swift/types.js.map +1 -0
  344. package/dist/plugins/typescript/dependency-analyzer.d.ts +78 -0
  345. package/dist/plugins/typescript/dependency-analyzer.d.ts.map +1 -0
  346. package/dist/plugins/typescript/dependency-analyzer.js +305 -0
  347. package/dist/plugins/typescript/dependency-analyzer.js.map +1 -0
  348. package/dist/plugins/typescript/index.d.ts +9 -0
  349. package/dist/plugins/typescript/index.d.ts.map +1 -0
  350. package/dist/plugins/typescript/index.js +8 -0
  351. package/dist/plugins/typescript/index.js.map +1 -0
  352. package/dist/plugins/typescript/parser.d.ts +117 -0
  353. package/dist/plugins/typescript/parser.d.ts.map +1 -0
  354. package/dist/plugins/typescript/parser.js +888 -0
  355. package/dist/plugins/typescript/parser.js.map +1 -0
  356. package/dist/plugins/typescript/symbol-extractor.d.ts +76 -0
  357. package/dist/plugins/typescript/symbol-extractor.d.ts.map +1 -0
  358. package/dist/plugins/typescript/symbol-extractor.js +339 -0
  359. package/dist/plugins/typescript/symbol-extractor.js.map +1 -0
  360. package/dist/plugins/typescript/types.d.ts +131 -0
  361. package/dist/plugins/typescript/types.d.ts.map +1 -0
  362. package/dist/plugins/typescript/types.js +331 -0
  363. package/dist/plugins/typescript/types.js.map +1 -0
  364. package/dist/shared/errors/base-error.d.ts +27 -0
  365. package/dist/shared/errors/base-error.d.ts.map +1 -0
  366. package/dist/shared/errors/base-error.js +58 -0
  367. package/dist/shared/errors/base-error.js.map +1 -0
  368. package/dist/shared/errors/config-error.d.ts +21 -0
  369. package/dist/shared/errors/config-error.d.ts.map +1 -0
  370. package/dist/shared/errors/config-error.js +34 -0
  371. package/dist/shared/errors/config-error.js.map +1 -0
  372. package/dist/shared/errors/file-error.d.ts +21 -0
  373. package/dist/shared/errors/file-error.d.ts.map +1 -0
  374. package/dist/shared/errors/file-error.js +34 -0
  375. package/dist/shared/errors/file-error.js.map +1 -0
  376. package/dist/shared/errors/index.d.ts +59 -0
  377. package/dist/shared/errors/index.d.ts.map +1 -0
  378. package/dist/shared/errors/index.js +114 -0
  379. package/dist/shared/errors/index.js.map +1 -0
  380. package/dist/shared/errors/parser-error.d.ts +72 -0
  381. package/dist/shared/errors/parser-error.d.ts.map +1 -0
  382. package/dist/shared/errors/parser-error.js +104 -0
  383. package/dist/shared/errors/parser-error.js.map +1 -0
  384. package/dist/shared/errors/validation-error.d.ts +21 -0
  385. package/dist/shared/errors/validation-error.d.ts.map +1 -0
  386. package/dist/shared/errors/validation-error.js +34 -0
  387. package/dist/shared/errors/validation-error.js.map +1 -0
  388. package/dist/shared/index.d.ts +11 -0
  389. package/dist/shared/index.d.ts.map +1 -0
  390. package/dist/shared/index.js +22 -0
  391. package/dist/shared/index.js.map +1 -0
  392. package/dist/shared/types/ast.d.ts +78 -0
  393. package/dist/shared/types/ast.d.ts.map +1 -0
  394. package/dist/shared/types/ast.js +215 -0
  395. package/dist/shared/types/ast.js.map +1 -0
  396. package/dist/shared/types/core.d.ts +65 -0
  397. package/dist/shared/types/core.d.ts.map +1 -0
  398. package/dist/shared/types/core.js +114 -0
  399. package/dist/shared/types/core.js.map +1 -0
  400. package/dist/shared/types/index.d.ts +11 -0
  401. package/dist/shared/types/index.d.ts.map +1 -0
  402. package/dist/shared/types/index.js +12 -0
  403. package/dist/shared/types/index.js.map +1 -0
  404. package/dist/shared/types/symbol.d.ts +119 -0
  405. package/dist/shared/types/symbol.d.ts.map +1 -0
  406. package/dist/shared/types/symbol.js +197 -0
  407. package/dist/shared/types/symbol.js.map +1 -0
  408. package/dist/shared/utils/array.d.ts +68 -0
  409. package/dist/shared/utils/array.d.ts.map +1 -0
  410. package/dist/shared/utils/array.js +165 -0
  411. package/dist/shared/utils/array.js.map +1 -0
  412. package/dist/shared/utils/async.d.ts +87 -0
  413. package/dist/shared/utils/async.d.ts.map +1 -0
  414. package/dist/shared/utils/async.js +185 -0
  415. package/dist/shared/utils/async.js.map +1 -0
  416. package/dist/shared/utils/index.d.ts +32 -0
  417. package/dist/shared/utils/index.d.ts.map +1 -0
  418. package/dist/shared/utils/index.js +37 -0
  419. package/dist/shared/utils/index.js.map +1 -0
  420. package/dist/shared/utils/memory-monitor.d.ts +83 -0
  421. package/dist/shared/utils/memory-monitor.d.ts.map +1 -0
  422. package/dist/shared/utils/memory-monitor.js +168 -0
  423. package/dist/shared/utils/memory-monitor.js.map +1 -0
  424. package/dist/shared/utils/object.d.ts +71 -0
  425. package/dist/shared/utils/object.d.ts.map +1 -0
  426. package/dist/shared/utils/object.js +284 -0
  427. package/dist/shared/utils/object.js.map +1 -0
  428. package/dist/shared/utils/path.d.ts +59 -0
  429. package/dist/shared/utils/path.d.ts.map +1 -0
  430. package/dist/shared/utils/path.js +201 -0
  431. package/dist/shared/utils/path.js.map +1 -0
  432. package/dist/shared/utils/string.d.ts +74 -0
  433. package/dist/shared/utils/string.d.ts.map +1 -0
  434. package/dist/shared/utils/string.js +201 -0
  435. package/dist/shared/utils/string.js.map +1 -0
  436. package/package.json +81 -0
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Parser 工廠實作
3
+ * 負責建立和管理 Parser 實例,提供快取和配置管理功能
4
+ */
5
+ import { getFileExtension } from './interface.js';
6
+ import { ParserFactoryError } from '../../shared/errors/index.js';
7
+ /**
8
+ * Parser 工廠
9
+ * 負責建立 Parser 實例,提供快取和配置管理
10
+ */
11
+ export class ParserFactory {
12
+ registry;
13
+ /** Parser 實例快取 */
14
+ cache = new Map();
15
+ /** 延遲載入器映射 */
16
+ lazyLoaders = new Map();
17
+ /** 全域預設配置 */
18
+ globalDefaultOptions = {};
19
+ /** Parser 特定預設配置 */
20
+ parserDefaultOptions = new Map();
21
+ /** 最大快取大小 */
22
+ maxCacheSize = 50;
23
+ /** 是否已被清理 */
24
+ disposed = false;
25
+ constructor(registry) {
26
+ this.registry = registry;
27
+ if (!registry) {
28
+ throw new ParserFactoryError('ParserRegistry 不能為空');
29
+ }
30
+ }
31
+ // ===== Parser 建立 =====
32
+ /**
33
+ * 根據檔案路徑建立 Parser
34
+ * @param filePath 檔案路徑
35
+ * @param options 配置選項
36
+ * @returns Parser 實例或 null
37
+ */
38
+ createParser(filePath, options) {
39
+ this.checkNotDisposed();
40
+ const extension = getFileExtension(filePath);
41
+ return this.createParserByExtension(extension, options);
42
+ }
43
+ /**
44
+ * 根據副檔名建立 Parser
45
+ * @param extension 副檔名
46
+ * @param options 配置選項
47
+ * @returns Parser 實例或 null
48
+ */
49
+ createParserByExtension(extension, options) {
50
+ this.checkNotDisposed();
51
+ const parser = this.registry.getParser(extension);
52
+ if (!parser) {
53
+ return null;
54
+ }
55
+ return this.getCachedParser(parser.name, parser, options);
56
+ }
57
+ /**
58
+ * 根據語言建立 Parser
59
+ * @param language 語言名稱
60
+ * @param options 配置選項
61
+ * @returns Parser 實例或 null
62
+ */
63
+ createParserByLanguage(language, options) {
64
+ this.checkNotDisposed();
65
+ const parser = this.registry.getParserByLanguage(language);
66
+ if (!parser) {
67
+ return null;
68
+ }
69
+ return this.getCachedParser(parser.name, parser, options);
70
+ }
71
+ /**
72
+ * 根據 Parser 名稱建立 Parser
73
+ * @param name Parser 名稱
74
+ * @param options 配置選項
75
+ * @returns Parser 實例或 null
76
+ */
77
+ createParserByName(name, options) {
78
+ this.checkNotDisposed();
79
+ const parser = this.registry.getParserByName(name);
80
+ if (!parser) {
81
+ return null;
82
+ }
83
+ return this.getCachedParser(name, parser, options);
84
+ }
85
+ // ===== 延遲載入 =====
86
+ /**
87
+ * 註冊延遲載入器
88
+ * @param parserName Parser 名稱
89
+ * @param loader 載入器函式
90
+ */
91
+ registerLazyParser(parserName, loader) {
92
+ this.checkNotDisposed();
93
+ this.lazyLoaders.set(parserName, loader);
94
+ }
95
+ /**
96
+ * 延遲建立 Parser
97
+ * @param filePath 檔案路徑
98
+ * @param options 配置選項
99
+ * @returns Parser 實例或 null
100
+ */
101
+ async createParserLazy(filePath, options) {
102
+ this.checkNotDisposed();
103
+ const extension = getFileExtension(filePath);
104
+ // 先嘗試從註冊中心獲取
105
+ const parser = this.registry.getParser(extension);
106
+ if (parser) {
107
+ return this.getCachedParser(parser.name, parser, options);
108
+ }
109
+ // 嘗試延遲載入
110
+ for (const [parserName, loader] of this.lazyLoaders.entries()) {
111
+ try {
112
+ const lazyParser = await loader();
113
+ if (lazyParser.supportedExtensions.includes(extension)) {
114
+ // 註冊到註冊中心
115
+ this.registry.register(lazyParser);
116
+ return this.getCachedParser(parserName, lazyParser, options);
117
+ }
118
+ }
119
+ catch (error) {
120
+ console.warn(`延遲載入 Parser ${parserName} 失敗:`, error);
121
+ }
122
+ }
123
+ return null;
124
+ }
125
+ // ===== 快取管理 =====
126
+ /**
127
+ * 獲取快取的 Parser 實例
128
+ * @param name Parser 名稱
129
+ * @param parser Parser 實例
130
+ * @param options 配置選項
131
+ * @returns Parser 實例
132
+ */
133
+ getCachedParser(name, parser, options) {
134
+ const mergedOptions = this.getMergedOptions(name, options);
135
+ const cacheKey = this.buildCacheKey(name, mergedOptions);
136
+ // 檢查快取
137
+ const cached = this.cache.get(cacheKey);
138
+ if (cached) {
139
+ cached.lastAccessed = new Date();
140
+ return cached.parser;
141
+ }
142
+ // 檢查快取大小限制
143
+ if (this.cache.size >= this.maxCacheSize) {
144
+ this.evictOldestCacheItem();
145
+ }
146
+ // 建立新的快取項目
147
+ const cacheItem = {
148
+ parser,
149
+ lastAccessed: new Date(),
150
+ options: mergedOptions || undefined
151
+ };
152
+ this.cache.set(cacheKey, cacheItem);
153
+ return parser;
154
+ }
155
+ /**
156
+ * 建立快取鍵
157
+ * @param name Parser 名稱
158
+ * @param options 配置選項
159
+ * @returns 快取鍵
160
+ */
161
+ buildCacheKey(name, options) {
162
+ if (!options) {
163
+ return name;
164
+ }
165
+ // 將配置選項序列化為字串
166
+ const optionsStr = JSON.stringify(options, Object.keys(options).sort());
167
+ return `${name}:${optionsStr}`;
168
+ }
169
+ /**
170
+ * 移除最久未使用的快取項目 (LRU)
171
+ */
172
+ evictOldestCacheItem() {
173
+ let oldestKey = null;
174
+ let oldestTime = null;
175
+ for (const [key, item] of this.cache.entries()) {
176
+ if (!oldestTime || item.lastAccessed < oldestTime) {
177
+ oldestTime = item.lastAccessed;
178
+ oldestKey = key;
179
+ }
180
+ }
181
+ if (oldestKey) {
182
+ this.cache.delete(oldestKey);
183
+ }
184
+ }
185
+ /**
186
+ * 清除快取
187
+ * @param parserName 可選,指定清除特定 Parser 的快取
188
+ */
189
+ clearCache(parserName) {
190
+ this.checkNotDisposed();
191
+ if (!parserName) {
192
+ this.cache.clear();
193
+ return;
194
+ }
195
+ // 清除指定 Parser 的所有快取項目
196
+ const keysToDelete = [];
197
+ for (const key of this.cache.keys()) {
198
+ if (key.startsWith(parserName + ':') || key === parserName) {
199
+ keysToDelete.push(key);
200
+ }
201
+ }
202
+ keysToDelete.forEach(key => this.cache.delete(key));
203
+ }
204
+ /**
205
+ * 設定最大快取大小
206
+ * @param size 快取大小
207
+ */
208
+ setMaxCacheSize(size) {
209
+ if (size <= 0) {
210
+ throw new ParserFactoryError('快取大小必須大於 0');
211
+ }
212
+ this.maxCacheSize = size;
213
+ // 如果當前快取超出大小限制,移除舊項目
214
+ while (this.cache.size > this.maxCacheSize) {
215
+ this.evictOldestCacheItem();
216
+ }
217
+ }
218
+ /**
219
+ * 獲取快取大小
220
+ */
221
+ getCacheSize() {
222
+ return this.cache.size;
223
+ }
224
+ /**
225
+ * 獲取已快取的 Parser 名稱
226
+ */
227
+ getCachedParsers() {
228
+ const parserNames = new Set();
229
+ for (const key of this.cache.keys()) {
230
+ const parserName = key.split(':')[0];
231
+ parserNames.add(parserName);
232
+ }
233
+ return Array.from(parserNames).sort();
234
+ }
235
+ // ===== 配置管理 =====
236
+ /**
237
+ * 設定全域預設配置
238
+ * @param options 配置選項
239
+ */
240
+ setDefaultOptions(options) {
241
+ this.checkNotDisposed();
242
+ this.globalDefaultOptions = { ...options };
243
+ }
244
+ /**
245
+ * 設定特定 Parser 的預設配置
246
+ * @param parserName Parser 名稱
247
+ * @param options 配置選項
248
+ */
249
+ setParserOptions(parserName, options) {
250
+ this.checkNotDisposed();
251
+ this.parserDefaultOptions.set(parserName, { ...options });
252
+ }
253
+ /**
254
+ * 獲取合併後的配置選項
255
+ * @param parserName Parser 名稱
256
+ * @param options 用戶提供的配置選項
257
+ * @returns 合併後的配置選項
258
+ */
259
+ getMergedOptions(parserName, options) {
260
+ const parserDefaults = this.parserDefaultOptions.get(parserName) || {};
261
+ return {
262
+ ...this.globalDefaultOptions,
263
+ ...parserDefaults,
264
+ ...options
265
+ };
266
+ }
267
+ // ===== 生命週期管理 =====
268
+ /**
269
+ * 清理工廠
270
+ * 清理所有快取並釋放資源
271
+ */
272
+ async dispose() {
273
+ if (this.disposed) {
274
+ return;
275
+ }
276
+ // 清理快取中的所有 Parser
277
+ const disposePromises = [];
278
+ for (const cacheItem of this.cache.values()) {
279
+ disposePromises.push(cacheItem.parser.dispose().catch(error => {
280
+ console.warn('清理快取中的 Parser 時發生錯誤:', error);
281
+ }));
282
+ }
283
+ await Promise.all(disposePromises);
284
+ // 清空所有映射表
285
+ this.cache.clear();
286
+ this.lazyLoaders.clear();
287
+ this.parserDefaultOptions.clear();
288
+ this.disposed = true;
289
+ }
290
+ // ===== 內部工具方法 =====
291
+ /**
292
+ * 檢查工廠是否已被清理
293
+ */
294
+ checkNotDisposed() {
295
+ if (this.disposed) {
296
+ throw new ParserFactoryError('Factory已被清理');
297
+ }
298
+ }
299
+ /**
300
+ * 獲取清理狀態
301
+ */
302
+ get isDisposed() {
303
+ return this.disposed;
304
+ }
305
+ }
306
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/infrastructure/parser/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAqBlE;;;GAGG;AACH,MAAM,OAAO,aAAa;IAmBK;IAlB7B,kBAAkB;IACD,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAEtD,cAAc;IACG,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IAErE,aAAa;IACL,oBAAoB,GAAkB,EAAE,CAAC;IAEjD,oBAAoB;IACH,oBAAoB,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEzE,aAAa;IACL,YAAY,GAAG,EAAE,CAAC;IAE1B,aAAa;IACL,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAA6B,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,wBAAwB;IAExB;;;;;OAKG;IACH,YAAY,CAAC,QAAgB,EAAE,OAAuB;QACpD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,SAAiB,EAAE,OAAuB;QAChE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,QAAgB,EAAE,OAAuB;QAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACH,kBAAkB,CAAC,IAAY,EAAE,OAAuB;QACtD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,mBAAmB;IAEnB;;;;OAIG;IACH,kBAAkB,CAAC,UAAkB,EAAE,MAA0B;QAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,OAAuB;QAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE7C,aAAa;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC;QAED,SAAS;QACT,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9D,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,MAAM,EAAE,CAAC;gBAClC,IAAI,UAAU,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvD,UAAU;oBACV,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACnC,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,eAAe,UAAU,MAAM,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB;IAEnB;;;;;;OAMG;IACK,eAAe,CAAC,IAAY,EAAE,MAAoB,EAAE,OAAuB;QACjF,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAEzD,OAAO;QACP,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,WAAW;QACX,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;QAED,WAAW;QACX,MAAM,SAAS,GAAc;YAC3B,MAAM;YACN,YAAY,EAAE,IAAI,IAAI,EAAE;YACxB,OAAO,EAAE,aAAa,IAAI,SAAS;SACpC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,IAAY,EAAE,OAAuB;QACzD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,cAAc;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,OAAO,GAAG,IAAI,IAAI,UAAU,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,UAAU,GAAgB,IAAI,CAAC;QAEnC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,GAAG,UAAU,EAAE,CAAC;gBAClD,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC/B,SAAS,GAAG,GAAG,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,UAAmB;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC3D,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,IAAY;QAC1B,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,qBAAqB;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QAEtC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,mBAAmB;IAEnB;;;OAGG;IACH,iBAAiB,CAAC,OAAsB;QACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,UAAkB,EAAE,OAAsB;QACzD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACK,gBAAgB,CAAC,UAAkB,EAAE,OAAuB;QAClE,MAAM,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAEvE,OAAO;YACL,GAAG,IAAI,CAAC,oBAAoB;YAC5B,GAAG,cAAc;YACjB,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,qBAAqB;IAErB;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,MAAM,eAAe,GAAoB,EAAE,CAAC;QAE5C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,eAAe,CAAC,IAAI,CAClB,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACvC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAEnC,UAAU;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAElC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,qBAAqB;IAErB;;OAEG;IACK,gBAAgB;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Parser 基礎設施統一匯出
3
+ */
4
+ export { ParserPlugin, isParserPlugin, supportsExtension, supportsLanguage, getFileExtension, findPluginForFile } from './interface.js';
5
+ export type { CodeEdit, Definition, Usage, ValidationResult, ParserOptions, ParserCapabilities, DefinitionKind, UsageKind, ValidationError as ParserValidationError, ValidationWarning } from './types.js';
6
+ export { createCodeEdit, createDefinition, createUsage, createValidationResult, createValidationSuccess, createValidationFailure, isCodeEdit, isDefinition, isUsage, isValidationResult, isParserCapabilities } from './types.js';
7
+ export { BaseParserPlugin } from './base.js';
8
+ export { ParserRegistry } from './registry.js';
9
+ export type { ParserInfo, ParserRegistrationOptions } from './registry.js';
10
+ export { ParserFactory } from './factory.js';
11
+ export type { LazyLoaderFunction } from './factory.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxI,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,IAAI,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC3M,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlO,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Parser 基礎設施統一匯出
3
+ */
4
+ // 匯出所有接口和型別
5
+ export { isParserPlugin, supportsExtension, supportsLanguage, getFileExtension, findPluginForFile } from './interface.js';
6
+ export { createCodeEdit, createDefinition, createUsage, createValidationResult, createValidationSuccess, createValidationFailure, isCodeEdit, isDefinition, isUsage, isValidationResult, isParserCapabilities } from './types.js';
7
+ // 匯出基礎實作
8
+ export { BaseParserPlugin } from './base.js';
9
+ // 匯出註冊中心和工廠
10
+ export { ParserRegistry } from './registry.js';
11
+ export { ParserFactory } from './factory.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY;AACZ,OAAO,EAAgB,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExI,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElO,SAAS;AACT,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Parser 插件介面定義
3
+ * 定義所有 Parser 插件必須實作的契約
4
+ */
5
+ import type { AST, Symbol, Reference, Dependency, Position, Range } from '../../shared/types/index.js';
6
+ import type { CodeEdit, Definition, Usage, ValidationResult } from './types.js';
7
+ /**
8
+ * Parser 插件主介面
9
+ * 所有 Parser 插件都必須實作此介面
10
+ */
11
+ export interface ParserPlugin {
12
+ /** 插件名稱 */
13
+ readonly name: string;
14
+ /** 插件版本 */
15
+ readonly version: string;
16
+ /** 支援的副檔名列表 */
17
+ readonly supportedExtensions: readonly string[];
18
+ /** 支援的語言列表 */
19
+ readonly supportedLanguages: readonly string[];
20
+ /**
21
+ * 解析程式碼並生成 AST
22
+ * @param code 原始程式碼
23
+ * @param filePath 檔案路徑
24
+ * @returns 解析後的 AST
25
+ * @throws ParseError 當解析失敗時
26
+ */
27
+ parse(code: string, filePath: string): Promise<AST>;
28
+ /**
29
+ * 從 AST 中提取所有符號
30
+ * @param ast AST 物件
31
+ * @returns 符號列表
32
+ */
33
+ extractSymbols(ast: AST): Promise<Symbol[]>;
34
+ /**
35
+ * 查找符號的所有引用
36
+ * @param ast AST 物件
37
+ * @param symbol 目標符號
38
+ * @returns 引用列表
39
+ */
40
+ findReferences(ast: AST, symbol: Symbol): Promise<Reference[]>;
41
+ /**
42
+ * 從 AST 中提取所有依賴關係
43
+ * @param ast AST 物件
44
+ * @returns 依賴列表
45
+ */
46
+ extractDependencies(ast: AST): Promise<Dependency[]>;
47
+ /**
48
+ * 重新命名符號
49
+ * @param ast AST 物件
50
+ * @param position 重命名位置
51
+ * @param newName 新名稱
52
+ * @returns 程式碼編輯操作列表
53
+ */
54
+ rename(ast: AST, position: Position, newName: string): Promise<CodeEdit[]>;
55
+ /**
56
+ * 提取函式重構
57
+ * @param ast AST 物件
58
+ * @param selection 選取的程式碼範圍
59
+ * @returns 程式碼編輯操作列表
60
+ */
61
+ extractFunction(ast: AST, selection: Range): Promise<CodeEdit[]>;
62
+ /**
63
+ * 查找符號定義
64
+ * @param ast AST 物件
65
+ * @param position 查找位置
66
+ * @returns 定義資訊,如果找不到則返回 null
67
+ */
68
+ findDefinition(ast: AST, position: Position): Promise<Definition | null>;
69
+ /**
70
+ * 查找符號的所有使用位置
71
+ * @param ast AST 物件
72
+ * @param symbol 目標符號
73
+ * @returns 使用位置列表
74
+ */
75
+ findUsages(ast: AST, symbol: Symbol): Promise<Usage[]>;
76
+ /**
77
+ * 驗證插件狀態
78
+ * @returns 驗證結果
79
+ */
80
+ validate(): Promise<ValidationResult>;
81
+ /**
82
+ * 清理資源
83
+ * 應該釋放插件使用的所有資源
84
+ */
85
+ dispose(): Promise<void>;
86
+ }
87
+ /**
88
+ * Parser 插件型別守衛
89
+ * 檢查物件是否實作了 ParserPlugin 介面
90
+ */
91
+ export declare function isParserPlugin(value: unknown): value is ParserPlugin;
92
+ /**
93
+ * 檢查插件是否支援特定副檔名
94
+ */
95
+ export declare function supportsExtension(plugin: ParserPlugin, extension: string): boolean;
96
+ /**
97
+ * 檢查插件是否支援特定語言
98
+ */
99
+ export declare function supportsLanguage(plugin: ParserPlugin, language: string): boolean;
100
+ /**
101
+ * 從檔案路徑獲取副檔名
102
+ */
103
+ export declare function getFileExtension(filePath: string): string;
104
+ /**
105
+ * 查找可以處理特定檔案的插件
106
+ */
107
+ export declare function findPluginForFile(plugins: ParserPlugin[], filePath: string): ParserPlugin | null;
108
+ //# sourceMappingURL=interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/parser/interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,YAAY;IAG3B,WAAW;IACX,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,WAAW;IACX,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,eAAe;IACf,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAEhD,cAAc;IACd,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAI/C;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpD;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE5C;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE/D;;;;OAIG;IACH,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAIrD;;;;;;OAMG;IACH,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE3E;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAIjE;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAEzE;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAIvD;;;OAGG;IACH,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEtC;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAsCpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAElF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,EAAE,MAAM,GACf,YAAY,GAAG,IAAI,CAUrB"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Parser 插件介面定義
3
+ * 定義所有 Parser 插件必須實作的契約
4
+ */
5
+ /**
6
+ * Parser 插件型別守衛
7
+ * 檢查物件是否實作了 ParserPlugin 介面
8
+ */
9
+ export function isParserPlugin(value) {
10
+ if (!value || typeof value !== 'object') {
11
+ return false;
12
+ }
13
+ const obj = value;
14
+ // 檢查基本屬性
15
+ if (typeof obj.name !== 'string' ||
16
+ typeof obj.version !== 'string' ||
17
+ !Array.isArray(obj.supportedExtensions) ||
18
+ !Array.isArray(obj.supportedLanguages)) {
19
+ return false;
20
+ }
21
+ // 檢查必要方法存在且為函式
22
+ const requiredMethods = [
23
+ 'parse',
24
+ 'extractSymbols',
25
+ 'findReferences',
26
+ 'extractDependencies',
27
+ 'rename',
28
+ 'extractFunction',
29
+ 'findDefinition',
30
+ 'findUsages',
31
+ 'validate',
32
+ 'dispose'
33
+ ];
34
+ for (const method of requiredMethods) {
35
+ if (typeof obj[method] !== 'function') {
36
+ return false;
37
+ }
38
+ }
39
+ return true;
40
+ }
41
+ /**
42
+ * 檢查插件是否支援特定副檔名
43
+ */
44
+ export function supportsExtension(plugin, extension) {
45
+ return plugin.supportedExtensions.includes(extension);
46
+ }
47
+ /**
48
+ * 檢查插件是否支援特定語言
49
+ */
50
+ export function supportsLanguage(plugin, language) {
51
+ return plugin.supportedLanguages.includes(language);
52
+ }
53
+ /**
54
+ * 從檔案路徑獲取副檔名
55
+ */
56
+ export function getFileExtension(filePath) {
57
+ const lastDot = filePath.lastIndexOf('.');
58
+ return lastDot === -1 ? '' : filePath.substring(lastDot);
59
+ }
60
+ /**
61
+ * 查找可以處理特定檔案的插件
62
+ */
63
+ export function findPluginForFile(plugins, filePath) {
64
+ const extension = getFileExtension(filePath);
65
+ for (const plugin of plugins) {
66
+ if (supportsExtension(plugin, extension)) {
67
+ return plugin;
68
+ }
69
+ }
70
+ return null;
71
+ }
72
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/infrastructure/parser/interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6GH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,KAAgC,CAAC;IAE7C,SAAS;IACT,IACE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACvC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EACtC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,eAAe;IACf,MAAM,eAAe,GAAG;QACtB,OAAO;QACP,gBAAgB;QAChB,gBAAgB;QAChB,qBAAqB;QACrB,QAAQ;QACR,iBAAiB;QACjB,gBAAgB;QAChB,YAAY;QACZ,UAAU;QACV,SAAS;KACV,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB,EAAE,SAAiB;IACvE,OAAQ,MAAM,CAAC,mBAAgC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB,EAAE,QAAgB;IACrE,OAAQ,MAAM,CAAC,kBAA+B,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAuB,EACvB,QAAgB;IAEhB,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;YACzC,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Parser 註冊中心實作
3
+ * 負責管理所有 Parser 插件的註冊、查詢和生命週期
4
+ */
5
+ import type { ParserPlugin } from './interface.js';
6
+ /**
7
+ * Parser 資訊
8
+ * 包含註冊時的元數據和優先級資訊
9
+ */
10
+ export interface ParserInfo {
11
+ /** Parser 插件實例 */
12
+ readonly plugin: ParserPlugin;
13
+ /** 註冊時間 */
14
+ readonly registeredAt: Date;
15
+ /** 優先級(數字越大優先級越高) */
16
+ readonly priority: number;
17
+ /** Parser 名稱 */
18
+ readonly name: string;
19
+ /** Parser 版本 */
20
+ readonly version: string;
21
+ /** 支援的副檔名 */
22
+ readonly supportedExtensions: readonly string[];
23
+ /** 支援的語言 */
24
+ readonly supportedLanguages: readonly string[];
25
+ }
26
+ /**
27
+ * Parser 註冊選項
28
+ */
29
+ export interface ParserRegistrationOptions {
30
+ /** 優先級(預設為 0) */
31
+ priority?: number;
32
+ /** 是否覆蓋已存在的 Parser(預設 false) */
33
+ override?: boolean;
34
+ }
35
+ /**
36
+ * Parser 註冊中心
37
+ * 單例模式,管理所有 Parser 插件的註冊和查詢
38
+ */
39
+ export declare class ParserRegistry {
40
+ private static instance;
41
+ /** 以 Parser 名稱為 key 的註冊表 */
42
+ private readonly parsers;
43
+ /** 以副檔名為 key 的快速查找表 */
44
+ private readonly extensionMap;
45
+ /** 以語言為 key 的快速查找表 */
46
+ private readonly languageMap;
47
+ /** 是否已初始化 */
48
+ private initialized;
49
+ /** 是否已被清理 */
50
+ private disposed;
51
+ /**
52
+ * 私有建構函式,確保單例模式
53
+ */
54
+ private constructor();
55
+ /**
56
+ * 獲取單例實例
57
+ */
58
+ static getInstance(): ParserRegistry;
59
+ /**
60
+ * 重設單例實例(主要用於測試)
61
+ */
62
+ static resetInstance(): void;
63
+ /**
64
+ * 註冊 Parser 插件
65
+ * @param plugin Parser 插件實例
66
+ * @param options 註冊選項
67
+ */
68
+ register(plugin: ParserPlugin, options?: ParserRegistrationOptions): void;
69
+ /**
70
+ * 取消註冊 Parser 插件
71
+ * @param pluginName Parser 名稱
72
+ */
73
+ unregister(pluginName: string): void;
74
+ /**
75
+ * 根據副檔名獲取最高優先級的 Parser
76
+ * @param extension 副檔名(包含點,如 '.ts')
77
+ * @returns Parser 插件實例或 null
78
+ */
79
+ getParser(extension: string): ParserPlugin | null;
80
+ /**
81
+ * 根據語言獲取最高優先級的 Parser
82
+ * @param language 語言名稱
83
+ * @returns Parser 插件實例或 null
84
+ */
85
+ getParserByLanguage(language: string): ParserPlugin | null;
86
+ /**
87
+ * 根據 Parser 名稱獲取 Parser
88
+ * @param name Parser 名稱
89
+ * @returns Parser 插件實例或 null
90
+ */
91
+ getParserByName(name: string): ParserPlugin | null;
92
+ /**
93
+ * 獲取所有支援的副檔名
94
+ * @returns 副檔名陣列
95
+ */
96
+ getSupportedExtensions(): string[];
97
+ /**
98
+ * 獲取所有支援的語言
99
+ * @returns 語言陣列
100
+ */
101
+ getSupportedLanguages(): string[];
102
+ /**
103
+ * 列出所有已註冊的 Parser
104
+ * @returns Parser 資訊陣列
105
+ */
106
+ listParsers(): ParserInfo[];
107
+ /**
108
+ * 檢查 Parser 版本相容性
109
+ * @param pluginName Parser 名稱
110
+ * @param version 期望版本
111
+ * @returns 是否相容
112
+ */
113
+ isCompatible(pluginName: string, version: string): boolean;
114
+ /**
115
+ * 初始化註冊中心
116
+ * 驗證所有已註冊的 Parser
117
+ */
118
+ initialize(): Promise<void>;
119
+ /**
120
+ * 清理註冊中心
121
+ * 清理所有 Parser 並釋放資源
122
+ */
123
+ dispose(): Promise<void>;
124
+ /**
125
+ * 檢查註冊中心是否已被清理
126
+ */
127
+ private checkNotDisposed;
128
+ /**
129
+ * 獲取初始化狀態
130
+ */
131
+ get isInitialized(): boolean;
132
+ /**
133
+ * 獲取清理狀態
134
+ */
135
+ get isDisposed(): boolean;
136
+ /**
137
+ * 獲取已註冊 Parser 的數量
138
+ */
139
+ get size(): number;
140
+ }
141
+ //# sourceMappingURL=registry.d.ts.map