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
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/install.ts"],"sourcesContent":["import exit from 'exit';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\nimport loadNodeVersionInstall from '../lib/loadNodeVersionInstall.ts';\n\n/**\n * nvu install <version>\n *\n * Download and install a specific Node version.\n */\nexport default function installCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu install <version>');\n console.log('Example: nvu install 20');\n console.log(' nvu install 20.10.0');\n console.log(' nvu install lts');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n\n // Validate version format (basic check)\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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/install.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\nimport loadNodeVersionInstall from '../lib/loadNodeVersionInstall.ts';\n\n/**\n * nvu install <version>\n *\n * Download and install a specific Node version.\n */\nexport default function installCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu install <version>');\n console.log('Example: nvu install 20');\n console.log(' nvu install 20.10.0');\n console.log(' nvu install lts');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n\n // Validate version format (basic check, indexOf for Node 0.8+ compat)\n if (!version || version.indexOf('-') === 0) {\n console.log('Usage: nvu install <version>');\n exit(1);\n return;\n }\n\n console.log(`Installing Node ${version}...`);\n\n // Load node-version-install dynamically\n loadNodeVersionInstall((err, nodeVersionInstall) => {\n if (err || !nodeVersionInstall) {\n console.error('Failed to load node-version-install:', err?.message || 'Module not available');\n console.error('Make sure node-version-install is installed: npm install node-version-install');\n exit(1);\n return;\n }\n\n const versionsPath = path.join(storagePath, 'installed');\n\n nodeVersionInstall(\n version,\n {\n installPath: versionsPath,\n },\n (installErr?: Error, results?: { version: string; installPath: string }[]) => {\n if (installErr) {\n console.error(`Failed to install Node ${version}:`, installErr.message);\n exit(1);\n return;\n }\n\n if (results && results.length > 0) {\n const result = results[0];\n console.log(`Successfully installed Node ${result.version}`);\n console.log(`Location: ${result.installPath}`);\n } else {\n console.log(`Node ${version} installed successfully.`);\n }\n exit(0);\n }\n );\n });\n}\n"],"names":["exit","path","storagePath","loadNodeVersionInstall","installCmd","args","length","console","log","version","trim","indexOf","err","nodeVersionInstall","error","message","versionsPath","join","installPath","installErr","results","result"],"mappings":"AAAA,OAAOA,UAAU,cAAc;AAC/B,OAAOC,UAAU,OAAO;AACxB,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,OAAOC,4BAA4B,mCAAmC;AAEtE;;;;CAIC,GACD,eAAe,SAASC,WAAWC,IAAc;IAC/C,IAAIA,KAAKC,MAAM,KAAK,GAAG;QACrBC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZR,KAAK;QACL;IACF;IAEA,MAAMS,UAAUJ,IAAI,CAAC,EAAE,CAACK,IAAI;IAE5B,sEAAsE;IACtE,IAAI,CAACD,WAAWA,QAAQE,OAAO,CAAC,SAAS,GAAG;QAC1CJ,QAAQC,GAAG,CAAC;QACZR,KAAK;QACL;IACF;IAEAO,QAAQC,GAAG,CAAC,CAAC,gBAAgB,EAAEC,QAAQ,GAAG,CAAC;IAE3C,wCAAwC;IACxCN,uBAAuB,CAACS,KAAKC;QAC3B,IAAID,OAAO,CAACC,oBAAoB;YAC9BN,QAAQO,KAAK,CAAC,wCAAwCF,CAAAA,gBAAAA,0BAAAA,IAAKG,OAAO,KAAI;YACtER,QAAQO,KAAK,CAAC;YACdd,KAAK;YACL;QACF;QAEA,MAAMgB,eAAef,KAAKgB,IAAI,CAACf,aAAa;QAE5CW,mBACEJ,SACA;YACES,aAAaF;QACf,GACA,CAACG,YAAoBC;YACnB,IAAID,YAAY;gBACdZ,QAAQO,KAAK,CAAC,CAAC,uBAAuB,EAAEL,QAAQ,CAAC,CAAC,EAAEU,WAAWJ,OAAO;gBACtEf,KAAK;gBACL;YACF;YAEA,IAAIoB,WAAWA,QAAQd,MAAM,GAAG,GAAG;gBACjC,MAAMe,SAASD,OAAO,CAAC,EAAE;gBACzBb,QAAQC,GAAG,CAAC,CAAC,4BAA4B,EAAEa,OAAOZ,OAAO,EAAE;gBAC3DF,QAAQC,GAAG,CAAC,CAAC,UAAU,EAAEa,OAAOH,WAAW,EAAE;YAC/C,OAAO;gBACLX,QAAQC,GAAG,CAAC,CAAC,KAAK,EAAEC,QAAQ,wBAAwB,CAAC;YACvD;YACAT,KAAK;QACP;IAEJ;AACF"}
@@ -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 { readdirWithTypes } from '../compat.js';
@@ -8,7 +8,7 @@ import { storagePath } from '../constants.js';
8
8
  *
9
9
  * List all installed Node versions.
10
10
  */ export default function listCmd(_args) {
11
- var versionsPath = path.join(storagePath, 'versions');
11
+ var versionsPath = path.join(storagePath, 'installed');
12
12
  // Check if versions directory exists
13
13
  if (!fs.existsSync(versionsPath)) {
14
14
  console.log('No Node versions installed.');
@@ -43,7 +43,8 @@ import { storagePath } from '../constants.js';
43
43
  return 0;
44
44
  });
45
45
  console.log('Installed Node versions:');
46
- for (const version of versions){
46
+ for(let i = 0; i < versions.length; i++){
47
+ const version = versions[i];
47
48
  const isDefault = version === defaultVersion || `v${version}` === defaultVersion || version === `v${defaultVersion}`;
48
49
  const marker = isDefault ? ' (default)' : '';
49
50
  console.log(` ${version}${marker}`);
@@ -1 +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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/list.ts"],"sourcesContent":["import exit from 'exit-compat';\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, 'installed');\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 (let i = 0; i < versions.length; i++) {\n const version = versions[i];\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,cAAc;AAC/B,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,IAAK,IAAIqB,IAAI,GAAGA,IAAInB,SAASM,MAAM,EAAEa,IAAK;QACxC,MAAMK,UAAUxB,QAAQ,CAACmB,EAAE;QAC3B,MAAMM,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"}
@@ -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
  /**
@@ -8,8 +8,8 @@ import path from 'path';
8
8
  * This pins the Node version for the current project.
9
9
  */ export default function localCmd(args) {
10
10
  const cwd = process.cwd();
11
- // Check for --nvurc flag
12
- const useNvurc = args.includes('--nvurc');
11
+ // Check for --nvurc flag (indexOf for Node 0.8+ compat)
12
+ const useNvurc = args.indexOf('--nvurc') !== -1;
13
13
  const filteredArgs = args.filter((arg)=>arg !== '--nvurc');
14
14
  const fileName = useNvurc ? '.nvurc' : '.nvmrc';
15
15
  const filePath = path.join(cwd, fileName);
@@ -37,8 +37,8 @@ import path from 'path';
37
37
  return;
38
38
  }
39
39
  const version = filteredArgs[0].trim();
40
- // Validate version format (basic check)
41
- if (!version || version.startsWith('-')) {
40
+ // Validate version format (basic check, indexOf for Node 0.8+ compat)
41
+ if (!version || version.indexOf('-') === 0) {
42
42
  console.log('Usage: nvu local <version>');
43
43
  console.log('Example: nvu local 20');
44
44
  exit(1);
@@ -1 +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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/local.ts"],"sourcesContent":["import exit from 'exit-compat';\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 (indexOf for Node 0.8+ compat)\n const useNvurc = args.indexOf('--nvurc') !== -1;\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, indexOf for Node 0.8+ compat)\n if (!version || version.indexOf('-') === 0) {\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","indexOf","filteredArgs","filter","arg","fileName","filePath","join","length","nvurcPath","nvmrcPath","existsSync","version","readFileSync","trim","console","log","writeFileSync"],"mappings":"AAAA,OAAOA,UAAU,cAAc;AAC/B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AAExB;;;;;CAKC,GACD,eAAe,SAASC,SAASC,IAAc;IAC7C,MAAMC,MAAMC,QAAQD,GAAG;IAEvB,wDAAwD;IACxD,MAAME,WAAWH,KAAKI,OAAO,CAAC,eAAe,CAAC;IAC9C,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,sEAAsE;IACtE,IAAI,CAACF,WAAWA,QAAQX,OAAO,CAAC,SAAS,GAAG;QAC1Cc,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZvB,KAAK;QACL;IACF;IAEA,yBAAyB;IACzBC,GAAGuB,aAAa,CAACX,UAAU,GAAGM,QAAQ,EAAE,CAAC,EAAE;IAC3CG,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEX,SAAS,eAAe,EAAEO,SAAS;IAC1DnB,KAAK;AACP"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * nvu setup
3
3
  *
4
- * Install/reinstall nvu shims to ~/.nvu/bin
4
+ * Install/reinstall nvu binaries to ~/.nvu/bin
5
5
  * This runs the same logic as the postinstall script.
6
6
  */
7
7
  export default function setupCmd(_args: string[]): void;
@@ -1,5 +1,5 @@
1
1
  import { execSync } from 'child_process';
2
- import exit from 'exit';
2
+ import exit from 'exit-compat';
3
3
  import fs from 'fs';
4
4
  import path from 'path';
5
5
  import url from 'url';
@@ -9,7 +9,7 @@ var __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : ur
9
9
  /**
10
10
  * nvu setup
11
11
  *
12
- * Install/reinstall nvu shims to ~/.nvu/bin
12
+ * Install/reinstall nvu binaries to ~/.nvu/bin
13
13
  * This runs the same logic as the postinstall script.
14
14
  */ export default function setupCmd(_args) {
15
15
  var binDir = path.join(storagePath, 'bin');
@@ -1 +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"}
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-compat';\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 binaries 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,cAAc;AAC/B,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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * nvu teardown
3
3
  *
4
- * Remove nvu shims from ~/.nvu/bin
4
+ * Remove nvu binaries from ~/.nvu/bin
5
5
  */
6
6
  export default function teardownCmd(_args: string[]): void;
@@ -1,33 +1,36 @@
1
- import exit from 'exit';
1
+ import exit from 'exit-compat';
2
2
  import fs from 'fs';
3
+ import { rmSync } from 'fs-remove-compat';
3
4
  import path from 'path';
4
5
  import { storagePath } from '../constants.js';
5
6
  /**
6
7
  * nvu teardown
7
8
  *
8
- * Remove nvu shims from ~/.nvu/bin
9
+ * Remove nvu binaries from ~/.nvu/bin
9
10
  */ export default function teardownCmd(_args) {
10
11
  const binDir = path.join(storagePath, 'bin');
11
- const shims = [
12
+ const binaries = [
12
13
  'node',
13
14
  'npm',
14
15
  'npx'
15
16
  ];
16
17
  const ext = process.platform === 'win32' ? '.exe' : '';
17
18
  let removed = 0;
18
- for (const shim of shims){
19
- const shimPath = path.join(binDir, shim + ext);
20
- if (fs.existsSync(shimPath)) {
21
- fs.unlinkSync(shimPath);
19
+ for(let i = 0; i < binaries.length; i++){
20
+ const binaryPath = path.join(binDir, binaries[i] + ext);
21
+ if (fs.existsSync(binaryPath)) {
22
+ rmSync(binaryPath, {
23
+ force: true
24
+ });
22
25
  removed++;
23
26
  }
24
27
  }
25
28
  if (removed > 0) {
26
- console.log(`Removed ${removed} shim(s) from ${binDir}`);
29
+ console.log(`Removed ${removed} binary(s) from ${binDir}`);
27
30
  console.log('');
28
31
  console.log('You may also want to remove ~/.nvu/bin from your PATH.');
29
32
  } else {
30
- console.log('No shims found to remove.');
33
+ console.log('No binaries found to remove.');
31
34
  }
32
35
  exit(0);
33
36
  }
@@ -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":["exit","fs","path","storagePath","teardownCmd","_args","binDir","join","shims","ext","process","platform","removed","shim","shimPath","existsSync","unlinkSync","console","log"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,WAAW,QAAQ,kBAAkB;AAE9C;;;;CAIC,GACD,eAAe,SAASC,YAAYC,KAAe;IACjD,MAAMC,SAASJ,KAAKK,IAAI,CAACJ,aAAa;IAEtC,MAAMK,QAAQ;QAAC;QAAQ;QAAO;KAAM;IACpC,MAAMC,MAAMC,QAAQC,QAAQ,KAAK,UAAU,SAAS;IAEpD,IAAIC,UAAU;IACd,KAAK,MAAMC,QAAQL,MAAO;QACxB,MAAMM,WAAWZ,KAAKK,IAAI,CAACD,QAAQO,OAAOJ;QAC1C,IAAIR,GAAGc,UAAU,CAACD,WAAW;YAC3Bb,GAAGe,UAAU,CAACF;YACdF;QACF;IACF;IAEA,IAAIA,UAAU,GAAG;QACfK,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEN,QAAQ,cAAc,EAAEN,QAAQ;QACvDW,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;IACd,OAAO;QACLD,QAAQC,GAAG,CAAC;IACd;IAEAlB,KAAK;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":["exit","fs","rmSync","path","storagePath","teardownCmd","_args","binDir","join","binaries","ext","process","platform","removed","i","length","binaryPath","existsSync","force","console","log"],"mappings":"AAAA,OAAOA,UAAU,cAAc;AAC/B,OAAOC,QAAQ,KAAK;AACpB,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,UAAU,OAAO;AACxB,SAASC,WAAW,QAAQ,kBAAkB;AAE9C;;;;CAIC,GACD,eAAe,SAASC,YAAYC,KAAe;IACjD,MAAMC,SAASJ,KAAKK,IAAI,CAACJ,aAAa;IAEtC,MAAMK,WAAW;QAAC;QAAQ;QAAO;KAAM;IACvC,MAAMC,MAAMC,QAAQC,QAAQ,KAAK,UAAU,SAAS;IAEpD,IAAIC,UAAU;IACd,IAAK,IAAIC,IAAI,GAAGA,IAAIL,SAASM,MAAM,EAAED,IAAK;QACxC,MAAME,aAAab,KAAKK,IAAI,CAACD,QAAQE,QAAQ,CAACK,EAAE,GAAGJ;QACnD,IAAIT,GAAGgB,UAAU,CAACD,aAAa;YAC7Bd,OAAOc,YAAY;gBAAEE,OAAO;YAAK;YACjCL;QACF;IACF;IAEA,IAAIA,UAAU,GAAG;QACfM,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEP,QAAQ,gBAAgB,EAAEN,QAAQ;QACzDY,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;IACd,OAAO;QACLD,QAAQC,GAAG,CAAC;IACd;IAEApB,KAAK;AACP"}
@@ -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 { readdirWithTypes, rmSync } from '../compat.js';
@@ -16,7 +16,7 @@ import { storagePath } from '../constants.js';
16
16
  return;
17
17
  }
18
18
  var version = args[0].trim();
19
- var versionsPath = path.join(storagePath, 'versions');
19
+ var versionsPath = path.join(storagePath, 'installed');
20
20
  // Find all matching installed versions
21
21
  var matches = findInstalledVersions(versionsPath, version);
22
22
  if (matches.length === 0) {
@@ -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":["exit","fs","path","readdirWithTypes","rmSync","storagePath","uninstallCmd","args","length","console","log","version","trim","versionsPath","join","matches","findInstalledVersions","listInstalledVersions","i","installedVersion","versionPath","defaultPath","isDefault","existsSync","defaultVersion","readFileSync","normalizedDefault","replace","normalizedInstalled","indexOf","unlinkSync","err","error","message","normalizedVersion","exactMatches","v","statSync","isDirectory","push","entries","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":["exit","fs","path","readdirWithTypes","rmSync","storagePath","uninstallCmd","args","length","console","log","version","trim","versionsPath","join","matches","findInstalledVersions","listInstalledVersions","i","installedVersion","versionPath","defaultPath","isDefault","existsSync","defaultVersion","readFileSync","normalizedDefault","replace","normalizedInstalled","indexOf","unlinkSync","err","error","message","normalizedVersion","exactMatches","v","statSync","isDirectory","push","entries","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;
@@ -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 { storagePath } from '../constants.js';
@@ -6,10 +6,10 @@ import { storagePath } from '../constants.js';
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
  */ export default function whichCmd(_args) {
11
11
  const cwd = process.cwd();
12
- // Resolve version using the same logic as the shim
12
+ // Resolve version using the same logic as the nvu binary
13
13
  const version = resolveVersion(cwd);
14
14
  if (!version) {
15
15
  console.log('No Node version configured for this directory.');
@@ -21,7 +21,7 @@ import { storagePath } from '../constants.js';
21
21
  return;
22
22
  }
23
23
  // Check if the version is installed
24
- const versionsPath = path.join(storagePath, 'versions');
24
+ const versionsPath = path.join(storagePath, 'installed');
25
25
  const versionPath = path.join(versionsPath, version);
26
26
  const versionPathWithV = path.join(versionsPath, `v${version}`);
27
27
  const versionPathWithoutV = path.join(versionsPath, version.replace(/^v/, ''));
@@ -49,7 +49,7 @@ import { storagePath } from '../constants.js';
49
49
  exit(0);
50
50
  }
51
51
  /**
52
- * Resolve version from config files (mirrors shim logic)
52
+ * Resolve version from config files (mirrors nvu binary logic)
53
53
  */ function resolveVersion(cwd) {
54
54
  // Walk up directories looking for .nvurc or .nvmrc
55
55
  let 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":["exit","fs","path","storagePath","whichCmd","_args","cwd","process","version","resolveVersion","console","log","versionsPath","join","versionPath","versionPathWithV","versionPathWithoutV","replace","actualVersionPath","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":["exit","fs","path","storagePath","whichCmd","_args","cwd","process","version","resolveVersion","console","log","versionsPath","join","versionPath","versionPathWithV","versionPathWithoutV","replace","actualVersionPath","existsSync","getVersionSource","nodePath","dir","nvurcPath","readFileSync","trim","nvmrcPath","parent","dirname","defaultPath"],"mappings":"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"}
@@ -6,10 +6,10 @@ import path from 'path';
6
6
  import Queue from 'queue-cb';
7
7
  import resolveBin from 'resolve-bin-sync';
8
8
  import spawnStreaming from 'spawn-streaming';
9
+ import { createSession, formatArguments } from 'spawn-term';
9
10
  import { stringEndsWith } from './compat.js';
10
11
  import { storagePath } from './constants.js';
11
12
  import loadNodeVersionInstall from './lib/loadNodeVersionInstall.js';
12
- import loadSpawnTerm from './lib/loadSpawnTerm.js';
13
13
  const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);
14
14
  const NODE = isWindows ? 'node.exe' : 'node';
15
15
  // Parse npm-generated .cmd wrapper to extract the JS script path
@@ -68,21 +68,8 @@ function resolveCommand(command, args) {
68
68
  };
69
69
  }
70
70
  export default function worker(versionExpression, command, args, options, callback) {
71
- // Load lazy dependencies in parallel
72
- const loaderQueue = new Queue();
73
- let installVersion;
74
- let createSession;
75
- let formatArguments = (x)=>x;
76
- loaderQueue.defer((cb)=>loadNodeVersionInstall((err, fn)=>{
77
- installVersion = fn;
78
- cb(err);
79
- }));
80
- loaderQueue.defer((cb)=>loadSpawnTerm((err, mod)=>{
81
- createSession = mod === null || mod === void 0 ? void 0 : mod.createSession;
82
- formatArguments = (mod === null || mod === void 0 ? void 0 : mod.formatArguments) || ((x)=>x);
83
- cb(err);
84
- }));
85
- loaderQueue.await((loadErr)=>{
71
+ // Load node-version-install lazily
72
+ loadNodeVersionInstall((loadErr, installVersion)=>{
86
73
  if (loadErr) return callback(loadErr);
87
74
  resolveVersions(versionExpression, options, (err, versions)=>{
88
75
  if (err) {
@@ -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":["spawn","fs","resolveVersions","spawnOptions","createSpawnOptions","path","Queue","resolveBin","spawnStreaming","stringEndsWith","storagePath","loadNodeVersionInstall","loadSpawnTerm","isWindows","process","platform","test","env","OSTYPE","NODE","parseNpmCmdWrapper","cmdPath","content","readFileSync","match","relativePath","cmdDir","dirname","join","_e","resolveCommand","command","args","toLowerCase","scriptPath","binPath","worker","versionExpression","options","callback","loaderQueue","installVersion","createSession","formatArguments","x","defer","cb","err","fn","mod","await","loadErr","versions","length","Error","installOptions","streamingOptions","results","queue","interactive","session","streaming","header","showStatusBar","forEach","version","_err","installs","install","push","error","JSON","stringify","result","installPath","prefix","next","res","message","indexOf","resolved","silent","console","log","concat","group","expanded","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":["spawn","fs","resolveVersions","spawnOptions","createSpawnOptions","path","Queue","resolveBin","spawnStreaming","createSession","formatArguments","stringEndsWith","storagePath","loadNodeVersionInstall","isWindows","process","platform","test","env","OSTYPE","NODE","parseNpmCmdWrapper","cmdPath","content","readFileSync","match","relativePath","cmdDir","dirname","join","_e","resolveCommand","command","args","toLowerCase","scriptPath","binPath","worker","versionExpression","options","callback","loadErr","installVersion","err","versions","length","Error","installOptions","streamingOptions","results","queue","interactive","session","streaming","header","showStatusBar","forEach","version","defer","cb","_err","installs","install","push","error","JSON","stringify","result","installPath","prefix","next","res","message","indexOf","resolved","silent","console","log","concat","group","expanded","await","waitAndClose"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-version-use",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "description": "Cross-platform solution for using multiple versions of node. Useful for compatibility testing",
5
5
  "keywords": [
6
6
  "node",
@@ -34,48 +34,51 @@
34
34
  "files": [
35
35
  "bin",
36
36
  "dist",
37
- "scripts",
38
- "shim"
37
+ "scripts"
39
38
  ],
40
39
  "scripts": {
41
40
  "build": "tsds build",
41
+ "clean": "rm -rf .tmp dist",
42
42
  "format": "tsds format",
43
43
  "postinstall": "node scripts/postinstall.cjs",
44
44
  "prepublishOnly": "tsds validate",
45
+ "pretest": "node scripts/ensure-test-binaries.ts",
45
46
  "test": "tsds test:node --no-timeouts",
46
47
  "test:engines": "nvu engines tsds test:node --no-timeouts",
47
48
  "version": "tsds version"
48
49
  },
49
50
  "dependencies": {
50
51
  "cross-spawn-cb": "^2.4.10",
51
- "exit": "^0.1.2",
52
+ "exit-compat": "^1.0.0",
52
53
  "fs-remove-compat": "^0.2.1",
53
- "get-remote": "^2.2.8",
54
54
  "getopts-compat": "^2.2.6",
55
55
  "homedir-polyfill": "^1.0.3",
56
- "install-module-linked": "^1.3.10",
56
+ "install-module-linked": "^1.3.12",
57
57
  "mkdirp-classic": "^0.5.3",
58
58
  "node-resolve-versions": "^1.3.11",
59
59
  "node-version-utils": "^1.3.15",
60
60
  "queue-cb": "^1.6.1",
61
61
  "resolve-bin-sync": "^1.0.10",
62
- "spawn-streaming": "^1.1.13"
62
+ "spawn-streaming": "^1.1.13",
63
+ "spawn-term": "^3.3.2"
63
64
  },
64
65
  "devDependencies": {
65
66
  "@types/mocha": "^10.0.10",
66
- "@types/node": "^24.10.2",
67
+ "@types/node": "^25.0.0",
67
68
  "cr": "^0.1.0",
68
69
  "fs-copy-compat": "^0.1.3",
69
70
  "fs-remove-compat": "^0.2.1",
70
71
  "is-version": "^1.0.7",
71
72
  "mkdirp-classic": "^0.5.3",
72
73
  "node-version-install": "^1.4.18",
73
- "node-version-use": "^1.9.9",
74
+ "node-version-use": "^2.1.0",
75
+ "os-shim": "^0.1.3",
74
76
  "pinkie-promise": "^2.0.1",
75
77
  "ts-dev-stack": "^1.21.2",
76
78
  "tsds-config": "^0.2.0"
77
79
  },
78
80
  "engines": {
79
81
  "node": ">=0.8"
80
- }
82
+ },
83
+ "binaryVersion": "1.0.0"
81
84
  }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Validates that binaries were downloaded by postinstall.
3
+ * Called as pretest hook - fails if binaries are missing.
4
+ */
5
+ import fs from 'fs';
6
+ import path from 'path';
7
+ import { storagePath } from '../src/constants.ts';
8
+
9
+ var BIN_DIR = path.join(storagePath, 'bin');
10
+
11
+ // Check for platform-specific binary name
12
+ var BINARY_NAME = process.platform === 'win32' ? 'node.exe' : 'node';
13
+ var NODE_BINARY = path.join(BIN_DIR, BINARY_NAME);
14
+
15
+ function main(): void {
16
+ if (!fs.existsSync(NODE_BINARY)) {
17
+ console.error('Error: nvu binaries not found at', BIN_DIR);
18
+ console.error('');
19
+ console.error('Binaries should have been downloaded by postinstall.');
20
+ console.error('Try running: npm install');
21
+ process.exit(1);
22
+ }
23
+
24
+ console.log('Binaries found at', BIN_DIR);
25
+ }
26
+
27
+ main();