@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.
Files changed (49) hide show
  1. package/dist/actions/deplint/checkPackage/checkPackage.mjs +52 -5
  2. package/dist/actions/deplint/checkPackage/checkPackage.mjs.map +1 -1
  3. package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs +17 -2
  4. package/dist/actions/deplint/checkPackage/getUnlistedDependencies.mjs.map +1 -1
  5. package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs +15 -1
  6. package/dist/actions/deplint/checkPackage/getUnlistedDevDependencies.mjs.map +1 -1
  7. package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs +15 -1
  8. package/dist/actions/deplint/checkPackage/getUnusedDependencies.mjs.map +1 -1
  9. package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs +41 -1
  10. package/dist/actions/deplint/checkPackage/getUnusedDevDependencies.mjs.map +1 -1
  11. package/dist/actions/deplint/checkPackage/index.mjs +52 -5
  12. package/dist/actions/deplint/checkPackage/index.mjs.map +1 -1
  13. package/dist/actions/deplint/deplint.mjs +43 -5
  14. package/dist/actions/deplint/deplint.mjs.map +1 -1
  15. package/dist/actions/deplint/implicitDevDependencies.mjs +25 -0
  16. package/dist/actions/deplint/implicitDevDependencies.mjs.map +1 -1
  17. package/dist/actions/deplint/index.mjs +43 -5
  18. package/dist/actions/deplint/index.mjs.map +1 -1
  19. package/dist/actions/deplint/tsScriptsAliases.mjs +20 -0
  20. package/dist/actions/deplint/tsScriptsAliases.mjs.map +1 -0
  21. package/dist/actions/index.mjs +195 -98
  22. package/dist/actions/index.mjs.map +1 -1
  23. package/dist/actions/packman/convert.mjs +142 -83
  24. package/dist/actions/packman/convert.mjs.map +1 -1
  25. package/dist/actions/packman/convertToPnpm.mjs +94 -36
  26. package/dist/actions/packman/convertToPnpm.mjs.map +1 -1
  27. package/dist/actions/packman/convertToYarn.mjs +95 -37
  28. package/dist/actions/packman/convertToYarn.mjs.map +1 -1
  29. package/dist/actions/packman/index.mjs +142 -83
  30. package/dist/actions/packman/index.mjs.map +1 -1
  31. package/dist/actions/packman/rewriteSourceImports.mjs +60 -0
  32. package/dist/actions/packman/rewriteSourceImports.mjs.map +1 -0
  33. package/dist/bin/xy.mjs +212 -115
  34. package/dist/bin/xy.mjs.map +1 -1
  35. package/dist/index.mjs +214 -117
  36. package/dist/index.mjs.map +1 -1
  37. package/dist/xy/common/index.mjs +142 -83
  38. package/dist/xy/common/index.mjs.map +1 -1
  39. package/dist/xy/common/packmanCommand.mjs +142 -83
  40. package/dist/xy/common/packmanCommand.mjs.map +1 -1
  41. package/dist/xy/index.mjs +212 -115
  42. package/dist/xy/index.mjs.map +1 -1
  43. package/dist/xy/lint/deplintCommand.mjs +43 -5
  44. package/dist/xy/lint/deplintCommand.mjs.map +1 -1
  45. package/dist/xy/lint/index.mjs +43 -5
  46. package/dist/xy/lint/index.mjs.map +1 -1
  47. package/dist/xy/xy.mjs +212 -115
  48. package/dist/xy/xy.mjs.map +1 -1
  49. package/package.json +2 -2
@@ -1,13 +1,13 @@
1
1
  // src/actions/packman/convertToPnpm.ts
2
2
  import {
3
- existsSync as existsSync2,
3
+ existsSync as existsSync3,
4
4
  mkdirSync,
5
- readFileSync as readFileSync2,
5
+ readFileSync as readFileSync3,
6
6
  rmSync,
7
- writeFileSync as writeFileSync2
7
+ writeFileSync as writeFileSync3
8
8
  } from "fs";
9
9
  import PATH2 from "path";
10
- import chalk2 from "chalk";
10
+ import chalk3 from "chalk";
11
11
 
12
12
  // src/actions/packman/rewriteScripts.ts
13
13
  function rewriteYarnToPnpm(script) {
@@ -57,14 +57,71 @@ function rewriteScriptsInPackageJson(pkg, direction) {
57
57
  return { ...pkg, scripts: rewritten };
58
58
  }
59
59
 
60
- // src/actions/packman/swapTsScriptsDependency.ts
60
+ // src/actions/packman/rewriteSourceImports.ts
61
61
  import {
62
62
  existsSync,
63
63
  readFileSync,
64
64
  writeFileSync
65
65
  } from "fs";
66
- import PATH from "path";
67
66
  import chalk from "chalk";
67
+ import { globSync } from "glob";
68
+ var IMPORT_SWAP_MAP = {
69
+ "yarn-to-pnpm": [
70
+ ["@xylabs/ts-scripts-yarn3", "@xylabs/ts-scripts-pnpm"],
71
+ ["@xylabs/ts-scripts-react-yarn3", "@xylabs/ts-scripts-react-pnpm"]
72
+ ],
73
+ "pnpm-to-yarn": [
74
+ ["@xylabs/ts-scripts-pnpm", "@xylabs/ts-scripts-yarn3"],
75
+ ["@xylabs/ts-scripts-react-pnpm", "@xylabs/ts-scripts-react-yarn3"]
76
+ ]
77
+ };
78
+ var SOURCE_GLOBS = [
79
+ "**/*.ts",
80
+ "**/*.tsx",
81
+ "**/*.mts",
82
+ "**/*.cts",
83
+ "**/*.js",
84
+ "**/*.mjs"
85
+ ];
86
+ var IGNORE_PATTERNS = [
87
+ "**/node_modules/**",
88
+ "**/dist/**",
89
+ "**/build/**",
90
+ "**/.yarn/**"
91
+ ];
92
+ function rewriteSourceImports(cwd, direction) {
93
+ const swaps = IMPORT_SWAP_MAP[direction];
94
+ const files = globSync(SOURCE_GLOBS, {
95
+ cwd,
96
+ absolute: true,
97
+ ignore: IGNORE_PATTERNS
98
+ });
99
+ let count = 0;
100
+ for (const file of files) {
101
+ if (!existsSync(file)) continue;
102
+ const original = readFileSync(file, "utf8");
103
+ let content = original;
104
+ for (const [from, to] of swaps) {
105
+ content = content.replaceAll(from, to);
106
+ }
107
+ if (content !== original) {
108
+ writeFileSync(file, content, "utf8");
109
+ count++;
110
+ }
111
+ }
112
+ if (count > 0) {
113
+ console.log(chalk.green(` Rewrote ts-scripts imports in ${count} source file(s)`));
114
+ }
115
+ }
116
+
117
+ // src/actions/packman/swapTsScriptsDependency.ts
118
+ import {
119
+ existsSync as existsSync2,
120
+ readFileSync as readFileSync2,
121
+ writeFileSync as writeFileSync2
122
+ } from "fs";
123
+ import PATH from "path";
124
+ import chalk2 from "chalk";
68
125
  var SWAP_MAP = {
69
126
  "yarn-to-pnpm": [
70
127
  ["@xylabs/ts-scripts-yarn3", "@xylabs/ts-scripts-pnpm"]
@@ -74,8 +131,8 @@ var SWAP_MAP = {
74
131
  ]
75
132
  };
76
133
  function swapInPackageJson(pkgPath, direction) {
77
- if (!existsSync(pkgPath)) return false;
78
- const raw = readFileSync(pkgPath, "utf8");
134
+ if (!existsSync2(pkgPath)) return false;
135
+ const raw = readFileSync2(pkgPath, "utf8");
79
136
  const pkg = JSON.parse(raw);
80
137
  let changed = false;
81
138
  for (const depField of ["dependencies", "devDependencies"]) {
@@ -90,7 +147,7 @@ function swapInPackageJson(pkgPath, direction) {
90
147
  }
91
148
  }
92
149
  if (changed) {
93
- writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
150
+ writeFileSync2(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
94
151
  }
95
152
  return changed;
96
153
  }
@@ -107,7 +164,7 @@ function swapTsScriptsDependency(cwd, workspacePackageJsonPaths, direction) {
107
164
  }
108
165
  if (count > 0) {
109
166
  const target = direction === "yarn-to-pnpm" ? "@xylabs/ts-scripts-pnpm" : "@xylabs/ts-scripts-yarn3";
110
- console.log(chalk.green(` Swapped ts-scripts dependency to ${target} in ${count} package(s)`));
167
+ console.log(chalk2.green(` Swapped ts-scripts dependency to ${target} in ${count} package(s)`));
111
168
  }
112
169
  }
113
170
 
@@ -118,13 +175,13 @@ function createPnpmWorkspaceYaml(cwd, workspacePatterns) {
118
175
  for (const pattern of workspacePatterns) {
119
176
  lines.push(` - '${pattern}'`);
120
177
  }
121
- writeFileSync2(PATH2.join(cwd, "pnpm-workspace.yaml"), lines.join("\n") + "\n", "utf8");
122
- console.log(chalk2.green(" Created pnpm-workspace.yaml"));
178
+ writeFileSync3(PATH2.join(cwd, "pnpm-workspace.yaml"), lines.join("\n") + "\n", "utf8");
179
+ console.log(chalk3.green(" Created pnpm-workspace.yaml"));
123
180
  }
124
181
  function readPnpmWorkspacePatterns(cwd) {
125
182
  const wsPath = PATH2.join(cwd, "pnpm-workspace.yaml");
126
- if (!existsSync2(wsPath)) return [];
127
- const content = readFileSync2(wsPath, "utf8");
183
+ if (!existsSync3(wsPath)) return [];
184
+ const content = readFileSync3(wsPath, "utf8");
128
185
  const patterns = [];
129
186
  const lines = content.split("\n");
130
187
  let inPackages = false;
@@ -144,19 +201,19 @@ function readPnpmWorkspacePatterns(cwd) {
144
201
  }
145
202
  function updateRootPackageJson(cwd) {
146
203
  const pkgPath = PATH2.join(cwd, "package.json");
147
- const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
204
+ const pkg = JSON.parse(readFileSync3(pkgPath, "utf8"));
148
205
  const workspacePatterns = pkg.workspaces ?? readPnpmWorkspacePatterns(cwd);
149
206
  delete pkg.workspaces;
150
207
  pkg.packageManager = `pnpm@${PNPM_VERSION}`;
151
208
  const updated = rewriteScriptsInPackageJson(pkg, "yarn-to-pnpm");
152
- writeFileSync2(pkgPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
153
- console.log(chalk2.green(" Updated root package.json"));
209
+ writeFileSync3(pkgPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
210
+ console.log(chalk3.green(" Updated root package.json"));
154
211
  return workspacePatterns;
155
212
  }
156
213
  function updateGitignore(cwd) {
157
214
  const gitignorePath = PATH2.join(cwd, ".gitignore");
158
- if (!existsSync2(gitignorePath)) return;
159
- let content = readFileSync2(gitignorePath, "utf8");
215
+ if (!existsSync3(gitignorePath)) return;
216
+ let content = readFileSync3(gitignorePath, "utf8");
160
217
  const yarnLines = [
161
218
  ".pnp.*",
162
219
  ".pnp",
@@ -171,52 +228,53 @@ function updateGitignore(cwd) {
171
228
  content = content.replaceAll(new RegExp(String.raw`^${line.replaceAll(".", String.raw`\.`).replaceAll("*", String.raw`\*`).replaceAll("!", String.raw`\!`)}\s*$`, "gm"), "");
172
229
  }
173
230
  content = content.replaceAll(/\n{3,}/g, "\n\n");
174
- writeFileSync2(gitignorePath, content, "utf8");
175
- console.log(chalk2.green(" Updated .gitignore"));
231
+ writeFileSync3(gitignorePath, content, "utf8");
232
+ console.log(chalk3.green(" Updated .gitignore"));
176
233
  }
177
234
  function deleteYarnArtifacts(cwd) {
178
235
  const yarnLock = PATH2.join(cwd, "yarn.lock");
179
236
  const yarnrc = PATH2.join(cwd, ".yarnrc.yml");
180
237
  const yarnDir = PATH2.join(cwd, ".yarn");
181
- if (existsSync2(yarnLock)) {
238
+ if (existsSync3(yarnLock)) {
182
239
  rmSync(yarnLock);
183
- console.log(chalk2.gray(" Deleted yarn.lock"));
240
+ console.log(chalk3.gray(" Deleted yarn.lock"));
184
241
  }
185
- if (existsSync2(yarnrc)) {
242
+ if (existsSync3(yarnrc)) {
186
243
  rmSync(yarnrc);
187
- console.log(chalk2.gray(" Deleted .yarnrc.yml"));
244
+ console.log(chalk3.gray(" Deleted .yarnrc.yml"));
188
245
  }
189
- if (existsSync2(yarnDir)) {
246
+ if (existsSync3(yarnDir)) {
190
247
  rmSync(yarnDir, { force: true, recursive: true });
191
- console.log(chalk2.gray(" Deleted .yarn/"));
248
+ console.log(chalk3.gray(" Deleted .yarn/"));
192
249
  }
193
250
  }
194
251
  function createNpmrc(cwd) {
195
252
  const npmrcPath = PATH2.join(cwd, ".npmrc");
196
- if (existsSync2(npmrcPath)) return;
253
+ if (existsSync3(npmrcPath)) return;
197
254
  mkdirSync(PATH2.dirname(npmrcPath), { recursive: true });
198
- writeFileSync2(npmrcPath, "", "utf8");
199
- console.log(chalk2.green(" Created .npmrc"));
255
+ writeFileSync3(npmrcPath, "", "utf8");
256
+ console.log(chalk3.green(" Created .npmrc"));
200
257
  }
201
258
  function convertToPnpm(cwd, workspacePackageJsonPaths) {
202
- console.log(chalk2.blue("\nConverting to pnpm...\n"));
259
+ console.log(chalk3.blue("\nConverting to pnpm...\n"));
203
260
  const workspacePatterns = updateRootPackageJson(cwd);
204
261
  createPnpmWorkspaceYaml(cwd, workspacePatterns);
205
262
  for (const pkgPath of workspacePackageJsonPaths) {
206
263
  const fullPath = PATH2.resolve(cwd, pkgPath, "package.json");
207
- if (!existsSync2(fullPath)) continue;
208
- const pkg = JSON.parse(readFileSync2(fullPath, "utf8"));
264
+ if (!existsSync3(fullPath)) continue;
265
+ const pkg = JSON.parse(readFileSync3(fullPath, "utf8"));
209
266
  const updated = rewriteScriptsInPackageJson(pkg, "yarn-to-pnpm");
210
267
  if (JSON.stringify(pkg) !== JSON.stringify(updated)) {
211
- writeFileSync2(fullPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
268
+ writeFileSync3(fullPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
212
269
  }
213
270
  }
214
- console.log(chalk2.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`));
271
+ console.log(chalk3.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`));
215
272
  updateGitignore(cwd);
216
273
  createNpmrc(cwd);
217
274
  swapTsScriptsDependency(cwd, workspacePackageJsonPaths, "yarn-to-pnpm");
275
+ rewriteSourceImports(cwd, "yarn-to-pnpm");
218
276
  deleteYarnArtifacts(cwd);
219
- console.log(chalk2.blue("\nConversion complete. Run `pnpm install` to generate pnpm-lock.yaml.\n"));
277
+ console.log(chalk3.blue("\nConversion complete. Run `pnpm install` to generate pnpm-lock.yaml.\n"));
220
278
  return 0;
221
279
  }
222
280
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/packman/convertToPnpm.ts","../../../src/actions/packman/rewriteScripts.ts","../../../src/actions/packman/swapTsScriptsDependency.ts"],"sourcesContent":["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"],"mappings":"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","names":["existsSync","readFileSync","writeFileSync","PATH","chalk","writeFileSync","PATH","chalk","existsSync","readFileSync"]}
1
+ {"version":3,"sources":["../../../src/actions/packman/convertToPnpm.ts","../../../src/actions/packman/rewriteScripts.ts","../../../src/actions/packman/rewriteSourceImports.ts","../../../src/actions/packman/swapTsScriptsDependency.ts"],"sourcesContent":["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"],"mappings":"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","names":["existsSync","readFileSync","writeFileSync","PATH","chalk","existsSync","readFileSync","writeFileSync","chalk","writeFileSync","PATH","chalk","existsSync","readFileSync"]}
@@ -1,12 +1,12 @@
1
1
  // src/actions/packman/convertToYarn.ts
2
2
  import {
3
- existsSync as existsSync2,
4
- readFileSync as readFileSync2,
3
+ existsSync as existsSync3,
4
+ readFileSync as readFileSync3,
5
5
  rmSync,
6
- writeFileSync as writeFileSync2
6
+ writeFileSync as writeFileSync3
7
7
  } from "fs";
8
8
  import PATH2 from "path";
9
- import chalk2 from "chalk";
9
+ import chalk3 from "chalk";
10
10
 
11
11
  // src/actions/packman/rewriteScripts.ts
12
12
  function rewriteYarnToPnpm(script) {
@@ -56,14 +56,71 @@ function rewriteScriptsInPackageJson(pkg, direction) {
56
56
  return { ...pkg, scripts: rewritten };
57
57
  }
58
58
 
59
- // src/actions/packman/swapTsScriptsDependency.ts
59
+ // src/actions/packman/rewriteSourceImports.ts
60
60
  import {
61
61
  existsSync,
62
62
  readFileSync,
63
63
  writeFileSync
64
64
  } from "fs";
65
- import PATH from "path";
66
65
  import chalk from "chalk";
66
+ import { globSync } from "glob";
67
+ var IMPORT_SWAP_MAP = {
68
+ "yarn-to-pnpm": [
69
+ ["@xylabs/ts-scripts-yarn3", "@xylabs/ts-scripts-pnpm"],
70
+ ["@xylabs/ts-scripts-react-yarn3", "@xylabs/ts-scripts-react-pnpm"]
71
+ ],
72
+ "pnpm-to-yarn": [
73
+ ["@xylabs/ts-scripts-pnpm", "@xylabs/ts-scripts-yarn3"],
74
+ ["@xylabs/ts-scripts-react-pnpm", "@xylabs/ts-scripts-react-yarn3"]
75
+ ]
76
+ };
77
+ var SOURCE_GLOBS = [
78
+ "**/*.ts",
79
+ "**/*.tsx",
80
+ "**/*.mts",
81
+ "**/*.cts",
82
+ "**/*.js",
83
+ "**/*.mjs"
84
+ ];
85
+ var IGNORE_PATTERNS = [
86
+ "**/node_modules/**",
87
+ "**/dist/**",
88
+ "**/build/**",
89
+ "**/.yarn/**"
90
+ ];
91
+ function rewriteSourceImports(cwd, direction) {
92
+ const swaps = IMPORT_SWAP_MAP[direction];
93
+ const files = globSync(SOURCE_GLOBS, {
94
+ cwd,
95
+ absolute: true,
96
+ ignore: IGNORE_PATTERNS
97
+ });
98
+ let count = 0;
99
+ for (const file of files) {
100
+ if (!existsSync(file)) continue;
101
+ const original = readFileSync(file, "utf8");
102
+ let content = original;
103
+ for (const [from, to] of swaps) {
104
+ content = content.replaceAll(from, to);
105
+ }
106
+ if (content !== original) {
107
+ writeFileSync(file, content, "utf8");
108
+ count++;
109
+ }
110
+ }
111
+ if (count > 0) {
112
+ console.log(chalk.green(` Rewrote ts-scripts imports in ${count} source file(s)`));
113
+ }
114
+ }
115
+
116
+ // src/actions/packman/swapTsScriptsDependency.ts
117
+ import {
118
+ existsSync as existsSync2,
119
+ readFileSync as readFileSync2,
120
+ writeFileSync as writeFileSync2
121
+ } from "fs";
122
+ import PATH from "path";
123
+ import chalk2 from "chalk";
67
124
  var SWAP_MAP = {
68
125
  "yarn-to-pnpm": [
69
126
  ["@xylabs/ts-scripts-yarn3", "@xylabs/ts-scripts-pnpm"]
@@ -73,8 +130,8 @@ var SWAP_MAP = {
73
130
  ]
74
131
  };
75
132
  function swapInPackageJson(pkgPath, direction) {
76
- if (!existsSync(pkgPath)) return false;
77
- const raw = readFileSync(pkgPath, "utf8");
133
+ if (!existsSync2(pkgPath)) return false;
134
+ const raw = readFileSync2(pkgPath, "utf8");
78
135
  const pkg = JSON.parse(raw);
79
136
  let changed = false;
80
137
  for (const depField of ["dependencies", "devDependencies"]) {
@@ -89,7 +146,7 @@ function swapInPackageJson(pkgPath, direction) {
89
146
  }
90
147
  }
91
148
  if (changed) {
92
- writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
149
+ writeFileSync2(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
93
150
  }
94
151
  return changed;
95
152
  }
@@ -106,7 +163,7 @@ function swapTsScriptsDependency(cwd, workspacePackageJsonPaths, direction) {
106
163
  }
107
164
  if (count > 0) {
108
165
  const target = direction === "yarn-to-pnpm" ? "@xylabs/ts-scripts-pnpm" : "@xylabs/ts-scripts-yarn3";
109
- console.log(chalk.green(` Swapped ts-scripts dependency to ${target} in ${count} package(s)`));
166
+ console.log(chalk2.green(` Swapped ts-scripts dependency to ${target} in ${count} package(s)`));
110
167
  }
111
168
  }
112
169
 
@@ -133,8 +190,8 @@ var YARN_GITIGNORE_ENTRIES = `
133
190
  `;
134
191
  function readPnpmWorkspacePatterns(cwd) {
135
192
  const wsPath = PATH2.join(cwd, "pnpm-workspace.yaml");
136
- if (!existsSync2(wsPath)) return [];
137
- const content = readFileSync2(wsPath, "utf8");
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,81 +211,82 @@ function readPnpmWorkspacePatterns(cwd) {
154
211
  }
155
212
  function updateRootPackageJson(cwd, workspacePatterns) {
156
213
  const pkgPath = PATH2.join(cwd, "package.json");
157
- const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
214
+ const pkg = JSON.parse(readFileSync3(pkgPath, "utf8"));
158
215
  pkg.workspaces = workspacePatterns;
159
216
  pkg.packageManager = `yarn@${YARN_VERSION}`;
160
217
  const updated = rewriteScriptsInPackageJson(pkg, "pnpm-to-yarn");
161
- writeFileSync2(pkgPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
162
- console.log(chalk2.green(" Updated root package.json"));
218
+ writeFileSync3(pkgPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
219
+ console.log(chalk3.green(" Updated root package.json"));
163
220
  }
164
221
  function updateGitignore(cwd) {
165
222
  const gitignorePath = PATH2.join(cwd, ".gitignore");
166
- let content = existsSync2(gitignorePath) ? readFileSync2(gitignorePath, "utf8") : "";
223
+ let content = existsSync3(gitignorePath) ? readFileSync3(gitignorePath, "utf8") : "";
167
224
  if (!content.includes(".yarn/*")) {
168
225
  content = content.trimEnd() + "\n" + YARN_GITIGNORE_ENTRIES;
169
226
  }
170
- writeFileSync2(gitignorePath, content, "utf8");
171
- console.log(chalk2.green(" Updated .gitignore"));
227
+ writeFileSync3(gitignorePath, content, "utf8");
228
+ console.log(chalk3.green(" Updated .gitignore"));
172
229
  }
173
230
  function deletePnpmArtifacts(cwd) {
174
231
  const lockfile = PATH2.join(cwd, "pnpm-lock.yaml");
175
232
  const workspaceYaml = PATH2.join(cwd, "pnpm-workspace.yaml");
176
233
  const npmrc = PATH2.join(cwd, ".npmrc");
177
- if (existsSync2(lockfile)) {
234
+ if (existsSync3(lockfile)) {
178
235
  rmSync(lockfile);
179
- console.log(chalk2.gray(" Deleted pnpm-lock.yaml"));
236
+ console.log(chalk3.gray(" Deleted pnpm-lock.yaml"));
180
237
  }
181
- if (existsSync2(workspaceYaml)) {
238
+ if (existsSync3(workspaceYaml)) {
182
239
  rmSync(workspaceYaml);
183
- console.log(chalk2.gray(" Deleted pnpm-workspace.yaml"));
240
+ console.log(chalk3.gray(" Deleted pnpm-workspace.yaml"));
184
241
  }
185
- if (existsSync2(npmrc)) {
186
- const content = readFileSync2(npmrc, "utf8");
242
+ if (existsSync3(npmrc)) {
243
+ const content = readFileSync3(npmrc, "utf8");
187
244
  if (content.trim() === "" || content.includes("shamefully-hoist") || content.includes("node-linker")) {
188
245
  rmSync(npmrc);
189
- console.log(chalk2.gray(" Deleted .npmrc"));
246
+ console.log(chalk3.gray(" Deleted .npmrc"));
190
247
  }
191
248
  }
192
249
  }
193
250
  function createYarnrc(cwd) {
194
251
  const yarnrcPath = PATH2.join(cwd, ".yarnrc.yml");
195
- if (existsSync2(yarnrcPath)) return;
196
- writeFileSync2(yarnrcPath, YARNRC_TEMPLATE, "utf8");
197
- console.log(chalk2.green(" Created .yarnrc.yml"));
252
+ if (existsSync3(yarnrcPath)) return;
253
+ writeFileSync3(yarnrcPath, YARNRC_TEMPLATE, "utf8");
254
+ console.log(chalk3.green(" Created .yarnrc.yml"));
198
255
  }
199
256
  function readWorkspacePatternsFromPackageJson(cwd) {
200
257
  const pkgPath = PATH2.join(cwd, "package.json");
201
- if (!existsSync2(pkgPath)) return [];
202
- const pkg = JSON.parse(readFileSync2(pkgPath, "utf8"));
258
+ if (!existsSync3(pkgPath)) return [];
259
+ const pkg = JSON.parse(readFileSync3(pkgPath, "utf8"));
203
260
  return pkg.workspaces ?? [];
204
261
  }
205
262
  function convertToYarn(cwd, workspacePackageJsonPaths) {
206
- console.log(chalk2.blue("\nConverting to yarn...\n"));
263
+ console.log(chalk3.blue("\nConverting to yarn...\n"));
207
264
  const workspacePatterns = readPnpmWorkspacePatterns(cwd);
208
265
  if (workspacePatterns.length === 0) {
209
266
  const fromPkg = readWorkspacePatternsFromPackageJson(cwd);
210
267
  if (fromPkg.length > 0) {
211
268
  workspacePatterns.push(...fromPkg);
212
269
  } else {
213
- console.warn(chalk2.yellow(" No workspace patterns found"));
270
+ console.warn(chalk3.yellow(" No workspace patterns found"));
214
271
  }
215
272
  }
216
273
  updateRootPackageJson(cwd, workspacePatterns);
217
274
  for (const pkgPath of workspacePackageJsonPaths) {
218
275
  const fullPath = PATH2.resolve(cwd, pkgPath, "package.json");
219
- if (!existsSync2(fullPath)) continue;
220
- const pkg = JSON.parse(readFileSync2(fullPath, "utf8"));
276
+ if (!existsSync3(fullPath)) continue;
277
+ const pkg = JSON.parse(readFileSync3(fullPath, "utf8"));
221
278
  const updated = rewriteScriptsInPackageJson(pkg, "pnpm-to-yarn");
222
279
  if (JSON.stringify(pkg) !== JSON.stringify(updated)) {
223
- writeFileSync2(fullPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
280
+ writeFileSync3(fullPath, JSON.stringify(updated, null, 2) + "\n", "utf8");
224
281
  }
225
282
  }
226
- console.log(chalk2.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`));
283
+ console.log(chalk3.green(` Rewrote scripts in ${workspacePackageJsonPaths.length} workspace package(s)`));
227
284
  updateGitignore(cwd);
228
285
  createYarnrc(cwd);
229
286
  swapTsScriptsDependency(cwd, workspacePackageJsonPaths, "pnpm-to-yarn");
287
+ rewriteSourceImports(cwd, "pnpm-to-yarn");
230
288
  deletePnpmArtifacts(cwd);
231
- console.log(chalk2.blue("\nConversion complete. Run `corepack enable yarn && yarn set version stable && yarn install` to finish setup.\n"));
289
+ console.log(chalk3.blue("\nConversion complete. Run `corepack enable yarn && yarn set version stable && yarn install` to finish setup.\n"));
232
290
  return 0;
233
291
  }
234
292
  export {