node-version-use 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +61 -84
  2. package/assets/bin/node +0 -0
  3. package/assets/installBinaries.cjs +95 -18
  4. package/assets/postinstall.cjs +16 -1
  5. package/dist/cjs/assets/installBinaries.cjs +95 -18
  6. package/dist/cjs/assets/installBinaries.cjs.map +1 -1
  7. package/dist/cjs/assets/postinstall.cjs +16 -1
  8. package/dist/cjs/assets/postinstall.cjs.map +1 -1
  9. package/dist/cjs/cli.js.map +1 -1
  10. package/dist/cjs/commands/default.js +30 -4
  11. package/dist/cjs/commands/default.js.map +1 -1
  12. package/dist/cjs/commands/index.js.map +1 -1
  13. package/dist/cjs/commands/install.js.map +1 -1
  14. package/dist/cjs/commands/list.js.map +1 -1
  15. package/dist/cjs/commands/local.js.map +1 -1
  16. package/dist/cjs/commands/setup.d.cts +2 -3
  17. package/dist/cjs/commands/setup.d.ts +2 -3
  18. package/dist/cjs/commands/setup.js +9 -84
  19. package/dist/cjs/commands/setup.js.map +1 -1
  20. package/dist/cjs/commands/teardown.js.map +1 -1
  21. package/dist/cjs/commands/uninstall.js.map +1 -1
  22. package/dist/cjs/commands/which.js +15 -0
  23. package/dist/cjs/commands/which.js.map +1 -1
  24. package/dist/cjs/compat.d.cts +1 -0
  25. package/dist/cjs/compat.d.ts +1 -0
  26. package/dist/cjs/compat.js +17 -3
  27. package/dist/cjs/compat.js.map +1 -1
  28. package/dist/cjs/constants.js.map +1 -1
  29. package/dist/cjs/index.js.map +1 -1
  30. package/dist/cjs/lib/findInstalledVersions.js.map +1 -1
  31. package/dist/cjs/lib/loadNodeVersionInstall.js +1 -1
  32. package/dist/cjs/lib/loadNodeVersionInstall.js.map +1 -1
  33. package/dist/cjs/lib/resolveSystemBinary.d.cts +10 -0
  34. package/dist/cjs/lib/resolveSystemBinary.d.ts +10 -0
  35. package/dist/cjs/lib/resolveSystemBinary.js +96 -0
  36. package/dist/cjs/lib/resolveSystemBinary.js.map +1 -0
  37. package/dist/cjs/worker.js +53 -56
  38. package/dist/cjs/worker.js.map +1 -1
  39. package/dist/esm/assets/installBinaries.cjs +78 -18
  40. package/dist/esm/assets/installBinaries.cjs.map +1 -1
  41. package/dist/esm/assets/postinstall.cjs +16 -1
  42. package/dist/esm/assets/postinstall.cjs.map +1 -1
  43. package/dist/esm/cli.js.map +1 -1
  44. package/dist/esm/commands/default.js +30 -4
  45. package/dist/esm/commands/default.js.map +1 -1
  46. package/dist/esm/commands/index.js.map +1 -1
  47. package/dist/esm/commands/install.js.map +1 -1
  48. package/dist/esm/commands/list.js.map +1 -1
  49. package/dist/esm/commands/local.js.map +1 -1
  50. package/dist/esm/commands/setup.d.ts +2 -3
  51. package/dist/esm/commands/setup.js +9 -84
  52. package/dist/esm/commands/setup.js.map +1 -1
  53. package/dist/esm/commands/teardown.js.map +1 -1
  54. package/dist/esm/commands/uninstall.js.map +1 -1
  55. package/dist/esm/commands/which.js +15 -0
  56. package/dist/esm/commands/which.js.map +1 -1
  57. package/dist/esm/compat.d.ts +1 -0
  58. package/dist/esm/compat.js +16 -5
  59. package/dist/esm/compat.js.map +1 -1
  60. package/dist/esm/constants.js.map +1 -1
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/lib/findInstalledVersions.js.map +1 -1
  63. package/dist/esm/lib/loadNodeVersionInstall.js +1 -1
  64. package/dist/esm/lib/loadNodeVersionInstall.js.map +1 -1
  65. package/dist/esm/lib/resolveSystemBinary.d.ts +10 -0
  66. package/dist/esm/lib/resolveSystemBinary.js +78 -0
  67. package/dist/esm/lib/resolveSystemBinary.js.map +1 -0
  68. package/dist/esm/types.js.map +1 -1
  69. package/dist/esm/worker.js +58 -11
  70. package/dist/esm/worker.js.map +1 -1
  71. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/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 const 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 const entries = readdirWithTypes(versionsPath);\n const 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,MAAMC,eAAeL,KAAKM,IAAI,CAACJ,aAAa;IAE5C,qCAAqC;IACrC,IAAI,CAACH,GAAGQ,UAAU,CAACF,eAAe;QAChCG,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,0CAA0C;IAC1C,MAAMY,UAAUT,iBAAiBI;IACjC,MAAMM,WAAWD,QAAQE,MAAM,CAAC,CAACC,QAAUA,MAAMC,WAAW,IAAIC,GAAG,CAAC,CAACF,QAAUA,MAAMG,IAAI;IAEzF,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
+ {"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 const 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 const entries = readdirWithTypes(versionsPath);\n const 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,MAAMC,eAAeL,KAAKM,IAAI,CAACJ,aAAa;IAE5C,qCAAqC;IACrC,IAAI,CAACH,GAAGQ,UAAU,CAACF,eAAe;QAChCG,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,0CAA0C;IAC1C,MAAMY,UAAUT,iBAAiBI;IACjC,MAAMM,WAAWD,QAAQE,MAAM,CAAC,CAACC,QAAUA,MAAMC,WAAW,IAAIC,GAAG,CAAC,CAACF,QAAUA,MAAMG,IAAI;IAEzF,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 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/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
+ {"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,6 @@
1
1
  /**
2
- * nvu setup [--shims]
2
+ * nvu setup
3
3
  *
4
4
  * Install/reinstall nvu binaries to ~/.nvu/bin
5
- * With --shims: create shims for existing global packages
6
5
  */
7
- export default function setupCmd(args: string[]): void;
6
+ export default function setupCmd(_args: string[]): void;
@@ -1,100 +1,25 @@
1
1
  import exit from 'exit-compat';
2
- import fs from 'fs';
3
- import getopts from 'getopts-compat';
4
2
  import Module from 'module';
5
3
  import path from 'path';
6
- import { readdirWithTypes } from '../compat.js';
7
4
  import { storagePath } from '../constants.js';
8
- import { findInstalledVersions } from '../lib/findInstalledVersions.js';
9
5
  const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
10
- const { installBinaries, printInstructions } = _require('../assets/installBinaries.cjs');
6
+ const { installBinaries, printInstructions, syncAllShims } = _require('../assets/installBinaries.cjs');
11
7
  /**
12
- * nvu setup [--shims]
8
+ * nvu setup
13
9
  *
14
10
  * Install/reinstall nvu binaries to ~/.nvu/bin
15
- * With --shims: create shims for existing global packages
16
- */ export default function setupCmd(args) {
17
- const options = getopts(args, {
18
- boolean: [
19
- 'force'
20
- ]
21
- });
22
- installBinaries(options, (err, installed)=>{
11
+ */ export default function setupCmd(_args) {
12
+ installBinaries({}, (err, installed)=>{
23
13
  if (err) {
24
14
  console.error(`Setup failed: ${err.message || err}`);
25
15
  exit(1);
26
16
  return;
27
17
  }
18
+ // Sync all shims to the new binary
19
+ const binDir = path.join(storagePath, 'bin');
20
+ syncAllShims(binDir);
28
21
  printInstructions();
29
- if (!installed) console.log('Use --force to reinstall.');
30
- if (options.force) {
31
- const binDir = path.join(storagePath, 'bin');
32
- createShimsForGlobalPackages(binDir);
33
- return;
34
- }
22
+ if (!installed) console.log('Use --force to reinstall binaries.');
23
+ exit(0);
35
24
  });
36
25
  }
37
- /**
38
- * Create shims for all global packages in the default Node version
39
- */ function createShimsForGlobalPackages(binDir) {
40
- // Read default version
41
- const defaultPath = path.join(storagePath, 'default');
42
- if (!fs.existsSync(defaultPath)) {
43
- console.log('No default Node version set.');
44
- console.log('Set one with: nvu default <version>');
45
- exit(1);
46
- return;
47
- }
48
- const defaultVersion = fs.readFileSync(defaultPath, 'utf8').trim();
49
- const versionsDir = path.join(storagePath, 'installed');
50
- // Resolve to exact version
51
- const matches = findInstalledVersions(versionsDir, defaultVersion);
52
- if (matches.length === 0) {
53
- console.log(`Default version ${defaultVersion} is not installed.`);
54
- exit(1);
55
- return;
56
- }
57
- const resolvedVersion = matches[matches.length - 1];
58
- const nodeBinDir = path.join(versionsDir, resolvedVersion, 'bin');
59
- if (!fs.existsSync(nodeBinDir)) {
60
- console.log(`No bin directory found for ${resolvedVersion}`);
61
- exit(1);
62
- return;
63
- }
64
- // Get the node shim to copy from
65
- const nodeShim = path.join(binDir, 'node');
66
- if (!fs.existsSync(nodeShim)) {
67
- console.log('Node shim not found. Run: nvu setup');
68
- exit(1);
69
- return;
70
- }
71
- // Scan binaries in Node's bin directory
72
- const entries = readdirWithTypes(nodeBinDir);
73
- let created = 0;
74
- let skipped = 0;
75
- for(let i = 0; i < entries.length; i++){
76
- const entry = entries[i];
77
- const name = entry.name;
78
- // Skip our routing shims (node/npm/npx) - don't overwrite them
79
- if (name === 'node' || name === 'npm' || name === 'npx') continue;
80
- const shimPath = path.join(binDir, name);
81
- // Skip if shim already exists
82
- if (fs.existsSync(shimPath)) {
83
- skipped++;
84
- continue;
85
- }
86
- // Copy the node shim
87
- try {
88
- const shimContent = fs.readFileSync(nodeShim);
89
- fs.writeFileSync(shimPath, shimContent);
90
- fs.chmodSync(shimPath, 493); // 0755
91
- console.log(`Created shim: ${name}`);
92
- created++;
93
- } catch (err) {
94
- console.error(`Failed to create shim for ${name}: ${err.message}`);
95
- }
96
- }
97
- console.log('');
98
- console.log(`Done. Created ${created} shims, skipped ${skipped} (already exists).`);
99
- exit(0);
100
- }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/node-version-use/src/commands/setup.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport Module from 'module';\nimport path from 'path';\nimport { readdirWithTypes } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\nimport { findInstalledVersions } from '../lib/findInstalledVersions.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\nconst { installBinaries, printInstructions } = _require('../assets/installBinaries.cjs');\n\n/**\n * nvu setup [--shims]\n *\n * Install/reinstall nvu binaries to ~/.nvu/bin\n * With --shims: create shims for existing global packages\n */\nexport default function setupCmd(args: string[]): void {\n const options = getopts(args, { boolean: ['force'] });\n\n installBinaries(options, (err, installed) => {\n if (err) {\n console.error(`Setup failed: ${err.message || err}`);\n exit(1);\n return;\n }\n\n printInstructions();\n if (!installed) console.log('Use --force to reinstall.');\n\n if (options.force) {\n const binDir = path.join(storagePath, 'bin');\n createShimsForGlobalPackages(binDir);\n return;\n }\n });\n}\n\n/**\n * Create shims for all global packages in the default Node version\n */\nfunction createShimsForGlobalPackages(binDir: string): void {\n // Read default version\n const defaultPath = path.join(storagePath, 'default');\n if (!fs.existsSync(defaultPath)) {\n console.log('No default Node version set.');\n console.log('Set one with: nvu default <version>');\n exit(1);\n return;\n }\n\n const defaultVersion = fs.readFileSync(defaultPath, 'utf8').trim();\n const versionsDir = path.join(storagePath, 'installed');\n\n // Resolve to exact version\n const matches = findInstalledVersions(versionsDir, defaultVersion);\n if (matches.length === 0) {\n console.log(`Default version ${defaultVersion} is not installed.`);\n exit(1);\n return;\n }\n\n const resolvedVersion = matches[matches.length - 1];\n const nodeBinDir = path.join(versionsDir, resolvedVersion, 'bin');\n\n if (!fs.existsSync(nodeBinDir)) {\n console.log(`No bin directory found for ${resolvedVersion}`);\n exit(1);\n return;\n }\n\n // Get the node shim to copy from\n const nodeShim = path.join(binDir, 'node');\n if (!fs.existsSync(nodeShim)) {\n console.log('Node shim not found. Run: nvu setup');\n exit(1);\n return;\n }\n\n // Scan binaries in Node's bin directory\n const entries = readdirWithTypes(nodeBinDir);\n let created = 0;\n let skipped = 0;\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n const name = entry.name;\n\n // Skip our routing shims (node/npm/npx) - don't overwrite them\n if (name === 'node' || name === 'npm' || name === 'npx') continue;\n const shimPath = path.join(binDir, name);\n\n // Skip if shim already exists\n if (fs.existsSync(shimPath)) {\n skipped++;\n continue;\n }\n\n // Copy the node shim\n try {\n const shimContent = fs.readFileSync(nodeShim);\n fs.writeFileSync(shimPath, shimContent);\n fs.chmodSync(shimPath, 493); // 0755\n console.log(`Created shim: ${name}`);\n created++;\n } catch (err) {\n console.error(`Failed to create shim for ${name}: ${(err as Error).message}`);\n }\n }\n\n console.log('');\n console.log(`Done. Created ${created} shims, skipped ${skipped} (already exists).`);\n exit(0);\n}\n"],"names":["exit","fs","getopts","Module","path","readdirWithTypes","storagePath","findInstalledVersions","_require","require","createRequire","url","installBinaries","printInstructions","setupCmd","args","options","boolean","err","installed","console","error","message","log","force","binDir","join","createShimsForGlobalPackages","defaultPath","existsSync","defaultVersion","readFileSync","trim","versionsDir","matches","length","resolvedVersion","nodeBinDir","nodeShim","entries","created","skipped","i","entry","name","shimPath","shimContent","writeFileSync","chmodSync"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/setup.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport Module from 'module';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\nconst { installBinaries, printInstructions, syncAllShims } = _require('../assets/installBinaries.cjs');\n\n/**\n * nvu setup\n *\n * Install/reinstall nvu binaries to ~/.nvu/bin\n */\nexport default function setupCmd(_args: string[]): void {\n installBinaries({}, (err, installed) => {\n if (err) {\n console.error(`Setup failed: ${err.message || err}`);\n exit(1);\n return;\n }\n\n // Sync all shims to the new binary\n const binDir = path.join(storagePath, 'bin');\n syncAllShims(binDir);\n\n printInstructions();\n if (!installed) console.log('Use --force to reinstall binaries.');\n\n exit(0);\n });\n}\n"],"names":["exit","Module","path","storagePath","_require","require","createRequire","url","installBinaries","printInstructions","syncAllShims","setupCmd","_args","err","installed","console","error","message","binDir","join","log"],"mappings":"AAAA,OAAOA,UAAU,cAAc;AAC/B,OAAOC,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,SAASC,WAAW,QAAQ,kBAAkB;AAE9C,MAAMC,WAAW,OAAOC,YAAY,cAAcJ,OAAOK,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAC1F,MAAM,EAAEG,eAAe,EAAEC,iBAAiB,EAAEC,YAAY,EAAE,GAAGN,SAAS;AAEtE;;;;CAIC,GACD,eAAe,SAASO,SAASC,KAAe;IAC9CJ,gBAAgB,CAAC,GAAG,CAACK,KAAKC;QACxB,IAAID,KAAK;YACPE,QAAQC,KAAK,CAAC,CAAC,cAAc,EAAEH,IAAII,OAAO,IAAIJ,KAAK;YACnDb,KAAK;YACL;QACF;QAEA,mCAAmC;QACnC,MAAMkB,SAAShB,KAAKiB,IAAI,CAAChB,aAAa;QACtCO,aAAaQ;QAEbT;QACA,IAAI,CAACK,WAAWC,QAAQK,GAAG,CAAC;QAE5BpB,KAAK;IACP;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/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\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\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 = isWindows ? '.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","isWindows","process","platform","test","env","OSTYPE","teardownCmd","_args","binDir","join","binaries","ext","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,MAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAE3F;;;;CAIC,GACD,eAAe,SAASC,YAAYC,KAAe;IACjD,MAAMC,SAASV,KAAKW,IAAI,CAACV,aAAa;IAEtC,MAAMW,WAAW;QAAC;QAAQ;QAAO;KAAM;IACvC,MAAMC,MAAMX,YAAY,SAAS;IAEjC,IAAIY,UAAU;IACd,IAAK,IAAIC,IAAI,GAAGA,IAAIH,SAASI,MAAM,EAAED,IAAK;QACxC,MAAME,aAAajB,KAAKW,IAAI,CAACD,QAAQE,QAAQ,CAACG,EAAE,GAAGF;QACnD,IAAIf,GAAGoB,UAAU,CAACD,aAAa;YAC7BlB,OAAOkB,YAAY;gBAAEE,OAAO;YAAK;YACjCL;QACF;IACF;IAEA,IAAIA,UAAU,GAAG;QACfM,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEP,QAAQ,gBAAgB,EAAEJ,QAAQ;QACzDU,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;IACd,OAAO;QACLD,QAAQC,GAAG,CAAC;IACd;IAEAxB,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\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\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 = isWindows ? '.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","isWindows","process","platform","test","env","OSTYPE","teardownCmd","_args","binDir","join","binaries","ext","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,MAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAE3F;;;;CAIC,GACD,eAAe,SAASC,YAAYC,KAAe;IACjD,MAAMC,SAASV,KAAKW,IAAI,CAACV,aAAa;IAEtC,MAAMW,WAAW;QAAC;QAAQ;QAAO;KAAM;IACvC,MAAMC,MAAMX,YAAY,SAAS;IAEjC,IAAIY,UAAU;IACd,IAAK,IAAIC,IAAI,GAAGA,IAAIH,SAASI,MAAM,EAAED,IAAK;QACxC,MAAME,aAAajB,KAAKW,IAAI,CAACD,QAAQE,QAAQ,CAACG,EAAE,GAAGF;QACnD,IAAIf,GAAGoB,UAAU,CAACD,aAAa;YAC7BlB,OAAOkB,YAAY;gBAAEE,OAAO;YAAK;YACjCL;QACF;IACF;IAEA,IAAIA,UAAU,GAAG;QACfM,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEP,QAAQ,gBAAgB,EAAEJ,QAAQ;QACzDU,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;IACd,OAAO;QACLD,QAAQC,GAAG,CAAC;IACd;IAEAxB,KAAK;AACP"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/node-version-use/src/commands/uninstall.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport path from 'path';\nimport { rmSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\nimport { findInstalledVersions, getAllInstalledVersions } from '../lib/findInstalledVersions.ts';\n\n/**\n * nvu uninstall <version>\n *\n * Remove an installed Node version.\n */\nexport default function uninstallCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu uninstall <version>');\n console.log('Example: nvu uninstall 20');\n console.log(' nvu uninstall v20.19.6');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n const versionsPath = path.join(storagePath, 'installed');\n\n // Find all matching installed versions\n const 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 (let 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 const installedVersion = matches[0];\n const versionPath = path.join(versionsPath, installedVersion);\n\n // Check if this is the current default (exact match since we store exact versions)\n const defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n const defaultVersion = fs.readFileSync(defaultPath, 'utf8').trim();\n\n // Normalize both for comparison\n const normalizedDefault = defaultVersion.replace(/^v/, '');\n const normalizedInstalled = installedVersion.replace(/^v/, '');\n\n if (normalizedInstalled === normalizedDefault) {\n console.error(`Cannot uninstall default version ${installedVersion}.`);\n console.error('');\n console.error('Change your default first:');\n console.error(' nvu default <version>');\n exit(1);\n return;\n }\n }\n\n // Remove the version directory\n try {\n rmSync(versionPath);\n console.log(`Removed Node ${installedVersion}`);\n } catch (err) {\n console.error(`Failed to remove Node ${installedVersion}:`, (err as Error).message);\n exit(1);\n return;\n }\n\n exit(0);\n}\n\n/**\n * List installed versions for user reference\n */\nfunction listInstalledVersions(versionsPath: string): void {\n const versions = getAllInstalledVersions(versionsPath);\n\n if (versions.length === 0) {\n console.log(' (none)');\n } else {\n for (let i = 0; i < versions.length; i++) {\n console.log(` ${versions[i]}`);\n }\n }\n}\n"],"names":["exit","fs","path","rmSync","storagePath","findInstalledVersions","getAllInstalledVersions","uninstallCmd","args","length","console","log","version","trim","versionsPath","join","matches","listInstalledVersions","i","installedVersion","versionPath","defaultPath","existsSync","defaultVersion","readFileSync","normalizedDefault","replace","normalizedInstalled","error","err","message","versions"],"mappings":"AAAA,OAAOA,UAAU,cAAc;AAC/B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,MAAM,QAAQ,eAAe;AACtC,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,SAASC,qBAAqB,EAAEC,uBAAuB,QAAQ,kCAAkC;AAEjG;;;;CAIC,GACD,eAAe,SAASC,aAAaC,IAAc;IACjD,IAAIA,KAAKC,MAAM,KAAK,GAAG;QACrBC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,MAAMY,UAAUJ,IAAI,CAAC,EAAE,CAACK,IAAI;IAC5B,MAAMC,eAAeZ,KAAKa,IAAI,CAACX,aAAa;IAE5C,uCAAuC;IACvC,MAAMY,UAAUX,sBAAsBS,cAAcF;IAEpD,IAAII,QAAQP,MAAM,KAAK,GAAG;QACxBC,QAAQC,GAAG,CAAC,CAAC,KAAK,EAAEC,QAAQ,kBAAkB,CAAC;QAC/CF,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZM,sBAAsBH;QACtBd,KAAK;QACL;IACF;IAEA,IAAIgB,QAAQP,MAAM,GAAG,GAAG;QACtBC,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAEC,QAAQ,EAAE,CAAC;QACnD,IAAK,IAAIM,IAAI,GAAGA,IAAIF,QAAQP,MAAM,EAAES,IAAK;YACvCR,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEK,OAAO,CAACE,EAAE,EAAE;QAC/B;QACAR,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,MAAMmB,mBAAmBH,OAAO,CAAC,EAAE;IACnC,MAAMI,cAAclB,KAAKa,IAAI,CAACD,cAAcK;IAE5C,mFAAmF;IACnF,MAAME,cAAcnB,KAAKa,IAAI,CAACX,aAAa;IAC3C,IAAIH,GAAGqB,UAAU,CAACD,cAAc;QAC9B,MAAME,iBAAiBtB,GAAGuB,YAAY,CAACH,aAAa,QAAQR,IAAI;QAEhE,gCAAgC;QAChC,MAAMY,oBAAoBF,eAAeG,OAAO,CAAC,MAAM;QACvD,MAAMC,sBAAsBR,iBAAiBO,OAAO,CAAC,MAAM;QAE3D,IAAIC,wBAAwBF,mBAAmB;YAC7Cf,QAAQkB,KAAK,CAAC,CAAC,iCAAiC,EAAET,iBAAiB,CAAC,CAAC;YACrET,QAAQkB,KAAK,CAAC;YACdlB,QAAQkB,KAAK,CAAC;YACdlB,QAAQkB,KAAK,CAAC;YACd5B,KAAK;YACL;QACF;IACF;IAEA,+BAA+B;IAC/B,IAAI;QACFG,OAAOiB;QACPV,QAAQC,GAAG,CAAC,CAAC,aAAa,EAAEQ,kBAAkB;IAChD,EAAE,OAAOU,KAAK;QACZnB,QAAQkB,KAAK,CAAC,CAAC,sBAAsB,EAAET,iBAAiB,CAAC,CAAC,EAAE,AAACU,IAAcC,OAAO;QAClF9B,KAAK;QACL;IACF;IAEAA,KAAK;AACP;AAEA;;CAEC,GACD,SAASiB,sBAAsBH,YAAoB;IACjD,MAAMiB,WAAWzB,wBAAwBQ;IAEzC,IAAIiB,SAAStB,MAAM,KAAK,GAAG;QACzBC,QAAQC,GAAG,CAAC;IACd,OAAO;QACL,IAAK,IAAIO,IAAI,GAAGA,IAAIa,SAAStB,MAAM,EAAES,IAAK;YACxCR,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEoB,QAAQ,CAACb,EAAE,EAAE;QAChC;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/uninstall.ts"],"sourcesContent":["import exit from 'exit-compat';\nimport fs from 'fs';\nimport path from 'path';\nimport { rmSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\nimport { findInstalledVersions, getAllInstalledVersions } from '../lib/findInstalledVersions.ts';\n\n/**\n * nvu uninstall <version>\n *\n * Remove an installed Node version.\n */\nexport default function uninstallCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu uninstall <version>');\n console.log('Example: nvu uninstall 20');\n console.log(' nvu uninstall v20.19.6');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n const versionsPath = path.join(storagePath, 'installed');\n\n // Find all matching installed versions\n const 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 (let 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 const installedVersion = matches[0];\n const versionPath = path.join(versionsPath, installedVersion);\n\n // Check if this is the current default (exact match since we store exact versions)\n const defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n const defaultVersion = fs.readFileSync(defaultPath, 'utf8').trim();\n\n // Normalize both for comparison\n const normalizedDefault = defaultVersion.replace(/^v/, '');\n const normalizedInstalled = installedVersion.replace(/^v/, '');\n\n if (normalizedInstalled === normalizedDefault) {\n console.error(`Cannot uninstall default version ${installedVersion}.`);\n console.error('');\n console.error('Change your default first:');\n console.error(' nvu default <version>');\n exit(1);\n return;\n }\n }\n\n // Remove the version directory\n try {\n rmSync(versionPath);\n console.log(`Removed Node ${installedVersion}`);\n } catch (err) {\n console.error(`Failed to remove Node ${installedVersion}:`, (err as Error).message);\n exit(1);\n return;\n }\n\n exit(0);\n}\n\n/**\n * List installed versions for user reference\n */\nfunction listInstalledVersions(versionsPath: string): void {\n const versions = getAllInstalledVersions(versionsPath);\n\n if (versions.length === 0) {\n console.log(' (none)');\n } else {\n for (let i = 0; i < versions.length; i++) {\n console.log(` ${versions[i]}`);\n }\n }\n}\n"],"names":["exit","fs","path","rmSync","storagePath","findInstalledVersions","getAllInstalledVersions","uninstallCmd","args","length","console","log","version","trim","versionsPath","join","matches","listInstalledVersions","i","installedVersion","versionPath","defaultPath","existsSync","defaultVersion","readFileSync","normalizedDefault","replace","normalizedInstalled","error","err","message","versions"],"mappings":"AAAA,OAAOA,UAAU,cAAc;AAC/B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,MAAM,QAAQ,eAAe;AACtC,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,SAASC,qBAAqB,EAAEC,uBAAuB,QAAQ,kCAAkC;AAEjG;;;;CAIC,GACD,eAAe,SAASC,aAAaC,IAAc;IACjD,IAAIA,KAAKC,MAAM,KAAK,GAAG;QACrBC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,MAAMY,UAAUJ,IAAI,CAAC,EAAE,CAACK,IAAI;IAC5B,MAAMC,eAAeZ,KAAKa,IAAI,CAACX,aAAa;IAE5C,uCAAuC;IACvC,MAAMY,UAAUX,sBAAsBS,cAAcF;IAEpD,IAAII,QAAQP,MAAM,KAAK,GAAG;QACxBC,QAAQC,GAAG,CAAC,CAAC,KAAK,EAAEC,QAAQ,kBAAkB,CAAC;QAC/CF,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZM,sBAAsBH;QACtBd,KAAK;QACL;IACF;IAEA,IAAIgB,QAAQP,MAAM,GAAG,GAAG;QACtBC,QAAQC,GAAG,CAAC,CAAC,yBAAyB,EAAEC,QAAQ,EAAE,CAAC;QACnD,IAAK,IAAIM,IAAI,GAAGA,IAAIF,QAAQP,MAAM,EAAES,IAAK;YACvCR,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEK,OAAO,CAACE,EAAE,EAAE;QAC/B;QACAR,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,MAAMmB,mBAAmBH,OAAO,CAAC,EAAE;IACnC,MAAMI,cAAclB,KAAKa,IAAI,CAACD,cAAcK;IAE5C,mFAAmF;IACnF,MAAME,cAAcnB,KAAKa,IAAI,CAACX,aAAa;IAC3C,IAAIH,GAAGqB,UAAU,CAACD,cAAc;QAC9B,MAAME,iBAAiBtB,GAAGuB,YAAY,CAACH,aAAa,QAAQR,IAAI;QAEhE,gCAAgC;QAChC,MAAMY,oBAAoBF,eAAeG,OAAO,CAAC,MAAM;QACvD,MAAMC,sBAAsBR,iBAAiBO,OAAO,CAAC,MAAM;QAE3D,IAAIC,wBAAwBF,mBAAmB;YAC7Cf,QAAQkB,KAAK,CAAC,CAAC,iCAAiC,EAAET,iBAAiB,CAAC,CAAC;YACrET,QAAQkB,KAAK,CAAC;YACdlB,QAAQkB,KAAK,CAAC;YACdlB,QAAQkB,KAAK,CAAC;YACd5B,KAAK;YACL;QACF;IACF;IAEA,+BAA+B;IAC/B,IAAI;QACFG,OAAOiB;QACPV,QAAQC,GAAG,CAAC,CAAC,aAAa,EAAEQ,kBAAkB;IAChD,EAAE,OAAOU,KAAK;QACZnB,QAAQkB,KAAK,CAAC,CAAC,sBAAsB,EAAET,iBAAiB,CAAC,CAAC,EAAE,AAACU,IAAcC,OAAO;QAClF9B,KAAK;QACL;IACF;IAEAA,KAAK;AACP;AAEA;;CAEC,GACD,SAASiB,sBAAsBH,YAAoB;IACjD,MAAMiB,WAAWzB,wBAAwBQ;IAEzC,IAAIiB,SAAStB,MAAM,KAAK,GAAG;QACzBC,QAAQC,GAAG,CAAC;IACd,OAAO;QACL,IAAK,IAAIO,IAAI,GAAGA,IAAIa,SAAStB,MAAM,EAAES,IAAK;YACxCR,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAEoB,QAAQ,CAACb,EAAE,EAAE;QAChC;IACF;AACF"}
@@ -3,6 +3,7 @@ import fs from 'fs';
3
3
  import path from 'path';
4
4
  import { storagePath } from '../constants.js';
5
5
  import { findInstalledVersions } from '../lib/findInstalledVersions.js';
6
+ import { resolveSystemBinary } from '../lib/resolveSystemBinary.js';
6
7
  /**
7
8
  * nvu which
8
9
  *
@@ -21,6 +22,20 @@ import { findInstalledVersions } from '../lib/findInstalledVersions.js';
21
22
  exit(1);
22
23
  return;
23
24
  }
25
+ // Handle "system" version specially
26
+ if (version === 'system') {
27
+ console.log('Version: system');
28
+ console.log(`Source: ${getVersionSource(cwd)}`);
29
+ const systemNode = resolveSystemBinary('node');
30
+ console.log(`Binary: ${systemNode || 'not found'}`);
31
+ if (systemNode) {
32
+ console.log('Status: Available');
33
+ } else {
34
+ console.log('Status: Not found (install Node.js on your system)');
35
+ }
36
+ exit(0);
37
+ return;
38
+ }
24
39
  // Resolve partial version to exact installed version
25
40
  const versionsPath = path.join(storagePath, 'installed');
26
41
  const matches = findInstalledVersions(versionsPath, version);
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/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';\nimport { findInstalledVersions } from '../lib/findInstalledVersions.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 // Resolve partial version to exact installed version\n const versionsPath = path.join(storagePath, 'installed');\n const matches = findInstalledVersions(versionsPath, version);\n const resolvedVersion = matches.length > 0 ? matches[matches.length - 1] : null;\n\n // Display version (show resolution if different)\n if (resolvedVersion && resolvedVersion !== version && resolvedVersion !== `v${version}`) {\n console.log(`Version: ${version} \\u2192 ${resolvedVersion}`);\n } else {\n console.log(`Version: ${resolvedVersion || version}`);\n }\n console.log(`Source: ${getVersionSource(cwd)}`);\n\n if (resolvedVersion) {\n const actualVersionPath = path.join(versionsPath, resolvedVersion);\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","findInstalledVersions","whichCmd","_args","cwd","process","version","resolveVersion","console","log","versionsPath","join","matches","resolvedVersion","length","getVersionSource","actualVersionPath","nodePath","existsSync","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';\nimport { findInstalledVersions } from '../lib/findInstalledVersions.ts';\nimport { resolveSystemBinary } from '../lib/resolveSystemBinary.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 // Handle \"system\" version specially\n if (version === 'system') {\n console.log('Version: system');\n console.log(`Source: ${getVersionSource(cwd)}`);\n const systemNode = resolveSystemBinary('node');\n console.log(`Binary: ${systemNode || 'not found'}`);\n if (systemNode) {\n console.log('Status: Available');\n } else {\n console.log('Status: Not found (install Node.js on your system)');\n }\n exit(0);\n return;\n }\n\n // Resolve partial version to exact installed version\n const versionsPath = path.join(storagePath, 'installed');\n const matches = findInstalledVersions(versionsPath, version);\n const resolvedVersion = matches.length > 0 ? matches[matches.length - 1] : null;\n\n // Display version (show resolution if different)\n if (resolvedVersion && resolvedVersion !== version && resolvedVersion !== `v${version}`) {\n console.log(`Version: ${version} \\u2192 ${resolvedVersion}`);\n } else {\n console.log(`Version: ${resolvedVersion || version}`);\n }\n console.log(`Source: ${getVersionSource(cwd)}`);\n\n if (resolvedVersion) {\n const actualVersionPath = path.join(versionsPath, resolvedVersion);\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","findInstalledVersions","resolveSystemBinary","whichCmd","_args","cwd","process","version","resolveVersion","console","log","getVersionSource","systemNode","versionsPath","join","matches","resolvedVersion","length","actualVersionPath","nodePath","existsSync","dir","nvurcPath","readFileSync","trim","nvmrcPath","parent","dirname","defaultPath"],"mappings":"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"}
@@ -18,3 +18,4 @@ export interface DirEntry {
18
18
  isDirectory(): boolean;
19
19
  }
20
20
  export declare function readdirWithTypes(dir: string): DirEntry[];
21
+ export declare function objectAssign<T, U>(target: T, source: U): T & U;
@@ -2,11 +2,11 @@
2
2
  * Compatibility Layer for Node.js 0.8+
3
3
  * Local to this package - contains only needed functions.
4
4
  */ import fs from 'fs';
5
- import _Module from 'module';
5
+ import Module from 'module';
6
6
  import os from 'os';
7
7
  import path from 'path';
8
8
  // Use existing require in CJS, or createRequire in ESM (Node 12.2+)
9
- const _require = typeof require === 'undefined' ? _Module.createRequire(import.meta.url) : require;
9
+ const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
10
10
  export function homedir() {
11
11
  return typeof os.homedir === 'function' ? os.homedir() : require('homedir-polyfill')();
12
12
  }
@@ -19,9 +19,7 @@ export function tmpdir() {
19
19
  * - Falls back to lastIndexOf on Node 0.8-3.x
20
20
  */ const hasEndsWith = typeof String.prototype.endsWith === 'function';
21
21
  export function stringEndsWith(str, search, position) {
22
- if (hasEndsWith) {
23
- return str.endsWith(search, position);
24
- }
22
+ if (hasEndsWith) return str.endsWith(search, position);
25
23
  const len = position === undefined ? str.length : position;
26
24
  return str.lastIndexOf(search) === len - search.length;
27
25
  }
@@ -57,3 +55,16 @@ export function readdirWithTypes(dir) {
57
55
  };
58
56
  });
59
57
  }
58
+ /**
59
+ * Object.assign wrapper for Node.js 0.8+
60
+ * - Uses native Object.assign on Node 4.0+
61
+ * - Falls back to manual property copy on Node 0.8-3.x
62
+ */ const hasObjectAssign = typeof Object.assign === 'function';
63
+ const _hasOwnProperty = Object.prototype.hasOwnProperty;
64
+ export function objectAssign(target, source) {
65
+ if (hasObjectAssign) return Object.assign(target, source);
66
+ for(const key in source){
67
+ if (_hasOwnProperty.call(source, key)) target[key] = source[key];
68
+ }
69
+ return target;
70
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/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+)\nconst _require = typeof require === 'undefined' ? _Module.createRequire(import.meta.url) : require;\n\nexport function homedir(): string {\n return typeof os.homedir === 'function' ? os.homedir() : require('homedir-polyfill')();\n}\n\nexport function tmpdir(): string {\n return typeof os.tmpdir === 'function' ? os.tmpdir() : require('os-shim').tmpdir();\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 */\nconst hasEndsWith = typeof String.prototype.endsWith === 'function';\nexport function stringEndsWith(str: string, search: string, position?: number): boolean {\n if (hasEndsWith) {\n return str.endsWith(search, position);\n }\n const 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 const 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 const 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 const names = fs.readdirSync(dir);\n return names.map((name) => {\n const fullPath = path.join(dir, name);\n let 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":["fs","_Module","os","path","_require","require","createRequire","url","homedir","tmpdir","hasEndsWith","String","prototype","endsWith","stringEndsWith","str","search","position","len","undefined","length","lastIndexOf","mkdirpSync","dir","mkdirp","sync","rmSync","safeRmSync","readdirWithTypes","names","readdirSync","map","name","fullPath","join","stat","statSync","_e","isDirectory"],"mappings":"AAAA;;;CAGC,GACD,OAAOA,QAAQ,KAAK;AACpB,OAAOC,aAAa,SAAS;AAC7B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AAExB,oEAAoE;AACpE,MAAMC,WAAW,OAAOC,YAAY,cAAcJ,QAAQK,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE3F,OAAO,SAASG;IACd,OAAO,OAAON,GAAGM,OAAO,KAAK,aAAaN,GAAGM,OAAO,KAAKH,QAAQ;AACnE;AAEA,OAAO,SAASI;IACd,OAAO,OAAOP,GAAGO,MAAM,KAAK,aAAaP,GAAGO,MAAM,KAAKJ,QAAQ,WAAWI,MAAM;AAClF;AAEA;;;;CAIC,GACD,MAAMC,cAAc,OAAOC,OAAOC,SAAS,CAACC,QAAQ,KAAK;AACzD,OAAO,SAASC,eAAeC,GAAW,EAAEC,MAAc,EAAEC,QAAiB;IAC3E,IAAIP,aAAa;QACf,OAAOK,IAAIF,QAAQ,CAACG,QAAQC;IAC9B;IACA,MAAMC,MAAMD,aAAaE,YAAYJ,IAAIK,MAAM,GAAGH;IAClD,OAAOF,IAAIM,WAAW,CAACL,YAAYE,MAAMF,OAAOI,MAAM;AACxD;AAEA;;CAEC,GACD,OAAO,SAASE,WAAWC,GAAW;IACpC,MAAMC,SAASpB,SAAS;IACxBoB,OAAOC,IAAI,CAACF;AACd;AAEA;;CAEC,GACD,OAAO,SAASG,OAAOH,GAAW;IAChC,MAAMI,aAAavB,SAAS,oBAAoBuB,UAAU;IAC1DA,WAAWJ;AACb;AAWA,OAAO,SAASK,iBAAiBL,GAAW;IAC1C,MAAMM,QAAQ7B,GAAG8B,WAAW,CAACP;IAC7B,OAAOM,MAAME,GAAG,CAAC,CAACC;QAChB,MAAMC,WAAW9B,KAAK+B,IAAI,CAACX,KAAKS;QAChC,IAAIG;QACJ,IAAI;YACFA,OAAOnC,GAAGoC,QAAQ,CAACH;QACrB,EAAE,OAAOI,IAAI;YACX,wCAAwC;YACxC,OAAO;gBAAEL,MAAMA;gBAAMM,aAAa,IAAM;YAAM;QAChD;QACA,OAAO;YACLN,MAAMA;YACNM,aAAa,IAAMH,KAAKG,WAAW;QACrC;IACF;AACF"}
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+)\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n\nexport function homedir(): string {\n return typeof os.homedir === 'function' ? os.homedir() : require('homedir-polyfill')();\n}\n\nexport function tmpdir(): string {\n return typeof os.tmpdir === 'function' ? os.tmpdir() : require('os-shim').tmpdir();\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 */\nconst hasEndsWith = typeof String.prototype.endsWith === 'function';\nexport function stringEndsWith(str: string, search: string, position?: number): boolean {\n if (hasEndsWith) return str.endsWith(search, position);\n const 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 const 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 const 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 const names = fs.readdirSync(dir);\n return names.map((name) => {\n const fullPath = path.join(dir, name);\n let 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\n/**\n * Object.assign wrapper for Node.js 0.8+\n * - Uses native Object.assign on Node 4.0+\n * - Falls back to manual property copy on Node 0.8-3.x\n */\nconst hasObjectAssign = typeof Object.assign === 'function';\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nexport function objectAssign<T, U>(target: T, source: U): T & U {\n if (hasObjectAssign) return Object.assign(target, source);\n\n for (const key in source) {\n if (_hasOwnProperty.call(source, key)) (target as Record<string, unknown>)[key] = source[key];\n }\n return target as T & U;\n}\n"],"names":["fs","Module","os","path","_require","require","createRequire","url","homedir","tmpdir","hasEndsWith","String","prototype","endsWith","stringEndsWith","str","search","position","len","undefined","length","lastIndexOf","mkdirpSync","dir","mkdirp","sync","rmSync","safeRmSync","readdirWithTypes","names","readdirSync","map","name","fullPath","join","stat","statSync","_e","isDirectory","hasObjectAssign","Object","assign","_hasOwnProperty","hasOwnProperty","objectAssign","target","source","key","call"],"mappings":"AAAA;;;CAGC,GACD,OAAOA,QAAQ,KAAK;AACpB,OAAOC,YAAY,SAAS;AAC5B,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AAExB,oEAAoE;AACpE,MAAMC,WAAW,OAAOC,YAAY,cAAcJ,OAAOK,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAE1F,OAAO,SAASG;IACd,OAAO,OAAON,GAAGM,OAAO,KAAK,aAAaN,GAAGM,OAAO,KAAKH,QAAQ;AACnE;AAEA,OAAO,SAASI;IACd,OAAO,OAAOP,GAAGO,MAAM,KAAK,aAAaP,GAAGO,MAAM,KAAKJ,QAAQ,WAAWI,MAAM;AAClF;AAEA;;;;CAIC,GACD,MAAMC,cAAc,OAAOC,OAAOC,SAAS,CAACC,QAAQ,KAAK;AACzD,OAAO,SAASC,eAAeC,GAAW,EAAEC,MAAc,EAAEC,QAAiB;IAC3E,IAAIP,aAAa,OAAOK,IAAIF,QAAQ,CAACG,QAAQC;IAC7C,MAAMC,MAAMD,aAAaE,YAAYJ,IAAIK,MAAM,GAAGH;IAClD,OAAOF,IAAIM,WAAW,CAACL,YAAYE,MAAMF,OAAOI,MAAM;AACxD;AAEA;;CAEC,GACD,OAAO,SAASE,WAAWC,GAAW;IACpC,MAAMC,SAASpB,SAAS;IACxBoB,OAAOC,IAAI,CAACF;AACd;AAEA;;CAEC,GACD,OAAO,SAASG,OAAOH,GAAW;IAChC,MAAMI,aAAavB,SAAS,oBAAoBuB,UAAU;IAC1DA,WAAWJ;AACb;AAWA,OAAO,SAASK,iBAAiBL,GAAW;IAC1C,MAAMM,QAAQ7B,GAAG8B,WAAW,CAACP;IAC7B,OAAOM,MAAME,GAAG,CAAC,CAACC;QAChB,MAAMC,WAAW9B,KAAK+B,IAAI,CAACX,KAAKS;QAChC,IAAIG;QACJ,IAAI;YACFA,OAAOnC,GAAGoC,QAAQ,CAACH;QACrB,EAAE,OAAOI,IAAI;YACX,wCAAwC;YACxC,OAAO;gBAAEL,MAAMA;gBAAMM,aAAa,IAAM;YAAM;QAChD;QACA,OAAO;YACLN,MAAMA;YACNM,aAAa,IAAMH,KAAKG,WAAW;QACrC;IACF;AACF;AAEA;;;;CAIC,GACD,MAAMC,kBAAkB,OAAOC,OAAOC,MAAM,KAAK;AACjD,MAAMC,kBAAkBF,OAAO5B,SAAS,CAAC+B,cAAc;AAEvD,OAAO,SAASC,aAAmBC,MAAS,EAAEC,MAAS;IACrD,IAAIP,iBAAiB,OAAOC,OAAOC,MAAM,CAACI,QAAQC;IAElD,IAAK,MAAMC,OAAOD,OAAQ;QACxB,IAAIJ,gBAAgBM,IAAI,CAACF,QAAQC,MAAM,AAACF,MAAkC,CAACE,IAAI,GAAGD,MAAM,CAACC,IAAI;IAC/F;IACA,OAAOF;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/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":["path","homedir","storagePath","process","env","NVU_HOME","join"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,SAASC,OAAO,QAAQ,cAAc;AAEtC,sCAAsC;AACtC,OAAO,MAAMC,cAAeC,QAAQC,GAAG,CAACC,QAAQ,IAAIL,KAAKM,IAAI,CAACL,WAAW,QAAmB"}
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":["path","homedir","storagePath","process","env","NVU_HOME","join"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,SAASC,OAAO,QAAQ,cAAc;AAEtC,sCAAsC;AACtC,OAAO,MAAMC,cAAeC,QAAQC,GAAG,CAACC,QAAQ,IAAIL,KAAKM,IAAI,CAACL,WAAW,QAAmB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/node-version-use/src/index.ts"],"sourcesContent":["import type { UseCallback, UseOptions, UseResult } from './types.ts';\nimport worker from './worker.ts';\n\nexport type * from './types.ts';\n\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[]): Promise<UseResult[]>;\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[], options: UseOptions): Promise<UseResult[]>;\n\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[], callback: UseCallback): void;\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[], options: UseOptions, callback: UseCallback): void;\n\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[], options?: UseOptions | UseCallback, callback?: UseCallback): void | Promise<UseResult[]> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as UseOptions);\n\n if (typeof callback === 'function') return worker(versionExpression, command, args, options, callback);\n return new Promise((resolve, reject) =>\n worker(versionExpression, command, args, options, (err, result) => {\n err ? reject(err) : resolve(result);\n })\n );\n}\n"],"names":["worker","nodeVersionUse","versionExpression","command","args","options","callback","Promise","resolve","reject","err","result"],"mappings":"AACA,OAAOA,YAAY,cAAc;AAUjC,eAAe,SAASC,eAAeC,iBAAyB,EAAEC,OAAe,EAAEC,IAAc,EAAEC,OAAkC,EAAEC,QAAsB;IAC3JA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;IAE7D,IAAI,OAAOC,aAAa,YAAY,OAAON,OAAOE,mBAAmBC,SAASC,MAAMC,SAASC;IAC7F,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAC3BT,OAAOE,mBAAmBC,SAASC,MAAMC,SAAS,CAACK,KAAKC;YACtDD,MAAMD,OAAOC,OAAOF,QAAQG;QAC9B;AAEJ"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/index.ts"],"sourcesContent":["import type { UseCallback, UseOptions, UseResult } from './types.ts';\nimport worker from './worker.ts';\n\nexport type * from './types.ts';\n\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[]): Promise<UseResult[]>;\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[], options: UseOptions): Promise<UseResult[]>;\n\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[], callback: UseCallback): void;\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[], options: UseOptions, callback: UseCallback): void;\n\nexport default function nodeVersionUse(versionExpression: string, command: string, args: string[], options?: UseOptions | UseCallback, callback?: UseCallback): void | Promise<UseResult[]> {\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as UseOptions);\n\n if (typeof callback === 'function') return worker(versionExpression, command, args, options, callback);\n return new Promise((resolve, reject) =>\n worker(versionExpression, command, args, options, (err, result) => {\n err ? reject(err) : resolve(result);\n })\n );\n}\n"],"names":["worker","nodeVersionUse","versionExpression","command","args","options","callback","Promise","resolve","reject","err","result"],"mappings":"AACA,OAAOA,YAAY,cAAc;AAUjC,eAAe,SAASC,eAAeC,iBAAyB,EAAEC,OAAe,EAAEC,IAAc,EAAEC,OAAkC,EAAEC,QAAsB;IAC3JA,WAAW,OAAOD,YAAY,aAAaA,UAAUC;IACrDD,UAAU,OAAOA,YAAY,aAAa,CAAC,IAAMA,WAAW,CAAC;IAE7D,IAAI,OAAOC,aAAa,YAAY,OAAON,OAAOE,mBAAmBC,SAASC,MAAMC,SAASC;IAC7F,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAC3BT,OAAOE,mBAAmBC,SAASC,MAAMC,SAAS,CAACK,KAAKC;YACtDD,MAAMD,OAAOC,OAAOF,QAAQG;QAC9B;AAEJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/node-version-use/src/lib/findInstalledVersions.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { readdirWithTypes } from '../compat.ts';\n\n/**\n * Compare two semver version strings (e.g., \"20.19.0\" vs \"20.9.1\")\n * Returns: negative if a < b, positive if a > b, 0 if equal\n */\nfunction compareVersions(a: string, b: string): number {\n const aParts = a.replace(/^v/, '').split('.');\n const bParts = b.replace(/^v/, '').split('.');\n const len = Math.max(aParts.length, bParts.length);\n\n for (let i = 0; i < len; i++) {\n const aNum = parseInt(aParts[i], 10) || 0;\n const bNum = parseInt(bParts[i], 10) || 0;\n if (aNum !== bNum) {\n return aNum - bNum;\n }\n }\n return 0;\n}\n\n/**\n * Find all installed versions matching the given version string\n * Results are sorted in ascending semver order (lowest first, highest last)\n */\nexport function findInstalledVersions(versionsPath: string, version: string): string[] {\n if (!fs.existsSync(versionsPath)) {\n return [];\n }\n\n const normalizedVersion = version.replace(/^v/, '');\n const matches: string[] = [];\n\n // Try exact matches first\n const exactMatches = [version, `v${normalizedVersion}`, normalizedVersion];\n for (let i = 0; i < exactMatches.length; i++) {\n const v = exactMatches[i];\n const 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 const entries = readdirWithTypes(versionsPath);\n for (let j = 0; j < entries.length; j++) {\n const entry = entries[j];\n if (!entry.isDirectory()) continue;\n const dirVersion = entry.name.replace(/^v/, '');\n if (dirVersion.indexOf(`${normalizedVersion}.`) === 0) {\n matches.push(entry.name);\n }\n }\n\n // Sort by semver (ascending) so highest version is last\n matches.sort(compareVersions);\n\n return matches;\n}\n\n/**\n * Get all installed versions\n */\nexport function getAllInstalledVersions(versionsPath: string): string[] {\n if (!fs.existsSync(versionsPath)) {\n return [];\n }\n\n const entries = readdirWithTypes(versionsPath);\n const versions: string[] = [];\n for (let i = 0; i < entries.length; i++) {\n if (entries[i].isDirectory()) {\n versions.push(entries[i].name);\n }\n }\n\n return versions;\n}\n"],"names":["fs","path","readdirWithTypes","compareVersions","a","b","aParts","replace","split","bParts","len","Math","max","length","i","aNum","parseInt","bNum","findInstalledVersions","versionsPath","version","existsSync","normalizedVersion","matches","exactMatches","v","versionPath","join","statSync","isDirectory","indexOf","push","entries","j","entry","dirVersion","name","sort","getAllInstalledVersions","versions"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,gBAAgB,QAAQ,eAAe;AAEhD;;;CAGC,GACD,SAASC,gBAAgBC,CAAS,EAAEC,CAAS;IAC3C,MAAMC,SAASF,EAAEG,OAAO,CAAC,MAAM,IAAIC,KAAK,CAAC;IACzC,MAAMC,SAASJ,EAAEE,OAAO,CAAC,MAAM,IAAIC,KAAK,CAAC;IACzC,MAAME,MAAMC,KAAKC,GAAG,CAACN,OAAOO,MAAM,EAAEJ,OAAOI,MAAM;IAEjD,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,KAAKI,IAAK;QAC5B,MAAMC,OAAOC,SAASV,MAAM,CAACQ,EAAE,EAAE,OAAO;QACxC,MAAMG,OAAOD,SAASP,MAAM,CAACK,EAAE,EAAE,OAAO;QACxC,IAAIC,SAASE,MAAM;YACjB,OAAOF,OAAOE;QAChB;IACF;IACA,OAAO;AACT;AAEA;;;CAGC,GACD,OAAO,SAASC,sBAAsBC,YAAoB,EAAEC,OAAe;IACzE,IAAI,CAACpB,GAAGqB,UAAU,CAACF,eAAe;QAChC,OAAO,EAAE;IACX;IAEA,MAAMG,oBAAoBF,QAAQb,OAAO,CAAC,MAAM;IAChD,MAAMgB,UAAoB,EAAE;IAE5B,0BAA0B;IAC1B,MAAMC,eAAe;QAACJ;QAAS,CAAC,CAAC,EAAEE,mBAAmB;QAAEA;KAAkB;IAC1E,IAAK,IAAIR,IAAI,GAAGA,IAAIU,aAAaX,MAAM,EAAEC,IAAK;QAC5C,MAAMW,IAAID,YAAY,CAACV,EAAE;QACzB,MAAMY,cAAczB,KAAK0B,IAAI,CAACR,cAAcM;QAC5C,IAAIzB,GAAGqB,UAAU,CAACK,gBAAgB1B,GAAG4B,QAAQ,CAACF,aAAaG,WAAW,IAAI;YACxE,IAAIN,QAAQO,OAAO,CAACL,OAAO,CAAC,GAAG;gBAC7BF,QAAQQ,IAAI,CAACN;YACf;QACF;IACF;IAEA,8CAA8C;IAC9C,IAAIF,QAAQV,MAAM,GAAG,GAAG;QACtB,OAAOU;IACT;IAEA,oDAAoD;IACpD,MAAMS,UAAU9B,iBAAiBiB;IACjC,IAAK,IAAIc,IAAI,GAAGA,IAAID,QAAQnB,MAAM,EAAEoB,IAAK;QACvC,MAAMC,QAAQF,OAAO,CAACC,EAAE;QACxB,IAAI,CAACC,MAAML,WAAW,IAAI;QAC1B,MAAMM,aAAaD,MAAME,IAAI,CAAC7B,OAAO,CAAC,MAAM;QAC5C,IAAI4B,WAAWL,OAAO,CAAC,GAAGR,kBAAkB,CAAC,CAAC,MAAM,GAAG;YACrDC,QAAQQ,IAAI,CAACG,MAAME,IAAI;QACzB;IACF;IAEA,wDAAwD;IACxDb,QAAQc,IAAI,CAAClC;IAEb,OAAOoB;AACT;AAEA;;CAEC,GACD,OAAO,SAASe,wBAAwBnB,YAAoB;IAC1D,IAAI,CAACnB,GAAGqB,UAAU,CAACF,eAAe;QAChC,OAAO,EAAE;IACX;IAEA,MAAMa,UAAU9B,iBAAiBiB;IACjC,MAAMoB,WAAqB,EAAE;IAC7B,IAAK,IAAIzB,IAAI,GAAGA,IAAIkB,QAAQnB,MAAM,EAAEC,IAAK;QACvC,IAAIkB,OAAO,CAAClB,EAAE,CAACe,WAAW,IAAI;YAC5BU,SAASR,IAAI,CAACC,OAAO,CAAClB,EAAE,CAACsB,IAAI;QAC/B;IACF;IAEA,OAAOG;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/lib/findInstalledVersions.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { readdirWithTypes } from '../compat.ts';\n\n/**\n * Compare two semver version strings (e.g., \"20.19.0\" vs \"20.9.1\")\n * Returns: negative if a < b, positive if a > b, 0 if equal\n */\nfunction compareVersions(a: string, b: string): number {\n const aParts = a.replace(/^v/, '').split('.');\n const bParts = b.replace(/^v/, '').split('.');\n const len = Math.max(aParts.length, bParts.length);\n\n for (let i = 0; i < len; i++) {\n const aNum = parseInt(aParts[i], 10) || 0;\n const bNum = parseInt(bParts[i], 10) || 0;\n if (aNum !== bNum) {\n return aNum - bNum;\n }\n }\n return 0;\n}\n\n/**\n * Find all installed versions matching the given version string\n * Results are sorted in ascending semver order (lowest first, highest last)\n */\nexport function findInstalledVersions(versionsPath: string, version: string): string[] {\n if (!fs.existsSync(versionsPath)) {\n return [];\n }\n\n const normalizedVersion = version.replace(/^v/, '');\n const matches: string[] = [];\n\n // Try exact matches first\n const exactMatches = [version, `v${normalizedVersion}`, normalizedVersion];\n for (let i = 0; i < exactMatches.length; i++) {\n const v = exactMatches[i];\n const 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 const entries = readdirWithTypes(versionsPath);\n for (let j = 0; j < entries.length; j++) {\n const entry = entries[j];\n if (!entry.isDirectory()) continue;\n const dirVersion = entry.name.replace(/^v/, '');\n if (dirVersion.indexOf(`${normalizedVersion}.`) === 0) {\n matches.push(entry.name);\n }\n }\n\n // Sort by semver (ascending) so highest version is last\n matches.sort(compareVersions);\n\n return matches;\n}\n\n/**\n * Get all installed versions\n */\nexport function getAllInstalledVersions(versionsPath: string): string[] {\n if (!fs.existsSync(versionsPath)) {\n return [];\n }\n\n const entries = readdirWithTypes(versionsPath);\n const versions: string[] = [];\n for (let i = 0; i < entries.length; i++) {\n if (entries[i].isDirectory()) {\n versions.push(entries[i].name);\n }\n }\n\n return versions;\n}\n"],"names":["fs","path","readdirWithTypes","compareVersions","a","b","aParts","replace","split","bParts","len","Math","max","length","i","aNum","parseInt","bNum","findInstalledVersions","versionsPath","version","existsSync","normalizedVersion","matches","exactMatches","v","versionPath","join","statSync","isDirectory","indexOf","push","entries","j","entry","dirVersion","name","sort","getAllInstalledVersions","versions"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,gBAAgB,QAAQ,eAAe;AAEhD;;;CAGC,GACD,SAASC,gBAAgBC,CAAS,EAAEC,CAAS;IAC3C,MAAMC,SAASF,EAAEG,OAAO,CAAC,MAAM,IAAIC,KAAK,CAAC;IACzC,MAAMC,SAASJ,EAAEE,OAAO,CAAC,MAAM,IAAIC,KAAK,CAAC;IACzC,MAAME,MAAMC,KAAKC,GAAG,CAACN,OAAOO,MAAM,EAAEJ,OAAOI,MAAM;IAEjD,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,KAAKI,IAAK;QAC5B,MAAMC,OAAOC,SAASV,MAAM,CAACQ,EAAE,EAAE,OAAO;QACxC,MAAMG,OAAOD,SAASP,MAAM,CAACK,EAAE,EAAE,OAAO;QACxC,IAAIC,SAASE,MAAM;YACjB,OAAOF,OAAOE;QAChB;IACF;IACA,OAAO;AACT;AAEA;;;CAGC,GACD,OAAO,SAASC,sBAAsBC,YAAoB,EAAEC,OAAe;IACzE,IAAI,CAACpB,GAAGqB,UAAU,CAACF,eAAe;QAChC,OAAO,EAAE;IACX;IAEA,MAAMG,oBAAoBF,QAAQb,OAAO,CAAC,MAAM;IAChD,MAAMgB,UAAoB,EAAE;IAE5B,0BAA0B;IAC1B,MAAMC,eAAe;QAACJ;QAAS,CAAC,CAAC,EAAEE,mBAAmB;QAAEA;KAAkB;IAC1E,IAAK,IAAIR,IAAI,GAAGA,IAAIU,aAAaX,MAAM,EAAEC,IAAK;QAC5C,MAAMW,IAAID,YAAY,CAACV,EAAE;QACzB,MAAMY,cAAczB,KAAK0B,IAAI,CAACR,cAAcM;QAC5C,IAAIzB,GAAGqB,UAAU,CAACK,gBAAgB1B,GAAG4B,QAAQ,CAACF,aAAaG,WAAW,IAAI;YACxE,IAAIN,QAAQO,OAAO,CAACL,OAAO,CAAC,GAAG;gBAC7BF,QAAQQ,IAAI,CAACN;YACf;QACF;IACF;IAEA,8CAA8C;IAC9C,IAAIF,QAAQV,MAAM,GAAG,GAAG;QACtB,OAAOU;IACT;IAEA,oDAAoD;IACpD,MAAMS,UAAU9B,iBAAiBiB;IACjC,IAAK,IAAIc,IAAI,GAAGA,IAAID,QAAQnB,MAAM,EAAEoB,IAAK;QACvC,MAAMC,QAAQF,OAAO,CAACC,EAAE;QACxB,IAAI,CAACC,MAAML,WAAW,IAAI;QAC1B,MAAMM,aAAaD,MAAME,IAAI,CAAC7B,OAAO,CAAC,MAAM;QAC5C,IAAI4B,WAAWL,OAAO,CAAC,GAAGR,kBAAkB,CAAC,CAAC,MAAM,GAAG;YACrDC,QAAQQ,IAAI,CAACG,MAAME,IAAI;QACzB;IACF;IAEA,wDAAwD;IACxDb,QAAQc,IAAI,CAAClC;IAEb,OAAOoB;AACT;AAEA;;CAEC,GACD,OAAO,SAASe,wBAAwBnB,YAAoB;IAC1D,IAAI,CAACnB,GAAGqB,UAAU,CAACF,eAAe;QAChC,OAAO,EAAE;IACX;IAEA,MAAMa,UAAU9B,iBAAiBiB;IACjC,MAAMoB,WAAqB,EAAE;IAC7B,IAAK,IAAIzB,IAAI,GAAGA,IAAIkB,QAAQnB,MAAM,EAAEC,IAAK;QACvC,IAAIkB,OAAO,CAAClB,EAAE,CAACe,WAAW,IAAI;YAC5BU,SAASR,IAAI,CAACC,OAAO,CAAClB,EAAE,CAACsB,IAAI;QAC/B;IACF;IAEA,OAAOG;AACT"}
@@ -1,7 +1,7 @@
1
1
  import installModule from 'install-module-linked';
2
2
  import path from 'path';
3
3
  import url from 'url';
4
- const _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));
4
+ const _dirname = path.dirname(typeof __filename === 'undefined' ? url.fileURLToPath(import.meta.url) : __filename);
5
5
  const nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');
6
6
  const moduleName = 'node-version-install';
7
7
  let cached;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/node-version-use/src/lib/loadNodeVersionInstall.ts"],"sourcesContent":["import installModule from 'install-module-linked';\nimport type { InstallOptions, InstallResult } from 'node-version-install';\nimport path from 'path';\nimport url from 'url';\n\nconst _dirname = path.dirname(typeof __dirname !== 'undefined' ? __dirname : url.fileURLToPath(import.meta.url));\nconst nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');\nconst moduleName = 'node-version-install';\n\ntype InstallCallback = (err?: Error, results?: InstallResult[]) => void;\ntype InstallVersionFn = (version: string, options: InstallOptions, callback: InstallCallback) => void;\n\nlet cached: InstallVersionFn | undefined;\n\nfunction loadModule(moduleName, callback) {\n if (typeof require === 'undefined') {\n import(moduleName)\n .then((mod) => {\n callback(null, mod?.default ?? null);\n })\n .catch(callback);\n } else {\n try {\n callback(null, require(moduleName));\n } catch (err) {\n callback(err, null);\n }\n }\n}\n\nexport default function loadNodeVersionInstall(callback: (err: Error | null, installVersion: InstallVersionFn) => void): void {\n if (cached !== undefined) return callback(null, cached);\n\n installModule(moduleName, nodeModules, {}, (err) => {\n if (err) return callback(err, null);\n loadModule(moduleName, (err, _cached: InstallVersionFn) => {\n if (err) return callback(err, null);\n cached = _cached;\n callback(null, cached);\n });\n });\n}\n"],"names":["installModule","path","url","_dirname","dirname","__dirname","fileURLToPath","nodeModules","join","moduleName","cached","loadModule","callback","require","then","mod","default","catch","err","loadNodeVersionInstall","undefined","_cached"],"mappings":"AAAA,OAAOA,mBAAmB,wBAAwB;AAElD,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,MAAM;AAEtB,MAAMC,WAAWF,KAAKG,OAAO,CAAC,OAAOC,cAAc,cAAcA,YAAYH,IAAII,aAAa,CAAC,YAAYJ,GAAG;AAC9G,MAAMK,cAAcN,KAAKO,IAAI,CAACL,UAAU,MAAM,MAAM,MAAM;AAC1D,MAAMM,aAAa;AAKnB,IAAIC;AAEJ,SAASC,WAAWF,UAAU,EAAEG,QAAQ;IACtC,IAAI,OAAOC,YAAY,aAAa;QAClC,MAAM,CAACJ,YACJK,IAAI,CAAC,CAACC;;YACLH,SAAS,cAAMG,gBAAAA,0BAAAA,IAAKC,OAAO,uCAAI;QACjC,GACCC,KAAK,CAACL;IACX,OAAO;QACL,IAAI;YACFA,SAAS,MAAMC,QAAQJ;QACzB,EAAE,OAAOS,KAAK;YACZN,SAASM,KAAK;QAChB;IACF;AACF;AAEA,eAAe,SAASC,uBAAuBP,QAAuE;IACpH,IAAIF,WAAWU,WAAW,OAAOR,SAAS,MAAMF;IAEhDV,cAAcS,YAAYF,aAAa,CAAC,GAAG,CAACW;QAC1C,IAAIA,KAAK,OAAON,SAASM,KAAK;QAC9BP,WAAWF,YAAY,CAACS,KAAKG;YAC3B,IAAIH,KAAK,OAAON,SAASM,KAAK;YAC9BR,SAASW;YACTT,SAAS,MAAMF;QACjB;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/lib/loadNodeVersionInstall.ts"],"sourcesContent":["import installModule from 'install-module-linked';\nimport type { InstallOptions, InstallResult } from 'node-version-install';\nimport path from 'path';\nimport url from 'url';\n\nconst _dirname = path.dirname(typeof __filename === 'undefined' ? url.fileURLToPath(import.meta.url) : __filename);\nconst nodeModules = path.join(_dirname, '..', '..', '..', 'node_modules');\nconst moduleName = 'node-version-install';\n\ntype InstallCallback = (err?: Error, results?: InstallResult[]) => void;\ntype InstallVersionFn = (version: string, options: InstallOptions, callback: InstallCallback) => void;\n\nlet cached: InstallVersionFn | undefined;\n\nfunction loadModule(moduleName, callback) {\n if (typeof require === 'undefined') {\n import(moduleName)\n .then((mod) => {\n callback(null, mod?.default ?? null);\n })\n .catch(callback);\n } else {\n try {\n callback(null, require(moduleName));\n } catch (err) {\n callback(err, null);\n }\n }\n}\n\nexport default function loadNodeVersionInstall(callback: (err: Error | null, installVersion: InstallVersionFn) => void): void {\n if (cached !== undefined) return callback(null, cached);\n\n installModule(moduleName, nodeModules, {}, (err) => {\n if (err) return callback(err, null);\n loadModule(moduleName, (err, _cached: InstallVersionFn) => {\n if (err) return callback(err, null);\n cached = _cached;\n callback(null, cached);\n });\n });\n}\n"],"names":["installModule","path","url","_dirname","dirname","__filename","fileURLToPath","nodeModules","join","moduleName","cached","loadModule","callback","require","then","mod","default","catch","err","loadNodeVersionInstall","undefined","_cached"],"mappings":"AAAA,OAAOA,mBAAmB,wBAAwB;AAElD,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,MAAM;AAEtB,MAAMC,WAAWF,KAAKG,OAAO,CAAC,OAAOC,eAAe,cAAcH,IAAII,aAAa,CAAC,YAAYJ,GAAG,IAAIG;AACvG,MAAME,cAAcN,KAAKO,IAAI,CAACL,UAAU,MAAM,MAAM,MAAM;AAC1D,MAAMM,aAAa;AAKnB,IAAIC;AAEJ,SAASC,WAAWF,UAAU,EAAEG,QAAQ;IACtC,IAAI,OAAOC,YAAY,aAAa;QAClC,MAAM,CAACJ,YACJK,IAAI,CAAC,CAACC;;YACLH,SAAS,cAAMG,gBAAAA,0BAAAA,IAAKC,OAAO,uCAAI;QACjC,GACCC,KAAK,CAACL;IACX,OAAO;QACL,IAAI;YACFA,SAAS,MAAMC,QAAQJ;QACzB,EAAE,OAAOS,KAAK;YACZN,SAASM,KAAK;QAChB;IACF;AACF;AAEA,eAAe,SAASC,uBAAuBP,QAAuE;IACpH,IAAIF,WAAWU,WAAW,OAAOR,SAAS,MAAMF;IAEhDV,cAAcS,YAAYF,aAAa,CAAC,GAAG,CAACW;QAC1C,IAAIA,KAAK,OAAON,SAASM,KAAK;QAC9BP,WAAWF,YAAY,CAACS,KAAKG;YAC3B,IAAIH,KAAK,OAAON,SAASM,KAAK;YAC9BR,SAASW;YACTT,SAAS,MAAMF;QACjB;IACF;AACF"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Find a system binary by searching PATH, excluding ~/.nvu/bin
3
+ * Returns the full path to the binary, or null if not found
4
+ */
5
+ export declare function resolveSystemBinary(name: string): string | null;
6
+ /**
7
+ * Get PATH with ~/.nvu/bin removed
8
+ * Used to create an environment for spawning system commands
9
+ */
10
+ export declare function getPathWithoutNvuBin(): string;
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Resolve system binaries by searching PATH while excluding ~/.nvu/bin
3
+ * This mirrors the Go binary's findSystemBinary() function
4
+ */ import fs from 'fs';
5
+ import path from 'path';
6
+ import { homedir } from '../compat.js';
7
+ const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);
8
+ const nvuBinDir = path.join(homedir(), '.nvu', 'bin');
9
+ /**
10
+ * Check if two paths are equal (case-insensitive on Windows)
11
+ */ function pathsEqual(a, b) {
12
+ if (isWindows) {
13
+ return a.toLowerCase() === b.toLowerCase();
14
+ }
15
+ return a === b;
16
+ }
17
+ /**
18
+ * Check if a path is within the nvu bin directory
19
+ */ function isInNvuBin(filePath) {
20
+ try {
21
+ const realPath = fs.realpathSync(filePath);
22
+ return realPath.indexOf(path.join('.nvu', 'bin')) >= 0 || pathsEqual(path.dirname(realPath), nvuBinDir);
23
+ } catch (_e) {
24
+ return false;
25
+ }
26
+ }
27
+ /**
28
+ * Find a system binary by searching PATH, excluding ~/.nvu/bin
29
+ * Returns the full path to the binary, or null if not found
30
+ */ export function resolveSystemBinary(name) {
31
+ const pathEnv = process.env.PATH || '';
32
+ const pathSep = isWindows ? ';' : ':';
33
+ const dirs = pathEnv.split(pathSep);
34
+ for(let i = 0; i < dirs.length; i++){
35
+ const dir = dirs[i];
36
+ if (!dir) continue;
37
+ // Skip ~/.nvu/bin
38
+ if (pathsEqual(dir, nvuBinDir)) continue;
39
+ // Build candidate path with appropriate extension
40
+ const candidates = isWindows ? [
41
+ path.join(dir, `${name}.exe`),
42
+ path.join(dir, `${name}.cmd`),
43
+ path.join(dir, name)
44
+ ] : [
45
+ path.join(dir, name)
46
+ ];
47
+ for(let j = 0; j < candidates.length; j++){
48
+ const candidate = candidates[j];
49
+ try {
50
+ const stat = fs.statSync(candidate);
51
+ if (!stat.isFile()) continue;
52
+ // Make sure it's not in ~/.nvu/bin (via symlink)
53
+ if (isInNvuBin(candidate)) continue;
54
+ return candidate;
55
+ } catch (_e) {
56
+ // File doesn't exist, continue
57
+ }
58
+ }
59
+ }
60
+ return null;
61
+ }
62
+ /**
63
+ * Get PATH with ~/.nvu/bin removed
64
+ * Used to create an environment for spawning system commands
65
+ */ export function getPathWithoutNvuBin() {
66
+ const pathEnv = process.env.PATH || '';
67
+ const pathSep = isWindows ? ';' : ':';
68
+ const dirs = pathEnv.split(pathSep);
69
+ const filtered = [];
70
+ for(let i = 0; i < dirs.length; i++){
71
+ const dir = dirs[i];
72
+ if (!dir) continue;
73
+ if (pathsEqual(dir, nvuBinDir)) continue;
74
+ if (dir.indexOf(path.join('.nvu', 'bin')) >= 0) continue;
75
+ filtered.push(dir);
76
+ }
77
+ return filtered.join(pathSep);
78
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/lib/resolveSystemBinary.ts"],"sourcesContent":["/**\n * Resolve system binaries by searching PATH while excluding ~/.nvu/bin\n * This mirrors the Go binary's findSystemBinary() function\n */\nimport fs from 'fs';\nimport path from 'path';\nimport { homedir } from '../compat.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst nvuBinDir = path.join(homedir(), '.nvu', 'bin');\n\n/**\n * Check if two paths are equal (case-insensitive on Windows)\n */\nfunction pathsEqual(a: string, b: string): boolean {\n if (isWindows) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\n}\n\n/**\n * Check if a path is within the nvu bin directory\n */\nfunction isInNvuBin(filePath: string): boolean {\n try {\n const realPath = fs.realpathSync(filePath);\n return realPath.indexOf(path.join('.nvu', 'bin')) >= 0 || pathsEqual(path.dirname(realPath), nvuBinDir);\n } catch (_e) {\n return false;\n }\n}\n\n/**\n * Find a system binary by searching PATH, excluding ~/.nvu/bin\n * Returns the full path to the binary, or null if not found\n */\nexport function resolveSystemBinary(name: string): string | null {\n const pathEnv = process.env.PATH || '';\n const pathSep = isWindows ? ';' : ':';\n const dirs = pathEnv.split(pathSep);\n\n for (let i = 0; i < dirs.length; i++) {\n const dir = dirs[i];\n if (!dir) continue;\n\n // Skip ~/.nvu/bin\n if (pathsEqual(dir, nvuBinDir)) continue;\n\n // Build candidate path with appropriate extension\n const candidates = isWindows ? [path.join(dir, `${name}.exe`), path.join(dir, `${name}.cmd`), path.join(dir, name)] : [path.join(dir, name)];\n\n for (let j = 0; j < candidates.length; j++) {\n const candidate = candidates[j];\n try {\n const stat = fs.statSync(candidate);\n if (!stat.isFile()) continue;\n\n // Make sure it's not in ~/.nvu/bin (via symlink)\n if (isInNvuBin(candidate)) continue;\n\n return candidate;\n } catch (_e) {\n // File doesn't exist, continue\n }\n }\n }\n\n return null;\n}\n\n/**\n * Get PATH with ~/.nvu/bin removed\n * Used to create an environment for spawning system commands\n */\nexport function getPathWithoutNvuBin(): string {\n const pathEnv = process.env.PATH || '';\n const pathSep = isWindows ? ';' : ':';\n const dirs = pathEnv.split(pathSep);\n\n const filtered: string[] = [];\n for (let i = 0; i < dirs.length; i++) {\n const dir = dirs[i];\n if (!dir) continue;\n if (pathsEqual(dir, nvuBinDir)) continue;\n if (dir.indexOf(path.join('.nvu', 'bin')) >= 0) continue;\n filtered.push(dir);\n }\n\n return filtered.join(pathSep);\n}\n"],"names":["fs","path","homedir","isWindows","process","platform","test","env","OSTYPE","nvuBinDir","join","pathsEqual","a","b","toLowerCase","isInNvuBin","filePath","realPath","realpathSync","indexOf","dirname","_e","resolveSystemBinary","name","pathEnv","PATH","pathSep","dirs","split","i","length","dir","candidates","j","candidate","stat","statSync","isFile","getPathWithoutNvuBin","filtered","push"],"mappings":"AAAA;;;CAGC,GACD,OAAOA,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,OAAO,QAAQ,eAAe;AAEvC,MAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAC3F,MAAMC,YAAYR,KAAKS,IAAI,CAACR,WAAW,QAAQ;AAE/C;;CAEC,GACD,SAASS,WAAWC,CAAS,EAAEC,CAAS;IACtC,IAAIV,WAAW;QACb,OAAOS,EAAEE,WAAW,OAAOD,EAAEC,WAAW;IAC1C;IACA,OAAOF,MAAMC;AACf;AAEA;;CAEC,GACD,SAASE,WAAWC,QAAgB;IAClC,IAAI;QACF,MAAMC,WAAWjB,GAAGkB,YAAY,CAACF;QACjC,OAAOC,SAASE,OAAO,CAAClB,KAAKS,IAAI,CAAC,QAAQ,WAAW,KAAKC,WAAWV,KAAKmB,OAAO,CAACH,WAAWR;IAC/F,EAAE,OAAOY,IAAI;QACX,OAAO;IACT;AACF;AAEA;;;CAGC,GACD,OAAO,SAASC,oBAAoBC,IAAY;IAC9C,MAAMC,UAAUpB,QAAQG,GAAG,CAACkB,IAAI,IAAI;IACpC,MAAMC,UAAUvB,YAAY,MAAM;IAClC,MAAMwB,OAAOH,QAAQI,KAAK,CAACF;IAE3B,IAAK,IAAIG,IAAI,GAAGA,IAAIF,KAAKG,MAAM,EAAED,IAAK;QACpC,MAAME,MAAMJ,IAAI,CAACE,EAAE;QACnB,IAAI,CAACE,KAAK;QAEV,kBAAkB;QAClB,IAAIpB,WAAWoB,KAAKtB,YAAY;QAEhC,kDAAkD;QAClD,MAAMuB,aAAa7B,YAAY;YAACF,KAAKS,IAAI,CAACqB,KAAK,GAAGR,KAAK,IAAI,CAAC;YAAGtB,KAAKS,IAAI,CAACqB,KAAK,GAAGR,KAAK,IAAI,CAAC;YAAGtB,KAAKS,IAAI,CAACqB,KAAKR;SAAM,GAAG;YAACtB,KAAKS,IAAI,CAACqB,KAAKR;SAAM;QAE5I,IAAK,IAAIU,IAAI,GAAGA,IAAID,WAAWF,MAAM,EAAEG,IAAK;YAC1C,MAAMC,YAAYF,UAAU,CAACC,EAAE;YAC/B,IAAI;gBACF,MAAME,OAAOnC,GAAGoC,QAAQ,CAACF;gBACzB,IAAI,CAACC,KAAKE,MAAM,IAAI;gBAEpB,iDAAiD;gBACjD,IAAItB,WAAWmB,YAAY;gBAE3B,OAAOA;YACT,EAAE,OAAOb,IAAI;YACX,+BAA+B;YACjC;QACF;IACF;IAEA,OAAO;AACT;AAEA;;;CAGC,GACD,OAAO,SAASiB;IACd,MAAMd,UAAUpB,QAAQG,GAAG,CAACkB,IAAI,IAAI;IACpC,MAAMC,UAAUvB,YAAY,MAAM;IAClC,MAAMwB,OAAOH,QAAQI,KAAK,CAACF;IAE3B,MAAMa,WAAqB,EAAE;IAC7B,IAAK,IAAIV,IAAI,GAAGA,IAAIF,KAAKG,MAAM,EAAED,IAAK;QACpC,MAAME,MAAMJ,IAAI,CAACE,EAAE;QACnB,IAAI,CAACE,KAAK;QACV,IAAIpB,WAAWoB,KAAKtB,YAAY;QAChC,IAAIsB,IAAIZ,OAAO,CAAClB,KAAKS,IAAI,CAAC,QAAQ,WAAW,GAAG;QAChD6B,SAASC,IAAI,CAACT;IAChB;IAEA,OAAOQ,SAAS7B,IAAI,CAACgB;AACvB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/_later/node-version-use/src/types.ts"],"sourcesContent":["import type { SpawnOptions, SpawnResult } from 'cross-spawn-cb';\nimport type { VersionOptions } from 'node-resolve-versions';\nimport type { InstallOptions, InstallResult } from 'node-version-install';\n\nexport interface UseResult {\n install: InstallResult;\n command: string;\n version: string;\n result?: SpawnResult;\n error?: Error;\n}\n\nexport interface UseError extends Error {\n results: UseResult[] | undefined;\n}\n\nexport interface Options {\n range?: string;\n concurrency?: number;\n sort?: number;\n streaming?: boolean;\n expanded?: boolean;\n interactive?: boolean;\n silent?: boolean;\n}\nexport type UseOptions = Options & InstallOptions & VersionOptions & SpawnOptions;\n\nexport type UseCallback = (err?: UseError | Error, results?: UseResult[]) => void;\n"],"names":[],"mappings":"AA2BA,WAAkF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/types.ts"],"sourcesContent":["import type { SpawnOptions, SpawnResult } from 'cross-spawn-cb';\nimport type { VersionOptions } from 'node-resolve-versions';\nimport type { InstallOptions, InstallResult } from 'node-version-install';\n\nexport interface UseResult {\n install: InstallResult;\n command: string;\n version: string;\n result?: SpawnResult;\n error?: Error;\n}\n\nexport interface UseError extends Error {\n results: UseResult[] | undefined;\n}\n\nexport interface Options {\n range?: string;\n concurrency?: number;\n sort?: number;\n streaming?: boolean;\n expanded?: boolean;\n interactive?: boolean;\n silent?: boolean;\n}\nexport type UseOptions = Options & InstallOptions & VersionOptions & SpawnOptions;\n\nexport type UseCallback = (err?: UseError | Error, results?: UseResult[]) => void;\n"],"names":[],"mappings":"AA2BA,WAAkF"}