node-version-use 1.9.9 → 2.0.0

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 (84) hide show
  1. package/README.md +121 -23
  2. package/dist/cjs/cli.js +25 -6
  3. package/dist/cjs/cli.js.map +1 -1
  4. package/dist/cjs/commands/default.d.cts +7 -0
  5. package/dist/cjs/commands/default.d.ts +7 -0
  6. package/dist/cjs/commands/default.js +57 -0
  7. package/dist/cjs/commands/default.js.map +1 -0
  8. package/dist/cjs/commands/index.d.cts +3 -0
  9. package/dist/cjs/commands/index.d.ts +3 -0
  10. package/dist/cjs/commands/index.js +54 -0
  11. package/dist/cjs/commands/index.js.map +1 -0
  12. package/dist/cjs/commands/install.d.cts +6 -0
  13. package/dist/cjs/commands/install.d.ts +6 -0
  14. package/dist/cjs/commands/install.js +69 -0
  15. package/dist/cjs/commands/install.js.map +1 -0
  16. package/dist/cjs/commands/list.d.cts +6 -0
  17. package/dist/cjs/commands/list.d.ts +6 -0
  18. package/dist/cjs/commands/list.js +93 -0
  19. package/dist/cjs/commands/list.js.map +1 -0
  20. package/dist/cjs/commands/local.d.cts +7 -0
  21. package/dist/cjs/commands/local.d.ts +7 -0
  22. package/dist/cjs/commands/local.js +69 -0
  23. package/dist/cjs/commands/local.js.map +1 -0
  24. package/dist/cjs/commands/setup.d.cts +7 -0
  25. package/dist/cjs/commands/setup.d.ts +7 -0
  26. package/dist/cjs/commands/setup.js +55 -0
  27. package/dist/cjs/commands/setup.js.map +1 -0
  28. package/dist/cjs/commands/teardown.d.cts +6 -0
  29. package/dist/cjs/commands/teardown.d.ts +6 -0
  30. package/dist/cjs/commands/teardown.js +66 -0
  31. package/dist/cjs/commands/teardown.js.map +1 -0
  32. package/dist/cjs/commands/uninstall.d.cts +6 -0
  33. package/dist/cjs/commands/uninstall.d.ts +6 -0
  34. package/dist/cjs/commands/uninstall.js +148 -0
  35. package/dist/cjs/commands/uninstall.js.map +1 -0
  36. package/dist/cjs/commands/which.d.cts +7 -0
  37. package/dist/cjs/commands/which.d.ts +7 -0
  38. package/dist/cjs/commands/which.js +117 -0
  39. package/dist/cjs/commands/which.js.map +1 -0
  40. package/dist/cjs/compat.d.cts +17 -0
  41. package/dist/cjs/compat.d.ts +17 -0
  42. package/dist/cjs/compat.js +47 -1
  43. package/dist/cjs/compat.js.map +1 -1
  44. package/dist/cjs/constants.js +1 -1
  45. package/dist/cjs/constants.js.map +1 -1
  46. package/dist/esm/cli.js +23 -4
  47. package/dist/esm/cli.js.map +1 -1
  48. package/dist/esm/commands/default.d.ts +7 -0
  49. package/dist/esm/commands/default.js +41 -0
  50. package/dist/esm/commands/default.js.map +1 -0
  51. package/dist/esm/commands/index.d.ts +3 -0
  52. package/dist/esm/commands/index.js +27 -0
  53. package/dist/esm/commands/index.js.map +1 -0
  54. package/dist/esm/commands/install.d.ts +6 -0
  55. package/dist/esm/commands/install.js +53 -0
  56. package/dist/esm/commands/install.js.map +1 -0
  57. package/dist/esm/commands/list.d.ts +6 -0
  58. package/dist/esm/commands/list.js +52 -0
  59. package/dist/esm/commands/list.js.map +1 -0
  60. package/dist/esm/commands/local.d.ts +7 -0
  61. package/dist/esm/commands/local.js +51 -0
  62. package/dist/esm/commands/local.js.map +1 -0
  63. package/dist/esm/commands/setup.d.ts +7 -0
  64. package/dist/esm/commands/setup.js +39 -0
  65. package/dist/esm/commands/setup.js.map +1 -0
  66. package/dist/esm/commands/teardown.d.ts +6 -0
  67. package/dist/esm/commands/teardown.js +33 -0
  68. package/dist/esm/commands/teardown.js.map +1 -0
  69. package/dist/esm/commands/uninstall.d.ts +6 -0
  70. package/dist/esm/commands/uninstall.js +132 -0
  71. package/dist/esm/commands/uninstall.js.map +1 -0
  72. package/dist/esm/commands/which.d.ts +7 -0
  73. package/dist/esm/commands/which.js +101 -0
  74. package/dist/esm/commands/which.js.map +1 -0
  75. package/dist/esm/compat.d.ts +17 -0
  76. package/dist/esm/compat.js +39 -2
  77. package/dist/esm/compat.js.map +1 -1
  78. package/dist/esm/constants.js +2 -1
  79. package/dist/esm/constants.js.map +1 -1
  80. package/package.json +11 -4
  81. package/scripts/postinstall.cjs +273 -0
  82. package/shim/Makefile +58 -0
  83. package/shim/go.mod +3 -0
  84. package/shim/main.go +302 -0
@@ -1,2 +1,19 @@
1
1
  export declare function homedir(): string;
2
2
  export declare function stringEndsWith(str: string, search: string, position?: number): boolean;
3
+ /**
4
+ * Recursive mkdir for Node.js 0.8+
5
+ */
6
+ export declare function mkdirpSync(dir: string): void;
7
+ /**
8
+ * Recursive rm for Node.js 0.8+
9
+ */
10
+ export declare function rmSync(dir: string): void;
11
+ /**
12
+ * Read directory entries with types for Node.js 0.8+
13
+ * Returns array of {name, isDirectory()}
14
+ */
15
+ export interface DirEntry {
16
+ name: string;
17
+ isDirectory(): boolean;
18
+ }
19
+ export declare function readdirWithTypes(dir: string): DirEntry[];
@@ -15,22 +15,36 @@ _export(exports, {
15
15
  get homedir () {
16
16
  return homedir;
17
17
  },
18
+ get mkdirpSync () {
19
+ return mkdirpSync;
20
+ },
21
+ get readdirWithTypes () {
22
+ return readdirWithTypes;
23
+ },
24
+ get rmSync () {
25
+ return rmSync;
26
+ },
18
27
  get stringEndsWith () {
19
28
  return stringEndsWith;
20
29
  }
21
30
  });
31
+ var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
32
+ var _module = /*#__PURE__*/ _interop_require_default(require("module"));
22
33
  var _os = /*#__PURE__*/ _interop_require_default(require("os"));
34
+ var _path = /*#__PURE__*/ _interop_require_default(require("path"));
23
35
  function _interop_require_default(obj) {
24
36
  return obj && obj.__esModule ? obj : {
25
37
  default: obj
26
38
  };
27
39
  }
40
+ // Use existing require in CJS, or createRequire in ESM (Node 12.2+)
41
+ var _require = typeof require === 'undefined' ? _module.default.createRequire(require("url").pathToFileURL(__filename).toString()) : require;
28
42
  var hasHomedir = typeof _os.default.homedir === 'function';
29
43
  function homedir() {
30
44
  if (hasHomedir) {
31
45
  return _os.default.homedir();
32
46
  }
33
- var home = require('homedir-polyfill');
47
+ var home = _require('homedir-polyfill');
34
48
  return home();
35
49
  }
36
50
  /**
@@ -45,4 +59,36 @@ function stringEndsWith(str, search, position) {
45
59
  var len = position === undefined ? str.length : position;
46
60
  return str.lastIndexOf(search) === len - search.length;
47
61
  }
62
+ function mkdirpSync(dir) {
63
+ var mkdirp = _require('mkdirp-classic');
64
+ mkdirp.sync(dir);
65
+ }
66
+ function rmSync(dir) {
67
+ var safeRmSync = _require('fs-remove-compat').safeRmSync;
68
+ safeRmSync(dir);
69
+ }
70
+ function readdirWithTypes(dir) {
71
+ var names = _fs.default.readdirSync(dir);
72
+ return names.map(function(name) {
73
+ var fullPath = _path.default.join(dir, name);
74
+ var stat;
75
+ try {
76
+ stat = _fs.default.statSync(fullPath);
77
+ } catch (_e) {
78
+ // If stat fails, treat as non-directory
79
+ return {
80
+ name: name,
81
+ isDirectory: function() {
82
+ return false;
83
+ }
84
+ };
85
+ }
86
+ return {
87
+ name: name,
88
+ isDirectory: function() {
89
+ return stat.isDirectory();
90
+ }
91
+ };
92
+ });
93
+ }
48
94
  /* 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/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\nimport os from 'os';\n\nvar hasHomedir = typeof os.homedir === 'function';\n\nexport function homedir(): string {\n if (hasHomedir) {\n return os.homedir();\n }\n var home = require('homedir-polyfill');\n return home();\n}\n\n/**\n * String.prototype.endsWith wrapper for Node.js 0.8+\n * - Uses native endsWith on Node 4.0+ / ES2015+\n * - Falls back to lastIndexOf on Node 0.8-3.x\n */\nvar hasEndsWith = typeof String.prototype.endsWith === 'function';\n\nexport function stringEndsWith(str: string, search: string, position?: number): boolean {\n if (hasEndsWith) {\n return str.endsWith(search, position);\n }\n var len = position === undefined ? str.length : position;\n return str.lastIndexOf(search) === len - search.length;\n}\n"],"names":["homedir","stringEndsWith","hasHomedir","os","home","require","hasEndsWith","String","prototype","endsWith","str","search","position","len","undefined","length","lastIndexOf"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QAKeA;eAAAA;;QAeAC;eAAAA;;;yDAnBD;;;;;;AAEf,IAAIC,aAAa,OAAOC,WAAE,CAACH,OAAO,KAAK;AAEhC,SAASA;IACd,IAAIE,YAAY;QACd,OAAOC,WAAE,CAACH,OAAO;IACnB;IACA,IAAII,OAAOC,QAAQ;IACnB,OAAOD;AACT;AAEA;;;;CAIC,GACD,IAAIE,cAAc,OAAOC,OAAOC,SAAS,CAACC,QAAQ,KAAK;AAEhD,SAASR,eAAeS,GAAW,EAAEC,MAAc,EAAEC,QAAiB;IAC3E,IAAIN,aAAa;QACf,OAAOI,IAAID,QAAQ,CAACE,QAAQC;IAC9B;IACA,IAAIC,MAAMD,aAAaE,YAAYJ,IAAIK,MAAM,GAAGH;IAChD,OAAOF,IAAIM,WAAW,CAACL,YAAYE,MAAMF,OAAOI,MAAM;AACxD"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/compat.ts"],"sourcesContent":["/**\n * Compatibility Layer for Node.js 0.8+\n * Local to this package - contains only needed functions.\n */\nimport fs from 'fs';\nimport _Module from 'module';\nimport os from 'os';\nimport path from 'path';\n\n// Use existing require in CJS, or createRequire in ESM (Node 12.2+)\nvar _require = typeof require === 'undefined' ? _Module.createRequire(import.meta.url) : require;\n\nvar hasHomedir = typeof os.homedir === 'function';\n\nexport function homedir(): string {\n if (hasHomedir) {\n return os.homedir();\n }\n var home = _require('homedir-polyfill');\n return home();\n}\n\n/**\n * String.prototype.endsWith wrapper for Node.js 0.8+\n * - Uses native endsWith on Node 4.0+ / ES2015+\n * - Falls back to lastIndexOf on Node 0.8-3.x\n */\nvar hasEndsWith = typeof String.prototype.endsWith === 'function';\n\nexport function stringEndsWith(str: string, search: string, position?: number): boolean {\n if (hasEndsWith) {\n return str.endsWith(search, position);\n }\n var len = position === undefined ? str.length : position;\n return str.lastIndexOf(search) === len - search.length;\n}\n\n/**\n * Recursive mkdir for Node.js 0.8+\n */\nexport function mkdirpSync(dir: string): void {\n var mkdirp = _require('mkdirp-classic');\n mkdirp.sync(dir);\n}\n\n/**\n * Recursive rm for Node.js 0.8+\n */\nexport function rmSync(dir: string): void {\n var safeRmSync = _require('fs-remove-compat').safeRmSync;\n safeRmSync(dir);\n}\n\n/**\n * Read directory entries with types for Node.js 0.8+\n * Returns array of {name, isDirectory()}\n */\nexport interface DirEntry {\n name: string;\n isDirectory(): boolean;\n}\n\nexport function readdirWithTypes(dir: string): DirEntry[] {\n var names = fs.readdirSync(dir);\n return names.map((name) => {\n var fullPath = path.join(dir, name);\n var stat: fs.Stats;\n try {\n stat = fs.statSync(fullPath);\n } catch (_e) {\n // If stat fails, treat as non-directory\n return { name: name, isDirectory: () => false };\n }\n return {\n name: name,\n isDirectory: () => stat.isDirectory(),\n };\n });\n}\n"],"names":["homedir","mkdirpSync","readdirWithTypes","rmSync","stringEndsWith","_require","require","_Module","createRequire","hasHomedir","os","home","hasEndsWith","String","prototype","endsWith","str","search","position","len","undefined","length","lastIndexOf","dir","mkdirp","sync","safeRmSync","names","fs","readdirSync","map","name","fullPath","path","join","stat","statSync","_e","isDirectory"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QAWeA;eAAAA;;QA0BAC;eAAAA;;QAsBAC;eAAAA;;QAdAC;eAAAA;;QAnBAC;eAAAA;;;yDAzBD;6DACK;yDACL;2DACE;;;;;;AAEjB,oEAAoE;AACpE,IAAIC,WAAW,OAAOC,YAAY,cAAcC,eAAO,CAACC,aAAa,CAAC,uDAAmBF;AAEzF,IAAIG,aAAa,OAAOC,WAAE,CAACV,OAAO,KAAK;AAEhC,SAASA;IACd,IAAIS,YAAY;QACd,OAAOC,WAAE,CAACV,OAAO;IACnB;IACA,IAAIW,OAAON,SAAS;IACpB,OAAOM;AACT;AAEA;;;;CAIC,GACD,IAAIC,cAAc,OAAOC,OAAOC,SAAS,CAACC,QAAQ,KAAK;AAEhD,SAASX,eAAeY,GAAW,EAAEC,MAAc,EAAEC,QAAiB;IAC3E,IAAIN,aAAa;QACf,OAAOI,IAAID,QAAQ,CAACE,QAAQC;IAC9B;IACA,IAAIC,MAAMD,aAAaE,YAAYJ,IAAIK,MAAM,GAAGH;IAChD,OAAOF,IAAIM,WAAW,CAACL,YAAYE,MAAMF,OAAOI,MAAM;AACxD;AAKO,SAASpB,WAAWsB,GAAW;IACpC,IAAIC,SAASnB,SAAS;IACtBmB,OAAOC,IAAI,CAACF;AACd;AAKO,SAASpB,OAAOoB,GAAW;IAChC,IAAIG,aAAarB,SAAS,oBAAoBqB,UAAU;IACxDA,WAAWH;AACb;AAWO,SAASrB,iBAAiBqB,GAAW;IAC1C,IAAII,QAAQC,WAAE,CAACC,WAAW,CAACN;IAC3B,OAAOI,MAAMG,GAAG,CAAC,SAACC;QAChB,IAAIC,WAAWC,aAAI,CAACC,IAAI,CAACX,KAAKQ;QAC9B,IAAII;QACJ,IAAI;YACFA,OAAOP,WAAE,CAACQ,QAAQ,CAACJ;QACrB,EAAE,OAAOK,IAAI;YACX,wCAAwC;YACxC,OAAO;gBAAEN,MAAMA;gBAAMO,aAAa;2BAAM;;YAAM;QAChD;QACA,OAAO;YACLP,MAAMA;YACNO,aAAa;uBAAMH,KAAKG,WAAW;;QACrC;IACF;AACF"}
@@ -15,5 +15,5 @@ function _interop_require_default(obj) {
15
15
  default: obj
16
16
  };
17
17
  }
18
- var storagePath = _path.default.join((0, _compatts.homedir)(), '.nvu');
18
+ var storagePath = process.env.NVU_HOME || _path.default.join((0, _compatts.homedir)(), '.nvu');
19
19
  /* 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/constants.ts"],"sourcesContent":["import path from 'path';\nimport { homedir } from './compat.ts';\n\nexport const storagePath = path.join(homedir(), '.nvu') as string;\n"],"names":["storagePath","path","join","homedir"],"mappings":";;;;+BAGaA;;;eAAAA;;;2DAHI;wBACO;;;;;;AAEjB,IAAMA,cAAcC,aAAI,CAACC,IAAI,CAACC,IAAAA,iBAAO,KAAI"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/constants.ts"],"sourcesContent":["import path from 'path';\nimport { homedir } from './compat.ts';\n\n// Allow NVU_HOME override for testing\nexport const storagePath = (process.env.NVU_HOME || path.join(homedir(), '.nvu')) as string;\n"],"names":["storagePath","process","env","NVU_HOME","path","join","homedir"],"mappings":";;;;+BAIaA;;;eAAAA;;;2DAJI;wBACO;;;;;;AAGjB,IAAMA,cAAeC,QAAQC,GAAG,CAACC,QAAQ,IAAIC,aAAI,CAACC,IAAI,CAACC,IAAAA,iBAAO,KAAI"}
package/dist/esm/cli.js CHANGED
@@ -3,6 +3,7 @@ import fs from 'fs';
3
3
  import getopts from 'getopts-compat';
4
4
  import path from 'path';
5
5
  import url from 'url';
6
+ import { isCommand, runCommand } from './commands/index.js';
6
7
  import run from './index.js';
7
8
  import loadSpawnTerm from './lib/loadSpawnTerm.js';
8
9
  const __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));
@@ -17,9 +18,20 @@ function printHelp(name) {
17
18
  console.log(`${name} v${version}`);
18
19
  console.log('');
19
20
  console.log(`Usage: ${name} [options] <version> <command> [args...]`);
21
+ console.log(` ${name} <subcommand> [args...]`);
20
22
  console.log('');
21
23
  console.log('Run commands with specific Node.js versions');
22
24
  console.log('');
25
+ console.log('Subcommands:');
26
+ console.log(' default [version] Set or display the global default Node version');
27
+ console.log(' local [version] Set or display the local Node version (.nvmrc)');
28
+ console.log(' install <version> Download and install a Node version');
29
+ console.log(' uninstall <version> Remove an installed Node version');
30
+ console.log(' list List installed Node versions');
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');
34
+ console.log('');
23
35
  console.log('Options:');
24
36
  console.log(' -v, --version Print version number');
25
37
  console.log(' -h, --help Print this help message');
@@ -31,9 +43,11 @@ function printHelp(name) {
31
43
  console.log(' --silent Suppress logging');
32
44
  console.log('');
33
45
  console.log('Examples:');
34
- console.log(` ${name} 22 node --version`);
35
- console.log(` ${name} 22,20,18 npm test`);
36
- console.log(` ${name} engines node --version`);
46
+ console.log(` ${name} 22 node --version Run with Node 22`);
47
+ console.log(` ${name} 22,20,18 npm test Run with multiple versions`);
48
+ console.log(` ${name} engines node --version Use version from package.json`);
49
+ console.log(` ${name} default 20 Set global default to Node 20`);
50
+ console.log(` ${name} local 18 Create .nvmrc with Node 18`);
37
51
  }
38
52
  export default ((argv, name)=>{
39
53
  const options = getopts(argv, {
@@ -71,10 +85,15 @@ export default ((argv, name)=>{
71
85
  exit(0);
72
86
  return;
73
87
  }
88
+ // Check if first argument is a subcommand
89
+ const args = options._;
90
+ if (args.length > 0 && isCommand(args[0])) {
91
+ runCommand(args[0], args.slice(1));
92
+ return;
93
+ }
74
94
  // define.option('-r, --range [range]', 'range type of major, minor, or patch with filters of lts, even, odd for version string expressions', 'major,even');
75
95
  // define.option('-s, --silent', 'suppress logging', false);
76
96
  options.sort = options.desc ? -1 : 1;
77
- const args = options._;
78
97
  if (args.length === 0) {
79
98
  console.log(`Missing version expression. Example usage: ${name} version command arg1 arg2`);
80
99
  exit(ERROR_CODE);
@@ -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 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('');\n console.log('Run commands with specific Node.js versions');\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`);\n console.log(` ${name} 22,20,18 npm test`);\n console.log(` ${name} engines node --version`);\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 // 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 const args = options._;\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","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","sort","args","_","length","stdio","slice","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';\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":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,aAAa,iBAAiB;AACrC,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,MAAM;AACtB,SAASC,SAAS,EAAEC,UAAU,QAAQ,sBAAsB;AAC5D,OAAOC,SAAS,aAAa;AAC7B,OAAOC,mBAAmB,yBAAyB;AAGnD,MAAMC,YAAYN,KAAKO,OAAO,CAAC,OAAOC,eAAe,cAAcA,aAAaP,IAAIQ,aAAa,CAAC,YAAYR,GAAG;AAEjH,MAAMS,aAAa;AAEnB,SAASC;IACP,MAAMC,cAAcZ,KAAKa,IAAI,CAACP,WAAW,MAAM,MAAM;IACrD,MAAMQ,cAAcC,KAAKC,KAAK,CAAClB,GAAGmB,YAAY,CAACL,aAAa;IAC5D,OAAOE,YAAYI,OAAO;AAC5B;AAEA,SAASC,UAAUC,IAAY;IAC7B,MAAMF,UAAUP;IAChBU,QAAQC,GAAG,CAAC,GAAGF,KAAK,EAAE,EAAEF,SAAS;IACjCG,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC,CAAC,OAAO,EAAEF,KAAK,wCAAwC,CAAC;IACpEC,QAAQC,GAAG,CAAC,CAAC,OAAO,EAAEF,KAAK,uBAAuB,CAAC;IACnDC,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC;IACZD,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEF,KAAK,6CAA6C,CAAC;IACpEC,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEF,KAAK,uDAAuD,CAAC;IAC9EC,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEF,KAAK,0DAA0D,CAAC;IACjFC,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEF,KAAK,0DAA0D,CAAC;IACjFC,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEF,KAAK,uDAAuD,CAAC;AAChF;AAEA,eAAe,CAAA,CAACG,MAAgBH;IAC9B,MAAMI,UAAUzB,QAAQwB,MAAM;QAC5BE,OAAO;YAAEC,OAAO;YAAKC,MAAM;YAAKC,UAAU;YAAKC,WAAW;YAAKC,QAAQ;YAAMZ,SAAS;YAAKa,MAAM;QAAI;QACrGC,SAAS;YAAEN,OAAO;YAAcO,aAAa;QAAK;QAClDC,SAAS;YAAC;YAAU;YAAQ;YAAY;YAAa;YAAe;YAAW;SAAO;QACtFC,WAAW;IACb;IAEA,IAAIX,QAAQN,OAAO,EAAE;QACnBG,QAAQC,GAAG,CAACX;QACZd,KAAK;QACL;IACF;IAEA,IAAI2B,QAAQO,IAAI,EAAE;QAChBZ,UAAUC;QACVvB,KAAK;QACL;IACF;IAEA,0CAA0C;IAC1C,MAAMuC,OAAOZ,QAAQa,CAAC;IACtB,IAAID,KAAKE,MAAM,GAAG,KAAKpC,UAAUkC,IAAI,CAAC,EAAE,GAAG;QACzCjC,WAAWiC,IAAI,CAAC,EAAE,EAAEA,KAAKG,KAAK,CAAC;QAC/B;IACF;IAEA,4JAA4J;IAC5J,4DAA4D;IAC5Df,QAAQgB,IAAI,GAAGhB,QAAQG,IAAI,GAAG,CAAC,IAAI;IAEnC,IAAIS,KAAKE,MAAM,KAAK,GAAG;QACrBjB,QAAQC,GAAG,CAAC,CAAC,2CAA2C,EAAEF,KAAK,0BAA0B,CAAC;QAC1FvB,KAAKa;QACL;IACF;IACA,IAAI0B,KAAKE,MAAM,KAAK,GAAG;QACrBjB,QAAQC,GAAG,CAAC,CAAC,gCAAgC,EAAEF,KAAK,0BAA0B,CAAC;QAC/EvB,KAAKa;QACL;IACF;IAEAc,QAAQiB,KAAK,GAAG,WAAW,qBAAqB;IAChDrC,IAAIgC,IAAI,CAAC,EAAE,EAAEA,IAAI,CAAC,EAAE,EAAEA,KAAKG,KAAK,CAAC,IAAIf,SAAkC,CAACkB,KAAeC;QACrF,IAAID,OAAO,CAACA,IAAIC,OAAO,EAAE;YACvBtB,QAAQC,GAAG,CAACoB,IAAIE,OAAO;YACvB/C,KAAKa;YACL;QACF;QACA,IAAIgC,KAAKC,UAAUD,IAAIC,OAAO;QAC9B,MAAME,SAASF,QAAQG,MAAM,CAAC,CAACC,SAAW,CAAC,CAACA,OAAOC,KAAK;QAExD,IAAI,CAACxB,QAAQM,MAAM,EAAE;YACnB,uEAAuE;YACvEzB,cAAc,CAAC4C,UAAUC;gBACvB,MAAM,EAAEC,aAAa,EAAEC,OAAO,EAAEC,eAAe,EAAE,GAAGH,OAAO;oBAAEC,eAAeG;oBAAWF,SAAS;wBAAEG,MAAM;wBAAKC,OAAO;oBAAI;oBAAGH,iBAAiB,CAACI,IAAgBA;gBAAE;gBAC/J,IAAI,CAACN,eAAe;oBAClB9B,QAAQC,GAAG,CAAC;oBACZqB,QAAQe,OAAO,CAAC,CAACC;wBACftC,QAAQC,GAAG,CAAC,GAAGqC,IAAIX,KAAK,GAAGI,QAAQI,KAAK,GAAGJ,QAAQG,IAAI,CAAC,CAAC,EAAEI,IAAIzC,OAAO,GAAGyC,IAAIX,KAAK,GAAG,CAAC,QAAQ,EAAEW,IAAIX,KAAK,CAACJ,OAAO,EAAE,GAAG,IAAI;oBAC5H;oBACAvB,QAAQC,GAAG,CAAC;oBACZD,QAAQC,GAAG,CAAC,GAAGF,KAAK,CAAC,EAAEiC,gBAAgBjB,MAAMvB,IAAI,CAAC,MAAM;oBACxDQ,QAAQC,GAAG,CAAC,GAAG8B,QAAQG,IAAI,CAAC,CAAC,EAAEZ,QAAQL,MAAM,GAAGO,OAAOP,MAAM,CAAC,UAAU,CAAC;oBACzE,IAAIO,OAAOP,MAAM,EAAEjB,QAAQC,GAAG,CAAC,GAAG8B,QAAQI,KAAK,CAAC,CAAC,EAAEX,OAAOP,MAAM,CAAC,OAAO,CAAC;gBAC3E;gBACAzC,KAAK6C,OAAOG,OAAOP,MAAM,GAAG5B,aAAa;YAC3C;QACF,OAAO;YACLb,KAAK6C,OAAOG,OAAOP,MAAM,GAAG5B,aAAa;QAC3C;IACF;AACF,CAAA,EAAE"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * nvu default [version]
3
+ *
4
+ * Set or display the global default Node version.
5
+ * This is used when no .nvmrc or .nvurc is found in the project.
6
+ */
7
+ export default function defaultCmd(args: string[]): void;
@@ -0,0 +1,41 @@
1
+ import exit from 'exit';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { mkdirpSync } from '../compat.js';
5
+ import { storagePath } from '../constants.js';
6
+ /**
7
+ * nvu default [version]
8
+ *
9
+ * Set or display the global default Node version.
10
+ * This is used when no .nvmrc or .nvurc is found in the project.
11
+ */ export default function defaultCmd(args) {
12
+ var defaultFilePath = path.join(storagePath, 'default');
13
+ // If no version provided, display current default
14
+ if (args.length === 0) {
15
+ if (fs.existsSync(defaultFilePath)) {
16
+ var currentVersion = fs.readFileSync(defaultFilePath, 'utf8').trim();
17
+ console.log(`Current default: ${currentVersion}`);
18
+ } else {
19
+ console.log('No default version set.');
20
+ console.log('Usage: nvu default <version>');
21
+ }
22
+ exit(0);
23
+ return;
24
+ }
25
+ var version = args[0].trim();
26
+ // Validate version format (basic check)
27
+ if (!version || version.startsWith('-')) {
28
+ console.log('Usage: nvu default <version>');
29
+ console.log('Example: nvu default 20');
30
+ exit(1);
31
+ return;
32
+ }
33
+ // Ensure storage directory exists
34
+ if (!fs.existsSync(storagePath)) {
35
+ mkdirpSync(storagePath);
36
+ }
37
+ // Write the default version
38
+ fs.writeFileSync(defaultFilePath, `${version}\n`, 'utf8');
39
+ console.log(`Default Node version set to: ${version}`);
40
+ exit(0);
41
+ }
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ export declare const commands: Record<string, (args: string[]) => void>;
2
+ export declare function isCommand(name: string): boolean;
3
+ export declare function runCommand(name: string, args: string[]): void;
@@ -0,0 +1,27 @@
1
+ import defaultCmd from './default.js';
2
+ import installCmd from './install.js';
3
+ import listCmd from './list.js';
4
+ import localCmd from './local.js';
5
+ import setupCmd from './setup.js';
6
+ import teardownCmd from './teardown.js';
7
+ import uninstallCmd from './uninstall.js';
8
+ import whichCmd from './which.js';
9
+ export const commands = {
10
+ default: defaultCmd,
11
+ local: localCmd,
12
+ list: listCmd,
13
+ which: whichCmd,
14
+ install: installCmd,
15
+ uninstall: uninstallCmd,
16
+ setup: setupCmd,
17
+ teardown: teardownCmd
18
+ };
19
+ export function isCommand(name) {
20
+ return name in commands;
21
+ }
22
+ export function runCommand(name, args) {
23
+ const cmd = commands[name];
24
+ if (cmd) {
25
+ cmd(args);
26
+ }
27
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/index.ts"],"sourcesContent":["import defaultCmd from './default.ts';\nimport installCmd from './install.ts';\nimport listCmd from './list.ts';\nimport localCmd from './local.ts';\nimport setupCmd from './setup.ts';\nimport teardownCmd from './teardown.ts';\nimport uninstallCmd from './uninstall.ts';\nimport whichCmd from './which.ts';\n\nexport const commands: Record<string, (args: string[]) => void> = {\n default: defaultCmd,\n local: localCmd,\n list: listCmd,\n which: whichCmd,\n install: installCmd,\n uninstall: uninstallCmd,\n setup: setupCmd,\n teardown: teardownCmd,\n};\n\nexport function isCommand(name: string): boolean {\n return name in commands;\n}\n\nexport function runCommand(name: string, args: string[]): void {\n const cmd = commands[name];\n if (cmd) {\n cmd(args);\n }\n}\n"],"names":["defaultCmd","installCmd","listCmd","localCmd","setupCmd","teardownCmd","uninstallCmd","whichCmd","commands","default","local","list","which","install","uninstall","setup","teardown","isCommand","name","runCommand","args","cmd"],"mappings":"AAAA,OAAOA,gBAAgB,eAAe;AACtC,OAAOC,gBAAgB,eAAe;AACtC,OAAOC,aAAa,YAAY;AAChC,OAAOC,cAAc,aAAa;AAClC,OAAOC,cAAc,aAAa;AAClC,OAAOC,iBAAiB,gBAAgB;AACxC,OAAOC,kBAAkB,iBAAiB;AAC1C,OAAOC,cAAc,aAAa;AAElC,OAAO,MAAMC,WAAqD;IAChEC,SAAST;IACTU,OAAOP;IACPQ,MAAMT;IACNU,OAAOL;IACPM,SAASZ;IACTa,WAAWR;IACXS,OAAOX;IACPY,UAAUX;AACZ,EAAE;AAEF,OAAO,SAASY,UAAUC,IAAY;IACpC,OAAOA,QAAQV;AACjB;AAEA,OAAO,SAASW,WAAWD,IAAY,EAAEE,IAAc;IACrD,MAAMC,MAAMb,QAAQ,CAACU,KAAK;IAC1B,IAAIG,KAAK;QACPA,IAAID;IACN;AACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * nvu install <version>
3
+ *
4
+ * Download and install a specific Node version.
5
+ */
6
+ export default function installCmd(args: string[]): void;
@@ -0,0 +1,53 @@
1
+ import exit from 'exit';
2
+ import path from 'path';
3
+ import { storagePath } from '../constants.js';
4
+ import loadNodeVersionInstall from '../lib/loadNodeVersionInstall.js';
5
+ /**
6
+ * nvu install <version>
7
+ *
8
+ * Download and install a specific Node version.
9
+ */ export default function installCmd(args) {
10
+ if (args.length === 0) {
11
+ console.log('Usage: nvu install <version>');
12
+ console.log('Example: nvu install 20');
13
+ console.log(' nvu install 20.10.0');
14
+ console.log(' nvu install lts');
15
+ exit(1);
16
+ return;
17
+ }
18
+ const version = args[0].trim();
19
+ // Validate version format (basic check)
20
+ if (!version || version.startsWith('-')) {
21
+ console.log('Usage: nvu install <version>');
22
+ exit(1);
23
+ return;
24
+ }
25
+ console.log(`Installing Node ${version}...`);
26
+ // Load node-version-install dynamically
27
+ loadNodeVersionInstall((err, nodeVersionInstall)=>{
28
+ if (err || !nodeVersionInstall) {
29
+ console.error('Failed to load node-version-install:', (err === null || err === void 0 ? void 0 : err.message) || 'Module not available');
30
+ console.error('Make sure node-version-install is installed: npm install node-version-install');
31
+ exit(1);
32
+ return;
33
+ }
34
+ const versionsPath = path.join(storagePath, 'versions');
35
+ nodeVersionInstall(version, {
36
+ installPath: versionsPath
37
+ }, (installErr, results)=>{
38
+ if (installErr) {
39
+ console.error(`Failed to install Node ${version}:`, installErr.message);
40
+ exit(1);
41
+ return;
42
+ }
43
+ if (results && results.length > 0) {
44
+ const result = results[0];
45
+ console.log(`Successfully installed Node ${result.version}`);
46
+ console.log(`Location: ${result.installPath}`);
47
+ } else {
48
+ console.log(`Node ${version} installed successfully.`);
49
+ }
50
+ exit(0);
51
+ });
52
+ });
53
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/install.ts"],"sourcesContent":["import exit from 'exit';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\nimport loadNodeVersionInstall from '../lib/loadNodeVersionInstall.ts';\n\n/**\n * nvu install <version>\n *\n * Download and install a specific Node version.\n */\nexport default function installCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu install <version>');\n console.log('Example: nvu install 20');\n console.log(' nvu install 20.10.0');\n console.log(' nvu install lts');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n\n // Validate version format (basic check)\n if (!version || version.startsWith('-')) {\n console.log('Usage: nvu install <version>');\n exit(1);\n return;\n }\n\n console.log(`Installing Node ${version}...`);\n\n // Load node-version-install dynamically\n loadNodeVersionInstall((err, nodeVersionInstall) => {\n if (err || !nodeVersionInstall) {\n console.error('Failed to load node-version-install:', err?.message || 'Module not available');\n console.error('Make sure node-version-install is installed: npm install node-version-install');\n exit(1);\n return;\n }\n\n const versionsPath = path.join(storagePath, 'versions');\n\n nodeVersionInstall(\n version,\n {\n installPath: versionsPath,\n },\n (installErr?: Error, results?: { version: string; installPath: string }[]) => {\n if (installErr) {\n console.error(`Failed to install Node ${version}:`, installErr.message);\n exit(1);\n return;\n }\n\n if (results && results.length > 0) {\n const result = results[0];\n console.log(`Successfully installed Node ${result.version}`);\n console.log(`Location: ${result.installPath}`);\n } else {\n console.log(`Node ${version} installed successfully.`);\n }\n exit(0);\n }\n );\n });\n}\n"],"names":["exit","path","storagePath","loadNodeVersionInstall","installCmd","args","length","console","log","version","trim","startsWith","err","nodeVersionInstall","error","message","versionsPath","join","installPath","installErr","results","result"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,UAAU,OAAO;AACxB,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,OAAOC,4BAA4B,mCAAmC;AAEtE;;;;CAIC,GACD,eAAe,SAASC,WAAWC,IAAc;IAC/C,IAAIA,KAAKC,MAAM,KAAK,GAAG;QACrBC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZR,KAAK;QACL;IACF;IAEA,MAAMS,UAAUJ,IAAI,CAAC,EAAE,CAACK,IAAI;IAE5B,wCAAwC;IACxC,IAAI,CAACD,WAAWA,QAAQE,UAAU,CAAC,MAAM;QACvCJ,QAAQC,GAAG,CAAC;QACZR,KAAK;QACL;IACF;IAEAO,QAAQC,GAAG,CAAC,CAAC,gBAAgB,EAAEC,QAAQ,GAAG,CAAC;IAE3C,wCAAwC;IACxCN,uBAAuB,CAACS,KAAKC;QAC3B,IAAID,OAAO,CAACC,oBAAoB;YAC9BN,QAAQO,KAAK,CAAC,wCAAwCF,CAAAA,gBAAAA,0BAAAA,IAAKG,OAAO,KAAI;YACtER,QAAQO,KAAK,CAAC;YACdd,KAAK;YACL;QACF;QAEA,MAAMgB,eAAef,KAAKgB,IAAI,CAACf,aAAa;QAE5CW,mBACEJ,SACA;YACES,aAAaF;QACf,GACA,CAACG,YAAoBC;YACnB,IAAID,YAAY;gBACdZ,QAAQO,KAAK,CAAC,CAAC,uBAAuB,EAAEL,QAAQ,CAAC,CAAC,EAAEU,WAAWJ,OAAO;gBACtEf,KAAK;gBACL;YACF;YAEA,IAAIoB,WAAWA,QAAQd,MAAM,GAAG,GAAG;gBACjC,MAAMe,SAASD,OAAO,CAAC,EAAE;gBACzBb,QAAQC,GAAG,CAAC,CAAC,4BAA4B,EAAEa,OAAOZ,OAAO,EAAE;gBAC3DF,QAAQC,GAAG,CAAC,CAAC,UAAU,EAAEa,OAAOH,WAAW,EAAE;YAC/C,OAAO;gBACLX,QAAQC,GAAG,CAAC,CAAC,KAAK,EAAEC,QAAQ,wBAAwB,CAAC;YACvD;YACAT,KAAK;QACP;IAEJ;AACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * nvu list
3
+ *
4
+ * List all installed Node versions.
5
+ */
6
+ export default function listCmd(_args: string[]): void;
@@ -0,0 +1,52 @@
1
+ import exit from 'exit';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { readdirWithTypes } from '../compat.js';
5
+ import { storagePath } from '../constants.js';
6
+ /**
7
+ * nvu list
8
+ *
9
+ * List all installed Node versions.
10
+ */ export default function listCmd(_args) {
11
+ var versionsPath = path.join(storagePath, 'versions');
12
+ // Check if versions directory exists
13
+ if (!fs.existsSync(versionsPath)) {
14
+ console.log('No Node versions installed.');
15
+ console.log('Install a version: nvu install <version>');
16
+ exit(0);
17
+ return;
18
+ }
19
+ // Read all directories in versions folder
20
+ var entries = readdirWithTypes(versionsPath);
21
+ var versions = entries.filter((entry)=>entry.isDirectory()).map((entry)=>entry.name);
22
+ if (versions.length === 0) {
23
+ console.log('No Node versions installed.');
24
+ console.log('Install a version: nvu install <version>');
25
+ exit(0);
26
+ return;
27
+ }
28
+ // Get the current default
29
+ const defaultFilePath = path.join(storagePath, 'default');
30
+ let defaultVersion = '';
31
+ if (fs.existsSync(defaultFilePath)) {
32
+ defaultVersion = fs.readFileSync(defaultFilePath, 'utf8').trim();
33
+ }
34
+ // Sort versions (simple string sort, could be improved with semver)
35
+ versions.sort((a, b)=>{
36
+ const aParts = a.split('.').map((n)=>parseInt(n, 10) || 0);
37
+ const bParts = b.split('.').map((n)=>parseInt(n, 10) || 0);
38
+ for(let i = 0; i < Math.max(aParts.length, bParts.length); i++){
39
+ const aVal = aParts[i] || 0;
40
+ const bVal = bParts[i] || 0;
41
+ if (aVal !== bVal) return bVal - aVal; // Descending order
42
+ }
43
+ return 0;
44
+ });
45
+ console.log('Installed Node versions:');
46
+ for (const version of versions){
47
+ const isDefault = version === defaultVersion || `v${version}` === defaultVersion || version === `v${defaultVersion}`;
48
+ const marker = isDefault ? ' (default)' : '';
49
+ console.log(` ${version}${marker}`);
50
+ }
51
+ exit(0);
52
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/list.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { readdirWithTypes } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu list\n *\n * List all installed Node versions.\n */\nexport default function listCmd(_args: string[]): void {\n var versionsPath = path.join(storagePath, 'versions');\n\n // Check if versions directory exists\n if (!fs.existsSync(versionsPath)) {\n console.log('No Node versions installed.');\n console.log('Install a version: nvu install <version>');\n exit(0);\n return;\n }\n\n // Read all directories in versions folder\n var entries = readdirWithTypes(versionsPath);\n var versions = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);\n\n if (versions.length === 0) {\n console.log('No Node versions installed.');\n console.log('Install a version: nvu install <version>');\n exit(0);\n return;\n }\n\n // Get the current default\n const defaultFilePath = path.join(storagePath, 'default');\n let defaultVersion = '';\n if (fs.existsSync(defaultFilePath)) {\n defaultVersion = fs.readFileSync(defaultFilePath, 'utf8').trim();\n }\n\n // Sort versions (simple string sort, could be improved with semver)\n versions.sort((a, b) => {\n const aParts = a.split('.').map((n) => parseInt(n, 10) || 0);\n const bParts = b.split('.').map((n) => parseInt(n, 10) || 0);\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n const aVal = aParts[i] || 0;\n const bVal = bParts[i] || 0;\n if (aVal !== bVal) return bVal - aVal; // Descending order\n }\n return 0;\n });\n\n console.log('Installed Node versions:');\n for (const version of versions) {\n const isDefault = version === defaultVersion || `v${version}` === defaultVersion || version === `v${defaultVersion}`;\n const marker = isDefault ? ' (default)' : '';\n console.log(` ${version}${marker}`);\n }\n exit(0);\n}\n"],"names":["exit","fs","path","readdirWithTypes","storagePath","listCmd","_args","versionsPath","join","existsSync","console","log","entries","versions","filter","entry","isDirectory","map","name","length","defaultFilePath","defaultVersion","readFileSync","trim","sort","a","b","aParts","split","n","parseInt","bParts","i","Math","max","aVal","bVal","version","isDefault","marker"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,gBAAgB,QAAQ,eAAe;AAChD,SAASC,WAAW,QAAQ,kBAAkB;AAE9C;;;;CAIC,GACD,eAAe,SAASC,QAAQC,KAAe;IAC7C,IAAIC,eAAeL,KAAKM,IAAI,CAACJ,aAAa;IAE1C,qCAAqC;IACrC,IAAI,CAACH,GAAGQ,UAAU,CAACF,eAAe;QAChCG,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,0CAA0C;IAC1C,IAAIY,UAAUT,iBAAiBI;IAC/B,IAAIM,WAAWD,QAAQE,MAAM,CAAC,CAACC,QAAUA,MAAMC,WAAW,IAAIC,GAAG,CAAC,CAACF,QAAUA,MAAMG,IAAI;IAEvF,IAAIL,SAASM,MAAM,KAAK,GAAG;QACzBT,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,0BAA0B;IAC1B,MAAMoB,kBAAkBlB,KAAKM,IAAI,CAACJ,aAAa;IAC/C,IAAIiB,iBAAiB;IACrB,IAAIpB,GAAGQ,UAAU,CAACW,kBAAkB;QAClCC,iBAAiBpB,GAAGqB,YAAY,CAACF,iBAAiB,QAAQG,IAAI;IAChE;IAEA,oEAAoE;IACpEV,SAASW,IAAI,CAAC,CAACC,GAAGC;QAChB,MAAMC,SAASF,EAAEG,KAAK,CAAC,KAAKX,GAAG,CAAC,CAACY,IAAMC,SAASD,GAAG,OAAO;QAC1D,MAAME,SAASL,EAAEE,KAAK,CAAC,KAAKX,GAAG,CAAC,CAACY,IAAMC,SAASD,GAAG,OAAO;QAC1D,IAAK,IAAIG,IAAI,GAAGA,IAAIC,KAAKC,GAAG,CAACP,OAAOR,MAAM,EAAEY,OAAOZ,MAAM,GAAGa,IAAK;YAC/D,MAAMG,OAAOR,MAAM,CAACK,EAAE,IAAI;YAC1B,MAAMI,OAAOL,MAAM,CAACC,EAAE,IAAI;YAC1B,IAAIG,SAASC,MAAM,OAAOA,OAAOD,MAAM,mBAAmB;QAC5D;QACA,OAAO;IACT;IAEAzB,QAAQC,GAAG,CAAC;IACZ,KAAK,MAAM0B,WAAWxB,SAAU;QAC9B,MAAMyB,YAAYD,YAAYhB,kBAAkB,CAAC,CAAC,EAAEgB,SAAS,KAAKhB,kBAAkBgB,YAAY,CAAC,CAAC,EAAEhB,gBAAgB;QACpH,MAAMkB,SAASD,YAAY,eAAe;QAC1C5B,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAE0B,UAAUE,QAAQ;IACrC;IACAvC,KAAK;AACP"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * nvu local [version] [--nvurc]
3
+ *
4
+ * Write .nvmrc (or .nvurc) to the current directory.
5
+ * This pins the Node version for the current project.
6
+ */
7
+ export default function localCmd(args: string[]): void;
@@ -0,0 +1,51 @@
1
+ import exit from 'exit';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ /**
5
+ * nvu local [version] [--nvurc]
6
+ *
7
+ * Write .nvmrc (or .nvurc) to the current directory.
8
+ * This pins the Node version for the current project.
9
+ */ export default function localCmd(args) {
10
+ const cwd = process.cwd();
11
+ // Check for --nvurc flag
12
+ const useNvurc = args.includes('--nvurc');
13
+ const filteredArgs = args.filter((arg)=>arg !== '--nvurc');
14
+ const fileName = useNvurc ? '.nvurc' : '.nvmrc';
15
+ const filePath = path.join(cwd, fileName);
16
+ // If no version provided, display current local version
17
+ if (filteredArgs.length === 0) {
18
+ // Check for existing version files
19
+ const nvurcPath = path.join(cwd, '.nvurc');
20
+ const nvmrcPath = path.join(cwd, '.nvmrc');
21
+ if (fs.existsSync(nvurcPath)) {
22
+ const version = fs.readFileSync(nvurcPath, 'utf8').trim();
23
+ console.log(`Current local version (.nvurc): ${version}`);
24
+ exit(0);
25
+ return;
26
+ }
27
+ if (fs.existsSync(nvmrcPath)) {
28
+ const version = fs.readFileSync(nvmrcPath, 'utf8').trim();
29
+ console.log(`Current local version (.nvmrc): ${version}`);
30
+ exit(0);
31
+ return;
32
+ }
33
+ console.log('No local version set in this directory.');
34
+ console.log('Usage: nvu local <version>');
35
+ console.log(' nvu local <version> --nvurc (use .nvurc instead of .nvmrc)');
36
+ exit(0);
37
+ return;
38
+ }
39
+ const version = filteredArgs[0].trim();
40
+ // Validate version format (basic check)
41
+ if (!version || version.startsWith('-')) {
42
+ console.log('Usage: nvu local <version>');
43
+ console.log('Example: nvu local 20');
44
+ exit(1);
45
+ return;
46
+ }
47
+ // Write the version file
48
+ fs.writeFileSync(filePath, `${version}\n`, 'utf8');
49
+ console.log(`Created ${fileName} with version: ${version}`);
50
+ exit(0);
51
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/local.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\n\n/**\n * nvu local [version] [--nvurc]\n *\n * Write .nvmrc (or .nvurc) to the current directory.\n * This pins the Node version for the current project.\n */\nexport default function localCmd(args: string[]): void {\n const cwd = process.cwd();\n\n // Check for --nvurc flag\n const useNvurc = args.includes('--nvurc');\n const filteredArgs = args.filter((arg) => arg !== '--nvurc');\n\n const fileName = useNvurc ? '.nvurc' : '.nvmrc';\n const filePath = path.join(cwd, fileName);\n\n // If no version provided, display current local version\n if (filteredArgs.length === 0) {\n // Check for existing version files\n const nvurcPath = path.join(cwd, '.nvurc');\n const nvmrcPath = path.join(cwd, '.nvmrc');\n\n if (fs.existsSync(nvurcPath)) {\n const version = fs.readFileSync(nvurcPath, 'utf8').trim();\n console.log(`Current local version (.nvurc): ${version}`);\n exit(0);\n return;\n }\n if (fs.existsSync(nvmrcPath)) {\n const version = fs.readFileSync(nvmrcPath, 'utf8').trim();\n console.log(`Current local version (.nvmrc): ${version}`);\n exit(0);\n return;\n }\n\n console.log('No local version set in this directory.');\n console.log('Usage: nvu local <version>');\n console.log(' nvu local <version> --nvurc (use .nvurc instead of .nvmrc)');\n exit(0);\n return;\n }\n\n const version = filteredArgs[0].trim();\n\n // Validate version format (basic check)\n if (!version || version.startsWith('-')) {\n console.log('Usage: nvu local <version>');\n console.log('Example: nvu local 20');\n exit(1);\n return;\n }\n\n // Write the version file\n fs.writeFileSync(filePath, `${version}\\n`, 'utf8');\n console.log(`Created ${fileName} with version: ${version}`);\n exit(0);\n}\n"],"names":["exit","fs","path","localCmd","args","cwd","process","useNvurc","includes","filteredArgs","filter","arg","fileName","filePath","join","length","nvurcPath","nvmrcPath","existsSync","version","readFileSync","trim","console","log","startsWith","writeFileSync"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AAExB;;;;;CAKC,GACD,eAAe,SAASC,SAASC,IAAc;IAC7C,MAAMC,MAAMC,QAAQD,GAAG;IAEvB,yBAAyB;IACzB,MAAME,WAAWH,KAAKI,QAAQ,CAAC;IAC/B,MAAMC,eAAeL,KAAKM,MAAM,CAAC,CAACC,MAAQA,QAAQ;IAElD,MAAMC,WAAWL,WAAW,WAAW;IACvC,MAAMM,WAAWX,KAAKY,IAAI,CAACT,KAAKO;IAEhC,wDAAwD;IACxD,IAAIH,aAAaM,MAAM,KAAK,GAAG;QAC7B,mCAAmC;QACnC,MAAMC,YAAYd,KAAKY,IAAI,CAACT,KAAK;QACjC,MAAMY,YAAYf,KAAKY,IAAI,CAACT,KAAK;QAEjC,IAAIJ,GAAGiB,UAAU,CAACF,YAAY;YAC5B,MAAMG,UAAUlB,GAAGmB,YAAY,CAACJ,WAAW,QAAQK,IAAI;YACvDC,QAAQC,GAAG,CAAC,CAAC,gCAAgC,EAAEJ,SAAS;YACxDnB,KAAK;YACL;QACF;QACA,IAAIC,GAAGiB,UAAU,CAACD,YAAY;YAC5B,MAAME,UAAUlB,GAAGmB,YAAY,CAACH,WAAW,QAAQI,IAAI;YACvDC,QAAQC,GAAG,CAAC,CAAC,gCAAgC,EAAEJ,SAAS;YACxDnB,KAAK;YACL;QACF;QAEAsB,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZvB,KAAK;QACL;IACF;IAEA,MAAMmB,UAAUV,YAAY,CAAC,EAAE,CAACY,IAAI;IAEpC,wCAAwC;IACxC,IAAI,CAACF,WAAWA,QAAQK,UAAU,CAAC,MAAM;QACvCF,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZvB,KAAK;QACL;IACF;IAEA,yBAAyB;IACzBC,GAAGwB,aAAa,CAACZ,UAAU,GAAGM,QAAQ,EAAE,CAAC,EAAE;IAC3CG,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEX,SAAS,eAAe,EAAEO,SAAS;IAC1DnB,KAAK;AACP"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * nvu setup
3
+ *
4
+ * Install/reinstall nvu shims to ~/.nvu/bin
5
+ * This runs the same logic as the postinstall script.
6
+ */
7
+ export default function setupCmd(_args: string[]): void;
@@ -0,0 +1,39 @@
1
+ import { execSync } from 'child_process';
2
+ import exit from 'exit';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import url from 'url';
6
+ import { mkdirpSync } from '../compat.js';
7
+ import { storagePath } from '../constants.js';
8
+ var __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));
9
+ /**
10
+ * nvu setup
11
+ *
12
+ * Install/reinstall nvu shims to ~/.nvu/bin
13
+ * This runs the same logic as the postinstall script.
14
+ */ export default function setupCmd(_args) {
15
+ var binDir = path.join(storagePath, 'bin');
16
+ // Create directories
17
+ if (!fs.existsSync(storagePath)) {
18
+ mkdirpSync(storagePath);
19
+ }
20
+ if (!fs.existsSync(binDir)) {
21
+ mkdirpSync(binDir);
22
+ }
23
+ // Find the postinstall script relative to this module
24
+ var postinstallPath = path.join(__dirname, '..', '..', '..', 'scripts', 'postinstall.cjs');
25
+ if (fs.existsSync(postinstallPath)) {
26
+ // Run the postinstall script
27
+ try {
28
+ execSync(`node "${postinstallPath}"`, {
29
+ stdio: 'inherit'
30
+ });
31
+ } catch (_err) {
32
+ // postinstall handles its own errors gracefully
33
+ }
34
+ } else {
35
+ console.log('Setup script not found.');
36
+ console.log('Try reinstalling: npm install -g node-version-use');
37
+ exit(1);
38
+ }
39
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/setup.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport url from 'url';\nimport { mkdirpSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\nvar __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\n/**\n * nvu setup\n *\n * Install/reinstall nvu shims to ~/.nvu/bin\n * This runs the same logic as the postinstall script.\n */\nexport default function setupCmd(_args: string[]): void {\n var binDir = path.join(storagePath, 'bin');\n\n // Create directories\n if (!fs.existsSync(storagePath)) {\n mkdirpSync(storagePath);\n }\n if (!fs.existsSync(binDir)) {\n mkdirpSync(binDir);\n }\n\n // Find the postinstall script relative to this module\n var postinstallPath = path.join(__dirname, '..', '..', '..', 'scripts', 'postinstall.cjs');\n\n if (fs.existsSync(postinstallPath)) {\n // Run the postinstall script\n try {\n execSync(`node \"${postinstallPath}\"`, { stdio: 'inherit' });\n } catch (_err) {\n // postinstall handles its own errors gracefully\n }\n } else {\n console.log('Setup script not found.');\n console.log('Try reinstalling: npm install -g node-version-use');\n exit(1);\n }\n}\n"],"names":["execSync","exit","fs","path","url","mkdirpSync","storagePath","__dirname","dirname","__filename","fileURLToPath","setupCmd","_args","binDir","join","existsSync","postinstallPath","stdio","_err","console","log"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAgB;AACzC,OAAOC,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,MAAM;AACtB,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,WAAW,QAAQ,kBAAkB;AAE9C,IAAIC,YAAYJ,KAAKK,OAAO,CAAC,OAAOC,eAAe,cAAcA,aAAaL,IAAIM,aAAa,CAAC,YAAYN,GAAG;AAE/G;;;;;CAKC,GACD,eAAe,SAASO,SAASC,KAAe;IAC9C,IAAIC,SAASV,KAAKW,IAAI,CAACR,aAAa;IAEpC,qBAAqB;IACrB,IAAI,CAACJ,GAAGa,UAAU,CAACT,cAAc;QAC/BD,WAAWC;IACb;IACA,IAAI,CAACJ,GAAGa,UAAU,CAACF,SAAS;QAC1BR,WAAWQ;IACb;IAEA,sDAAsD;IACtD,IAAIG,kBAAkBb,KAAKW,IAAI,CAACP,WAAW,MAAM,MAAM,MAAM,WAAW;IAExE,IAAIL,GAAGa,UAAU,CAACC,kBAAkB;QAClC,6BAA6B;QAC7B,IAAI;YACFhB,SAAS,CAAC,MAAM,EAAEgB,gBAAgB,CAAC,CAAC,EAAE;gBAAEC,OAAO;YAAU;QAC3D,EAAE,OAAOC,MAAM;QACb,gDAAgD;QAClD;IACF,OAAO;QACLC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZnB,KAAK;IACP;AACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * nvu teardown
3
+ *
4
+ * Remove nvu shims from ~/.nvu/bin
5
+ */
6
+ export default function teardownCmd(_args: string[]): void;