@vc-shell/migrate 2.0.0-alpha.16 → 2.0.0-alpha.18
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.
- package/CHANGELOG.md +21 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.js +232 -18
- package/dist/runner.js.map +1 -1
- package/dist/transforms/banner-variants.js +1 -1
- package/dist/transforms/banner-variants.js.map +1 -1
- package/dist/transforms/blade-props-simplification.js +44 -32
- package/dist/transforms/blade-props-simplification.js.map +1 -1
- package/dist/transforms/define-app-module.js +99 -27
- package/dist/transforms/define-app-module.js.map +1 -1
- package/dist/transforms/define-options-to-blade.d.ts +4 -0
- package/dist/transforms/define-options-to-blade.js +36 -0
- package/dist/transforms/define-options-to-blade.js.map +1 -0
- package/dist/transforms/icon-container-prop.js +1 -4
- package/dist/transforms/icon-container-prop.js.map +1 -1
- package/dist/transforms/manual-migration-audit.d.ts +4 -0
- package/dist/transforms/manual-migration-audit.js +39 -0
- package/dist/transforms/manual-migration-audit.js.map +1 -0
- package/dist/transforms/menu-group-config.js.map +1 -1
- package/dist/transforms/registry.js +24 -2
- package/dist/transforms/registry.js.map +1 -1
- package/dist/transforms/scss-safe-use.js.map +1 -1
- package/dist/transforms/shims-to-globals.js +1 -5
- package/dist/transforms/shims-to-globals.js.map +1 -1
- package/dist/transforms/types.d.ts +9 -0
- package/dist/transforms/use-blade-migration.js.map +1 -1
- package/dist/transforms/use-data-table-sort.d.ts +4 -0
- package/dist/transforms/use-data-table-sort.js +138 -0
- package/dist/transforms/use-data-table-sort.js.map +1 -0
- package/dist/transforms/widgets-migration.js.map +1 -1
- package/dist/utils/import-dedup.d.ts +13 -0
- package/dist/utils/import-dedup.js +184 -0
- package/dist/utils/import-dedup.js.map +1 -0
- package/dist/utils/template-transform.js.map +1 -1
- package/dist/utils/test-helpers.js.map +1 -1
- package/dist/utils/vue-sfc-wrapper.js +10 -7
- package/dist/utils/vue-sfc-wrapper.js.map +1 -1
- package/dist/version-detector.js +1 -3
- package/dist/version-detector.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
# [2.0.0-alpha.18](https://github.com/VirtoCommerce/vc-shell/compare/v2.0.0-alpha.17...v2.0.0-alpha.18) (2026-03-23)
|
|
2
|
+
|
|
3
|
+
**Note:** Version bump only for package @vc-shell/migrate
|
|
4
|
+
|
|
5
|
+
# [2.0.0-alpha.17](https://github.com/VirtoCommerce/vc-shell/compare/v2.0.0-alpha.16...v2.0.0-alpha.17) (2026-03-23)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **migrate:** remove empty export type {} stubs after Props/Emits removal ([e6164ba](https://github.com/VirtoCommerce/vc-shell/commit/e6164ba267c737aee8990f271173d05e844e81a9))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **migrate:** add defineOptions → defineBlade transform ([676caea](https://github.com/VirtoCommerce/vc-shell/commit/676caea421fe960b589041ef74679d5fdb5336d8))
|
|
16
|
+
* **migrate:** add import dedup utility and improve vue-sfc-wrapper resilience ([c87e065](https://github.com/VirtoCommerce/vc-shell/commit/c87e06554b3f538d1ee45a65269e53c94fe40683))
|
|
17
|
+
* **migrate:** add manual-migration-audit diagnostic transform ([a069aad](https://github.com/VirtoCommerce/vc-shell/commit/a069aadd1816eb6363dd5e95ccd175b9e464d43e))
|
|
18
|
+
* **migrate:** add use-data-table-sort codemod transform ([655aef7](https://github.com/VirtoCommerce/vc-shell/commit/655aef7b98405b1243c00ed1cdc2a2320600d780))
|
|
19
|
+
* **migrate:** auto-migrate notificationTemplates to notifications config ([a9ccbe5](https://github.com/VirtoCommerce/vc-shell/commit/a9ccbe5e30a3f4b30a2c22e2911629d0a86dbb2d))
|
|
20
|
+
* **migrate:** fix defineAppModule 2-arg to use blades key ([a92f444](https://github.com/VirtoCommerce/vc-shell/commit/a92f44400ac5253900c0b9377113614fac931753))
|
|
21
|
+
* **migrate:** fix defineAppModule 3/4-arg to use object syntax with blades key ([31a1ef3](https://github.com/VirtoCommerce/vc-shell/commit/31a1ef3ae2b87fb77290ec79ff79cf13e65a7bf6))
|
|
1
22
|
# [2.0.0-alpha.16](https://github.com/VirtoCommerce/vc-shell/compare/v2.0.0-alpha.15...v2.0.0-alpha.16) (2026-03-20)
|
|
2
23
|
|
|
3
24
|
**Note:** Version bump only for package @vc-shell/migrate
|
package/dist/cli.js
CHANGED
|
@@ -14,6 +14,7 @@ program
|
|
|
14
14
|
.option("--list", "List available transforms", false)
|
|
15
15
|
.option("--cwd <path>", "Working directory", ".")
|
|
16
16
|
.option("--update-deps", "Also update dependency versions in package.json", false)
|
|
17
|
+
.option("--exclude <patterns...>", "Additional exclude patterns for files/directories", [])
|
|
17
18
|
.action(async (options) => {
|
|
18
19
|
const cwd = resolve(options.cwd);
|
|
19
20
|
// Pre-flight: dirty working tree check
|
|
@@ -39,6 +40,8 @@ program
|
|
|
39
40
|
transform: options.transform,
|
|
40
41
|
dryRun: options.dryRun,
|
|
41
42
|
list: options.list,
|
|
43
|
+
updateDeps: options.updateDeps,
|
|
44
|
+
exclude: options.exclude ?? [],
|
|
42
45
|
});
|
|
43
46
|
});
|
|
44
47
|
program.parse();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,CAAC;KACtE,MAAM,CAAC,oBAAoB,EAAE,+BAA+B,CAAC;KAC7D,MAAM,CAAC,WAAW,EAAE,uCAAuC,EAAE,KAAK,CAAC;KACnE,MAAM,CAAC,QAAQ,EAAE,2BAA2B,EAAE,KAAK,CAAC;KACpD,MAAM,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,CAAC;KAChD,MAAM,CAAC,eAAe,EAAE,iDAAiD,EAAE,KAAK,CAAC;KACjF,MAAM,CAAC,yBAAyB,EAAE,mDAAmD,EAAE,EAAE,CAAC;KAC1F,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEjC,uCAAuC;IACvC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE;gBAC5D,GAAG;gBACH,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,yCAAyC;oBACvC,gEAAgE,CACnE,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;IACH,CAAC;IAED,MAAM,GAAG,CAAC;QACR,GAAG;QACH,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;KAC/B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/runner.d.ts
CHANGED
package/dist/runner.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import { resolve, join } from "node:path";
|
|
3
|
-
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { resolve, join, dirname } from "node:path";
|
|
3
|
+
import { readFileSync, readdirSync, statSync, existsSync } from "node:fs";
|
|
4
4
|
import writeFileAtomic from "write-file-atomic";
|
|
5
5
|
import jscodeshift from "jscodeshift";
|
|
6
6
|
import { detectFrameworkVersion } from "./version-detector.js";
|
|
7
7
|
import { selectTransforms, transforms } from "./transforms/registry.js";
|
|
8
|
+
import { parse as parseSFC } from "@vue/compiler-sfc";
|
|
9
|
+
import { deduplicateImportSpecifiers } from "./utils/import-dedup.js";
|
|
10
|
+
const DEFAULT_EXCLUDES = ["api_client", "*.generated.ts", "*.d.ts"];
|
|
8
11
|
export async function run(options) {
|
|
9
12
|
if (options.list) {
|
|
10
13
|
listTransforms();
|
|
@@ -32,12 +35,22 @@ export async function run(options) {
|
|
|
32
35
|
}
|
|
33
36
|
console.log(chalk.blue(`Running ${selected.length} transform(s)${options.dryRun ? " (dry run)" : ""}:`));
|
|
34
37
|
selected.forEach((t) => console.log(chalk.gray(` - ${t.name}: ${t.description}`)));
|
|
35
|
-
// Glob source files for per-file transforms
|
|
36
38
|
const srcDir = join(cwd, "src");
|
|
37
|
-
|
|
39
|
+
if (!existsSync(srcDir)) {
|
|
40
|
+
console.log(chalk.yellow(`Warning: No src/ directory found in ${cwd}. Is --cwd correct?`));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
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
|
+
let totalModified = 0;
|
|
48
|
+
let totalSkipped = 0;
|
|
49
|
+
let totalExcluded = 0;
|
|
50
|
+
let totalRolledBack = 0;
|
|
51
|
+
let totalWarnings = 0;
|
|
38
52
|
for (const t of selected) {
|
|
39
53
|
console.log(chalk.blue(`\nRunning: ${t.name}...`));
|
|
40
|
-
// Dynamic import of transform module
|
|
41
54
|
const mod = await import(t.transformPath);
|
|
42
55
|
const transform = mod.default;
|
|
43
56
|
const parser = mod.parser ?? "tsx";
|
|
@@ -47,6 +60,8 @@ export async function run(options) {
|
|
|
47
60
|
filesModified: [],
|
|
48
61
|
filesSkipped: [],
|
|
49
62
|
filesErrored: [],
|
|
63
|
+
filesExcluded: [],
|
|
64
|
+
filesRolledBack: [],
|
|
50
65
|
reports: [],
|
|
51
66
|
};
|
|
52
67
|
const api = {
|
|
@@ -56,7 +71,6 @@ export async function run(options) {
|
|
|
56
71
|
report: (msg) => report.reports.push(msg),
|
|
57
72
|
};
|
|
58
73
|
if (t.scope === "project") {
|
|
59
|
-
// Project-scoped transforms run once with cwd
|
|
60
74
|
try {
|
|
61
75
|
transform({ path: cwd, source: "" }, api, { cwd, dryRun: options.dryRun });
|
|
62
76
|
}
|
|
@@ -68,16 +82,42 @@ export async function run(options) {
|
|
|
68
82
|
}
|
|
69
83
|
}
|
|
70
84
|
else {
|
|
71
|
-
|
|
72
|
-
|
|
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) {
|
|
73
92
|
try {
|
|
74
|
-
|
|
75
|
-
|
|
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
|
|
100
|
+
}
|
|
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 } : {}) });
|
|
76
104
|
if (result != null && result !== source) {
|
|
77
|
-
|
|
78
|
-
|
|
105
|
+
try {
|
|
106
|
+
result = deduplicateImportSpecifiers(result, j);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Dedup failed — use result as-is, validation will catch issues
|
|
110
|
+
}
|
|
111
|
+
const validationError = parseValidate(filePath, result, parser);
|
|
112
|
+
if (validationError) {
|
|
113
|
+
report.filesRolledBack.push({ path: filePath, error: validationError });
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
if (!options.dryRun) {
|
|
117
|
+
writeFileAtomic.sync(filePath, result);
|
|
118
|
+
}
|
|
119
|
+
report.filesModified.push(filePath);
|
|
79
120
|
}
|
|
80
|
-
report.filesModified.push(filePath);
|
|
81
121
|
}
|
|
82
122
|
else {
|
|
83
123
|
report.filesSkipped.push(filePath);
|
|
@@ -91,25 +131,112 @@ export async function run(options) {
|
|
|
91
131
|
}
|
|
92
132
|
}
|
|
93
133
|
}
|
|
94
|
-
// Print report
|
|
95
134
|
if (report.filesModified.length > 0) {
|
|
96
135
|
console.log(chalk.green(` Modified: ${report.filesModified.length} file(s)`));
|
|
97
136
|
}
|
|
98
137
|
if (report.reports.length > 0) {
|
|
99
138
|
report.reports.forEach((w) => console.log(chalk.yellow(` ⚠ ${w}`)));
|
|
100
139
|
}
|
|
140
|
+
if (report.filesRolledBack.length > 0) {
|
|
141
|
+
report.filesRolledBack.forEach((e) => console.log(chalk.yellow(` ⟲ ${e.path}: rolled back (${e.error})`)));
|
|
142
|
+
}
|
|
101
143
|
if (report.filesErrored.length > 0) {
|
|
102
144
|
report.filesErrored.forEach((e) => console.log(chalk.red(` ✗ ${e.path}: ${e.error}`)));
|
|
103
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
|
+
}
|
|
152
|
+
let depChanges = [];
|
|
153
|
+
if (options.updateDeps) {
|
|
154
|
+
depChanges = updateDependencyVersions(cwd, targetVersion, options.dryRun);
|
|
155
|
+
}
|
|
156
|
+
console.log(chalk.blue("\n─── Migration Summary ───"));
|
|
157
|
+
console.log(` Files modified: ${totalModified}`);
|
|
158
|
+
console.log(` Files skipped: ${totalSkipped}`);
|
|
159
|
+
if (totalExcluded > 0) {
|
|
160
|
+
console.log(chalk.gray(` Files excluded: ${totalExcluded}`));
|
|
161
|
+
}
|
|
162
|
+
if (totalRolledBack > 0) {
|
|
163
|
+
console.log(chalk.yellow(` Files rolled back: ${totalRolledBack}`));
|
|
164
|
+
}
|
|
165
|
+
if (totalWarnings > 0) {
|
|
166
|
+
console.log(chalk.yellow(` Warnings: ${totalWarnings} (manual review needed)`));
|
|
167
|
+
}
|
|
168
|
+
if (depChanges.length > 0) {
|
|
169
|
+
console.log(chalk.blue("\n Dependencies updated:"));
|
|
170
|
+
depChanges.forEach((c) => console.log(` ${c}`));
|
|
171
|
+
console.log(chalk.yellow("\n ⚠ Run `yarn install` to update the lockfile."));
|
|
104
172
|
}
|
|
105
173
|
if (options.dryRun) {
|
|
106
174
|
console.log(chalk.yellow("\nDry run complete. No files were modified."));
|
|
107
175
|
}
|
|
108
176
|
else {
|
|
109
|
-
console.log(chalk.green("\
|
|
177
|
+
console.log(chalk.green("\nMigration complete."));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
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
|
+
}
|
|
110
236
|
}
|
|
237
|
+
return result;
|
|
111
238
|
}
|
|
112
|
-
function findFiles(dir, extensions) {
|
|
239
|
+
function findFiles(dir, extensions, excludes) {
|
|
113
240
|
const results = [];
|
|
114
241
|
let entries;
|
|
115
242
|
try {
|
|
@@ -121,14 +248,24 @@ function findFiles(dir, extensions) {
|
|
|
121
248
|
for (const entry of entries) {
|
|
122
249
|
if (entry === "node_modules" || entry.startsWith(".") || entry === "dist")
|
|
123
250
|
continue;
|
|
251
|
+
if (excludes.includes(entry))
|
|
252
|
+
continue;
|
|
124
253
|
const full = join(dir, entry);
|
|
125
254
|
try {
|
|
126
255
|
const stat = statSync(full);
|
|
127
256
|
if (stat.isDirectory()) {
|
|
128
|
-
results.push(...findFiles(full, extensions));
|
|
257
|
+
results.push(...findFiles(full, extensions, excludes));
|
|
129
258
|
}
|
|
130
259
|
else if (extensions.some((ext) => entry.endsWith(ext))) {
|
|
131
|
-
|
|
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
|
+
}
|
|
132
269
|
}
|
|
133
270
|
}
|
|
134
271
|
catch {
|
|
@@ -137,6 +274,83 @@ function findFiles(dir, extensions) {
|
|
|
137
274
|
}
|
|
138
275
|
return results;
|
|
139
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
|
+
/**
|
|
283
|
+
* Collapse multi-line import statements into single lines so the
|
|
284
|
+
* text-based dedup can process them. Only affects import blocks.
|
|
285
|
+
*/
|
|
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);
|
|
320
|
+
}
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
return err instanceof Error ? err.message : String(err);
|
|
325
|
+
}
|
|
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
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (changes.length > 0 && !dryRun) {
|
|
350
|
+
writeFileAtomic.sync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
|
|
351
|
+
}
|
|
352
|
+
return changes;
|
|
353
|
+
}
|
|
140
354
|
function listTransforms() {
|
|
141
355
|
console.log(chalk.blue("Available transforms:\n"));
|
|
142
356
|
for (const t of transforms) {
|
package/dist/runner.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -2,7 +2,7 @@ import { wrapForSFCTemplate } from "../utils/vue-sfc-wrapper.js";
|
|
|
2
2
|
const VARIANT_MAP = {
|
|
3
3
|
"light-danger": "danger",
|
|
4
4
|
"info-dark": "info",
|
|
5
|
-
|
|
5
|
+
primary: "info",
|
|
6
6
|
};
|
|
7
7
|
function templateTransform(template, _filePath) {
|
|
8
8
|
const tagRe = /(<(?:VcBanner|vc-banner)\b[^>]*?)(variant="(?:light-danger|info-dark|primary)")/gs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner-variants.js","sourceRoot":"","sources":["../../src/transforms/banner-variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGjE,MAAM,WAAW,GAA2B;IAC1C,cAAc,EAAE,QAAQ;IACxB,WAAW,EAAE,MAAM;IACnB,
|
|
1
|
+
{"version":3,"file":"banner-variants.js","sourceRoot":"","sources":["../../src/transforms/banner-variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAGjE,MAAM,WAAW,GAA2B;IAC1C,cAAc,EAAE,QAAQ;IACxB,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,SAAS,iBAAiB,CAAC,QAAgB,EAAE,SAAiB;IAC5D,MAAM,KAAK,GAAG,mFAAmF,CAAC;IAClG,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE;QACvE,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACnE,IAAI,WAAW,KAAK,YAAY,UAAU,GAAG,EAAE,CAAC;gBAC9C,OAAO,MAAM,GAAG,YAAY,UAAU,GAAG,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,GAAG,WAAW,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;AAC/D,CAAC;AAED,eAAe,kBAAkB,CAAC,iBAAiB,CAAc,CAAC;AAClE,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC"}
|
|
@@ -43,31 +43,23 @@ function coreTransform(fileInfo, api, _options) {
|
|
|
43
43
|
// --- Track needed useBlade members ---
|
|
44
44
|
const neededMembers = new Set();
|
|
45
45
|
// Check props.param / props.options usage
|
|
46
|
-
const usesParam = root
|
|
47
|
-
|
|
48
|
-
.size() > 0;
|
|
49
|
-
const usesOptions = root
|
|
50
|
-
.find(j.MemberExpression, { object: { name: "props" }, property: { name: "options" } })
|
|
51
|
-
.size() > 0;
|
|
46
|
+
const usesParam = root.find(j.MemberExpression, { object: { name: "props" }, property: { name: "param" } }).size() > 0;
|
|
47
|
+
const usesOptions = root.find(j.MemberExpression, { object: { name: "props" }, property: { name: "options" } }).size() > 0;
|
|
52
48
|
if (usesParam)
|
|
53
49
|
neededMembers.add("param");
|
|
54
50
|
if (usesOptions)
|
|
55
51
|
neededMembers.add("options");
|
|
56
52
|
// Check emit("parent:call", ...) usage
|
|
57
|
-
const parentCallEmits = root
|
|
58
|
-
.find(j.CallExpression, { callee: { name: "emit" } })
|
|
59
|
-
.filter((path) => {
|
|
53
|
+
const parentCallEmits = root.find(j.CallExpression, { callee: { name: "emit" } }).filter((path) => {
|
|
60
54
|
const args = path.node.arguments;
|
|
61
|
-
return
|
|
55
|
+
return args.length > 0 && args[0].type === "StringLiteral" && args[0].value === "parent:call";
|
|
62
56
|
});
|
|
63
57
|
if (parentCallEmits.size() > 0)
|
|
64
58
|
neededMembers.add("callParent");
|
|
65
59
|
// Check emit("close:blade") usage
|
|
66
|
-
const closeBladeEmits = root
|
|
67
|
-
.find(j.CallExpression, { callee: { name: "emit" } })
|
|
68
|
-
.filter((path) => {
|
|
60
|
+
const closeBladeEmits = root.find(j.CallExpression, { callee: { name: "emit" } }).filter((path) => {
|
|
69
61
|
const args = path.node.arguments;
|
|
70
|
-
return
|
|
62
|
+
return args.length > 0 && args[0].type === "StringLiteral" && args[0].value === "close:blade";
|
|
71
63
|
});
|
|
72
64
|
if (closeBladeEmits.size() > 0)
|
|
73
65
|
neededMembers.add("closeSelf");
|
|
@@ -76,7 +68,7 @@ function coreTransform(fileInfo, api, _options) {
|
|
|
76
68
|
.find(j.CallExpression, { callee: { name: "emit" } })
|
|
77
69
|
.filter((path) => {
|
|
78
70
|
const args = path.node.arguments;
|
|
79
|
-
return
|
|
71
|
+
return args.length > 0 && args[0].type === "StringLiteral" && args[0].value === "parent:call";
|
|
80
72
|
})
|
|
81
73
|
.forEach((path) => {
|
|
82
74
|
const args = path.node.arguments;
|
|
@@ -101,23 +93,19 @@ function coreTransform(fileInfo, api, _options) {
|
|
|
101
93
|
.find(j.CallExpression, { callee: { name: "emit" } })
|
|
102
94
|
.filter((path) => {
|
|
103
95
|
const args = path.node.arguments;
|
|
104
|
-
return
|
|
96
|
+
return args.length > 0 && args[0].type === "StringLiteral" && args[0].value === "close:blade";
|
|
105
97
|
})
|
|
106
98
|
.forEach((path) => {
|
|
107
99
|
j(path).replaceWith(j.callExpression(j.identifier("closeSelf"), []));
|
|
108
100
|
});
|
|
109
101
|
// --- Step 5: Replace props.param → param.value, props.options → options.value ---
|
|
110
102
|
if (usesParam) {
|
|
111
|
-
root
|
|
112
|
-
.find(j.MemberExpression, { object: { name: "props" }, property: { name: "param" } })
|
|
113
|
-
.forEach((path) => {
|
|
103
|
+
root.find(j.MemberExpression, { object: { name: "props" }, property: { name: "param" } }).forEach((path) => {
|
|
114
104
|
j(path).replaceWith(j.memberExpression(j.identifier("param"), j.identifier("value")));
|
|
115
105
|
});
|
|
116
106
|
}
|
|
117
107
|
if (usesOptions) {
|
|
118
|
-
root
|
|
119
|
-
.find(j.MemberExpression, { object: { name: "props" }, property: { name: "options" } })
|
|
120
|
-
.forEach((path) => {
|
|
108
|
+
root.find(j.MemberExpression, { object: { name: "props" }, property: { name: "options" } }).forEach((path) => {
|
|
121
109
|
j(path).replaceWith(j.memberExpression(j.identifier("options"), j.identifier("value")));
|
|
122
110
|
});
|
|
123
111
|
}
|
|
@@ -163,7 +151,14 @@ function coreTransform(fileInfo, api, _options) {
|
|
|
163
151
|
addUseBladeImport(root, j);
|
|
164
152
|
addUseBladeCall(root, j, neededMembers);
|
|
165
153
|
}
|
|
166
|
-
|
|
154
|
+
let result = root.toSource();
|
|
155
|
+
// --- Remove leftover `export type {};` stubs ---
|
|
156
|
+
// When jscodeshift removes an `export interface`, it leaves behind `export type {};`.
|
|
157
|
+
// These stubs are not tracked in the AST after removal, so we clean them via string replacement.
|
|
158
|
+
if (propsRemoved || hasBladeEmits) {
|
|
159
|
+
result = result.replace(/^\s*export type \{\};\s*\n?/gm, "");
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
167
162
|
}
|
|
168
163
|
function removeDefinePropsStatement(root, j) {
|
|
169
164
|
// Find variable declarations containing defineProps or withDefaults
|
|
@@ -183,9 +178,7 @@ function removeDefinePropsStatement(root, j) {
|
|
|
183
178
|
}
|
|
184
179
|
function simplifyWithDefaults(root, j) {
|
|
185
180
|
// Find withDefaults(defineProps<Props>(), { expanded: true, closable: true })
|
|
186
|
-
root
|
|
187
|
-
.find(j.CallExpression, { callee: { name: "withDefaults" } })
|
|
188
|
-
.forEach((path) => {
|
|
181
|
+
root.find(j.CallExpression, { callee: { name: "withDefaults" } }).forEach((path) => {
|
|
189
182
|
const args = path.node.arguments;
|
|
190
183
|
if (args.length < 2)
|
|
191
184
|
return;
|
|
@@ -247,9 +240,7 @@ function addUseBladeImport(root, j) {
|
|
|
247
240
|
let alreadyImported = false;
|
|
248
241
|
frameworkImports.forEach((path) => {
|
|
249
242
|
const specifiers = path.node.specifiers || [];
|
|
250
|
-
if (specifiers.some((s) => s.type === "ImportSpecifier" &&
|
|
251
|
-
s.imported.type === "Identifier" &&
|
|
252
|
-
s.imported.name === "useBlade")) {
|
|
243
|
+
if (specifiers.some((s) => s.type === "ImportSpecifier" && s.imported.type === "Identifier" && s.imported.name === "useBlade")) {
|
|
253
244
|
alreadyImported = true;
|
|
254
245
|
}
|
|
255
246
|
});
|
|
@@ -282,10 +273,31 @@ function addUseBladeImport(root, j) {
|
|
|
282
273
|
}
|
|
283
274
|
}
|
|
284
275
|
function addUseBladeCall(root, j, neededMembers) {
|
|
285
|
-
// Check if useBlade() call already exists
|
|
286
|
-
const existingCalls = root.find(j.
|
|
287
|
-
|
|
276
|
+
// Check if useBlade() call already exists in a variable declaration
|
|
277
|
+
const existingCalls = root.find(j.VariableDeclaration).filter((path) => {
|
|
278
|
+
return (j(path)
|
|
279
|
+
.find(j.CallExpression, { callee: { name: "useBlade" } })
|
|
280
|
+
.size() > 0);
|
|
281
|
+
});
|
|
282
|
+
if (existingCalls.size() > 0) {
|
|
283
|
+
// Merge missing members into the FIRST existing destructuring only
|
|
284
|
+
const firstCall = existingCalls.at(0);
|
|
285
|
+
const declarator = firstCall.get().node.declarations[0];
|
|
286
|
+
if (declarator.id.type === "ObjectPattern") {
|
|
287
|
+
const existingNames = new Set(declarator.id.properties
|
|
288
|
+
.filter((p) => p.type === "ObjectProperty" && p.key.type === "Identifier")
|
|
289
|
+
.map((p) => p.key.name));
|
|
290
|
+
for (const name of neededMembers) {
|
|
291
|
+
if (!existingNames.has(name)) {
|
|
292
|
+
const prop = j.objectProperty(j.identifier(name), j.identifier(name));
|
|
293
|
+
prop.shorthand = true;
|
|
294
|
+
declarator.id.properties.push(prop);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
288
298
|
return;
|
|
299
|
+
}
|
|
300
|
+
// No existing call — create new one
|
|
289
301
|
const members = Array.from(neededMembers).sort();
|
|
290
302
|
const properties = members.map((name) => {
|
|
291
303
|
const prop = j.objectProperty(j.identifier(name), j.identifier(name));
|