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.
Files changed (63) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/cli.js +20 -35
  3. package/dist/cjs/cli.js.map +1 -1
  4. package/dist/cjs/commands/default.js +6 -6
  5. package/dist/cjs/commands/default.js.map +1 -1
  6. package/dist/cjs/commands/install.js +9 -9
  7. package/dist/cjs/commands/install.js.map +1 -1
  8. package/dist/cjs/commands/list.js +10 -26
  9. package/dist/cjs/commands/list.js.map +1 -1
  10. package/dist/cjs/commands/local.js +10 -10
  11. package/dist/cjs/commands/local.js.map +1 -1
  12. package/dist/cjs/commands/setup.d.cts +1 -1
  13. package/dist/cjs/commands/setup.d.ts +1 -1
  14. package/dist/cjs/commands/setup.js +3 -3
  15. package/dist/cjs/commands/setup.js.map +1 -1
  16. package/dist/cjs/commands/teardown.d.cts +1 -1
  17. package/dist/cjs/commands/teardown.d.ts +1 -1
  18. package/dist/cjs/commands/teardown.js +14 -28
  19. package/dist/cjs/commands/teardown.js.map +1 -1
  20. package/dist/cjs/commands/uninstall.js +7 -7
  21. package/dist/cjs/commands/uninstall.js.map +1 -1
  22. package/dist/cjs/commands/which.d.cts +1 -1
  23. package/dist/cjs/commands/which.d.ts +1 -1
  24. package/dist/cjs/commands/which.js +7 -7
  25. package/dist/cjs/commands/which.js.map +1 -1
  26. package/dist/cjs/worker.js +5 -26
  27. package/dist/cjs/worker.js.map +1 -1
  28. package/dist/esm/cli.js +15 -28
  29. package/dist/esm/cli.js.map +1 -1
  30. package/dist/esm/commands/default.js +3 -3
  31. package/dist/esm/commands/default.js.map +1 -1
  32. package/dist/esm/commands/install.js +4 -4
  33. package/dist/esm/commands/install.js.map +1 -1
  34. package/dist/esm/commands/list.js +4 -3
  35. package/dist/esm/commands/list.js.map +1 -1
  36. package/dist/esm/commands/local.js +5 -5
  37. package/dist/esm/commands/local.js.map +1 -1
  38. package/dist/esm/commands/setup.d.ts +1 -1
  39. package/dist/esm/commands/setup.js +2 -2
  40. package/dist/esm/commands/setup.js.map +1 -1
  41. package/dist/esm/commands/teardown.d.ts +1 -1
  42. package/dist/esm/commands/teardown.js +12 -9
  43. package/dist/esm/commands/teardown.js.map +1 -1
  44. package/dist/esm/commands/uninstall.js +2 -2
  45. package/dist/esm/commands/uninstall.js.map +1 -1
  46. package/dist/esm/commands/which.d.ts +1 -1
  47. package/dist/esm/commands/which.js +5 -5
  48. package/dist/esm/commands/which.js.map +1 -1
  49. package/dist/esm/worker.js +3 -16
  50. package/dist/esm/worker.js.map +1 -1
  51. package/package.json +13 -10
  52. package/scripts/ensure-test-binaries.ts +27 -0
  53. package/scripts/postinstall.cjs +264 -75
  54. package/dist/cjs/lib/loadSpawnTerm.d.cts +0 -19
  55. package/dist/cjs/lib/loadSpawnTerm.d.ts +0 -19
  56. package/dist/cjs/lib/loadSpawnTerm.js +0 -103
  57. package/dist/cjs/lib/loadSpawnTerm.js.map +0 -1
  58. package/dist/esm/lib/loadSpawnTerm.d.ts +0 -19
  59. package/dist/esm/lib/loadSpawnTerm.js +0 -42
  60. package/dist/esm/lib/loadSpawnTerm.js.map +0 -1
  61. package/shim/Makefile +0 -58
  62. package/shim/go.mod +0 -3
  63. 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 shims from ~/.nvu/bin
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 _exit = /*#__PURE__*/ _interop_require_default(require("exit"));
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 shims = [
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 _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
34
- try {
35
- for(var _iterator = shims[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
36
- var shim = _step.value;
37
- var shimPath = _path.default.join(binDir, shim + ext);
38
- if (_fs.default.existsSync(shimPath)) {
39
- _fs.default.unlinkSync(shimPath);
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, " shim(s) from ").concat(binDir));
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 shims found to remove.');
48
+ console.log('No binaries found to remove.');
63
49
  }
64
- (0, _exit.default)(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 shims from ~/.nvu/bin\n */\nexport default function teardownCmd(_args: string[]): void {\n const binDir = path.join(storagePath, 'bin');\n\n const shims = ['node', 'npm', 'npx'];\n const ext = process.platform === 'win32' ? '.exe' : '';\n\n let removed = 0;\n for (const shim of shims) {\n const shimPath = path.join(binDir, shim + ext);\n if (fs.existsSync(shimPath)) {\n fs.unlinkSync(shimPath);\n removed++;\n }\n }\n\n if (removed > 0) {\n console.log(`Removed ${removed} shim(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 shims found to remove.');\n }\n\n exit(0);\n}\n"],"names":["teardownCmd","_args","binDir","path","join","storagePath","shims","ext","process","platform","removed","shim","shimPath","fs","existsSync","unlinkSync","console","log","exit"],"mappings":";;;;+BAKA;;;;CAIC,GACD;;;eAAwBA;;;2DAVP;yDACF;2DACE;2BACW;;;;;;AAOb,SAASA,YAAYC,KAAe;IACjD,IAAMC,SAASC,aAAI,CAACC,IAAI,CAACC,wBAAW,EAAE;IAEtC,IAAMC,QAAQ;QAAC;QAAQ;QAAO;KAAM;IACpC,IAAMC,MAAMC,QAAQC,QAAQ,KAAK,UAAU,SAAS;IAEpD,IAAIC,UAAU;QACT,kCAAA,2BAAA;;QAAL,QAAK,YAAcJ,0BAAd,SAAA,6BAAA,QAAA,yBAAA,iCAAqB;YAArB,IAAMK,OAAN;YACH,IAAMC,WAAWT,aAAI,CAACC,IAAI,CAACF,QAAQS,OAAOJ;YAC1C,IAAIM,WAAE,CAACC,UAAU,CAACF,WAAW;gBAC3BC,WAAE,CAACE,UAAU,CAACH;gBACdF;YACF;QACF;;QANK;QAAA;;;iBAAA,6BAAA;gBAAA;;;gBAAA;sBAAA;;;;IAQL,IAAIA,UAAU,GAAG;QACfM,QAAQC,GAAG,CAAC,AAAC,WAAkCf,OAAxBQ,SAAQ,kBAAuB,OAAPR;QAC/Cc,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;IACd,OAAO;QACLD,QAAQC,GAAG,CAAC;IACd;IAEAC,IAAAA,aAAI,EAAC;AACP"}
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 _exit = /*#__PURE__*/ _interop_require_default(require("exit"));
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, _exit.default)(1);
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, 'versions');
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, _exit.default)(1);
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, _exit.default)(1);
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, _exit.default)(1);
82
+ (0, _exitcompat.default)(1);
83
83
  return;
84
84
  }
85
- (0, _exit.default)(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, 'versions');\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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"}
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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"}
@@ -2,6 +2,6 @@
2
2
  * nvu which
3
3
  *
4
4
  * Show which Node binary would be used based on current directory.
5
- * This simulates what the shim would do.
5
+ * This simulates what the nvu binary would do.
6
6
  */
7
7
  export default function whichCmd(_args: string[]): void;
@@ -2,6 +2,6 @@
2
2
  * nvu which
3
3
  *
4
4
  * Show which Node binary would be used based on current directory.
5
- * This simulates what the shim would do.
5
+ * This simulates what the nvu binary would do.
6
6
  */
7
7
  export default function whichCmd(_args: string[]): void;
@@ -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 shim would do.
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 _exit = /*#__PURE__*/ _interop_require_default(require("exit"));
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 shim
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, _exit.default)(1);
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, 'versions');
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, _exit.default)(0);
64
+ (0, _exitcompat.default)(0);
65
65
  }
66
66
  /**
67
- * Resolve version from config files (mirrors shim logic)
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 shim 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 shim\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, 'versions');\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 shim 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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"}
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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"}
@@ -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 lazy dependencies in parallel
138
- var loaderQueue = new _queuecb.default();
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);
@@ -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":";;;;+BA6DA;;;eAAwBA;;;mEA7DiB;yDAC1B;0EACsC;gCAEF;2DAClC;8DACC;qEACK;qEACI;yBACoB;wBAChB;2BACH;+EACO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAInC,IAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAC3F,IAAMC,OAAON,YAAY,aAAa;AAEtC,iEAAiE;AACjE,SAASO,mBAAmBC,OAAe;IACzC,IAAI;QACF,IAAMC,UAAUC,WAAE,CAACC,YAAY,CAACH,SAAS;QACzC,uDAAuD;QACvD,8CAA8C;QAC9C,IAAMI,QAAQH,QAAQG,KAAK,CAAC;QAC5B,IAAIA,OAAO;YACT,IAAMC,eAAeD,KAAK,CAAC,EAAE;YAC7B,IAAME,SAASC,aAAI,CAACC,OAAO,CAACR;YAC5B,OAAOO,aAAI,CAACE,IAAI,CAACH,QAAQD;QAC3B;IACF,EAAE,OAAOK,IAAI;IACX,SAAS;IACX;IACA,OAAO;AACT;AAEA,wFAAwF;AACxF,yFAAyF;AACzF,SAASC,eAAeC,OAAe,EAAEC,IAAc;IACrD,IAAI,CAACrB,WAAW,OAAO;QAAEoB,SAAAA;QAASC,MAAAA;IAAK;IAEvC,sCAAsC;IACtC,IAAIC,IAAAA,wBAAc,EAACF,QAAQG,WAAW,IAAI,SAAS;QACjD,IAAMC,aAAajB,mBAAmBa;QACtC,IAAII,YAAY;YACd,OAAO;gBAAEJ,SAASd;gBAAMe,MAAM;oBAACG;iBAAoB,CAArB,OAAa,qBAAGH;YAAM;QACtD;IACF;IAEA,6EAA6E;IAC7E,IAAI;QACF,IAAMI,UAAUC,IAAAA,uBAAU,EAACN;QAC3B,OAAO;YAAEA,SAASd;YAAMe,MAAM;gBAACI;aAAiB,CAAlB,OAAU,qBAAGJ;QAAM;IACnD,EAAE,OAAOH,IAAI;IACX,+CAA+C;IACjD;IAEA,OAAO;QAAEE,SAAAA;QAASC,MAAAA;IAAK;AACzB;AAEe,SAAStB,OAAO4B,iBAAyB,EAAEP,OAAe,EAAEC,IAAc,EAAEO,OAAmB,EAAEC,QAAqB;IACnI,mCAAmC;IACnCC,IAAAA,iCAAsB,EAAC,SAACC,SAASC;QAC/B,IAAID,SAAS,OAAOF,SAASE;QAE7BE,IAAAA,4BAAe,EAACN,mBAAmBC,SAA2B,SAACM,KAAaC;YAC1E,IAAID,KAAK;gBACPL,SAASK;gBACT;YACF;YACA,IAAI,CAACC,SAASC,MAAM,EAAE;gBACpBP,SAAS,IAAIQ,MAAM,AAAC,sCAAuD,OAAlBV;gBACzD;YACF;YAEA,IAAMW,iBAAiB;gBAAEC,aAAAA,wBAAW;eAAKX;YACzC,IAAMY,mBAAmBZ;YACzB,IAAMa,UAAuB,EAAE;YAC/B,IAAMC,QAAQ,IAAIC,gBAAK,CAAC;YAExB,oEAAoE;YACpE,IAAMC,cAAchB,QAAQgB,WAAW,KAAK;YAC5C,IAAMC,UAAUV,SAASC,MAAM,IAAI,KAAKU,wBAAa,IAAI,CAACN,iBAAiBO,SAAS,GAAGD,IAAAA,wBAAa,EAAC;gBAAEE,QAAQ,AAAC,GAAa3B,OAAXD,SAAQ,KAAkB,OAAfC,KAAKJ,IAAI,CAAC;gBAAQgC,eAAe;gBAAML,aAAAA;YAAY,KAAK;YAErLT,SAASe,OAAO,CAAC,SAACC;gBAChBT,MAAMU,KAAK,CAAC,SAACC;oBACXrB,eAAemB,SAASb,gBAAgB,SAACgB,MAAMC;4BASpCC,OAAT,SAASA,KAAKtB,GAAI,EAAEuB,GAAI;4BACtB,IAAIvB,OAAOA,IAAIwB,OAAO,CAACC,OAAO,CAAC,0BAA0B,GAAG;gCAC1DF,MAAMvB;gCACNA,MAAM;4BACR;4BACAO,QAAQmB,IAAI,CAAC;gCAAEC,SAAAA;gCAASzC,SAAAA;gCAAS+B,SAAAA;gCAASW,OAAO5B;gCAAK6B,QAAQN;4BAAI;4BAClEJ;wBACF;wBAfA,IAAMQ,UAAUN,YAAYA,SAASnB,MAAM,KAAK,IAAImB,QAAQ,CAAC,EAAE,GAAG;wBAClE,IAAI,CAACM,SAAS;4BACZpB,QAAQmB,IAAI,CAAC;gCAAEC,SAAAA;gCAASzC,SAAAA;gCAAS+B,SAAAA;gCAASW,OAAO,IAAIzB,MAAM,AAAC,0CAA6D2B,OAApBb,SAAQ,cAAqC,OAAzBa,KAAKC,SAAS,CAACV;gCAAcQ,QAAQ;4BAAK;4BACnK,OAAOlC;wBACT;wBACA,IAAMqC,eAAeC,IAAAA,8BAAkB,EAACN,QAAQO,WAAW,EAAExC;wBAC7D,IAAMyC,SAASR,QAAQV,OAAO;wBAW9B,+DAA+D;wBAC/D,IAAMmB,WAAWnD,eAAeC,SAASC;wBAEzC,IAAIc,SAASC,MAAM,GAAG,GAAG;4BACvB,gFAAgF;4BAChF,IAAI,CAACR,QAAQ2C,MAAM,EAAEC,QAAQC,GAAG,CAAC,AAAC,KAAwE,OAApEC,IAAAA,0BAAe,EAAC;gCAACJ,SAASlD,OAAO;6BAAC,CAACuD,MAAM,CAACL,SAASjD,IAAI,GAAGJ,IAAI,CAAC;4BACrG,OAAO2D,IAAAA,qBAAK,EAACN,SAASlD,OAAO,EAAEkD,SAASjD,IAAI,EAAE6C,cAAcV;wBAC9D;wBACA,IAAIX,SAASA,QAAQ+B,KAAK,CAACN,SAASlD,OAAO,EAAEkD,SAASjD,IAAI,EAAE6C,cAAc;4BAAEW,OAAOR;4BAAQS,UAAUtC,iBAAiBsC,QAAQ;wBAAC,GAAGtB;6BAC7HuB,IAAAA,uBAAc,EAACT,SAASlD,OAAO,EAAEkD,SAASjD,IAAI,EAAE6C,cAAc;4BAAEG,QAAAA;wBAAO,GAAGb;oBACjF;gBACF;YACF;YACAd,MAAMsC,KAAK,CAAC,SAAC9C;gBACX,IAAIW,SAAS;oBACXA,QAAQoC,YAAY,CAAC;wBACnB/C,MAAML,SAASK,OAAOL,SAAS,MAAMY;oBACvC;gBACF,OAAO;oBACLP,MAAML,SAASK,OAAOL,SAAS,MAAMY;gBACvC;YACF;QACF;IACF;AACF"}
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 shims to ~/.nvu/bin');
33
- console.log(' teardown Remove shims from ~/.nvu/bin');
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
- // Load spawn-term to get figures/formatArguments for output formatting
118
- loadSpawnTerm((_loadErr, mod)=>{
119
- const { createSession, figures, formatArguments } = mod || {
120
- createSession: undefined,
121
- figures: {
122
- tick: '',
123
- cross: ''
124
- },
125
- formatArguments: (x)=>x
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
  });
@@ -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 loadSpawnTerm from './lib/loadSpawnTerm.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 shims to ~/.nvu/bin');\n console.log(' teardown Remove shims 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 // Load spawn-term to get figures/formatArguments for output formatting\n loadSpawnTerm((_loadErr, mod) => {\n const { createSession, figures, formatArguments } = mod || { createSession: undefined, figures: { tick: '✓', cross: '✗' }, formatArguments: (x: string[]) => x };\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 exit(err || errors.length ? ERROR_CODE : 0);\n });\n } else {\n exit(err || errors.length ? ERROR_CODE : 0);\n }\n });\n};\n"],"names":["exit","fs","getopts","path","url","isCommand","runCommand","run","loadSpawnTerm","__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","_loadErr","mod","createSession","figures","formatArguments","undefined","tick","cross","x","forEach","res"],"mappings":"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"}
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.startsWith('-')) {
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.startsWith('-')) {\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","startsWith","writeFileSync"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,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,wCAAwC;IACxC,IAAI,CAACG,WAAWA,QAAQC,UAAU,CAAC,MAAM;QACvCH,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
+ {"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.startsWith('-')) {
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, 'versions');
34
+ const versionsPath = path.join(storagePath, 'installed');
35
35
  nodeVersionInstall(version, {
36
36
  installPath: versionsPath
37
37
  }, (installErr, results)=>{