node-version-use 2.1.1 → 2.1.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.
- package/dist/cjs/commands/default.js +69 -3
- package/dist/cjs/commands/default.js.map +1 -1
- package/dist/cjs/commands/setup.d.cts +3 -3
- package/dist/cjs/commands/setup.d.ts +3 -3
- package/dist/cjs/commands/setup.js +82 -3
- package/dist/cjs/commands/setup.js.map +1 -1
- package/dist/cjs/commands/uninstall.js +14 -65
- package/dist/cjs/commands/uninstall.js.map +1 -1
- package/dist/cjs/commands/which.js +11 -13
- package/dist/cjs/commands/which.js.map +1 -1
- package/dist/cjs/lib/findInstalledVersions.d.cts +9 -0
- package/dist/cjs/lib/findInstalledVersions.d.ts +9 -0
- package/dist/cjs/lib/findInstalledVersions.js +95 -0
- package/dist/cjs/lib/findInstalledVersions.js.map +1 -0
- package/dist/esm/commands/default.js +69 -3
- package/dist/esm/commands/default.js.map +1 -1
- package/dist/esm/commands/setup.d.ts +3 -3
- package/dist/esm/commands/setup.js +83 -4
- package/dist/esm/commands/setup.js.map +1 -1
- package/dist/esm/commands/uninstall.js +14 -65
- package/dist/esm/commands/uninstall.js.map +1 -1
- package/dist/esm/commands/which.js +13 -15
- package/dist/esm/commands/which.js.map +1 -1
- package/dist/esm/lib/findInstalledVersions.d.ts +9 -0
- package/dist/esm/lib/findInstalledVersions.js +76 -0
- package/dist/esm/lib/findInstalledVersions.js.map +1 -0
- package/package.json +4 -4
- package/scripts/postinstall.cjs +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { readdirWithTypes } from '../compat.js';
|
|
4
|
+
/**
|
|
5
|
+
* Compare two semver version strings (e.g., "20.19.0" vs "20.9.1")
|
|
6
|
+
* Returns: negative if a < b, positive if a > b, 0 if equal
|
|
7
|
+
*/ function compareVersions(a, b) {
|
|
8
|
+
var aParts = a.replace(/^v/, '').split('.');
|
|
9
|
+
var bParts = b.replace(/^v/, '').split('.');
|
|
10
|
+
var len = Math.max(aParts.length, bParts.length);
|
|
11
|
+
for(var i = 0; i < len; i++){
|
|
12
|
+
var aNum = parseInt(aParts[i], 10) || 0;
|
|
13
|
+
var bNum = parseInt(bParts[i], 10) || 0;
|
|
14
|
+
if (aNum !== bNum) {
|
|
15
|
+
return aNum - bNum;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Find all installed versions matching the given version string
|
|
22
|
+
* Results are sorted in ascending semver order (lowest first, highest last)
|
|
23
|
+
*/ export function findInstalledVersions(versionsPath, version) {
|
|
24
|
+
if (!fs.existsSync(versionsPath)) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
var normalizedVersion = version.replace(/^v/, '');
|
|
28
|
+
var matches = [];
|
|
29
|
+
// Try exact matches first
|
|
30
|
+
var exactMatches = [
|
|
31
|
+
version,
|
|
32
|
+
`v${normalizedVersion}`,
|
|
33
|
+
normalizedVersion
|
|
34
|
+
];
|
|
35
|
+
for(var i = 0; i < exactMatches.length; i++){
|
|
36
|
+
var v = exactMatches[i];
|
|
37
|
+
var versionPath = path.join(versionsPath, v);
|
|
38
|
+
if (fs.existsSync(versionPath) && fs.statSync(versionPath).isDirectory()) {
|
|
39
|
+
if (matches.indexOf(v) === -1) {
|
|
40
|
+
matches.push(v);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// If we have an exact match, return just that
|
|
45
|
+
if (matches.length > 0) {
|
|
46
|
+
return matches;
|
|
47
|
+
}
|
|
48
|
+
// Try partial match (e.g., "20" matches "v20.19.6")
|
|
49
|
+
var entries = readdirWithTypes(versionsPath);
|
|
50
|
+
for(var j = 0; j < entries.length; j++){
|
|
51
|
+
var entry = entries[j];
|
|
52
|
+
if (!entry.isDirectory()) continue;
|
|
53
|
+
var dirVersion = entry.name.replace(/^v/, '');
|
|
54
|
+
if (dirVersion.indexOf(`${normalizedVersion}.`) === 0) {
|
|
55
|
+
matches.push(entry.name);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Sort by semver (ascending) so highest version is last
|
|
59
|
+
matches.sort(compareVersions);
|
|
60
|
+
return matches;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get all installed versions
|
|
64
|
+
*/ export function getAllInstalledVersions(versionsPath) {
|
|
65
|
+
if (!fs.existsSync(versionsPath)) {
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
var entries = readdirWithTypes(versionsPath);
|
|
69
|
+
var versions = [];
|
|
70
|
+
for(var i = 0; i < entries.length; i++){
|
|
71
|
+
if (entries[i].isDirectory()) {
|
|
72
|
+
versions.push(entries[i].name);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return versions;
|
|
76
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/lib/findInstalledVersions.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { readdirWithTypes } from '../compat.ts';\n\n/**\n * Compare two semver version strings (e.g., \"20.19.0\" vs \"20.9.1\")\n * Returns: negative if a < b, positive if a > b, 0 if equal\n */\nfunction compareVersions(a: string, b: string): number {\n var aParts = a.replace(/^v/, '').split('.');\n var bParts = b.replace(/^v/, '').split('.');\n var len = Math.max(aParts.length, bParts.length);\n\n for (var i = 0; i < len; i++) {\n var aNum = parseInt(aParts[i], 10) || 0;\n var bNum = parseInt(bParts[i], 10) || 0;\n if (aNum !== bNum) {\n return aNum - bNum;\n }\n }\n return 0;\n}\n\n/**\n * Find all installed versions matching the given version string\n * Results are sorted in ascending semver order (lowest first, highest last)\n */\nexport function findInstalledVersions(versionsPath: string, version: string): string[] {\n if (!fs.existsSync(versionsPath)) {\n return [];\n }\n\n var normalizedVersion = version.replace(/^v/, '');\n var matches: string[] = [];\n\n // Try exact matches first\n var exactMatches = [version, `v${normalizedVersion}`, normalizedVersion];\n for (var i = 0; i < exactMatches.length; i++) {\n var v = exactMatches[i];\n var versionPath = path.join(versionsPath, v);\n if (fs.existsSync(versionPath) && fs.statSync(versionPath).isDirectory()) {\n if (matches.indexOf(v) === -1) {\n matches.push(v);\n }\n }\n }\n\n // If we have an exact match, return just that\n if (matches.length > 0) {\n return matches;\n }\n\n // Try partial match (e.g., \"20\" matches \"v20.19.6\")\n var entries = readdirWithTypes(versionsPath);\n for (var j = 0; j < entries.length; j++) {\n var entry = entries[j];\n if (!entry.isDirectory()) continue;\n var dirVersion = entry.name.replace(/^v/, '');\n if (dirVersion.indexOf(`${normalizedVersion}.`) === 0) {\n matches.push(entry.name);\n }\n }\n\n // Sort by semver (ascending) so highest version is last\n matches.sort(compareVersions);\n\n return matches;\n}\n\n/**\n * Get all installed versions\n */\nexport function getAllInstalledVersions(versionsPath: string): string[] {\n if (!fs.existsSync(versionsPath)) {\n return [];\n }\n\n var entries = readdirWithTypes(versionsPath);\n var versions: string[] = [];\n for (var i = 0; i < entries.length; i++) {\n if (entries[i].isDirectory()) {\n versions.push(entries[i].name);\n }\n }\n\n return versions;\n}\n"],"names":["fs","path","readdirWithTypes","compareVersions","a","b","aParts","replace","split","bParts","len","Math","max","length","i","aNum","parseInt","bNum","findInstalledVersions","versionsPath","version","existsSync","normalizedVersion","matches","exactMatches","v","versionPath","join","statSync","isDirectory","indexOf","push","entries","j","entry","dirVersion","name","sort","getAllInstalledVersions","versions"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,gBAAgB,QAAQ,eAAe;AAEhD;;;CAGC,GACD,SAASC,gBAAgBC,CAAS,EAAEC,CAAS;IAC3C,IAAIC,SAASF,EAAEG,OAAO,CAAC,MAAM,IAAIC,KAAK,CAAC;IACvC,IAAIC,SAASJ,EAAEE,OAAO,CAAC,MAAM,IAAIC,KAAK,CAAC;IACvC,IAAIE,MAAMC,KAAKC,GAAG,CAACN,OAAOO,MAAM,EAAEJ,OAAOI,MAAM;IAE/C,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,KAAKI,IAAK;QAC5B,IAAIC,OAAOC,SAASV,MAAM,CAACQ,EAAE,EAAE,OAAO;QACtC,IAAIG,OAAOD,SAASP,MAAM,CAACK,EAAE,EAAE,OAAO;QACtC,IAAIC,SAASE,MAAM;YACjB,OAAOF,OAAOE;QAChB;IACF;IACA,OAAO;AACT;AAEA;;;CAGC,GACD,OAAO,SAASC,sBAAsBC,YAAoB,EAAEC,OAAe;IACzE,IAAI,CAACpB,GAAGqB,UAAU,CAACF,eAAe;QAChC,OAAO,EAAE;IACX;IAEA,IAAIG,oBAAoBF,QAAQb,OAAO,CAAC,MAAM;IAC9C,IAAIgB,UAAoB,EAAE;IAE1B,0BAA0B;IAC1B,IAAIC,eAAe;QAACJ;QAAS,CAAC,CAAC,EAAEE,mBAAmB;QAAEA;KAAkB;IACxE,IAAK,IAAIR,IAAI,GAAGA,IAAIU,aAAaX,MAAM,EAAEC,IAAK;QAC5C,IAAIW,IAAID,YAAY,CAACV,EAAE;QACvB,IAAIY,cAAczB,KAAK0B,IAAI,CAACR,cAAcM;QAC1C,IAAIzB,GAAGqB,UAAU,CAACK,gBAAgB1B,GAAG4B,QAAQ,CAACF,aAAaG,WAAW,IAAI;YACxE,IAAIN,QAAQO,OAAO,CAACL,OAAO,CAAC,GAAG;gBAC7BF,QAAQQ,IAAI,CAACN;YACf;QACF;IACF;IAEA,8CAA8C;IAC9C,IAAIF,QAAQV,MAAM,GAAG,GAAG;QACtB,OAAOU;IACT;IAEA,oDAAoD;IACpD,IAAIS,UAAU9B,iBAAiBiB;IAC/B,IAAK,IAAIc,IAAI,GAAGA,IAAID,QAAQnB,MAAM,EAAEoB,IAAK;QACvC,IAAIC,QAAQF,OAAO,CAACC,EAAE;QACtB,IAAI,CAACC,MAAML,WAAW,IAAI;QAC1B,IAAIM,aAAaD,MAAME,IAAI,CAAC7B,OAAO,CAAC,MAAM;QAC1C,IAAI4B,WAAWL,OAAO,CAAC,GAAGR,kBAAkB,CAAC,CAAC,MAAM,GAAG;YACrDC,QAAQQ,IAAI,CAACG,MAAME,IAAI;QACzB;IACF;IAEA,wDAAwD;IACxDb,QAAQc,IAAI,CAAClC;IAEb,OAAOoB;AACT;AAEA;;CAEC,GACD,OAAO,SAASe,wBAAwBnB,YAAoB;IAC1D,IAAI,CAACnB,GAAGqB,UAAU,CAACF,eAAe;QAChC,OAAO,EAAE;IACX;IAEA,IAAIa,UAAU9B,iBAAiBiB;IAC/B,IAAIoB,WAAqB,EAAE;IAC3B,IAAK,IAAIzB,IAAI,GAAGA,IAAIkB,QAAQnB,MAAM,EAAEC,IAAK;QACvC,IAAIkB,OAAO,CAAClB,EAAE,CAACe,WAAW,IAAI;YAC5BU,SAASR,IAAI,CAACC,OAAO,CAAClB,EAAE,CAACsB,IAAI;QAC/B;IACF;IAEA,OAAOG;AACT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-version-use",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.3",
|
|
4
4
|
"description": "Cross-platform solution for using multiple versions of node. Useful for compatibility testing",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"node",
|
|
@@ -70,11 +70,11 @@
|
|
|
70
70
|
"fs-remove-compat": "^0.2.1",
|
|
71
71
|
"is-version": "^1.0.7",
|
|
72
72
|
"mkdirp-classic": "^0.5.3",
|
|
73
|
-
"node-version-install": "^1.
|
|
74
|
-
"node-version-use": "^2.1.
|
|
73
|
+
"node-version-install": "^1.5.0",
|
|
74
|
+
"node-version-use": "^2.1.1",
|
|
75
75
|
"os-shim": "^0.1.3",
|
|
76
76
|
"pinkie-promise": "^2.0.1",
|
|
77
|
-
"ts-dev-stack": "^1.21.
|
|
77
|
+
"ts-dev-stack": "^1.21.3",
|
|
78
78
|
"tsds-config": "^0.2.0"
|
|
79
79
|
},
|
|
80
80
|
"engines": {
|
package/scripts/postinstall.cjs
CHANGED
|
@@ -258,7 +258,7 @@ function extractAndInstall(archivePath, destDir, binaryName, callback) {
|
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
// Binary names to install
|
|
261
|
-
var binaries = ['node', 'npm', 'npx'];
|
|
261
|
+
var binaries = ['node', 'npm', 'npx', 'corepack'];
|
|
262
262
|
var timestamp = Date.now();
|
|
263
263
|
var _pending = binaries.length;
|
|
264
264
|
var installError = null;
|