@xylabs/toolchain 7.10.0 → 7.10.1
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/dist/index.d.ts +3 -1
- package/dist/index.mjs +879 -782
- package/dist/index.mjs.map +1 -1
- package/dist/lib/deprecationMigrate.mjs +99 -0
- package/dist/lib/deprecationMigrate.mjs.map +1 -0
- package/dist/lib/index.mjs +238 -141
- package/dist/lib/index.mjs.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// src/lib/deprecationMigrate.ts
|
|
2
|
+
import {
|
|
3
|
+
existsSync,
|
|
4
|
+
readFileSync,
|
|
5
|
+
writeFileSync
|
|
6
|
+
} from "fs";
|
|
7
|
+
import PATH from "path";
|
|
8
|
+
import { createInterface } from "readline";
|
|
9
|
+
import chalk from "chalk";
|
|
10
|
+
function findProjectRoot() {
|
|
11
|
+
return process.env.INIT_CWD ?? process.cwd();
|
|
12
|
+
}
|
|
13
|
+
function askYesNo(question) {
|
|
14
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
rl.question(question, (answer) => {
|
|
17
|
+
rl.close();
|
|
18
|
+
resolve(answer.trim().toLowerCase().startsWith("y"));
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function replaceInFile(filePath, oldStr, newStr) {
|
|
23
|
+
if (!existsSync(filePath)) return false;
|
|
24
|
+
const content = readFileSync(filePath, "utf8");
|
|
25
|
+
if (!content.includes(oldStr)) return false;
|
|
26
|
+
writeFileSync(filePath, content.replaceAll(oldStr, newStr), "utf8");
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
function migrateRootPackageJson(pkg, pkgPath, oldPackage, depField) {
|
|
30
|
+
const version = pkg[depField][oldPackage];
|
|
31
|
+
delete pkg[depField][oldPackage];
|
|
32
|
+
pkg[depField]["@xylabs/toolchain"] = version;
|
|
33
|
+
writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}
|
|
34
|
+
`, "utf8");
|
|
35
|
+
console.warn(chalk.green(` \u2713 Replaced ${oldPackage} \u2192 @xylabs/toolchain in ${depField}`));
|
|
36
|
+
}
|
|
37
|
+
function migrateWorkspacePackageJson(wsPkgPath, dir, oldPackage) {
|
|
38
|
+
if (!existsSync(wsPkgPath)) return;
|
|
39
|
+
const wsPkg = JSON.parse(readFileSync(wsPkgPath, "utf8"));
|
|
40
|
+
let changed = false;
|
|
41
|
+
for (const field of ["dependencies", "devDependencies", "peerDependencies"]) {
|
|
42
|
+
if (wsPkg[field]?.[oldPackage]) {
|
|
43
|
+
const ver = wsPkg[field][oldPackage];
|
|
44
|
+
delete wsPkg[field][oldPackage];
|
|
45
|
+
wsPkg[field]["@xylabs/toolchain"] = ver;
|
|
46
|
+
changed = true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (changed) {
|
|
50
|
+
writeFileSync(wsPkgPath, `${JSON.stringify(wsPkg, null, 2)}
|
|
51
|
+
`, "utf8");
|
|
52
|
+
console.warn(chalk.green(` \u2713 Updated ${dir}/package.json`));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function migrateWorkspaces(root, workspacesGlob, oldPackage) {
|
|
56
|
+
if (!Array.isArray(workspacesGlob)) return;
|
|
57
|
+
const { globSync } = await import("glob");
|
|
58
|
+
for (const pattern of workspacesGlob) {
|
|
59
|
+
const dirs = globSync(pattern, { cwd: root });
|
|
60
|
+
for (const dir of dirs) {
|
|
61
|
+
if (replaceInFile(PATH.join(root, dir, "xy.config.ts"), oldPackage, "@xylabs/toolchain")) {
|
|
62
|
+
console.warn(chalk.green(` \u2713 Updated ${dir}/xy.config.ts imports`));
|
|
63
|
+
}
|
|
64
|
+
migrateWorkspacePackageJson(PATH.join(root, dir, "package.json"), dir, oldPackage);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function printManualInstructions(oldPackage) {
|
|
69
|
+
console.warn(chalk.gray(" Skipped. To migrate manually:\n"));
|
|
70
|
+
console.warn(chalk.gray(` 1. Replace "${oldPackage}" with "@xylabs/toolchain" in package.json`));
|
|
71
|
+
console.warn(chalk.gray(" 2. Update xy.config.ts imports"));
|
|
72
|
+
console.warn(chalk.gray(" 3. Run your package manager install\n"));
|
|
73
|
+
}
|
|
74
|
+
async function deprecationMigrate(oldPackage) {
|
|
75
|
+
const root = findProjectRoot();
|
|
76
|
+
const pkgPath = PATH.join(root, "package.json");
|
|
77
|
+
if (!existsSync(pkgPath)) return;
|
|
78
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
79
|
+
const depField = pkg.dependencies?.[oldPackage] ? "dependencies" : pkg.devDependencies?.[oldPackage] ? "devDependencies" : void 0;
|
|
80
|
+
if (!depField) return;
|
|
81
|
+
console.warn(chalk.yellow(`
|
|
82
|
+
\u26A0 ${oldPackage} is deprecated. Use @xylabs/toolchain instead.
|
|
83
|
+
`));
|
|
84
|
+
const shouldMigrate = await askYesNo(chalk.cyan(" Auto-migrate to @xylabs/toolchain? [y/N] "));
|
|
85
|
+
if (!shouldMigrate) {
|
|
86
|
+
printManualInstructions(oldPackage);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
migrateRootPackageJson(pkg, pkgPath, oldPackage, depField);
|
|
90
|
+
if (replaceInFile(PATH.join(root, "xy.config.ts"), oldPackage, "@xylabs/toolchain")) {
|
|
91
|
+
console.warn(chalk.green(" \u2713 Updated xy.config.ts imports"));
|
|
92
|
+
}
|
|
93
|
+
await migrateWorkspaces(root, pkg.workspaces, oldPackage);
|
|
94
|
+
console.warn(chalk.yellow("\n Run your package manager install to complete the migration.\n"));
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
deprecationMigrate
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=deprecationMigrate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/deprecationMigrate.ts"],"sourcesContent":["import {\n existsSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\nimport { createInterface } from 'node:readline'\n\nimport chalk from 'chalk'\n\nfunction findProjectRoot(): string {\n return process.env.INIT_CWD ?? process.cwd()\n}\n\nfunction askYesNo(question: string): Promise<boolean> {\n const rl = createInterface({ input: process.stdin, output: process.stderr })\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close()\n resolve(answer.trim().toLowerCase().startsWith('y'))\n })\n })\n}\n\nfunction replaceInFile(filePath: string, oldStr: string, newStr: string): boolean {\n if (!existsSync(filePath)) return false\n const content = readFileSync(filePath, 'utf8')\n if (!content.includes(oldStr)) return false\n writeFileSync(filePath, content.replaceAll(oldStr, newStr), 'utf8')\n return true\n}\n\nfunction migrateRootPackageJson(\n pkg: Record<string, Record<string, string>>,\n pkgPath: string,\n oldPackage: string,\n depField: string,\n): void {\n const version = pkg[depField][oldPackage]\n delete pkg[depField][oldPackage]\n pkg[depField]['@xylabs/toolchain'] = version\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`, 'utf8')\n console.warn(chalk.green(` ✓ Replaced ${oldPackage} → @xylabs/toolchain in ${depField}`))\n}\n\nfunction migrateWorkspacePackageJson(wsPkgPath: string, dir: string, oldPackage: string): void {\n if (!existsSync(wsPkgPath)) return\n const wsPkg = JSON.parse(readFileSync(wsPkgPath, 'utf8')) as Record<string, Record<string, string>>\n let changed = false\n for (const field of ['dependencies', 'devDependencies', 'peerDependencies'] as const) {\n if (wsPkg[field]?.[oldPackage]) {\n const ver = wsPkg[field][oldPackage]\n delete wsPkg[field][oldPackage]\n wsPkg[field]['@xylabs/toolchain'] = ver\n changed = true\n }\n }\n if (changed) {\n writeFileSync(wsPkgPath, `${JSON.stringify(wsPkg, null, 2)}\\n`, 'utf8')\n console.warn(chalk.green(` ✓ Updated ${dir}/package.json`))\n }\n}\n\nasync function migrateWorkspaces(root: string, workspacesGlob: unknown, oldPackage: string): Promise<void> {\n if (!Array.isArray(workspacesGlob)) return\n const { globSync } = await import('glob')\n for (const pattern of workspacesGlob) {\n const dirs = globSync(pattern as string, { cwd: root })\n for (const dir of dirs) {\n if (replaceInFile(PATH.join(root, dir, 'xy.config.ts'), oldPackage, '@xylabs/toolchain')) {\n console.warn(chalk.green(` ✓ Updated ${dir}/xy.config.ts imports`))\n }\n migrateWorkspacePackageJson(PATH.join(root, dir, 'package.json'), dir, oldPackage)\n }\n }\n}\n\nfunction printManualInstructions(oldPackage: string): void {\n console.warn(chalk.gray(' Skipped. To migrate manually:\\n'))\n console.warn(chalk.gray(` 1. Replace \"${oldPackage}\" with \"@xylabs/toolchain\" in package.json`))\n console.warn(chalk.gray(' 2. Update xy.config.ts imports'))\n console.warn(chalk.gray(' 3. Run your package manager install\\n'))\n}\n\nexport async function deprecationMigrate(oldPackage: string): Promise<void> {\n const root = findProjectRoot()\n const pkgPath = PATH.join(root, 'package.json')\n\n if (!existsSync(pkgPath)) return\n\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8')) as Record<string, Record<string, string>>\n const depField = pkg.dependencies?.[oldPackage]\n ? 'dependencies'\n : pkg.devDependencies?.[oldPackage]\n ? 'devDependencies'\n : undefined\n\n if (!depField) return\n\n console.warn(chalk.yellow(`\\n⚠ ${oldPackage} is deprecated. Use @xylabs/toolchain instead.\\n`))\n\n const shouldMigrate = await askYesNo(chalk.cyan(' Auto-migrate to @xylabs/toolchain? [y/N] '))\n\n if (!shouldMigrate) {\n printManualInstructions(oldPackage)\n return\n }\n\n migrateRootPackageJson(pkg, pkgPath, oldPackage, depField)\n\n if (replaceInFile(PATH.join(root, 'xy.config.ts'), oldPackage, '@xylabs/toolchain')) {\n console.warn(chalk.green(' ✓ Updated xy.config.ts imports'))\n }\n\n await migrateWorkspaces(root, pkg.workspaces, oldPackage)\n\n console.warn(chalk.yellow('\\n Run your package manager install to complete the migration.\\n'))\n}\n"],"mappings":"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","names":[]}
|