agent-ide 0.2.0 → 0.4.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 (543) hide show
  1. package/README.md +29 -355
  2. package/dist/application/events/event-bus.d.ts.map +1 -1
  3. package/dist/application/events/event-bus.js.map +1 -1
  4. package/dist/application/index.d.ts +3 -1
  5. package/dist/application/index.d.ts.map +1 -1
  6. package/dist/application/index.js +10 -5
  7. package/dist/application/index.js.map +1 -1
  8. package/dist/application/services/cache-coordinator.service.d.ts.map +1 -1
  9. package/dist/application/services/cache-coordinator.service.js.map +1 -1
  10. package/dist/application/services/error-handler.service.d.ts.map +1 -1
  11. package/dist/application/services/error-handler.service.js.map +1 -1
  12. package/dist/application/services/module-coordinator.service.d.ts +5 -14
  13. package/dist/application/services/module-coordinator.service.d.ts.map +1 -1
  14. package/dist/application/services/module-coordinator.service.js +15 -108
  15. package/dist/application/services/module-coordinator.service.js.map +1 -1
  16. package/dist/application/services/session-manager.service.d.ts.map +1 -1
  17. package/dist/application/services/session-manager.service.js.map +1 -1
  18. package/dist/application/services/workflow-engine.service.d.ts +1 -1
  19. package/dist/application/services/workflow-engine.service.d.ts.map +1 -1
  20. package/dist/application/services/workflow-engine.service.js.map +1 -1
  21. package/dist/application/state/state-manager.d.ts +3 -3
  22. package/dist/application/state/state-manager.d.ts.map +1 -1
  23. package/dist/application/state/state-manager.js +3 -3
  24. package/dist/application/state/state-manager.js.map +1 -1
  25. package/dist/application/types.d.ts.map +1 -1
  26. package/dist/application/workflows/analysis-workflow.d.ts +1 -1
  27. package/dist/application/workflows/analysis-workflow.d.ts.map +1 -1
  28. package/dist/application/workflows/analysis-workflow.js +1 -1
  29. package/dist/application/workflows/analysis-workflow.js.map +1 -1
  30. package/dist/application/workflows/base-workflow.d.ts.map +1 -1
  31. package/dist/application/workflows/base-workflow.js.map +1 -1
  32. package/dist/application/workflows/index.d.ts +2 -2
  33. package/dist/application/workflows/index.d.ts.map +1 -1
  34. package/dist/application/workflows/index.js +2 -2
  35. package/dist/application/workflows/index.js.map +1 -1
  36. package/dist/application/workflows/refactor-workflow.d.ts +1 -1
  37. package/dist/application/workflows/refactor-workflow.d.ts.map +1 -1
  38. package/dist/application/workflows/refactor-workflow.js +1 -1
  39. package/dist/application/workflows/refactor-workflow.js.map +1 -1
  40. package/dist/core/change-signature/change-signature-service.d.ts +94 -0
  41. package/dist/core/change-signature/change-signature-service.d.ts.map +1 -0
  42. package/dist/core/change-signature/change-signature-service.js +544 -0
  43. package/dist/core/change-signature/change-signature-service.js.map +1 -0
  44. package/dist/core/change-signature/index.d.ts +10 -0
  45. package/dist/core/change-signature/index.d.ts.map +1 -0
  46. package/dist/core/change-signature/index.js +12 -0
  47. package/dist/core/change-signature/index.js.map +1 -0
  48. package/dist/core/change-signature/signature-parser.d.ts +76 -0
  49. package/dist/core/change-signature/signature-parser.d.ts.map +1 -0
  50. package/dist/core/change-signature/signature-parser.js +387 -0
  51. package/dist/core/change-signature/signature-parser.js.map +1 -0
  52. package/dist/core/change-signature/types.d.ts +244 -0
  53. package/dist/core/change-signature/types.d.ts.map +1 -0
  54. package/dist/core/change-signature/types.js +73 -0
  55. package/dist/core/change-signature/types.js.map +1 -0
  56. package/dist/core/dependency/cycle-detector.d.ts +1 -1
  57. package/dist/core/dependency/cycle-detector.d.ts.map +1 -1
  58. package/dist/core/dependency/cycle-detector.js +1 -1
  59. package/dist/core/dependency/cycle-detector.js.map +1 -1
  60. package/dist/core/dependency/dependency-analyzer.d.ts +3 -1
  61. package/dist/core/dependency/dependency-analyzer.d.ts.map +1 -1
  62. package/dist/core/dependency/dependency-analyzer.js +25 -24
  63. package/dist/core/dependency/dependency-analyzer.js.map +1 -1
  64. package/dist/core/dependency/types.d.ts.map +1 -1
  65. package/dist/core/indexing/file-index.d.ts.map +1 -1
  66. package/dist/core/indexing/file-index.js +1 -1
  67. package/dist/core/indexing/file-index.js.map +1 -1
  68. package/dist/core/indexing/index-engine.d.ts +3 -1
  69. package/dist/core/indexing/index-engine.d.ts.map +1 -1
  70. package/dist/core/indexing/index-engine.js +25 -17
  71. package/dist/core/indexing/index-engine.js.map +1 -1
  72. package/dist/core/indexing/index.d.ts +1 -9
  73. package/dist/core/indexing/index.d.ts.map +1 -1
  74. package/dist/core/indexing/index.js +2 -12
  75. package/dist/core/indexing/index.js.map +1 -1
  76. package/dist/core/indexing/symbol-index.d.ts.map +1 -1
  77. package/dist/core/indexing/types.d.ts +12 -0
  78. package/dist/core/indexing/types.d.ts.map +1 -1
  79. package/dist/core/indexing/types.js +12 -0
  80. package/dist/core/indexing/types.js.map +1 -1
  81. package/dist/core/move-file/import-resolver.d.ts.map +1 -0
  82. package/dist/core/{move → move-file}/import-resolver.js +9 -10
  83. package/dist/core/move-file/import-resolver.js.map +1 -0
  84. package/dist/core/{move → move-file}/index.d.ts +2 -2
  85. package/dist/core/move-file/index.d.ts.map +1 -0
  86. package/dist/core/{move → move-file}/index.js +2 -2
  87. package/dist/core/move-file/index.js.map +1 -0
  88. package/dist/core/{move → move-file}/move-service.d.ts +3 -1
  89. package/dist/core/move-file/move-service.d.ts.map +1 -0
  90. package/dist/core/{move → move-file}/move-service.js +66 -84
  91. package/dist/core/move-file/move-service.js.map +1 -0
  92. package/dist/core/move-file/types.d.ts.map +1 -0
  93. package/dist/core/move-file/types.js.map +1 -0
  94. package/dist/core/move-member/index.d.ts +10 -0
  95. package/dist/core/move-member/index.d.ts.map +1 -0
  96. package/dist/core/move-member/index.js +12 -0
  97. package/dist/core/move-member/index.js.map +1 -0
  98. package/dist/core/move-member/member-extractor.d.ts +96 -0
  99. package/dist/core/move-member/member-extractor.d.ts.map +1 -0
  100. package/dist/core/move-member/member-extractor.js +439 -0
  101. package/dist/core/move-member/member-extractor.js.map +1 -0
  102. package/dist/core/move-member/move-member-service.d.ts +87 -0
  103. package/dist/core/move-member/move-member-service.d.ts.map +1 -0
  104. package/dist/core/move-member/move-member-service.js +412 -0
  105. package/dist/core/move-member/move-member-service.js.map +1 -0
  106. package/dist/core/move-member/types.d.ts +182 -0
  107. package/dist/core/move-member/types.d.ts.map +1 -0
  108. package/dist/core/move-member/types.js +75 -0
  109. package/dist/core/move-member/types.js.map +1 -0
  110. package/dist/core/rename/index.d.ts +3 -3
  111. package/dist/core/rename/index.d.ts.map +1 -1
  112. package/dist/core/rename/index.js +5 -3
  113. package/dist/core/rename/index.js.map +1 -1
  114. package/dist/core/rename/reference-updater.d.ts +3 -1
  115. package/dist/core/rename/reference-updater.d.ts.map +1 -1
  116. package/dist/core/rename/reference-updater.js +9 -6
  117. package/dist/core/rename/reference-updater.js.map +1 -1
  118. package/dist/core/rename/rename-engine.d.ts +3 -1
  119. package/dist/core/rename/rename-engine.d.ts.map +1 -1
  120. package/dist/core/rename/rename-engine.js +8 -5
  121. package/dist/core/rename/rename-engine.js.map +1 -1
  122. package/dist/core/rename/scope-analyzer.d.ts.map +1 -1
  123. package/dist/core/rename/scope-analyzer.js.map +1 -1
  124. package/dist/core/rename/types.d.ts.map +1 -1
  125. package/dist/core/shared/call-hierarchy-analyzer.d.ts +102 -0
  126. package/dist/core/shared/call-hierarchy-analyzer.d.ts.map +1 -0
  127. package/dist/core/shared/call-hierarchy-analyzer.js +328 -0
  128. package/dist/core/shared/call-hierarchy-analyzer.js.map +1 -0
  129. package/dist/core/shared/index.d.ts +7 -0
  130. package/dist/core/shared/index.d.ts.map +1 -0
  131. package/dist/core/shared/index.js +7 -0
  132. package/dist/core/shared/index.js.map +1 -0
  133. package/dist/core/shared/symbol-finder.d.ts +154 -0
  134. package/dist/core/shared/symbol-finder.d.ts.map +1 -0
  135. package/dist/core/shared/symbol-finder.js +433 -0
  136. package/dist/core/shared/symbol-finder.js.map +1 -0
  137. package/dist/core/snapshot/index.d.ts +3 -19
  138. package/dist/core/snapshot/index.d.ts.map +1 -1
  139. package/dist/core/snapshot/index.js +2 -23
  140. package/dist/core/snapshot/index.js.map +1 -1
  141. package/dist/core/snapshot/snapshot-generator.d.ts +66 -0
  142. package/dist/core/snapshot/snapshot-generator.d.ts.map +1 -0
  143. package/dist/core/snapshot/snapshot-generator.js +258 -0
  144. package/dist/core/snapshot/snapshot-generator.js.map +1 -0
  145. package/dist/core/snapshot/types.d.ts +41 -190
  146. package/dist/core/snapshot/types.d.ts.map +1 -1
  147. package/dist/core/snapshot/types.js +13 -67
  148. package/dist/core/snapshot/types.js.map +1 -1
  149. package/dist/infrastructure/cache/cache-manager.d.ts +1 -1
  150. package/dist/infrastructure/cache/cache-manager.d.ts.map +1 -1
  151. package/dist/infrastructure/cache/cache-manager.js +1 -1
  152. package/dist/infrastructure/cache/cache-manager.js.map +1 -1
  153. package/dist/infrastructure/cache/memory-cache.js +1 -1
  154. package/dist/infrastructure/cache/memory-cache.js.map +1 -1
  155. package/dist/infrastructure/cache/strategies.d.ts +1 -1
  156. package/dist/infrastructure/cache/strategies.d.ts.map +1 -1
  157. package/dist/infrastructure/cache/strategies.js +1 -1
  158. package/dist/infrastructure/cache/strategies.js.map +1 -1
  159. package/dist/infrastructure/formatters/diff-generator.d.ts +11 -0
  160. package/dist/infrastructure/formatters/diff-generator.d.ts.map +1 -0
  161. package/dist/infrastructure/formatters/diff-generator.js +227 -0
  162. package/dist/infrastructure/formatters/diff-generator.js.map +1 -0
  163. package/dist/infrastructure/formatters/index.d.ts +11 -0
  164. package/dist/infrastructure/formatters/index.d.ts.map +1 -0
  165. package/dist/infrastructure/formatters/index.js +13 -0
  166. package/dist/infrastructure/formatters/index.js.map +1 -0
  167. package/dist/infrastructure/formatters/preview-converter.d.ts +85 -0
  168. package/dist/infrastructure/formatters/preview-converter.d.ts.map +1 -0
  169. package/dist/infrastructure/formatters/preview-converter.js +209 -0
  170. package/dist/infrastructure/formatters/preview-converter.js.map +1 -0
  171. package/dist/infrastructure/formatters/preview-formatter.d.ts +61 -0
  172. package/dist/infrastructure/formatters/preview-formatter.d.ts.map +1 -0
  173. package/dist/infrastructure/formatters/preview-formatter.js +208 -0
  174. package/dist/infrastructure/formatters/preview-formatter.js.map +1 -0
  175. package/dist/infrastructure/formatters/query-formatter.d.ts +83 -0
  176. package/dist/infrastructure/formatters/query-formatter.d.ts.map +1 -0
  177. package/dist/infrastructure/formatters/query-formatter.js +349 -0
  178. package/dist/infrastructure/formatters/query-formatter.js.map +1 -0
  179. package/dist/infrastructure/formatters/query-types.d.ts +238 -0
  180. package/dist/infrastructure/formatters/query-types.d.ts.map +1 -0
  181. package/dist/infrastructure/formatters/query-types.js +29 -0
  182. package/dist/infrastructure/formatters/query-types.js.map +1 -0
  183. package/dist/infrastructure/formatters/types.d.ts +163 -0
  184. package/dist/infrastructure/formatters/types.d.ts.map +1 -0
  185. package/dist/infrastructure/formatters/types.js +27 -0
  186. package/dist/infrastructure/formatters/types.js.map +1 -0
  187. package/dist/infrastructure/parser/base.d.ts +1 -33
  188. package/dist/infrastructure/parser/base.d.ts.map +1 -1
  189. package/dist/infrastructure/parser/base.js +1 -65
  190. package/dist/infrastructure/parser/base.js.map +1 -1
  191. package/dist/infrastructure/parser/index.d.ts +0 -2
  192. package/dist/infrastructure/parser/index.d.ts.map +1 -1
  193. package/dist/infrastructure/parser/index.js +1 -2
  194. package/dist/infrastructure/parser/index.js.map +1 -1
  195. package/dist/infrastructure/parser/interface.d.ts +2 -59
  196. package/dist/infrastructure/parser/interface.d.ts.map +1 -1
  197. package/dist/infrastructure/parser/interface.js +1 -11
  198. package/dist/infrastructure/parser/interface.js.map +1 -1
  199. package/dist/infrastructure/parser/registry.d.ts +1 -1
  200. package/dist/infrastructure/parser/registry.d.ts.map +1 -1
  201. package/dist/infrastructure/parser/registry.js +1 -1
  202. package/dist/infrastructure/parser/registry.js.map +1 -1
  203. package/dist/infrastructure/parser/types.d.ts.map +1 -1
  204. package/dist/infrastructure/storage/file-system.d.ts +2 -1
  205. package/dist/infrastructure/storage/file-system.d.ts.map +1 -1
  206. package/dist/infrastructure/storage/file-system.interface.d.ts +69 -0
  207. package/dist/infrastructure/storage/file-system.interface.d.ts.map +1 -0
  208. package/dist/infrastructure/storage/file-system.interface.js +6 -0
  209. package/dist/infrastructure/storage/file-system.interface.js.map +1 -0
  210. package/dist/infrastructure/storage/file-system.js.map +1 -1
  211. package/dist/infrastructure/storage/index.d.ts +2 -4
  212. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  213. package/dist/infrastructure/storage/index.js +1 -8
  214. package/dist/infrastructure/storage/index.js.map +1 -1
  215. package/dist/infrastructure/storage/mem-file-system.d.ts +44 -0
  216. package/dist/infrastructure/storage/mem-file-system.d.ts.map +1 -0
  217. package/dist/infrastructure/storage/mem-file-system.js +105 -0
  218. package/dist/infrastructure/storage/mem-file-system.js.map +1 -0
  219. package/dist/interfaces/cli/cli.d.ts +13 -94
  220. package/dist/interfaces/cli/cli.d.ts.map +1 -1
  221. package/dist/interfaces/cli/cli.js +47 -2450
  222. package/dist/interfaces/cli/cli.js.map +1 -1
  223. package/dist/interfaces/cli/commands/call-hierarchy.command.d.ts +11 -0
  224. package/dist/interfaces/cli/commands/call-hierarchy.command.d.ts.map +1 -0
  225. package/dist/interfaces/cli/commands/call-hierarchy.command.js +161 -0
  226. package/dist/interfaces/cli/commands/call-hierarchy.command.js.map +1 -0
  227. package/dist/interfaces/cli/commands/change-signature.command.d.ts +11 -0
  228. package/dist/interfaces/cli/commands/change-signature.command.d.ts.map +1 -0
  229. package/dist/interfaces/cli/commands/change-signature.command.js +290 -0
  230. package/dist/interfaces/cli/commands/change-signature.command.js.map +1 -0
  231. package/dist/interfaces/cli/commands/cycles.command.d.ts +11 -0
  232. package/dist/interfaces/cli/commands/cycles.command.d.ts.map +1 -0
  233. package/dist/interfaces/cli/commands/cycles.command.js +87 -0
  234. package/dist/interfaces/cli/commands/cycles.command.js.map +1 -0
  235. package/dist/interfaces/cli/commands/find-references.command.d.ts +11 -0
  236. package/dist/interfaces/cli/commands/find-references.command.d.ts.map +1 -0
  237. package/dist/interfaces/cli/commands/find-references.command.js +122 -0
  238. package/dist/interfaces/cli/commands/find-references.command.js.map +1 -0
  239. package/dist/interfaces/cli/commands/impact.command.d.ts +11 -0
  240. package/dist/interfaces/cli/commands/impact.command.d.ts.map +1 -0
  241. package/dist/interfaces/cli/commands/impact.command.js +98 -0
  242. package/dist/interfaces/cli/commands/impact.command.js.map +1 -0
  243. package/dist/interfaces/cli/commands/index.d.ts +14 -0
  244. package/dist/interfaces/cli/commands/index.d.ts.map +1 -0
  245. package/dist/interfaces/cli/commands/index.js +15 -0
  246. package/dist/interfaces/cli/commands/index.js.map +1 -0
  247. package/dist/interfaces/cli/commands/move-member.command.d.ts +11 -0
  248. package/dist/interfaces/cli/commands/move-member.command.d.ts.map +1 -0
  249. package/dist/interfaces/cli/commands/move-member.command.js +185 -0
  250. package/dist/interfaces/cli/commands/move-member.command.js.map +1 -0
  251. package/dist/interfaces/cli/commands/move.command.d.ts +11 -0
  252. package/dist/interfaces/cli/commands/move.command.d.ts.map +1 -0
  253. package/dist/interfaces/cli/commands/move.command.js +212 -0
  254. package/dist/interfaces/cli/commands/move.command.js.map +1 -0
  255. package/dist/interfaces/cli/commands/rename.command.d.ts +11 -0
  256. package/dist/interfaces/cli/commands/rename.command.d.ts.map +1 -0
  257. package/dist/interfaces/cli/commands/rename.command.js +258 -0
  258. package/dist/interfaces/cli/commands/rename.command.js.map +1 -0
  259. package/dist/interfaces/cli/commands/snapshot.command.d.ts +11 -0
  260. package/dist/interfaces/cli/commands/snapshot.command.d.ts.map +1 -0
  261. package/dist/interfaces/cli/commands/snapshot.command.js +68 -0
  262. package/dist/interfaces/cli/commands/snapshot.command.js.map +1 -0
  263. package/dist/interfaces/cli/commands/types.d.ts +18 -0
  264. package/dist/interfaces/cli/commands/types.d.ts.map +1 -0
  265. package/dist/interfaces/cli/commands/types.js +5 -0
  266. package/dist/interfaces/cli/commands/types.js.map +1 -0
  267. package/dist/interfaces/cli/index.d.ts +1 -1
  268. package/dist/interfaces/cli/index.d.ts.map +1 -1
  269. package/dist/interfaces/cli/index.js +1 -1
  270. package/dist/interfaces/cli/index.js.map +1 -1
  271. package/dist/interfaces/cli/preview-output-handler.d.ts +53 -0
  272. package/dist/interfaces/cli/preview-output-handler.d.ts.map +1 -0
  273. package/dist/interfaces/cli/preview-output-handler.js +73 -0
  274. package/dist/interfaces/cli/preview-output-handler.js.map +1 -0
  275. package/dist/interfaces/cli/unified-output-handler.d.ts +79 -0
  276. package/dist/interfaces/cli/unified-output-handler.d.ts.map +1 -0
  277. package/dist/interfaces/cli/unified-output-handler.js +149 -0
  278. package/dist/interfaces/cli/unified-output-handler.js.map +1 -0
  279. package/dist/plugins/javascript/index.d.ts +2 -2
  280. package/dist/plugins/javascript/index.d.ts.map +1 -1
  281. package/dist/plugins/javascript/index.js +1 -1
  282. package/dist/plugins/javascript/index.js.map +1 -1
  283. package/dist/plugins/javascript/types.d.ts.map +1 -1
  284. package/dist/plugins/javascript/types.js.map +1 -1
  285. package/dist/plugins/python/dependency-analyzer.d.ts +86 -0
  286. package/dist/plugins/python/dependency-analyzer.d.ts.map +1 -0
  287. package/dist/plugins/python/dependency-analyzer.js +252 -0
  288. package/dist/plugins/python/dependency-analyzer.js.map +1 -0
  289. package/dist/plugins/python/index.d.ts +9 -0
  290. package/dist/plugins/python/index.d.ts.map +1 -0
  291. package/dist/plugins/python/index.js +14 -0
  292. package/dist/plugins/python/index.js.map +1 -0
  293. package/dist/plugins/python/parser.d.ts +117 -0
  294. package/dist/plugins/python/parser.d.ts.map +1 -0
  295. package/dist/plugins/python/parser.js +414 -0
  296. package/dist/plugins/python/parser.js.map +1 -0
  297. package/dist/plugins/python/symbol-extractor.d.ts +108 -0
  298. package/dist/plugins/python/symbol-extractor.d.ts.map +1 -0
  299. package/dist/plugins/python/symbol-extractor.js +389 -0
  300. package/dist/plugins/python/symbol-extractor.js.map +1 -0
  301. package/dist/plugins/python/tree-sitter-bridge.d.ts +57 -0
  302. package/dist/plugins/python/tree-sitter-bridge.d.ts.map +1 -0
  303. package/dist/plugins/python/tree-sitter-bridge.js +267 -0
  304. package/dist/plugins/python/tree-sitter-bridge.js.map +1 -0
  305. package/dist/plugins/python/types.d.ts +179 -0
  306. package/dist/plugins/python/types.d.ts.map +1 -0
  307. package/dist/plugins/python/types.js +252 -0
  308. package/dist/plugins/python/types.js.map +1 -0
  309. package/dist/plugins/swift/dependency-analyzer.d.ts +1 -1
  310. package/dist/plugins/swift/dependency-analyzer.d.ts.map +1 -1
  311. package/dist/plugins/swift/dependency-analyzer.js +1 -1
  312. package/dist/plugins/swift/dependency-analyzer.js.map +1 -1
  313. package/dist/plugins/swift/parser.d.ts +4 -0
  314. package/dist/plugins/swift/parser.d.ts.map +1 -1
  315. package/dist/plugins/swift/parser.js +24 -6
  316. package/dist/plugins/swift/parser.js.map +1 -1
  317. package/dist/plugins/swift/symbol-extractor.d.ts +1 -1
  318. package/dist/plugins/swift/symbol-extractor.d.ts.map +1 -1
  319. package/dist/plugins/swift/symbol-extractor.js.map +1 -1
  320. package/dist/plugins/swift/types.d.ts.map +1 -1
  321. package/dist/plugins/swift/types.js.map +1 -1
  322. package/dist/plugins/typescript/parser.d.ts +4 -37
  323. package/dist/plugins/typescript/parser.d.ts.map +1 -1
  324. package/dist/plugins/typescript/parser.js +29 -331
  325. package/dist/plugins/typescript/parser.js.map +1 -1
  326. package/dist/plugins/typescript/symbol-extractor.d.ts.map +1 -1
  327. package/dist/plugins/typescript/symbol-extractor.js +12 -0
  328. package/dist/plugins/typescript/symbol-extractor.js.map +1 -1
  329. package/dist/plugins/typescript/types.d.ts.map +1 -1
  330. package/dist/plugins/typescript/types.js +10 -0
  331. package/dist/plugins/typescript/types.js.map +1 -1
  332. package/dist/shared/errors/config-error.d.ts +1 -1
  333. package/dist/shared/errors/config-error.d.ts.map +1 -1
  334. package/dist/shared/errors/config-error.js +1 -1
  335. package/dist/shared/errors/config-error.js.map +1 -1
  336. package/dist/shared/errors/file-error.d.ts +1 -1
  337. package/dist/shared/errors/file-error.d.ts.map +1 -1
  338. package/dist/shared/errors/file-error.js +1 -1
  339. package/dist/shared/errors/file-error.js.map +1 -1
  340. package/dist/shared/errors/index.d.ts +1 -1
  341. package/dist/shared/errors/index.d.ts.map +1 -1
  342. package/dist/shared/errors/index.js +4 -4
  343. package/dist/shared/errors/index.js.map +1 -1
  344. package/dist/shared/errors/parser-error.d.ts +1 -1
  345. package/dist/shared/errors/parser-error.d.ts.map +1 -1
  346. package/dist/shared/errors/parser-error.js +1 -1
  347. package/dist/shared/errors/parser-error.js.map +1 -1
  348. package/dist/shared/errors/validation-error.d.ts +1 -1
  349. package/dist/shared/errors/validation-error.d.ts.map +1 -1
  350. package/dist/shared/errors/validation-error.js +1 -1
  351. package/dist/shared/errors/validation-error.js.map +1 -1
  352. package/dist/shared/types/ast.d.ts +1 -1
  353. package/dist/shared/types/ast.d.ts.map +1 -1
  354. package/dist/shared/types/ast.js +1 -1
  355. package/dist/shared/types/ast.js.map +1 -1
  356. package/dist/shared/types/symbol.d.ts +3 -2
  357. package/dist/shared/types/symbol.d.ts.map +1 -1
  358. package/dist/shared/types/symbol.js +1 -0
  359. package/dist/shared/types/symbol.js.map +1 -1
  360. package/dist/shared/utils/index.d.ts +5 -5
  361. package/dist/shared/utils/index.d.ts.map +1 -1
  362. package/dist/shared/utils/index.js +5 -5
  363. package/dist/shared/utils/index.js.map +1 -1
  364. package/package.json +9 -8
  365. package/dist/core/analysis/index.d.ts +0 -6
  366. package/dist/core/analysis/index.d.ts.map +0 -1
  367. package/dist/core/analysis/index.js +0 -7
  368. package/dist/core/analysis/index.js.map +0 -1
  369. package/dist/core/analysis/quality-metrics.d.ts +0 -158
  370. package/dist/core/analysis/quality-metrics.d.ts.map +0 -1
  371. package/dist/core/analysis/quality-metrics.js +0 -442
  372. package/dist/core/analysis/quality-metrics.js.map +0 -1
  373. package/dist/core/indexing/file-watcher.d.ts +0 -110
  374. package/dist/core/indexing/file-watcher.d.ts.map +0 -1
  375. package/dist/core/indexing/file-watcher.js +0 -280
  376. package/dist/core/indexing/file-watcher.js.map +0 -1
  377. package/dist/core/move/import-resolver.d.ts.map +0 -1
  378. package/dist/core/move/import-resolver.js.map +0 -1
  379. package/dist/core/move/index.d.ts.map +0 -1
  380. package/dist/core/move/index.js.map +0 -1
  381. package/dist/core/move/move-service.d.ts.map +0 -1
  382. package/dist/core/move/move-service.js.map +0 -1
  383. package/dist/core/move/types.d.ts.map +0 -1
  384. package/dist/core/move/types.js.map +0 -1
  385. package/dist/core/refactor/design-patterns.d.ts +0 -178
  386. package/dist/core/refactor/design-patterns.d.ts.map +0 -1
  387. package/dist/core/refactor/design-patterns.js +0 -656
  388. package/dist/core/refactor/design-patterns.js.map +0 -1
  389. package/dist/core/refactor/extract-function.d.ts +0 -197
  390. package/dist/core/refactor/extract-function.d.ts.map +0 -1
  391. package/dist/core/refactor/extract-function.js +0 -730
  392. package/dist/core/refactor/extract-function.js.map +0 -1
  393. package/dist/core/refactor/index.d.ts +0 -8
  394. package/dist/core/refactor/index.d.ts.map +0 -1
  395. package/dist/core/refactor/index.js +0 -11
  396. package/dist/core/refactor/index.js.map +0 -1
  397. package/dist/core/refactor/inline-function.d.ts +0 -175
  398. package/dist/core/refactor/inline-function.d.ts.map +0 -1
  399. package/dist/core/refactor/inline-function.js +0 -425
  400. package/dist/core/refactor/inline-function.js.map +0 -1
  401. package/dist/core/refactor/swift-extractor.d.ts +0 -98
  402. package/dist/core/refactor/swift-extractor.d.ts.map +0 -1
  403. package/dist/core/refactor/swift-extractor.js +0 -283
  404. package/dist/core/refactor/swift-extractor.js.map +0 -1
  405. package/dist/core/search/engines/text-engine.d.ts +0 -52
  406. package/dist/core/search/engines/text-engine.d.ts.map +0 -1
  407. package/dist/core/search/engines/text-engine.js +0 -376
  408. package/dist/core/search/engines/text-engine.js.map +0 -1
  409. package/dist/core/search/index.d.ts +0 -10
  410. package/dist/core/search/index.d.ts.map +0 -1
  411. package/dist/core/search/index.js +0 -11
  412. package/dist/core/search/index.js.map +0 -1
  413. package/dist/core/search/service.d.ts +0 -105
  414. package/dist/core/search/service.d.ts.map +0 -1
  415. package/dist/core/search/service.js +0 -384
  416. package/dist/core/search/service.js.map +0 -1
  417. package/dist/core/search/types.d.ts +0 -357
  418. package/dist/core/search/types.d.ts.map +0 -1
  419. package/dist/core/search/types.js +0 -47
  420. package/dist/core/search/types.js.map +0 -1
  421. package/dist/core/shit-score/grading.d.ts +0 -39
  422. package/dist/core/shit-score/grading.d.ts.map +0 -1
  423. package/dist/core/shit-score/grading.js +0 -253
  424. package/dist/core/shit-score/grading.js.map +0 -1
  425. package/dist/core/shit-score/index.d.ts +0 -9
  426. package/dist/core/shit-score/index.d.ts.map +0 -1
  427. package/dist/core/shit-score/index.js +0 -8
  428. package/dist/core/shit-score/index.js.map +0 -1
  429. package/dist/core/shit-score/score-calculator.d.ts +0 -75
  430. package/dist/core/shit-score/score-calculator.d.ts.map +0 -1
  431. package/dist/core/shit-score/score-calculator.js +0 -240
  432. package/dist/core/shit-score/score-calculator.js.map +0 -1
  433. package/dist/core/shit-score/shit-score-analyzer.d.ts +0 -84
  434. package/dist/core/shit-score/shit-score-analyzer.d.ts.map +0 -1
  435. package/dist/core/shit-score/shit-score-analyzer.js +0 -595
  436. package/dist/core/shit-score/shit-score-analyzer.js.map +0 -1
  437. package/dist/core/shit-score/types.d.ts +0 -231
  438. package/dist/core/shit-score/types.d.ts.map +0 -1
  439. package/dist/core/shit-score/types.js +0 -73
  440. package/dist/core/shit-score/types.js.map +0 -1
  441. package/dist/core/snapshot/code-compressor.d.ts +0 -39
  442. package/dist/core/snapshot/code-compressor.d.ts.map +0 -1
  443. package/dist/core/snapshot/code-compressor.js +0 -211
  444. package/dist/core/snapshot/code-compressor.js.map +0 -1
  445. package/dist/core/snapshot/config.d.ts +0 -60
  446. package/dist/core/snapshot/config.d.ts.map +0 -1
  447. package/dist/core/snapshot/config.js +0 -136
  448. package/dist/core/snapshot/config.js.map +0 -1
  449. package/dist/core/snapshot/snapshot-differ.d.ts +0 -54
  450. package/dist/core/snapshot/snapshot-differ.d.ts.map +0 -1
  451. package/dist/core/snapshot/snapshot-differ.js +0 -262
  452. package/dist/core/snapshot/snapshot-differ.js.map +0 -1
  453. package/dist/core/snapshot/snapshot-engine.d.ts +0 -94
  454. package/dist/core/snapshot/snapshot-engine.d.ts.map +0 -1
  455. package/dist/core/snapshot/snapshot-engine.js +0 -492
  456. package/dist/core/snapshot/snapshot-engine.js.map +0 -1
  457. package/dist/infrastructure/parser/factory.d.ts +0 -141
  458. package/dist/infrastructure/parser/factory.d.ts.map +0 -1
  459. package/dist/infrastructure/parser/factory.js +0 -306
  460. package/dist/infrastructure/parser/factory.js.map +0 -1
  461. package/dist/infrastructure/storage/file-watcher.d.ts +0 -84
  462. package/dist/infrastructure/storage/file-watcher.d.ts.map +0 -1
  463. package/dist/infrastructure/storage/file-watcher.js +0 -249
  464. package/dist/infrastructure/storage/file-watcher.js.map +0 -1
  465. package/dist/infrastructure/storage/path-utils.d.ts +0 -96
  466. package/dist/infrastructure/storage/path-utils.d.ts.map +0 -1
  467. package/dist/infrastructure/storage/path-utils.js +0 -272
  468. package/dist/infrastructure/storage/path-utils.js.map +0 -1
  469. package/dist/plugins/swift/analyzers/complexity-analyzer.d.ts +0 -41
  470. package/dist/plugins/swift/analyzers/complexity-analyzer.d.ts.map +0 -1
  471. package/dist/plugins/swift/analyzers/complexity-analyzer.js +0 -206
  472. package/dist/plugins/swift/analyzers/complexity-analyzer.js.map +0 -1
  473. package/dist/plugins/swift/analyzers/duplication-detector.d.ts +0 -89
  474. package/dist/plugins/swift/analyzers/duplication-detector.d.ts.map +0 -1
  475. package/dist/plugins/swift/analyzers/duplication-detector.js +0 -271
  476. package/dist/plugins/swift/analyzers/duplication-detector.js.map +0 -1
  477. package/dist/plugins/swift/analyzers/error-handling-checker.d.ts +0 -34
  478. package/dist/plugins/swift/analyzers/error-handling-checker.d.ts.map +0 -1
  479. package/dist/plugins/swift/analyzers/error-handling-checker.js +0 -135
  480. package/dist/plugins/swift/analyzers/error-handling-checker.js.map +0 -1
  481. package/dist/plugins/swift/analyzers/naming-checker.d.ts +0 -47
  482. package/dist/plugins/swift/analyzers/naming-checker.d.ts.map +0 -1
  483. package/dist/plugins/swift/analyzers/naming-checker.js +0 -161
  484. package/dist/plugins/swift/analyzers/naming-checker.js.map +0 -1
  485. package/dist/plugins/swift/analyzers/pattern-detector.d.ts +0 -78
  486. package/dist/plugins/swift/analyzers/pattern-detector.d.ts.map +0 -1
  487. package/dist/plugins/swift/analyzers/pattern-detector.js +0 -247
  488. package/dist/plugins/swift/analyzers/pattern-detector.js.map +0 -1
  489. package/dist/plugins/swift/analyzers/security-checker.d.ts +0 -38
  490. package/dist/plugins/swift/analyzers/security-checker.d.ts.map +0 -1
  491. package/dist/plugins/swift/analyzers/security-checker.js +0 -135
  492. package/dist/plugins/swift/analyzers/security-checker.js.map +0 -1
  493. package/dist/plugins/swift/analyzers/test-coverage-checker.d.ts +0 -26
  494. package/dist/plugins/swift/analyzers/test-coverage-checker.d.ts.map +0 -1
  495. package/dist/plugins/swift/analyzers/test-coverage-checker.js +0 -63
  496. package/dist/plugins/swift/analyzers/test-coverage-checker.js.map +0 -1
  497. package/dist/plugins/swift/analyzers/type-safety-checker.d.ts +0 -41
  498. package/dist/plugins/swift/analyzers/type-safety-checker.d.ts.map +0 -1
  499. package/dist/plugins/swift/analyzers/type-safety-checker.js +0 -121
  500. package/dist/plugins/swift/analyzers/type-safety-checker.js.map +0 -1
  501. package/dist/plugins/swift/analyzers/unused-symbol-detector.d.ts +0 -38
  502. package/dist/plugins/swift/analyzers/unused-symbol-detector.d.ts.map +0 -1
  503. package/dist/plugins/swift/analyzers/unused-symbol-detector.js +0 -211
  504. package/dist/plugins/swift/analyzers/unused-symbol-detector.js.map +0 -1
  505. package/dist/plugins/typescript/analyzers/complexity-analyzer.d.ts +0 -39
  506. package/dist/plugins/typescript/analyzers/complexity-analyzer.d.ts.map +0 -1
  507. package/dist/plugins/typescript/analyzers/complexity-analyzer.js +0 -196
  508. package/dist/plugins/typescript/analyzers/complexity-analyzer.js.map +0 -1
  509. package/dist/plugins/typescript/analyzers/duplication-detector.d.ts +0 -181
  510. package/dist/plugins/typescript/analyzers/duplication-detector.d.ts.map +0 -1
  511. package/dist/plugins/typescript/analyzers/duplication-detector.js +0 -695
  512. package/dist/plugins/typescript/analyzers/duplication-detector.js.map +0 -1
  513. package/dist/plugins/typescript/analyzers/error-handling-checker.d.ts +0 -26
  514. package/dist/plugins/typescript/analyzers/error-handling-checker.d.ts.map +0 -1
  515. package/dist/plugins/typescript/analyzers/error-handling-checker.js +0 -84
  516. package/dist/plugins/typescript/analyzers/error-handling-checker.js.map +0 -1
  517. package/dist/plugins/typescript/analyzers/naming-checker.d.ts +0 -30
  518. package/dist/plugins/typescript/analyzers/naming-checker.d.ts.map +0 -1
  519. package/dist/plugins/typescript/analyzers/naming-checker.js +0 -116
  520. package/dist/plugins/typescript/analyzers/naming-checker.js.map +0 -1
  521. package/dist/plugins/typescript/analyzers/pattern-detector.d.ts +0 -80
  522. package/dist/plugins/typescript/analyzers/pattern-detector.d.ts.map +0 -1
  523. package/dist/plugins/typescript/analyzers/pattern-detector.js +0 -267
  524. package/dist/plugins/typescript/analyzers/pattern-detector.js.map +0 -1
  525. package/dist/plugins/typescript/analyzers/security-checker.d.ts +0 -34
  526. package/dist/plugins/typescript/analyzers/security-checker.d.ts.map +0 -1
  527. package/dist/plugins/typescript/analyzers/security-checker.js +0 -126
  528. package/dist/plugins/typescript/analyzers/security-checker.js.map +0 -1
  529. package/dist/plugins/typescript/analyzers/test-coverage-checker.d.ts +0 -22
  530. package/dist/plugins/typescript/analyzers/test-coverage-checker.d.ts.map +0 -1
  531. package/dist/plugins/typescript/analyzers/test-coverage-checker.js +0 -62
  532. package/dist/plugins/typescript/analyzers/test-coverage-checker.js.map +0 -1
  533. package/dist/plugins/typescript/analyzers/type-safety-checker.d.ts +0 -32
  534. package/dist/plugins/typescript/analyzers/type-safety-checker.d.ts.map +0 -1
  535. package/dist/plugins/typescript/analyzers/type-safety-checker.js +0 -86
  536. package/dist/plugins/typescript/analyzers/type-safety-checker.js.map +0 -1
  537. package/dist/plugins/typescript/analyzers/unused-symbol-detector.d.ts +0 -47
  538. package/dist/plugins/typescript/analyzers/unused-symbol-detector.d.ts.map +0 -1
  539. package/dist/plugins/typescript/analyzers/unused-symbol-detector.js +0 -152
  540. package/dist/plugins/typescript/analyzers/unused-symbol-detector.js.map +0 -1
  541. /package/dist/core/{move → move-file}/import-resolver.d.ts +0 -0
  542. /package/dist/core/{move → move-file}/types.d.ts +0 -0
  543. /package/dist/core/{move → move-file}/types.js +0 -0
@@ -1,656 +0,0 @@
1
- /**
2
- * 設計模式重構器
3
- * 提供常見設計模式的自動重構功能
4
- */
5
- /**
6
- * 設計模式分析器
7
- * 分析程式碼並建議適用的設計模式
8
- */
9
- export class DesignPatternAnalyzer {
10
- /**
11
- * 分析程式碼並建議設計模式
12
- */
13
- analyzeSuggestions(code) {
14
- const suggestions = [];
15
- const classes = this.parseClasses(code);
16
- // 分析各種設計模式的適用性
17
- suggestions.push(...this.analyzeSingleton(classes, code));
18
- suggestions.push(...this.analyzeFactory(classes, code));
19
- suggestions.push(...this.analyzeObserver(classes, code));
20
- suggestions.push(...this.analyzeStrategy(classes, code));
21
- suggestions.push(...this.analyzeDecorator(classes, code));
22
- // 按置信度排序
23
- return suggestions.sort((a, b) => b.confidence - a.confidence);
24
- }
25
- /**
26
- * 分析 Singleton 模式適用性
27
- */
28
- analyzeSingleton(classes, code) {
29
- const suggestions = [];
30
- for (const cls of classes) {
31
- let confidence = 0;
32
- const reasons = [];
33
- // 檢查是否有靜態實例屬性
34
- const hasStaticInstance = cls.properties.some(p => p.isStatic && p.name.includes('instance'));
35
- if (hasStaticInstance) {
36
- confidence += 0.4;
37
- }
38
- // 檢查是否有 getInstance 方法
39
- const hasGetInstance = cls.methods.some(m => m.name === 'getInstance' && m.isStatic);
40
- if (hasGetInstance) {
41
- confidence += 0.5;
42
- reasons.push('已有 getInstance 方法,建議完善 Singleton 實作');
43
- }
44
- // 檢查建構子是否私有
45
- const hasPrivateConstructor = cls.constructor?.isPrivate;
46
- if (hasPrivateConstructor) {
47
- confidence += 0.3;
48
- }
49
- // 檢查是否全域使用
50
- const globalUsageCount = (code.match(new RegExp(cls.name, 'g')) || []).length;
51
- if (globalUsageCount > 5) {
52
- confidence += 0.2;
53
- reasons.push('類別被廣泛使用,適合 Singleton 模式');
54
- }
55
- // 檢查是否有 static config 或類似管理狀態的屬性
56
- if (cls.properties.some(p => p.isStatic && (p.name.includes('config') || p.name.includes('Config')))) {
57
- confidence += 0.3;
58
- reasons.push('有靜態配置管理,適合 Singleton 模式');
59
- }
60
- // 檢查 loadConfig 或類似方法
61
- if (cls.methods.some(m => m.isStatic && m.name.toLowerCase().includes('load'))) {
62
- confidence += 0.3;
63
- reasons.push('有靜態載入方法,適合 Singleton 模式');
64
- }
65
- if (confidence >= 0.5) {
66
- suggestions.push({
67
- pattern: 'singleton',
68
- confidence,
69
- reason: reasons.join(', ') || '類別結構適合 Singleton 模式',
70
- location: cls.location,
71
- benefits: [
72
- '確保全域只有一個實例',
73
- '提供全域存取點',
74
- '懶載入實例化'
75
- ],
76
- effort: 'low'
77
- });
78
- }
79
- }
80
- return suggestions;
81
- }
82
- /**
83
- * 分析 Factory 模式適用性
84
- */
85
- analyzeFactory(classes, code) {
86
- const suggestions = [];
87
- // 查找創建對象的函式
88
- const createMethods = code.match(/function\s+create\w*|\.create\w*/g) || [];
89
- const switchCreation = code.match(/switch\s*\([^)]*\)\s*{[^}]*new\s+\w+/g) || [];
90
- if (createMethods.length > 2 || switchCreation.length > 0) {
91
- suggestions.push({
92
- pattern: 'factory',
93
- confidence: 0.7,
94
- reason: '發現多個創建函式或條件式物件創建',
95
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
96
- benefits: [
97
- '封裝物件創建邏輯',
98
- '減少程式碼重複',
99
- '易於擴展新類型'
100
- ],
101
- effort: 'medium'
102
- });
103
- }
104
- return suggestions;
105
- }
106
- /**
107
- * 分析 Observer 模式適用性
108
- */
109
- analyzeObserver(classes, code) {
110
- const suggestions = [];
111
- // 查找事件相關代碼
112
- const eventPatterns = [
113
- /addEventListener|on\w+|emit|trigger/g,
114
- /callback|listener|observer/g,
115
- /notify|update|subscribe/g
116
- ];
117
- let eventScore = 0;
118
- for (const pattern of eventPatterns) {
119
- const matches = code.match(pattern) || [];
120
- eventScore += matches.length;
121
- }
122
- if (eventScore >= 5) {
123
- suggestions.push({
124
- pattern: 'observer',
125
- confidence: Math.min(0.8, eventScore / 10),
126
- reason: '發現大量事件相關程式碼',
127
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
128
- benefits: [
129
- '鬆耦合的事件處理',
130
- '動態新增/移除監聽器',
131
- '更好的可測試性'
132
- ],
133
- effort: 'medium'
134
- });
135
- }
136
- return suggestions;
137
- }
138
- /**
139
- * 分析 Strategy 模式適用性
140
- */
141
- analyzeStrategy(classes, code) {
142
- const suggestions = [];
143
- // 查找策略相關模式
144
- const strategyIndicators = [
145
- /if\s*\([^)]*type[^)]*\)|switch\s*\([^)]*type[^)]*\)/g,
146
- /algorithm|strategy|method/gi,
147
- /calculate|process|handle/gi
148
- ];
149
- let strategyScore = 0;
150
- for (const pattern of strategyIndicators) {
151
- const matches = code.match(pattern) || [];
152
- strategyScore += matches.length;
153
- }
154
- // 查找大型 if-else 鏈或 switch 語句
155
- const largeConditionals = code.match(/if\s*\([^{]*\)\s*{[^}]{50,}}\s*else/g) || [];
156
- const largeSwitches = code.match(/switch\s*\([^{]*\)\s*{[^}]{100,}}/g) || [];
157
- if (strategyScore >= 3 || largeConditionals.length > 0 || largeSwitches.length > 0) {
158
- suggestions.push({
159
- pattern: 'strategy',
160
- confidence: 0.6,
161
- reason: '發現複雜的條件邏輯或演算法選擇',
162
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
163
- benefits: [
164
- '將演算法封裝成獨立類別',
165
- '運行時切換演算法',
166
- '符合開放封閉原則'
167
- ],
168
- effort: 'high'
169
- });
170
- }
171
- return suggestions;
172
- }
173
- /**
174
- * 分析 Decorator 模式適用性
175
- */
176
- analyzeDecorator(classes, code) {
177
- const suggestions = [];
178
- // 查找裝飾器相關模式
179
- const decoratorPatterns = [
180
- /@\w+/g, // 註解/裝飾器語法
181
- /wrap|decorator|enhance/gi,
182
- /before|after|around/gi
183
- ];
184
- let decoratorScore = 0;
185
- for (const pattern of decoratorPatterns) {
186
- const matches = code.match(pattern) || [];
187
- decoratorScore += matches.length;
188
- }
189
- if (decoratorScore >= 3) {
190
- suggestions.push({
191
- pattern: 'decorator',
192
- confidence: 0.5,
193
- reason: '發現裝飾器或包裝器模式的使用',
194
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
195
- benefits: [
196
- '動態新增物件功能',
197
- '避免繼承爆炸',
198
- '遵循單一職責原則'
199
- ],
200
- effort: 'medium'
201
- });
202
- }
203
- return suggestions;
204
- }
205
- /**
206
- * 簡化的類別解析
207
- */
208
- parseClasses(code) {
209
- const classes = [];
210
- const classMatches = code.matchAll(/class\s+(\w+)[^{]*{([^}]*)}/g);
211
- for (const match of classMatches) {
212
- const className = match[1];
213
- const classBody = match[2];
214
- const methods = this.parseMethods(classBody);
215
- const properties = this.parseProperties(classBody);
216
- classes.push({
217
- name: className,
218
- location: this.getMatchLocation(code, match),
219
- methods,
220
- properties,
221
- constructor: methods.find(m => m.name === 'constructor')
222
- });
223
- }
224
- return classes;
225
- }
226
- /**
227
- * 解析方法
228
- */
229
- parseMethods(classBody) {
230
- const methods = [];
231
- const methodMatches = classBody.matchAll(/(static\s+)?(private\s+)?(\w+)\s*\(([^)]*)\)/g);
232
- for (const match of methodMatches) {
233
- const isStatic = !!match[1];
234
- const isPrivate = !!match[2];
235
- const name = match[3];
236
- const params = match[4] ? match[4].split(',').map(p => p.trim()) : [];
237
- methods.push({
238
- name,
239
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
240
- parameters: params,
241
- isStatic,
242
- isPrivate
243
- });
244
- }
245
- return methods;
246
- }
247
- /**
248
- * 解析屬性
249
- */
250
- parseProperties(classBody) {
251
- const properties = [];
252
- const propMatches = classBody.matchAll(/(static\s+)?(private\s+)?(\w+)\s*[=:]/g);
253
- for (const match of propMatches) {
254
- const isStatic = !!match[1];
255
- const isPrivate = !!match[2];
256
- const name = match[3];
257
- properties.push({
258
- name,
259
- location: { start: { line: 1, column: 0 }, end: { line: 1, column: 0 } },
260
- isPrivate,
261
- isStatic
262
- });
263
- }
264
- return properties;
265
- }
266
- /**
267
- * 獲取匹配位置
268
- */
269
- getMatchLocation(code, match) {
270
- const start = match.index || 0;
271
- const end = start + match[0].length;
272
- return {
273
- start: this.offsetToPosition(code, start),
274
- end: this.offsetToPosition(code, end)
275
- };
276
- }
277
- /**
278
- * 偏移量轉位置
279
- */
280
- offsetToPosition(code, offset) {
281
- const lines = code.substring(0, offset).split('\n');
282
- return {
283
- line: lines.length,
284
- column: lines[lines.length - 1].length
285
- };
286
- }
287
- }
288
- /**
289
- * 設計模式重構器主類
290
- */
291
- export class DesignPatternRefactorer {
292
- analyzer = new DesignPatternAnalyzer();
293
- /**
294
- * 應用設計模式重構
295
- */
296
- async applyPattern(code, pattern, className, config = {
297
- generateTests: false,
298
- addDocumentation: true,
299
- useTypeScript: true,
300
- preserveComments: true
301
- }) {
302
- // 輸入驗證
303
- if (!code || !pattern || !className) {
304
- return {
305
- success: false,
306
- pattern: pattern || 'unknown',
307
- edits: [],
308
- modifiedClasses: [],
309
- errors: ['輸入參數無效'],
310
- warnings: []
311
- };
312
- }
313
- try {
314
- switch (pattern) {
315
- case 'singleton':
316
- return await this.applySingletonPattern(code, className, config);
317
- case 'factory':
318
- return await this.applyFactoryPattern(code, className, config);
319
- case 'observer':
320
- return await this.applyObserverPattern(code, className, config);
321
- case 'strategy':
322
- return await this.applyStrategyPattern(code, className, config);
323
- case 'decorator':
324
- return await this.applyDecoratorPattern(code, className, config);
325
- default:
326
- throw new Error(`不支援的設計模式: ${pattern}`);
327
- }
328
- }
329
- catch (error) {
330
- return {
331
- success: false,
332
- pattern,
333
- edits: [],
334
- modifiedClasses: [],
335
- errors: [error instanceof Error ? error.message : '未知錯誤'],
336
- warnings: []
337
- };
338
- }
339
- }
340
- /**
341
- * 應用 Singleton 模式
342
- */
343
- async applySingletonPattern(code, className, config) {
344
- const edits = [];
345
- // 找到類別定義 - 使用更準確的正則表達式
346
- // 使用遞迴匹配來處理嵌套的大括號
347
- const classPattern = `class\\s+${className}[^{]*{`;
348
- const classStartMatch = code.match(new RegExp(classPattern));
349
- if (!classStartMatch) {
350
- throw new Error(`找不到類別: ${className}`);
351
- }
352
- // 找到類別的完整內容(包含嵌套的大括號)
353
- const classStartIndex = code.indexOf(classStartMatch[0]);
354
- let braceCount = 1;
355
- let classEndIndex = classStartIndex + classStartMatch[0].length;
356
- while (braceCount > 0 && classEndIndex < code.length) {
357
- if (code[classEndIndex] === '{') {
358
- braceCount++;
359
- }
360
- if (code[classEndIndex] === '}') {
361
- braceCount--;
362
- }
363
- classEndIndex++;
364
- }
365
- const classBody = code.substring(classStartIndex + classStartMatch[0].length, classEndIndex - 1);
366
- const singletonCode = this.generateSingletonCode(className, classBody, config);
367
- // 替換整個類別
368
- const classStart = classStartIndex;
369
- const classEnd = classEndIndex;
370
- edits.push({
371
- range: {
372
- start: this.offsetToPosition(code, classStart),
373
- end: this.offsetToPosition(code, classEnd)
374
- },
375
- newText: singletonCode,
376
- type: 'replace'
377
- });
378
- return {
379
- success: true,
380
- pattern: 'singleton',
381
- edits,
382
- modifiedClasses: [className],
383
- errors: [],
384
- warnings: [],
385
- documentation: config.addDocumentation ? this.generateSingletonDocumentation(className) : undefined
386
- };
387
- }
388
- /**
389
- * 生成 Singleton 程式碼
390
- */
391
- generateSingletonCode(className, originalBody, config) {
392
- const typescript = config.useTypeScript;
393
- const instanceType = typescript ? `: ${className} | null` : '';
394
- // 修正:static 關鍵字應該在屬性前,而不是型別前
395
- return `${config.addDocumentation ? `/**\n * ${className} - Singleton 模式實作\n * 確保全域只有一個實例\n */\n` : ''}class ${className} {
396
- private static instance${instanceType} = null;
397
-
398
- private constructor() {
399
- ${this.extractConstructorBody(originalBody)}
400
- }
401
-
402
- public static getInstance()${typescript ? `: ${className}` : ''} {
403
- if (!${className}.instance) {
404
- ${className}.instance = new ${className}();
405
- }
406
- return ${className}.instance;
407
- }
408
-
409
- ${this.extractMethodsAndProperties(originalBody)}
410
- }`;
411
- }
412
- /**
413
- * 應用 Factory 模式
414
- */
415
- async applyFactoryPattern(code, className, config) {
416
- const factoryCode = this.generateFactoryCode(className, config);
417
- const createdFiles = [{
418
- path: `${className}Factory.${config.useTypeScript ? 'ts' : 'js'}`,
419
- content: factoryCode
420
- }];
421
- return {
422
- success: true,
423
- pattern: 'factory',
424
- edits: [],
425
- createdFiles,
426
- modifiedClasses: [],
427
- errors: [],
428
- warnings: ['建議重構現有的物件創建邏輯使用 Factory'],
429
- documentation: config.addDocumentation ? this.generateFactoryDocumentation(className) : undefined
430
- };
431
- }
432
- /**
433
- * 生成 Factory 程式碼
434
- */
435
- generateFactoryCode(className, config) {
436
- return `${config.addDocumentation ? `/**\n * ${className} Factory - 工廠模式實作\n * 封裝物件創建邏輯\n */\n` : ''}class ${className}Factory {
437
- static create(type${config.useTypeScript ? ': string' : ''})${config.useTypeScript ? `: ${className}` : ''} {
438
- switch (type) {
439
- case 'default':
440
- return new ${className}();
441
- // 新增更多類型...
442
- default:
443
- throw new Error(\`不支援的類型: \${type}\`);
444
- }
445
- }
446
- }`;
447
- }
448
- /**
449
- * 應用 Observer 模式
450
- */
451
- async applyObserverPattern(code, className, config) {
452
- const observerCode = this.generateObserverCode(className, config);
453
- const createdFiles = [
454
- {
455
- path: `Observer.${config.useTypeScript ? 'ts' : 'js'}`,
456
- content: observerCode.observerInterface
457
- },
458
- {
459
- path: `Observable.${config.useTypeScript ? 'ts' : 'js'}`,
460
- content: observerCode.observableClass
461
- }
462
- ];
463
- return {
464
- success: true,
465
- pattern: 'observer',
466
- edits: [],
467
- createdFiles,
468
- modifiedClasses: [],
469
- errors: [],
470
- warnings: ['需要手動實作 Observer 介面和修改現有事件處理'],
471
- documentation: config.addDocumentation ? this.generateObserverDocumentation() : undefined
472
- };
473
- }
474
- /**
475
- * 生成 Observer 模式程式碼
476
- */
477
- generateObserverCode(className, config) {
478
- const typescript = config.useTypeScript;
479
- const observerInterface = typescript ?
480
- 'interface Observer {\n update(data: any): void;\n}' :
481
- '// Observer interface\n// Implement update(data) method';
482
- const observableClass = `${config.addDocumentation ? '/**\n * Observable - 觀察者模式主題\n * 管理觀察者列表並通知變更\n */\n' : ''}class Observable {
483
- private observers${typescript ? ': Observer[]' : ''} = [];
484
-
485
- addObserver(observer${typescript ? ': Observer' : ''})${typescript ? ': void' : ''} {
486
- this.observers.push(observer);
487
- }
488
-
489
- removeObserver(observer${typescript ? ': Observer' : ''})${typescript ? ': void' : ''} {
490
- const index = this.observers.indexOf(observer);
491
- if (index > -1) {
492
- this.observers.splice(index, 1);
493
- }
494
- }
495
-
496
- notifyObservers(data${typescript ? ': any' : ''})${typescript ? ': void' : ''} {
497
- this.observers.forEach(observer => observer.update(data));
498
- }
499
- }`;
500
- return { observerInterface, observableClass };
501
- }
502
- /**
503
- * 應用 Strategy 模式
504
- */
505
- async applyStrategyPattern(code, className, config) {
506
- const strategyCode = this.generateStrategyCode(className, config);
507
- const createdFiles = [
508
- {
509
- path: `Strategy.${config.useTypeScript ? 'ts' : 'js'}`,
510
- content: strategyCode.strategyInterface
511
- },
512
- {
513
- path: `${className}Context.${config.useTypeScript ? 'ts' : 'js'}`,
514
- content: strategyCode.contextClass
515
- }
516
- ];
517
- return {
518
- success: true,
519
- pattern: 'strategy',
520
- edits: [],
521
- createdFiles,
522
- modifiedClasses: [],
523
- errors: [],
524
- warnings: ['需要將現有的演算法邏輯重構為獨立的策略類別'],
525
- documentation: config.addDocumentation ? this.generateStrategyDocumentation() : undefined
526
- };
527
- }
528
- /**
529
- * 生成 Strategy 模式程式碼
530
- */
531
- generateStrategyCode(className, config) {
532
- const typescript = config.useTypeScript;
533
- const strategyInterface = typescript ?
534
- 'interface Strategy {\n execute(data: any): any;\n}' :
535
- '// Strategy interface\n// Implement execute(data) method';
536
- const contextClass = `${config.addDocumentation ? `/**\n * ${className}Context - 策略模式上下文\n * 使用策略物件執行演算法\n */\n` : ''}class ${className}Context {
537
- private strategy${typescript ? ': Strategy' : ''};
538
-
539
- constructor(strategy${typescript ? ': Strategy' : ''}) {
540
- this.strategy = strategy;
541
- }
542
-
543
- setStrategy(strategy${typescript ? ': Strategy' : ''})${typescript ? ': void' : ''} {
544
- this.strategy = strategy;
545
- }
546
-
547
- executeStrategy(data${typescript ? ': any' : ''})${typescript ? ': any' : ''} {
548
- return this.strategy.execute(data);
549
- }
550
- }`;
551
- return { strategyInterface, contextClass };
552
- }
553
- /**
554
- * 應用 Decorator 模式
555
- */
556
- async applyDecoratorPattern(code, className, config) {
557
- // Decorator 模式實作相對複雜,這裡提供基本架構
558
- return {
559
- success: false,
560
- pattern: 'decorator',
561
- edits: [],
562
- modifiedClasses: [],
563
- errors: ['Decorator 模式需要更詳細的需求分析'],
564
- warnings: ['建議先分析具體的裝飾需求再實作']
565
- };
566
- }
567
- /**
568
- * 取得設計模式建議
569
- */
570
- async getSuggestions(code) {
571
- return this.analyzer.analyzeSuggestions(code);
572
- }
573
- // 輔助方法
574
- extractConstructorBody(classBody) {
575
- // 找到 constructor 並提取其內容
576
- const constructorStart = classBody.indexOf('constructor');
577
- if (constructorStart === -1) {
578
- return '// 建構子邏輯';
579
- }
580
- // 找到 constructor 的開始大括號
581
- const braceStart = classBody.indexOf('{', constructorStart);
582
- if (braceStart === -1) {
583
- return '// 建構子邏輯';
584
- }
585
- // 找到對應的結束大括號
586
- let braceCount = 1;
587
- let braceEnd = braceStart + 1;
588
- while (braceCount > 0 && braceEnd < classBody.length) {
589
- if (classBody[braceEnd] === '{') {
590
- braceCount++;
591
- }
592
- if (classBody[braceEnd] === '}') {
593
- braceCount--;
594
- }
595
- braceEnd++;
596
- }
597
- const constructorBody = classBody.substring(braceStart + 1, braceEnd - 1).trim();
598
- return constructorBody || '// 建構子邏輯';
599
- }
600
- extractMethodsAndProperties(classBody) {
601
- // 找到並移除 constructor
602
- const constructorStart = classBody.indexOf('constructor');
603
- if (constructorStart === -1) {
604
- // 沒有 constructor,返回整個類別體
605
- return classBody.trim();
606
- }
607
- // 找到 constructor 的結束位置
608
- const braceStart = classBody.indexOf('{', constructorStart);
609
- if (braceStart === -1) {
610
- return classBody.trim();
611
- }
612
- let braceCount = 1;
613
- let braceEnd = braceStart + 1;
614
- while (braceCount > 0 && braceEnd < classBody.length) {
615
- if (classBody[braceEnd] === '{') {
616
- braceCount++;
617
- }
618
- if (classBody[braceEnd] === '}') {
619
- braceCount--;
620
- }
621
- braceEnd++;
622
- }
623
- // 移除 constructor 並保留其餘部分
624
- const beforeConstructor = classBody.substring(0, constructorStart).trim();
625
- const afterConstructor = classBody.substring(braceEnd).trim();
626
- let result = '';
627
- if (beforeConstructor) {
628
- result += beforeConstructor + '\n\n ';
629
- }
630
- if (afterConstructor) {
631
- result += afterConstructor;
632
- }
633
- return result.trim();
634
- }
635
- offsetToPosition(code, offset) {
636
- const lines = code.substring(0, offset).split('\n');
637
- return {
638
- line: lines.length,
639
- column: lines[lines.length - 1].length
640
- };
641
- }
642
- // 文件生成方法
643
- generateSingletonDocumentation(className) {
644
- return `# ${className} Singleton 模式\n\n## 使用方式\n\`\`\`javascript\nconst instance = ${className}.getInstance();\n\`\`\`\n\n## 特點\n- 全域唯一實例\n- 懶載入初始化\n- 執行緒安全(在單執行緒環境)`;
645
- }
646
- generateFactoryDocumentation(className) {
647
- return `# ${className} Factory 模式\n\n## 使用方式\n\`\`\`javascript\nconst obj = ${className}Factory.create('default');\n\`\`\`\n\n## 特點\n- 封裝物件創建\n- 易於擴展類型\n- 降低耦合度`;
648
- }
649
- generateObserverDocumentation() {
650
- return '# Observer 模式\n\n## 使用方式\n```javascript\nconst observable = new Observable();\nobservable.addObserver(myObserver);\nobservable.notifyObservers(data);\n```\n\n## 特點\n- 鬆耦合設計\n- 動態訂閱\n- 一對多通知';
651
- }
652
- generateStrategyDocumentation() {
653
- return '# Strategy 模式\n\n## 使用方式\n```javascript\nconst context = new Context(new ConcreteStrategy());\nconst result = context.executeStrategy(data);\n```\n\n## 特點\n- 演算法封裝\n- 運行時切換\n- 開放封閉原則';
654
- }
655
- }
656
- //# sourceMappingURL=design-patterns.js.map