node-version-use 2.1.0 → 2.1.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/cjs/cli.js +7 -7
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/default.js +73 -7
- package/dist/cjs/commands/default.js.map +1 -1
- package/dist/cjs/commands/install.js +6 -6
- package/dist/cjs/commands/install.js.map +1 -1
- package/dist/cjs/commands/list.js +4 -4
- package/dist/cjs/commands/list.js.map +1 -1
- package/dist/cjs/commands/local.js +6 -6
- package/dist/cjs/commands/local.js.map +1 -1
- package/dist/cjs/commands/setup.js +2 -2
- package/dist/cjs/commands/setup.js.map +1 -1
- package/dist/cjs/commands/teardown.js +2 -2
- package/dist/cjs/commands/teardown.js.map +1 -1
- package/dist/cjs/commands/uninstall.js +20 -71
- package/dist/cjs/commands/uninstall.js.map +1 -1
- package/dist/cjs/commands/which.js +3 -3
- 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/cli.js +1 -1
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/default.js +70 -4
- package/dist/esm/commands/default.js.map +1 -1
- package/dist/esm/commands/install.js +1 -1
- package/dist/esm/commands/install.js.map +1 -1
- package/dist/esm/commands/list.js +1 -1
- package/dist/esm/commands/list.js.map +1 -1
- package/dist/esm/commands/local.js +1 -1
- package/dist/esm/commands/local.js.map +1 -1
- package/dist/esm/commands/setup.js +1 -1
- package/dist/esm/commands/setup.js.map +1 -1
- package/dist/esm/commands/teardown.js +1 -1
- package/dist/esm/commands/teardown.js.map +1 -1
- package/dist/esm/commands/uninstall.js +15 -66
- package/dist/esm/commands/uninstall.js.map +1 -1
- package/dist/esm/commands/which.js +1 -1
- 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 +6 -6
- package/scripts/postinstall.cjs +1 -1
|
@@ -12,11 +12,12 @@ Object.defineProperty(exports, /**
|
|
|
12
12
|
return uninstallCmd;
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
|
-
var
|
|
15
|
+
var _exitcompat = /*#__PURE__*/ _interop_require_default(require("exit-compat"));
|
|
16
16
|
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
17
17
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
18
18
|
var _compatts = require("../compat.js");
|
|
19
19
|
var _constantsts = require("../constants.js");
|
|
20
|
+
var _findInstalledVersionsts = require("../lib/findInstalledVersions.js");
|
|
20
21
|
function _interop_require_default(obj) {
|
|
21
22
|
return obj && obj.__esModule ? obj : {
|
|
22
23
|
default: obj
|
|
@@ -27,19 +28,19 @@ function uninstallCmd(args) {
|
|
|
27
28
|
console.log('Usage: nvu uninstall <version>');
|
|
28
29
|
console.log('Example: nvu uninstall 20');
|
|
29
30
|
console.log(' nvu uninstall v20.19.6');
|
|
30
|
-
(0,
|
|
31
|
+
(0, _exitcompat.default)(1);
|
|
31
32
|
return;
|
|
32
33
|
}
|
|
33
34
|
var version = args[0].trim();
|
|
34
35
|
var versionsPath = _path.default.join(_constantsts.storagePath, 'installed');
|
|
35
36
|
// Find all matching installed versions
|
|
36
|
-
var matches = findInstalledVersions(versionsPath, version);
|
|
37
|
+
var matches = (0, _findInstalledVersionsts.findInstalledVersions)(versionsPath, version);
|
|
37
38
|
if (matches.length === 0) {
|
|
38
39
|
console.log("Node ".concat(version, " is not installed."));
|
|
39
40
|
console.log('');
|
|
40
41
|
console.log('Installed versions:');
|
|
41
42
|
listInstalledVersions(versionsPath);
|
|
42
|
-
(0,
|
|
43
|
+
(0, _exitcompat.default)(1);
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
46
|
if (matches.length > 1) {
|
|
@@ -49,99 +50,47 @@ function uninstallCmd(args) {
|
|
|
49
50
|
}
|
|
50
51
|
console.log('');
|
|
51
52
|
console.log('Please specify the exact version to uninstall.');
|
|
52
|
-
(0,
|
|
53
|
+
(0, _exitcompat.default)(1);
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
55
56
|
var installedVersion = matches[0];
|
|
56
57
|
var versionPath = _path.default.join(versionsPath, installedVersion);
|
|
57
|
-
// Check if this is the current default
|
|
58
|
+
// Check if this is the current default (exact match since we store exact versions)
|
|
58
59
|
var defaultPath = _path.default.join(_constantsts.storagePath, 'default');
|
|
59
|
-
var isDefault = false;
|
|
60
60
|
if (_fs.default.existsSync(defaultPath)) {
|
|
61
61
|
var defaultVersion = _fs.default.readFileSync(defaultPath, 'utf8').trim();
|
|
62
|
+
// Normalize both for comparison
|
|
62
63
|
var normalizedDefault = defaultVersion.replace(/^v/, '');
|
|
63
64
|
var normalizedInstalled = installedVersion.replace(/^v/, '');
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
if (normalizedInstalled === normalizedDefault) {
|
|
66
|
+
console.error("Cannot uninstall default version ".concat(installedVersion, "."));
|
|
67
|
+
console.error('');
|
|
68
|
+
console.error('Change your default first:');
|
|
69
|
+
console.error(' nvu default <version>');
|
|
70
|
+
(0, _exitcompat.default)(1);
|
|
71
|
+
return;
|
|
67
72
|
}
|
|
68
73
|
}
|
|
69
74
|
// Remove the version directory
|
|
70
75
|
try {
|
|
71
76
|
(0, _compatts.rmSync)(versionPath);
|
|
72
77
|
console.log("Removed Node ".concat(installedVersion));
|
|
73
|
-
if (isDefault) {
|
|
74
|
-
// Clear the default since it's no longer installed
|
|
75
|
-
_fs.default.unlinkSync(defaultPath);
|
|
76
|
-
console.log('');
|
|
77
|
-
console.log('Note: This was your default version. Set a new default with:');
|
|
78
|
-
console.log(' nvu default <version>');
|
|
79
|
-
}
|
|
80
78
|
} catch (err) {
|
|
81
79
|
console.error("Failed to remove Node ".concat(installedVersion, ":"), err.message);
|
|
82
|
-
(0,
|
|
80
|
+
(0, _exitcompat.default)(1);
|
|
83
81
|
return;
|
|
84
82
|
}
|
|
85
|
-
(0,
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Find all installed versions matching the given version string
|
|
89
|
-
*/ function findInstalledVersions(versionsPath, version) {
|
|
90
|
-
if (!_fs.default.existsSync(versionsPath)) {
|
|
91
|
-
return [];
|
|
92
|
-
}
|
|
93
|
-
var normalizedVersion = version.replace(/^v/, '');
|
|
94
|
-
var matches = [];
|
|
95
|
-
// Try exact matches first
|
|
96
|
-
var exactMatches = [
|
|
97
|
-
version,
|
|
98
|
-
"v".concat(normalizedVersion),
|
|
99
|
-
normalizedVersion
|
|
100
|
-
];
|
|
101
|
-
for(var i = 0; i < exactMatches.length; i++){
|
|
102
|
-
var v = exactMatches[i];
|
|
103
|
-
var versionPath = _path.default.join(versionsPath, v);
|
|
104
|
-
if (_fs.default.existsSync(versionPath) && _fs.default.statSync(versionPath).isDirectory()) {
|
|
105
|
-
if (matches.indexOf(v) === -1) {
|
|
106
|
-
matches.push(v);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// If we have an exact match, return just that
|
|
111
|
-
if (matches.length > 0) {
|
|
112
|
-
return matches;
|
|
113
|
-
}
|
|
114
|
-
// Try partial match (e.g., "20" matches "v20.19.6")
|
|
115
|
-
var entries = (0, _compatts.readdirWithTypes)(versionsPath);
|
|
116
|
-
for(var j = 0; j < entries.length; j++){
|
|
117
|
-
var entry = entries[j];
|
|
118
|
-
if (!entry.isDirectory()) continue;
|
|
119
|
-
var dirVersion = entry.name.replace(/^v/, '');
|
|
120
|
-
if (dirVersion.indexOf("".concat(normalizedVersion, ".")) === 0) {
|
|
121
|
-
matches.push(entry.name);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return matches;
|
|
83
|
+
(0, _exitcompat.default)(0);
|
|
125
84
|
}
|
|
126
85
|
/**
|
|
127
86
|
* List installed versions for user reference
|
|
128
87
|
*/ function listInstalledVersions(versionsPath) {
|
|
129
|
-
|
|
130
|
-
console.log(' (none)');
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
var entries = (0, _compatts.readdirWithTypes)(versionsPath);
|
|
134
|
-
var versions = [];
|
|
135
|
-
for(var i = 0; i < entries.length; i++){
|
|
136
|
-
if (entries[i].isDirectory()) {
|
|
137
|
-
versions.push(entries[i].name);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
88
|
+
var versions = (0, _findInstalledVersionsts.getAllInstalledVersions)(versionsPath);
|
|
140
89
|
if (versions.length === 0) {
|
|
141
90
|
console.log(' (none)');
|
|
142
91
|
} else {
|
|
143
|
-
for(var
|
|
144
|
-
console.log(" ".concat(versions[
|
|
92
|
+
for(var i = 0; i < versions.length; i++){
|
|
93
|
+
console.log(" ".concat(versions[i]));
|
|
145
94
|
}
|
|
146
95
|
}
|
|
147
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/uninstall.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport {
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/uninstall.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport path from 'path';\nimport { rmSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\nimport { findInstalledVersions, getAllInstalledVersions } from '../lib/findInstalledVersions.ts';\n\n/**\n * nvu uninstall <version>\n *\n * Remove an installed Node version.\n */\nexport default function uninstallCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu uninstall <version>');\n console.log('Example: nvu uninstall 20');\n console.log(' nvu uninstall v20.19.6');\n exit(1);\n return;\n }\n\n var version = args[0].trim();\n var versionsPath = path.join(storagePath, 'installed');\n\n // Find all matching installed versions\n var matches = findInstalledVersions(versionsPath, version);\n\n if (matches.length === 0) {\n console.log(`Node ${version} is not installed.`);\n console.log('');\n console.log('Installed versions:');\n listInstalledVersions(versionsPath);\n exit(1);\n return;\n }\n\n if (matches.length > 1) {\n console.log(`Multiple versions match \"${version}\":`);\n for (var i = 0; i < matches.length; i++) {\n console.log(` ${matches[i]}`);\n }\n console.log('');\n console.log('Please specify the exact version to uninstall.');\n exit(1);\n return;\n }\n\n var installedVersion = matches[0];\n var versionPath = path.join(versionsPath, installedVersion);\n\n // Check if this is the current default (exact match since we store exact versions)\n var defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n var defaultVersion = fs.readFileSync(defaultPath, 'utf8').trim();\n\n // Normalize both for comparison\n var normalizedDefault = defaultVersion.replace(/^v/, '');\n var normalizedInstalled = installedVersion.replace(/^v/, '');\n\n if (normalizedInstalled === normalizedDefault) {\n console.error(`Cannot uninstall default version ${installedVersion}.`);\n console.error('');\n console.error('Change your default first:');\n console.error(' nvu default <version>');\n exit(1);\n return;\n }\n }\n\n // Remove the version directory\n try {\n rmSync(versionPath);\n console.log(`Removed Node ${installedVersion}`);\n } catch (err) {\n console.error(`Failed to remove Node ${installedVersion}:`, (err as Error).message);\n exit(1);\n return;\n }\n\n exit(0);\n}\n\n/**\n * List installed versions for user reference\n */\nfunction listInstalledVersions(versionsPath: string): void {\n var versions = getAllInstalledVersions(versionsPath);\n\n if (versions.length === 0) {\n console.log(' (none)');\n } else {\n for (var i = 0; i < versions.length; i++) {\n console.log(` ${versions[i]}`);\n }\n }\n}\n"],"names":["uninstallCmd","args","length","console","log","exit","version","trim","versionsPath","path","join","storagePath","matches","findInstalledVersions","listInstalledVersions","i","installedVersion","versionPath","defaultPath","fs","existsSync","defaultVersion","readFileSync","normalizedDefault","replace","normalizedInstalled","error","rmSync","err","message","versions","getAllInstalledVersions"],"mappings":";;;;+BAOA;;;;CAIC,GACD;;;eAAwBA;;;iEAZP;yDACF;2DACE;wBACM;2BACK;uCACmC;;;;;;AAOhD,SAASA,aAAaC,IAAc;IACjD,IAAIA,KAAKC,MAAM,KAAK,GAAG;QACrBC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZC,IAAAA,mBAAI,EAAC;QACL;IACF;IAEA,IAAIC,UAAUL,IAAI,CAAC,EAAE,CAACM,IAAI;IAC1B,IAAIC,eAAeC,aAAI,CAACC,IAAI,CAACC,wBAAW,EAAE;IAE1C,uCAAuC;IACvC,IAAIC,UAAUC,IAAAA,8CAAqB,EAACL,cAAcF;IAElD,IAAIM,QAAQV,MAAM,KAAK,GAAG;QACxBC,QAAQC,GAAG,CAAC,AAAC,QAAe,OAARE,SAAQ;QAC5BH,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZU,sBAAsBN;QACtBH,IAAAA,mBAAI,EAAC;QACL;IACF;IAEA,IAAIO,QAAQV,MAAM,GAAG,GAAG;QACtBC,QAAQC,GAAG,CAAC,AAAC,4BAAmC,OAARE,SAAQ;QAChD,IAAK,IAAIS,IAAI,GAAGA,IAAIH,QAAQV,MAAM,EAAEa,IAAK;YACvCZ,QAAQC,GAAG,CAAC,AAAC,KAAe,OAAXQ,OAAO,CAACG,EAAE;QAC7B;QACAZ,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZC,IAAAA,mBAAI,EAAC;QACL;IACF;IAEA,IAAIW,mBAAmBJ,OAAO,CAAC,EAAE;IACjC,IAAIK,cAAcR,aAAI,CAACC,IAAI,CAACF,cAAcQ;IAE1C,mFAAmF;IACnF,IAAIE,cAAcT,aAAI,CAACC,IAAI,CAACC,wBAAW,EAAE;IACzC,IAAIQ,WAAE,CAACC,UAAU,CAACF,cAAc;QAC9B,IAAIG,iBAAiBF,WAAE,CAACG,YAAY,CAACJ,aAAa,QAAQX,IAAI;QAE9D,gCAAgC;QAChC,IAAIgB,oBAAoBF,eAAeG,OAAO,CAAC,MAAM;QACrD,IAAIC,sBAAsBT,iBAAiBQ,OAAO,CAAC,MAAM;QAEzD,IAAIC,wBAAwBF,mBAAmB;YAC7CpB,QAAQuB,KAAK,CAAC,AAAC,oCAAoD,OAAjBV,kBAAiB;YACnEb,QAAQuB,KAAK,CAAC;YACdvB,QAAQuB,KAAK,CAAC;YACdvB,QAAQuB,KAAK,CAAC;YACdrB,IAAAA,mBAAI,EAAC;YACL;QACF;IACF;IAEA,+BAA+B;IAC/B,IAAI;QACFsB,IAAAA,gBAAM,EAACV;QACPd,QAAQC,GAAG,CAAC,AAAC,gBAAgC,OAAjBY;IAC9B,EAAE,OAAOY,KAAK;QACZzB,QAAQuB,KAAK,CAAC,AAAC,yBAAyC,OAAjBV,kBAAiB,MAAI,AAACY,IAAcC,OAAO;QAClFxB,IAAAA,mBAAI,EAAC;QACL;IACF;IAEAA,IAAAA,mBAAI,EAAC;AACP;AAEA;;CAEC,GACD,SAASS,sBAAsBN,YAAoB;IACjD,IAAIsB,WAAWC,IAAAA,gDAAuB,EAACvB;IAEvC,IAAIsB,SAAS5B,MAAM,KAAK,GAAG;QACzBC,QAAQC,GAAG,CAAC;IACd,OAAO;QACL,IAAK,IAAIW,IAAI,GAAGA,IAAIe,SAAS5B,MAAM,EAAEa,IAAK;YACxCZ,QAAQC,GAAG,CAAC,AAAC,KAAgB,OAAZ0B,QAAQ,CAACf,EAAE;QAC9B;IACF;AACF"}
|
|
@@ -13,7 +13,7 @@ Object.defineProperty(exports, /**
|
|
|
13
13
|
return whichCmd;
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
|
-
var
|
|
16
|
+
var _exitcompat = /*#__PURE__*/ _interop_require_default(require("exit-compat"));
|
|
17
17
|
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
18
18
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
19
19
|
var _constantsts = require("../constants.js");
|
|
@@ -32,7 +32,7 @@ function whichCmd(_args) {
|
|
|
32
32
|
console.log('To configure a version:');
|
|
33
33
|
console.log(' nvu local <version> - Set version for this project');
|
|
34
34
|
console.log(' nvu default <version> - Set global default');
|
|
35
|
-
(0,
|
|
35
|
+
(0, _exitcompat.default)(1);
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
// Check if the version is installed
|
|
@@ -61,7 +61,7 @@ function whichCmd(_args) {
|
|
|
61
61
|
} else {
|
|
62
62
|
console.log("Status: Not installed (run: nvu install ".concat(version, ")"));
|
|
63
63
|
}
|
|
64
|
-
(0,
|
|
64
|
+
(0, _exitcompat.default)(0);
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
67
|
* Resolve version from config files (mirrors nvu binary logic)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/which.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu which\n *\n * Show which Node binary would be used based on current directory.\n * This simulates what the nvu binary would do.\n */\nexport default function whichCmd(_args: string[]): void {\n const cwd = process.cwd();\n\n // Resolve version using the same logic as the nvu binary\n const version = resolveVersion(cwd);\n\n if (!version) {\n console.log('No Node version configured for this directory.');\n console.log('');\n console.log('To configure a version:');\n console.log(' nvu local <version> - Set version for this project');\n console.log(' nvu default <version> - Set global default');\n exit(1);\n return;\n }\n\n // Check if the version is installed\n const versionsPath = path.join(storagePath, 'installed');\n const versionPath = path.join(versionsPath, version);\n const versionPathWithV = path.join(versionsPath, `v${version}`);\n const versionPathWithoutV = path.join(versionsPath, version.replace(/^v/, ''));\n\n let actualVersionPath = '';\n if (fs.existsSync(versionPath)) {\n actualVersionPath = versionPath;\n } else if (fs.existsSync(versionPathWithV)) {\n actualVersionPath = versionPathWithV;\n } else if (fs.existsSync(versionPathWithoutV)) {\n actualVersionPath = versionPathWithoutV;\n }\n\n console.log(`Version: ${version}`);\n console.log(`Source: ${getVersionSource(cwd)}`);\n\n if (actualVersionPath) {\n const nodePath = path.join(actualVersionPath, 'bin', 'node');\n console.log(`Binary: ${nodePath}`);\n if (fs.existsSync(nodePath)) {\n console.log('Status: Installed');\n } else {\n console.log('Status: Directory exists but binary not found');\n }\n } else {\n console.log(`Status: Not installed (run: nvu install ${version})`);\n }\n\n exit(0);\n}\n\n/**\n * Resolve version from config files (mirrors nvu binary logic)\n */\nfunction resolveVersion(cwd: string): string | null {\n // Walk up directories looking for .nvurc or .nvmrc\n let dir = cwd;\n while (true) {\n // Check .nvurc first\n const nvurcPath = path.join(dir, '.nvurc');\n if (fs.existsSync(nvurcPath)) {\n return fs.readFileSync(nvurcPath, 'utf8').trim();\n }\n\n // Check .nvmrc\n const nvmrcPath = path.join(dir, '.nvmrc');\n if (fs.existsSync(nvmrcPath)) {\n return fs.readFileSync(nvmrcPath, 'utf8').trim();\n }\n\n // Move to parent\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n // Check global default\n const defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n return fs.readFileSync(defaultPath, 'utf8').trim();\n }\n\n return null;\n}\n\n/**\n * Determine the source of the version (for display)\n */\nfunction getVersionSource(cwd: string): string {\n let dir = cwd;\n while (true) {\n const nvurcPath = path.join(dir, '.nvurc');\n if (fs.existsSync(nvurcPath)) {\n return nvurcPath;\n }\n\n const nvmrcPath = path.join(dir, '.nvmrc');\n if (fs.existsSync(nvmrcPath)) {\n return nvmrcPath;\n }\n\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n const defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n return `${defaultPath} (global default)`;\n }\n\n return 'none';\n}\n"],"names":["whichCmd","_args","cwd","process","version","resolveVersion","console","log","exit","versionsPath","path","join","storagePath","versionPath","versionPathWithV","versionPathWithoutV","replace","actualVersionPath","fs","existsSync","getVersionSource","nodePath","dir","nvurcPath","readFileSync","trim","nvmrcPath","parent","dirname","defaultPath"],"mappings":";;;;+BAKA;;;;;CAKC,GACD;;;eAAwBA;;;
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/which.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu which\n *\n * Show which Node binary would be used based on current directory.\n * This simulates what the nvu binary would do.\n */\nexport default function whichCmd(_args: string[]): void {\n const cwd = process.cwd();\n\n // Resolve version using the same logic as the nvu binary\n const version = resolveVersion(cwd);\n\n if (!version) {\n console.log('No Node version configured for this directory.');\n console.log('');\n console.log('To configure a version:');\n console.log(' nvu local <version> - Set version for this project');\n console.log(' nvu default <version> - Set global default');\n exit(1);\n return;\n }\n\n // Check if the version is installed\n const versionsPath = path.join(storagePath, 'installed');\n const versionPath = path.join(versionsPath, version);\n const versionPathWithV = path.join(versionsPath, `v${version}`);\n const versionPathWithoutV = path.join(versionsPath, version.replace(/^v/, ''));\n\n let actualVersionPath = '';\n if (fs.existsSync(versionPath)) {\n actualVersionPath = versionPath;\n } else if (fs.existsSync(versionPathWithV)) {\n actualVersionPath = versionPathWithV;\n } else if (fs.existsSync(versionPathWithoutV)) {\n actualVersionPath = versionPathWithoutV;\n }\n\n console.log(`Version: ${version}`);\n console.log(`Source: ${getVersionSource(cwd)}`);\n\n if (actualVersionPath) {\n const nodePath = path.join(actualVersionPath, 'bin', 'node');\n console.log(`Binary: ${nodePath}`);\n if (fs.existsSync(nodePath)) {\n console.log('Status: Installed');\n } else {\n console.log('Status: Directory exists but binary not found');\n }\n } else {\n console.log(`Status: Not installed (run: nvu install ${version})`);\n }\n\n exit(0);\n}\n\n/**\n * Resolve version from config files (mirrors nvu binary logic)\n */\nfunction resolveVersion(cwd: string): string | null {\n // Walk up directories looking for .nvurc or .nvmrc\n let dir = cwd;\n while (true) {\n // Check .nvurc first\n const nvurcPath = path.join(dir, '.nvurc');\n if (fs.existsSync(nvurcPath)) {\n return fs.readFileSync(nvurcPath, 'utf8').trim();\n }\n\n // Check .nvmrc\n const nvmrcPath = path.join(dir, '.nvmrc');\n if (fs.existsSync(nvmrcPath)) {\n return fs.readFileSync(nvmrcPath, 'utf8').trim();\n }\n\n // Move to parent\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n // Check global default\n const defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n return fs.readFileSync(defaultPath, 'utf8').trim();\n }\n\n return null;\n}\n\n/**\n * Determine the source of the version (for display)\n */\nfunction getVersionSource(cwd: string): string {\n let dir = cwd;\n while (true) {\n const nvurcPath = path.join(dir, '.nvurc');\n if (fs.existsSync(nvurcPath)) {\n return nvurcPath;\n }\n\n const nvmrcPath = path.join(dir, '.nvmrc');\n if (fs.existsSync(nvmrcPath)) {\n return nvmrcPath;\n }\n\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n const defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n return `${defaultPath} (global default)`;\n }\n\n return 'none';\n}\n"],"names":["whichCmd","_args","cwd","process","version","resolveVersion","console","log","exit","versionsPath","path","join","storagePath","versionPath","versionPathWithV","versionPathWithoutV","replace","actualVersionPath","fs","existsSync","getVersionSource","nodePath","dir","nvurcPath","readFileSync","trim","nvmrcPath","parent","dirname","defaultPath"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find all installed versions matching the given version string
|
|
3
|
+
* Results are sorted in ascending semver order (lowest first, highest last)
|
|
4
|
+
*/
|
|
5
|
+
export declare function findInstalledVersions(versionsPath: string, version: string): string[];
|
|
6
|
+
/**
|
|
7
|
+
* Get all installed versions
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAllInstalledVersions(versionsPath: string): string[];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Find all installed versions matching the given version string
|
|
3
|
+
* Results are sorted in ascending semver order (lowest first, highest last)
|
|
4
|
+
*/
|
|
5
|
+
export declare function findInstalledVersions(versionsPath: string, version: string): string[];
|
|
6
|
+
/**
|
|
7
|
+
* Get all installed versions
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAllInstalledVersions(versionsPath: string): string[];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get findInstalledVersions () {
|
|
13
|
+
return findInstalledVersions;
|
|
14
|
+
},
|
|
15
|
+
get getAllInstalledVersions () {
|
|
16
|
+
return getAllInstalledVersions;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
|
|
20
|
+
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
21
|
+
var _compatts = require("../compat.js");
|
|
22
|
+
function _interop_require_default(obj) {
|
|
23
|
+
return obj && obj.__esModule ? obj : {
|
|
24
|
+
default: obj
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Compare two semver version strings (e.g., "20.19.0" vs "20.9.1")
|
|
29
|
+
* Returns: negative if a < b, positive if a > b, 0 if equal
|
|
30
|
+
*/ function compareVersions(a, b) {
|
|
31
|
+
var aParts = a.replace(/^v/, '').split('.');
|
|
32
|
+
var bParts = b.replace(/^v/, '').split('.');
|
|
33
|
+
var len = Math.max(aParts.length, bParts.length);
|
|
34
|
+
for(var i = 0; i < len; i++){
|
|
35
|
+
var aNum = parseInt(aParts[i], 10) || 0;
|
|
36
|
+
var bNum = parseInt(bParts[i], 10) || 0;
|
|
37
|
+
if (aNum !== bNum) {
|
|
38
|
+
return aNum - bNum;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
function findInstalledVersions(versionsPath, version) {
|
|
44
|
+
if (!_fs.default.existsSync(versionsPath)) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
var normalizedVersion = version.replace(/^v/, '');
|
|
48
|
+
var matches = [];
|
|
49
|
+
// Try exact matches first
|
|
50
|
+
var exactMatches = [
|
|
51
|
+
version,
|
|
52
|
+
"v".concat(normalizedVersion),
|
|
53
|
+
normalizedVersion
|
|
54
|
+
];
|
|
55
|
+
for(var i = 0; i < exactMatches.length; i++){
|
|
56
|
+
var v = exactMatches[i];
|
|
57
|
+
var versionPath = _path.default.join(versionsPath, v);
|
|
58
|
+
if (_fs.default.existsSync(versionPath) && _fs.default.statSync(versionPath).isDirectory()) {
|
|
59
|
+
if (matches.indexOf(v) === -1) {
|
|
60
|
+
matches.push(v);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// If we have an exact match, return just that
|
|
65
|
+
if (matches.length > 0) {
|
|
66
|
+
return matches;
|
|
67
|
+
}
|
|
68
|
+
// Try partial match (e.g., "20" matches "v20.19.6")
|
|
69
|
+
var entries = (0, _compatts.readdirWithTypes)(versionsPath);
|
|
70
|
+
for(var j = 0; j < entries.length; j++){
|
|
71
|
+
var entry = entries[j];
|
|
72
|
+
if (!entry.isDirectory()) continue;
|
|
73
|
+
var dirVersion = entry.name.replace(/^v/, '');
|
|
74
|
+
if (dirVersion.indexOf("".concat(normalizedVersion, ".")) === 0) {
|
|
75
|
+
matches.push(entry.name);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Sort by semver (ascending) so highest version is last
|
|
79
|
+
matches.sort(compareVersions);
|
|
80
|
+
return matches;
|
|
81
|
+
}
|
|
82
|
+
function getAllInstalledVersions(versionsPath) {
|
|
83
|
+
if (!_fs.default.existsSync(versionsPath)) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
var entries = (0, _compatts.readdirWithTypes)(versionsPath);
|
|
87
|
+
var versions = [];
|
|
88
|
+
for(var i = 0; i < entries.length; i++){
|
|
89
|
+
if (entries[i].isDirectory()) {
|
|
90
|
+
versions.push(entries[i].name);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return versions;
|
|
94
|
+
}
|
|
95
|
+
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
|
|
@@ -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":["findInstalledVersions","getAllInstalledVersions","compareVersions","a","b","aParts","replace","split","bParts","len","Math","max","length","i","aNum","parseInt","bNum","versionsPath","version","fs","existsSync","normalizedVersion","matches","exactMatches","v","versionPath","path","join","statSync","isDirectory","indexOf","push","entries","readdirWithTypes","j","entry","dirVersion","name","sort","versions"],"mappings":";;;;;;;;;;;QA2BgBA;eAAAA;;QA6CAC;eAAAA;;;yDAxED;2DACE;wBACgB;;;;;;AAEjC;;;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;AAMO,SAAShB,sBAAsBiB,YAAoB,EAAEC,OAAe;IACzE,IAAI,CAACC,WAAE,CAACC,UAAU,CAACH,eAAe;QAChC,OAAO,EAAE;IACX;IAEA,IAAII,oBAAoBH,QAAQZ,OAAO,CAAC,MAAM;IAC9C,IAAIgB,UAAoB,EAAE;IAE1B,0BAA0B;IAC1B,IAAIC,eAAe;QAACL;QAAU,IAAqB,OAAlBG;QAAqBA;KAAkB;IACxE,IAAK,IAAIR,IAAI,GAAGA,IAAIU,aAAaX,MAAM,EAAEC,IAAK;QAC5C,IAAIW,IAAID,YAAY,CAACV,EAAE;QACvB,IAAIY,cAAcC,aAAI,CAACC,IAAI,CAACV,cAAcO;QAC1C,IAAIL,WAAE,CAACC,UAAU,CAACK,gBAAgBN,WAAE,CAACS,QAAQ,CAACH,aAAaI,WAAW,IAAI;YACxE,IAAIP,QAAQQ,OAAO,CAACN,OAAO,CAAC,GAAG;gBAC7BF,QAAQS,IAAI,CAACP;YACf;QACF;IACF;IAEA,8CAA8C;IAC9C,IAAIF,QAAQV,MAAM,GAAG,GAAG;QACtB,OAAOU;IACT;IAEA,oDAAoD;IACpD,IAAIU,UAAUC,IAAAA,0BAAgB,EAAChB;IAC/B,IAAK,IAAIiB,IAAI,GAAGA,IAAIF,QAAQpB,MAAM,EAAEsB,IAAK;QACvC,IAAIC,QAAQH,OAAO,CAACE,EAAE;QACtB,IAAI,CAACC,MAAMN,WAAW,IAAI;QAC1B,IAAIO,aAAaD,MAAME,IAAI,CAAC/B,OAAO,CAAC,MAAM;QAC1C,IAAI8B,WAAWN,OAAO,CAAC,AAAC,GAAoB,OAAlBT,mBAAkB,UAAQ,GAAG;YACrDC,QAAQS,IAAI,CAACI,MAAME,IAAI;QACzB;IACF;IAEA,wDAAwD;IACxDf,QAAQgB,IAAI,CAACpC;IAEb,OAAOoB;AACT;AAKO,SAASrB,wBAAwBgB,YAAoB;IAC1D,IAAI,CAACE,WAAE,CAACC,UAAU,CAACH,eAAe;QAChC,OAAO,EAAE;IACX;IAEA,IAAIe,UAAUC,IAAAA,0BAAgB,EAAChB;IAC/B,IAAIsB,WAAqB,EAAE;IAC3B,IAAK,IAAI1B,IAAI,GAAGA,IAAImB,QAAQpB,MAAM,EAAEC,IAAK;QACvC,IAAImB,OAAO,CAACnB,EAAE,CAACgB,WAAW,IAAI;YAC5BU,SAASR,IAAI,CAACC,OAAO,CAACnB,EAAE,CAACwB,IAAI;QAC/B;IACF;IAEA,OAAOE;AACT"}
|
package/dist/esm/cli.js
CHANGED
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/cli.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport { createSession, figures, formatArguments } from 'spawn-term';\nimport url from 'url';\nimport { isCommand, runCommand } from './commands/index.ts';\nimport run from './index.ts';\nimport type { UseError, UseOptions, UseResult } from './types.ts';\n\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nconst ERROR_CODE = 13;\n\nfunction getVersion(): string {\n const packagePath = path.join(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction printHelp(name: string): void {\n const version = getVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} [options] <version> <command> [args...]`);\n console.log(` ${name} <subcommand> [args...]`);\n console.log('');\n console.log('Run commands with specific Node.js versions');\n console.log('');\n console.log('Subcommands:');\n console.log(' default [version] Set or display the global default Node version');\n console.log(' local [version] Set or display the local Node version (.nvmrc)');\n console.log(' install <version> Download and install a Node version');\n console.log(' uninstall <version> Remove an installed Node version');\n console.log(' list List installed Node versions');\n console.log(' which Show which Node version would be used');\n console.log(' setup Install/reinstall binaries to ~/.nvu/bin');\n console.log(' teardown Remove binaries from ~/.nvu/bin');\n console.log('');\n console.log('Options:');\n console.log(' -v, --version Print version number');\n console.log(' -h, --help Print this help message');\n console.log(' -r, --range Range type (major, minor, patch) with filters (lts, even, odd)');\n console.log(' Default: major,even');\n console.log(' -d, --desc Sort versions in descending order');\n console.log(' -e, --expanded Use expanded version format');\n console.log(' -s, --streaming Enable streaming output');\n console.log(' --silent Suppress logging');\n console.log('');\n console.log('Examples:');\n console.log(` ${name} 22 node --version Run with Node 22`);\n console.log(` ${name} 22,20,18 npm test Run with multiple versions`);\n console.log(` ${name} engines node --version Use version from package.json`);\n console.log(` ${name} default 20 Set global default to Node 20`);\n console.log(` ${name} local 18 Create .nvmrc with Node 18`);\n}\n\nexport default (argv: string[], name: string): undefined => {\n const options = getopts(argv, {\n alias: { range: 'r', desc: 'd', expanded: 'e', streaming: 's', silent: 'si', version: 'v', help: 'h' },\n default: { range: 'major,even', interactive: true },\n boolean: ['silent', 'desc', 'expanded', 'streaming', 'interactive', 'version', 'help'],\n stopEarly: true,\n });\n\n if (options.version) {\n console.log(getVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n printHelp(name);\n exit(0);\n return;\n }\n\n // Check if first argument is a subcommand\n const args = options._;\n if (args.length > 0 && isCommand(args[0])) {\n runCommand(args[0], args.slice(1));\n return;\n }\n\n // define.option('-r, --range [range]', 'range type of major, minor, or patch with filters of lts, even, odd for version string expressions', 'major,even');\n // define.option('-s, --silent', 'suppress logging', false);\n options.sort = options.desc ? -1 : 1;\n\n if (args.length === 0) {\n console.log(`Missing version expression. Example usage: ${name} version command arg1 arg2`);\n exit(ERROR_CODE);\n return;\n }\n if (args.length === 1) {\n console.log(`Missing command. Example usage: ${name} version command arg1 arg2`);\n exit(ERROR_CODE);\n return;\n }\n\n options.stdio = 'inherit'; // pass through stdio\n run(args[0], args[1], args.slice(2), options as unknown as UseOptions, (err: UseError, results: UseResult[]): undefined => {\n if (err && !err.results) {\n console.log(err.message);\n exit(ERROR_CODE);\n return;\n }\n if (err) results = err.results;\n const errors = results.filter((result) => !!result.error);\n\n if (!options.silent) {\n if (!createSession) {\n console.log('\\n======================');\n results.forEach((res) => {\n console.log(`${res.error ? figures.cross : figures.tick} ${res.version}${res.error ? ` Error: ${res.error.message}` : ''}`);\n });\n console.log('\\n----------------------');\n console.log(`${name} ${formatArguments(args).join(' ')}`);\n console.log(`${figures.tick} ${results.length - errors.length} succeeded`);\n if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);\n }\n }\n exit(err || errors.length ? ERROR_CODE : 0);\n });\n};\n"],"names":["exit","fs","getopts","path","createSession","figures","formatArguments","url","isCommand","runCommand","run","__dirname","dirname","__filename","fileURLToPath","ERROR_CODE","getVersion","packagePath","join","packageJson","JSON","parse","readFileSync","version","printHelp","name","console","log","argv","options","alias","range","desc","expanded","streaming","silent","help","default","interactive","boolean","stopEarly","args","_","length","slice","sort","stdio","err","results","message","errors","filter","result","error","forEach","res","cross","tick"],"mappings":"AAAA,OAAOA,UAAU,
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/cli.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport { createSession, figures, formatArguments } from 'spawn-term';\nimport url from 'url';\nimport { isCommand, runCommand } from './commands/index.ts';\nimport run from './index.ts';\nimport type { UseError, UseOptions, UseResult } from './types.ts';\n\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nconst ERROR_CODE = 13;\n\nfunction getVersion(): string {\n const packagePath = path.join(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction printHelp(name: string): void {\n const version = getVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} [options] <version> <command> [args...]`);\n console.log(` ${name} <subcommand> [args...]`);\n console.log('');\n console.log('Run commands with specific Node.js versions');\n console.log('');\n console.log('Subcommands:');\n console.log(' default [version] Set or display the global default Node version');\n console.log(' local [version] Set or display the local Node version (.nvmrc)');\n console.log(' install <version> Download and install a Node version');\n console.log(' uninstall <version> Remove an installed Node version');\n console.log(' list List installed Node versions');\n console.log(' which Show which Node version would be used');\n console.log(' setup Install/reinstall binaries to ~/.nvu/bin');\n console.log(' teardown Remove binaries from ~/.nvu/bin');\n console.log('');\n console.log('Options:');\n console.log(' -v, --version Print version number');\n console.log(' -h, --help Print this help message');\n console.log(' -r, --range Range type (major, minor, patch) with filters (lts, even, odd)');\n console.log(' Default: major,even');\n console.log(' -d, --desc Sort versions in descending order');\n console.log(' -e, --expanded Use expanded version format');\n console.log(' -s, --streaming Enable streaming output');\n console.log(' --silent Suppress logging');\n console.log('');\n console.log('Examples:');\n console.log(` ${name} 22 node --version Run with Node 22`);\n console.log(` ${name} 22,20,18 npm test Run with multiple versions`);\n console.log(` ${name} engines node --version Use version from package.json`);\n console.log(` ${name} default 20 Set global default to Node 20`);\n console.log(` ${name} local 18 Create .nvmrc with Node 18`);\n}\n\nexport default (argv: string[], name: string): undefined => {\n const options = getopts(argv, {\n alias: { range: 'r', desc: 'd', expanded: 'e', streaming: 's', silent: 'si', version: 'v', help: 'h' },\n default: { range: 'major,even', interactive: true },\n boolean: ['silent', 'desc', 'expanded', 'streaming', 'interactive', 'version', 'help'],\n stopEarly: true,\n });\n\n if (options.version) {\n console.log(getVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n printHelp(name);\n exit(0);\n return;\n }\n\n // Check if first argument is a subcommand\n const args = options._;\n if (args.length > 0 && isCommand(args[0])) {\n runCommand(args[0], args.slice(1));\n return;\n }\n\n // define.option('-r, --range [range]', 'range type of major, minor, or patch with filters of lts, even, odd for version string expressions', 'major,even');\n // define.option('-s, --silent', 'suppress logging', false);\n options.sort = options.desc ? -1 : 1;\n\n if (args.length === 0) {\n console.log(`Missing version expression. Example usage: ${name} version command arg1 arg2`);\n exit(ERROR_CODE);\n return;\n }\n if (args.length === 1) {\n console.log(`Missing command. Example usage: ${name} version command arg1 arg2`);\n exit(ERROR_CODE);\n return;\n }\n\n options.stdio = 'inherit'; // pass through stdio\n run(args[0], args[1], args.slice(2), options as unknown as UseOptions, (err: UseError, results: UseResult[]): undefined => {\n if (err && !err.results) {\n console.log(err.message);\n exit(ERROR_CODE);\n return;\n }\n if (err) results = err.results;\n const errors = results.filter((result) => !!result.error);\n\n if (!options.silent) {\n if (!createSession) {\n console.log('\\n======================');\n results.forEach((res) => {\n console.log(`${res.error ? figures.cross : figures.tick} ${res.version}${res.error ? ` Error: ${res.error.message}` : ''}`);\n });\n console.log('\\n----------------------');\n console.log(`${name} ${formatArguments(args).join(' ')}`);\n console.log(`${figures.tick} ${results.length - errors.length} succeeded`);\n if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);\n }\n }\n exit(err || errors.length ? ERROR_CODE : 0);\n });\n};\n"],"names":["exit","fs","getopts","path","createSession","figures","formatArguments","url","isCommand","runCommand","run","__dirname","dirname","__filename","fileURLToPath","ERROR_CODE","getVersion","packagePath","join","packageJson","JSON","parse","readFileSync","version","printHelp","name","console","log","argv","options","alias","range","desc","expanded","streaming","silent","help","default","interactive","boolean","stopEarly","args","_","length","slice","sort","stdio","err","results","message","errors","filter","result","error","forEach","res","cross","tick"],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import exit from 'exit';
|
|
1
|
+
import exit from 'exit-compat';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import { mkdirpSync } from '../compat.js';
|
|
5
5
|
import { storagePath } from '../constants.js';
|
|
6
|
+
import { findInstalledVersions } from '../lib/findInstalledVersions.js';
|
|
7
|
+
import loadNodeVersionInstall from '../lib/loadNodeVersionInstall.js';
|
|
6
8
|
/**
|
|
7
9
|
* nvu default [version]
|
|
8
10
|
*
|
|
@@ -10,6 +12,7 @@ import { storagePath } from '../constants.js';
|
|
|
10
12
|
* This is used when no .nvmrc or .nvurc is found in the project.
|
|
11
13
|
*/ export default function defaultCmd(args) {
|
|
12
14
|
var defaultFilePath = path.join(storagePath, 'default');
|
|
15
|
+
var versionsPath = path.join(storagePath, 'installed');
|
|
13
16
|
// If no version provided, display current default
|
|
14
17
|
if (args.length === 0) {
|
|
15
18
|
if (fs.existsSync(defaultFilePath)) {
|
|
@@ -34,8 +37,71 @@ import { storagePath } from '../constants.js';
|
|
|
34
37
|
if (!fs.existsSync(storagePath)) {
|
|
35
38
|
mkdirpSync(storagePath);
|
|
36
39
|
}
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
// Check if any installed versions match
|
|
41
|
+
var matches = findInstalledVersions(versionsPath, version);
|
|
42
|
+
if (matches.length > 0) {
|
|
43
|
+
// Version is installed - resolve to exact and set default
|
|
44
|
+
setDefaultToExact(defaultFilePath, matches);
|
|
45
|
+
} else {
|
|
46
|
+
// Version not installed - auto-install it
|
|
47
|
+
console.log(`Node ${version} is not installed. Installing...`);
|
|
48
|
+
autoInstallAndSetDefault(version, versionsPath, defaultFilePath);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Set the default to the highest matching installed version
|
|
53
|
+
*/ function setDefaultToExact(defaultFilePath, matches) {
|
|
54
|
+
// matches are sorted by findInstalledVersions, take the last (highest)
|
|
55
|
+
var exactVersion = matches[matches.length - 1];
|
|
56
|
+
// Ensure it has v prefix for consistency
|
|
57
|
+
if (exactVersion.indexOf('v') !== 0) {
|
|
58
|
+
exactVersion = `v${exactVersion}`;
|
|
59
|
+
}
|
|
60
|
+
// Write the exact version
|
|
61
|
+
fs.writeFileSync(defaultFilePath, `${exactVersion}\n`, 'utf8');
|
|
62
|
+
console.log(`Default Node version set to: ${exactVersion}`);
|
|
40
63
|
exit(0);
|
|
41
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Auto-install the version and then set it as default
|
|
67
|
+
*/ function autoInstallAndSetDefault(version, versionsPath, defaultFilePath) {
|
|
68
|
+
loadNodeVersionInstall((err, nodeVersionInstall)=>{
|
|
69
|
+
if (err || !nodeVersionInstall) {
|
|
70
|
+
console.error('Failed to load node-version-install:', err ? err.message : 'Module not available');
|
|
71
|
+
exit(1);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
nodeVersionInstall(version, {
|
|
75
|
+
installPath: versionsPath
|
|
76
|
+
}, (installErr, results)=>{
|
|
77
|
+
if (installErr) {
|
|
78
|
+
console.error(`Failed to install Node ${version}:`, installErr.message);
|
|
79
|
+
exit(1);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Get the installed version from results
|
|
83
|
+
var installedVersion;
|
|
84
|
+
if (results && results.length > 0) {
|
|
85
|
+
installedVersion = results[0].version;
|
|
86
|
+
} else {
|
|
87
|
+
// Fallback: re-scan installed versions
|
|
88
|
+
var matches = findInstalledVersions(versionsPath, version);
|
|
89
|
+
if (matches.length === 0) {
|
|
90
|
+
console.error('Installation completed but version not found');
|
|
91
|
+
exit(1);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
installedVersion = matches[matches.length - 1];
|
|
95
|
+
}
|
|
96
|
+
// Ensure it has v prefix for consistency
|
|
97
|
+
if (installedVersion.indexOf('v') !== 0) {
|
|
98
|
+
installedVersion = `v${installedVersion}`;
|
|
99
|
+
}
|
|
100
|
+
// Write the exact version
|
|
101
|
+
fs.writeFileSync(defaultFilePath, `${installedVersion}\n`, 'utf8');
|
|
102
|
+
console.log(`Node ${installedVersion} installed successfully.`);
|
|
103
|
+
console.log(`Default Node version set to: ${installedVersion}`);
|
|
104
|
+
exit(0);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/default.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { mkdirpSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu default [version]\n *\n * Set or display the global default Node version.\n * This is used when no .nvmrc or .nvurc is found in the project.\n */\nexport default function defaultCmd(args: string[]): void {\n var defaultFilePath = path.join(storagePath, 'default');\n\n // If no version provided, display current default\n if (args.length === 0) {\n if (fs.existsSync(defaultFilePath)) {\n var currentVersion = fs.readFileSync(defaultFilePath, 'utf8').trim();\n console.log(`Current default: ${currentVersion}`);\n } else {\n console.log('No default version set.');\n console.log('Usage: nvu default <version>');\n }\n exit(0);\n return;\n }\n\n var version = args[0].trim();\n\n // Validate version format (basic check, indexOf for Node 0.8+ compat)\n if (!version || version.indexOf('-') === 0) {\n console.log('Usage: nvu default <version>');\n console.log('Example: nvu default 20');\n exit(1);\n return;\n }\n\n // Ensure storage directory exists\n if (!fs.existsSync(storagePath)) {\n mkdirpSync(storagePath);\n }\n\n //
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/default.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport path from 'path';\nimport { mkdirpSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\nimport { findInstalledVersions } from '../lib/findInstalledVersions.ts';\nimport loadNodeVersionInstall from '../lib/loadNodeVersionInstall.ts';\n\n/**\n * nvu default [version]\n *\n * Set or display the global default Node version.\n * This is used when no .nvmrc or .nvurc is found in the project.\n */\nexport default function defaultCmd(args: string[]): void {\n var defaultFilePath = path.join(storagePath, 'default');\n var versionsPath = path.join(storagePath, 'installed');\n\n // If no version provided, display current default\n if (args.length === 0) {\n if (fs.existsSync(defaultFilePath)) {\n var currentVersion = fs.readFileSync(defaultFilePath, 'utf8').trim();\n console.log(`Current default: ${currentVersion}`);\n } else {\n console.log('No default version set.');\n console.log('Usage: nvu default <version>');\n }\n exit(0);\n return;\n }\n\n var version = args[0].trim();\n\n // Validate version format (basic check, indexOf for Node 0.8+ compat)\n if (!version || version.indexOf('-') === 0) {\n console.log('Usage: nvu default <version>');\n console.log('Example: nvu default 20');\n exit(1);\n return;\n }\n\n // Ensure storage directory exists\n if (!fs.existsSync(storagePath)) {\n mkdirpSync(storagePath);\n }\n\n // Check if any installed versions match\n var matches = findInstalledVersions(versionsPath, version);\n\n if (matches.length > 0) {\n // Version is installed - resolve to exact and set default\n setDefaultToExact(defaultFilePath, matches);\n } else {\n // Version not installed - auto-install it\n console.log(`Node ${version} is not installed. Installing...`);\n autoInstallAndSetDefault(version, versionsPath, defaultFilePath);\n }\n}\n\n/**\n * Set the default to the highest matching installed version\n */\nfunction setDefaultToExact(defaultFilePath: string, matches: string[]): void {\n // matches are sorted by findInstalledVersions, take the last (highest)\n var exactVersion = matches[matches.length - 1];\n\n // Ensure it has v prefix for consistency\n if (exactVersion.indexOf('v') !== 0) {\n exactVersion = `v${exactVersion}`;\n }\n\n // Write the exact version\n fs.writeFileSync(defaultFilePath, `${exactVersion}\\n`, 'utf8');\n console.log(`Default Node version set to: ${exactVersion}`);\n\n exit(0);\n}\n\n/**\n * Auto-install the version and then set it as default\n */\nfunction autoInstallAndSetDefault(version: string, versionsPath: string, defaultFilePath: string): void {\n loadNodeVersionInstall((err, nodeVersionInstall) => {\n if (err || !nodeVersionInstall) {\n console.error('Failed to load node-version-install:', err ? err.message : 'Module not available');\n exit(1);\n return;\n }\n\n nodeVersionInstall(\n version,\n {\n installPath: versionsPath,\n },\n (installErr, results) => {\n if (installErr) {\n console.error(`Failed to install Node ${version}:`, installErr.message);\n exit(1);\n return;\n }\n\n // Get the installed version from results\n var installedVersion: string;\n if (results && results.length > 0) {\n installedVersion = results[0].version;\n } else {\n // Fallback: re-scan installed versions\n var matches = findInstalledVersions(versionsPath, version);\n if (matches.length === 0) {\n console.error('Installation completed but version not found');\n exit(1);\n return;\n }\n installedVersion = matches[matches.length - 1];\n }\n\n // Ensure it has v prefix for consistency\n if (installedVersion.indexOf('v') !== 0) {\n installedVersion = `v${installedVersion}`;\n }\n\n // Write the exact version\n fs.writeFileSync(defaultFilePath, `${installedVersion}\\n`, 'utf8');\n console.log(`Node ${installedVersion} installed successfully.`);\n console.log(`Default Node version set to: ${installedVersion}`);\n\n exit(0);\n }\n );\n });\n}\n"],"names":["exit","fs","path","mkdirpSync","storagePath","findInstalledVersions","loadNodeVersionInstall","defaultCmd","args","defaultFilePath","join","versionsPath","length","existsSync","currentVersion","readFileSync","trim","console","log","version","indexOf","matches","setDefaultToExact","autoInstallAndSetDefault","exactVersion","writeFileSync","err","nodeVersionInstall","error","message","installPath","installErr","results","installedVersion"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/install.ts"],"sourcesContent":["import exit from 'exit';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\nimport loadNodeVersionInstall from '../lib/loadNodeVersionInstall.ts';\n\n/**\n * nvu install <version>\n *\n * Download and install a specific Node version.\n */\nexport default function installCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu install <version>');\n console.log('Example: nvu install 20');\n console.log(' nvu install 20.10.0');\n console.log(' nvu install lts');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n\n // Validate version format (basic check, indexOf for Node 0.8+ compat)\n if (!version || version.indexOf('-') === 0) {\n console.log('Usage: nvu install <version>');\n exit(1);\n return;\n }\n\n console.log(`Installing Node ${version}...`);\n\n // Load node-version-install dynamically\n loadNodeVersionInstall((err, nodeVersionInstall) => {\n if (err || !nodeVersionInstall) {\n console.error('Failed to load node-version-install:', err?.message || 'Module not available');\n console.error('Make sure node-version-install is installed: npm install node-version-install');\n exit(1);\n return;\n }\n\n const versionsPath = path.join(storagePath, 'installed');\n\n nodeVersionInstall(\n version,\n {\n installPath: versionsPath,\n },\n (installErr?: Error, results?: { version: string; installPath: string }[]) => {\n if (installErr) {\n console.error(`Failed to install Node ${version}:`, installErr.message);\n exit(1);\n return;\n }\n\n if (results && results.length > 0) {\n const result = results[0];\n console.log(`Successfully installed Node ${result.version}`);\n console.log(`Location: ${result.installPath}`);\n } else {\n console.log(`Node ${version} installed successfully.`);\n }\n exit(0);\n }\n );\n });\n}\n"],"names":["exit","path","storagePath","loadNodeVersionInstall","installCmd","args","length","console","log","version","trim","indexOf","err","nodeVersionInstall","error","message","versionsPath","join","installPath","installErr","results","result"],"mappings":"AAAA,OAAOA,UAAU,
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/install.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\nimport loadNodeVersionInstall from '../lib/loadNodeVersionInstall.ts';\n\n/**\n * nvu install <version>\n *\n * Download and install a specific Node version.\n */\nexport default function installCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu install <version>');\n console.log('Example: nvu install 20');\n console.log(' nvu install 20.10.0');\n console.log(' nvu install lts');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n\n // Validate version format (basic check, indexOf for Node 0.8+ compat)\n if (!version || version.indexOf('-') === 0) {\n console.log('Usage: nvu install <version>');\n exit(1);\n return;\n }\n\n console.log(`Installing Node ${version}...`);\n\n // Load node-version-install dynamically\n loadNodeVersionInstall((err, nodeVersionInstall) => {\n if (err || !nodeVersionInstall) {\n console.error('Failed to load node-version-install:', err?.message || 'Module not available');\n console.error('Make sure node-version-install is installed: npm install node-version-install');\n exit(1);\n return;\n }\n\n const versionsPath = path.join(storagePath, 'installed');\n\n nodeVersionInstall(\n version,\n {\n installPath: versionsPath,\n },\n (installErr?: Error, results?: { version: string; installPath: string }[]) => {\n if (installErr) {\n console.error(`Failed to install Node ${version}:`, installErr.message);\n exit(1);\n return;\n }\n\n if (results && results.length > 0) {\n const result = results[0];\n console.log(`Successfully installed Node ${result.version}`);\n console.log(`Location: ${result.installPath}`);\n } else {\n console.log(`Node ${version} installed successfully.`);\n }\n exit(0);\n }\n );\n });\n}\n"],"names":["exit","path","storagePath","loadNodeVersionInstall","installCmd","args","length","console","log","version","trim","indexOf","err","nodeVersionInstall","error","message","versionsPath","join","installPath","installErr","results","result"],"mappings":"AAAA,OAAOA,UAAU,cAAc;AAC/B,OAAOC,UAAU,OAAO;AACxB,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,OAAOC,4BAA4B,mCAAmC;AAEtE;;;;CAIC,GACD,eAAe,SAASC,WAAWC,IAAc;IAC/C,IAAIA,KAAKC,MAAM,KAAK,GAAG;QACrBC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZR,KAAK;QACL;IACF;IAEA,MAAMS,UAAUJ,IAAI,CAAC,EAAE,CAACK,IAAI;IAE5B,sEAAsE;IACtE,IAAI,CAACD,WAAWA,QAAQE,OAAO,CAAC,SAAS,GAAG;QAC1CJ,QAAQC,GAAG,CAAC;QACZR,KAAK;QACL;IACF;IAEAO,QAAQC,GAAG,CAAC,CAAC,gBAAgB,EAAEC,QAAQ,GAAG,CAAC;IAE3C,wCAAwC;IACxCN,uBAAuB,CAACS,KAAKC;QAC3B,IAAID,OAAO,CAACC,oBAAoB;YAC9BN,QAAQO,KAAK,CAAC,wCAAwCF,CAAAA,gBAAAA,0BAAAA,IAAKG,OAAO,KAAI;YACtER,QAAQO,KAAK,CAAC;YACdd,KAAK;YACL;QACF;QAEA,MAAMgB,eAAef,KAAKgB,IAAI,CAACf,aAAa;QAE5CW,mBACEJ,SACA;YACES,aAAaF;QACf,GACA,CAACG,YAAoBC;YACnB,IAAID,YAAY;gBACdZ,QAAQO,KAAK,CAAC,CAAC,uBAAuB,EAAEL,QAAQ,CAAC,CAAC,EAAEU,WAAWJ,OAAO;gBACtEf,KAAK;gBACL;YACF;YAEA,IAAIoB,WAAWA,QAAQd,MAAM,GAAG,GAAG;gBACjC,MAAMe,SAASD,OAAO,CAAC,EAAE;gBACzBb,QAAQC,GAAG,CAAC,CAAC,4BAA4B,EAAEa,OAAOZ,OAAO,EAAE;gBAC3DF,QAAQC,GAAG,CAAC,CAAC,UAAU,EAAEa,OAAOH,WAAW,EAAE;YAC/C,OAAO;gBACLX,QAAQC,GAAG,CAAC,CAAC,KAAK,EAAEC,QAAQ,wBAAwB,CAAC;YACvD;YACAT,KAAK;QACP;IAEJ;AACF"}
|