@git.zone/cli 2.19.1 → 2.19.2
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_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/mod_tools/classes.packagemanager.d.ts +36 -1
- package/dist_ts/mod_tools/classes.packagemanager.js +541 -34
- package/dist_ts/mod_tools/index.js +128 -26
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/mod_tools/classes.packagemanager.ts +724 -34
- package/ts/mod_tools/index.ts +225 -45
- package/ts/plugins.ts +2 -0
|
@@ -3,14 +3,9 @@ export class PackageManagerUtil {
|
|
|
3
3
|
shell = new plugins.smartshell.Smartshell({
|
|
4
4
|
executor: "bash",
|
|
5
5
|
});
|
|
6
|
+
pnpmCommand;
|
|
6
7
|
async detectPnpm() {
|
|
7
|
-
|
|
8
|
-
const result = await this.shell.execSilent("pnpm --version 2>/dev/null");
|
|
9
|
-
return result.exitCode === 0 && Boolean(result.stdout.trim());
|
|
10
|
-
}
|
|
11
|
-
catch {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
8
|
+
return Boolean(await this.getPnpmCommand());
|
|
14
9
|
}
|
|
15
10
|
async getPnpmVersionInfo() {
|
|
16
11
|
const available = await this.detectPnpm();
|
|
@@ -23,43 +18,237 @@ export class PackageManagerUtil {
|
|
|
23
18
|
};
|
|
24
19
|
}
|
|
25
20
|
const currentVersion = await this.getCurrentPnpmVersion();
|
|
26
|
-
const latestVersion = await this.getLatestVersion("pnpm", [
|
|
21
|
+
const latestVersion = await this.getLatestVersion("pnpm", [
|
|
22
|
+
"https://registry.npmjs.org",
|
|
23
|
+
]);
|
|
27
24
|
return {
|
|
28
25
|
available: true,
|
|
29
26
|
currentVersion,
|
|
30
27
|
latestVersion,
|
|
31
|
-
needsUpdate: latestVersion
|
|
28
|
+
needsUpdate: latestVersion
|
|
29
|
+
? this.isNewerVersion(currentVersion, latestVersion)
|
|
30
|
+
: false,
|
|
32
31
|
};
|
|
33
32
|
}
|
|
34
33
|
async getInstalledPackages() {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
const packageMap = new Map();
|
|
35
|
+
const currentPackages = await this.getCurrentInstalledPackages();
|
|
36
|
+
for (const packageInfo of currentPackages) {
|
|
37
|
+
packageMap.set(packageInfo.name, packageInfo);
|
|
38
|
+
}
|
|
39
|
+
const legacyRoots = await this.getLegacyGlobalRoots();
|
|
40
|
+
for (const legacyRoot of legacyRoots) {
|
|
41
|
+
for (const packageInfo of legacyRoot.packages) {
|
|
42
|
+
if (!packageMap.has(packageInfo.name)) {
|
|
43
|
+
packageMap.set(packageInfo.name, packageInfo);
|
|
44
|
+
}
|
|
41
45
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
}
|
|
47
|
+
return Array.from(packageMap.values()).sort((packageA, packageB) => packageA.name.localeCompare(packageB.name));
|
|
48
|
+
}
|
|
49
|
+
async getLegacyGlobalRoots() {
|
|
50
|
+
const currentGlobalDir = await this.getCurrentGlobalDir();
|
|
51
|
+
const baseDirs = new Set();
|
|
52
|
+
const pnpmHome = process.env.PNPM_HOME;
|
|
53
|
+
if (pnpmHome) {
|
|
54
|
+
baseDirs.add(plugins.path.join(pnpmHome, "global"));
|
|
55
|
+
}
|
|
56
|
+
if (currentGlobalDir) {
|
|
57
|
+
baseDirs.add(plugins.path.dirname(currentGlobalDir));
|
|
58
|
+
}
|
|
59
|
+
const roots = [];
|
|
60
|
+
for (const baseDir of baseDirs) {
|
|
61
|
+
try {
|
|
62
|
+
const entries = await plugins.fs.readdir(baseDir, {
|
|
63
|
+
withFileTypes: true,
|
|
64
|
+
});
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (!entry.isDirectory()) {
|
|
48
67
|
continue;
|
|
49
68
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
69
|
+
const globalDir = normalizePath(plugins.path.join(baseDir, entry.name));
|
|
70
|
+
if (currentGlobalDir && pathsAreEqual(globalDir, currentGlobalDir)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const rootInfo = await this.inspectGlobalRoot(globalDir, false);
|
|
74
|
+
if (rootInfo.packages.length > 0) {
|
|
75
|
+
roots.push(rootInfo);
|
|
76
|
+
}
|
|
54
77
|
}
|
|
55
78
|
}
|
|
79
|
+
catch {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
56
82
|
}
|
|
57
|
-
|
|
58
|
-
|
|
83
|
+
return roots;
|
|
84
|
+
}
|
|
85
|
+
async cleanupLegacyGlobalRoots() {
|
|
86
|
+
const legacyRoots = await this.getLegacyGlobalRoots();
|
|
87
|
+
if (legacyRoots.length === 0) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
const currentPackageNames = new Set((await this.getCurrentInstalledPackages()).map((packageInfo) => packageInfo.name));
|
|
91
|
+
const cleanupResults = [];
|
|
92
|
+
for (const legacyRoot of legacyRoots) {
|
|
93
|
+
const missingPackageNames = legacyRoot.packages
|
|
94
|
+
.map((packageInfo) => packageInfo.name)
|
|
95
|
+
.filter((packageName) => !currentPackageNames.has(packageName));
|
|
96
|
+
if (missingPackageNames.length > 0) {
|
|
97
|
+
cleanupResults.push({
|
|
98
|
+
globalDir: legacyRoot.globalDir,
|
|
99
|
+
deleted: false,
|
|
100
|
+
reason: `kept because ${missingPackageNames.join(", ")} are not installed in the current pnpm global root`,
|
|
101
|
+
});
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
if (!legacyRoot.safeToDelete) {
|
|
105
|
+
cleanupResults.push({
|
|
106
|
+
globalDir: legacyRoot.globalDir,
|
|
107
|
+
deleted: false,
|
|
108
|
+
reason: legacyRoot.unmanagedPackageNames.length > 0
|
|
109
|
+
? `kept because it also contains ${legacyRoot.unmanagedPackageNames.join(", ")}`
|
|
110
|
+
: "kept because it is not a managed @git.zone-only global root",
|
|
111
|
+
});
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const blockingShims = await this.getShimReferences(legacyRoot.globalDir);
|
|
115
|
+
if (blockingShims === null) {
|
|
116
|
+
cleanupResults.push({
|
|
117
|
+
globalDir: legacyRoot.globalDir,
|
|
118
|
+
deleted: false,
|
|
119
|
+
reason: "kept because PNPM_HOME is not set, so command shims could not be verified",
|
|
120
|
+
});
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (blockingShims.length > 0) {
|
|
124
|
+
cleanupResults.push({
|
|
125
|
+
globalDir: legacyRoot.globalDir,
|
|
126
|
+
deleted: false,
|
|
127
|
+
reason: `kept because command shims still reference it: ${blockingShims.join(", ")}`,
|
|
128
|
+
});
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
await plugins.fs.rm(legacyRoot.globalDir, {
|
|
133
|
+
recursive: true,
|
|
134
|
+
force: true,
|
|
135
|
+
});
|
|
136
|
+
cleanupResults.push({
|
|
137
|
+
globalDir: legacyRoot.globalDir,
|
|
138
|
+
deleted: true,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
cleanupResults.push({
|
|
143
|
+
globalDir: legacyRoot.globalDir,
|
|
144
|
+
deleted: false,
|
|
145
|
+
reason: `delete failed: ${error.message}`,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return cleanupResults;
|
|
150
|
+
}
|
|
151
|
+
async syncCurrentGlobalShims() {
|
|
152
|
+
const pnpmShimDirs = await this.getPnpmShimDirs();
|
|
153
|
+
if (!pnpmShimDirs) {
|
|
154
|
+
return [
|
|
155
|
+
{
|
|
156
|
+
name: "PNPM_HOME",
|
|
157
|
+
action: "skipped",
|
|
158
|
+
reason: "PNPM_HOME is not set",
|
|
159
|
+
},
|
|
160
|
+
];
|
|
161
|
+
}
|
|
162
|
+
const results = [];
|
|
163
|
+
const currentBinNames = new Set();
|
|
164
|
+
const currentPackages = await this.getCurrentInstalledPackages();
|
|
165
|
+
for (const packageInfo of currentPackages) {
|
|
166
|
+
if (!packageInfo.packagePath) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
const packageJson = await readJson(plugins.path.join(packageInfo.packagePath, "package.json"));
|
|
170
|
+
const binNames = getPackageBinNames(packageInfo.name, packageJson);
|
|
171
|
+
const nodeModulesDir = getNodeModulesDir(packageInfo.packagePath, packageInfo.name);
|
|
172
|
+
for (const binName of binNames) {
|
|
173
|
+
currentBinNames.add(binName);
|
|
174
|
+
const sourceShim = plugins.path.join(nodeModulesDir, ".bin", binName);
|
|
175
|
+
for (const pnpmShimDir of pnpmShimDirs) {
|
|
176
|
+
const destinationShim = plugins.path.join(pnpmShimDir, binName);
|
|
177
|
+
try {
|
|
178
|
+
const sourceContent = await plugins.fs.readFile(sourceShim, "utf8");
|
|
179
|
+
const sourceStat = await plugins.fs.stat(sourceShim);
|
|
180
|
+
await plugins.fs.writeFile(destinationShim, rewriteShimForPnpmHome(sourceContent), "utf8");
|
|
181
|
+
await plugins.fs.chmod(destinationShim, sourceStat.mode);
|
|
182
|
+
results.push({
|
|
183
|
+
name: formatShimName(pnpmShimDir, binName),
|
|
184
|
+
action: "updated",
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
results.push({
|
|
189
|
+
name: formatShimName(pnpmShimDir, binName),
|
|
190
|
+
action: "skipped",
|
|
191
|
+
reason: error.message,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const legacyRoots = await this.getLegacyGlobalRoots();
|
|
198
|
+
const legacyGlobalDirs = legacyRoots.map((legacyRoot) => legacyRoot.globalDir);
|
|
199
|
+
if (legacyGlobalDirs.length === 0) {
|
|
200
|
+
return results;
|
|
201
|
+
}
|
|
202
|
+
for (const pnpmShimDir of pnpmShimDirs) {
|
|
203
|
+
try {
|
|
204
|
+
const entries = await plugins.fs.readdir(pnpmShimDir, {
|
|
205
|
+
withFileTypes: true,
|
|
206
|
+
});
|
|
207
|
+
for (const entry of entries) {
|
|
208
|
+
if (!entry.isFile() || currentBinNames.has(entry.name)) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const filePath = plugins.path.join(pnpmShimDir, entry.name);
|
|
212
|
+
let content = "";
|
|
213
|
+
try {
|
|
214
|
+
content = await plugins.fs.readFile(filePath, "utf8");
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (!legacyGlobalDirs.some((legacyGlobalDir) => content.includes(legacyGlobalDir))) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
try {
|
|
223
|
+
await plugins.fs.rm(filePath, { force: true });
|
|
224
|
+
results.push({
|
|
225
|
+
name: formatShimName(pnpmShimDir, entry.name),
|
|
226
|
+
action: "removed",
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
results.push({
|
|
231
|
+
name: formatShimName(pnpmShimDir, entry.name),
|
|
232
|
+
action: "skipped",
|
|
233
|
+
reason: error.message,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
results.push({
|
|
240
|
+
name: pnpmShimDir,
|
|
241
|
+
action: "skipped",
|
|
242
|
+
reason: error.message,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
59
245
|
}
|
|
60
|
-
return
|
|
246
|
+
return results;
|
|
61
247
|
}
|
|
62
|
-
async getLatestVersion(packageName, registries = [
|
|
248
|
+
async getLatestVersion(packageName, registries = [
|
|
249
|
+
"https://verdaccio.lossless.digital",
|
|
250
|
+
"https://registry.npmjs.org",
|
|
251
|
+
]) {
|
|
63
252
|
for (const registry of registries) {
|
|
64
253
|
const latest = await this.getLatestVersionFromRegistry(registry, packageName);
|
|
65
254
|
if (latest) {
|
|
@@ -68,17 +257,38 @@ export class PackageManagerUtil {
|
|
|
68
257
|
}
|
|
69
258
|
return null;
|
|
70
259
|
}
|
|
71
|
-
async installLatest(packageName) {
|
|
72
|
-
const
|
|
260
|
+
async installLatest(packageName, version = "latest") {
|
|
261
|
+
const pnpmCommand = await this.getPnpmCommand();
|
|
262
|
+
if (!pnpmCommand) {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
const packageSpecifier = `${packageName}@${version}`;
|
|
73
266
|
console.log(` Installing ${packageSpecifier} via pnpm...`);
|
|
74
267
|
try {
|
|
75
|
-
const result = await this.shell.exec(
|
|
268
|
+
const result = await this.shell.exec(`${pnpmCommand} add -g ${shellQuote(packageSpecifier)}`);
|
|
76
269
|
return result.exitCode === 0;
|
|
77
270
|
}
|
|
78
271
|
catch {
|
|
79
272
|
return false;
|
|
80
273
|
}
|
|
81
274
|
}
|
|
275
|
+
async updatePnpm(targetVersion) {
|
|
276
|
+
const pnpmCommand = await this.getPnpmCommand();
|
|
277
|
+
if (!pnpmCommand) {
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
const neutralDir = process.env.PNPM_HOME || "/tmp";
|
|
281
|
+
try {
|
|
282
|
+
const result = await this.shell.exec(`${pnpmCommand} --dir ${shellQuote(neutralDir)} self-update ${shellQuote(targetVersion)}`);
|
|
283
|
+
this.pnpmCommand = undefined;
|
|
284
|
+
const currentVersion = await this.getCurrentPnpmVersion();
|
|
285
|
+
return (result.exitCode === 0 &&
|
|
286
|
+
!this.isNewerVersion(currentVersion, targetVersion));
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
82
292
|
isNewerVersion(current, latest) {
|
|
83
293
|
const currentParts = normalizeSemver(current);
|
|
84
294
|
const latestParts = normalizeSemver(latest);
|
|
@@ -94,7 +304,10 @@ export class PackageManagerUtil {
|
|
|
94
304
|
}
|
|
95
305
|
async getCurrentPnpmVersion() {
|
|
96
306
|
try {
|
|
97
|
-
const result = await this.
|
|
307
|
+
const result = await this.execPnpmSilent("--version 2>/dev/null");
|
|
308
|
+
if (!result) {
|
|
309
|
+
return "unknown";
|
|
310
|
+
}
|
|
98
311
|
const versionMatch = result.stdout.trim().match(/(\d+\.\d+\.\d+)/);
|
|
99
312
|
return versionMatch?.[1] || "unknown";
|
|
100
313
|
}
|
|
@@ -102,6 +315,207 @@ export class PackageManagerUtil {
|
|
|
102
315
|
return "unknown";
|
|
103
316
|
}
|
|
104
317
|
}
|
|
318
|
+
async getPnpmCommand() {
|
|
319
|
+
if (this.pnpmCommand !== undefined) {
|
|
320
|
+
return this.pnpmCommand;
|
|
321
|
+
}
|
|
322
|
+
const candidates = [
|
|
323
|
+
"pnpm --pm-on-fail=ignore",
|
|
324
|
+
"pnpm --config.manage-package-manager-versions=false",
|
|
325
|
+
"pnpm",
|
|
326
|
+
];
|
|
327
|
+
for (const candidate of candidates) {
|
|
328
|
+
try {
|
|
329
|
+
const result = await this.shell.execSilent(`${candidate} --version 2>/dev/null`);
|
|
330
|
+
if (result.exitCode === 0 && Boolean(result.stdout.trim())) {
|
|
331
|
+
this.pnpmCommand = candidate;
|
|
332
|
+
return this.pnpmCommand;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
// Try the next supported pnpm invocation form.
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
this.pnpmCommand = null;
|
|
340
|
+
return this.pnpmCommand;
|
|
341
|
+
}
|
|
342
|
+
async execPnpmSilent(commandArgs) {
|
|
343
|
+
const pnpmCommand = await this.getPnpmCommand();
|
|
344
|
+
if (!pnpmCommand) {
|
|
345
|
+
return null;
|
|
346
|
+
}
|
|
347
|
+
return this.shell.execSilent(`${pnpmCommand} ${commandArgs}`);
|
|
348
|
+
}
|
|
349
|
+
async getPnpmListProjects() {
|
|
350
|
+
try {
|
|
351
|
+
const result = await this.execPnpmSilent("list -g --depth=0 --json 2>/dev/null || true");
|
|
352
|
+
const output = result?.stdout.trim();
|
|
353
|
+
if (!output) {
|
|
354
|
+
return [];
|
|
355
|
+
}
|
|
356
|
+
const data = JSON.parse(output);
|
|
357
|
+
return Array.isArray(data) ? data : [data];
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
return [];
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
async getCurrentGlobalDir() {
|
|
364
|
+
const listProjects = await this.getPnpmListProjects();
|
|
365
|
+
for (const listProject of listProjects) {
|
|
366
|
+
if (typeof listProject.path === "string" && listProject.path.length > 0) {
|
|
367
|
+
return normalizeGlobalDir(listProject.path);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
try {
|
|
371
|
+
const result = await this.execPnpmSilent("root -g 2>/dev/null");
|
|
372
|
+
const output = result?.stdout.trim();
|
|
373
|
+
return output ? normalizeGlobalDir(output) : null;
|
|
374
|
+
}
|
|
375
|
+
catch {
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
async getCurrentInstalledPackages() {
|
|
380
|
+
const listProjects = await this.getPnpmListProjects();
|
|
381
|
+
const currentGlobalDir = await this.getCurrentGlobalDir();
|
|
382
|
+
const packageMap = new Map();
|
|
383
|
+
for (const listProject of listProjects) {
|
|
384
|
+
const globalDir = listProject.path
|
|
385
|
+
? normalizeGlobalDir(listProject.path)
|
|
386
|
+
: currentGlobalDir || undefined;
|
|
387
|
+
const dependencies = listProject.dependencies || {};
|
|
388
|
+
for (const [name, info] of Object.entries(dependencies)) {
|
|
389
|
+
if (!name.startsWith("@git.zone/")) {
|
|
390
|
+
continue;
|
|
391
|
+
}
|
|
392
|
+
packageMap.set(name, {
|
|
393
|
+
name,
|
|
394
|
+
version: getDependencyVersion(info),
|
|
395
|
+
globalDir,
|
|
396
|
+
packagePath: getDependencyPackagePath(info),
|
|
397
|
+
legacy: false,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
if (packageMap.size === 0 && currentGlobalDir) {
|
|
402
|
+
const currentRootInfo = await this.inspectGlobalRoot(currentGlobalDir, true);
|
|
403
|
+
for (const packageInfo of currentRootInfo.packages) {
|
|
404
|
+
packageMap.set(packageInfo.name, packageInfo);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return Array.from(packageMap.values());
|
|
408
|
+
}
|
|
409
|
+
async inspectGlobalRoot(globalDir, current) {
|
|
410
|
+
const normalizedGlobalDir = normalizeGlobalDir(globalDir);
|
|
411
|
+
const rootPackageJson = await readJson(plugins.path.join(normalizedGlobalDir, "package.json"));
|
|
412
|
+
const dependencies = getDependencyMap(rootPackageJson?.dependencies);
|
|
413
|
+
const packageMap = new Map();
|
|
414
|
+
for (const [name, spec] of Object.entries(dependencies)) {
|
|
415
|
+
if (!name.startsWith("@git.zone/")) {
|
|
416
|
+
continue;
|
|
417
|
+
}
|
|
418
|
+
packageMap.set(name, {
|
|
419
|
+
name,
|
|
420
|
+
version: (await this.getInstalledPackageVersion(normalizedGlobalDir, name)) ||
|
|
421
|
+
normalizeDependencySpec(spec),
|
|
422
|
+
globalDir: normalizedGlobalDir,
|
|
423
|
+
packagePath: getPackagePath(normalizedGlobalDir, name),
|
|
424
|
+
legacy: !current,
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
const gitZoneScopeDir = plugins.path.join(normalizedGlobalDir, "node_modules", "@git.zone");
|
|
428
|
+
try {
|
|
429
|
+
const entries = await plugins.fs.readdir(gitZoneScopeDir, {
|
|
430
|
+
withFileTypes: true,
|
|
431
|
+
});
|
|
432
|
+
for (const entry of entries) {
|
|
433
|
+
if (!entry.isDirectory() && !entry.isSymbolicLink()) {
|
|
434
|
+
continue;
|
|
435
|
+
}
|
|
436
|
+
const name = `@git.zone/${entry.name}`;
|
|
437
|
+
packageMap.set(name, {
|
|
438
|
+
name,
|
|
439
|
+
version: (await this.getInstalledPackageVersion(normalizedGlobalDir, name)) || "unknown",
|
|
440
|
+
globalDir: normalizedGlobalDir,
|
|
441
|
+
packagePath: getPackagePath(normalizedGlobalDir, name),
|
|
442
|
+
legacy: !current,
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
catch {
|
|
447
|
+
// A pnpm global root may be empty or may not have node_modules materialized yet.
|
|
448
|
+
}
|
|
449
|
+
const dependencyNames = Object.keys(dependencies);
|
|
450
|
+
const unmanagedPackageNames = dependencyNames.filter((packageName) => !packageName.startsWith("@git.zone/"));
|
|
451
|
+
return {
|
|
452
|
+
globalDir: normalizedGlobalDir,
|
|
453
|
+
packages: Array.from(packageMap.values()).sort((packageA, packageB) => packageA.name.localeCompare(packageB.name)),
|
|
454
|
+
unmanagedPackageNames,
|
|
455
|
+
safeToDelete: !current &&
|
|
456
|
+
dependencyNames.length > 0 &&
|
|
457
|
+
unmanagedPackageNames.length === 0,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
async getInstalledPackageVersion(globalDir, packageName) {
|
|
461
|
+
const packageJson = await readJson(plugins.path.join(globalDir, "node_modules", ...packageName.split("/"), "package.json"));
|
|
462
|
+
return typeof packageJson?.version === "string"
|
|
463
|
+
? packageJson.version
|
|
464
|
+
: null;
|
|
465
|
+
}
|
|
466
|
+
async getShimReferences(legacyGlobalDir) {
|
|
467
|
+
const pnpmShimDirs = await this.getPnpmShimDirs();
|
|
468
|
+
if (!pnpmShimDirs) {
|
|
469
|
+
return null;
|
|
470
|
+
}
|
|
471
|
+
const references = [];
|
|
472
|
+
for (const pnpmShimDir of pnpmShimDirs) {
|
|
473
|
+
try {
|
|
474
|
+
const entries = await plugins.fs.readdir(pnpmShimDir, {
|
|
475
|
+
withFileTypes: true,
|
|
476
|
+
});
|
|
477
|
+
for (const entry of entries) {
|
|
478
|
+
if (!entry.isFile()) {
|
|
479
|
+
continue;
|
|
480
|
+
}
|
|
481
|
+
const filePath = plugins.path.join(pnpmShimDir, entry.name);
|
|
482
|
+
try {
|
|
483
|
+
const content = await plugins.fs.readFile(filePath, "utf8");
|
|
484
|
+
if (content.includes(legacyGlobalDir)) {
|
|
485
|
+
references.push(formatShimName(pnpmShimDir, entry.name));
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
catch {
|
|
489
|
+
// Ignore unreadable or non-text files in PNPM_HOME.
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
catch {
|
|
494
|
+
return null;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
return references;
|
|
498
|
+
}
|
|
499
|
+
async getPnpmShimDirs() {
|
|
500
|
+
const pnpmHome = process.env.PNPM_HOME;
|
|
501
|
+
if (!pnpmHome) {
|
|
502
|
+
return null;
|
|
503
|
+
}
|
|
504
|
+
const candidateDirs = [plugins.path.join(pnpmHome, "bin"), pnpmHome];
|
|
505
|
+
const shimDirs = [];
|
|
506
|
+
for (const candidateDir of candidateDirs) {
|
|
507
|
+
try {
|
|
508
|
+
const stat = await plugins.fs.stat(candidateDir);
|
|
509
|
+
if (stat.isDirectory()) {
|
|
510
|
+
shimDirs.push(normalizePath(candidateDir));
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
catch {
|
|
514
|
+
// Ignore missing pnpm shim directories.
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
return shimDirs.length > 0 ? Array.from(new Set(shimDirs)) : null;
|
|
518
|
+
}
|
|
105
519
|
async getLatestVersionFromRegistry(registry, packageName) {
|
|
106
520
|
const encodedName = packageName.replace("/", "%2f");
|
|
107
521
|
const controller = new AbortController();
|
|
@@ -128,6 +542,99 @@ export class PackageManagerUtil {
|
|
|
128
542
|
}
|
|
129
543
|
}
|
|
130
544
|
}
|
|
545
|
+
async function readJson(filePath) {
|
|
546
|
+
try {
|
|
547
|
+
const content = await plugins.fs.readFile(filePath, "utf8");
|
|
548
|
+
return JSON.parse(content);
|
|
549
|
+
}
|
|
550
|
+
catch {
|
|
551
|
+
return null;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
function getDependencyMap(value) {
|
|
555
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
556
|
+
return {};
|
|
557
|
+
}
|
|
558
|
+
return value;
|
|
559
|
+
}
|
|
560
|
+
function getDependencyVersion(info) {
|
|
561
|
+
if (info && typeof info === "object" && typeof info.version === "string") {
|
|
562
|
+
return info.version;
|
|
563
|
+
}
|
|
564
|
+
if (typeof info === "string") {
|
|
565
|
+
return normalizeDependencySpec(info);
|
|
566
|
+
}
|
|
567
|
+
return "unknown";
|
|
568
|
+
}
|
|
569
|
+
function getDependencyPackagePath(info) {
|
|
570
|
+
return info && typeof info === "object" && typeof info.path === "string"
|
|
571
|
+
? normalizePath(info.path)
|
|
572
|
+
: undefined;
|
|
573
|
+
}
|
|
574
|
+
function getPackagePath(globalDir, packageName) {
|
|
575
|
+
return plugins.path.join(globalDir, "node_modules", ...packageName.split("/"));
|
|
576
|
+
}
|
|
577
|
+
function getPackageBinNames(packageName, packageJson) {
|
|
578
|
+
const bin = packageJson?.bin;
|
|
579
|
+
if (typeof bin === "string") {
|
|
580
|
+
return [getDefaultBinName(packageName)];
|
|
581
|
+
}
|
|
582
|
+
if (!bin || typeof bin !== "object" || Array.isArray(bin)) {
|
|
583
|
+
return [];
|
|
584
|
+
}
|
|
585
|
+
return Object.keys(bin)
|
|
586
|
+
.filter((binName) => binName.length > 0)
|
|
587
|
+
.sort();
|
|
588
|
+
}
|
|
589
|
+
function getDefaultBinName(packageName) {
|
|
590
|
+
const packageNameParts = packageName.split("/");
|
|
591
|
+
return packageNameParts[packageNameParts.length - 1] || packageName;
|
|
592
|
+
}
|
|
593
|
+
function getNodeModulesDir(packagePath, packageName) {
|
|
594
|
+
return packageName.startsWith("@")
|
|
595
|
+
? plugins.path.dirname(plugins.path.dirname(packagePath))
|
|
596
|
+
: plugins.path.dirname(packagePath);
|
|
597
|
+
}
|
|
598
|
+
function rewriteShimForPnpmHome(content) {
|
|
599
|
+
const targetMatch = content.match(/^# cmd-shim-target=(.+)$/m);
|
|
600
|
+
if (!targetMatch?.[1]) {
|
|
601
|
+
return content;
|
|
602
|
+
}
|
|
603
|
+
const absoluteTarget = `"${escapeDoubleQuotedShell(targetMatch[1])}"`;
|
|
604
|
+
return content.replace(/"\$basedir\/(?:\.\.\/)+store\/[^"\n]+"/g, absoluteTarget);
|
|
605
|
+
}
|
|
606
|
+
function escapeDoubleQuotedShell(value) {
|
|
607
|
+
return value.replace(/["\\$`]/g, "\\$&");
|
|
608
|
+
}
|
|
609
|
+
function formatShimName(pnpmShimDir, binName) {
|
|
610
|
+
const pnpmHome = process.env.PNPM_HOME;
|
|
611
|
+
if (!pnpmHome) {
|
|
612
|
+
return binName;
|
|
613
|
+
}
|
|
614
|
+
const relativeName = plugins.path.relative(pnpmHome, plugins.path.join(pnpmShimDir, binName));
|
|
615
|
+
return relativeName && !relativeName.startsWith("..")
|
|
616
|
+
? relativeName
|
|
617
|
+
: binName;
|
|
618
|
+
}
|
|
619
|
+
function normalizeDependencySpec(spec) {
|
|
620
|
+
if (typeof spec !== "string" || spec.length === 0) {
|
|
621
|
+
return "unknown";
|
|
622
|
+
}
|
|
623
|
+
const versionMatch = spec.match(/\d+\.\d+\.\d+(?:[-+][\w.-]+)?/);
|
|
624
|
+
return versionMatch?.[0] || spec;
|
|
625
|
+
}
|
|
626
|
+
function normalizeGlobalDir(globalDir) {
|
|
627
|
+
const normalizedPath = normalizePath(globalDir);
|
|
628
|
+
return plugins.path.basename(normalizedPath) === "node_modules"
|
|
629
|
+
? plugins.path.dirname(normalizedPath)
|
|
630
|
+
: normalizedPath;
|
|
631
|
+
}
|
|
632
|
+
function normalizePath(filePath) {
|
|
633
|
+
return plugins.path.resolve(filePath).replace(/\/+$/, "");
|
|
634
|
+
}
|
|
635
|
+
function pathsAreEqual(pathA, pathB) {
|
|
636
|
+
return normalizePath(pathA) === normalizePath(pathB);
|
|
637
|
+
}
|
|
131
638
|
function normalizeSemver(version) {
|
|
132
639
|
return version
|
|
133
640
|
.replace(/^[^\d]*/, "")
|
|
@@ -137,4 +644,4 @@ function normalizeSemver(version) {
|
|
|
137
644
|
function shellQuote(value) {
|
|
138
645
|
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
139
646
|
}
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wYWNrYWdlbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF90b29scy9jbGFzc2VzLnBhY2thZ2VtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFxQjVDLE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDaEQsUUFBUSxFQUFFLE1BQU07S0FDakIsQ0FBQyxDQUFDO0lBRUksS0FBSyxDQUFDLFVBQVU7UUFDckIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0I7UUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTztnQkFDTCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsY0FBYyxFQUFFLFNBQVM7Z0JBQ3pCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixXQUFXLEVBQUUsS0FBSzthQUNuQixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsNEJB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
|
|
647
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wYWNrYWdlbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL21vZF90b29scy9jbGFzc2VzLnBhY2thZ2VtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFrRDVDLE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDaEQsUUFBUSxFQUFFLE1BQU07S0FDakIsQ0FBQyxDQUFDO0lBQ0ssV0FBVyxDQUE0QjtJQUV4QyxLQUFLLENBQUMsVUFBVTtRQUNyQixPQUFPLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCO1FBQzdCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLGNBQWMsRUFBRSxTQUFTO2dCQUN6QixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsV0FBVyxFQUFFLEtBQUs7YUFDbkIsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzFELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUN4RCw0QkFBNEI7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLFNBQVMsRUFBRSxJQUFJO1lBQ2YsY0FBYztZQUNkLGFBQWE7WUFDYixXQUFXLEVBQUUsYUFBYTtnQkFDeEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQztnQkFDcEQsQ0FBQyxD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
|