agent-ide 0.10.2 → 0.10.3

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 (122) hide show
  1. package/README.md +36 -26
  2. package/dist/core/deadcode/dead-code-detector.d.ts.map +1 -1
  3. package/dist/core/deadcode/dead-code-detector.js +3 -2
  4. package/dist/core/deadcode/dead-code-detector.js.map +1 -1
  5. package/dist/core/deadcode/dead-code-remover.d.ts.map +1 -1
  6. package/dist/core/deadcode/dead-code-remover.js +3 -2
  7. package/dist/core/deadcode/dead-code-remover.js.map +1 -1
  8. package/dist/core/foundations/dependency-graph/dependency-graph.d.ts +27 -3
  9. package/dist/core/foundations/dependency-graph/dependency-graph.d.ts.map +1 -1
  10. package/dist/core/foundations/dependency-graph/dependency-graph.js +92 -5
  11. package/dist/core/foundations/dependency-graph/dependency-graph.js.map +1 -1
  12. package/dist/core/foundations/symbol-finder/symbol-finder.d.ts.map +1 -1
  13. package/dist/core/foundations/symbol-finder/symbol-finder.js +95 -74
  14. package/dist/core/foundations/symbol-finder/symbol-finder.js.map +1 -1
  15. package/dist/core/move/file-scanner.d.ts.map +1 -1
  16. package/dist/core/move/file-scanner.js +17 -9
  17. package/dist/core/move/file-scanner.js.map +1 -1
  18. package/dist/core/move/index.d.ts +0 -1
  19. package/dist/core/move/index.d.ts.map +1 -1
  20. package/dist/core/move/index.js +0 -1
  21. package/dist/core/move/index.js.map +1 -1
  22. package/dist/core/move/move-service.d.ts.map +1 -1
  23. package/dist/core/move/move-service.js +3 -2
  24. package/dist/core/move/move-service.js.map +1 -1
  25. package/dist/core/move/path-calculator.d.ts +5 -3
  26. package/dist/core/move/path-calculator.d.ts.map +1 -1
  27. package/dist/core/move/path-calculator.js +42 -4
  28. package/dist/core/move/path-calculator.js.map +1 -1
  29. package/dist/core/move/types.d.ts +10 -0
  30. package/dist/core/move/types.d.ts.map +1 -1
  31. package/dist/core/move/types.js.map +1 -1
  32. package/dist/core/rename/reference-updater.d.ts +2 -1
  33. package/dist/core/rename/reference-updater.d.ts.map +1 -1
  34. package/dist/core/rename/reference-updater.js +23 -5
  35. package/dist/core/rename/reference-updater.js.map +1 -1
  36. package/dist/infrastructure/changeset/change-applicator.d.ts.map +1 -1
  37. package/dist/infrastructure/changeset/change-applicator.js +5 -4
  38. package/dist/infrastructure/changeset/change-applicator.js.map +1 -1
  39. package/dist/infrastructure/formatters/strategies/analyze-formatter.d.ts.map +1 -1
  40. package/dist/infrastructure/formatters/strategies/analyze-formatter.js +10 -15
  41. package/dist/infrastructure/formatters/strategies/analyze-formatter.js.map +1 -1
  42. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.d.ts +0 -4
  43. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.d.ts.map +1 -1
  44. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.js +13 -26
  45. package/dist/infrastructure/formatters/strategies/call-hierarchy-formatter.js.map +1 -1
  46. package/dist/infrastructure/formatters/strategies/find-references-formatter.d.ts +0 -4
  47. package/dist/infrastructure/formatters/strategies/find-references-formatter.d.ts.map +1 -1
  48. package/dist/infrastructure/formatters/strategies/find-references-formatter.js +10 -20
  49. package/dist/infrastructure/formatters/strategies/find-references-formatter.js.map +1 -1
  50. package/dist/infrastructure/formatters/utils/grouping.d.ts +32 -0
  51. package/dist/infrastructure/formatters/utils/grouping.d.ts.map +1 -0
  52. package/dist/infrastructure/formatters/utils/grouping.js +33 -0
  53. package/dist/infrastructure/formatters/utils/grouping.js.map +1 -0
  54. package/dist/infrastructure/formatters/utils/index.d.ts +5 -0
  55. package/dist/infrastructure/formatters/utils/index.d.ts.map +1 -0
  56. package/dist/infrastructure/formatters/utils/index.js +5 -0
  57. package/dist/infrastructure/formatters/utils/index.js.map +1 -0
  58. package/dist/infrastructure/parser/registry.d.ts.map +1 -1
  59. package/dist/infrastructure/parser/registry.js +2 -2
  60. package/dist/infrastructure/parser/registry.js.map +1 -1
  61. package/dist/infrastructure/worker-pool/workers/parse-worker.d.ts.map +1 -1
  62. package/dist/infrastructure/worker-pool/workers/parse-worker.js +2 -1
  63. package/dist/infrastructure/worker-pool/workers/parse-worker.js.map +1 -1
  64. package/dist/interfaces/cli/command-utils.d.ts +82 -0
  65. package/dist/interfaces/cli/command-utils.d.ts.map +1 -0
  66. package/dist/interfaces/cli/command-utils.js +95 -0
  67. package/dist/interfaces/cli/command-utils.js.map +1 -0
  68. package/dist/interfaces/cli/commands/call-hierarchy.command.d.ts.map +1 -1
  69. package/dist/interfaces/cli/commands/call-hierarchy.command.js +8 -9
  70. package/dist/interfaces/cli/commands/call-hierarchy.command.js.map +1 -1
  71. package/dist/interfaces/cli/commands/change-signature.command.d.ts.map +1 -1
  72. package/dist/interfaces/cli/commands/change-signature.command.js +16 -36
  73. package/dist/interfaces/cli/commands/change-signature.command.js.map +1 -1
  74. package/dist/interfaces/cli/commands/cycles.command.d.ts.map +1 -1
  75. package/dist/interfaces/cli/commands/cycles.command.js +8 -9
  76. package/dist/interfaces/cli/commands/cycles.command.js.map +1 -1
  77. package/dist/interfaces/cli/commands/deadcode.command.d.ts.map +1 -1
  78. package/dist/interfaces/cli/commands/deadcode.command.js +37 -55
  79. package/dist/interfaces/cli/commands/deadcode.command.js.map +1 -1
  80. package/dist/interfaces/cli/commands/find-references.command.d.ts.map +1 -1
  81. package/dist/interfaces/cli/commands/find-references.command.js +8 -9
  82. package/dist/interfaces/cli/commands/find-references.command.js.map +1 -1
  83. package/dist/interfaces/cli/commands/impact.command.d.ts.map +1 -1
  84. package/dist/interfaces/cli/commands/impact.command.js +8 -9
  85. package/dist/interfaces/cli/commands/impact.command.js.map +1 -1
  86. package/dist/interfaces/cli/commands/move.command.d.ts.map +1 -1
  87. package/dist/interfaces/cli/commands/move.command.js +44 -55
  88. package/dist/interfaces/cli/commands/move.command.js.map +1 -1
  89. package/dist/interfaces/cli/commands/rename.command.d.ts.map +1 -1
  90. package/dist/interfaces/cli/commands/rename.command.js +18 -92
  91. package/dist/interfaces/cli/commands/rename.command.js.map +1 -1
  92. package/dist/interfaces/cli/commands/snapshot.command.d.ts.map +1 -1
  93. package/dist/interfaces/cli/commands/snapshot.command.js +6 -8
  94. package/dist/interfaces/cli/commands/snapshot.command.js.map +1 -1
  95. package/dist/interfaces/cli/path-location-parser.d.ts +49 -0
  96. package/dist/interfaces/cli/path-location-parser.d.ts.map +1 -0
  97. package/dist/interfaces/cli/path-location-parser.js +77 -0
  98. package/dist/interfaces/cli/path-location-parser.js.map +1 -0
  99. package/dist/plugins/javascript/parser.d.ts +2 -0
  100. package/dist/plugins/javascript/parser.d.ts.map +1 -1
  101. package/dist/plugins/javascript/parser.js +16 -3
  102. package/dist/plugins/javascript/parser.js.map +1 -1
  103. package/dist/plugins/javascript/pattern-analyzer.d.ts.map +1 -1
  104. package/dist/plugins/javascript/pattern-analyzer.js +2 -1
  105. package/dist/plugins/javascript/pattern-analyzer.js.map +1 -1
  106. package/dist/plugins/typescript/parser.d.ts +7 -0
  107. package/dist/plugins/typescript/parser.d.ts.map +1 -1
  108. package/dist/plugins/typescript/parser.js +24 -2
  109. package/dist/plugins/typescript/parser.js.map +1 -1
  110. package/dist/shared/errors/error-utils.d.ts +11 -0
  111. package/dist/shared/errors/error-utils.d.ts.map +1 -0
  112. package/dist/shared/errors/error-utils.js +13 -0
  113. package/dist/shared/errors/error-utils.js.map +1 -0
  114. package/dist/shared/errors/index.d.ts +1 -0
  115. package/dist/shared/errors/index.d.ts.map +1 -1
  116. package/dist/shared/errors/index.js +2 -0
  117. package/dist/shared/errors/index.js.map +1 -1
  118. package/package.json +1 -1
  119. package/dist/core/move/path-parser.d.ts +0 -33
  120. package/dist/core/move/path-parser.d.ts.map +0 -1
  121. package/dist/core/move/path-parser.js +0 -53
  122. package/dist/core/move/path-parser.js.map +0 -1
@@ -6,7 +6,9 @@ import * as path from 'path';
6
6
  import { ImpactAnalyzer } from '../../../core/impact/index.js';
7
7
  import { CycleDetector } from '../../../core/cycles/index.js';
8
8
  import { QueryCommand } from '../../../infrastructure/formatters/index.js';
9
- import { createUnifiedOutputHandler, parseOutputFormat, OutputFormat } from '../../cli/unified-output-handler.js';
9
+ import { createUnifiedOutputHandler, OutputFormat } from '../../cli/unified-output-handler.js';
10
+ import { tryParseOutputFormat } from '../../cli/command-utils.js';
11
+ import { getErrorMessage } from '../../../shared/errors/index.js';
10
12
  /**
11
13
  * 設定 cycles 命令
12
14
  */
@@ -25,15 +27,12 @@ export function setupCyclesCommand(program, context) {
25
27
  */
26
28
  async function handleCyclesCommand(options, context) {
27
29
  const outputHandler = createUnifiedOutputHandler();
28
- let format;
29
- try {
30
- format = parseOutputFormat(options.format, false);
31
- }
32
- catch {
33
- outputHandler.outputError('不支援的輸出格式。可用格式: json, summary', OutputFormat.Summary);
34
- process.exitCode = 1;
30
+ // 解析輸出格式
31
+ const formatResult = tryParseOutputFormat(options.format, false, outputHandler);
32
+ if (!formatResult.success) {
35
33
  return;
36
34
  }
35
+ const format = formatResult.format;
37
36
  const analyzePath = path.resolve(options.path || process.cwd());
38
37
  // 檢查路徑是否存在(在進度訊息前檢查)
39
38
  const pathExists = await context.fileSystem.exists(analyzePath);
@@ -78,7 +77,7 @@ async function handleCyclesCommand(options, context) {
78
77
  outputHandler.outputQuery(result, format);
79
78
  }
80
79
  catch (error) {
81
- const errorMessage = error instanceof Error ? error.message : String(error);
80
+ const errorMessage = getErrorMessage(error);
82
81
  outputHandler.outputError(`依賴分析失敗: ${errorMessage}`, format);
83
82
  process.exitCode = 1;
84
83
  if (process.env.NODE_ENV !== 'test') {
@@ -1 +1 @@
1
- {"version":3,"file":"cycles.command.js","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/cycles.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cycles.command.js","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/cycles.command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deadcode.command.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/deadcode.command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAYxE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAapF"}
1
+ {"version":3,"file":"deadcode.command.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/deadcode.command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAaxE;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAapF"}
@@ -5,8 +5,9 @@
5
5
  import { IndexEngine, createIndexConfig, CLI_INDEX_DEFAULTS } from '../../../core/foundations/indexing/index.js';
6
6
  import { createDeadCodeDetector, createDeadCodeRemover } from '../../../core/deadcode/index.js';
7
7
  import { ParserRegistry } from '../../../infrastructure/parser/registry.js';
8
- import { ChangeApplicator, convertChangesetToPreviewInput } from '../../../infrastructure/changeset/index.js';
9
- import { createUnifiedOutputHandler, parseOutputFormat, OutputFormat } from '../../cli/unified-output-handler.js';
8
+ import { createUnifiedOutputHandler, OutputFormat } from '../../cli/unified-output-handler.js';
9
+ import { tryParseOutputFormat, executeMutationCommand } from '../../cli/command-utils.js';
10
+ import { getErrorMessage } from '../../../shared/errors/index.js';
10
11
  /**
11
12
  * 設定 deadcode 命令
12
13
  */
@@ -39,17 +40,12 @@ async function runDeadCodeDetection(options, context, indexEngine, parserRegistr
39
40
  */
40
41
  async function handleDeadCodeCommand(options, context) {
41
42
  const outputHandler = createUnifiedOutputHandler();
42
- // 使用者指定的格式
43
- const formatStr = options.format;
44
- let format;
45
- try {
46
- format = parseOutputFormat(formatStr, true); // 允許 diff
47
- }
48
- catch {
49
- outputHandler.outputError('不支援的輸出格式。可用格式: json, summary, diff', OutputFormat.Summary);
50
- process.exitCode = 1;
51
- throw new Error('不支援的輸出格式');
43
+ // 解析輸出格式
44
+ const formatResult = tryParseOutputFormat(options.format, true, outputHandler);
45
+ if (!formatResult.success) {
46
+ return;
52
47
  }
48
+ const format = formatResult.format;
53
49
  const isJsonFormat = format === OutputFormat.Json;
54
50
  if (!isJsonFormat) {
55
51
  console.log(' 檢測並準備刪除 Dead Code...');
@@ -60,7 +56,7 @@ async function handleDeadCodeCommand(options, context) {
60
56
  if (!exists) {
61
57
  outputHandler.outputError(`路徑不存在: ${projectPath}`, format);
62
58
  process.exitCode = 1;
63
- throw new Error(`路徑不存在: ${projectPath}`);
59
+ return;
64
60
  }
65
61
  // 建立索引引擎
66
62
  const indexConfig = createIndexConfig(projectPath, CLI_INDEX_DEFAULTS);
@@ -95,15 +91,10 @@ async function handleDeadCodeCommand(options, context) {
95
91
  excludeSymbols,
96
92
  cleanupImports: true
97
93
  });
98
- // 3. 使用新的 Changeset 流程
94
+ // 3. 生成 Changeset
99
95
  const changeset = await remover.generateChangeset(detectionResult.items);
100
- if (!changeset.success) {
101
- outputHandler.outputError(changeset.errors?.join(', ') ?? '生成變更失敗', format, 'deadcode');
102
- process.exitCode = 1;
103
- return;
104
- }
105
- // 無變更時的處理
106
- if (changeset.textChanges.length === 0) {
96
+ // 無變更時的處理(changeset.success 但無 textChanges)
97
+ if (changeset.success && changeset.textChanges.length === 0) {
107
98
  if (!isJsonFormat) {
108
99
  console.log(' 符合條件的 dead code 已被過濾(排除規則)');
109
100
  if (changeset.warnings && changeset.warnings.length > 0) {
@@ -123,47 +114,38 @@ async function handleDeadCodeCommand(options, context) {
123
114
  }
124
115
  return;
125
116
  }
126
- // 4. 轉換為 PreviewInput
127
- const previewInput = await convertChangesetToPreviewInput(changeset, context.fileSystem);
128
- // 5. Dry-run 模式只輸出預覽
129
- if (options.dryRun) {
130
- outputHandler.outputMutation(previewInput, format);
131
- if (!isJsonFormat) {
132
- console.log('\n 移除 --dry-run 實際執行刪除');
133
- }
134
- return;
135
- }
136
- // 6. 應用變更(帶回滾)
137
- if (!isJsonFormat) {
117
+ // 4. 執行變更類命令統一流程
118
+ if (!isJsonFormat && !options.dryRun) {
138
119
  console.log(' 執行刪除...');
139
120
  }
140
- const applicator = new ChangeApplicator(context.fileSystem);
141
- const result = await applicator.apply(changeset, {
142
- atomic: true,
143
- rollbackOnError: true
144
- });
145
- if (result.success) {
146
- outputHandler.outputMutation(previewInput, format);
147
- if (!isJsonFormat) {
148
- const totalRemovals = changeset.textChanges
149
- .flatMap(tc => tc.edits)
150
- .filter(e => e.description?.startsWith('Remove ')).length;
151
- const importsCleanedUp = changeset.textChanges
152
- .flatMap(tc => tc.edits)
153
- .filter(e => e.description?.includes('import')).length;
154
- console.log(`\n 已刪除 ${totalRemovals} 個 dead code`);
155
- if (importsCleanedUp > 0) {
156
- console.log(` 並清理 ${importsCleanedUp} 個未使用的 import`);
121
+ const result = await executeMutationCommand(changeset, {
122
+ fileSystem: context.fileSystem,
123
+ format,
124
+ dryRun: options.dryRun,
125
+ outputHandler,
126
+ commandName: 'deadcode',
127
+ onSuccess: () => {
128
+ if (!isJsonFormat) {
129
+ const totalRemovals = changeset.textChanges
130
+ .flatMap(tc => tc.edits)
131
+ .filter(e => e.description?.startsWith('Remove ')).length;
132
+ const importsCleanedUp = changeset.textChanges
133
+ .flatMap(tc => tc.edits)
134
+ .filter(e => e.description?.includes('import')).length;
135
+ console.log(`\n 已刪除 ${totalRemovals} 個 dead code`);
136
+ if (importsCleanedUp > 0) {
137
+ console.log(` 並清理 ${importsCleanedUp} 個未使用的 import`);
138
+ }
157
139
  }
158
140
  }
159
- }
160
- else {
161
- outputHandler.outputError(result.errors?.join(', ') ?? '執行失敗', format, 'deadcode');
162
- process.exitCode = 1;
141
+ });
142
+ // dry-run 提示
143
+ if (options.dryRun && result.success && !isJsonFormat) {
144
+ console.log('\n 移除 --dry-run 實際執行刪除');
163
145
  }
164
146
  }
165
147
  catch (error) {
166
- const errorMessage = error instanceof Error ? error.message : String(error);
148
+ const errorMessage = getErrorMessage(error);
167
149
  outputHandler.outputError(`Dead code 刪除失敗: ${errorMessage}`, format);
168
150
  process.exitCode = 1;
169
151
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deadcode.command.js","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/deadcode.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deadcode.command.js","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/deadcode.command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"find-references.command.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/find-references.command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAQxE;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAS1F"}
1
+ {"version":3,"file":"find-references.command.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/find-references.command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AASxE;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAS1F"}
@@ -6,7 +6,9 @@ import { IndexEngine, createIndexConfig, CLI_INDEX_DEFAULTS } from '../../../cor
6
6
  import { createSymbolFinder, SymbolReferenceType, symbolToKey, serializeSymbolKey } from '../../../core/foundations/symbol-finder/index.js';
7
7
  import { ParserRegistry } from '../../../infrastructure/parser/registry.js';
8
8
  import { QueryCommand } from '../../../infrastructure/formatters/index.js';
9
- import { createUnifiedOutputHandler, parseOutputFormat, OutputFormat } from '../../cli/unified-output-handler.js';
9
+ import { createUnifiedOutputHandler, OutputFormat } from '../../cli/unified-output-handler.js';
10
+ import { tryParseOutputFormat } from '../../cli/command-utils.js';
11
+ import { getErrorMessage } from '../../../shared/errors/index.js';
10
12
  /**
11
13
  * 設定 find-references 命令
12
14
  */
@@ -25,15 +27,12 @@ export function setupFindReferencesCommand(program, context) {
25
27
  */
26
28
  async function handleFindReferencesCommand(symbolName, options, context) {
27
29
  const outputHandler = createUnifiedOutputHandler();
28
- let format;
29
- try {
30
- format = parseOutputFormat(options.format, false);
31
- }
32
- catch {
33
- outputHandler.outputError('不支援的輸出格式。可用格式: json, summary', OutputFormat.Summary);
34
- process.exitCode = 1;
30
+ // 解析輸出格式
31
+ const formatResult = tryParseOutputFormat(options.format, false, outputHandler);
32
+ if (!formatResult.success) {
35
33
  return;
36
34
  }
35
+ const format = formatResult.format;
37
36
  if (format !== OutputFormat.Json) {
38
37
  console.log(`🔍 查找符號引用: ${symbolName}...`);
39
38
  }
@@ -111,7 +110,7 @@ async function handleFindReferencesCommand(symbolName, options, context) {
111
110
  outputHandler.outputQuery(result, format);
112
111
  }
113
112
  catch (error) {
114
- const errorMessage = error instanceof Error ? error.message : String(error);
113
+ const errorMessage = getErrorMessage(error);
115
114
  // 區分索引錯誤和查找錯誤
116
115
  const isIndexError = errorMessage.includes('索引')
117
116
  || errorMessage.includes('index')
@@ -1 +1 @@
1
- {"version":3,"file":"find-references.command.js","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/find-references.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-references.command.js","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/find-references.command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzG,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAEnB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EACL,YAAY,EAKb,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACb,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAQ1D;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAgB,EAAE,OAAuB;IAClF,OAAO;SACJ,OAAO,CAAC,0BAA0B,CAAC;SACnC,WAAW,CAAC,cAAc,CAAC;SAC3B,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,GAAG,CAAC;SACxC,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,EAAE,SAAS,CAAC;SAC7D,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAA8B,EAAE,EAAE;QAC/D,MAAM,2BAA2B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,2BAA2B,CACxC,UAAkB,EAClB,OAA8B,EAC9B,OAAuB;IAEvB,MAAM,aAAa,GAAG,0BAA0B,EAAE,CAAC;IAEnD,SAAS;IACT,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAChF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAAA,OAAO;IAAA,CAAC;IACpC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAO,CAAC;IAEpC,IAAI,MAAM,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAElD,SAAS;IACT,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAEvE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,OAAO;QACP,MAAM,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE5C,cAAc;QACd,MAAM,YAAY,GAAG,WAAW,CAAC,kBAAkB,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEpD,SAAS;QACT,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC/D,IAAI,UAAU,GAA8B,IAAI,CAAC;QACjD,IAAI,WAAW,GAAyB,EAAE,CAAC;QAC3C,IAAI,UAAU,GAAG,SAAS,CAAC;QAE3B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,WAAW;YACX,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ;gBACrC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;gBAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;aAClD,CAAC,CAAC,CAAC;YAEJ,cAAc;YACd,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC5B,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5C,CAAC;QAED,yBAAyB;QACzB,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,kBAAkB,CAAC,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5E,sBAAsB;QACtB,IAAI,IAAI,GAAsB,EAAE,CAAC;QAEjC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,2BAA2B;YAC3B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAE9E,cAAc;YACd,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,IAAI,GAAG,MAAM,YAAY,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACxE,CAAC;QAED,UAAU;QACV,MAAM,UAAU,GAAoB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;YACnC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;YACvC,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAChC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;SAC3B,CAAC,CAAC,CAAC;QAEJ,UAAU;QACV,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhE,OAAO;QACP,MAAM,MAAM,GAAyB;YACnC,OAAO,EAAE,YAAY,CAAC,cAAc;YACpC,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,UAAU;YAChB,UAAU;YACV,WAAW,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC7D,UAAU;YACV,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,CAAC,MAAM;gBAClC,aAAa;gBACb,eAAe,EAAE,WAAW,CAAC,MAAM;aACpC;SACF,CAAC;QAEF,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAE5C,cAAc;QACd,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;eAC3C,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;eAC9B,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEvD,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW,KAAK,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,WAAW,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAyB;IACjD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,mBAAmB,CAAC,UAAU;YACjC,OAAO,YAAY,CAAC;QACtB,KAAK,mBAAmB,CAAC,MAAM;YAC7B,OAAO,QAAQ,CAAC;QAClB,KAAK,mBAAmB,CAAC,MAAM;YAC7B,OAAO,QAAQ,CAAC;QAClB,KAAK,mBAAmB,CAAC,KAAK,CAAC;QAC/B;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"impact.command.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/impact.command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAUxE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAUlF"}
1
+ {"version":3,"file":"impact.command.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/impact.command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAWxE;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAUlF"}
@@ -5,8 +5,10 @@
5
5
  import * as path from 'path';
6
6
  import { ImpactAnalyzer } from '../../../core/impact/index.js';
7
7
  import { QueryCommand } from '../../../infrastructure/formatters/index.js';
8
- import { createUnifiedOutputHandler, parseOutputFormat, OutputFormat } from '../../cli/unified-output-handler.js';
8
+ import { createUnifiedOutputHandler, OutputFormat } from '../../cli/unified-output-handler.js';
9
+ import { tryParseOutputFormat } from '../../cli/command-utils.js';
9
10
  import { loadPathAliases } from '../../../plugins/typescript/tsconfig-loader.js';
11
+ import { getErrorMessage } from '../../../shared/errors/index.js';
10
12
  /**
11
13
  * 設定 impact 命令
12
14
  */
@@ -26,15 +28,12 @@ export function setupImpactCommand(program, context) {
26
28
  */
27
29
  async function handleImpactCommand(options, context) {
28
30
  const outputHandler = createUnifiedOutputHandler();
29
- let format;
30
- try {
31
- format = parseOutputFormat(options.format, false);
32
- }
33
- catch {
34
- outputHandler.outputError('不支援的輸出格式。可用格式: json, summary', OutputFormat.Summary);
35
- process.exitCode = 1;
31
+ // 解析輸出格式
32
+ const formatResult = tryParseOutputFormat(options.format, false, outputHandler);
33
+ if (!formatResult.success) {
36
34
  return;
37
35
  }
36
+ const format = formatResult.format;
38
37
  const analyzePath = path.resolve(options.path || process.cwd());
39
38
  // 檢查專案路徑是否存在(在進度訊息前檢查)
40
39
  const pathExists = await context.fileSystem.exists(analyzePath);
@@ -92,7 +91,7 @@ async function handleImpactCommand(options, context) {
92
91
  outputHandler.outputQuery(result, format);
93
92
  }
94
93
  catch (error) {
95
- const errorMessage = error instanceof Error ? error.message : String(error);
94
+ const errorMessage = getErrorMessage(error);
96
95
  outputHandler.outputError(`依賴分析失敗: ${errorMessage}`, format);
97
96
  process.exitCode = 1;
98
97
  if (process.env.NODE_ENV !== 'test') {
@@ -1 +1 @@
1
- {"version":3,"file":"impact.command.js","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/impact.command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impact.command.js","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/impact.command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"move.command.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/move.command.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAyCxE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CA+ChF"}
1
+ {"version":3,"file":"move.command.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/cli/commands/move.command.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AA0CxE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CA+ChF"}
@@ -6,13 +6,15 @@
6
6
  */
7
7
  import * as path from 'path';
8
8
  import { MoveService } from '../../../core/move/move-service.js';
9
- import { parseMoveTarget, hasPositionInfo } from '../../../core/move/path-parser.js';
10
9
  import { MoveMemberService, MoveTargetType } from '../../../core/move-member/index.js';
10
+ import { parsePathLocation, hasPositionInfo } from '../../cli/path-location-parser.js';
11
11
  import { ParserRegistry } from '../../../infrastructure/parser/registry.js';
12
12
  import { ChangeApplicator, convertChangesetToPreviewInput, ChangesetBuilder } from '../../../infrastructure/changeset/index.js';
13
13
  import { FileOperationType } from '../../../infrastructure/changeset/index.js';
14
- import { createUnifiedOutputHandler, parseOutputFormat, OutputFormat } from '../../cli/unified-output-handler.js';
14
+ import { createUnifiedOutputHandler, OutputFormat } from '../../cli/unified-output-handler.js';
15
+ import { tryParseOutputFormat, executeMutationCommand } from '../../cli/command-utils.js';
15
16
  import { loadTsconfigPathConfig } from '../../../plugins/typescript/tsconfig-loader.js';
17
+ import { getErrorMessage } from '../../../shared/errors/index.js';
16
18
  /** 檢查路徑是否包含 glob pattern */
17
19
  function isGlobPattern(pattern) {
18
20
  return /[*?[\]{}]/.test(pattern);
@@ -73,7 +75,7 @@ export function setupMoveCommand(program, context) {
73
75
  }
74
76
  else {
75
77
  // 解析路徑格式,判斷是檔案移動還是成員移動
76
- const parsedSource = parseMoveTarget(source);
78
+ const parsedSource = parsePathLocation(source);
77
79
  if (hasPositionInfo(parsedSource)) {
78
80
  // 成員移動模式
79
81
  await handleMoveMemberCommand(source, target, options, context);
@@ -90,15 +92,12 @@ export function setupMoveCommand(program, context) {
90
92
  */
91
93
  async function handleMoveCommand(source, target, options, context) {
92
94
  const outputHandler = createUnifiedOutputHandler();
93
- let format;
94
- try {
95
- format = parseOutputFormat(options.format, true);
96
- }
97
- catch {
98
- outputHandler.outputError('不支援的輸出格式。可用格式: json, summary, diff', OutputFormat.Summary);
99
- process.exitCode = 1;
95
+ // 解析輸出格式
96
+ const formatResult = tryParseOutputFormat(options.format, true, outputHandler);
97
+ if (!formatResult.success) {
100
98
  return;
101
99
  }
100
+ const format = formatResult.format;
102
101
  const isJsonFormat = format === OutputFormat.Json;
103
102
  const projectRoot = options.path || process.cwd();
104
103
  // Bug 1 修復:解析相對路徑為絕對路徑(相對於 --path)
@@ -211,7 +210,7 @@ async function handleMoveCommand(source, target, options, context) {
211
210
  }
212
211
  }
213
212
  catch (error) {
214
- const errorMsg = error instanceof Error ? error.message : String(error);
213
+ const errorMsg = getErrorMessage(error);
215
214
  outputHandler.outputError(errorMsg, format);
216
215
  process.exitCode = 1;
217
216
  if (process.env.NODE_ENV !== 'test') {
@@ -225,15 +224,12 @@ async function handleMoveCommand(source, target, options, context) {
225
224
  */
226
225
  async function handleGlobMoveCommand(source, target, options, context) {
227
226
  const outputHandler = createUnifiedOutputHandler();
228
- let format;
229
- try {
230
- format = parseOutputFormat(options.format, true);
231
- }
232
- catch {
233
- outputHandler.outputError('不支援的輸出格式。可用格式: json, summary, diff', OutputFormat.Summary);
234
- process.exitCode = 1;
227
+ // 解析輸出格式
228
+ const formatResult = tryParseOutputFormat(options.format, true, outputHandler);
229
+ if (!formatResult.success) {
235
230
  return;
236
231
  }
232
+ const format = formatResult.format;
237
233
  const isJsonFormat = format === OutputFormat.Json;
238
234
  const projectRoot = options.path || process.cwd();
239
235
  try {
@@ -293,6 +289,15 @@ async function handleGlobMoveCommand(source, target, options, context) {
293
289
  // 計算 glob 的基礎目錄(用於保留目錄結構)
294
290
  const globBaseDir = getGlobBaseDir(globPattern);
295
291
  const absoluteGlobBaseDir = path.resolve(projectRoot, globBaseDir);
292
+ // 建立所有被移動檔案的 source → target 映射(用於識別內部引用)
293
+ const allMovedFilesMap = new Map();
294
+ for (const sourceFile of matchedFiles) {
295
+ const relativePath = path.relative(absoluteGlobBaseDir, sourceFile);
296
+ const targetFile = targetIsDirectory
297
+ ? path.join(resolvedTarget, relativePath)
298
+ : resolvedTarget;
299
+ allMovedFilesMap.set(sourceFile, targetFile);
300
+ }
296
301
  // 為每個檔案生成 changeset 並合併
297
302
  const builder = new ChangesetBuilder();
298
303
  const allMovedFiles = [];
@@ -307,7 +312,11 @@ async function handleGlobMoveCommand(source, target, options, context) {
307
312
  target: targetFile,
308
313
  updateImports: options.updateImports
309
314
  };
310
- const changeset = await moveService.generateChangeset(moveOperation, { projectRoot });
315
+ // 傳入 batchMoveInfo 讓服務知道哪些檔案是一起被移動的
316
+ const changeset = await moveService.generateChangeset(moveOperation, {
317
+ projectRoot,
318
+ batchMoveInfo: { allMovedFiles: allMovedFilesMap }
319
+ });
311
320
  if (!changeset.success) {
312
321
  outputHandler.outputError(changeset.errors?.join(', ') ?? `移動失敗: ${sourceFile}`, format);
313
322
  process.exitCode = 1;
@@ -363,7 +372,7 @@ async function handleGlobMoveCommand(source, target, options, context) {
363
372
  }
364
373
  }
365
374
  catch (error) {
366
- const errorMsg = error instanceof Error ? error.message : String(error);
375
+ const errorMsg = getErrorMessage(error);
367
376
  outputHandler.outputError(errorMsg, format);
368
377
  process.exitCode = 1;
369
378
  if (process.env.NODE_ENV !== 'test') {
@@ -429,21 +438,18 @@ function printSuccess(source, target, totalUpdates, movedFiles, isJsonFormat) {
429
438
  */
430
439
  async function handleMoveMemberCommand(source, target, options, context) {
431
440
  const outputHandler = createUnifiedOutputHandler();
432
- let format;
433
- try {
434
- format = parseOutputFormat(options.format, true);
435
- }
436
- catch {
437
- outputHandler.outputError('不支援的輸出格式。可用格式: json, summary, diff', OutputFormat.Summary);
438
- process.exitCode = 1;
441
+ // 解析輸出格式
442
+ const formatResult = tryParseOutputFormat(options.format, true, outputHandler);
443
+ if (!formatResult.success) {
439
444
  return;
440
445
  }
446
+ const format = formatResult.format;
441
447
  const isJsonFormat = format === OutputFormat.Json;
442
448
  const projectRoot = options.path || process.cwd();
443
449
  try {
444
450
  // 解析 source 和 target 路徑
445
- const parsedSource = parseMoveTarget(source);
446
- const parsedTarget = parseMoveTarget(target);
451
+ const parsedSource = parsePathLocation(source);
452
+ const parsedTarget = parsePathLocation(target);
447
453
  // 解析為絕對路徑
448
454
  const sourceFilePath = path.isAbsolute(parsedSource.filePath)
449
455
  ? parsedSource.filePath
@@ -482,37 +488,20 @@ async function handleMoveMemberCommand(source, target, options, context) {
482
488
  };
483
489
  // 生成 Changeset
484
490
  const changeset = await moveMemberService.generateChangeset(moveMemberOptions);
485
- if (!changeset.success) {
486
- outputHandler.outputError(changeset.errors?.join(', ') ?? '生成變更失敗', format, 'move');
487
- process.exitCode = 1;
488
- return;
489
- }
490
- // 轉換為 PreviewInput
491
- const previewInput = await convertChangesetToPreviewInput(changeset, context.fileSystem);
492
- // Dry-run 模式只輸出預覽
493
- if (options.dryRun) {
494
- outputHandler.outputMutation(previewInput, format);
495
- return;
496
- }
497
- // 執行變更
498
- if (!isJsonFormat) {
491
+ // 執行變更類命令統一流程
492
+ if (!isJsonFormat && !options.dryRun) {
499
493
  console.log(' 執行移動...');
500
494
  }
501
- const applicator = new ChangeApplicator(context.fileSystem);
502
- const result = await applicator.apply(changeset, {
503
- atomic: true,
504
- rollbackOnError: true
495
+ await executeMutationCommand(changeset, {
496
+ fileSystem: context.fileSystem,
497
+ format,
498
+ dryRun: options.dryRun ?? false,
499
+ outputHandler,
500
+ commandName: 'move'
505
501
  });
506
- if (result.success) {
507
- outputHandler.outputMutation(previewInput, format);
508
- }
509
- else {
510
- outputHandler.outputError(result.errors?.join(', ') ?? '執行失敗', format, 'move');
511
- process.exitCode = 1;
512
- }
513
502
  }
514
503
  catch (error) {
515
- const errorMsg = error instanceof Error ? error.message : String(error);
504
+ const errorMsg = getErrorMessage(error);
516
505
  outputHandler.outputError(errorMsg, format, 'move');
517
506
  process.exitCode = 1;
518
507
  }