@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
@@ -0,0 +1,311 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { join, relative } from "node:path";
3
+ import writeFileAtomic from "write-file-atomic";
4
+ /** Migration guides without automated transforms — for "Not Covered" section */
5
+ const UNCOVERED_GUIDES = [
6
+ { guide: "03-moment-to-datefns", grep: "moment", description: "moment.js → date-fns migration" },
7
+ {
8
+ guide: "08-dynamic-views-removal",
9
+ grep: "DynamicBladeList|DynamicBladeForm",
10
+ description: "Remove DynamicBladeList/DynamicBladeForm",
11
+ },
12
+ { guide: "16-login-form", grep: "useLogin", description: "useLogin composable API changes" },
13
+ { guide: "29-vc-table-to-data-table", grep: "VcTable\\b", description: "Old VcTable → VcDataTable migration" },
14
+ ];
15
+ const MANUAL_TOPICS = {
16
+ "widgets-migration": {
17
+ title: "Widget System Rewrite",
18
+ description: "The old imperative `registerWidget()`/`unregisterWidget()` API is replaced by a declarative `useBladeWidgets()` composable. " +
19
+ "Widget `.vue` files for standard sidebar items are no longer needed — use headless config objects instead. " +
20
+ "Create a `useXxxWidgets.ts` composable in your module's `widgets/` directory.",
21
+ example: `\`\`\`ts
22
+ // OLD: imperative registration in blade page
23
+ const { registerWidget, clearBladeWidgets } = useWidgets();
24
+ const blade = inject(BladeInstance);
25
+ registerWidget({ id: "MyWidget", component: MyWidgetVue, props: { item } }, blade.id);
26
+ onUnmounted(() => clearBladeWidgets(blade.id));
27
+
28
+ // NEW: declarative composable (create widgets/useMyWidgets.ts)
29
+ import { useBladeWidgets, useBlade } from "@vc-shell/framework";
30
+
31
+ export function useMyWidgets(options: { item: Ref<MyItem>; isVisible: ComputedRef<boolean> }) {
32
+ const { openBlade } = useBlade();
33
+ return useBladeWidgets([
34
+ {
35
+ id: "MyWidget",
36
+ icon: "lucide-tag",
37
+ title: "MY_MODULE.WIDGETS.MY_WIDGET.TITLE",
38
+ badge: computed(() => options.item.value?.count ?? 0),
39
+ isVisible: options.isVisible,
40
+ onClick: () => openBlade({ name: "MyWidgetBlade" }),
41
+ onRefresh: () => loadData(),
42
+ },
43
+ ]);
44
+ }
45
+
46
+ // In blade page: const { refreshAll } = useMyWidgets({ item, isVisible: computed(() => !!param.value) });
47
+ \`\`\``,
48
+ guide: "migration/13-widgets.md",
49
+ },
50
+ "use-blade-form": {
51
+ title: "Form Management with useBladeForm()",
52
+ description: "`useForm()` (vee-validate) + manual `onBeforeClose()` + `modified` tracking are replaced by a single `useBladeForm()` composable. " +
53
+ "Remove all three and replace with one call. `useBladeForm` handles close confirmation, modification tracking, and form validation automatically.",
54
+ example: `\`\`\`ts
55
+ // OLD:
56
+ import { useForm } from "vee-validate";
57
+ const { meta } = useForm({ validateOnMount: false });
58
+ const isModified = computed(() => meta.value.dirty);
59
+ onBeforeClose(async () => {
60
+ if (isModified.value) {
61
+ return !(await showConfirmation(t("CLOSE_CONFIRMATION")));
62
+ }
63
+ });
64
+
65
+ // NEW:
66
+ import { useBladeForm } from "@vc-shell/framework";
67
+ const form = useBladeForm({
68
+ data: item, // your reactive data ref
69
+ closeConfirmMessage: computed(() => t("CLOSE_CONFIRMATION")),
70
+ });
71
+ // form.canSave, form.isModified, form.setBaseline(), form.markReady(), form.revert()
72
+ // onBeforeClose is handled automatically — DELETE it
73
+ \`\`\``,
74
+ guide: "migration/37-use-blade-form.md",
75
+ },
76
+ "remove-deprecated-aliases": {
77
+ title: "Injection Key Migration",
78
+ description: "`inject(BladeInstance)` is removed. Blade context is now provided by `useBlade()` composable — it gives you `param`, `options`, `callParent`, `closeSelf`, etc.",
79
+ example: `\`\`\`ts
80
+ // OLD:
81
+ const blade = inject(BladeInstance);
82
+
83
+ // NEW:
84
+ const { param, options, callParent, closeSelf } = useBlade();
85
+ \`\`\``,
86
+ guide: "migration/21-injection-keys.md",
87
+ },
88
+ "nswag-class-to-interface": {
89
+ title: "NSwag DTO Class → Interface Migration",
90
+ description: "API client DTOs changed from classes (with `new DtoClass()`) to interfaces (with `{} as DtoClass`). " +
91
+ "The migrator handles simple cases automatically. Clone-then-mutate patterns (`new X(); x.field = value;`) require manual rewrite.",
92
+ example: `\`\`\`ts
93
+ // Clone-then-mutate (manual migration):
94
+ // OLD:
95
+ const criteria = new SearchCriteria();
96
+ criteria.take = 20;
97
+ criteria.sort = "name:ASC";
98
+
99
+ // NEW:
100
+ const criteria = { take: 20, sort: "name:ASC" } as SearchCriteria;
101
+ \`\`\``,
102
+ guide: "migration/nswag-class-to-interface.md",
103
+ },
104
+ "blade-props-simplification": {
105
+ title: "Reusable Blade Components",
106
+ description: "Components with blade props (expanded/closable) but no `defineBlade()` were skipped — they are reusable components, not blade pages. " +
107
+ "If these components pass blade props to child blades, remove the forwarding — child blades should call `useBlade()` directly.",
108
+ example: `\`\`\`vue
109
+ <!-- OLD: wrapper forwarding blade props -->
110
+ <MyBlade :expanded="expanded" :closable="closable" :param="param"
111
+ @close:blade="$emit('close:blade')" />
112
+
113
+ <!-- NEW: wrapper passes only domain props, child calls useBlade() -->
114
+ <MyBlade :config="config" />
115
+ \`\`\``,
116
+ guide: "migration/11-blade-props.md",
117
+ },
118
+ "replace-cover-method": {
119
+ title: "replaceWith() Semantics Change",
120
+ description: "`replaceWith()` now truly destroys the old blade. If you relied on the old blade staying alive underneath, use `coverWith()` instead.",
121
+ example: `\`\`\`ts
122
+ // If old blade should stay alive (e.g. preview):
123
+ const { coverWith } = useBlade();
124
+ await coverWith({ name: "Preview", param: id });
125
+
126
+ // If old blade should be destroyed (e.g. create → edit):
127
+ const { replaceWith } = useBlade();
128
+ await replaceWith({ name: "EditOrder", param: order.id });
129
+ \`\`\``,
130
+ guide: "migration/12-replace-cover.md",
131
+ },
132
+ "use-assets-migration": {
133
+ title: "Assets API Migration (useAssets → useAssetsManager)",
134
+ description: "`useAssets()` and legacy `AssetsHandler` patterns require migration to `useAssetsManager()`. " +
135
+ "The transform auto-renames `ICommonAsset` → `AssetLike`, but handler wiring/openBlade options often need manual updates.",
136
+ example: `\`\`\`ts
137
+ // OLD:
138
+ const { upload, remove, edit } = useAssets(imagesRef, uploadPath);
139
+
140
+ // NEW:
141
+ const assetsManager = useAssetsManager(imagesRef, {
142
+ uploadPath: () => uploadPath.value,
143
+ confirmRemove: () => showConfirmation(t("DELETE_CONFIRMATION")),
144
+ });
145
+
146
+ // For AssetsManager blade:
147
+ openBlade({
148
+ name: "AssetsManager",
149
+ options: {
150
+ manager: markRaw(assetsManager),
151
+ },
152
+ });
153
+ \`\`\``,
154
+ guide: "migration/32-use-assets-manager.md",
155
+ },
156
+ "manual-migration-audit": {
157
+ title: "Manual Migration Audit Findings",
158
+ description: "The audit found patterns that are not safely auto-rewritable (e.g., `useExternalWidgets`, `moment`, `useFunctions`, direct `closeBlade()`). " +
159
+ "These require targeted manual refactors before final type-check/build.",
160
+ example: `\`\`\`ts
161
+ // useFunctions() removed:
162
+ // OLD:
163
+ const { debounce } = useFunctions();
164
+ const debounced = debounce(search, 300);
165
+
166
+ // NEW:
167
+ import { useDebounceFn } from "@vueuse/core";
168
+ const debounced = useDebounceFn(search, 300);
169
+ \`\`\``,
170
+ guide: "migration/03-moment-to-datefns.md",
171
+ },
172
+ };
173
+ /**
174
+ * Classify api.report() messages as informational vs actionable.
175
+ * Informational messages (stats, "modified", "Found N files") go to a separate section.
176
+ */
177
+ function isInformational(msg) {
178
+ return (/^Registry: \d+/.test(msg) ||
179
+ /^Found \d+ consumer files/.test(msg) ||
180
+ /: modified$/.test(msg) ||
181
+ /^Done\. \d+ file/.test(msg) ||
182
+ /added .* to compilerOptions/.test(msg) ||
183
+ /standard boilerplate — deleted/.test(msg));
184
+ }
185
+ /** Extract file path from a report message if it starts with one */
186
+ function extractFilePath(msg, cwd) {
187
+ // Matches absolute paths or src/-relative paths at the start
188
+ const absMatch = msg.match(/^(\/[^\s:]+)/);
189
+ if (absMatch)
190
+ return relative(cwd, absMatch[1]);
191
+ const relMatch = msg.match(/^(src\/[^\s:]+)/);
192
+ if (relMatch)
193
+ return relMatch[1];
194
+ return null;
195
+ }
196
+ export function generateMigrationReport(cwd, currentVersion, targetVersion, allReports, depChanges, sourceFiles) {
197
+ const lines = [];
198
+ const date = new Date().toISOString().split("T")[0];
199
+ lines.push(`# Migration Report: ${currentVersion} → ${targetVersion}`);
200
+ lines.push(`Generated: ${date}\n`);
201
+ // --- Automated changes ---
202
+ const modified = allReports.filter((r) => r.filesModified.length > 0);
203
+ const totalModified = allReports.reduce((sum, r) => sum + r.filesModified.length, 0);
204
+ lines.push(`## Automated Changes (${totalModified} files)\n`);
205
+ if (modified.length > 0) {
206
+ for (const r of modified) {
207
+ lines.push(`- ✅ **${r.name}** — ${r.filesModified.length} file(s)`);
208
+ }
209
+ }
210
+ else {
211
+ lines.push("_No automated changes applied._");
212
+ }
213
+ // --- Manual migration required (structured by topic) ---
214
+ // Group actionable messages by transform name
215
+ const actionableByTransform = new Map();
216
+ const informational = [];
217
+ for (const r of allReports) {
218
+ for (const msg of r.reports) {
219
+ if (isInformational(msg)) {
220
+ informational.push(msg);
221
+ continue;
222
+ }
223
+ if (!actionableByTransform.has(r.name))
224
+ actionableByTransform.set(r.name, []);
225
+ actionableByTransform.get(r.name).push(msg);
226
+ }
227
+ }
228
+ if (actionableByTransform.size > 0) {
229
+ lines.push(`\n## Manual Migration Required\n`);
230
+ for (const [transformName, messages] of actionableByTransform) {
231
+ const topic = MANUAL_TOPICS[transformName];
232
+ if (topic) {
233
+ // Structured topic with description and example
234
+ lines.push(`### ${topic.title}\n`);
235
+ lines.push(topic.description + "\n");
236
+ // List affected files
237
+ const files = new Set();
238
+ for (const msg of messages) {
239
+ const fp = extractFilePath(msg, cwd);
240
+ if (fp)
241
+ files.add(fp);
242
+ }
243
+ if (files.size > 0) {
244
+ lines.push("**Affected files:**");
245
+ for (const f of files) {
246
+ lines.push(`- \`${f}\``);
247
+ }
248
+ lines.push("");
249
+ }
250
+ // Before/after example
251
+ lines.push(topic.example + "\n");
252
+ if (topic.guide) {
253
+ lines.push(`> See: [${topic.guide}](${topic.guide})\n`);
254
+ }
255
+ }
256
+ else {
257
+ // Unknown topic — fallback to raw messages
258
+ lines.push(`### ${transformName}\n`);
259
+ for (const msg of messages) {
260
+ lines.push(`- ${msg}`);
261
+ }
262
+ lines.push("");
263
+ }
264
+ }
265
+ }
266
+ // --- Rolled back ---
267
+ const rolledBack = allReports.flatMap((r) => r.filesRolledBack.map((f) => ({ transform: r.name, ...f })));
268
+ if (rolledBack.length > 0) {
269
+ lines.push(`\n## Rolled Back (parse errors)\n`);
270
+ for (const item of rolledBack) {
271
+ lines.push(`- ⟲ **${item.transform}** — \`${item.path}\`: ${item.error}`);
272
+ }
273
+ }
274
+ // --- Dependencies updated ---
275
+ if (depChanges.length > 0) {
276
+ lines.push(`## Dependencies Updated\n`);
277
+ for (const c of depChanges) {
278
+ lines.push(`- ${c}`);
279
+ }
280
+ }
281
+ // --- Not covered by migrator ---
282
+ const allSource = sourceFiles
283
+ .map((f) => {
284
+ try {
285
+ return readFileSync(f, "utf-8");
286
+ }
287
+ catch {
288
+ return "";
289
+ }
290
+ })
291
+ .join("\n");
292
+ const relevant = UNCOVERED_GUIDES.filter((g) => new RegExp(g.grep).test(allSource));
293
+ if (relevant.length > 0) {
294
+ lines.push(`\n## Not Covered by Migrator\n`);
295
+ lines.push("_These migration guides may be relevant — check manually:_\n");
296
+ for (const g of relevant) {
297
+ lines.push(`- **${g.guide}** — ${g.description}`);
298
+ lines.push(` Check: \`grep -rn "${g.grep}" src/\``);
299
+ }
300
+ }
301
+ // --- Informational log ---
302
+ if (informational.length > 0) {
303
+ lines.push(`\n<details>\n<summary>Transform Log (${informational.length} entries)</summary>\n`);
304
+ for (const msg of informational) {
305
+ lines.push(`- ${msg}`);
306
+ }
307
+ lines.push(`\n</details>`);
308
+ }
309
+ writeFileAtomic.sync(join(cwd, "MIGRATION_REPORT.md"), lines.join("\n") + "\n");
310
+ }
311
+ //# sourceMappingURL=report-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-generator.js","sourceRoot":"","sources":["../src/report-generator.ts"],"names":[],"mappings":"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"}
package/dist/runner.d.ts CHANGED
@@ -1,10 +1,16 @@
1
+ import type { VersionedTransform } from "./transforms/types.js";
1
2
  export interface RunOptions {
2
3
  cwd: string;
3
4
  to?: string;
4
5
  transform?: string;
5
6
  dryRun: boolean;
6
7
  list: boolean;
8
+ noReport?: boolean;
7
9
  updateDeps?: boolean;
8
10
  exclude?: string[];
9
11
  }
10
12
  export declare function run(options: RunOptions): Promise<void>;
13
+ /**
14
+ * Kahn's algorithm: topological sort with stable ordering for unrelated nodes.
15
+ */
16
+ export declare function topologicalSort(transforms: VersionedTransform[]): VersionedTransform[];