node-version-use 2.0.0 → 2.1.1
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/README.md +7 -7
- package/dist/cjs/cli.js +20 -35
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/default.js +6 -6
- package/dist/cjs/commands/default.js.map +1 -1
- package/dist/cjs/commands/install.js +9 -9
- package/dist/cjs/commands/install.js.map +1 -1
- package/dist/cjs/commands/list.js +10 -26
- package/dist/cjs/commands/list.js.map +1 -1
- package/dist/cjs/commands/local.js +10 -10
- package/dist/cjs/commands/local.js.map +1 -1
- package/dist/cjs/commands/setup.d.cts +1 -1
- package/dist/cjs/commands/setup.d.ts +1 -1
- package/dist/cjs/commands/setup.js +3 -3
- package/dist/cjs/commands/setup.js.map +1 -1
- package/dist/cjs/commands/teardown.d.cts +1 -1
- package/dist/cjs/commands/teardown.d.ts +1 -1
- package/dist/cjs/commands/teardown.js +14 -28
- package/dist/cjs/commands/teardown.js.map +1 -1
- package/dist/cjs/commands/uninstall.js +7 -7
- package/dist/cjs/commands/uninstall.js.map +1 -1
- package/dist/cjs/commands/which.d.cts +1 -1
- package/dist/cjs/commands/which.d.ts +1 -1
- package/dist/cjs/commands/which.js +7 -7
- package/dist/cjs/commands/which.js.map +1 -1
- package/dist/cjs/worker.js +5 -26
- package/dist/cjs/worker.js.map +1 -1
- package/dist/esm/cli.js +15 -28
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/default.js +3 -3
- package/dist/esm/commands/default.js.map +1 -1
- package/dist/esm/commands/install.js +4 -4
- package/dist/esm/commands/install.js.map +1 -1
- package/dist/esm/commands/list.js +4 -3
- package/dist/esm/commands/list.js.map +1 -1
- package/dist/esm/commands/local.js +5 -5
- package/dist/esm/commands/local.js.map +1 -1
- package/dist/esm/commands/setup.d.ts +1 -1
- package/dist/esm/commands/setup.js +2 -2
- package/dist/esm/commands/setup.js.map +1 -1
- package/dist/esm/commands/teardown.d.ts +1 -1
- package/dist/esm/commands/teardown.js +12 -9
- package/dist/esm/commands/teardown.js.map +1 -1
- package/dist/esm/commands/uninstall.js +2 -2
- package/dist/esm/commands/uninstall.js.map +1 -1
- package/dist/esm/commands/which.d.ts +1 -1
- package/dist/esm/commands/which.js +5 -5
- package/dist/esm/commands/which.js.map +1 -1
- package/dist/esm/worker.js +3 -16
- package/dist/esm/worker.js.map +1 -1
- package/package.json +13 -10
- package/scripts/ensure-test-binaries.ts +27 -0
- package/scripts/postinstall.cjs +264 -75
- package/dist/cjs/lib/loadSpawnTerm.d.cts +0 -19
- package/dist/cjs/lib/loadSpawnTerm.d.ts +0 -19
- package/dist/cjs/lib/loadSpawnTerm.js +0 -103
- package/dist/cjs/lib/loadSpawnTerm.js.map +0 -1
- package/dist/esm/lib/loadSpawnTerm.d.ts +0 -19
- package/dist/esm/lib/loadSpawnTerm.js +0 -42
- package/dist/esm/lib/loadSpawnTerm.js.map +0 -1
- package/shim/Makefile +0 -58
- package/shim/go.mod +0 -3
- package/shim/main.go +0 -302
|
@@ -5,15 +5,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
Object.defineProperty(exports, /**
|
|
6
6
|
* nvu teardown
|
|
7
7
|
*
|
|
8
|
-
* Remove nvu
|
|
8
|
+
* Remove nvu binaries from ~/.nvu/bin
|
|
9
9
|
*/ "default", {
|
|
10
10
|
enumerable: true,
|
|
11
11
|
get: function() {
|
|
12
12
|
return teardownCmd;
|
|
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
|
+
var _fsremovecompat = require("fs-remove-compat");
|
|
17
18
|
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
18
19
|
var _constantsts = require("../constants.js");
|
|
19
20
|
function _interop_require_default(obj) {
|
|
@@ -23,44 +24,29 @@ function _interop_require_default(obj) {
|
|
|
23
24
|
}
|
|
24
25
|
function teardownCmd(_args) {
|
|
25
26
|
var binDir = _path.default.join(_constantsts.storagePath, 'bin');
|
|
26
|
-
var
|
|
27
|
+
var binaries = [
|
|
27
28
|
'node',
|
|
28
29
|
'npm',
|
|
29
30
|
'npx'
|
|
30
31
|
];
|
|
31
32
|
var ext = process.platform === 'win32' ? '.exe' : '';
|
|
32
33
|
var removed = 0;
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
removed++;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
} catch (err) {
|
|
44
|
-
_didIteratorError = true;
|
|
45
|
-
_iteratorError = err;
|
|
46
|
-
} finally{
|
|
47
|
-
try {
|
|
48
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
49
|
-
_iterator.return();
|
|
50
|
-
}
|
|
51
|
-
} finally{
|
|
52
|
-
if (_didIteratorError) {
|
|
53
|
-
throw _iteratorError;
|
|
54
|
-
}
|
|
34
|
+
for(var i = 0; i < binaries.length; i++){
|
|
35
|
+
var binaryPath = _path.default.join(binDir, binaries[i] + ext);
|
|
36
|
+
if (_fs.default.existsSync(binaryPath)) {
|
|
37
|
+
(0, _fsremovecompat.rmSync)(binaryPath, {
|
|
38
|
+
force: true
|
|
39
|
+
});
|
|
40
|
+
removed++;
|
|
55
41
|
}
|
|
56
42
|
}
|
|
57
43
|
if (removed > 0) {
|
|
58
|
-
console.log("Removed ".concat(removed, "
|
|
44
|
+
console.log("Removed ".concat(removed, " binary(s) from ").concat(binDir));
|
|
59
45
|
console.log('');
|
|
60
46
|
console.log('You may also want to remove ~/.nvu/bin from your PATH.');
|
|
61
47
|
} else {
|
|
62
|
-
console.log('No
|
|
48
|
+
console.log('No binaries found to remove.');
|
|
63
49
|
}
|
|
64
|
-
(0,
|
|
50
|
+
(0, _exitcompat.default)(0);
|
|
65
51
|
}
|
|
66
52
|
/* 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; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/teardown.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu teardown\n *\n * Remove nvu
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/teardown.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport { rmSync } from 'fs-remove-compat';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu teardown\n *\n * Remove nvu binaries from ~/.nvu/bin\n */\nexport default function teardownCmd(_args: string[]): void {\n const binDir = path.join(storagePath, 'bin');\n\n const binaries = ['node', 'npm', 'npx'];\n const ext = process.platform === 'win32' ? '.exe' : '';\n\n let removed = 0;\n for (let i = 0; i < binaries.length; i++) {\n const binaryPath = path.join(binDir, binaries[i] + ext);\n if (fs.existsSync(binaryPath)) {\n rmSync(binaryPath, { force: true });\n removed++;\n }\n }\n\n if (removed > 0) {\n console.log(`Removed ${removed} binary(s) from ${binDir}`);\n console.log('');\n console.log('You may also want to remove ~/.nvu/bin from your PATH.');\n } else {\n console.log('No binaries found to remove.');\n }\n\n exit(0);\n}\n"],"names":["teardownCmd","_args","binDir","path","join","storagePath","binaries","ext","process","platform","removed","i","length","binaryPath","fs","existsSync","rmSync","force","console","log","exit"],"mappings":";;;;+BAMA;;;;CAIC,GACD;;;eAAwBA;;;iEAXP;yDACF;8BACQ;2DACN;2BACW;;;;;;AAOb,SAASA,YAAYC,KAAe;IACjD,IAAMC,SAASC,aAAI,CAACC,IAAI,CAACC,wBAAW,EAAE;IAEtC,IAAMC,WAAW;QAAC;QAAQ;QAAO;KAAM;IACvC,IAAMC,MAAMC,QAAQC,QAAQ,KAAK,UAAU,SAAS;IAEpD,IAAIC,UAAU;IACd,IAAK,IAAIC,IAAI,GAAGA,IAAIL,SAASM,MAAM,EAAED,IAAK;QACxC,IAAME,aAAaV,aAAI,CAACC,IAAI,CAACF,QAAQI,QAAQ,CAACK,EAAE,GAAGJ;QACnD,IAAIO,WAAE,CAACC,UAAU,CAACF,aAAa;YAC7BG,IAAAA,sBAAM,EAACH,YAAY;gBAAEI,OAAO;YAAK;YACjCP;QACF;IACF;IAEA,IAAIA,UAAU,GAAG;QACfQ,QAAQC,GAAG,CAAC,AAAC,WAAoCjB,OAA1BQ,SAAQ,oBAAyB,OAAPR;QACjDgB,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;IACd,OAAO;QACLD,QAAQC,GAAG,CAAC;IACd;IAEAC,IAAAA,mBAAI,EAAC;AACP"}
|
|
@@ -12,7 +12,7 @@ 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");
|
|
@@ -27,11 +27,11 @@ function uninstallCmd(args) {
|
|
|
27
27
|
console.log('Usage: nvu uninstall <version>');
|
|
28
28
|
console.log('Example: nvu uninstall 20');
|
|
29
29
|
console.log(' nvu uninstall v20.19.6');
|
|
30
|
-
(0,
|
|
30
|
+
(0, _exitcompat.default)(1);
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
var version = args[0].trim();
|
|
34
|
-
var versionsPath = _path.default.join(_constantsts.storagePath, '
|
|
34
|
+
var versionsPath = _path.default.join(_constantsts.storagePath, 'installed');
|
|
35
35
|
// Find all matching installed versions
|
|
36
36
|
var matches = findInstalledVersions(versionsPath, version);
|
|
37
37
|
if (matches.length === 0) {
|
|
@@ -39,7 +39,7 @@ function uninstallCmd(args) {
|
|
|
39
39
|
console.log('');
|
|
40
40
|
console.log('Installed versions:');
|
|
41
41
|
listInstalledVersions(versionsPath);
|
|
42
|
-
(0,
|
|
42
|
+
(0, _exitcompat.default)(1);
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
45
|
if (matches.length > 1) {
|
|
@@ -49,7 +49,7 @@ function uninstallCmd(args) {
|
|
|
49
49
|
}
|
|
50
50
|
console.log('');
|
|
51
51
|
console.log('Please specify the exact version to uninstall.');
|
|
52
|
-
(0,
|
|
52
|
+
(0, _exitcompat.default)(1);
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
55
|
var installedVersion = matches[0];
|
|
@@ -79,10 +79,10 @@ function uninstallCmd(args) {
|
|
|
79
79
|
}
|
|
80
80
|
} catch (err) {
|
|
81
81
|
console.error("Failed to remove Node ".concat(installedVersion, ":"), err.message);
|
|
82
|
-
(0,
|
|
82
|
+
(0, _exitcompat.default)(1);
|
|
83
83
|
return;
|
|
84
84
|
}
|
|
85
|
-
(0,
|
|
85
|
+
(0, _exitcompat.default)(0);
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
88
88
|
* Find all installed versions matching the given version string
|
|
@@ -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 { readdirWithTypes, rmSync } from '../compat.ts';\nimport { storagePath } from '../constants.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, '
|
|
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 { readdirWithTypes, rmSync } from '../compat.ts';\nimport { storagePath } from '../constants.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\n var defaultPath = path.join(storagePath, 'default');\n var isDefault = false;\n if (fs.existsSync(defaultPath)) {\n var defaultVersion = fs.readFileSync(defaultPath, 'utf8').trim();\n var normalizedDefault = defaultVersion.replace(/^v/, '');\n var normalizedInstalled = installedVersion.replace(/^v/, '');\n\n // Check if default matches this version\n if (normalizedInstalled === normalizedDefault || normalizedInstalled.indexOf(`${normalizedDefault}.`) === 0) {\n isDefault = true;\n }\n }\n\n // Remove the version directory\n try {\n rmSync(versionPath);\n console.log(`Removed Node ${installedVersion}`);\n\n if (isDefault) {\n // Clear the default since it's no longer installed\n fs.unlinkSync(defaultPath);\n console.log('');\n console.log('Note: This was your default version. Set a new default with:');\n console.log(' nvu default <version>');\n }\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 * Find all installed versions matching the given version string\n */\nfunction 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 return matches;\n}\n\n/**\n * List installed versions for user reference\n */\nfunction listInstalledVersions(versionsPath: string): void {\n if (!fs.existsSync(versionsPath)) {\n console.log(' (none)');\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 if (versions.length === 0) {\n console.log(' (none)');\n } else {\n for (var j = 0; j < versions.length; j++) {\n console.log(` ${versions[j]}`);\n }\n }\n}\n"],"names":["uninstallCmd","args","length","console","log","exit","version","trim","versionsPath","path","join","storagePath","matches","findInstalledVersions","listInstalledVersions","i","installedVersion","versionPath","defaultPath","isDefault","fs","existsSync","defaultVersion","readFileSync","normalizedDefault","replace","normalizedInstalled","indexOf","rmSync","unlinkSync","err","error","message","normalizedVersion","exactMatches","v","statSync","isDirectory","push","entries","readdirWithTypes","j","entry","dirVersion","name","versions"],"mappings":"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"}
|
|
@@ -6,14 +6,14 @@ Object.defineProperty(exports, /**
|
|
|
6
6
|
* nvu which
|
|
7
7
|
*
|
|
8
8
|
* Show which Node binary would be used based on current directory.
|
|
9
|
-
* This simulates what the
|
|
9
|
+
* This simulates what the nvu binary would do.
|
|
10
10
|
*/ "default", {
|
|
11
11
|
enumerable: true,
|
|
12
12
|
get: function() {
|
|
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");
|
|
@@ -24,7 +24,7 @@ function _interop_require_default(obj) {
|
|
|
24
24
|
}
|
|
25
25
|
function whichCmd(_args) {
|
|
26
26
|
var cwd = process.cwd();
|
|
27
|
-
// Resolve version using the same logic as the
|
|
27
|
+
// Resolve version using the same logic as the nvu binary
|
|
28
28
|
var version = resolveVersion(cwd);
|
|
29
29
|
if (!version) {
|
|
30
30
|
console.log('No Node version configured for this directory.');
|
|
@@ -32,11 +32,11 @@ 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
|
|
39
|
-
var versionsPath = _path.default.join(_constantsts.storagePath, '
|
|
39
|
+
var versionsPath = _path.default.join(_constantsts.storagePath, 'installed');
|
|
40
40
|
var versionPath = _path.default.join(versionsPath, version);
|
|
41
41
|
var versionPathWithV = _path.default.join(versionsPath, "v".concat(version));
|
|
42
42
|
var versionPathWithoutV = _path.default.join(versionsPath, version.replace(/^v/, ''));
|
|
@@ -61,10 +61,10 @@ 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
|
-
* Resolve version from config files (mirrors
|
|
67
|
+
* Resolve version from config files (mirrors nvu binary logic)
|
|
68
68
|
*/ function resolveVersion(cwd) {
|
|
69
69
|
// Walk up directories looking for .nvurc or .nvmrc
|
|
70
70
|
var dir = cwd;
|
|
@@ -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
|
|
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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"}
|
package/dist/cjs/worker.js
CHANGED
|
@@ -16,10 +16,10 @@ var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
|
16
16
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
17
17
|
var _resolvebinsync = /*#__PURE__*/ _interop_require_default(require("resolve-bin-sync"));
|
|
18
18
|
var _spawnstreaming = /*#__PURE__*/ _interop_require_default(require("spawn-streaming"));
|
|
19
|
+
var _spawnterm = require("spawn-term");
|
|
19
20
|
var _compatts = require("./compat.js");
|
|
20
21
|
var _constantsts = require("./constants.js");
|
|
21
22
|
var _loadNodeVersionInstallts = /*#__PURE__*/ _interop_require_default(require("./lib/loadNodeVersionInstall.js"));
|
|
22
|
-
var _loadSpawnTermts = /*#__PURE__*/ _interop_require_default(require("./lib/loadSpawnTerm.js"));
|
|
23
23
|
function _array_like_to_array(arr, len) {
|
|
24
24
|
if (len == null || len > arr.length) len = arr.length;
|
|
25
25
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
@@ -134,29 +134,8 @@ function resolveCommand(command, args) {
|
|
|
134
134
|
};
|
|
135
135
|
}
|
|
136
136
|
function worker(versionExpression, command, args, options, callback) {
|
|
137
|
-
// Load
|
|
138
|
-
|
|
139
|
-
var installVersion;
|
|
140
|
-
var createSession;
|
|
141
|
-
var formatArguments = function(x) {
|
|
142
|
-
return x;
|
|
143
|
-
};
|
|
144
|
-
loaderQueue.defer(function(cb) {
|
|
145
|
-
return (0, _loadNodeVersionInstallts.default)(function(err, fn) {
|
|
146
|
-
installVersion = fn;
|
|
147
|
-
cb(err);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
loaderQueue.defer(function(cb) {
|
|
151
|
-
return (0, _loadSpawnTermts.default)(function(err, mod) {
|
|
152
|
-
createSession = mod === null || mod === void 0 ? void 0 : mod.createSession;
|
|
153
|
-
formatArguments = (mod === null || mod === void 0 ? void 0 : mod.formatArguments) || function(x) {
|
|
154
|
-
return x;
|
|
155
|
-
};
|
|
156
|
-
cb(err);
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
loaderQueue.await(function(loadErr) {
|
|
137
|
+
// Load node-version-install lazily
|
|
138
|
+
(0, _loadNodeVersionInstallts.default)(function(loadErr, installVersion) {
|
|
160
139
|
if (loadErr) return callback(loadErr);
|
|
161
140
|
(0, _noderesolveversions.default)(versionExpression, options, function(err, versions) {
|
|
162
141
|
if (err) {
|
|
@@ -175,7 +154,7 @@ function worker(versionExpression, command, args, options, callback) {
|
|
|
175
154
|
var queue = new _queuecb.default(1);
|
|
176
155
|
// Create session once for all processes (only if multiple versions)
|
|
177
156
|
var interactive = options.interactive !== false;
|
|
178
|
-
var session = versions.length >= 2 && createSession && !streamingOptions.streaming ? createSession({
|
|
157
|
+
var session = versions.length >= 2 && _spawnterm.createSession && !streamingOptions.streaming ? (0, _spawnterm.createSession)({
|
|
179
158
|
header: "".concat(command, " ").concat(args.join(' ')),
|
|
180
159
|
showStatusBar: true,
|
|
181
160
|
interactive: interactive
|
|
@@ -214,7 +193,7 @@ function worker(versionExpression, command, args, options, callback) {
|
|
|
214
193
|
var resolved = resolveCommand(command, args);
|
|
215
194
|
if (versions.length < 2) {
|
|
216
195
|
// Show command when running single version (no terminal session, unless silent)
|
|
217
|
-
if (!options.silent) console.log("$ ".concat(formatArguments([
|
|
196
|
+
if (!options.silent) console.log("$ ".concat((0, _spawnterm.formatArguments)([
|
|
218
197
|
resolved.command
|
|
219
198
|
].concat(resolved.args)).join(' ')));
|
|
220
199
|
return (0, _crossspawncb.default)(resolved.command, resolved.args, spawnOptions, next);
|
package/dist/cjs/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/worker.ts"],"sourcesContent":["import spawn, { type SpawnOptions } from 'cross-spawn-cb';\nimport fs from 'fs';\nimport resolveVersions, { type VersionOptions } from 'node-resolve-versions';\nimport type { InstallOptions, InstallResult } from 'node-version-install';\nimport { spawnOptions as createSpawnOptions } from 'node-version-utils';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport resolveBin from 'resolve-bin-sync';\nimport spawnStreaming from 'spawn-streaming';\nimport { stringEndsWith } from './compat.ts';\nimport { storagePath } from './constants.ts';\nimport loadNodeVersionInstall from './lib/loadNodeVersionInstall.ts';\nimport loadSpawnTerm from './lib/loadSpawnTerm.ts';\n\nimport type { Options, UseCallback, UseOptions, UseResult } from './types.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst NODE = isWindows ? 'node.exe' : 'node';\n\n// Parse npm-generated .cmd wrapper to extract the JS script path\nfunction parseNpmCmdWrapper(cmdPath: string): string | null {\n try {\n const content = fs.readFileSync(cmdPath, 'utf8');\n // Match: \"%_prog%\" \"%dp0%\\node_modules\\...\\cli.js\" %*\n // or: \"%_prog%\" \"%dp0%\\path\\to\\script.js\" %*\n const match = content.match(/\"%_prog%\"\\s+\"?%dp0%\\\\([^\"]+)\"?\\s+%\\*/);\n if (match) {\n const relativePath = match[1];\n const cmdDir = path.dirname(cmdPath);\n return path.join(cmdDir, relativePath);\n }\n } catch (_e) {\n // ignore\n }\n return null;\n}\n\n// On Windows, resolve npm bin commands to their JS entry points to bypass .cmd wrappers\n// This fixes issues with nvm-windows where .cmd wrappers use symlinked node.exe directly\nfunction resolveCommand(command: string, args: string[]): { command: string; args: string[] } {\n if (!isWindows) return { command, args };\n\n // Case 1: Command is a .cmd file path\n if (stringEndsWith(command.toLowerCase(), '.cmd')) {\n const scriptPath = parseNpmCmdWrapper(command);\n if (scriptPath) {\n return { command: NODE, args: [scriptPath, ...args] };\n }\n }\n\n // Case 2: Try to resolve the command as an npm package bin from node_modules\n try {\n const binPath = resolveBin(command);\n return { command: NODE, args: [binPath, ...args] };\n } catch (_e) {\n // Not an npm package bin, use original command\n }\n\n return { command, args };\n}\n\nexport default function worker(versionExpression: string, command: string, args: string[], options: UseOptions, callback: UseCallback): undefined {\n // Load lazy dependencies in parallel\n const loaderQueue = new Queue();\n let installVersion: (version: string, opts: InstallOptions, cb: (err?: Error, results?: InstallResult[]) => void) => void;\n let createSession:\n | ((options?: { header?: string; showStatusBar?: boolean; interactive?: boolean }) => {\n spawn: (command: string, args: string[], options: unknown, termOptions: unknown, callback: (err?: Error, res?: unknown) => void) => void;\n close: () => void;\n waitAndClose: (callback?: () => void) => void;\n })\n | undefined;\n let formatArguments: (args: string[]) => string[] = (x) => x;\n\n loaderQueue.defer((cb) =>\n loadNodeVersionInstall((err, fn) => {\n installVersion = fn;\n cb(err);\n })\n );\n loaderQueue.defer((cb) =>\n loadSpawnTerm((err, mod) => {\n createSession = mod?.createSession;\n formatArguments = mod?.formatArguments || ((x) => x);\n cb(err);\n })\n );\n\n loaderQueue.await((loadErr) => {\n if (loadErr) return callback(loadErr);\n\n resolveVersions(versionExpression, options as VersionOptions, (err?: Error, versions?: string[]) => {\n if (err) {\n callback(err);\n return;\n }\n if (!versions.length) {\n callback(new Error(`No versions found from expression: ${versionExpression}`));\n return;\n }\n\n const installOptions = { storagePath, ...options } as InstallOptions;\n const streamingOptions = options as Options;\n const results: UseResult[] = [];\n const queue = new Queue(1);\n\n // Create session once for all processes (only if multiple versions)\n const interactive = options.interactive !== false;\n const session = versions.length >= 2 && createSession && !streamingOptions.streaming ? createSession({ header: `${command} ${args.join(' ')}`, showStatusBar: true, interactive }) : null;\n\n versions.forEach((version: string) => {\n queue.defer((cb) => {\n installVersion(version, installOptions, (_err, installs) => {\n const install = installs && installs.length === 1 ? installs[0] : null;\n if (!install) {\n results.push({ install, command, version, error: new Error(`Unexpected version results for version ${version}. Install ${JSON.stringify(installs)}`), result: null });\n return callback();\n }\n const spawnOptions = createSpawnOptions(install.installPath, options as SpawnOptions);\n const prefix = install.version;\n\n function next(err?, res?): undefined {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err;\n err = null;\n }\n results.push({ install, command, version, error: err, result: res });\n cb();\n }\n\n // On Windows, resolve npm bin commands to bypass .cmd wrappers\n const resolved = resolveCommand(command, args);\n\n if (versions.length < 2) {\n // Show command when running single version (no terminal session, unless silent)\n if (!options.silent) console.log(`$ ${formatArguments([resolved.command].concat(resolved.args)).join(' ')}`);\n return spawn(resolved.command, resolved.args, spawnOptions, next);\n }\n if (session) session.spawn(resolved.command, resolved.args, spawnOptions, { group: prefix, expanded: streamingOptions.expanded }, next);\n else spawnStreaming(resolved.command, resolved.args, spawnOptions, { prefix }, next);\n });\n });\n });\n queue.await((err) => {\n if (session) {\n session.waitAndClose(() => {\n err ? callback(err) : callback(null, results);\n });\n } else {\n err ? callback(err) : callback(null, results);\n }\n });\n });\n });\n}\n"],"names":["worker","isWindows","process","platform","test","env","OSTYPE","NODE","parseNpmCmdWrapper","cmdPath","content","fs","readFileSync","match","relativePath","cmdDir","path","dirname","join","_e","resolveCommand","command","args","stringEndsWith","toLowerCase","scriptPath","binPath","resolveBin","versionExpression","options","callback","loaderQueue","Queue","installVersion","createSession","formatArguments","x","defer","cb","loadNodeVersionInstall","err","fn","loadSpawnTerm","mod","await","loadErr","resolveVersions","versions","length","Error","installOptions","storagePath","streamingOptions","results","queue","interactive","session","streaming","header","showStatusBar","forEach","version","_err","installs","next","res","message","indexOf","push","install","error","result","JSON","stringify","spawnOptions","createSpawnOptions","installPath","prefix","resolved","silent","console","log","concat","spawn","group","expanded","spawnStreaming","waitAndClose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/worker.ts"],"sourcesContent":["import spawn, { type SpawnOptions } from 'cross-spawn-cb';\nimport fs from 'fs';\nimport resolveVersions, { type VersionOptions } from 'node-resolve-versions';\nimport type { InstallOptions } from 'node-version-install';\nimport { spawnOptions as createSpawnOptions } from 'node-version-utils';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport resolveBin from 'resolve-bin-sync';\nimport spawnStreaming from 'spawn-streaming';\nimport { createSession, formatArguments } from 'spawn-term';\nimport { stringEndsWith } from './compat.ts';\nimport { storagePath } from './constants.ts';\nimport loadNodeVersionInstall from './lib/loadNodeVersionInstall.ts';\n\nimport type { Options, UseCallback, UseOptions, UseResult } from './types.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst NODE = isWindows ? 'node.exe' : 'node';\n\n// Parse npm-generated .cmd wrapper to extract the JS script path\nfunction parseNpmCmdWrapper(cmdPath: string): string | null {\n try {\n const content = fs.readFileSync(cmdPath, 'utf8');\n // Match: \"%_prog%\" \"%dp0%\\node_modules\\...\\cli.js\" %*\n // or: \"%_prog%\" \"%dp0%\\path\\to\\script.js\" %*\n const match = content.match(/\"%_prog%\"\\s+\"?%dp0%\\\\([^\"]+)\"?\\s+%\\*/);\n if (match) {\n const relativePath = match[1];\n const cmdDir = path.dirname(cmdPath);\n return path.join(cmdDir, relativePath);\n }\n } catch (_e) {\n // ignore\n }\n return null;\n}\n\n// On Windows, resolve npm bin commands to their JS entry points to bypass .cmd wrappers\n// This fixes issues with nvm-windows where .cmd wrappers use symlinked node.exe directly\nfunction resolveCommand(command: string, args: string[]): { command: string; args: string[] } {\n if (!isWindows) return { command, args };\n\n // Case 1: Command is a .cmd file path\n if (stringEndsWith(command.toLowerCase(), '.cmd')) {\n const scriptPath = parseNpmCmdWrapper(command);\n if (scriptPath) {\n return { command: NODE, args: [scriptPath, ...args] };\n }\n }\n\n // Case 2: Try to resolve the command as an npm package bin from node_modules\n try {\n const binPath = resolveBin(command);\n return { command: NODE, args: [binPath, ...args] };\n } catch (_e) {\n // Not an npm package bin, use original command\n }\n\n return { command, args };\n}\n\nexport default function worker(versionExpression: string, command: string, args: string[], options: UseOptions, callback: UseCallback): undefined {\n // Load node-version-install lazily\n loadNodeVersionInstall((loadErr, installVersion) => {\n if (loadErr) return callback(loadErr);\n\n resolveVersions(versionExpression, options as VersionOptions, (err?: Error, versions?: string[]) => {\n if (err) {\n callback(err);\n return;\n }\n if (!versions.length) {\n callback(new Error(`No versions found from expression: ${versionExpression}`));\n return;\n }\n\n const installOptions = { storagePath, ...options } as InstallOptions;\n const streamingOptions = options as Options;\n const results: UseResult[] = [];\n const queue = new Queue(1);\n\n // Create session once for all processes (only if multiple versions)\n const interactive = options.interactive !== false;\n const session = versions.length >= 2 && createSession && !streamingOptions.streaming ? createSession({ header: `${command} ${args.join(' ')}`, showStatusBar: true, interactive }) : null;\n\n versions.forEach((version: string) => {\n queue.defer((cb) => {\n installVersion(version, installOptions, (_err, installs) => {\n const install = installs && installs.length === 1 ? installs[0] : null;\n if (!install) {\n results.push({ install, command, version, error: new Error(`Unexpected version results for version ${version}. Install ${JSON.stringify(installs)}`), result: null });\n return callback();\n }\n const spawnOptions = createSpawnOptions(install.installPath, options as SpawnOptions);\n const prefix = install.version;\n\n function next(err?, res?): undefined {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err;\n err = null;\n }\n results.push({ install, command, version, error: err, result: res });\n cb();\n }\n\n // On Windows, resolve npm bin commands to bypass .cmd wrappers\n const resolved = resolveCommand(command, args);\n\n if (versions.length < 2) {\n // Show command when running single version (no terminal session, unless silent)\n if (!options.silent) console.log(`$ ${formatArguments([resolved.command].concat(resolved.args)).join(' ')}`);\n return spawn(resolved.command, resolved.args, spawnOptions, next);\n }\n if (session) session.spawn(resolved.command, resolved.args, spawnOptions, { group: prefix, expanded: streamingOptions.expanded }, next);\n else spawnStreaming(resolved.command, resolved.args, spawnOptions, { prefix }, next);\n });\n });\n });\n queue.await((err) => {\n if (session) {\n session.waitAndClose(() => {\n err ? callback(err) : callback(null, results);\n });\n } else {\n err ? callback(err) : callback(null, results);\n }\n });\n });\n });\n}\n"],"names":["worker","isWindows","process","platform","test","env","OSTYPE","NODE","parseNpmCmdWrapper","cmdPath","content","fs","readFileSync","match","relativePath","cmdDir","path","dirname","join","_e","resolveCommand","command","args","stringEndsWith","toLowerCase","scriptPath","binPath","resolveBin","versionExpression","options","callback","loadNodeVersionInstall","loadErr","installVersion","resolveVersions","err","versions","length","Error","installOptions","storagePath","streamingOptions","results","queue","Queue","interactive","session","createSession","streaming","header","showStatusBar","forEach","version","defer","cb","_err","installs","next","res","message","indexOf","push","install","error","result","JSON","stringify","spawnOptions","createSpawnOptions","installPath","prefix","resolved","silent","console","log","formatArguments","concat","spawn","group","expanded","spawnStreaming","await","waitAndClose"],"mappings":"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"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import exit from 'exit';
|
|
1
|
+
import exit from 'exit-compat';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import getopts from 'getopts-compat';
|
|
4
4
|
import path from 'path';
|
|
5
|
+
import { createSession, figures, formatArguments } from 'spawn-term';
|
|
5
6
|
import url from 'url';
|
|
6
7
|
import { isCommand, runCommand } from './commands/index.js';
|
|
7
8
|
import run from './index.js';
|
|
8
|
-
import loadSpawnTerm from './lib/loadSpawnTerm.js';
|
|
9
9
|
const __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));
|
|
10
10
|
const ERROR_CODE = 13;
|
|
11
11
|
function getVersion() {
|
|
@@ -29,8 +29,8 @@ function printHelp(name) {
|
|
|
29
29
|
console.log(' uninstall <version> Remove an installed Node version');
|
|
30
30
|
console.log(' list List installed Node versions');
|
|
31
31
|
console.log(' which Show which Node version would be used');
|
|
32
|
-
console.log(' setup Install/reinstall
|
|
33
|
-
console.log(' teardown Remove
|
|
32
|
+
console.log(' setup Install/reinstall binaries to ~/.nvu/bin');
|
|
33
|
+
console.log(' teardown Remove binaries from ~/.nvu/bin');
|
|
34
34
|
console.log('');
|
|
35
35
|
console.log('Options:');
|
|
36
36
|
console.log(' -v, --version Print version number');
|
|
@@ -114,30 +114,17 @@ export default ((argv, name)=>{
|
|
|
114
114
|
if (err) results = err.results;
|
|
115
115
|
const errors = results.filter((result)=>!!result.error);
|
|
116
116
|
if (!options.silent) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (!createSession) {
|
|
128
|
-
console.log('\n======================');
|
|
129
|
-
results.forEach((res)=>{
|
|
130
|
-
console.log(`${res.error ? figures.cross : figures.tick} ${res.version}${res.error ? ` Error: ${res.error.message}` : ''}`);
|
|
131
|
-
});
|
|
132
|
-
console.log('\n----------------------');
|
|
133
|
-
console.log(`${name} ${formatArguments(args).join(' ')}`);
|
|
134
|
-
console.log(`${figures.tick} ${results.length - errors.length} succeeded`);
|
|
135
|
-
if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);
|
|
136
|
-
}
|
|
137
|
-
exit(err || errors.length ? ERROR_CODE : 0);
|
|
138
|
-
});
|
|
139
|
-
} else {
|
|
140
|
-
exit(err || errors.length ? ERROR_CODE : 0);
|
|
117
|
+
if (!createSession) {
|
|
118
|
+
console.log('\n======================');
|
|
119
|
+
results.forEach((res)=>{
|
|
120
|
+
console.log(`${res.error ? figures.cross : figures.tick} ${res.version}${res.error ? ` Error: ${res.error.message}` : ''}`);
|
|
121
|
+
});
|
|
122
|
+
console.log('\n----------------------');
|
|
123
|
+
console.log(`${name} ${formatArguments(args).join(' ')}`);
|
|
124
|
+
console.log(`${figures.tick} ${results.length - errors.length} succeeded`);
|
|
125
|
+
if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);
|
|
126
|
+
}
|
|
141
127
|
}
|
|
128
|
+
exit(err || errors.length ? ERROR_CODE : 0);
|
|
142
129
|
});
|
|
143
130
|
});
|
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 url from 'url';\nimport { isCommand, runCommand } from './commands/index.ts';\nimport run from './index.ts';\nimport
|
|
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,4 +1,4 @@
|
|
|
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';
|
|
@@ -23,8 +23,8 @@ import { storagePath } from '../constants.js';
|
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
var version = args[0].trim();
|
|
26
|
-
// Validate version format (basic check)
|
|
27
|
-
if (!version || version.
|
|
26
|
+
// Validate version format (basic check, indexOf for Node 0.8+ compat)
|
|
27
|
+
if (!version || version.indexOf('-') === 0) {
|
|
28
28
|
console.log('Usage: nvu default <version>');
|
|
29
29
|
console.log('Example: nvu default 20');
|
|
30
30
|
exit(1);
|
|
@@ -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)\n if (!version || version.
|
|
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';\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 // Write the default version\n fs.writeFileSync(defaultFilePath, `${version}\\n`, 'utf8');\n console.log(`Default Node version set to: ${version}`);\n exit(0);\n}\n"],"names":["exit","fs","path","mkdirpSync","storagePath","defaultCmd","args","defaultFilePath","join","length","existsSync","currentVersion","readFileSync","trim","console","log","version","indexOf","writeFileSync"],"mappings":"AAAA,OAAOA,UAAU,cAAc;AAC/B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,WAAW,QAAQ,kBAAkB;AAE9C;;;;;CAKC,GACD,eAAe,SAASC,WAAWC,IAAc;IAC/C,IAAIC,kBAAkBL,KAAKM,IAAI,CAACJ,aAAa;IAE7C,kDAAkD;IAClD,IAAIE,KAAKG,MAAM,KAAK,GAAG;QACrB,IAAIR,GAAGS,UAAU,CAACH,kBAAkB;YAClC,IAAII,iBAAiBV,GAAGW,YAAY,CAACL,iBAAiB,QAAQM,IAAI;YAClEC,QAAQC,GAAG,CAAC,CAAC,iBAAiB,EAAEJ,gBAAgB;QAClD,OAAO;YACLG,QAAQC,GAAG,CAAC;YACZD,QAAQC,GAAG,CAAC;QACd;QACAf,KAAK;QACL;IACF;IAEA,IAAIgB,UAAUV,IAAI,CAAC,EAAE,CAACO,IAAI;IAE1B,sEAAsE;IACtE,IAAI,CAACG,WAAWA,QAAQC,OAAO,CAAC,SAAS,GAAG;QAC1CH,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZf,KAAK;QACL;IACF;IAEA,kCAAkC;IAClC,IAAI,CAACC,GAAGS,UAAU,CAACN,cAAc;QAC/BD,WAAWC;IACb;IAEA,4BAA4B;IAC5BH,GAAGiB,aAAa,CAACX,iBAAiB,GAAGS,QAAQ,EAAE,CAAC,EAAE;IAClDF,QAAQC,GAAG,CAAC,CAAC,6BAA6B,EAAEC,SAAS;IACrDhB,KAAK;AACP"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import exit from 'exit';
|
|
1
|
+
import exit from 'exit-compat';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { storagePath } from '../constants.js';
|
|
4
4
|
import loadNodeVersionInstall from '../lib/loadNodeVersionInstall.js';
|
|
@@ -16,8 +16,8 @@ import loadNodeVersionInstall from '../lib/loadNodeVersionInstall.js';
|
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
const version = args[0].trim();
|
|
19
|
-
// Validate version format (basic check)
|
|
20
|
-
if (!version || version.
|
|
19
|
+
// Validate version format (basic check, indexOf for Node 0.8+ compat)
|
|
20
|
+
if (!version || version.indexOf('-') === 0) {
|
|
21
21
|
console.log('Usage: nvu install <version>');
|
|
22
22
|
exit(1);
|
|
23
23
|
return;
|
|
@@ -31,7 +31,7 @@ import loadNodeVersionInstall from '../lib/loadNodeVersionInstall.js';
|
|
|
31
31
|
exit(1);
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
const versionsPath = path.join(storagePath, '
|
|
34
|
+
const versionsPath = path.join(storagePath, 'installed');
|
|
35
35
|
nodeVersionInstall(version, {
|
|
36
36
|
installPath: versionsPath
|
|
37
37
|
}, (installErr, results)=>{
|