@xylabs/ts-scripts-common 7.5.1 → 7.5.3

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