agent-ide 0.8.2 → 0.9.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 (177) hide show
  1. package/dist/core/change-signature/call-site-updater.d.ts +108 -0
  2. package/dist/core/change-signature/call-site-updater.d.ts.map +1 -0
  3. package/dist/core/change-signature/call-site-updater.js +347 -0
  4. package/dist/core/change-signature/call-site-updater.js.map +1 -0
  5. package/dist/core/change-signature/change-signature-service.d.ts +4 -55
  6. package/dist/core/change-signature/change-signature-service.d.ts.map +1 -1
  7. package/dist/core/change-signature/change-signature-service.js +17 -483
  8. package/dist/core/change-signature/change-signature-service.js.map +1 -1
  9. package/dist/core/change-signature/index.d.ts +4 -0
  10. package/dist/core/change-signature/index.d.ts.map +1 -1
  11. package/dist/core/change-signature/index.js +5 -0
  12. package/dist/core/change-signature/index.js.map +1 -1
  13. package/dist/core/change-signature/signature-transformer.d.ts +20 -0
  14. package/dist/core/change-signature/signature-transformer.d.ts.map +1 -0
  15. package/dist/core/change-signature/signature-transformer.js +91 -0
  16. package/dist/core/change-signature/signature-transformer.js.map +1 -0
  17. package/dist/core/change-signature/signature-validator.d.ts +30 -0
  18. package/dist/core/change-signature/signature-validator.d.ts.map +1 -0
  19. package/dist/core/change-signature/signature-validator.js +152 -0
  20. package/dist/core/change-signature/signature-validator.js.map +1 -0
  21. package/dist/core/change-signature/utils.d.ts +19 -0
  22. package/dist/core/change-signature/utils.d.ts.map +1 -0
  23. package/dist/core/change-signature/utils.js +23 -0
  24. package/dist/core/change-signature/utils.js.map +1 -0
  25. package/dist/core/cycles/cycle-detector.d.ts.map +1 -1
  26. package/dist/core/cycles/cycle-detector.js +16 -8
  27. package/dist/core/cycles/cycle-detector.js.map +1 -1
  28. package/dist/core/cycles/index.d.ts +1 -1
  29. package/dist/core/cycles/index.d.ts.map +1 -1
  30. package/dist/core/cycles/index.js +1 -1
  31. package/dist/core/cycles/index.js.map +1 -1
  32. package/dist/core/cycles/types.d.ts +20 -4
  33. package/dist/core/cycles/types.d.ts.map +1 -1
  34. package/dist/core/cycles/types.js +22 -4
  35. package/dist/core/cycles/types.js.map +1 -1
  36. package/dist/core/deadcode/dead-code-remover.js +4 -4
  37. package/dist/core/deadcode/dead-code-remover.js.map +1 -1
  38. package/dist/core/impact/dependency-extractor.d.ts +25 -0
  39. package/dist/core/impact/dependency-extractor.d.ts.map +1 -0
  40. package/dist/core/impact/dependency-extractor.js +65 -0
  41. package/dist/core/impact/dependency-extractor.js.map +1 -0
  42. package/dist/core/impact/file-scanner.d.ts +52 -0
  43. package/dist/core/impact/file-scanner.d.ts.map +1 -0
  44. package/dist/core/impact/file-scanner.js +131 -0
  45. package/dist/core/impact/file-scanner.js.map +1 -0
  46. package/dist/core/impact/impact-analyzer.d.ts +3 -64
  47. package/dist/core/impact/impact-analyzer.d.ts.map +1 -1
  48. package/dist/core/impact/impact-analyzer.js +13 -312
  49. package/dist/core/impact/impact-analyzer.js.map +1 -1
  50. package/dist/core/impact/index.d.ts +3 -0
  51. package/dist/core/impact/index.d.ts.map +1 -1
  52. package/dist/core/impact/index.js +3 -0
  53. package/dist/core/impact/index.js.map +1 -1
  54. package/dist/core/impact/path-resolver.d.ts +35 -0
  55. package/dist/core/impact/path-resolver.d.ts.map +1 -0
  56. package/dist/core/impact/path-resolver.js +166 -0
  57. package/dist/core/impact/path-resolver.js.map +1 -0
  58. package/dist/core/move/file-scanner.d.ts +48 -0
  59. package/dist/core/move/file-scanner.d.ts.map +1 -0
  60. package/dist/core/move/file-scanner.js +137 -0
  61. package/dist/core/move/file-scanner.js.map +1 -0
  62. package/dist/core/move/import-resolver.d.ts +5 -0
  63. package/dist/core/move/import-resolver.d.ts.map +1 -1
  64. package/dist/core/move/import-resolver.js +24 -6
  65. package/dist/core/move/import-resolver.js.map +1 -1
  66. package/dist/core/move/index.d.ts +7 -3
  67. package/dist/core/move/index.d.ts.map +1 -1
  68. package/dist/core/move/index.js +7 -2
  69. package/dist/core/move/index.js.map +1 -1
  70. package/dist/core/move/move-service.d.ts +11 -60
  71. package/dist/core/move/move-service.d.ts.map +1 -1
  72. package/dist/core/move/move-service.js +16 -352
  73. package/dist/core/move/move-service.js.map +1 -1
  74. package/dist/core/move/path-calculator.d.ts +49 -0
  75. package/dist/core/move/path-calculator.d.ts.map +1 -0
  76. package/dist/core/move/path-calculator.js +158 -0
  77. package/dist/core/move/path-calculator.js.map +1 -0
  78. package/dist/core/move/path-parser.d.ts +33 -0
  79. package/dist/core/move/path-parser.d.ts.map +1 -0
  80. package/dist/core/move/path-parser.js +53 -0
  81. package/dist/core/move/path-parser.js.map +1 -0
  82. package/dist/core/move/path-utils.d.ts +70 -0
  83. package/dist/core/move/path-utils.d.ts.map +1 -0
  84. package/dist/core/move/path-utils.js +201 -0
  85. package/dist/core/move/path-utils.js.map +1 -0
  86. package/dist/core/move/types.d.ts +81 -18
  87. package/dist/core/move/types.d.ts.map +1 -1
  88. package/dist/core/move/types.js +73 -5
  89. package/dist/core/move/types.js.map +1 -1
  90. package/dist/core/move-member/change-applier.d.ts +23 -0
  91. package/dist/core/move-member/change-applier.d.ts.map +1 -0
  92. package/dist/core/move-member/change-applier.js +51 -0
  93. package/dist/core/move-member/change-applier.js.map +1 -0
  94. package/dist/core/move-member/file-change-preparer.d.ts +49 -0
  95. package/dist/core/move-member/file-change-preparer.d.ts.map +1 -0
  96. package/dist/core/move-member/file-change-preparer.js +340 -0
  97. package/dist/core/move-member/file-change-preparer.js.map +1 -0
  98. package/dist/core/move-member/index.d.ts +4 -1
  99. package/dist/core/move-member/index.d.ts.map +1 -1
  100. package/dist/core/move-member/index.js +3 -0
  101. package/dist/core/move-member/index.js.map +1 -1
  102. package/dist/core/move-member/member-extractor.d.ts +11 -0
  103. package/dist/core/move-member/member-extractor.d.ts.map +1 -1
  104. package/dist/core/move-member/member-extractor.js +114 -22
  105. package/dist/core/move-member/member-extractor.js.map +1 -1
  106. package/dist/core/move-member/move-member-service.d.ts +3 -78
  107. package/dist/core/move-member/move-member-service.d.ts.map +1 -1
  108. package/dist/core/move-member/move-member-service.js +35 -419
  109. package/dist/core/move-member/move-member-service.js.map +1 -1
  110. package/dist/core/move-member/reference-updater.d.ts +73 -0
  111. package/dist/core/move-member/reference-updater.d.ts.map +1 -0
  112. package/dist/core/move-member/reference-updater.js +286 -0
  113. package/dist/core/move-member/reference-updater.js.map +1 -0
  114. package/dist/core/move-member/types.d.ts +17 -2
  115. package/dist/core/move-member/types.d.ts.map +1 -1
  116. package/dist/core/move-member/types.js.map +1 -1
  117. package/dist/core/rename/reference-updater.d.ts.map +1 -1
  118. package/dist/core/rename/reference-updater.js +4 -1
  119. package/dist/core/rename/reference-updater.js.map +1 -1
  120. package/dist/core/rename/rename-engine.d.ts +5 -3
  121. package/dist/core/rename/rename-engine.d.ts.map +1 -1
  122. package/dist/core/rename/rename-engine.js +29 -8
  123. package/dist/core/rename/rename-engine.js.map +1 -1
  124. package/dist/core/shared/symbol-finder/symbol-finder.d.ts.map +1 -1
  125. package/dist/core/shared/symbol-finder/symbol-finder.js +9 -1
  126. package/dist/core/shared/symbol-finder/symbol-finder.js.map +1 -1
  127. package/dist/infrastructure/changeset/change-applicator.d.ts +1 -1
  128. package/dist/infrastructure/changeset/change-applicator.d.ts.map +1 -1
  129. package/dist/infrastructure/changeset/change-applicator.js +22 -21
  130. package/dist/infrastructure/changeset/change-applicator.js.map +1 -1
  131. package/dist/infrastructure/changeset/changeset-builder.d.ts +2 -2
  132. package/dist/infrastructure/changeset/changeset-builder.d.ts.map +1 -1
  133. package/dist/infrastructure/changeset/changeset-builder.js +11 -6
  134. package/dist/infrastructure/changeset/changeset-builder.js.map +1 -1
  135. package/dist/infrastructure/changeset/changeset-converter.d.ts +1 -1
  136. package/dist/infrastructure/changeset/changeset-converter.d.ts.map +1 -1
  137. package/dist/infrastructure/changeset/changeset-converter.js +9 -8
  138. package/dist/infrastructure/changeset/changeset-converter.js.map +1 -1
  139. package/dist/infrastructure/changeset/index.d.ts +1 -0
  140. package/dist/infrastructure/changeset/index.d.ts.map +1 -1
  141. package/dist/infrastructure/changeset/index.js +2 -0
  142. package/dist/infrastructure/changeset/index.js.map +1 -1
  143. package/dist/infrastructure/changeset/types.d.ts +41 -4
  144. package/dist/infrastructure/changeset/types.d.ts.map +1 -1
  145. package/dist/infrastructure/changeset/types.js +41 -1
  146. package/dist/infrastructure/changeset/types.js.map +1 -1
  147. package/dist/interfaces/cli/cli.d.ts.map +1 -1
  148. package/dist/interfaces/cli/cli.js +1 -2
  149. package/dist/interfaces/cli/cli.js.map +1 -1
  150. package/dist/interfaces/cli/commands/index.d.ts +0 -1
  151. package/dist/interfaces/cli/commands/index.d.ts.map +1 -1
  152. package/dist/interfaces/cli/commands/index.js +0 -1
  153. package/dist/interfaces/cli/commands/index.js.map +1 -1
  154. package/dist/interfaces/cli/commands/move.command.d.ts +1 -0
  155. package/dist/interfaces/cli/commands/move.command.d.ts.map +1 -1
  156. package/dist/interfaces/cli/commands/move.command.js +127 -11
  157. package/dist/interfaces/cli/commands/move.command.js.map +1 -1
  158. package/dist/interfaces/cli/commands/rename.command.d.ts.map +1 -1
  159. package/dist/interfaces/cli/commands/rename.command.js +114 -6
  160. package/dist/interfaces/cli/commands/rename.command.js.map +1 -1
  161. package/dist/plugins/javascript/declaration-analyzer.d.ts.map +1 -1
  162. package/dist/plugins/javascript/declaration-analyzer.js +9 -0
  163. package/dist/plugins/javascript/declaration-analyzer.js.map +1 -1
  164. package/dist/plugins/typescript/declaration-analyzer.d.ts.map +1 -1
  165. package/dist/plugins/typescript/declaration-analyzer.js +4 -0
  166. package/dist/plugins/typescript/declaration-analyzer.js.map +1 -1
  167. package/dist/plugins/typescript/reference-finder.d.ts.map +1 -1
  168. package/dist/plugins/typescript/reference-finder.js +11 -2
  169. package/dist/plugins/typescript/reference-finder.js.map +1 -1
  170. package/dist/plugins/typescript/symbol-extractor.d.ts.map +1 -1
  171. package/dist/plugins/typescript/symbol-extractor.js +6 -2
  172. package/dist/plugins/typescript/symbol-extractor.js.map +1 -1
  173. package/package.json +1 -1
  174. package/dist/interfaces/cli/commands/move-member.command.d.ts +0 -11
  175. package/dist/interfaces/cli/commands/move-member.command.d.ts.map +0 -1
  176. package/dist/interfaces/cli/commands/move-member.command.js +0 -140
  177. package/dist/interfaces/cli/commands/move-member.command.js.map +0 -1
@@ -3,10 +3,12 @@
3
3
  * 成員移動核心服務
4
4
  */
5
5
  import * as path from 'path';
6
- import { createChangesetBuilder } from '../../infrastructure/changeset/index.js';
6
+ import { createChangesetBuilder, ChangesetCommand, TextEditOperationType } from '../../infrastructure/changeset/index.js';
7
7
  import { MemberExtractor } from './member-extractor.js';
8
+ import { ReferenceUpdater } from './reference-updater.js';
9
+ import { FileChangePreparer } from './file-change-preparer.js';
10
+ import { ChangeApplier } from './change-applier.js';
8
11
  import { MoveTargetType, MoveMemberErrorCode } from './types.js';
9
- import { SymbolFinder } from '../shared/symbol-finder/index.js';
10
12
  /**
11
13
  * Move Member Service
12
14
  */
@@ -14,21 +16,36 @@ export class MoveMemberService {
14
16
  parserRegistry;
15
17
  fileSystem;
16
18
  memberExtractor;
17
- symbolFinder;
19
+ referenceUpdater;
20
+ fileChangePreparer;
21
+ changeApplier;
18
22
  constructor(parserRegistry, fileSystem) {
19
23
  this.parserRegistry = parserRegistry;
20
24
  this.fileSystem = fileSystem;
21
25
  this.memberExtractor = new MemberExtractor(parserRegistry, fileSystem);
22
- this.symbolFinder = new SymbolFinder(parserRegistry, fileSystem);
26
+ this.referenceUpdater = new ReferenceUpdater(fileSystem);
27
+ this.fileChangePreparer = new FileChangePreparer(fileSystem);
28
+ this.changeApplier = new ChangeApplier(fileSystem);
23
29
  }
24
30
  /**
25
31
  * 執行 Move Member
26
32
  */
27
33
  async moveMember(options) {
28
- // 1. 提取成員
29
- const member = await this.memberExtractor.extractMember(options.sourceFile, options.memberName, options.memberType, options.sourceClassName);
34
+ // 1. 提取成員(支援 by-position 或 by-name)
35
+ let member = null;
36
+ if (options.sourcePosition) {
37
+ // by-position 模式
38
+ member = await this.memberExtractor.extractMemberAtPosition(options.sourceFile, options.sourcePosition.line, options.sourcePosition.column);
39
+ }
40
+ else if (options.memberName) {
41
+ // by-name 模式
42
+ member = await this.memberExtractor.extractMember(options.sourceFile, options.memberName, options.memberType, options.sourceClassName);
43
+ }
30
44
  if (!member) {
31
- return this.createErrorResult(MoveMemberErrorCode.MemberNotFound, `找不到成員: ${options.memberName}`);
45
+ const positionInfo = options.sourcePosition
46
+ ? `行 ${options.sourcePosition.line}` + (options.sourcePosition.column ? `:${options.sourcePosition.column}` : '')
47
+ : options.memberName;
48
+ return this.createErrorResult(MoveMemberErrorCode.MemberNotFound, `找不到成員: ${positionInfo}`);
32
49
  }
33
50
  // 2. 驗證目標
34
51
  const validationError = await this.validateTarget(options, member);
@@ -36,16 +53,16 @@ export class MoveMemberService {
36
53
  return this.createErrorResult(validationError.code, validationError.message);
37
54
  }
38
55
  // 3. 準備來源檔案變更
39
- const sourceFileChange = await this.prepareSourceFileChange(options, member);
56
+ const sourceFileChange = await this.fileChangePreparer.prepareSourceFileChange(options, member);
40
57
  // 4. 準備目標檔案變更
41
- const targetFileChange = await this.prepareTargetFileChange(options, member);
58
+ const targetFileChange = await this.fileChangePreparer.prepareTargetFileChange(options, member);
42
59
  // 5. 查找並準備引用更新
43
60
  const referenceUpdates = options.updateReferences !== false
44
- ? await this.prepareReferenceUpdates(options, member)
61
+ ? await this.referenceUpdater.prepareReferenceUpdates(options, member)
45
62
  : [];
46
63
  // 6. 執行或預覽
47
64
  if (!options.preview) {
48
- await this.applyChanges(sourceFileChange, targetFileChange, referenceUpdates);
65
+ await this.changeApplier.applyChanges(sourceFileChange, targetFileChange, referenceUpdates);
49
66
  }
50
67
  // 7. 計算統計
51
68
  const affectedFiles = new Set();
@@ -74,7 +91,7 @@ export class MoveMemberService {
74
91
  */
75
92
  async generateChangeset(options) {
76
93
  const builder = createChangesetBuilder()
77
- .forCommand('move-member');
94
+ .forCommand(ChangesetCommand.MoveMember);
78
95
  // 使用 preview 模式收集變更
79
96
  const result = await this.moveMember({
80
97
  ...options,
@@ -94,7 +111,7 @@ export class MoveMemberService {
94
111
  },
95
112
  newText: result.sourceFileChange.newCode,
96
113
  description: 'Remove member from source file'
97
- }], 'modify');
114
+ }], TextEditOperationType.Modify);
98
115
  // 轉換 targetFileChange
99
116
  if (result.targetFileChange.isNewFile) {
100
117
  builder.addFileCreate(result.targetFileChange.filePath, result.targetFileChange.newCode);
@@ -109,7 +126,7 @@ export class MoveMemberService {
109
126
  },
110
127
  newText: result.targetFileChange.newCode,
111
128
  description: 'Add member to target file'
112
- }], 'modify');
129
+ }], TextEditOperationType.Modify);
113
130
  }
114
131
  // 轉換 referenceUpdates
115
132
  for (const update of result.referenceUpdates) {
@@ -117,11 +134,13 @@ export class MoveMemberService {
117
134
  range: update.location.range,
118
135
  newText: update.newImport,
119
136
  description: `Update import: ${update.originalImport} -> ${update.newImport}`
120
- }], 'modify');
137
+ }], TextEditOperationType.Modify);
121
138
  }
122
139
  // 設定描述
123
140
  const relativePath = path.relative(options.projectRoot, options.target.filePath);
124
- builder.withDescription(`Moved '${options.memberName}' from '${path.basename(options.sourceFile)}' to '${relativePath}'`);
141
+ const memberInfo = options.memberName
142
+ ?? (options.sourcePosition ? `line ${options.sourcePosition.line}` : 'member');
143
+ builder.withDescription(`Moved '${memberInfo}' from '${path.basename(options.sourceFile)}' to '${relativePath}'`);
125
144
  return builder.build();
126
145
  }
127
146
  /**
@@ -159,409 +178,6 @@ export class MoveMemberService {
159
178
  }
160
179
  return null;
161
180
  }
162
- /**
163
- * 準備來源檔案變更
164
- */
165
- async prepareSourceFileChange(options, member) {
166
- const content = await this.readFile(options.sourceFile);
167
- if (!content) {
168
- throw new Error(`無法讀取來源檔案: ${options.sourceFile}`);
169
- }
170
- const lines = content.split('\n');
171
- const startLine = member.location.range.start.line - 1;
172
- const endLine = member.location.range.end.line - 1;
173
- // 移除成員(包含前面的文件註解)
174
- let removeStartLine = startLine;
175
- if (member.documentation) {
176
- const docLines = member.documentation.split('\n').length;
177
- removeStartLine = Math.max(0, startLine - docLines);
178
- }
179
- // 處理 re-export
180
- let reexportStatement = '';
181
- if (options.keepReexport) {
182
- const relativePath = this.calculateRelativePath(options.sourceFile, options.target.filePath);
183
- reexportStatement = `export { ${member.name} } from '${relativePath}';\n`;
184
- }
185
- const newLines = [
186
- ...lines.slice(0, removeStartLine),
187
- ...(options.keepReexport ? [reexportStatement] : []),
188
- ...lines.slice(endLine + 1)
189
- ];
190
- return {
191
- filePath: options.sourceFile,
192
- originalCode: content,
193
- newCode: newLines.join('\n')
194
- };
195
- }
196
- /**
197
- * 準備目標檔案變更
198
- * 自動判斷目標檔案是否存在:存在則插入,不存在則創建新檔案
199
- */
200
- async prepareTargetFileChange(options, member) {
201
- const { target } = options;
202
- // 準備要插入的程式碼
203
- let memberCode = member.sourceCode;
204
- if (member.documentation) {
205
- memberCode = member.documentation + '\n' + memberCode;
206
- }
207
- // 確保有 export(如果原本有)
208
- if (!memberCode.includes('export') && member.modifiers.includes('export')) {
209
- memberCode = 'export ' + memberCode;
210
- }
211
- // 自動判斷檔案是否存在
212
- const content = await this.readFile(target.filePath);
213
- const isNewFile = content === null;
214
- if (isNewFile) {
215
- // 新檔案:生成完整的檔案內容
216
- const imports = this.generateImports(member, options);
217
- const newCode = imports + (imports ? '\n\n' : '') + memberCode + '\n';
218
- return {
219
- filePath: target.filePath,
220
- originalCode: null,
221
- newCode,
222
- isNewFile: true
223
- };
224
- }
225
- // 現有檔案
226
- const lines = content.split('\n');
227
- let insertLine = target.insertPosition ?? -1;
228
- if (target.type === MoveTargetType.ExistingClass && target.className) {
229
- // 插入到類別內
230
- insertLine = await this.findClassInsertPosition(content, target.className);
231
- }
232
- if (insertLine < 0) {
233
- // 預設插入到檔案結尾
234
- insertLine = lines.length;
235
- }
236
- const newLines = [
237
- ...lines.slice(0, insertLine),
238
- '',
239
- memberCode,
240
- ...lines.slice(insertLine)
241
- ];
242
- return {
243
- filePath: target.filePath,
244
- originalCode: content,
245
- newCode: newLines.join('\n'),
246
- isNewFile: false
247
- };
248
- }
249
- /**
250
- * 準備引用更新
251
- * 直接掃描 import 語句,不依賴 SymbolFinder 的引用類型
252
- * 支援分離 import 語句:當 import 包含多個成員時,只更新被移動的成員
253
- */
254
- async prepareReferenceUpdates(options, member) {
255
- const updates = [];
256
- const projectFiles = await this.getProjectFiles(options.projectRoot);
257
- for (const filePath of projectFiles) {
258
- // 跳過來源檔案和目標檔案
259
- if (filePath === options.sourceFile || filePath === options.target.filePath) {
260
- continue;
261
- }
262
- const content = await this.readFile(filePath);
263
- if (!content) {
264
- continue;
265
- }
266
- const lines = content.split('\n');
267
- // 掃描每一行找 import 語句
268
- for (let i = 0; i < lines.length; i++) {
269
- const line = lines[i];
270
- // 檢查是否是 import 語句且包含成員名稱和來源路徑
271
- const importPathMatch = this.extractImportPath(line);
272
- if (!importPathMatch) {
273
- continue;
274
- }
275
- // 解析 import 路徑為絕對路徑並比較
276
- const resolvedImportPath = this.resolveImportPathToAbsolute(importPathMatch, filePath);
277
- const normalizedSourceFile = path.normalize(options.sourceFile);
278
- // 比較路徑(考慮副檔名)
279
- if (!this.pathsMatch(resolvedImportPath, normalizedSourceFile)) {
280
- continue;
281
- }
282
- // 解析 import 中的所有成員
283
- const importedMembers = this.parseImportedMembers(line);
284
- if (importedMembers.length === 0) {
285
- continue;
286
- }
287
- // 找出需要移動的成員(可能帶別名)
288
- const memberToMove = importedMembers.find(m => m.name === member.name);
289
- if (!memberToMove) {
290
- continue;
291
- }
292
- // 計算新的相對路徑
293
- const newRelativePath = this.calculateRelativePath(filePath, options.target.filePath);
294
- const quoteChar = this.detectQuoteChar(line);
295
- // 根據是否有其他成員決定如何更新 import
296
- const otherMembers = importedMembers.filter(m => m.name !== member.name);
297
- let newImport;
298
- if (otherMembers.length === 0) {
299
- // 只有一個成員,直接替換路徑
300
- newImport = line.replace(new RegExp(`(['"\`])${this.escapeRegex(importPathMatch)}\\1`), `$1${newRelativePath}$1`);
301
- }
302
- else {
303
- // 有多個成員,需要分離 import
304
- // 生成保留在原位置的 import
305
- const remainingMembersStr = otherMembers.map(m => m.alias ? `${m.name} as ${m.alias}` : m.name).join(', ');
306
- const remainingImport = `import { ${remainingMembersStr} } from ${quoteChar}${importPathMatch}${quoteChar};`;
307
- // 生成移動到新位置的 import
308
- const movedMemberStr = memberToMove.alias
309
- ? `${memberToMove.name} as ${memberToMove.alias}`
310
- : memberToMove.name;
311
- const newLocationImport = `import { ${movedMemberStr} } from ${quoteChar}${newRelativePath}${quoteChar};`;
312
- // 合併成新的 import(新位置的 import 在前)
313
- newImport = `${newLocationImport}\n${remainingImport}`;
314
- }
315
- if (newImport !== line) {
316
- updates.push({
317
- filePath,
318
- originalImport: line,
319
- newImport,
320
- location: {
321
- filePath,
322
- range: {
323
- start: { line: i + 1, column: 1 },
324
- end: { line: i + 1, column: line.length + 1 }
325
- }
326
- }
327
- });
328
- }
329
- }
330
- }
331
- return updates;
332
- }
333
- /**
334
- * 解析 import 語句中的成員列表
335
- */
336
- parseImportedMembers(line) {
337
- const members = [];
338
- // 匹配 { A, B as C, D } 形式
339
- const match = line.match(/import\s*\{([^}]+)\}\s*from/);
340
- if (!match) {
341
- return members;
342
- }
343
- const membersStr = match[1];
344
- const memberParts = membersStr.split(',');
345
- for (const part of memberParts) {
346
- const trimmed = part.trim();
347
- if (!trimmed) {
348
- continue;
349
- }
350
- // 檢查是否有別名 (name as alias)
351
- const aliasMatch = trimmed.match(/^(\w+)\s+as\s+(\w+)$/);
352
- if (aliasMatch) {
353
- members.push({ name: aliasMatch[1], alias: aliasMatch[2] });
354
- }
355
- else {
356
- members.push({ name: trimmed });
357
- }
358
- }
359
- return members;
360
- }
361
- /**
362
- * 檢測 import 語句使用的引號類型
363
- */
364
- detectQuoteChar(line) {
365
- if (line.includes('\'')) {
366
- return '\'';
367
- }
368
- if (line.includes('"')) {
369
- return '"';
370
- }
371
- return '\'';
372
- }
373
- /**
374
- * 從 import/export 語句中提取路徑
375
- */
376
- extractImportPath(line) {
377
- const trimmed = line.trim();
378
- // 檢查是否是 import/export 語句
379
- if (!trimmed.startsWith('import ') && !(trimmed.startsWith('export ') && trimmed.includes('from'))) {
380
- return null;
381
- }
382
- // 提取引號內的路徑
383
- const match = line.match(/from\s+['"`]([^'"`]+)['"`]/);
384
- if (!match) {
385
- // 嘗試匹配 import 'path' 形式
386
- const directImport = line.match(/import\s+['"`]([^'"`]+)['"`]/);
387
- return directImport ? directImport[1] : null;
388
- }
389
- return match[1];
390
- }
391
- /**
392
- * 解析 import 路徑為絕對路徑
393
- */
394
- resolveImportPathToAbsolute(importPath, fromFile) {
395
- if (importPath.startsWith('.')) {
396
- // 相對路徑
397
- const fromDir = path.dirname(fromFile);
398
- return path.normalize(path.resolve(fromDir, importPath));
399
- }
400
- // 非相對路徑(可能是 node_modules 或路徑別名)
401
- // 目前只處理相對路徑,其他情況返回原路徑
402
- return importPath;
403
- }
404
- /**
405
- * 比較兩個路徑是否指向同一檔案(考慮副檔名)
406
- */
407
- pathsMatch(path1, path2) {
408
- const normalized1 = path.normalize(path1);
409
- const normalized2 = path.normalize(path2);
410
- // 完全匹配
411
- if (normalized1 === normalized2) {
412
- return true;
413
- }
414
- // 移除副檔名後比較
415
- const withoutExt1 = this.removeExtension(normalized1);
416
- const withoutExt2 = this.removeExtension(normalized2);
417
- return withoutExt1 === withoutExt2;
418
- }
419
- /**
420
- * 移除檔案副檔名
421
- */
422
- removeExtension(filePath) {
423
- const ext = path.extname(filePath);
424
- if (['.js', '.ts', '.jsx', '.tsx'].includes(ext)) {
425
- return filePath.slice(0, -ext.length);
426
- }
427
- return filePath;
428
- }
429
- /**
430
- * 跳脫正則表達式特殊字元
431
- */
432
- escapeRegex(str) {
433
- return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
434
- }
435
- /**
436
- * 執行變更
437
- */
438
- async applyChanges(sourceFileChange, targetFileChange, referenceUpdates) {
439
- // 確保目標目錄存在
440
- if (targetFileChange.isNewFile) {
441
- const targetDir = path.dirname(targetFileChange.filePath);
442
- await this.fileSystem.createDirectory(targetDir, true);
443
- }
444
- // 寫入來源檔案
445
- await this.fileSystem.writeFile(sourceFileChange.filePath, sourceFileChange.newCode);
446
- // 寫入目標檔案
447
- await this.fileSystem.writeFile(targetFileChange.filePath, targetFileChange.newCode);
448
- // 更新引用
449
- for (const update of referenceUpdates) {
450
- const content = await this.readFile(update.filePath);
451
- if (!content) {
452
- continue;
453
- }
454
- const newContent = content.replace(update.originalImport, update.newImport);
455
- await this.fileSystem.writeFile(update.filePath, newContent);
456
- }
457
- }
458
- /**
459
- * 生成 import 陳述
460
- * 注意:不應該 import 成員自身,因為成員已經被移動到新檔案
461
- */
462
- generateImports(member, _options) {
463
- // 新檔案不需要從來源檔案 import 任何東西
464
- // 因為:
465
- // 1. 成員自身已經被複製到新檔案,不需要 import
466
- // 2. 成員的依賴應該從原本的 import 路徑導入,而不是從來源檔案
467
- // 3. 實際的依賴(如型別)應該透過分析原始檔案的 import 來決定
468
- //
469
- // 目前暫時不生成任何 import,因為這需要更複雜的依賴分析
470
- // 未來可以改進:分析成員使用的型別和函式,從原始檔案的 import 中提取
471
- return '';
472
- }
473
- /**
474
- * 找到類別內的插入位置
475
- * 使用正則表達式嚴格匹配類別定義,避免匹配註解中的類別名稱
476
- */
477
- async findClassInsertPosition(content, className) {
478
- const lines = content.split('\n');
479
- let inClass = false;
480
- let depth = 0;
481
- // 嚴格匹配類別定義:可選的 export/abstract,後接 class 關鍵字和類別名稱
482
- const classPattern = new RegExp(`^\\s*(export\\s+)?(abstract\\s+)?class\\s+${className}\\b`);
483
- for (let i = 0; i < lines.length; i++) {
484
- const line = lines[i];
485
- // 使用正則表達式匹配,避免匹配註解
486
- if (!inClass && classPattern.test(line)) {
487
- inClass = true;
488
- }
489
- if (inClass) {
490
- for (const char of line) {
491
- if (char === '{') {
492
- depth++;
493
- }
494
- else if (char === '}') {
495
- depth--;
496
- if (depth === 0) {
497
- // 找到類別結尾,在結尾括號前插入
498
- return i;
499
- }
500
- }
501
- }
502
- }
503
- }
504
- return -1;
505
- }
506
- /**
507
- * 計算相對路徑
508
- */
509
- calculateRelativePath(from, to) {
510
- const fromDir = path.dirname(from);
511
- let relativePath = path.relative(fromDir, to);
512
- // 移除副檔名
513
- relativePath = relativePath.replace(/\.(ts|tsx|js|jsx)$/, '');
514
- // 確保以 ./ 開頭
515
- if (!relativePath.startsWith('.')) {
516
- relativePath = './' + relativePath;
517
- }
518
- return relativePath;
519
- }
520
- /**
521
- * 取得專案檔案
522
- */
523
- async getProjectFiles(projectRoot) {
524
- const files = [];
525
- await this.collectFiles(projectRoot, files);
526
- return files;
527
- }
528
- /**
529
- * 遞迴收集檔案
530
- */
531
- async collectFiles(dirPath, files) {
532
- const entries = await this.fileSystem.readDirectory(dirPath);
533
- for (const entry of entries) {
534
- const fullPath = path.join(dirPath, entry.name);
535
- if (entry.name === 'node_modules' || entry.name.startsWith('.')) {
536
- continue;
537
- }
538
- if (entry.isDirectory) {
539
- await this.collectFiles(fullPath, files);
540
- }
541
- else if (entry.isFile && this.isSupportedFile(entry.name)) {
542
- files.push(fullPath);
543
- }
544
- }
545
- }
546
- /**
547
- * 檢查是否為支援的檔案類型
548
- */
549
- isSupportedFile(filename) {
550
- const supportedExtensions = ['.ts', '.tsx', '.js', '.jsx'];
551
- return supportedExtensions.some(ext => filename.endsWith(ext));
552
- }
553
- /**
554
- * 讀取檔案內容
555
- */
556
- async readFile(filePath) {
557
- try {
558
- const content = await this.fileSystem.readFile(filePath, 'utf-8');
559
- return typeof content === 'string' ? content : content.toString('utf-8');
560
- }
561
- catch {
562
- return null;
563
- }
564
- }
565
181
  /**
566
182
  * 建立錯誤結果
567
183
  */
@@ -1 +1 @@
1
- {"version":3,"file":"move-member-service.js","sourceRoot":"","sources":["../../../src/core/move-member/move-member-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAKL,cAAc,EACd,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAKT;IACA;IALF,eAAe,CAAkB;IACjC,YAAY,CAAe;IAE5C,YACmB,cAA8B,EAC9B,UAAuB;QADvB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,eAAU,GAAV,UAAU,CAAa;QAExC,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,OAA0B;QACzC,UAAU;QACV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CACrD,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,eAAe,CACxB,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,iBAAiB,CAC3B,mBAAmB,CAAC,cAAc,EAClC,UAAU,OAAO,CAAC,UAAU,EAAE,CAC/B,CAAC;QACJ,CAAC;QAED,UAAU;QACV,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnE,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC;QAED,cAAc;QACd,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE7E,cAAc;QACd,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE7E,eAAe;QACf,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,KAAK,KAAK;YACzD,CAAC,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC;YACrD,CAAC,CAAC,EAAE,CAAC;QAEP,WAAW;QACX,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAChF,CAAC;QAED,UAAU;QACV,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7C,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7C,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO;YAC1B,KAAK,EAAE;gBACL,iBAAiB,EAAE,gBAAgB,CAAC,MAAM;gBAC1C,aAAa,EAAE,aAAa,CAAC,IAAI;aAClC;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAA0B;QAChD,MAAM,OAAO,GAAG,sBAAsB,EAAE;aACrC,UAAU,CAAC,aAAa,CAAC,CAAC;QAE7B,oBAAoB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;YACnC,GAAG,OAAO;YACV,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,OAAO;iBACX,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC;iBAC9C,KAAK,EAAE,CAAC;QACb,CAAC;QAED,4BAA4B;QAC5B,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;gBACvD,KAAK,EAAE;oBACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;oBACxC,GAAG,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE;iBAC9G;gBACD,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO;gBACxC,WAAW,EAAE,gCAAgC;aAC9C,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEd,sBAAsB;QACtB,IAAI,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC3F,CAAC;aAAM,CAAC;YACN,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,YAAY,IAAI,EAAE,CAAC;YAClE,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACvD,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;oBACvD,KAAK,EAAE;wBACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;wBACxC,GAAG,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE;qBACxF;oBACD,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO;oBACxC,WAAW,EAAE,2BAA2B;iBACzC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChB,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC7C,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACtC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;oBAC5B,OAAO,EAAE,MAAM,CAAC,SAAS;oBACzB,WAAW,EAAE,kBAAkB,MAAM,CAAC,cAAc,OAAO,MAAM,CAAC,SAAS,EAAE;iBAC9E,CAAC,EAAE,QAAQ,CAAC,CAAC;QAChB,CAAC;QAED,OAAO;QACP,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjF,OAAO,CAAC,eAAe,CACrB,UAAU,OAAO,CAAC,UAAU,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,YAAY,GAAG,CACjG,CAAC;QAEF,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,OAA0B,EAC1B,MAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE7D,iBAAiB;QACjB,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,IAAI,EAAE,mBAAmB,CAAC,kBAAkB;oBAC5C,OAAO,EAAE,YAAY,MAAM,CAAC,QAAQ,EAAE;iBACvC,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;oBACL,IAAI,EAAE,mBAAmB,CAAC,mBAAmB;oBAC7C,OAAO,EAAE,YAAY,MAAM,CAAC,SAAS,EAAE;iBACxC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAC7D,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,SAAS,CACjB,CAAC;YAEF,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO;oBACL,IAAI,EAAE,mBAAmB,CAAC,uBAAuB;oBACjD,OAAO,EAAE,gBAAgB,MAAM,CAAC,IAAI,EAAE;iBACvC,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CACnC,OAA0B,EAC1B,MAAwB;QAExB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,aAAa,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAEnD,kBAAkB;QAClB,IAAI,eAAe,GAAG,SAAS,CAAC;QAChC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACzD,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC;QACtD,CAAC;QAED,eAAe;QACf,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7F,iBAAiB,GAAG,YAAY,MAAM,CAAC,IAAI,YAAY,YAAY,MAAM,CAAC;QAC5E,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC;YAClC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;SAC5B,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,UAAU;YAC5B,YAAY,EAAE,OAAO;YACrB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,uBAAuB,CACnC,OAA0B,EAC1B,MAAwB;QAExB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,YAAY;QACZ,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACnC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,UAAU,GAAG,MAAM,CAAC,aAAa,GAAG,IAAI,GAAG,UAAU,CAAC;QACxD,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1E,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;QACtC,CAAC;QAED,aAAa;QACb,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,OAAO,KAAK,IAAI,CAAC;QAEnC,IAAI,SAAS,EAAE,CAAC;YACd,gBAAgB;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC;YAEtE,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,YAAY,EAAE,IAAI;gBAClB,OAAO;gBACP,SAAS,EAAE,IAAI;aAChB,CAAC;QACJ,CAAC;QAED,OAAO;QAEP,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,UAAU,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC;QAE7C,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrE,SAAS;YACT,UAAU,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,YAAY;YACZ,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;YAC7B,EAAE;YACF,UAAU;YACV,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;SAC3B,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,OAAO;YACrB,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,uBAAuB,CACnC,OAA0B,EAC1B,MAAwB;QAExB,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAErE,KAAK,MAAM,QAAQ,IAAI,YAAY,EAAE,CAAC;YACpC,cAAc;YACd,IAAI,QAAQ,KAAK,OAAO,CAAC,UAAU,IAAI,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC5E,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAA,SAAS;YAAA,CAAC;YAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAElC,mBAAmB;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEtB,8BAA8B;gBAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,eAAe,EAAE,CAAC;oBAAA,SAAS;gBAAA,CAAC;gBAEjC,uBAAuB;gBACvB,MAAM,kBAAkB,GAAG,IAAI,CAAC,2BAA2B,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;gBACvF,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAEhE,cAAc;gBACd,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,EAAE,CAAC;oBAAA,SAAS;gBAAA,CAAC;gBAE3E,mBAAmB;gBACnB,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAAA,SAAS;gBAAA,CAAC;gBAE7C,mBAAmB;gBACnB,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvE,IAAI,CAAC,YAAY,EAAE,CAAC;oBAAA,SAAS;gBAAA,CAAC;gBAE9B,WAAW;gBACX,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACtF,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBAE7C,yBAAyB;gBACzB,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzE,IAAI,SAAiB,CAAC;gBAEtB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,gBAAgB;oBAChB,SAAS,GAAG,IAAI,CAAC,OAAO,CACtB,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,EAC7D,KAAK,eAAe,IAAI,CACzB,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,oBAAoB;oBACpB,mBAAmB;oBACnB,MAAM,mBAAmB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACb,MAAM,eAAe,GAAG,YAAY,mBAAmB,WAAW,SAAS,GAAG,eAAe,GAAG,SAAS,GAAG,CAAC;oBAE7G,mBAAmB;oBACnB,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK;wBACvC,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,OAAO,YAAY,CAAC,KAAK,EAAE;wBACjD,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;oBACtB,MAAM,iBAAiB,GAAG,YAAY,cAAc,WAAW,SAAS,GAAG,eAAe,GAAG,SAAS,GAAG,CAAC;oBAE1G,+BAA+B;oBAC/B,SAAS,GAAG,GAAG,iBAAiB,KAAK,eAAe,EAAE,CAAC;gBACzD,CAAC;gBAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACvB,OAAO,CAAC,IAAI,CAAC;wBACX,QAAQ;wBACR,cAAc,EAAE,IAAI;wBACpB,SAAS;wBACT,QAAQ,EAAE;4BACR,QAAQ;4BACR,KAAK,EAAE;gCACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gCACjC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;6BAC9C;yBACF;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,IAAY;QACvC,MAAM,OAAO,GAA4C,EAAE,CAAC;QAE5D,yBAAyB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACxD,IAAI,CAAC,KAAK,EAAE,CAAC;YAAA,OAAO,OAAO,CAAC;QAAA,CAAC;QAE7B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE1C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAA,SAAS;YAAA,CAAC;YAEzB,0BAA0B;YAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACzD,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAY;QAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAAA,OAAO,IAAI,CAAC;QAAA,CAAC;QACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAA,OAAO,GAAG,CAAC;QAAA,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAY;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,yBAAyB;QACzB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACnG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,WAAW;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,wBAAwB;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAChE,OAAO,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,2BAA2B,CAAC,UAAkB,EAAE,QAAgB;QACtE,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO;YACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,gCAAgC;QAChC,sBAAsB;QACtB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,KAAa,EAAE,KAAa;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE1C,OAAO;QACP,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,WAAW;QACX,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAEtD,OAAO,WAAW,KAAK,WAAW,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAgB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,GAAW;QAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,gBAA6E,EAC7E,gBAAwG,EACxG,gBAA4C;QAE5C,WAAW;QACX,IAAI,gBAAgB,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;QAED,SAAS;QACT,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAErF,SAAS;QACT,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAErF,OAAO;QACP,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;gBAAA,SAAS;YAAA,CAAC;YAEzB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5E,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,eAAe,CAAC,MAAwB,EAAE,QAA2B;QAC3E,0BAA0B;QAC1B,MAAM;QACN,8BAA8B;QAC9B,sCAAsC;QACtC,sCAAsC;QACtC,EAAE;QACF,iCAAiC;QACjC,wCAAwC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,uBAAuB,CAAC,OAAe,EAAE,SAAiB;QACtE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,iDAAiD;QACjD,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,6CAA6C,SAAS,KAAK,CAC5D,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,mBAAmB;YACnB,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;oBACxB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;wBAAA,KAAK,EAAE,CAAC;oBAAA,CAAC;yBACvB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;wBACtB,KAAK,EAAE,CAAC;wBACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;4BAChB,kBAAkB;4BAClB,OAAO,CAAC,CAAC;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,IAAY,EAAE,EAAU;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE9C,QAAQ;QACR,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAE9D,YAAY;QACZ,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,YAAY,GAAG,IAAI,GAAG,YAAY,CAAC;QACrC,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,WAAmB;QAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,KAAe;QACzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChE,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAgB;QACtC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,QAAQ,CAAC,QAAgB;QACrC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClE,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,IAAyB,EAAE,OAAe;QAClE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI;YACJ,KAAK,EAAE,OAAO;SACf,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,cAA8B,EAC9B,UAAuB;IAEvB,OAAO,IAAI,iBAAiB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"move-member-service.js","sourceRoot":"","sources":["../../../src/core/move-member/move-member-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Reference Updater
3
+ * 負責掃描和更新引用(import 語句)
4
+ */
5
+ import type { IFileSystem } from '../../infrastructure/storage/file-system.interface.js';
6
+ import type { MemberDefinition, ReferenceUpdate, MoveMemberOptions } from './types.js';
7
+ /**
8
+ * Reference Updater
9
+ * 負責掃描專案檔案中的 import 語句並準備更新
10
+ */
11
+ export declare class ReferenceUpdater {
12
+ private readonly fileSystem;
13
+ constructor(fileSystem: IFileSystem);
14
+ /**
15
+ * 準備引用更新
16
+ * 直接掃描 import 語句,不依賴 SymbolFinder 的引用類型
17
+ * 支援分離 import 語句:當 import 包含多個成員時,只更新被移動的成員
18
+ */
19
+ prepareReferenceUpdates(options: MoveMemberOptions, member: MemberDefinition): Promise<ReferenceUpdate[]>;
20
+ /**
21
+ * 解析 import 語句中的成員列表
22
+ */
23
+ private parseImportedMembers;
24
+ /**
25
+ * 檢測 import 語句使用的引號類型
26
+ */
27
+ private detectQuoteChar;
28
+ /**
29
+ * 從 import/export 語句中提取路徑
30
+ */
31
+ private extractImportPath;
32
+ /**
33
+ * 解析 import 路徑為絕對路徑
34
+ *
35
+ * @param importPath import 語句中的路徑
36
+ * @param fromFile 包含 import 語句的檔案路徑
37
+ * @param projectRoot 專案根目錄(用於解析路徑別名)
38
+ */
39
+ private resolveImportPathToAbsolute;
40
+ /**
41
+ * 比較兩個路徑是否指向同一檔案(考慮副檔名和 index.ts)
42
+ */
43
+ private pathsMatch;
44
+ /**
45
+ * 移除檔案副檔名
46
+ */
47
+ private removeExtension;
48
+ /**
49
+ * 跳脫正則表達式特殊字元
50
+ */
51
+ private escapeRegex;
52
+ /**
53
+ * 計算相對路徑
54
+ */
55
+ private calculateRelativePath;
56
+ /**
57
+ * 取得專案檔案
58
+ */
59
+ private getProjectFiles;
60
+ /**
61
+ * 遞迴收集檔案
62
+ */
63
+ private collectFiles;
64
+ /**
65
+ * 檢查是否為支援的檔案類型
66
+ */
67
+ private isSupportedFile;
68
+ /**
69
+ * 讀取檔案內容
70
+ */
71
+ private readFile;
72
+ }
73
+ //# sourceMappingURL=reference-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-updater.d.ts","sourceRoot":"","sources":["../../../src/core/move-member/reference-updater.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAYvF;;;GAGG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,WAAW;IAEpD;;;;OAIG;IACG,uBAAuB,CAC3B,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,EAAE,CAAC;IA8F7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IA2BnC;;OAEG;IACH,OAAO,CAAC,UAAU;IA6BlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAe7B;;OAEG;YACW,eAAe;IAM7B;;OAEG;YACW,YAAY;IAkB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;YACW,QAAQ;CAQvB"}