@xylabs/ts-scripts-common 7.5.2 → 7.5.4
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/actions/deplint/checkPackage/checkPackage.mjs +52 -5
- package/dist/actions/deplint/checkPackage/checkPackage.mjs.map +1 -1
- package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs +17 -2
- package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs.map +1 -1
- package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs +15 -1
- package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs.map +1 -1
- package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs +15 -1
- package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs.map +1 -1
- package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs +41 -1
- package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs.map +1 -1
- package/dist/actions/deplint/checkPackage/index.mjs +52 -5
- package/dist/actions/deplint/checkPackage/index.mjs.map +1 -1
- package/dist/actions/deplint/deplint.mjs +43 -5
- package/dist/actions/deplint/deplint.mjs.map +1 -1
- package/dist/actions/deplint/implicitDevDependencies.mjs +25 -0
- package/dist/actions/deplint/implicitDevDependencies.mjs.map +1 -1
- package/dist/actions/deplint/index.mjs +43 -5
- package/dist/actions/deplint/index.mjs.map +1 -1
- package/dist/actions/deplint/tsScriptsAliases.mjs +20 -0
- package/dist/actions/deplint/tsScriptsAliases.mjs.map +1 -0
- package/dist/actions/index.mjs +195 -98
- package/dist/actions/index.mjs.map +1 -1
- package/dist/actions/packman/convert.mjs +142 -83
- package/dist/actions/packman/convert.mjs.map +1 -1
- package/dist/actions/packman/convertToPnpm.mjs +94 -36
- package/dist/actions/packman/convertToPnpm.mjs.map +1 -1
- package/dist/actions/packman/convertToYarn.mjs +95 -37
- package/dist/actions/packman/convertToYarn.mjs.map +1 -1
- package/dist/actions/packman/index.mjs +142 -83
- package/dist/actions/packman/index.mjs.map +1 -1
- package/dist/actions/packman/rewriteSourceImports.mjs +60 -0
- package/dist/actions/packman/rewriteSourceImports.mjs.map +1 -0
- package/dist/bin/xy.mjs +212 -115
- package/dist/bin/xy.mjs.map +1 -1
- package/dist/index.mjs +214 -117
- package/dist/index.mjs.map +1 -1
- package/dist/xy/common/index.mjs +142 -83
- package/dist/xy/common/index.mjs.map +1 -1
- package/dist/xy/common/packmanCommand.mjs +142 -83
- package/dist/xy/common/packmanCommand.mjs.map +1 -1
- package/dist/xy/index.mjs +212 -115
- package/dist/xy/index.mjs.map +1 -1
- package/dist/xy/lint/deplintCommand.mjs +43 -5
- package/dist/xy/lint/deplintCommand.mjs.map +1 -1
- package/dist/xy/lint/index.mjs +43 -5
- package/dist/xy/lint/index.mjs.map +1 -1
- package/dist/xy/xy.mjs +212 -115
- package/dist/xy/xy.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
// src/actions/packman/convert.ts
|
|
2
2
|
import {
|
|
3
|
-
existsSync as
|
|
3
|
+
existsSync as existsSync5,
|
|
4
4
|
readdirSync,
|
|
5
|
-
readFileSync as
|
|
5
|
+
readFileSync as readFileSync5,
|
|
6
6
|
statSync
|
|
7
7
|
} from "fs";
|
|
8
8
|
import PATH4 from "path";
|
|
9
|
-
import
|
|
9
|
+
import chalk5 from "chalk";
|
|
10
10
|
|
|
11
11
|
// src/actions/packman/convertToPnpm.ts
|
|
12
12
|
import {
|
|
13
|
-
existsSync as
|
|
13
|
+
existsSync as existsSync3,
|
|
14
14
|
mkdirSync,
|
|
15
|
-
readFileSync as
|
|
15
|
+
readFileSync as readFileSync3,
|
|
16
16
|
rmSync,
|
|
17
|
-
writeFileSync as
|
|
17
|
+
writeFileSync as writeFileSync3
|
|
18
18
|
} from "fs";
|
|
19
19
|
import PATH2 from "path";
|
|
20
|
-
import
|
|
20
|
+
import chalk3 from "chalk";
|
|
21
21
|
|
|
22
22
|
// src/actions/packman/rewriteScripts.ts
|
|
23
23
|
function rewriteYarnToPnpm(script) {
|
|
@@ -67,14 +67,71 @@ function rewriteScriptsInPackageJson(pkg, direction) {
|
|
|
67
67
|
return { ...pkg, scripts: rewritten };
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
// src/actions/packman/
|
|
70
|
+
// src/actions/packman/rewriteSourceImports.ts
|
|
71
71
|
import {
|
|
72
72
|
existsSync,
|
|
73
73
|
readFileSync,
|
|
74
74
|
writeFileSync
|
|
75
75
|
} from "fs";
|
|
76
|
-
import PATH from "path";
|
|
77
76
|
import chalk from "chalk";
|
|
77
|
+
import { globSync } from "glob";
|
|
78
|
+
var IMPORT_SWAP_MAP = {
|
|
79
|
+
"yarn-to-pnpm": [
|
|
80
|
+
["@xylabs/ts-scripts-yarn3", "@xylabs/ts-scripts-pnpm"],
|
|
81
|
+
["@xylabs/ts-scripts-react-yarn3", "@xylabs/ts-scripts-react-pnpm"]
|
|
82
|
+
],
|
|
83
|
+
"pnpm-to-yarn": [
|
|
84
|
+
["@xylabs/ts-scripts-pnpm", "@xylabs/ts-scripts-yarn3"],
|
|
85
|
+
["@xylabs/ts-scripts-react-pnpm", "@xylabs/ts-scripts-react-yarn3"]
|
|
86
|
+
]
|
|
87
|
+
};
|
|
88
|
+
var SOURCE_GLOBS = [
|
|
89
|
+
"**/*.ts",
|
|
90
|
+
"**/*.tsx",
|
|
91
|
+
"**/*.mts",
|
|
92
|
+
"**/*.cts",
|
|
93
|
+
"**/*.js",
|
|
94
|
+
"**/*.mjs"
|
|
95
|
+
];
|
|
96
|
+
var IGNORE_PATTERNS = [
|
|
97
|
+
"**/node_modules/**",
|
|
98
|
+
"**/dist/**",
|
|
99
|
+
"**/build/**",
|
|
100
|
+
"**/.yarn/**"
|
|
101
|
+
];
|
|
102
|
+
function rewriteSourceImports(cwd, direction) {
|
|
103
|
+
const swaps = IMPORT_SWAP_MAP[direction];
|
|
104
|
+
const files = globSync(SOURCE_GLOBS, {
|
|
105
|
+
cwd,
|
|
106
|
+
absolute: true,
|
|
107
|
+
ignore: IGNORE_PATTERNS
|
|
108
|
+
});
|
|
109
|
+
let count = 0;
|
|
110
|
+
for (const file of files) {
|
|
111
|
+
if (!existsSync(file)) continue;
|
|
112
|
+
const original = readFileSync(file, "utf8");
|
|
113
|
+
let content = original;
|
|
114
|
+
for (const [from, to] of swaps) {
|
|
115
|
+
content = content.replaceAll(from, to);
|
|
116
|
+
}
|
|
117
|
+
if (content !== original) {
|
|
118
|
+
writeFileSync(file, content, "utf8");
|
|
119
|
+
count++;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (count > 0) {
|
|
123
|
+
console.log(chalk.green(` Rewrote ts-scripts imports in ${count} source file(s)`));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// src/actions/packman/swapTsScriptsDependency.ts
|
|
128
|
+
import {
|
|
129
|
+
existsSync as existsSync2,
|
|
130
|
+
readFileSync as readFileSync2,
|
|
131
|
+
writeFileSync as writeFileSync2
|
|
132
|
+
} from "fs";
|
|
133
|
+
import PATH from "path";
|
|
134
|
+
import chalk2 from "chalk";
|
|
78
135
|
var SWAP_MAP = {
|
|
79
136
|
"yarn-to-pnpm": [
|
|
80
137
|
["@xylabs/ts-scripts-yarn3", "@xylabs/ts-scripts-pnpm"]
|
|
@@ -84,8 +141,8 @@ var SWAP_MAP = {
|
|
|
84
141
|
]
|
|
85
142
|
};
|
|
86
143
|
function swapInPackageJson(pkgPath, direction) {
|
|
87
|
-
if (!
|
|
88
|
-
const raw =
|
|
144
|
+
if (!existsSync2(pkgPath)) return false;
|
|
145
|
+
const raw = readFileSync2(pkgPath, "utf8");
|
|
89
146
|
const pkg = JSON.parse(raw);
|
|
90
147
|
let changed = false;
|
|
91
148
|
for (const depField of ["dependencies", "devDependencies"]) {
|
|
@@ -100,7 +157,7 @@ function swapInPackageJson(pkgPath, direction) {
|
|
|
100
157
|
}
|
|
101
158
|
}
|
|
102
159
|
if (changed) {
|
|
103
|
-
|
|
160
|
+
writeFileSync2(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
|
|
104
161
|
}
|
|
105
162
|
return changed;
|
|
106
163
|
}
|
|
@@ -117,7 +174,7 @@ function swapTsScriptsDependency(cwd, workspacePackageJsonPaths, direction) {
|
|
|
117
174
|
}
|
|
118
175
|
if (count > 0) {
|
|
119
176
|
const target = direction === "yarn-to-pnpm" ? "@xylabs/ts-scripts-pnpm" : "@xylabs/ts-scripts-yarn3";
|
|
120
|
-
console.log(
|
|
177
|
+
console.log(chalk2.green(` Swapped ts-scripts dependency to ${target} in ${count} package(s)`));
|
|
121
178
|
}
|
|
122
179
|
}
|
|
123
180
|
|
|
@@ -128,13 +185,13 @@ function createPnpmWorkspaceYaml(cwd, workspacePatterns) {
|
|
|
128
185
|
for (const pattern of workspacePatterns) {
|
|
129
186
|
lines.push(` - '${pattern}'`);
|
|
130
187
|
}
|
|
131
|
-
|
|
132
|
-
console.log(
|
|
188
|
+
writeFileSync3(PATH2.join(cwd, "pnpm-workspace.yaml"), lines.join("\n") + "\n", "utf8");
|
|
189
|
+
console.log(chalk3.green(" Created pnpm-workspace.yaml"));
|
|
133
190
|
}
|
|
134
191
|
function readPnpmWorkspacePatterns(cwd) {
|
|
135
192
|
const wsPath = PATH2.join(cwd, "pnpm-workspace.yaml");
|
|
136
|
-
if (!
|
|
137
|
-
const content =
|
|
193
|
+
if (!existsSync3(wsPath)) return [];
|
|
194
|
+
const content = readFileSync3(wsPath, "utf8");
|
|
138
195
|
const patterns = [];
|
|
139
196
|
const lines = content.split("\n");
|
|
140
197
|
let inPackages = false;
|
|
@@ -154,19 +211,19 @@ function readPnpmWorkspacePatterns(cwd) {
|
|
|
154
211
|
}
|
|
155
212
|
function updateRootPackageJson(cwd) {
|
|
156
213
|
const pkgPath = PATH2.join(cwd, "package.json");
|
|
157
|
-
const pkg = JSON.parse(
|
|
214
|
+
const pkg = JSON.parse(readFileSync3(pkgPath, "utf8"));
|
|
158
215
|
const workspacePatterns = pkg.workspaces ?? readPnpmWorkspacePatterns(cwd);
|
|
159
216
|
delete pkg.workspaces;
|
|
160
217
|
pkg.packageManager = `pnpm@${PNPM_VERSION}`;
|
|
161
218
|
const updated = rewriteScriptsInPackageJson(pkg, "yarn-to-pnpm");
|
|
162
|
-
|
|
163
|
-
console.log(
|
|
219
|
+
writeFileSync3(pkgPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
|
|
220
|
+
console.log(chalk3.green(" Updated root package.json"));
|
|
164
221
|
return workspacePatterns;
|
|
165
222
|
}
|
|
166
223
|
function updateGitignore(cwd) {
|
|
167
224
|
const gitignorePath = PATH2.join(cwd, ".gitignore");
|
|
168
|
-
if (!
|
|
169
|
-
let content =
|
|
225
|
+
if (!existsSync3(gitignorePath)) return;
|
|
226
|
+
let content = readFileSync3(gitignorePath, "utf8");
|
|
170
227
|
const yarnLines = [
|
|
171
228
|
".pnp.*",
|
|
172
229
|
".pnp",
|
|
@@ -181,64 +238,65 @@ function updateGitignore(cwd) {
|
|
|
181
238
|
content = content.replaceAll(new RegExp(String.raw`^${line.replaceAll(".", String.raw`\.`).replaceAll("*", String.raw`\*`).replaceAll("!", String.raw`\!`)}\s*$`, "gm"), "");
|
|
182
239
|
}
|
|
183
240
|
content = content.replaceAll(/\n{3,}/g, "\n\n");
|
|
184
|
-
|
|
185
|
-
console.log(
|
|
241
|
+
writeFileSync3(gitignorePath, content, "utf8");
|
|
242
|
+
console.log(chalk3.green(" Updated .gitignore"));
|
|
186
243
|
}
|
|
187
244
|
function deleteYarnArtifacts(cwd) {
|
|
188
245
|
const yarnLock = PATH2.join(cwd, "yarn.lock");
|
|
189
246
|
const yarnrc = PATH2.join(cwd, ".yarnrc.yml");
|
|
190
247
|
const yarnDir = PATH2.join(cwd, ".yarn");
|
|
191
|
-
if (
|
|
248
|
+
if (existsSync3(yarnLock)) {
|
|
192
249
|
rmSync(yarnLock);
|
|
193
|
-
console.log(
|
|
250
|
+
console.log(chalk3.gray(" Deleted yarn.lock"));
|
|
194
251
|
}
|
|
195
|
-
if (
|
|
252
|
+
if (existsSync3(yarnrc)) {
|
|
196
253
|
rmSync(yarnrc);
|
|
197
|
-
console.log(
|
|
254
|
+
console.log(chalk3.gray(" Deleted .yarnrc.yml"));
|
|
198
255
|
}
|
|
199
|
-
if (
|
|
256
|
+
if (existsSync3(yarnDir)) {
|
|
200
257
|
rmSync(yarnDir, { force: true, recursive: true });
|
|
201
|
-
console.log(
|
|
258
|
+
console.log(chalk3.gray(" Deleted .yarn/"));
|
|
202
259
|
}
|
|
203
260
|
}
|
|
204
261
|
function createNpmrc(cwd) {
|
|
205
262
|
const npmrcPath = PATH2.join(cwd, ".npmrc");
|
|
206
|
-
if (
|
|
263
|
+
if (existsSync3(npmrcPath)) return;
|
|
207
264
|
mkdirSync(PATH2.dirname(npmrcPath), { recursive: true });
|
|
208
|
-
|
|
209
|
-
console.log(
|
|
265
|
+
writeFileSync3(npmrcPath, "", "utf8");
|
|
266
|
+
console.log(chalk3.green(" Created .npmrc"));
|
|
210
267
|
}
|
|
211
268
|
function convertToPnpm(cwd, workspacePackageJsonPaths) {
|
|
212
|
-
console.log(
|
|
269
|
+
console.log(chalk3.blue("\nConverting to pnpm...\n"));
|
|
213
270
|
const workspacePatterns = updateRootPackageJson(cwd);
|
|
214
271
|
createPnpmWorkspaceYaml(cwd, workspacePatterns);
|
|
215
272
|
for (const pkgPath of workspacePackageJsonPaths) {
|
|
216
273
|
const fullPath = PATH2.resolve(cwd, pkgPath, "package.json");
|
|
217
|
-
if (!
|
|
218
|
-
const pkg = JSON.parse(
|
|
274
|
+
if (!existsSync3(fullPath)) continue;
|
|
275
|
+
const pkg = JSON.parse(readFileSync3(fullPath, "utf8"));
|
|
219
276
|
const updated = rewriteScriptsInPackageJson(pkg, "yarn-to-pnpm");
|
|
220
277
|
if (JSON.stringify(pkg) !== JSON.stringify(updated)) {
|
|
221
|
-
|
|
278
|
+
writeFileSync3(fullPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
|
|
222
279
|
}
|
|
223
280
|
}
|
|
224
|
-
console.log(
|
|
281
|
+
console.log(chalk3.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`));
|
|
225
282
|
updateGitignore(cwd);
|
|
226
283
|
createNpmrc(cwd);
|
|
227
284
|
swapTsScriptsDependency(cwd, workspacePackageJsonPaths, "yarn-to-pnpm");
|
|
285
|
+
rewriteSourceImports(cwd, "yarn-to-pnpm");
|
|
228
286
|
deleteYarnArtifacts(cwd);
|
|
229
|
-
console.log(
|
|
287
|
+
console.log(chalk3.blue("\nConversion complete. Run `pnpm install` to generate pnpm-lock.yaml.\n"));
|
|
230
288
|
return 0;
|
|
231
289
|
}
|
|
232
290
|
|
|
233
291
|
// src/actions/packman/convertToYarn.ts
|
|
234
292
|
import {
|
|
235
|
-
existsSync as
|
|
236
|
-
readFileSync as
|
|
293
|
+
existsSync as existsSync4,
|
|
294
|
+
readFileSync as readFileSync4,
|
|
237
295
|
rmSync as rmSync2,
|
|
238
|
-
writeFileSync as
|
|
296
|
+
writeFileSync as writeFileSync4
|
|
239
297
|
} from "fs";
|
|
240
298
|
import PATH3 from "path";
|
|
241
|
-
import
|
|
299
|
+
import chalk4 from "chalk";
|
|
242
300
|
var YARN_VERSION = "4.13.0";
|
|
243
301
|
var YARNRC_TEMPLATE = `compressionLevel: mixed
|
|
244
302
|
|
|
@@ -261,8 +319,8 @@ var YARN_GITIGNORE_ENTRIES = `
|
|
|
261
319
|
`;
|
|
262
320
|
function readPnpmWorkspacePatterns2(cwd) {
|
|
263
321
|
const wsPath = PATH3.join(cwd, "pnpm-workspace.yaml");
|
|
264
|
-
if (!
|
|
265
|
-
const content =
|
|
322
|
+
if (!existsSync4(wsPath)) return [];
|
|
323
|
+
const content = readFileSync4(wsPath, "utf8");
|
|
266
324
|
const patterns = [];
|
|
267
325
|
const lines = content.split("\n");
|
|
268
326
|
let inPackages = false;
|
|
@@ -282,102 +340,103 @@ function readPnpmWorkspacePatterns2(cwd) {
|
|
|
282
340
|
}
|
|
283
341
|
function updateRootPackageJson2(cwd, workspacePatterns) {
|
|
284
342
|
const pkgPath = PATH3.join(cwd, "package.json");
|
|
285
|
-
const pkg = JSON.parse(
|
|
343
|
+
const pkg = JSON.parse(readFileSync4(pkgPath, "utf8"));
|
|
286
344
|
pkg.workspaces = workspacePatterns;
|
|
287
345
|
pkg.packageManager = `yarn@${YARN_VERSION}`;
|
|
288
346
|
const updated = rewriteScriptsInPackageJson(pkg, "pnpm-to-yarn");
|
|
289
|
-
|
|
290
|
-
console.log(
|
|
347
|
+
writeFileSync4(pkgPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
|
|
348
|
+
console.log(chalk4.green(" Updated root package.json"));
|
|
291
349
|
}
|
|
292
350
|
function updateGitignore2(cwd) {
|
|
293
351
|
const gitignorePath = PATH3.join(cwd, ".gitignore");
|
|
294
|
-
let content =
|
|
352
|
+
let content = existsSync4(gitignorePath) ? readFileSync4(gitignorePath, "utf8") : "";
|
|
295
353
|
if (!content.includes(".yarn/*")) {
|
|
296
354
|
content = content.trimEnd() + "\n" + YARN_GITIGNORE_ENTRIES;
|
|
297
355
|
}
|
|
298
|
-
|
|
299
|
-
console.log(
|
|
356
|
+
writeFileSync4(gitignorePath, content, "utf8");
|
|
357
|
+
console.log(chalk4.green(" Updated .gitignore"));
|
|
300
358
|
}
|
|
301
359
|
function deletePnpmArtifacts(cwd) {
|
|
302
360
|
const lockfile = PATH3.join(cwd, "pnpm-lock.yaml");
|
|
303
361
|
const workspaceYaml = PATH3.join(cwd, "pnpm-workspace.yaml");
|
|
304
362
|
const npmrc = PATH3.join(cwd, ".npmrc");
|
|
305
|
-
if (
|
|
363
|
+
if (existsSync4(lockfile)) {
|
|
306
364
|
rmSync2(lockfile);
|
|
307
|
-
console.log(
|
|
365
|
+
console.log(chalk4.gray(" Deleted pnpm-lock.yaml"));
|
|
308
366
|
}
|
|
309
|
-
if (
|
|
367
|
+
if (existsSync4(workspaceYaml)) {
|
|
310
368
|
rmSync2(workspaceYaml);
|
|
311
|
-
console.log(
|
|
369
|
+
console.log(chalk4.gray(" Deleted pnpm-workspace.yaml"));
|
|
312
370
|
}
|
|
313
|
-
if (
|
|
314
|
-
const content =
|
|
371
|
+
if (existsSync4(npmrc)) {
|
|
372
|
+
const content = readFileSync4(npmrc, "utf8");
|
|
315
373
|
if (content.trim() === "" || content.includes("shamefully-hoist") || content.includes("node-linker")) {
|
|
316
374
|
rmSync2(npmrc);
|
|
317
|
-
console.log(
|
|
375
|
+
console.log(chalk4.gray(" Deleted .npmrc"));
|
|
318
376
|
}
|
|
319
377
|
}
|
|
320
378
|
}
|
|
321
379
|
function createYarnrc(cwd) {
|
|
322
380
|
const yarnrcPath = PATH3.join(cwd, ".yarnrc.yml");
|
|
323
|
-
if (
|
|
324
|
-
|
|
325
|
-
console.log(
|
|
381
|
+
if (existsSync4(yarnrcPath)) return;
|
|
382
|
+
writeFileSync4(yarnrcPath, YARNRC_TEMPLATE, "utf8");
|
|
383
|
+
console.log(chalk4.green(" Created .yarnrc.yml"));
|
|
326
384
|
}
|
|
327
385
|
function readWorkspacePatternsFromPackageJson(cwd) {
|
|
328
386
|
const pkgPath = PATH3.join(cwd, "package.json");
|
|
329
|
-
if (!
|
|
330
|
-
const pkg = JSON.parse(
|
|
387
|
+
if (!existsSync4(pkgPath)) return [];
|
|
388
|
+
const pkg = JSON.parse(readFileSync4(pkgPath, "utf8"));
|
|
331
389
|
return pkg.workspaces ?? [];
|
|
332
390
|
}
|
|
333
391
|
function convertToYarn(cwd, workspacePackageJsonPaths) {
|
|
334
|
-
console.log(
|
|
392
|
+
console.log(chalk4.blue("\nConverting to yarn...\n"));
|
|
335
393
|
const workspacePatterns = readPnpmWorkspacePatterns2(cwd);
|
|
336
394
|
if (workspacePatterns.length === 0) {
|
|
337
395
|
const fromPkg = readWorkspacePatternsFromPackageJson(cwd);
|
|
338
396
|
if (fromPkg.length > 0) {
|
|
339
397
|
workspacePatterns.push(...fromPkg);
|
|
340
398
|
} else {
|
|
341
|
-
console.warn(
|
|
399
|
+
console.warn(chalk4.yellow(" No workspace patterns found"));
|
|
342
400
|
}
|
|
343
401
|
}
|
|
344
402
|
updateRootPackageJson2(cwd, workspacePatterns);
|
|
345
403
|
for (const pkgPath of workspacePackageJsonPaths) {
|
|
346
404
|
const fullPath = PATH3.resolve(cwd, pkgPath, "package.json");
|
|
347
|
-
if (!
|
|
348
|
-
const pkg = JSON.parse(
|
|
405
|
+
if (!existsSync4(fullPath)) continue;
|
|
406
|
+
const pkg = JSON.parse(readFileSync4(fullPath, "utf8"));
|
|
349
407
|
const updated = rewriteScriptsInPackageJson(pkg, "pnpm-to-yarn");
|
|
350
408
|
if (JSON.stringify(pkg) !== JSON.stringify(updated)) {
|
|
351
|
-
|
|
409
|
+
writeFileSync4(fullPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
|
|
352
410
|
}
|
|
353
411
|
}
|
|
354
|
-
console.log(
|
|
412
|
+
console.log(chalk4.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`));
|
|
355
413
|
updateGitignore2(cwd);
|
|
356
414
|
createYarnrc(cwd);
|
|
357
415
|
swapTsScriptsDependency(cwd, workspacePackageJsonPaths, "pnpm-to-yarn");
|
|
416
|
+
rewriteSourceImports(cwd, "pnpm-to-yarn");
|
|
358
417
|
deletePnpmArtifacts(cwd);
|
|
359
|
-
console.log(
|
|
418
|
+
console.log(chalk4.blue("\nConversion complete. Run `corepack enable yarn && yarn set version stable && yarn install` to finish setup.\n"));
|
|
360
419
|
return 0;
|
|
361
420
|
}
|
|
362
421
|
|
|
363
422
|
// src/actions/packman/convert.ts
|
|
364
423
|
function detectCurrentPM(cwd) {
|
|
365
|
-
if (
|
|
424
|
+
if (existsSync5(PATH4.join(cwd, "pnpm-lock.yaml")) || existsSync5(PATH4.join(cwd, "pnpm-workspace.yaml"))) {
|
|
366
425
|
return "pnpm";
|
|
367
426
|
}
|
|
368
|
-
if (
|
|
427
|
+
if (existsSync5(PATH4.join(cwd, "yarn.lock")) || existsSync5(PATH4.join(cwd, ".yarnrc.yml"))) {
|
|
369
428
|
return "yarn";
|
|
370
429
|
}
|
|
371
430
|
return "unknown";
|
|
372
431
|
}
|
|
373
432
|
function findWorkspacePackagePaths(cwd) {
|
|
374
433
|
const pkgPath = PATH4.join(cwd, "package.json");
|
|
375
|
-
const pkg = JSON.parse(
|
|
434
|
+
const pkg = JSON.parse(readFileSync5(pkgPath, "utf8"));
|
|
376
435
|
let patterns = pkg.workspaces ?? [];
|
|
377
436
|
if (patterns.length === 0) {
|
|
378
437
|
const wsPath = PATH4.join(cwd, "pnpm-workspace.yaml");
|
|
379
|
-
if (
|
|
380
|
-
const content =
|
|
438
|
+
if (existsSync5(wsPath)) {
|
|
439
|
+
const content = readFileSync5(wsPath, "utf8");
|
|
381
440
|
const lines = content.split("\n");
|
|
382
441
|
let inPackages = false;
|
|
383
442
|
for (const line of lines) {
|
|
@@ -408,14 +467,14 @@ function resolveWorkspaceGlob(cwd, pattern) {
|
|
|
408
467
|
function walkGlob(basePath, parts, currentPath) {
|
|
409
468
|
if (parts.length === 0) {
|
|
410
469
|
const fullPath = PATH4.join(basePath, currentPath);
|
|
411
|
-
if (
|
|
470
|
+
if (existsSync5(PATH4.join(fullPath, "package.json"))) {
|
|
412
471
|
return [currentPath];
|
|
413
472
|
}
|
|
414
473
|
return [];
|
|
415
474
|
}
|
|
416
475
|
const [part, ...rest] = parts;
|
|
417
476
|
const dirPath = PATH4.join(basePath, currentPath);
|
|
418
|
-
if (!
|
|
477
|
+
if (!existsSync5(dirPath) || !statSync(dirPath).isDirectory()) {
|
|
419
478
|
return [];
|
|
420
479
|
}
|
|
421
480
|
if (part === "*" || part === "**") {
|
|
@@ -443,25 +502,25 @@ function walkGlob(basePath, parts, currentPath) {
|
|
|
443
502
|
function convert({ target, verbose }) {
|
|
444
503
|
const validTargets = ["pnpm", "yarn"];
|
|
445
504
|
if (!validTargets.includes(target)) {
|
|
446
|
-
console.error(
|
|
505
|
+
console.error(chalk5.red(`Invalid target "${target}". Must be one of: ${validTargets.join(", ")}`));
|
|
447
506
|
return 1;
|
|
448
507
|
}
|
|
449
508
|
const cwd = process.cwd();
|
|
450
509
|
const currentPM = detectCurrentPM(cwd);
|
|
451
510
|
if (verbose) {
|
|
452
|
-
console.log(
|
|
453
|
-
console.log(
|
|
511
|
+
console.log(chalk5.gray(`Current package manager: ${currentPM}`));
|
|
512
|
+
console.log(chalk5.gray(`Target package manager: ${target}`));
|
|
454
513
|
}
|
|
455
514
|
if (currentPM === target) {
|
|
456
|
-
console.log(
|
|
515
|
+
console.log(chalk5.yellow(`Already using ${target}. Re-applying conversion to fix any incomplete steps...`));
|
|
457
516
|
}
|
|
458
517
|
if (currentPM === "unknown") {
|
|
459
|
-
console.error(
|
|
518
|
+
console.error(chalk5.red("Could not detect current package manager. No yarn.lock or pnpm-lock.yaml found."));
|
|
460
519
|
return 1;
|
|
461
520
|
}
|
|
462
521
|
const workspacePaths = findWorkspacePackagePaths(cwd);
|
|
463
522
|
if (verbose) {
|
|
464
|
-
console.log(
|
|
523
|
+
console.log(chalk5.gray(`Found ${workspacePaths.length} workspace packages`));
|
|
465
524
|
}
|
|
466
525
|
if (target === "pnpm") {
|
|
467
526
|
return convertToPnpm(cwd, workspacePaths);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/packman/convert.ts","../../../src/actions/packman/convertToPnpm.ts","../../../src/actions/packman/rewriteScripts.ts","../../../src/actions/packman/swapTsScriptsDependency.ts","../../../src/actions/packman/convertToYarn.ts","../../../src/xy/common/packmanCommand.ts"],"sourcesContent":["import {\n existsSync, readdirSync, readFileSync, statSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { convertToPnpm } from './convertToPnpm.ts'\nimport { convertToYarn } from './convertToYarn.ts'\n\ntype TargetPM = 'pnpm' | 'yarn'\n\nexport interface ConvertParams {\n target: string\n verbose?: boolean\n}\n\nfunction detectCurrentPM(cwd: string): 'pnpm' | 'yarn' | 'unknown' {\n if (existsSync(PATH.join(cwd, 'pnpm-lock.yaml')) || existsSync(PATH.join(cwd, 'pnpm-workspace.yaml'))) {\n return 'pnpm'\n }\n if (existsSync(PATH.join(cwd, 'yarn.lock')) || existsSync(PATH.join(cwd, '.yarnrc.yml'))) {\n return 'yarn'\n }\n return 'unknown'\n}\n\nfunction findWorkspacePackagePaths(cwd: string): string[] {\n // Read workspace patterns from package.json or pnpm-workspace.yaml\n const pkgPath = PATH.join(cwd, 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))\n\n let patterns: string[] = pkg.workspaces ?? []\n\n // Also try pnpm-workspace.yaml\n if (patterns.length === 0) {\n const wsPath = PATH.join(cwd, 'pnpm-workspace.yaml')\n if (existsSync(wsPath)) {\n const content = readFileSync(wsPath, 'utf8')\n const lines = content.split('\\n')\n let inPackages = false\n for (const line of lines) {\n if (line.trim() === 'packages:') {\n inPackages = true\n continue\n }\n if (inPackages && /^\\s+-\\s+/.test(line)) {\n const pattern = line.replace(/^\\s+-\\s+/, '').replaceAll(/['\"]/g, '').trim()\n if (pattern) patterns.push(pattern)\n } else if (inPackages && !/^\\s/.test(line) && line.trim()) {\n inPackages = false\n }\n }\n }\n }\n\n // Resolve glob patterns to actual package directories\n const dirs: string[] = []\n for (const pattern of patterns) {\n const resolved = resolveWorkspaceGlob(cwd, pattern)\n dirs.push(...resolved)\n }\n return dirs\n}\n\nfunction resolveWorkspaceGlob(cwd: string, pattern: string): string[] {\n // Simple glob resolution for workspace patterns like \"packages/*\" or \"packages/**/*\"\n const parts = pattern.split('/')\n return walkGlob(cwd, parts, '')\n}\n\nfunction walkGlob(basePath: string, parts: string[], currentPath: string): string[] {\n if (parts.length === 0) {\n // Check if this path has a package.json\n const fullPath = PATH.join(basePath, currentPath)\n if (existsSync(PATH.join(fullPath, 'package.json'))) {\n return [currentPath]\n }\n return []\n }\n\n const [part, ...rest] = parts\n const dirPath = PATH.join(basePath, currentPath)\n\n if (!existsSync(dirPath) || !statSync(dirPath).isDirectory()) {\n return []\n }\n\n if (part === '*' || part === '**') {\n const entries = readdirSync(dirPath, { withFileTypes: true })\n .filter(e => e.isDirectory() && !e.name.startsWith('.') && e.name !== 'node_modules' && e.name !== 'dist')\n const results: string[] = []\n\n if (part === '**') {\n // ** can match zero segments — try skipping it\n results.push(...walkGlob(basePath, rest, currentPath))\n }\n\n for (const entry of entries) {\n const subPath = currentPath ? `${currentPath}/${entry.name}` : entry.name\n if (part === '**') {\n // ** matches any depth — try both continuing with rest and recursing deeper\n results.push(\n ...walkGlob(basePath, rest, subPath),\n ...walkGlob(basePath, parts, subPath),\n )\n } else {\n results.push(...walkGlob(basePath, rest, subPath))\n }\n }\n return results\n }\n\n const subPath = currentPath ? `${currentPath}/${part}` : part\n return walkGlob(basePath, rest, subPath)\n}\n\nexport function convert({ target, verbose }: ConvertParams): number {\n const validTargets: TargetPM[] = ['pnpm', 'yarn']\n if (!validTargets.includes(target as TargetPM)) {\n console.error(chalk.red(`Invalid target \"${target}\". Must be one of: ${validTargets.join(', ')}`))\n return 1\n }\n\n const cwd = process.cwd()\n const currentPM = detectCurrentPM(cwd)\n\n if (verbose) {\n console.log(chalk.gray(`Current package manager: ${currentPM}`))\n console.log(chalk.gray(`Target package manager: ${target}`))\n }\n\n if (currentPM === target) {\n console.log(chalk.yellow(`Already using ${target}. Re-applying conversion to fix any incomplete steps...`))\n }\n\n if (currentPM === 'unknown') {\n console.error(chalk.red('Could not detect current package manager. No yarn.lock or pnpm-lock.yaml found.'))\n return 1\n }\n\n // Find all workspace package paths\n const workspacePaths = findWorkspacePackagePaths(cwd)\n if (verbose) {\n console.log(chalk.gray(`Found ${workspacePaths.length} workspace packages`))\n }\n\n if (target === 'pnpm') {\n return convertToPnpm(cwd, workspacePaths)\n }\n return convertToYarn(cwd, workspacePaths)\n}\n","import {\n existsSync, mkdirSync, readFileSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { rewriteScriptsInPackageJson } from './rewriteScripts.ts'\nimport { swapTsScriptsDependency } from './swapTsScriptsDependency.ts'\n\nconst PNPM_VERSION = '10.12.1'\n\nfunction createPnpmWorkspaceYaml(cwd: string, workspacePatterns: string[]): void {\n const lines = ['packages:']\n for (const pattern of workspacePatterns) {\n lines.push(` - '${pattern}'`)\n }\n writeFileSync(PATH.join(cwd, 'pnpm-workspace.yaml'), lines.join('\\n') + '\\n', 'utf8')\n console.log(chalk.green(' Created pnpm-workspace.yaml'))\n}\n\nfunction readPnpmWorkspacePatterns(cwd: string): string[] {\n const wsPath = PATH.join(cwd, 'pnpm-workspace.yaml')\n if (!existsSync(wsPath)) return []\n\n const content = readFileSync(wsPath, 'utf8')\n const patterns: string[] = []\n const lines = content.split('\\n')\n let inPackages = false\n for (const line of lines) {\n if (line.trim() === 'packages:') {\n inPackages = true\n continue\n }\n if (inPackages && /^\\s+-\\s+/.test(line)) {\n const pattern = line.replace(/^\\s+-\\s+/, '').replaceAll(/['\"]/g, '').trim()\n if (pattern) patterns.push(pattern)\n } else if (inPackages && !/^\\s/.test(line) && line.trim()) {\n inPackages = false\n }\n }\n return patterns\n}\n\nfunction updateRootPackageJson(cwd: string): string[] {\n const pkgPath = PATH.join(cwd, 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))\n\n // Save workspace patterns before removing — fall back to pnpm-workspace.yaml if already converted\n const workspacePatterns: string[] = pkg.workspaces ?? readPnpmWorkspacePatterns(cwd)\n\n // Remove yarn workspaces field (pnpm uses pnpm-workspace.yaml)\n delete pkg.workspaces\n\n // Update packageManager\n pkg.packageManager = `pnpm@${PNPM_VERSION}`\n\n // Rewrite scripts\n const updated = rewriteScriptsInPackageJson(pkg, 'yarn-to-pnpm')\n\n writeFileSync(pkgPath, JSON.stringify(updated, null, 2) + '\\n', 'utf8')\n console.log(chalk.green(' Updated root package.json'))\n\n return workspacePatterns\n}\n\nfunction updateGitignore(cwd: string): void {\n const gitignorePath = PATH.join(cwd, '.gitignore')\n if (!existsSync(gitignorePath)) return\n\n let content = readFileSync(gitignorePath, 'utf8')\n\n // Remove yarn-specific entries\n const yarnLines = [\n '.pnp.*',\n '.pnp',\n '.yarn/*',\n '!.yarn/patches',\n '!.yarn/plugins',\n '!.yarn/releases',\n '!.yarn/sdks',\n '!.yarn/versions',\n ]\n for (const line of yarnLines) {\n content = content.replaceAll(new RegExp(String.raw`^${line.replaceAll('.', String.raw`\\.`).replaceAll('*', String.raw`\\*`).replaceAll('!', String.raw`\\!`)}\\s*$`, 'gm'), '')\n }\n\n // Clean up multiple blank lines\n content = content.replaceAll(/\\n{3,}/g, '\\n\\n')\n\n writeFileSync(gitignorePath, content, 'utf8')\n console.log(chalk.green(' Updated .gitignore'))\n}\n\nfunction deleteYarnArtifacts(cwd: string): void {\n const yarnLock = PATH.join(cwd, 'yarn.lock')\n const yarnrc = PATH.join(cwd, '.yarnrc.yml')\n const yarnDir = PATH.join(cwd, '.yarn')\n\n if (existsSync(yarnLock)) {\n rmSync(yarnLock)\n console.log(chalk.gray(' Deleted yarn.lock'))\n }\n if (existsSync(yarnrc)) {\n rmSync(yarnrc)\n console.log(chalk.gray(' Deleted .yarnrc.yml'))\n }\n if (existsSync(yarnDir)) {\n rmSync(yarnDir, { force: true, recursive: true })\n console.log(chalk.gray(' Deleted .yarn/'))\n }\n}\n\nfunction createNpmrc(cwd: string): void {\n const npmrcPath = PATH.join(cwd, '.npmrc')\n if (existsSync(npmrcPath)) return\n\n mkdirSync(PATH.dirname(npmrcPath), { recursive: true })\n writeFileSync(npmrcPath, '', 'utf8')\n console.log(chalk.green(' Created .npmrc'))\n}\n\nexport function convertToPnpm(cwd: string, workspacePackageJsonPaths: string[]): number {\n console.log(chalk.blue('\\nConverting to pnpm...\\n'))\n\n // 1. Read workspace patterns and update root package.json\n const workspacePatterns = updateRootPackageJson(cwd)\n\n // 2. Create pnpm-workspace.yaml\n createPnpmWorkspaceYaml(cwd, workspacePatterns)\n\n // 3. Rewrite scripts in workspace package.json files\n for (const pkgPath of workspacePackageJsonPaths) {\n const fullPath = PATH.resolve(cwd, pkgPath, 'package.json')\n if (!existsSync(fullPath)) continue\n const pkg = JSON.parse(readFileSync(fullPath, 'utf8'))\n const updated = rewriteScriptsInPackageJson(pkg, 'yarn-to-pnpm')\n if (JSON.stringify(pkg) !== JSON.stringify(updated)) {\n writeFileSync(fullPath, JSON.stringify(updated, null, 2) + '\\n', 'utf8')\n }\n }\n console.log(chalk.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`))\n\n // 4. Update .gitignore\n updateGitignore(cwd)\n\n // 5. Create .npmrc\n createNpmrc(cwd)\n\n // 6. Swap ts-scripts devDependency (yarn3 → pnpm) in root and workspace packages\n swapTsScriptsDependency(cwd, workspacePackageJsonPaths, 'yarn-to-pnpm')\n\n // 7. Delete yarn artifacts\n deleteYarnArtifacts(cwd)\n\n console.log(chalk.blue('\\nConversion complete. Run `pnpm install` to generate pnpm-lock.yaml.\\n'))\n return 0\n}\n","type Direction = 'pnpm-to-yarn' | 'yarn-to-pnpm'\n\nfunction rewriteYarnToPnpm(script: string): string {\n let result = script\n // yarn workspace @pkg run script → pnpm --filter @pkg run script\n result = result.replaceAll(/\\byarn workspace (\\S+) run /g, 'pnpm --filter $1 run ')\n // yarn workspace @pkg package-X → pnpm --filter @pkg run package-X\n result = result.replaceAll(/\\byarn workspace (\\S+) (package-\\S+)/g, 'pnpm --filter $1 run $2')\n // yarn workspaces foreach [flags] run script → pnpm -r run script\n result = result.replaceAll(/\\byarn workspaces foreach\\s+(?:[^\\s]*\\s+)*run /g, 'pnpm -r run ')\n // yarn workspaces foreach --all version X --deferred → pnpm -r exec npm version X --no-git-tag-version\n result = result.replaceAll(/\\byarn workspaces foreach --all version (\\S+) --deferred/g, 'pnpm -r exec npm version $1 --no-git-tag-version')\n // yarn version apply --all → (remove, handled in bump)\n result = result.replaceAll(/\\byarn version apply --all/g, 'echo \"versions applied\"')\n // yarn xy → pnpm xy\n result = result.replaceAll(/\\byarn xy\\b/g, 'pnpm xy')\n // yarn add/remove/install/dedupe/outdated → pnpm equivalents\n result = result.replaceAll(/\\byarn add\\b/g, 'pnpm add')\n result = result.replaceAll(/\\byarn remove\\b/g, 'pnpm remove')\n result = result.replaceAll(/\\byarn install\\b/g, 'pnpm install')\n result = result.replaceAll(/\\byarn dedupe\\b/g, 'pnpm dedupe')\n result = result.replaceAll(/\\byarn outdated\\b/g, 'pnpm outdated')\n result = result.replaceAll(/\\byarn run\\b/g, 'pnpm run')\n // yarn rimraf → rimraf (no PM prefix)\n result = result.replaceAll(/\\byarn rimraf\\b/g, 'rimraf')\n // yarn npm → npm (direct)\n result = result.replaceAll(/\\byarn npm\\b/g, 'npm')\n // Remaining bare \"yarn\" at word boundary (but not in URLs or package names)\n result = result.replaceAll(/\\byarn\\b(?![@/.])/g, 'pnpm')\n return result\n}\n\nfunction rewritePnpmToYarn(script: string): string {\n let result = script\n // pnpm --filter @pkg run script → yarn workspace @pkg run script\n result = result.replaceAll(/\\bpnpm --filter (\\S+) run /g, 'yarn workspace $1 run ')\n // pnpm -r run script → yarn workspaces foreach -Apt run script\n result = result.replaceAll(/\\bpnpm -r run /g, 'yarn workspaces foreach -Apt run ')\n // pnpm -r exec npm version X → yarn workspaces foreach --all version X --deferred\n result = result.replaceAll(/\\bpnpm -r exec npm version (\\S+) --no-git-tag-version/g, 'yarn workspaces foreach --all version $1 --deferred')\n // pnpm xy → yarn xy\n result = result.replaceAll(/\\bpnpm xy\\b/g, 'yarn xy')\n // pnpm add/remove/install/dedupe/outdated → yarn equivalents\n result = result.replaceAll(/\\bpnpm add\\b/g, 'yarn add')\n result = result.replaceAll(/\\bpnpm remove\\b/g, 'yarn remove')\n result = result.replaceAll(/\\bpnpm install\\b/g, 'yarn install')\n result = result.replaceAll(/\\bpnpm dedupe\\b/g, 'yarn dedupe')\n result = result.replaceAll(/\\bpnpm outdated\\b/g, 'yarn outdated')\n result = result.replaceAll(/\\bpnpm run\\b/g, 'yarn run')\n // Remaining bare \"pnpm\"\n result = result.replaceAll(/\\bpnpm\\b(?![@/.])/g, 'yarn')\n return result\n}\n\nexport function rewriteScript(script: string, direction: Direction): string {\n return direction === 'yarn-to-pnpm'\n ? rewriteYarnToPnpm(script)\n : rewritePnpmToYarn(script)\n}\n\nexport function rewriteScriptsInPackageJson(\n pkg: Record<string, unknown>,\n direction: Direction,\n): Record<string, unknown> {\n const scripts = pkg.scripts as Record<string, string> | undefined\n if (!scripts) return pkg\n\n const rewritten: Record<string, string> = {}\n for (const [name, script] of Object.entries(scripts)) {\n rewritten[name] = rewriteScript(script, direction)\n }\n return { ...pkg, scripts: rewritten }\n}\n","import {\n existsSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\ntype Direction = 'pnpm-to-yarn' | 'yarn-to-pnpm'\n\nconst SWAP_MAP: Record<Direction, [from: string, to: string][]> = {\n 'yarn-to-pnpm': [\n ['@xylabs/ts-scripts-yarn3', '@xylabs/ts-scripts-pnpm'],\n ],\n 'pnpm-to-yarn': [\n ['@xylabs/ts-scripts-pnpm', '@xylabs/ts-scripts-yarn3'],\n ],\n}\n\nfunction swapInPackageJson(pkgPath: string, direction: Direction): boolean {\n if (!existsSync(pkgPath)) return false\n\n const raw = readFileSync(pkgPath, 'utf8')\n const pkg = JSON.parse(raw)\n let changed = false\n\n for (const depField of ['dependencies', 'devDependencies']) {\n const deps = pkg[depField] as Record<string, string> | undefined\n if (!deps) continue\n\n for (const [from, to] of SWAP_MAP[direction]) {\n if (deps[from]) {\n deps[to] = deps[from]\n delete deps[from]\n changed = true\n }\n }\n }\n\n if (changed) {\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\\n', 'utf8')\n }\n return changed\n}\n\nexport function swapTsScriptsDependency(cwd: string, workspacePackageJsonPaths: string[], direction: Direction): void {\n let count = 0\n\n // Swap in root package.json\n if (swapInPackageJson(PATH.join(cwd, 'package.json'), direction)) {\n count++\n }\n\n // Swap in workspace package.json files\n for (const pkgPath of workspacePackageJsonPaths) {\n const fullPath = PATH.resolve(cwd, pkgPath, 'package.json')\n if (swapInPackageJson(fullPath, direction)) {\n count++\n }\n }\n\n if (count > 0) {\n const target = direction === 'yarn-to-pnpm' ? '@xylabs/ts-scripts-pnpm' : '@xylabs/ts-scripts-yarn3'\n console.log(chalk.green(` Swapped ts-scripts dependency to ${target} in ${count} package(s)`))\n }\n}\n","import {\n existsSync, readFileSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { rewriteScriptsInPackageJson } from './rewriteScripts.ts'\nimport { swapTsScriptsDependency } from './swapTsScriptsDependency.ts'\n\nconst YARN_VERSION = '4.13.0'\n\nconst YARNRC_TEMPLATE = `compressionLevel: mixed\n\nenableGlobalCache: true\n\nenableInlineBuilds: true\n\nnmHoistingLimits: none\n\nnodeLinker: node-modules\n`\n\nconst YARN_GITIGNORE_ENTRIES = `\n.pnp.*\n.yarn/*\n!.yarn/patches\n!.yarn/plugins\n!.yarn/releases\n!.yarn/sdks\n!.yarn/versions\n`\n\nfunction readPnpmWorkspacePatterns(cwd: string): string[] {\n const wsPath = PATH.join(cwd, 'pnpm-workspace.yaml')\n if (!existsSync(wsPath)) return []\n\n const content = readFileSync(wsPath, 'utf8')\n const patterns: string[] = []\n // Simple YAML parsing for packages list\n const lines = content.split('\\n')\n let inPackages = false\n for (const line of lines) {\n if (line.trim() === 'packages:') {\n inPackages = true\n continue\n }\n if (inPackages && /^\\s+-\\s+/.test(line)) {\n const pattern = line.replace(/^\\s+-\\s+/, '').replaceAll(/['\"]/g, '').trim()\n if (pattern) patterns.push(pattern)\n } else if (inPackages && !/^\\s/.test(line) && line.trim()) {\n inPackages = false\n }\n }\n return patterns\n}\n\nfunction updateRootPackageJson(cwd: string, workspacePatterns: string[]): void {\n const pkgPath = PATH.join(cwd, 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))\n\n // Add workspaces field\n pkg.workspaces = workspacePatterns\n\n // Update packageManager\n pkg.packageManager = `yarn@${YARN_VERSION}`\n\n // Rewrite scripts\n const updated = rewriteScriptsInPackageJson(pkg, 'pnpm-to-yarn')\n\n writeFileSync(pkgPath, JSON.stringify(updated, null, 2) + '\\n', 'utf8')\n console.log(chalk.green(' Updated root package.json'))\n}\n\nfunction updateGitignore(cwd: string): void {\n const gitignorePath = PATH.join(cwd, '.gitignore')\n let content = existsSync(gitignorePath) ? readFileSync(gitignorePath, 'utf8') : ''\n\n // Add yarn entries if not already present\n if (!content.includes('.yarn/*')) {\n content = content.trimEnd() + '\\n' + YARN_GITIGNORE_ENTRIES\n }\n\n writeFileSync(gitignorePath, content, 'utf8')\n console.log(chalk.green(' Updated .gitignore'))\n}\n\nfunction deletePnpmArtifacts(cwd: string): void {\n const lockfile = PATH.join(cwd, 'pnpm-lock.yaml')\n const workspaceYaml = PATH.join(cwd, 'pnpm-workspace.yaml')\n const npmrc = PATH.join(cwd, '.npmrc')\n\n if (existsSync(lockfile)) {\n rmSync(lockfile)\n console.log(chalk.gray(' Deleted pnpm-lock.yaml'))\n }\n if (existsSync(workspaceYaml)) {\n rmSync(workspaceYaml)\n console.log(chalk.gray(' Deleted pnpm-workspace.yaml'))\n }\n if (existsSync(npmrc)) {\n const content = readFileSync(npmrc, 'utf8')\n // Only delete if it's empty or pnpm-specific\n if (content.trim() === '' || content.includes('shamefully-hoist') || content.includes('node-linker')) {\n rmSync(npmrc)\n console.log(chalk.gray(' Deleted .npmrc'))\n }\n }\n}\n\nfunction createYarnrc(cwd: string): void {\n const yarnrcPath = PATH.join(cwd, '.yarnrc.yml')\n if (existsSync(yarnrcPath)) return\n\n writeFileSync(yarnrcPath, YARNRC_TEMPLATE, 'utf8')\n console.log(chalk.green(' Created .yarnrc.yml'))\n}\n\nfunction readWorkspacePatternsFromPackageJson(cwd: string): string[] {\n const pkgPath = PATH.join(cwd, 'package.json')\n if (!existsSync(pkgPath)) return []\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))\n return pkg.workspaces ?? []\n}\n\nexport function convertToYarn(cwd: string, workspacePackageJsonPaths: string[]): number {\n console.log(chalk.blue('\\nConverting to yarn...\\n'))\n\n // 1. Read workspace patterns — try pnpm-workspace.yaml first, fall back to pkg.workspaces if already converted\n const workspacePatterns = readPnpmWorkspacePatterns(cwd)\n if (workspacePatterns.length === 0) {\n const fromPkg = readWorkspacePatternsFromPackageJson(cwd)\n if (fromPkg.length > 0) {\n workspacePatterns.push(...fromPkg)\n } else {\n console.warn(chalk.yellow(' No workspace patterns found'))\n }\n }\n\n // 2. Update root package.json\n updateRootPackageJson(cwd, workspacePatterns)\n\n // 3. Rewrite scripts in workspace package.json files\n for (const pkgPath of workspacePackageJsonPaths) {\n const fullPath = PATH.resolve(cwd, pkgPath, 'package.json')\n if (!existsSync(fullPath)) continue\n const pkg = JSON.parse(readFileSync(fullPath, 'utf8'))\n const updated = rewriteScriptsInPackageJson(pkg, 'pnpm-to-yarn')\n if (JSON.stringify(pkg) !== JSON.stringify(updated)) {\n writeFileSync(fullPath, JSON.stringify(updated, null, 2) + '\\n', 'utf8')\n }\n }\n console.log(chalk.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`))\n\n // 4. Update .gitignore\n updateGitignore(cwd)\n\n // 5. Create .yarnrc.yml\n createYarnrc(cwd)\n\n // 6. Swap ts-scripts devDependency (pnpm → yarn3) in root and workspace packages\n swapTsScriptsDependency(cwd, workspacePackageJsonPaths, 'pnpm-to-yarn')\n\n // 7. Delete pnpm artifacts\n deletePnpmArtifacts(cwd)\n\n console.log(chalk.blue('\\nConversion complete. Run `corepack enable yarn && yarn set version stable && yarn install` to finish setup.\\n'))\n return 0\n}\n","import type { CommandModule } from 'yargs'\n\nimport { convert } from '../../actions/index.ts'\n\nconst convertCommand: CommandModule = {\n command: 'convert <target>',\n describe: 'Convert repo to a different package manager (pnpm or yarn)',\n builder: (yargs) => {\n return yargs.positional('target', {\n choices: ['pnpm', 'yarn'] as const,\n describe: 'Target package manager',\n type: 'string',\n })\n },\n handler: (argv) => {\n process.exitCode = convert({\n target: argv.target as string,\n verbose: !!argv.verbose,\n })\n },\n}\n\nexport const packmanCommand: CommandModule = {\n builder: (yargs) => {\n return yargs\n .command(convertCommand)\n .demandCommand(1, 'Please specify a packman subcommand')\n },\n command: 'packman',\n describe: 'Package Manager - Conversion utilities',\n handler: () => {},\n}\n"],"mappings":"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","names":["existsSync","readFileSync","PATH","chalk","existsSync","readFileSync","writeFileSync","PATH","chalk","writeFileSync","PATH","chalk","existsSync","readFileSync","existsSync","readFileSync","rmSync","writeFileSync","PATH","chalk","readPnpmWorkspacePatterns","PATH","existsSync","readFileSync","updateRootPackageJson","writeFileSync","chalk","updateGitignore","rmSync","existsSync","PATH","readFileSync","subPath","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/packman/convert.ts","../../../src/actions/packman/convertToPnpm.ts","../../../src/actions/packman/rewriteScripts.ts","../../../src/actions/packman/rewriteSourceImports.ts","../../../src/actions/packman/swapTsScriptsDependency.ts","../../../src/actions/packman/convertToYarn.ts","../../../src/xy/common/packmanCommand.ts"],"sourcesContent":["import {\n existsSync, readdirSync, readFileSync, statSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { convertToPnpm } from './convertToPnpm.ts'\nimport { convertToYarn } from './convertToYarn.ts'\n\ntype TargetPM = 'pnpm' | 'yarn'\n\nexport interface ConvertParams {\n target: string\n verbose?: boolean\n}\n\nfunction detectCurrentPM(cwd: string): 'pnpm' | 'yarn' | 'unknown' {\n if (existsSync(PATH.join(cwd, 'pnpm-lock.yaml')) || existsSync(PATH.join(cwd, 'pnpm-workspace.yaml'))) {\n return 'pnpm'\n }\n if (existsSync(PATH.join(cwd, 'yarn.lock')) || existsSync(PATH.join(cwd, '.yarnrc.yml'))) {\n return 'yarn'\n }\n return 'unknown'\n}\n\nfunction findWorkspacePackagePaths(cwd: string): string[] {\n // Read workspace patterns from package.json or pnpm-workspace.yaml\n const pkgPath = PATH.join(cwd, 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))\n\n let patterns: string[] = pkg.workspaces ?? []\n\n // Also try pnpm-workspace.yaml\n if (patterns.length === 0) {\n const wsPath = PATH.join(cwd, 'pnpm-workspace.yaml')\n if (existsSync(wsPath)) {\n const content = readFileSync(wsPath, 'utf8')\n const lines = content.split('\\n')\n let inPackages = false\n for (const line of lines) {\n if (line.trim() === 'packages:') {\n inPackages = true\n continue\n }\n if (inPackages && /^\\s+-\\s+/.test(line)) {\n const pattern = line.replace(/^\\s+-\\s+/, '').replaceAll(/['\"]/g, '').trim()\n if (pattern) patterns.push(pattern)\n } else if (inPackages && !/^\\s/.test(line) && line.trim()) {\n inPackages = false\n }\n }\n }\n }\n\n // Resolve glob patterns to actual package directories\n const dirs: string[] = []\n for (const pattern of patterns) {\n const resolved = resolveWorkspaceGlob(cwd, pattern)\n dirs.push(...resolved)\n }\n return dirs\n}\n\nfunction resolveWorkspaceGlob(cwd: string, pattern: string): string[] {\n // Simple glob resolution for workspace patterns like \"packages/*\" or \"packages/**/*\"\n const parts = pattern.split('/')\n return walkGlob(cwd, parts, '')\n}\n\nfunction walkGlob(basePath: string, parts: string[], currentPath: string): string[] {\n if (parts.length === 0) {\n // Check if this path has a package.json\n const fullPath = PATH.join(basePath, currentPath)\n if (existsSync(PATH.join(fullPath, 'package.json'))) {\n return [currentPath]\n }\n return []\n }\n\n const [part, ...rest] = parts\n const dirPath = PATH.join(basePath, currentPath)\n\n if (!existsSync(dirPath) || !statSync(dirPath).isDirectory()) {\n return []\n }\n\n if (part === '*' || part === '**') {\n const entries = readdirSync(dirPath, { withFileTypes: true })\n .filter(e => e.isDirectory() && !e.name.startsWith('.') && e.name !== 'node_modules' && e.name !== 'dist')\n const results: string[] = []\n\n if (part === '**') {\n // ** can match zero segments — try skipping it\n results.push(...walkGlob(basePath, rest, currentPath))\n }\n\n for (const entry of entries) {\n const subPath = currentPath ? `${currentPath}/${entry.name}` : entry.name\n if (part === '**') {\n // ** matches any depth — try both continuing with rest and recursing deeper\n results.push(\n ...walkGlob(basePath, rest, subPath),\n ...walkGlob(basePath, parts, subPath),\n )\n } else {\n results.push(...walkGlob(basePath, rest, subPath))\n }\n }\n return results\n }\n\n const subPath = currentPath ? `${currentPath}/${part}` : part\n return walkGlob(basePath, rest, subPath)\n}\n\nexport function convert({ target, verbose }: ConvertParams): number {\n const validTargets: TargetPM[] = ['pnpm', 'yarn']\n if (!validTargets.includes(target as TargetPM)) {\n console.error(chalk.red(`Invalid target \"${target}\". Must be one of: ${validTargets.join(', ')}`))\n return 1\n }\n\n const cwd = process.cwd()\n const currentPM = detectCurrentPM(cwd)\n\n if (verbose) {\n console.log(chalk.gray(`Current package manager: ${currentPM}`))\n console.log(chalk.gray(`Target package manager: ${target}`))\n }\n\n if (currentPM === target) {\n console.log(chalk.yellow(`Already using ${target}. Re-applying conversion to fix any incomplete steps...`))\n }\n\n if (currentPM === 'unknown') {\n console.error(chalk.red('Could not detect current package manager. No yarn.lock or pnpm-lock.yaml found.'))\n return 1\n }\n\n // Find all workspace package paths\n const workspacePaths = findWorkspacePackagePaths(cwd)\n if (verbose) {\n console.log(chalk.gray(`Found ${workspacePaths.length} workspace packages`))\n }\n\n if (target === 'pnpm') {\n return convertToPnpm(cwd, workspacePaths)\n }\n return convertToYarn(cwd, workspacePaths)\n}\n","import {\n existsSync, mkdirSync, readFileSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { rewriteScriptsInPackageJson } from './rewriteScripts.ts'\nimport { rewriteSourceImports } from './rewriteSourceImports.ts'\nimport { swapTsScriptsDependency } from './swapTsScriptsDependency.ts'\n\nconst PNPM_VERSION = '10.12.1'\n\nfunction createPnpmWorkspaceYaml(cwd: string, workspacePatterns: string[]): void {\n const lines = ['packages:']\n for (const pattern of workspacePatterns) {\n lines.push(` - '${pattern}'`)\n }\n writeFileSync(PATH.join(cwd, 'pnpm-workspace.yaml'), lines.join('\\n') + '\\n', 'utf8')\n console.log(chalk.green(' Created pnpm-workspace.yaml'))\n}\n\nfunction readPnpmWorkspacePatterns(cwd: string): string[] {\n const wsPath = PATH.join(cwd, 'pnpm-workspace.yaml')\n if (!existsSync(wsPath)) return []\n\n const content = readFileSync(wsPath, 'utf8')\n const patterns: string[] = []\n const lines = content.split('\\n')\n let inPackages = false\n for (const line of lines) {\n if (line.trim() === 'packages:') {\n inPackages = true\n continue\n }\n if (inPackages && /^\\s+-\\s+/.test(line)) {\n const pattern = line.replace(/^\\s+-\\s+/, '').replaceAll(/['\"]/g, '').trim()\n if (pattern) patterns.push(pattern)\n } else if (inPackages && !/^\\s/.test(line) && line.trim()) {\n inPackages = false\n }\n }\n return patterns\n}\n\nfunction updateRootPackageJson(cwd: string): string[] {\n const pkgPath = PATH.join(cwd, 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))\n\n // Save workspace patterns before removing — fall back to pnpm-workspace.yaml if already converted\n const workspacePatterns: string[] = pkg.workspaces ?? readPnpmWorkspacePatterns(cwd)\n\n // Remove yarn workspaces field (pnpm uses pnpm-workspace.yaml)\n delete pkg.workspaces\n\n // Update packageManager\n pkg.packageManager = `pnpm@${PNPM_VERSION}`\n\n // Rewrite scripts\n const updated = rewriteScriptsInPackageJson(pkg, 'yarn-to-pnpm')\n\n writeFileSync(pkgPath, JSON.stringify(updated, null, 2) + '\\n', 'utf8')\n console.log(chalk.green(' Updated root package.json'))\n\n return workspacePatterns\n}\n\nfunction updateGitignore(cwd: string): void {\n const gitignorePath = PATH.join(cwd, '.gitignore')\n if (!existsSync(gitignorePath)) return\n\n let content = readFileSync(gitignorePath, 'utf8')\n\n // Remove yarn-specific entries\n const yarnLines = [\n '.pnp.*',\n '.pnp',\n '.yarn/*',\n '!.yarn/patches',\n '!.yarn/plugins',\n '!.yarn/releases',\n '!.yarn/sdks',\n '!.yarn/versions',\n ]\n for (const line of yarnLines) {\n content = content.replaceAll(new RegExp(String.raw`^${line.replaceAll('.', String.raw`\\.`).replaceAll('*', String.raw`\\*`).replaceAll('!', String.raw`\\!`)}\\s*$`, 'gm'), '')\n }\n\n // Clean up multiple blank lines\n content = content.replaceAll(/\\n{3,}/g, '\\n\\n')\n\n writeFileSync(gitignorePath, content, 'utf8')\n console.log(chalk.green(' Updated .gitignore'))\n}\n\nfunction deleteYarnArtifacts(cwd: string): void {\n const yarnLock = PATH.join(cwd, 'yarn.lock')\n const yarnrc = PATH.join(cwd, '.yarnrc.yml')\n const yarnDir = PATH.join(cwd, '.yarn')\n\n if (existsSync(yarnLock)) {\n rmSync(yarnLock)\n console.log(chalk.gray(' Deleted yarn.lock'))\n }\n if (existsSync(yarnrc)) {\n rmSync(yarnrc)\n console.log(chalk.gray(' Deleted .yarnrc.yml'))\n }\n if (existsSync(yarnDir)) {\n rmSync(yarnDir, { force: true, recursive: true })\n console.log(chalk.gray(' Deleted .yarn/'))\n }\n}\n\nfunction createNpmrc(cwd: string): void {\n const npmrcPath = PATH.join(cwd, '.npmrc')\n if (existsSync(npmrcPath)) return\n\n mkdirSync(PATH.dirname(npmrcPath), { recursive: true })\n writeFileSync(npmrcPath, '', 'utf8')\n console.log(chalk.green(' Created .npmrc'))\n}\n\nexport function convertToPnpm(cwd: string, workspacePackageJsonPaths: string[]): number {\n console.log(chalk.blue('\\nConverting to pnpm...\\n'))\n\n // 1. Read workspace patterns and update root package.json\n const workspacePatterns = updateRootPackageJson(cwd)\n\n // 2. Create pnpm-workspace.yaml\n createPnpmWorkspaceYaml(cwd, workspacePatterns)\n\n // 3. Rewrite scripts in workspace package.json files\n for (const pkgPath of workspacePackageJsonPaths) {\n const fullPath = PATH.resolve(cwd, pkgPath, 'package.json')\n if (!existsSync(fullPath)) continue\n const pkg = JSON.parse(readFileSync(fullPath, 'utf8'))\n const updated = rewriteScriptsInPackageJson(pkg, 'yarn-to-pnpm')\n if (JSON.stringify(pkg) !== JSON.stringify(updated)) {\n writeFileSync(fullPath, JSON.stringify(updated, null, 2) + '\\n', 'utf8')\n }\n }\n console.log(chalk.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`))\n\n // 4. Update .gitignore\n updateGitignore(cwd)\n\n // 5. Create .npmrc\n createNpmrc(cwd)\n\n // 6. Swap ts-scripts devDependency (yarn3 → pnpm) in root and workspace packages\n swapTsScriptsDependency(cwd, workspacePackageJsonPaths, 'yarn-to-pnpm')\n\n // 7. Rewrite ts-scripts imports in source files\n rewriteSourceImports(cwd, 'yarn-to-pnpm')\n\n // 8. Delete yarn artifacts\n deleteYarnArtifacts(cwd)\n\n console.log(chalk.blue('\\nConversion complete. Run `pnpm install` to generate pnpm-lock.yaml.\\n'))\n return 0\n}\n","type Direction = 'pnpm-to-yarn' | 'yarn-to-pnpm'\n\nfunction rewriteYarnToPnpm(script: string): string {\n let result = script\n // yarn workspace @pkg run script → pnpm --filter @pkg run script\n result = result.replaceAll(/\\byarn workspace (\\S+) run /g, 'pnpm --filter $1 run ')\n // yarn workspace @pkg package-X → pnpm --filter @pkg run package-X\n result = result.replaceAll(/\\byarn workspace (\\S+) (package-\\S+)/g, 'pnpm --filter $1 run $2')\n // yarn workspaces foreach [flags] run script → pnpm -r run script\n result = result.replaceAll(/\\byarn workspaces foreach\\s+(?:[^\\s]*\\s+)*run /g, 'pnpm -r run ')\n // yarn workspaces foreach --all version X --deferred → pnpm -r exec npm version X --no-git-tag-version\n result = result.replaceAll(/\\byarn workspaces foreach --all version (\\S+) --deferred/g, 'pnpm -r exec npm version $1 --no-git-tag-version')\n // yarn version apply --all → (remove, handled in bump)\n result = result.replaceAll(/\\byarn version apply --all/g, 'echo \"versions applied\"')\n // yarn xy → pnpm xy\n result = result.replaceAll(/\\byarn xy\\b/g, 'pnpm xy')\n // yarn add/remove/install/dedupe/outdated → pnpm equivalents\n result = result.replaceAll(/\\byarn add\\b/g, 'pnpm add')\n result = result.replaceAll(/\\byarn remove\\b/g, 'pnpm remove')\n result = result.replaceAll(/\\byarn install\\b/g, 'pnpm install')\n result = result.replaceAll(/\\byarn dedupe\\b/g, 'pnpm dedupe')\n result = result.replaceAll(/\\byarn outdated\\b/g, 'pnpm outdated')\n result = result.replaceAll(/\\byarn run\\b/g, 'pnpm run')\n // yarn rimraf → rimraf (no PM prefix)\n result = result.replaceAll(/\\byarn rimraf\\b/g, 'rimraf')\n // yarn npm → npm (direct)\n result = result.replaceAll(/\\byarn npm\\b/g, 'npm')\n // Remaining bare \"yarn\" at word boundary (but not in URLs or package names)\n result = result.replaceAll(/\\byarn\\b(?![@/.])/g, 'pnpm')\n return result\n}\n\nfunction rewritePnpmToYarn(script: string): string {\n let result = script\n // pnpm --filter @pkg run script → yarn workspace @pkg run script\n result = result.replaceAll(/\\bpnpm --filter (\\S+) run /g, 'yarn workspace $1 run ')\n // pnpm -r run script → yarn workspaces foreach -Apt run script\n result = result.replaceAll(/\\bpnpm -r run /g, 'yarn workspaces foreach -Apt run ')\n // pnpm -r exec npm version X → yarn workspaces foreach --all version X --deferred\n result = result.replaceAll(/\\bpnpm -r exec npm version (\\S+) --no-git-tag-version/g, 'yarn workspaces foreach --all version $1 --deferred')\n // pnpm xy → yarn xy\n result = result.replaceAll(/\\bpnpm xy\\b/g, 'yarn xy')\n // pnpm add/remove/install/dedupe/outdated → yarn equivalents\n result = result.replaceAll(/\\bpnpm add\\b/g, 'yarn add')\n result = result.replaceAll(/\\bpnpm remove\\b/g, 'yarn remove')\n result = result.replaceAll(/\\bpnpm install\\b/g, 'yarn install')\n result = result.replaceAll(/\\bpnpm dedupe\\b/g, 'yarn dedupe')\n result = result.replaceAll(/\\bpnpm outdated\\b/g, 'yarn outdated')\n result = result.replaceAll(/\\bpnpm run\\b/g, 'yarn run')\n // Remaining bare \"pnpm\"\n result = result.replaceAll(/\\bpnpm\\b(?![@/.])/g, 'yarn')\n return result\n}\n\nexport function rewriteScript(script: string, direction: Direction): string {\n return direction === 'yarn-to-pnpm'\n ? rewriteYarnToPnpm(script)\n : rewritePnpmToYarn(script)\n}\n\nexport function rewriteScriptsInPackageJson(\n pkg: Record<string, unknown>,\n direction: Direction,\n): Record<string, unknown> {\n const scripts = pkg.scripts as Record<string, string> | undefined\n if (!scripts) return pkg\n\n const rewritten: Record<string, string> = {}\n for (const [name, script] of Object.entries(scripts)) {\n rewritten[name] = rewriteScript(script, direction)\n }\n return { ...pkg, scripts: rewritten }\n}\n","import {\n existsSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\nimport { globSync } from 'glob'\n\ntype Direction = 'pnpm-to-yarn' | 'yarn-to-pnpm'\n\nconst IMPORT_SWAP_MAP: Record<Direction, [from: string, to: string][]> = {\n 'yarn-to-pnpm': [\n ['@xylabs/ts-scripts-yarn3', '@xylabs/ts-scripts-pnpm'],\n ['@xylabs/ts-scripts-react-yarn3', '@xylabs/ts-scripts-react-pnpm'],\n ],\n 'pnpm-to-yarn': [\n ['@xylabs/ts-scripts-pnpm', '@xylabs/ts-scripts-yarn3'],\n ['@xylabs/ts-scripts-react-pnpm', '@xylabs/ts-scripts-react-yarn3'],\n ],\n}\n\nconst SOURCE_GLOBS = [\n '**/*.ts',\n '**/*.tsx',\n '**/*.mts',\n '**/*.cts',\n '**/*.js',\n '**/*.mjs',\n]\n\nconst IGNORE_PATTERNS = [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n '**/.yarn/**',\n]\n\nexport function rewriteSourceImports(cwd: string, direction: Direction): void {\n const swaps = IMPORT_SWAP_MAP[direction]\n const files = globSync(SOURCE_GLOBS, {\n cwd,\n absolute: true,\n ignore: IGNORE_PATTERNS,\n })\n\n let count = 0\n for (const file of files) {\n if (!existsSync(file)) continue\n const original = readFileSync(file, 'utf8')\n let content = original\n for (const [from, to] of swaps) {\n content = content.replaceAll(from, to)\n }\n if (content !== original) {\n writeFileSync(file, content, 'utf8')\n count++\n }\n }\n\n if (count > 0) {\n console.log(chalk.green(` Rewrote ts-scripts imports in ${count} source file(s)`))\n }\n}\n","import {\n existsSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\ntype Direction = 'pnpm-to-yarn' | 'yarn-to-pnpm'\n\nconst SWAP_MAP: Record<Direction, [from: string, to: string][]> = {\n 'yarn-to-pnpm': [\n ['@xylabs/ts-scripts-yarn3', '@xylabs/ts-scripts-pnpm'],\n ],\n 'pnpm-to-yarn': [\n ['@xylabs/ts-scripts-pnpm', '@xylabs/ts-scripts-yarn3'],\n ],\n}\n\nfunction swapInPackageJson(pkgPath: string, direction: Direction): boolean {\n if (!existsSync(pkgPath)) return false\n\n const raw = readFileSync(pkgPath, 'utf8')\n const pkg = JSON.parse(raw)\n let changed = false\n\n for (const depField of ['dependencies', 'devDependencies']) {\n const deps = pkg[depField] as Record<string, string> | undefined\n if (!deps) continue\n\n for (const [from, to] of SWAP_MAP[direction]) {\n if (deps[from]) {\n deps[to] = deps[from]\n delete deps[from]\n changed = true\n }\n }\n }\n\n if (changed) {\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\\n', 'utf8')\n }\n return changed\n}\n\nexport function swapTsScriptsDependency(cwd: string, workspacePackageJsonPaths: string[], direction: Direction): void {\n let count = 0\n\n // Swap in root package.json\n if (swapInPackageJson(PATH.join(cwd, 'package.json'), direction)) {\n count++\n }\n\n // Swap in workspace package.json files\n for (const pkgPath of workspacePackageJsonPaths) {\n const fullPath = PATH.resolve(cwd, pkgPath, 'package.json')\n if (swapInPackageJson(fullPath, direction)) {\n count++\n }\n }\n\n if (count > 0) {\n const target = direction === 'yarn-to-pnpm' ? '@xylabs/ts-scripts-pnpm' : '@xylabs/ts-scripts-yarn3'\n console.log(chalk.green(` Swapped ts-scripts dependency to ${target} in ${count} package(s)`))\n }\n}\n","import {\n existsSync, readFileSync, rmSync, writeFileSync,\n} from 'node:fs'\nimport PATH from 'node:path'\n\nimport chalk from 'chalk'\n\nimport { rewriteScriptsInPackageJson } from './rewriteScripts.ts'\nimport { rewriteSourceImports } from './rewriteSourceImports.ts'\nimport { swapTsScriptsDependency } from './swapTsScriptsDependency.ts'\n\nconst YARN_VERSION = '4.13.0'\n\nconst YARNRC_TEMPLATE = `compressionLevel: mixed\n\nenableGlobalCache: true\n\nenableInlineBuilds: true\n\nnmHoistingLimits: none\n\nnodeLinker: node-modules\n`\n\nconst YARN_GITIGNORE_ENTRIES = `\n.pnp.*\n.yarn/*\n!.yarn/patches\n!.yarn/plugins\n!.yarn/releases\n!.yarn/sdks\n!.yarn/versions\n`\n\nfunction readPnpmWorkspacePatterns(cwd: string): string[] {\n const wsPath = PATH.join(cwd, 'pnpm-workspace.yaml')\n if (!existsSync(wsPath)) return []\n\n const content = readFileSync(wsPath, 'utf8')\n const patterns: string[] = []\n // Simple YAML parsing for packages list\n const lines = content.split('\\n')\n let inPackages = false\n for (const line of lines) {\n if (line.trim() === 'packages:') {\n inPackages = true\n continue\n }\n if (inPackages && /^\\s+-\\s+/.test(line)) {\n const pattern = line.replace(/^\\s+-\\s+/, '').replaceAll(/['\"]/g, '').trim()\n if (pattern) patterns.push(pattern)\n } else if (inPackages && !/^\\s/.test(line) && line.trim()) {\n inPackages = false\n }\n }\n return patterns\n}\n\nfunction updateRootPackageJson(cwd: string, workspacePatterns: string[]): void {\n const pkgPath = PATH.join(cwd, 'package.json')\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))\n\n // Add workspaces field\n pkg.workspaces = workspacePatterns\n\n // Update packageManager\n pkg.packageManager = `yarn@${YARN_VERSION}`\n\n // Rewrite scripts\n const updated = rewriteScriptsInPackageJson(pkg, 'pnpm-to-yarn')\n\n writeFileSync(pkgPath, JSON.stringify(updated, null, 2) + '\\n', 'utf8')\n console.log(chalk.green(' Updated root package.json'))\n}\n\nfunction updateGitignore(cwd: string): void {\n const gitignorePath = PATH.join(cwd, '.gitignore')\n let content = existsSync(gitignorePath) ? readFileSync(gitignorePath, 'utf8') : ''\n\n // Add yarn entries if not already present\n if (!content.includes('.yarn/*')) {\n content = content.trimEnd() + '\\n' + YARN_GITIGNORE_ENTRIES\n }\n\n writeFileSync(gitignorePath, content, 'utf8')\n console.log(chalk.green(' Updated .gitignore'))\n}\n\nfunction deletePnpmArtifacts(cwd: string): void {\n const lockfile = PATH.join(cwd, 'pnpm-lock.yaml')\n const workspaceYaml = PATH.join(cwd, 'pnpm-workspace.yaml')\n const npmrc = PATH.join(cwd, '.npmrc')\n\n if (existsSync(lockfile)) {\n rmSync(lockfile)\n console.log(chalk.gray(' Deleted pnpm-lock.yaml'))\n }\n if (existsSync(workspaceYaml)) {\n rmSync(workspaceYaml)\n console.log(chalk.gray(' Deleted pnpm-workspace.yaml'))\n }\n if (existsSync(npmrc)) {\n const content = readFileSync(npmrc, 'utf8')\n // Only delete if it's empty or pnpm-specific\n if (content.trim() === '' || content.includes('shamefully-hoist') || content.includes('node-linker')) {\n rmSync(npmrc)\n console.log(chalk.gray(' Deleted .npmrc'))\n }\n }\n}\n\nfunction createYarnrc(cwd: string): void {\n const yarnrcPath = PATH.join(cwd, '.yarnrc.yml')\n if (existsSync(yarnrcPath)) return\n\n writeFileSync(yarnrcPath, YARNRC_TEMPLATE, 'utf8')\n console.log(chalk.green(' Created .yarnrc.yml'))\n}\n\nfunction readWorkspacePatternsFromPackageJson(cwd: string): string[] {\n const pkgPath = PATH.join(cwd, 'package.json')\n if (!existsSync(pkgPath)) return []\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))\n return pkg.workspaces ?? []\n}\n\nexport function convertToYarn(cwd: string, workspacePackageJsonPaths: string[]): number {\n console.log(chalk.blue('\\nConverting to yarn...\\n'))\n\n // 1. Read workspace patterns — try pnpm-workspace.yaml first, fall back to pkg.workspaces if already converted\n const workspacePatterns = readPnpmWorkspacePatterns(cwd)\n if (workspacePatterns.length === 0) {\n const fromPkg = readWorkspacePatternsFromPackageJson(cwd)\n if (fromPkg.length > 0) {\n workspacePatterns.push(...fromPkg)\n } else {\n console.warn(chalk.yellow(' No workspace patterns found'))\n }\n }\n\n // 2. Update root package.json\n updateRootPackageJson(cwd, workspacePatterns)\n\n // 3. Rewrite scripts in workspace package.json files\n for (const pkgPath of workspacePackageJsonPaths) {\n const fullPath = PATH.resolve(cwd, pkgPath, 'package.json')\n if (!existsSync(fullPath)) continue\n const pkg = JSON.parse(readFileSync(fullPath, 'utf8'))\n const updated = rewriteScriptsInPackageJson(pkg, 'pnpm-to-yarn')\n if (JSON.stringify(pkg) !== JSON.stringify(updated)) {\n writeFileSync(fullPath, JSON.stringify(updated, null, 2) + '\\n', 'utf8')\n }\n }\n console.log(chalk.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`))\n\n // 4. Update .gitignore\n updateGitignore(cwd)\n\n // 5. Create .yarnrc.yml\n createYarnrc(cwd)\n\n // 6. Swap ts-scripts devDependency (pnpm → yarn3) in root and workspace packages\n swapTsScriptsDependency(cwd, workspacePackageJsonPaths, 'pnpm-to-yarn')\n\n // 7. Rewrite ts-scripts imports in source files\n rewriteSourceImports(cwd, 'pnpm-to-yarn')\n\n // 8. Delete pnpm artifacts\n deletePnpmArtifacts(cwd)\n\n console.log(chalk.blue('\\nConversion complete. Run `corepack enable yarn && yarn set version stable && yarn install` to finish setup.\\n'))\n return 0\n}\n","import type { CommandModule } from 'yargs'\n\nimport { convert } from '../../actions/index.ts'\n\nconst convertCommand: CommandModule = {\n command: 'convert <target>',\n describe: 'Convert repo to a different package manager (pnpm or yarn)',\n builder: (yargs) => {\n return yargs.positional('target', {\n choices: ['pnpm', 'yarn'] as const,\n describe: 'Target package manager',\n type: 'string',\n })\n },\n handler: (argv) => {\n process.exitCode = convert({\n target: argv.target as string,\n verbose: !!argv.verbose,\n })\n },\n}\n\nexport const packmanCommand: CommandModule = {\n builder: (yargs) => {\n return yargs\n .command(convertCommand)\n .demandCommand(1, 'Please specify a packman subcommand')\n },\n command: 'packman',\n describe: 'Package Manager - Conversion utilities',\n handler: () => {},\n}\n"],"mappings":"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","names":["existsSync","readFileSync","PATH","chalk","existsSync","readFileSync","writeFileSync","PATH","chalk","existsSync","readFileSync","writeFileSync","chalk","writeFileSync","PATH","chalk","existsSync","readFileSync","existsSync","readFileSync","rmSync","writeFileSync","PATH","chalk","readPnpmWorkspacePatterns","PATH","existsSync","readFileSync","updateRootPackageJson","writeFileSync","chalk","updateGitignore","rmSync","existsSync","PATH","readFileSync","subPath","chalk"]}
|