@vc-shell/migrate 2.0.0-alpha.32 → 2.0.0-alpha.33-pr220.455e322

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 (88) hide show
  1. package/CHANGELOG.md +61 -45
  2. package/README.md +65 -40
  3. package/dist/baseline-versions.d.ts +11 -0
  4. package/dist/baseline-versions.js +52 -0
  5. package/dist/baseline-versions.js.map +1 -0
  6. package/dist/cli.js +2 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/dep-updater.d.ts +8 -0
  9. package/dist/dep-updater.js +60 -0
  10. package/dist/dep-updater.js.map +1 -0
  11. package/dist/file-scanner.d.ts +3 -0
  12. package/dist/file-scanner.js +102 -0
  13. package/dist/file-scanner.js.map +1 -0
  14. package/dist/report-generator.d.ts +2 -0
  15. package/dist/report-generator.js +311 -0
  16. package/dist/report-generator.js.map +1 -0
  17. package/dist/runner.d.ts +6 -0
  18. package/dist/runner.js +184 -269
  19. package/dist/runner.js.map +1 -1
  20. package/dist/sfc-processor.d.ts +12 -0
  21. package/dist/sfc-processor.js +54 -0
  22. package/dist/sfc-processor.js.map +1 -0
  23. package/dist/transforms/blade-events-cleanup.d.ts +4 -0
  24. package/dist/transforms/blade-events-cleanup.js +50 -0
  25. package/dist/transforms/blade-events-cleanup.js.map +1 -0
  26. package/dist/transforms/blade-props-simplification.js +10 -2
  27. package/dist/transforms/blade-props-simplification.js.map +1 -1
  28. package/dist/transforms/define-app-module.js +8 -4
  29. package/dist/transforms/define-app-module.js.map +1 -1
  30. package/dist/transforms/define-expose-to-children.d.ts +4 -0
  31. package/dist/transforms/define-expose-to-children.js +97 -0
  32. package/dist/transforms/define-expose-to-children.js.map +1 -0
  33. package/dist/transforms/dynamic-properties-refactor.js +1 -1
  34. package/dist/transforms/dynamic-properties-refactor.js.map +1 -1
  35. package/dist/transforms/icon-audit.js +20 -24
  36. package/dist/transforms/icon-audit.js.map +1 -1
  37. package/dist/transforms/icon-replace.d.ts +4 -0
  38. package/dist/transforms/icon-replace.js +108 -0
  39. package/dist/transforms/icon-replace.js.map +1 -0
  40. package/dist/transforms/locale-imports.d.ts +4 -0
  41. package/dist/transforms/locale-imports.js +23 -0
  42. package/dist/transforms/locale-imports.js.map +1 -0
  43. package/dist/transforms/registry.js +134 -4
  44. package/dist/transforms/registry.js.map +1 -1
  45. package/dist/transforms/remove-app-module-options.d.ts +16 -0
  46. package/dist/transforms/remove-app-module-options.js +50 -0
  47. package/dist/transforms/remove-app-module-options.js.map +1 -0
  48. package/dist/transforms/remove-deprecated-aliases.js +12 -1
  49. package/dist/transforms/remove-deprecated-aliases.js.map +1 -1
  50. package/dist/transforms/remove-expose-title.d.ts +4 -0
  51. package/dist/transforms/remove-expose-title.js +52 -0
  52. package/dist/transforms/remove-expose-title.js.map +1 -0
  53. package/dist/transforms/remove-global-components.d.ts +8 -0
  54. package/dist/transforms/remove-global-components.js +236 -0
  55. package/dist/transforms/remove-global-components.js.map +1 -0
  56. package/dist/transforms/remove-pathmatch-route.d.ts +17 -0
  57. package/dist/transforms/remove-pathmatch-route.js +74 -0
  58. package/dist/transforms/remove-pathmatch-route.js.map +1 -0
  59. package/dist/transforms/remove-release-config.d.ts +4 -0
  60. package/dist/transforms/remove-release-config.js +58 -0
  61. package/dist/transforms/remove-release-config.js.map +1 -0
  62. package/dist/transforms/replace-cover-method.d.ts +4 -0
  63. package/dist/transforms/replace-cover-method.js +77 -0
  64. package/dist/transforms/replace-cover-method.js.map +1 -0
  65. package/dist/transforms/types.d.ts +2 -0
  66. package/dist/transforms/use-assets-migration.js +12 -12
  67. package/dist/transforms/use-assets-migration.js.map +1 -1
  68. package/dist/transforms/use-blade-form.js +23 -129
  69. package/dist/transforms/use-blade-form.js.map +1 -1
  70. package/dist/transforms/use-blade-migration.js +14 -2
  71. package/dist/transforms/use-blade-migration.js.map +1 -1
  72. package/dist/transforms/use-data-table-pagination-audit.d.ts +4 -0
  73. package/dist/transforms/use-data-table-pagination-audit.js +42 -0
  74. package/dist/transforms/use-data-table-pagination-audit.js.map +1 -0
  75. package/dist/transforms/vc-blade-loading-prop.d.ts +4 -0
  76. package/dist/transforms/vc-blade-loading-prop.js +89 -0
  77. package/dist/transforms/vc-blade-loading-prop.js.map +1 -0
  78. package/dist/transforms/vctable-audit.d.ts +4 -0
  79. package/dist/transforms/vctable-audit.js +14 -0
  80. package/dist/transforms/vctable-audit.js.map +1 -0
  81. package/dist/transforms/widgets-migration.js +20 -23
  82. package/dist/transforms/widgets-migration.js.map +1 -1
  83. package/dist/transforms/window-globals.d.ts +4 -0
  84. package/dist/transforms/window-globals.js +24 -0
  85. package/dist/transforms/window-globals.js.map +1 -0
  86. package/dist/utils/import-dedup.js +1 -1
  87. package/dist/utils/import-dedup.js.map +1 -1
  88. package/package.json +1 -1
package/dist/runner.js CHANGED
@@ -1,13 +1,33 @@
1
1
  import chalk from "chalk";
2
2
  import { resolve, join, dirname } from "node:path";
3
- import { readFileSync, readdirSync, statSync, existsSync } from "node:fs";
3
+ import { readFileSync, existsSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
4
5
  import writeFileAtomic from "write-file-atomic";
5
6
  import jscodeshift from "jscodeshift";
6
7
  import { detectFrameworkVersion } from "./version-detector.js";
7
8
  import { selectTransforms, transforms } from "./transforms/registry.js";
8
- import { parse as parseSFC } from "@vue/compiler-sfc";
9
9
  import { deduplicateImportSpecifiers } from "./utils/import-dedup.js";
10
- const DEFAULT_EXCLUDES = ["api_client", "*.generated.ts", "*.d.ts"];
10
+ import { DEFAULT_EXCLUDES, findFiles, collectNotifyTypeMap } from "./file-scanner.js";
11
+ import { preDedupSource, parseValidate } from "./sfc-processor.js";
12
+ import { updateDependencyVersions } from "./dep-updater.js";
13
+ import { generateMigrationReport } from "./report-generator.js";
14
+ /**
15
+ * Detect the version of @vc-shell/migrate package itself — it's published in lockstep
16
+ * with the framework, so its version IS the target version.
17
+ */
18
+ function detectLatestFrameworkVersion() {
19
+ try {
20
+ const migratePkgPath = join(dirname(fileURLToPath(import.meta.url)), "..", "package.json");
21
+ if (existsSync(migratePkgPath)) {
22
+ const pkg = JSON.parse(readFileSync(migratePkgPath, "utf-8"));
23
+ return pkg.version ?? null;
24
+ }
25
+ }
26
+ catch {
27
+ // ignore
28
+ }
29
+ return null;
30
+ }
11
31
  export async function run(options) {
12
32
  if (options.list) {
13
33
  listTransforms();
@@ -19,135 +39,160 @@ export async function run(options) {
19
39
  console.log(chalk.red("Could not detect @vc-shell/framework version in " + cwd));
20
40
  return;
21
41
  }
22
- const targetVersion = options.to ?? "2.0.0";
42
+ const targetVersion = options.to ?? detectLatestFrameworkVersion() ?? "2.0.0";
23
43
  console.log(chalk.blue(`Migrating from ${currentVersion} → ${targetVersion}`));
24
- let selected = selectTransforms(currentVersion, targetVersion);
44
+ let selected;
25
45
  if (options.transform) {
26
- selected = selected.filter((t) => t.name === options.transform);
27
- if (selected.length === 0) {
28
- console.log(chalk.yellow(`Transform "${options.transform}" not found or not applicable for this version range.`));
46
+ // Explicit --transform bypasses version filter: user is asking for a specific
47
+ // transform regardless of whether it falls in the current → target range.
48
+ // Useful when re-applying a transform retroactively or fixing files the
49
+ // original migration missed.
50
+ const match = transforms.find((t) => t.name === options.transform);
51
+ if (!match) {
52
+ console.log(chalk.yellow(`Transform "${options.transform}" not found.`));
53
+ console.log(chalk.gray(`Run with --list to see available transforms.`));
29
54
  return;
30
55
  }
56
+ selected = [match];
57
+ }
58
+ else {
59
+ selected = selectTransforms(currentVersion, targetVersion);
31
60
  }
61
+ selected = topologicalSort(selected);
32
62
  if (selected.length === 0) {
33
63
  console.log(chalk.green("No transforms needed for this version range."));
34
- return;
35
- }
36
- console.log(chalk.blue(`Running ${selected.length} transform(s)${options.dryRun ? " (dry run)" : ""}:`));
37
- selected.forEach((t) => console.log(chalk.gray(` - ${t.name}: ${t.description}`)));
38
- const srcDir = join(cwd, "src");
39
- if (!existsSync(srcDir)) {
40
- console.log(chalk.yellow(`Warning: No src/ directory found in ${cwd}. Is --cwd correct?`));
41
- return;
64
+ if (!options.updateDeps) {
65
+ return;
66
+ }
42
67
  }
43
- const allExcludes = [...DEFAULT_EXCLUDES, ...(options.exclude ?? [])];
44
- const sourceFiles = findFiles(srcDir, [".ts", ".vue"], allExcludes);
45
- // Pre-pass: collect notification type mappings for auto-migration
46
- const notifyMap = collectNotifyTypeMap(srcDir);
47
68
  let totalModified = 0;
48
69
  let totalSkipped = 0;
49
70
  let totalExcluded = 0;
50
71
  let totalRolledBack = 0;
51
72
  let totalWarnings = 0;
52
- for (const t of selected) {
53
- console.log(chalk.blue(`\nRunning: ${t.name}...`));
54
- const mod = await import(t.transformPath);
55
- const transform = mod.default;
56
- const parser = mod.parser ?? "tsx";
57
- const j = jscodeshift.withParser(parser);
58
- const report = {
59
- name: t.name,
60
- filesModified: [],
61
- filesSkipped: [],
62
- filesErrored: [],
63
- filesExcluded: [],
64
- filesRolledBack: [],
65
- reports: [],
66
- };
67
- const api = {
68
- jscodeshift: j,
69
- j,
70
- stats: () => { },
71
- report: (msg) => report.reports.push(msg),
72
- };
73
- if (t.scope === "project") {
74
- try {
75
- transform({ path: cwd, source: "" }, api, { cwd, dryRun: options.dryRun });
76
- }
77
- catch (err) {
78
- report.filesErrored.push({
79
- path: cwd,
80
- error: err instanceof Error ? err.message : String(err),
81
- });
82
- }
73
+ const allReports = [];
74
+ let sourceFiles = [];
75
+ if (selected.length > 0) {
76
+ console.log(chalk.blue(`Running ${selected.length} transform(s)${options.dryRun ? " (dry run)" : ""}:`));
77
+ selected.forEach((t) => console.log(chalk.gray(` - ${t.name}: ${t.description}`)));
78
+ const srcDir = join(cwd, "src");
79
+ if (!existsSync(srcDir)) {
80
+ console.log(chalk.yellow(`Warning: No src/ directory found in ${cwd}. Is --cwd correct?`));
81
+ return;
83
82
  }
84
- else {
85
- const files = sourceFiles.filter((f) => {
86
- if (t.fileExtensions) {
87
- return t.fileExtensions.some((ext) => f.endsWith(ext));
88
- }
89
- return true;
90
- });
91
- for (const filePath of files) {
83
+ const allExcludes = [...DEFAULT_EXCLUDES, ...(options.exclude ?? [])];
84
+ sourceFiles = findFiles(srcDir, [".ts", ".vue"], allExcludes);
85
+ // Pre-pass: collect notification type mappings for auto-migration
86
+ const notifyMap = collectNotifyTypeMap(srcDir);
87
+ for (const t of selected) {
88
+ console.log(chalk.blue(`\nRunning: ${t.name}...`));
89
+ const mod = await import(t.transformPath);
90
+ const transform = mod.default;
91
+ const parser = mod.parser ?? "tsx";
92
+ const j = jscodeshift.withParser(parser);
93
+ const report = {
94
+ name: t.name,
95
+ filesModified: [],
96
+ filesSkipped: [],
97
+ filesErrored: [],
98
+ filesExcluded: [],
99
+ filesRolledBack: [],
100
+ reports: [],
101
+ };
102
+ const api = {
103
+ jscodeshift: j,
104
+ j,
105
+ stats: () => { },
106
+ report: (msg) => report.reports.push(msg),
107
+ };
108
+ if (t.scope === "project") {
92
109
  try {
93
- let source = readFileSync(filePath, "utf-8");
94
- // Pre-dedup: clean up any duplicate imports from previous partial migrations
95
- try {
96
- source = preDedupSource(source, filePath, j);
97
- }
98
- catch {
99
- // Pre-dedup failed — proceed with original source
110
+ transform({ path: cwd, source: "" }, api, { cwd, dryRun: options.dryRun });
111
+ }
112
+ catch (err) {
113
+ report.filesErrored.push({
114
+ path: cwd,
115
+ error: err instanceof Error ? err.message : String(err),
116
+ });
117
+ }
118
+ }
119
+ else {
120
+ const files = sourceFiles.filter((f) => {
121
+ if (t.fileExtensions) {
122
+ return t.fileExtensions.some((ext) => f.endsWith(ext));
100
123
  }
101
- // Pass per-file notifyTypeMap if this file's module has notifications
102
- const fileNotifyMap = notifyMap.get(dirname(filePath));
103
- let result = transform({ path: filePath, source }, api, { cwd, ...(fileNotifyMap ? { notifyTypeMap: fileNotifyMap } : {}) });
104
- if (result != null && result !== source) {
124
+ return true;
125
+ });
126
+ for (const filePath of files) {
127
+ try {
128
+ let source = readFileSync(filePath, "utf-8");
129
+ // Pre-dedup: clean up any duplicate imports from previous partial migrations
105
130
  try {
106
- result = deduplicateImportSpecifiers(result, j);
131
+ source = preDedupSource(source, filePath, j);
107
132
  }
108
133
  catch {
109
- // Dedup failed — use result as-is, validation will catch issues
134
+ // Pre-dedup failed — proceed with original source
110
135
  }
111
- const validationError = parseValidate(filePath, result, parser);
112
- if (validationError) {
113
- report.filesRolledBack.push({ path: filePath, error: validationError });
136
+ // Pass per-file notifyTypeMap if this file's module has notifications
137
+ const fileNotifyMap = notifyMap.get(dirname(filePath));
138
+ let result = transform({ path: filePath, source }, api, { cwd, ...(fileNotifyMap ? { notifyTypeMap: fileNotifyMap } : {}) });
139
+ if (result != null && result !== source) {
140
+ try {
141
+ const deduped = deduplicateImportSpecifiers(result, j);
142
+ if (deduped !== result) {
143
+ result = deduped;
144
+ }
145
+ }
146
+ catch {
147
+ // Dedup failed — use result as-is
148
+ }
149
+ // Idempotency: if after dedup the result equals original, skip
150
+ if (result === source) {
151
+ report.filesSkipped.push(filePath);
152
+ continue;
153
+ }
154
+ const validationError = parseValidate(filePath, result, parser);
155
+ if (validationError) {
156
+ report.filesRolledBack.push({ path: filePath, error: validationError });
157
+ }
158
+ else {
159
+ if (!options.dryRun) {
160
+ writeFileAtomic.sync(filePath, result);
161
+ }
162
+ report.filesModified.push(filePath);
163
+ }
114
164
  }
115
165
  else {
116
- if (!options.dryRun) {
117
- writeFileAtomic.sync(filePath, result);
118
- }
119
- report.filesModified.push(filePath);
166
+ report.filesSkipped.push(filePath);
120
167
  }
121
168
  }
122
- else {
123
- report.filesSkipped.push(filePath);
169
+ catch (err) {
170
+ report.filesErrored.push({
171
+ path: filePath,
172
+ error: err instanceof Error ? err.message : String(err),
173
+ });
124
174
  }
125
175
  }
126
- catch (err) {
127
- report.filesErrored.push({
128
- path: filePath,
129
- error: err instanceof Error ? err.message : String(err),
130
- });
131
- }
132
176
  }
177
+ if (report.filesModified.length > 0) {
178
+ console.log(chalk.green(` Modified: ${report.filesModified.length} file(s)`));
179
+ }
180
+ if (report.reports.length > 0) {
181
+ report.reports.forEach((w) => console.log(chalk.yellow(` ⚠ ${w}`)));
182
+ }
183
+ if (report.filesRolledBack.length > 0) {
184
+ report.filesRolledBack.forEach((e) => console.log(chalk.yellow(` ⟲ ${e.path}: rolled back (${e.error})`)));
185
+ }
186
+ if (report.filesErrored.length > 0) {
187
+ report.filesErrored.forEach((e) => console.log(chalk.red(` ✗ ${e.path}: ${e.error}`)));
188
+ }
189
+ allReports.push(report);
190
+ totalModified += report.filesModified.length;
191
+ totalSkipped += report.filesSkipped.length;
192
+ totalExcluded += report.filesExcluded.length;
193
+ totalRolledBack += report.filesRolledBack.length;
194
+ totalWarnings += report.reports.length;
133
195
  }
134
- if (report.filesModified.length > 0) {
135
- console.log(chalk.green(` Modified: ${report.filesModified.length} file(s)`));
136
- }
137
- if (report.reports.length > 0) {
138
- report.reports.forEach((w) => console.log(chalk.yellow(` ⚠ ${w}`)));
139
- }
140
- if (report.filesRolledBack.length > 0) {
141
- report.filesRolledBack.forEach((e) => console.log(chalk.yellow(` ⟲ ${e.path}: rolled back (${e.error})`)));
142
- }
143
- if (report.filesErrored.length > 0) {
144
- report.filesErrored.forEach((e) => console.log(chalk.red(` ✗ ${e.path}: ${e.error}`)));
145
- }
146
- totalModified += report.filesModified.length;
147
- totalSkipped += report.filesSkipped.length;
148
- totalExcluded += report.filesExcluded.length;
149
- totalRolledBack += report.filesRolledBack.length;
150
- totalWarnings += report.reports.length;
151
196
  }
152
197
  let depChanges = [];
153
198
  if (options.updateDeps) {
@@ -170,6 +215,10 @@ export async function run(options) {
170
215
  depChanges.forEach((c) => console.log(` ${c}`));
171
216
  console.log(chalk.yellow("\n ⚠ Run `yarn install` to update the lockfile."));
172
217
  }
218
+ if (!options.dryRun && !options.noReport) {
219
+ generateMigrationReport(cwd, currentVersion, targetVersion, allReports, depChanges, sourceFiles);
220
+ console.log(chalk.blue(`\n📄 Migration report written to MIGRATION_REPORT.md`));
221
+ }
173
222
  if (options.dryRun) {
174
223
  console.log(chalk.yellow("\nDry run complete. No files were modified."));
175
224
  }
@@ -177,179 +226,45 @@ export async function run(options) {
177
226
  console.log(chalk.green("\nMigration complete."));
178
227
  }
179
228
  }
180
- // Scan src/modules/{module}/components/notifications/{file}.vue to build a mapping
181
- // of notifyType event names to file names, keyed by module directory.
182
- function collectNotifyTypeMap(srcDir) {
183
- const result = new Map();
184
- const modulesDir = join(srcDir, "modules");
185
- if (!existsSync(modulesDir))
186
- return result;
187
- let moduleEntries;
188
- try {
189
- moduleEntries = readdirSync(modulesDir, { encoding: "utf-8" });
190
- }
191
- catch {
192
- return result;
193
- }
194
- for (const moduleEntry of moduleEntries) {
195
- const moduleDir = join(modulesDir, moduleEntry);
196
- try {
197
- if (!statSync(moduleDir).isDirectory())
198
- continue;
199
- }
200
- catch {
201
- continue;
202
- }
203
- const notifDir = join(moduleDir, "components", "notifications");
204
- if (!existsSync(notifDir))
205
- continue;
206
- const notifications = {};
207
- let files;
208
- try {
209
- files = readdirSync(notifDir, { encoding: "utf-8" });
210
- }
211
- catch {
212
- continue;
213
- }
214
- for (const file of files) {
215
- if (!file.endsWith(".vue"))
216
- continue;
217
- try {
218
- const filePath = join(notifDir, file);
219
- const source = readFileSync(filePath, "utf-8");
220
- const { descriptor } = parseSFC(source, { filename: filePath });
221
- const scriptBlock = descriptor.scriptSetup ?? descriptor.script;
222
- if (!scriptBlock)
223
- continue;
224
- const match = scriptBlock.content.match(/(?:defineOptions|defineBlade)\s*\(\s*\{[^}]*notifyType\s*:\s*["']([^"']+)["']/s);
225
- if (match) {
226
- notifications[match[1]] = file;
227
- }
228
- }
229
- catch {
230
- continue;
231
- }
232
- }
233
- if (Object.keys(notifications).length > 0) {
234
- result.set(moduleDir, { "./components/notifications": notifications });
235
- }
236
- }
237
- return result;
238
- }
239
- function findFiles(dir, extensions, excludes) {
240
- const results = [];
241
- let entries;
242
- try {
243
- entries = readdirSync(dir, { encoding: "utf-8" });
244
- }
245
- catch {
246
- return results;
247
- }
248
- for (const entry of entries) {
249
- if (entry === "node_modules" || entry.startsWith(".") || entry === "dist")
250
- continue;
251
- if (excludes.includes(entry))
252
- continue;
253
- const full = join(dir, entry);
254
- try {
255
- const stat = statSync(full);
256
- if (stat.isDirectory()) {
257
- results.push(...findFiles(full, extensions, excludes));
258
- }
259
- else if (extensions.some((ext) => entry.endsWith(ext))) {
260
- const excluded = excludes.some((pattern) => {
261
- if (pattern.startsWith("*")) {
262
- return entry.endsWith(pattern.slice(1));
263
- }
264
- return entry === pattern;
265
- });
266
- if (!excluded) {
267
- results.push(full);
268
- }
269
- }
270
- }
271
- catch {
272
- continue;
273
- }
274
- }
275
- return results;
276
- }
277
- /**
278
- * Pre-dedup source before passing to transform.
279
- * For .vue files: extract script block, dedup, splice back.
280
- * For .ts files: dedup directly.
281
- */
282
229
  /**
283
- * Collapse multi-line import statements into single lines so the
284
- * text-based dedup can process them. Only affects import blocks.
230
+ * Kahn's algorithm: topological sort with stable ordering for unrelated nodes.
285
231
  */
286
- function collapseMultiLineImports(script) {
287
- return script.replace(/import\s*\{[^}]*\}\s*from\s*['"][^'"]+['"]\s*;?/gs, (match) => match.replace(/\s*\n\s*/g, " "));
288
- }
289
- function preDedupSource(source, filePath, j) {
290
- if (filePath.endsWith(".vue")) {
291
- const { descriptor } = parseSFC(source, { filename: filePath });
292
- const scriptBlock = descriptor.scriptSetup ?? descriptor.script;
293
- if (!scriptBlock)
294
- return source;
295
- // Collapse multi-line imports so text-based dedup can handle them
296
- const collapsed = collapseMultiLineImports(scriptBlock.content);
297
- const deduped = deduplicateImportSpecifiers(collapsed, j);
298
- if (deduped === scriptBlock.content)
299
- return source;
300
- const start = scriptBlock.loc.start.offset;
301
- const end = scriptBlock.loc.end.offset;
302
- return source.substring(0, start) + deduped + source.substring(end);
303
- }
304
- return deduplicateImportSpecifiers(source, j);
305
- }
306
- function parseValidate(filePath, source, parser) {
307
- try {
308
- if (filePath.endsWith(".vue")) {
309
- const { descriptor, errors } = parseSFC(source, { filename: filePath });
310
- if (errors.length > 0) {
311
- return `SFC parse error: ${errors[0].message}`;
312
- }
313
- const scriptBlock = descriptor.scriptSetup ?? descriptor.script;
314
- if (scriptBlock) {
315
- jscodeshift.withParser(parser)(scriptBlock.content);
316
- }
317
- }
318
- else {
319
- jscodeshift.withParser(parser)(source);
232
+ export function topologicalSort(transforms) {
233
+ const nameToIndex = new Map();
234
+ transforms.forEach((t, i) => nameToIndex.set(t.name, i));
235
+ const inDegree = new Array(transforms.length).fill(0);
236
+ const dependents = new Map();
237
+ for (let i = 0; i < transforms.length; i++) {
238
+ for (const dep of transforms[i].after ?? []) {
239
+ const depIdx = nameToIndex.get(dep);
240
+ if (depIdx === undefined)
241
+ continue;
242
+ inDegree[i]++;
243
+ if (!dependents.has(depIdx))
244
+ dependents.set(depIdx, []);
245
+ dependents.get(depIdx).push(i);
320
246
  }
321
- return null;
322
247
  }
323
- catch (err) {
324
- return err instanceof Error ? err.message : String(err);
248
+ const queue = [];
249
+ for (let i = 0; i < transforms.length; i++) {
250
+ if (inDegree[i] === 0)
251
+ queue.push(i);
325
252
  }
326
- }
327
- function updateDependencyVersions(cwd, targetVersion, dryRun) {
328
- const pkgPath = join(cwd, "package.json");
329
- if (!existsSync(pkgPath))
330
- return [];
331
- const pkgRaw = readFileSync(pkgPath, "utf-8");
332
- const pkg = JSON.parse(pkgRaw);
333
- const changes = [];
334
- for (const depType of ["dependencies", "devDependencies"]) {
335
- const deps = pkg[depType];
336
- if (!deps)
337
- continue;
338
- for (const name of Object.keys(deps)) {
339
- if (name.startsWith("@vc-shell/")) {
340
- const oldVersion = deps[name];
341
- const newVersion = `^${targetVersion}`;
342
- if (oldVersion !== newVersion) {
343
- changes.push(`${name}: ${oldVersion} → ${newVersion}`);
344
- deps[name] = newVersion;
345
- }
346
- }
253
+ const result = [];
254
+ while (queue.length > 0) {
255
+ const idx = queue.shift();
256
+ result.push(transforms[idx]);
257
+ for (const dep of dependents.get(idx) ?? []) {
258
+ inDegree[dep]--;
259
+ if (inDegree[dep] === 0)
260
+ queue.push(dep);
347
261
  }
348
262
  }
349
- if (changes.length > 0 && !dryRun) {
350
- writeFileAtomic.sync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
263
+ if (result.length !== transforms.length) {
264
+ const missing = transforms.filter((t) => !result.includes(t)).map((t) => t.name);
265
+ throw new Error(`Cycle detected in transform dependencies: ${missing.join(", ")}`);
351
266
  }
352
- return changes;
267
+ return result;
353
268
  }
354
269
  function listTransforms() {
355
270
  console.log(chalk.blue("Available transforms:\n"));
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Collapse multi-line import statements into single lines so the
3
+ * text-based dedup can process them. Only affects import blocks.
4
+ */
5
+ export declare function collapseMultiLineImports(script: string): string;
6
+ /**
7
+ * Pre-dedup source before passing to transform.
8
+ * For .vue files: extract script block, dedup, splice back.
9
+ * For .ts files: dedup directly.
10
+ */
11
+ export declare function preDedupSource(source: string, filePath: string, j: any): string;
12
+ export declare function parseValidate(filePath: string, source: string, parser: string): string | null;
@@ -0,0 +1,54 @@
1
+ import jscodeshift from "jscodeshift";
2
+ import { parse as parseSFC } from "@vue/compiler-sfc";
3
+ import { deduplicateImportSpecifiers } from "./utils/import-dedup.js";
4
+ /**
5
+ * Collapse multi-line import statements into single lines so the
6
+ * text-based dedup can process them. Only affects import blocks.
7
+ */
8
+ export function collapseMultiLineImports(script) {
9
+ return script.replace(/import\s*\{[^}]*\}\s*from\s*['"][^'"]+['"]\s*;?/gs, (match) => match.replace(/\s*\n\s*/g, " "));
10
+ }
11
+ /**
12
+ * Pre-dedup source before passing to transform.
13
+ * For .vue files: extract script block, dedup, splice back.
14
+ * For .ts files: dedup directly.
15
+ */
16
+ export function preDedupSource(source, filePath, j) {
17
+ if (filePath.endsWith(".vue")) {
18
+ const { descriptor } = parseSFC(source, { filename: filePath });
19
+ const scriptBlock = descriptor.scriptSetup ?? descriptor.script;
20
+ if (!scriptBlock)
21
+ return source;
22
+ // Collapse multi-line imports so text-based dedup can handle them
23
+ const collapsed = collapseMultiLineImports(scriptBlock.content);
24
+ const deduped = deduplicateImportSpecifiers(collapsed, j);
25
+ if (deduped === scriptBlock.content)
26
+ return source;
27
+ const start = scriptBlock.loc.start.offset;
28
+ const end = scriptBlock.loc.end.offset;
29
+ return source.substring(0, start) + deduped + source.substring(end);
30
+ }
31
+ return deduplicateImportSpecifiers(source, j);
32
+ }
33
+ export function parseValidate(filePath, source, parser) {
34
+ try {
35
+ if (filePath.endsWith(".vue")) {
36
+ const { descriptor, errors } = parseSFC(source, { filename: filePath });
37
+ if (errors.length > 0) {
38
+ return `SFC parse error: ${errors[0].message}`;
39
+ }
40
+ const scriptBlock = descriptor.scriptSetup ?? descriptor.script;
41
+ if (scriptBlock) {
42
+ jscodeshift.withParser(parser)(scriptBlock.content);
43
+ }
44
+ }
45
+ else {
46
+ jscodeshift.withParser(parser)(source);
47
+ }
48
+ return null;
49
+ }
50
+ catch (err) {
51
+ return err instanceof Error ? err.message : String(err);
52
+ }
53
+ }
54
+ //# sourceMappingURL=sfc-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfc-processor.js","sourceRoot":"","sources":["../src/sfc-processor.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAEtE;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc;IACrD,OAAO,MAAM,CAAC,OAAO,CAAC,mDAAmD,EAAE,CAAC,KAAK,EAAE,EAAE,CACnF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAChC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,QAAgB,EAAE,CAAM;IACrE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,MAAM,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO,MAAM,CAAC;QAEhC,kEAAkE;QAClE,MAAM,SAAS,GAAG,wBAAwB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,2BAA2B,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,OAAO,KAAK,WAAW,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC;QAEnD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3C,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;QACvC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,2BAA2B,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,MAAc,EAAE,MAAc;IAC5E,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,oBAAoB,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,CAAC;YACD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,MAAM,CAAC;YAChE,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}