node-version-use 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/dist/cjs/cli.js +14 -29
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/default.js +2 -2
- package/dist/cjs/commands/default.js.map +1 -1
- package/dist/cjs/commands/install.js +3 -3
- package/dist/cjs/commands/install.js.map +1 -1
- package/dist/cjs/commands/list.js +6 -22
- package/dist/cjs/commands/list.js.map +1 -1
- package/dist/cjs/commands/local.js +4 -4
- package/dist/cjs/commands/local.js.map +1 -1
- package/dist/cjs/commands/setup.d.cts +1 -1
- package/dist/cjs/commands/setup.d.ts +1 -1
- package/dist/cjs/commands/setup.js +1 -1
- package/dist/cjs/commands/setup.js.map +1 -1
- package/dist/cjs/commands/teardown.d.cts +1 -1
- package/dist/cjs/commands/teardown.d.ts +1 -1
- package/dist/cjs/commands/teardown.js +12 -26
- package/dist/cjs/commands/teardown.js.map +1 -1
- package/dist/cjs/commands/uninstall.js +1 -1
- package/dist/cjs/commands/uninstall.js.map +1 -1
- package/dist/cjs/commands/which.d.cts +1 -1
- package/dist/cjs/commands/which.d.ts +1 -1
- package/dist/cjs/commands/which.js +4 -4
- package/dist/cjs/commands/which.js.map +1 -1
- package/dist/cjs/worker.js +5 -26
- package/dist/cjs/worker.js.map +1 -1
- package/dist/esm/cli.js +14 -27
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/default.js +2 -2
- package/dist/esm/commands/default.js.map +1 -1
- package/dist/esm/commands/install.js +3 -3
- package/dist/esm/commands/install.js.map +1 -1
- package/dist/esm/commands/list.js +3 -2
- package/dist/esm/commands/list.js.map +1 -1
- package/dist/esm/commands/local.js +4 -4
- package/dist/esm/commands/local.js.map +1 -1
- package/dist/esm/commands/setup.d.ts +1 -1
- package/dist/esm/commands/setup.js +1 -1
- package/dist/esm/commands/setup.js.map +1 -1
- package/dist/esm/commands/teardown.d.ts +1 -1
- package/dist/esm/commands/teardown.js +11 -8
- package/dist/esm/commands/teardown.js.map +1 -1
- package/dist/esm/commands/uninstall.js +1 -1
- package/dist/esm/commands/uninstall.js.map +1 -1
- package/dist/esm/commands/which.d.ts +1 -1
- package/dist/esm/commands/which.js +4 -4
- package/dist/esm/commands/which.js.map +1 -1
- package/dist/esm/worker.js +3 -16
- package/dist/esm/worker.js.map +1 -1
- package/package.json +12 -9
- package/scripts/ensure-test-binaries.ts +27 -0
- package/scripts/postinstall.cjs +263 -74
- package/dist/cjs/lib/loadSpawnTerm.d.cts +0 -19
- package/dist/cjs/lib/loadSpawnTerm.d.ts +0 -19
- package/dist/cjs/lib/loadSpawnTerm.js +0 -103
- package/dist/cjs/lib/loadSpawnTerm.js.map +0 -1
- package/dist/esm/lib/loadSpawnTerm.d.ts +0 -19
- package/dist/esm/lib/loadSpawnTerm.js +0 -42
- package/dist/esm/lib/loadSpawnTerm.js.map +0 -1
- package/shim/Makefile +0 -58
- package/shim/go.mod +0 -3
- package/shim/main.go +0 -302
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, /**
|
|
|
6
6
|
* nvu which
|
|
7
7
|
*
|
|
8
8
|
* Show which Node binary would be used based on current directory.
|
|
9
|
-
* This simulates what the
|
|
9
|
+
* This simulates what the nvu binary would do.
|
|
10
10
|
*/ "default", {
|
|
11
11
|
enumerable: true,
|
|
12
12
|
get: function() {
|
|
@@ -24,7 +24,7 @@ function _interop_require_default(obj) {
|
|
|
24
24
|
}
|
|
25
25
|
function whichCmd(_args) {
|
|
26
26
|
var cwd = process.cwd();
|
|
27
|
-
// Resolve version using the same logic as the
|
|
27
|
+
// Resolve version using the same logic as the nvu binary
|
|
28
28
|
var version = resolveVersion(cwd);
|
|
29
29
|
if (!version) {
|
|
30
30
|
console.log('No Node version configured for this directory.');
|
|
@@ -36,7 +36,7 @@ function whichCmd(_args) {
|
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
// Check if the version is installed
|
|
39
|
-
var versionsPath = _path.default.join(_constantsts.storagePath, '
|
|
39
|
+
var versionsPath = _path.default.join(_constantsts.storagePath, 'installed');
|
|
40
40
|
var versionPath = _path.default.join(versionsPath, version);
|
|
41
41
|
var versionPathWithV = _path.default.join(versionsPath, "v".concat(version));
|
|
42
42
|
var versionPathWithoutV = _path.default.join(versionsPath, version.replace(/^v/, ''));
|
|
@@ -64,7 +64,7 @@ function whichCmd(_args) {
|
|
|
64
64
|
(0, _exit.default)(0);
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
|
-
* Resolve version from config files (mirrors
|
|
67
|
+
* Resolve version from config files (mirrors nvu binary logic)
|
|
68
68
|
*/ function resolveVersion(cwd) {
|
|
69
69
|
// Walk up directories looking for .nvurc or .nvmrc
|
|
70
70
|
var dir = cwd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/which.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu which\n *\n * Show which Node binary would be used based on current directory.\n * This simulates what the
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/which.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu which\n *\n * Show which Node binary would be used based on current directory.\n * This simulates what the nvu binary would do.\n */\nexport default function whichCmd(_args: string[]): void {\n const cwd = process.cwd();\n\n // Resolve version using the same logic as the nvu binary\n const version = resolveVersion(cwd);\n\n if (!version) {\n console.log('No Node version configured for this directory.');\n console.log('');\n console.log('To configure a version:');\n console.log(' nvu local <version> - Set version for this project');\n console.log(' nvu default <version> - Set global default');\n exit(1);\n return;\n }\n\n // Check if the version is installed\n const versionsPath = path.join(storagePath, 'installed');\n const versionPath = path.join(versionsPath, version);\n const versionPathWithV = path.join(versionsPath, `v${version}`);\n const versionPathWithoutV = path.join(versionsPath, version.replace(/^v/, ''));\n\n let actualVersionPath = '';\n if (fs.existsSync(versionPath)) {\n actualVersionPath = versionPath;\n } else if (fs.existsSync(versionPathWithV)) {\n actualVersionPath = versionPathWithV;\n } else if (fs.existsSync(versionPathWithoutV)) {\n actualVersionPath = versionPathWithoutV;\n }\n\n console.log(`Version: ${version}`);\n console.log(`Source: ${getVersionSource(cwd)}`);\n\n if (actualVersionPath) {\n const nodePath = path.join(actualVersionPath, 'bin', 'node');\n console.log(`Binary: ${nodePath}`);\n if (fs.existsSync(nodePath)) {\n console.log('Status: Installed');\n } else {\n console.log('Status: Directory exists but binary not found');\n }\n } else {\n console.log(`Status: Not installed (run: nvu install ${version})`);\n }\n\n exit(0);\n}\n\n/**\n * Resolve version from config files (mirrors nvu binary logic)\n */\nfunction resolveVersion(cwd: string): string | null {\n // Walk up directories looking for .nvurc or .nvmrc\n let dir = cwd;\n while (true) {\n // Check .nvurc first\n const nvurcPath = path.join(dir, '.nvurc');\n if (fs.existsSync(nvurcPath)) {\n return fs.readFileSync(nvurcPath, 'utf8').trim();\n }\n\n // Check .nvmrc\n const nvmrcPath = path.join(dir, '.nvmrc');\n if (fs.existsSync(nvmrcPath)) {\n return fs.readFileSync(nvmrcPath, 'utf8').trim();\n }\n\n // Move to parent\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n // Check global default\n const defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n return fs.readFileSync(defaultPath, 'utf8').trim();\n }\n\n return null;\n}\n\n/**\n * Determine the source of the version (for display)\n */\nfunction getVersionSource(cwd: string): string {\n let dir = cwd;\n while (true) {\n const nvurcPath = path.join(dir, '.nvurc');\n if (fs.existsSync(nvurcPath)) {\n return nvurcPath;\n }\n\n const nvmrcPath = path.join(dir, '.nvmrc');\n if (fs.existsSync(nvmrcPath)) {\n return nvmrcPath;\n }\n\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n const defaultPath = path.join(storagePath, 'default');\n if (fs.existsSync(defaultPath)) {\n return `${defaultPath} (global default)`;\n }\n\n return 'none';\n}\n"],"names":["whichCmd","_args","cwd","process","version","resolveVersion","console","log","exit","versionsPath","path","join","storagePath","versionPath","versionPathWithV","versionPathWithoutV","replace","actualVersionPath","fs","existsSync","getVersionSource","nodePath","dir","nvurcPath","readFileSync","trim","nvmrcPath","parent","dirname","defaultPath"],"mappings":"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"}
|
package/dist/cjs/worker.js
CHANGED
|
@@ -16,10 +16,10 @@ var _path = /*#__PURE__*/ _interop_require_default(require("path"));
|
|
|
16
16
|
var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
|
|
17
17
|
var _resolvebinsync = /*#__PURE__*/ _interop_require_default(require("resolve-bin-sync"));
|
|
18
18
|
var _spawnstreaming = /*#__PURE__*/ _interop_require_default(require("spawn-streaming"));
|
|
19
|
+
var _spawnterm = require("spawn-term");
|
|
19
20
|
var _compatts = require("./compat.js");
|
|
20
21
|
var _constantsts = require("./constants.js");
|
|
21
22
|
var _loadNodeVersionInstallts = /*#__PURE__*/ _interop_require_default(require("./lib/loadNodeVersionInstall.js"));
|
|
22
|
-
var _loadSpawnTermts = /*#__PURE__*/ _interop_require_default(require("./lib/loadSpawnTerm.js"));
|
|
23
23
|
function _array_like_to_array(arr, len) {
|
|
24
24
|
if (len == null || len > arr.length) len = arr.length;
|
|
25
25
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
@@ -134,29 +134,8 @@ function resolveCommand(command, args) {
|
|
|
134
134
|
};
|
|
135
135
|
}
|
|
136
136
|
function worker(versionExpression, command, args, options, callback) {
|
|
137
|
-
// Load
|
|
138
|
-
|
|
139
|
-
var installVersion;
|
|
140
|
-
var createSession;
|
|
141
|
-
var formatArguments = function(x) {
|
|
142
|
-
return x;
|
|
143
|
-
};
|
|
144
|
-
loaderQueue.defer(function(cb) {
|
|
145
|
-
return (0, _loadNodeVersionInstallts.default)(function(err, fn) {
|
|
146
|
-
installVersion = fn;
|
|
147
|
-
cb(err);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
loaderQueue.defer(function(cb) {
|
|
151
|
-
return (0, _loadSpawnTermts.default)(function(err, mod) {
|
|
152
|
-
createSession = mod === null || mod === void 0 ? void 0 : mod.createSession;
|
|
153
|
-
formatArguments = (mod === null || mod === void 0 ? void 0 : mod.formatArguments) || function(x) {
|
|
154
|
-
return x;
|
|
155
|
-
};
|
|
156
|
-
cb(err);
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
loaderQueue.await(function(loadErr) {
|
|
137
|
+
// Load node-version-install lazily
|
|
138
|
+
(0, _loadNodeVersionInstallts.default)(function(loadErr, installVersion) {
|
|
160
139
|
if (loadErr) return callback(loadErr);
|
|
161
140
|
(0, _noderesolveversions.default)(versionExpression, options, function(err, versions) {
|
|
162
141
|
if (err) {
|
|
@@ -175,7 +154,7 @@ function worker(versionExpression, command, args, options, callback) {
|
|
|
175
154
|
var queue = new _queuecb.default(1);
|
|
176
155
|
// Create session once for all processes (only if multiple versions)
|
|
177
156
|
var interactive = options.interactive !== false;
|
|
178
|
-
var session = versions.length >= 2 && createSession && !streamingOptions.streaming ? createSession({
|
|
157
|
+
var session = versions.length >= 2 && _spawnterm.createSession && !streamingOptions.streaming ? (0, _spawnterm.createSession)({
|
|
179
158
|
header: "".concat(command, " ").concat(args.join(' ')),
|
|
180
159
|
showStatusBar: true,
|
|
181
160
|
interactive: interactive
|
|
@@ -214,7 +193,7 @@ function worker(versionExpression, command, args, options, callback) {
|
|
|
214
193
|
var resolved = resolveCommand(command, args);
|
|
215
194
|
if (versions.length < 2) {
|
|
216
195
|
// Show command when running single version (no terminal session, unless silent)
|
|
217
|
-
if (!options.silent) console.log("$ ".concat(formatArguments([
|
|
196
|
+
if (!options.silent) console.log("$ ".concat((0, _spawnterm.formatArguments)([
|
|
218
197
|
resolved.command
|
|
219
198
|
].concat(resolved.args)).join(' ')));
|
|
220
199
|
return (0, _crossspawncb.default)(resolved.command, resolved.args, spawnOptions, next);
|
package/dist/cjs/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/worker.ts"],"sourcesContent":["import spawn, { type SpawnOptions } from 'cross-spawn-cb';\nimport fs from 'fs';\nimport resolveVersions, { type VersionOptions } from 'node-resolve-versions';\nimport type { InstallOptions, InstallResult } from 'node-version-install';\nimport { spawnOptions as createSpawnOptions } from 'node-version-utils';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport resolveBin from 'resolve-bin-sync';\nimport spawnStreaming from 'spawn-streaming';\nimport { stringEndsWith } from './compat.ts';\nimport { storagePath } from './constants.ts';\nimport loadNodeVersionInstall from './lib/loadNodeVersionInstall.ts';\nimport loadSpawnTerm from './lib/loadSpawnTerm.ts';\n\nimport type { Options, UseCallback, UseOptions, UseResult } from './types.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst NODE = isWindows ? 'node.exe' : 'node';\n\n// Parse npm-generated .cmd wrapper to extract the JS script path\nfunction parseNpmCmdWrapper(cmdPath: string): string | null {\n try {\n const content = fs.readFileSync(cmdPath, 'utf8');\n // Match: \"%_prog%\" \"%dp0%\\node_modules\\...\\cli.js\" %*\n // or: \"%_prog%\" \"%dp0%\\path\\to\\script.js\" %*\n const match = content.match(/\"%_prog%\"\\s+\"?%dp0%\\\\([^\"]+)\"?\\s+%\\*/);\n if (match) {\n const relativePath = match[1];\n const cmdDir = path.dirname(cmdPath);\n return path.join(cmdDir, relativePath);\n }\n } catch (_e) {\n // ignore\n }\n return null;\n}\n\n// On Windows, resolve npm bin commands to their JS entry points to bypass .cmd wrappers\n// This fixes issues with nvm-windows where .cmd wrappers use symlinked node.exe directly\nfunction resolveCommand(command: string, args: string[]): { command: string; args: string[] } {\n if (!isWindows) return { command, args };\n\n // Case 1: Command is a .cmd file path\n if (stringEndsWith(command.toLowerCase(), '.cmd')) {\n const scriptPath = parseNpmCmdWrapper(command);\n if (scriptPath) {\n return { command: NODE, args: [scriptPath, ...args] };\n }\n }\n\n // Case 2: Try to resolve the command as an npm package bin from node_modules\n try {\n const binPath = resolveBin(command);\n return { command: NODE, args: [binPath, ...args] };\n } catch (_e) {\n // Not an npm package bin, use original command\n }\n\n return { command, args };\n}\n\nexport default function worker(versionExpression: string, command: string, args: string[], options: UseOptions, callback: UseCallback): undefined {\n // Load lazy dependencies in parallel\n const loaderQueue = new Queue();\n let installVersion: (version: string, opts: InstallOptions, cb: (err?: Error, results?: InstallResult[]) => void) => void;\n let createSession:\n | ((options?: { header?: string; showStatusBar?: boolean; interactive?: boolean }) => {\n spawn: (command: string, args: string[], options: unknown, termOptions: unknown, callback: (err?: Error, res?: unknown) => void) => void;\n close: () => void;\n waitAndClose: (callback?: () => void) => void;\n })\n | undefined;\n let formatArguments: (args: string[]) => string[] = (x) => x;\n\n loaderQueue.defer((cb) =>\n loadNodeVersionInstall((err, fn) => {\n installVersion = fn;\n cb(err);\n })\n );\n loaderQueue.defer((cb) =>\n loadSpawnTerm((err, mod) => {\n createSession = mod?.createSession;\n formatArguments = mod?.formatArguments || ((x) => x);\n cb(err);\n })\n );\n\n loaderQueue.await((loadErr) => {\n if (loadErr) return callback(loadErr);\n\n resolveVersions(versionExpression, options as VersionOptions, (err?: Error, versions?: string[]) => {\n if (err) {\n callback(err);\n return;\n }\n if (!versions.length) {\n callback(new Error(`No versions found from expression: ${versionExpression}`));\n return;\n }\n\n const installOptions = { storagePath, ...options } as InstallOptions;\n const streamingOptions = options as Options;\n const results: UseResult[] = [];\n const queue = new Queue(1);\n\n // Create session once for all processes (only if multiple versions)\n const interactive = options.interactive !== false;\n const session = versions.length >= 2 && createSession && !streamingOptions.streaming ? createSession({ header: `${command} ${args.join(' ')}`, showStatusBar: true, interactive }) : null;\n\n versions.forEach((version: string) => {\n queue.defer((cb) => {\n installVersion(version, installOptions, (_err, installs) => {\n const install = installs && installs.length === 1 ? installs[0] : null;\n if (!install) {\n results.push({ install, command, version, error: new Error(`Unexpected version results for version ${version}. Install ${JSON.stringify(installs)}`), result: null });\n return callback();\n }\n const spawnOptions = createSpawnOptions(install.installPath, options as SpawnOptions);\n const prefix = install.version;\n\n function next(err?, res?): undefined {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err;\n err = null;\n }\n results.push({ install, command, version, error: err, result: res });\n cb();\n }\n\n // On Windows, resolve npm bin commands to bypass .cmd wrappers\n const resolved = resolveCommand(command, args);\n\n if (versions.length < 2) {\n // Show command when running single version (no terminal session, unless silent)\n if (!options.silent) console.log(`$ ${formatArguments([resolved.command].concat(resolved.args)).join(' ')}`);\n return spawn(resolved.command, resolved.args, spawnOptions, next);\n }\n if (session) session.spawn(resolved.command, resolved.args, spawnOptions, { group: prefix, expanded: streamingOptions.expanded }, next);\n else spawnStreaming(resolved.command, resolved.args, spawnOptions, { prefix }, next);\n });\n });\n });\n queue.await((err) => {\n if (session) {\n session.waitAndClose(() => {\n err ? callback(err) : callback(null, results);\n });\n } else {\n err ? callback(err) : callback(null, results);\n }\n });\n });\n });\n}\n"],"names":["worker","isWindows","process","platform","test","env","OSTYPE","NODE","parseNpmCmdWrapper","cmdPath","content","fs","readFileSync","match","relativePath","cmdDir","path","dirname","join","_e","resolveCommand","command","args","stringEndsWith","toLowerCase","scriptPath","binPath","resolveBin","versionExpression","options","callback","loaderQueue","Queue","installVersion","createSession","formatArguments","x","defer","cb","loadNodeVersionInstall","err","fn","loadSpawnTerm","mod","await","loadErr","resolveVersions","versions","length","Error","installOptions","storagePath","streamingOptions","results","queue","interactive","session","streaming","header","showStatusBar","forEach","version","_err","installs","next","res","message","indexOf","push","install","error","result","JSON","stringify","spawnOptions","createSpawnOptions","installPath","prefix","resolved","silent","console","log","concat","spawn","group","expanded","spawnStreaming","waitAndClose"],"mappings":";;;;+BA6DA;;;eAAwBA;;;mEA7DiB;yDAC1B;0EACsC;gCAEF;2DAClC;8DACC;qEACK;qEACI;wBACI;2BACH;+EACO;sEACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAI1B,IAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM;AAC3F,IAAMC,OAAON,YAAY,aAAa;AAEtC,iEAAiE;AACjE,SAASO,mBAAmBC,OAAe;IACzC,IAAI;QACF,IAAMC,UAAUC,WAAE,CAACC,YAAY,CAACH,SAAS;QACzC,uDAAuD;QACvD,8CAA8C;QAC9C,IAAMI,QAAQH,QAAQG,KAAK,CAAC;QAC5B,IAAIA,OAAO;YACT,IAAMC,eAAeD,KAAK,CAAC,EAAE;YAC7B,IAAME,SAASC,aAAI,CAACC,OAAO,CAACR;YAC5B,OAAOO,aAAI,CAACE,IAAI,CAACH,QAAQD;QAC3B;IACF,EAAE,OAAOK,IAAI;IACX,SAAS;IACX;IACA,OAAO;AACT;AAEA,wFAAwF;AACxF,yFAAyF;AACzF,SAASC,eAAeC,OAAe,EAAEC,IAAc;IACrD,IAAI,CAACrB,WAAW,OAAO;QAAEoB,SAAAA;QAASC,MAAAA;IAAK;IAEvC,sCAAsC;IACtC,IAAIC,IAAAA,wBAAc,EAACF,QAAQG,WAAW,IAAI,SAAS;QACjD,IAAMC,aAAajB,mBAAmBa;QACtC,IAAII,YAAY;YACd,OAAO;gBAAEJ,SAASd;gBAAMe,MAAM;oBAACG;iBAAoB,CAArB,OAAa,qBAAGH;YAAM;QACtD;IACF;IAEA,6EAA6E;IAC7E,IAAI;QACF,IAAMI,UAAUC,IAAAA,uBAAU,EAACN;QAC3B,OAAO;YAAEA,SAASd;YAAMe,MAAM;gBAACI;aAAiB,CAAlB,OAAU,qBAAGJ;QAAM;IACnD,EAAE,OAAOH,IAAI;IACX,+CAA+C;IACjD;IAEA,OAAO;QAAEE,SAAAA;QAASC,MAAAA;IAAK;AACzB;AAEe,SAAStB,OAAO4B,iBAAyB,EAAEP,OAAe,EAAEC,IAAc,EAAEO,OAAmB,EAAEC,QAAqB;IACnI,qCAAqC;IACrC,IAAMC,cAAc,IAAIC,gBAAK;IAC7B,IAAIC;IACJ,IAAIC;IAOJ,IAAIC,kBAAgD,SAACC;eAAMA;;IAE3DL,YAAYM,KAAK,CAAC,SAACC;eACjBC,IAAAA,iCAAsB,EAAC,SAACC,KAAKC;YAC3BR,iBAAiBQ;YACjBH,GAAGE;QACL;;IAEFT,YAAYM,KAAK,CAAC,SAACC;eACjBI,IAAAA,wBAAa,EAAC,SAACF,KAAKG;YAClBT,gBAAgBS,gBAAAA,0BAAAA,IAAKT,aAAa;YAClCC,kBAAkBQ,CAAAA,gBAAAA,0BAAAA,IAAKR,eAAe,KAAK,SAACC;uBAAMA;;YAClDE,GAAGE;QACL;;IAGFT,YAAYa,KAAK,CAAC,SAACC;QACjB,IAAIA,SAAS,OAAOf,SAASe;QAE7BC,IAAAA,4BAAe,EAAClB,mBAAmBC,SAA2B,SAACW,KAAaO;YAC1E,IAAIP,KAAK;gBACPV,SAASU;gBACT;YACF;YACA,IAAI,CAACO,SAASC,MAAM,EAAE;gBACpBlB,SAAS,IAAImB,MAAM,AAAC,sCAAuD,OAAlBrB;gBACzD;YACF;YAEA,IAAMsB,iBAAiB;gBAAEC,aAAAA,wBAAW;eAAKtB;YACzC,IAAMuB,mBAAmBvB;YACzB,IAAMwB,UAAuB,EAAE;YAC/B,IAAMC,QAAQ,IAAItB,gBAAK,CAAC;YAExB,oEAAoE;YACpE,IAAMuB,cAAc1B,QAAQ0B,WAAW,KAAK;YAC5C,IAAMC,UAAUT,SAASC,MAAM,IAAI,KAAKd,iBAAiB,CAACkB,iBAAiBK,SAAS,GAAGvB,cAAc;gBAAEwB,QAAQ,AAAC,GAAapC,OAAXD,SAAQ,KAAkB,OAAfC,KAAKJ,IAAI,CAAC;gBAAQyC,eAAe;gBAAMJ,aAAAA;YAAY,KAAK;YAErLR,SAASa,OAAO,CAAC,SAACC;gBAChBP,MAAMjB,KAAK,CAAC,SAACC;oBACXL,eAAe4B,SAASX,gBAAgB,SAACY,MAAMC;4BASpCC,OAAT,SAASA,KAAKxB,GAAI,EAAEyB,GAAI;4BACtB,IAAIzB,OAAOA,IAAI0B,OAAO,CAACC,OAAO,CAAC,0BAA0B,GAAG;gCAC1DF,MAAMzB;gCACNA,MAAM;4BACR;4BACAa,QAAQe,IAAI,CAAC;gCAAEC,SAAAA;gCAAShD,SAAAA;gCAASwC,SAAAA;gCAASS,OAAO9B;gCAAK+B,QAAQN;4BAAI;4BAClE3B;wBACF;wBAfA,IAAM+B,UAAUN,YAAYA,SAASf,MAAM,KAAK,IAAIe,QAAQ,CAAC,EAAE,GAAG;wBAClE,IAAI,CAACM,SAAS;4BACZhB,QAAQe,IAAI,CAAC;gCAAEC,SAAAA;gCAAShD,SAAAA;gCAASwC,SAAAA;gCAASS,OAAO,IAAIrB,MAAM,AAAC,0CAA6DuB,OAApBX,SAAQ,cAAqC,OAAzBW,KAAKC,SAAS,CAACV;gCAAcQ,QAAQ;4BAAK;4BACnK,OAAOzC;wBACT;wBACA,IAAM4C,eAAeC,IAAAA,8BAAkB,EAACN,QAAQO,WAAW,EAAE/C;wBAC7D,IAAMgD,SAASR,QAAQR,OAAO;wBAW9B,+DAA+D;wBAC/D,IAAMiB,WAAW1D,eAAeC,SAASC;wBAEzC,IAAIyB,SAASC,MAAM,GAAG,GAAG;4BACvB,gFAAgF;4BAChF,IAAI,CAACnB,QAAQkD,MAAM,EAAEC,QAAQC,GAAG,CAAC,AAAC,KAAwE,OAApE9C,gBAAgB;gCAAC2C,SAASzD,OAAO;6BAAC,CAAC6D,MAAM,CAACJ,SAASxD,IAAI,GAAGJ,IAAI,CAAC;4BACrG,OAAOiE,IAAAA,qBAAK,EAACL,SAASzD,OAAO,EAAEyD,SAASxD,IAAI,EAAEoD,cAAcV;wBAC9D;wBACA,IAAIR,SAASA,QAAQ2B,KAAK,CAACL,SAASzD,OAAO,EAAEyD,SAASxD,IAAI,EAAEoD,cAAc;4BAAEU,OAAOP;4BAAQQ,UAAUjC,iBAAiBiC,QAAQ;wBAAC,GAAGrB;6BAC7HsB,IAAAA,uBAAc,EAACR,SAASzD,OAAO,EAAEyD,SAASxD,IAAI,EAAEoD,cAAc;4BAAEG,QAAAA;wBAAO,GAAGb;oBACjF;gBACF;YACF;YACAV,MAAMV,KAAK,CAAC,SAACJ;gBACX,IAAIgB,SAAS;oBACXA,QAAQ+B,YAAY,CAAC;wBACnB/C,MAAMV,SAASU,OAAOV,SAAS,MAAMuB;oBACvC;gBACF,OAAO;oBACLb,MAAMV,SAASU,OAAOV,SAAS,MAAMuB;gBACvC;YACF;QACF;IACF;AACF"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/worker.ts"],"sourcesContent":["import spawn, { type SpawnOptions } from 'cross-spawn-cb';\nimport fs from 'fs';\nimport resolveVersions, { type VersionOptions } from 'node-resolve-versions';\nimport type { InstallOptions } from 'node-version-install';\nimport { spawnOptions as createSpawnOptions } from 'node-version-utils';\nimport path from 'path';\nimport Queue from 'queue-cb';\nimport resolveBin from 'resolve-bin-sync';\nimport spawnStreaming from 'spawn-streaming';\nimport { createSession, formatArguments } from 'spawn-term';\nimport { stringEndsWith } from './compat.ts';\nimport { storagePath } from './constants.ts';\nimport loadNodeVersionInstall from './lib/loadNodeVersionInstall.ts';\n\nimport type { Options, UseCallback, UseOptions, UseResult } from './types.ts';\n\nconst isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\nconst NODE = isWindows ? 'node.exe' : 'node';\n\n// Parse npm-generated .cmd wrapper to extract the JS script path\nfunction parseNpmCmdWrapper(cmdPath: string): string | null {\n try {\n const content = fs.readFileSync(cmdPath, 'utf8');\n // Match: \"%_prog%\" \"%dp0%\\node_modules\\...\\cli.js\" %*\n // or: \"%_prog%\" \"%dp0%\\path\\to\\script.js\" %*\n const match = content.match(/\"%_prog%\"\\s+\"?%dp0%\\\\([^\"]+)\"?\\s+%\\*/);\n if (match) {\n const relativePath = match[1];\n const cmdDir = path.dirname(cmdPath);\n return path.join(cmdDir, relativePath);\n }\n } catch (_e) {\n // ignore\n }\n return null;\n}\n\n// On Windows, resolve npm bin commands to their JS entry points to bypass .cmd wrappers\n// This fixes issues with nvm-windows where .cmd wrappers use symlinked node.exe directly\nfunction resolveCommand(command: string, args: string[]): { command: string; args: string[] } {\n if (!isWindows) return { command, args };\n\n // Case 1: Command is a .cmd file path\n if (stringEndsWith(command.toLowerCase(), '.cmd')) {\n const scriptPath = parseNpmCmdWrapper(command);\n if (scriptPath) {\n return { command: NODE, args: [scriptPath, ...args] };\n }\n }\n\n // Case 2: Try to resolve the command as an npm package bin from node_modules\n try {\n const binPath = resolveBin(command);\n return { command: NODE, args: [binPath, ...args] };\n } catch (_e) {\n // Not an npm package bin, use original command\n }\n\n return { command, args };\n}\n\nexport default function worker(versionExpression: string, command: string, args: string[], options: UseOptions, callback: UseCallback): undefined {\n // Load node-version-install lazily\n loadNodeVersionInstall((loadErr, installVersion) => {\n if (loadErr) return callback(loadErr);\n\n resolveVersions(versionExpression, options as VersionOptions, (err?: Error, versions?: string[]) => {\n if (err) {\n callback(err);\n return;\n }\n if (!versions.length) {\n callback(new Error(`No versions found from expression: ${versionExpression}`));\n return;\n }\n\n const installOptions = { storagePath, ...options } as InstallOptions;\n const streamingOptions = options as Options;\n const results: UseResult[] = [];\n const queue = new Queue(1);\n\n // Create session once for all processes (only if multiple versions)\n const interactive = options.interactive !== false;\n const session = versions.length >= 2 && createSession && !streamingOptions.streaming ? createSession({ header: `${command} ${args.join(' ')}`, showStatusBar: true, interactive }) : null;\n\n versions.forEach((version: string) => {\n queue.defer((cb) => {\n installVersion(version, installOptions, (_err, installs) => {\n const install = installs && installs.length === 1 ? installs[0] : null;\n if (!install) {\n results.push({ install, command, version, error: new Error(`Unexpected version results for version ${version}. Install ${JSON.stringify(installs)}`), result: null });\n return callback();\n }\n const spawnOptions = createSpawnOptions(install.installPath, options as SpawnOptions);\n const prefix = install.version;\n\n function next(err?, res?): undefined {\n if (err && err.message.indexOf('ExperimentalWarning') >= 0) {\n res = err;\n err = null;\n }\n results.push({ install, command, version, error: err, result: res });\n cb();\n }\n\n // On Windows, resolve npm bin commands to bypass .cmd wrappers\n const resolved = resolveCommand(command, args);\n\n if (versions.length < 2) {\n // Show command when running single version (no terminal session, unless silent)\n if (!options.silent) console.log(`$ ${formatArguments([resolved.command].concat(resolved.args)).join(' ')}`);\n return spawn(resolved.command, resolved.args, spawnOptions, next);\n }\n if (session) session.spawn(resolved.command, resolved.args, spawnOptions, { group: prefix, expanded: streamingOptions.expanded }, next);\n else spawnStreaming(resolved.command, resolved.args, spawnOptions, { prefix }, next);\n });\n });\n });\n queue.await((err) => {\n if (session) {\n session.waitAndClose(() => {\n err ? callback(err) : callback(null, results);\n });\n } else {\n err ? callback(err) : callback(null, results);\n }\n });\n });\n });\n}\n"],"names":["worker","isWindows","process","platform","test","env","OSTYPE","NODE","parseNpmCmdWrapper","cmdPath","content","fs","readFileSync","match","relativePath","cmdDir","path","dirname","join","_e","resolveCommand","command","args","stringEndsWith","toLowerCase","scriptPath","binPath","resolveBin","versionExpression","options","callback","loadNodeVersionInstall","loadErr","installVersion","resolveVersions","err","versions","length","Error","installOptions","storagePath","streamingOptions","results","queue","Queue","interactive","session","createSession","streaming","header","showStatusBar","forEach","version","defer","cb","_err","installs","next","res","message","indexOf","push","install","error","result","JSON","stringify","spawnOptions","createSpawnOptions","installPath","prefix","resolved","silent","console","log","formatArguments","concat","spawn","group","expanded","spawnStreaming","await","waitAndClose"],"mappings":"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"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -2,10 +2,10 @@ import exit from 'exit';
|
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import getopts from 'getopts-compat';
|
|
4
4
|
import path from 'path';
|
|
5
|
+
import { createSession, figures, formatArguments } from 'spawn-term';
|
|
5
6
|
import url from 'url';
|
|
6
7
|
import { isCommand, runCommand } from './commands/index.js';
|
|
7
8
|
import run from './index.js';
|
|
8
|
-
import loadSpawnTerm from './lib/loadSpawnTerm.js';
|
|
9
9
|
const __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));
|
|
10
10
|
const ERROR_CODE = 13;
|
|
11
11
|
function getVersion() {
|
|
@@ -29,8 +29,8 @@ function printHelp(name) {
|
|
|
29
29
|
console.log(' uninstall <version> Remove an installed Node version');
|
|
30
30
|
console.log(' list List installed Node versions');
|
|
31
31
|
console.log(' which Show which Node version would be used');
|
|
32
|
-
console.log(' setup Install/reinstall
|
|
33
|
-
console.log(' teardown Remove
|
|
32
|
+
console.log(' setup Install/reinstall binaries to ~/.nvu/bin');
|
|
33
|
+
console.log(' teardown Remove binaries from ~/.nvu/bin');
|
|
34
34
|
console.log('');
|
|
35
35
|
console.log('Options:');
|
|
36
36
|
console.log(' -v, --version Print version number');
|
|
@@ -114,30 +114,17 @@ export default ((argv, name)=>{
|
|
|
114
114
|
if (err) results = err.results;
|
|
115
115
|
const errors = results.filter((result)=>!!result.error);
|
|
116
116
|
if (!options.silent) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (!createSession) {
|
|
128
|
-
console.log('\n======================');
|
|
129
|
-
results.forEach((res)=>{
|
|
130
|
-
console.log(`${res.error ? figures.cross : figures.tick} ${res.version}${res.error ? ` Error: ${res.error.message}` : ''}`);
|
|
131
|
-
});
|
|
132
|
-
console.log('\n----------------------');
|
|
133
|
-
console.log(`${name} ${formatArguments(args).join(' ')}`);
|
|
134
|
-
console.log(`${figures.tick} ${results.length - errors.length} succeeded`);
|
|
135
|
-
if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);
|
|
136
|
-
}
|
|
137
|
-
exit(err || errors.length ? ERROR_CODE : 0);
|
|
138
|
-
});
|
|
139
|
-
} else {
|
|
140
|
-
exit(err || errors.length ? ERROR_CODE : 0);
|
|
117
|
+
if (!createSession) {
|
|
118
|
+
console.log('\n======================');
|
|
119
|
+
results.forEach((res)=>{
|
|
120
|
+
console.log(`${res.error ? figures.cross : figures.tick} ${res.version}${res.error ? ` Error: ${res.error.message}` : ''}`);
|
|
121
|
+
});
|
|
122
|
+
console.log('\n----------------------');
|
|
123
|
+
console.log(`${name} ${formatArguments(args).join(' ')}`);
|
|
124
|
+
console.log(`${figures.tick} ${results.length - errors.length} succeeded`);
|
|
125
|
+
if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);
|
|
126
|
+
}
|
|
141
127
|
}
|
|
128
|
+
exit(err || errors.length ? ERROR_CODE : 0);
|
|
142
129
|
});
|
|
143
130
|
});
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/cli.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport url from 'url';\nimport { isCommand, runCommand } from './commands/index.ts';\nimport run from './index.ts';\nimport
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/cli.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport getopts from 'getopts-compat';\nimport path from 'path';\nimport { createSession, figures, formatArguments } from 'spawn-term';\nimport url from 'url';\nimport { isCommand, runCommand } from './commands/index.ts';\nimport run from './index.ts';\nimport type { UseError, UseOptions, UseResult } from './types.ts';\n\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\nconst ERROR_CODE = 13;\n\nfunction getVersion(): string {\n const packagePath = path.join(__dirname, '..', '..', 'package.json');\n const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8'));\n return packageJson.version;\n}\n\nfunction printHelp(name: string): void {\n const version = getVersion();\n console.log(`${name} v${version}`);\n console.log('');\n console.log(`Usage: ${name} [options] <version> <command> [args...]`);\n console.log(` ${name} <subcommand> [args...]`);\n console.log('');\n console.log('Run commands with specific Node.js versions');\n console.log('');\n console.log('Subcommands:');\n console.log(' default [version] Set or display the global default Node version');\n console.log(' local [version] Set or display the local Node version (.nvmrc)');\n console.log(' install <version> Download and install a Node version');\n console.log(' uninstall <version> Remove an installed Node version');\n console.log(' list List installed Node versions');\n console.log(' which Show which Node version would be used');\n console.log(' setup Install/reinstall binaries to ~/.nvu/bin');\n console.log(' teardown Remove binaries from ~/.nvu/bin');\n console.log('');\n console.log('Options:');\n console.log(' -v, --version Print version number');\n console.log(' -h, --help Print this help message');\n console.log(' -r, --range Range type (major, minor, patch) with filters (lts, even, odd)');\n console.log(' Default: major,even');\n console.log(' -d, --desc Sort versions in descending order');\n console.log(' -e, --expanded Use expanded version format');\n console.log(' -s, --streaming Enable streaming output');\n console.log(' --silent Suppress logging');\n console.log('');\n console.log('Examples:');\n console.log(` ${name} 22 node --version Run with Node 22`);\n console.log(` ${name} 22,20,18 npm test Run with multiple versions`);\n console.log(` ${name} engines node --version Use version from package.json`);\n console.log(` ${name} default 20 Set global default to Node 20`);\n console.log(` ${name} local 18 Create .nvmrc with Node 18`);\n}\n\nexport default (argv: string[], name: string): undefined => {\n const options = getopts(argv, {\n alias: { range: 'r', desc: 'd', expanded: 'e', streaming: 's', silent: 'si', version: 'v', help: 'h' },\n default: { range: 'major,even', interactive: true },\n boolean: ['silent', 'desc', 'expanded', 'streaming', 'interactive', 'version', 'help'],\n stopEarly: true,\n });\n\n if (options.version) {\n console.log(getVersion());\n exit(0);\n return;\n }\n\n if (options.help) {\n printHelp(name);\n exit(0);\n return;\n }\n\n // Check if first argument is a subcommand\n const args = options._;\n if (args.length > 0 && isCommand(args[0])) {\n runCommand(args[0], args.slice(1));\n return;\n }\n\n // define.option('-r, --range [range]', 'range type of major, minor, or patch with filters of lts, even, odd for version string expressions', 'major,even');\n // define.option('-s, --silent', 'suppress logging', false);\n options.sort = options.desc ? -1 : 1;\n\n if (args.length === 0) {\n console.log(`Missing version expression. Example usage: ${name} version command arg1 arg2`);\n exit(ERROR_CODE);\n return;\n }\n if (args.length === 1) {\n console.log(`Missing command. Example usage: ${name} version command arg1 arg2`);\n exit(ERROR_CODE);\n return;\n }\n\n options.stdio = 'inherit'; // pass through stdio\n run(args[0], args[1], args.slice(2), options as unknown as UseOptions, (err: UseError, results: UseResult[]): undefined => {\n if (err && !err.results) {\n console.log(err.message);\n exit(ERROR_CODE);\n return;\n }\n if (err) results = err.results;\n const errors = results.filter((result) => !!result.error);\n\n if (!options.silent) {\n if (!createSession) {\n console.log('\\n======================');\n results.forEach((res) => {\n console.log(`${res.error ? figures.cross : figures.tick} ${res.version}${res.error ? ` Error: ${res.error.message}` : ''}`);\n });\n console.log('\\n----------------------');\n console.log(`${name} ${formatArguments(args).join(' ')}`);\n console.log(`${figures.tick} ${results.length - errors.length} succeeded`);\n if (errors.length) console.log(`${figures.cross} ${errors.length} failed`);\n }\n }\n exit(err || errors.length ? ERROR_CODE : 0);\n });\n};\n"],"names":["exit","fs","getopts","path","createSession","figures","formatArguments","url","isCommand","runCommand","run","__dirname","dirname","__filename","fileURLToPath","ERROR_CODE","getVersion","packagePath","join","packageJson","JSON","parse","readFileSync","version","printHelp","name","console","log","argv","options","alias","range","desc","expanded","streaming","silent","help","default","interactive","boolean","stopEarly","args","_","length","slice","sort","stdio","err","results","message","errors","filter","result","error","forEach","res","cross","tick"],"mappings":"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"}
|
|
@@ -23,8 +23,8 @@ import { storagePath } from '../constants.js';
|
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
var version = args[0].trim();
|
|
26
|
-
// Validate version format (basic check)
|
|
27
|
-
if (!version || version.
|
|
26
|
+
// Validate version format (basic check, indexOf for Node 0.8+ compat)
|
|
27
|
+
if (!version || version.indexOf('-') === 0) {
|
|
28
28
|
console.log('Usage: nvu default <version>');
|
|
29
29
|
console.log('Example: nvu default 20');
|
|
30
30
|
exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/default.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { mkdirpSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu default [version]\n *\n * Set or display the global default Node version.\n * This is used when no .nvmrc or .nvurc is found in the project.\n */\nexport default function defaultCmd(args: string[]): void {\n var defaultFilePath = path.join(storagePath, 'default');\n\n // If no version provided, display current default\n if (args.length === 0) {\n if (fs.existsSync(defaultFilePath)) {\n var currentVersion = fs.readFileSync(defaultFilePath, 'utf8').trim();\n console.log(`Current default: ${currentVersion}`);\n } else {\n console.log('No default version set.');\n console.log('Usage: nvu default <version>');\n }\n exit(0);\n return;\n }\n\n var version = args[0].trim();\n\n // Validate version format (basic check)\n if (!version || version.
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/default.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { mkdirpSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu default [version]\n *\n * Set or display the global default Node version.\n * This is used when no .nvmrc or .nvurc is found in the project.\n */\nexport default function defaultCmd(args: string[]): void {\n var defaultFilePath = path.join(storagePath, 'default');\n\n // If no version provided, display current default\n if (args.length === 0) {\n if (fs.existsSync(defaultFilePath)) {\n var currentVersion = fs.readFileSync(defaultFilePath, 'utf8').trim();\n console.log(`Current default: ${currentVersion}`);\n } else {\n console.log('No default version set.');\n console.log('Usage: nvu default <version>');\n }\n exit(0);\n return;\n }\n\n var version = args[0].trim();\n\n // Validate version format (basic check, indexOf for Node 0.8+ compat)\n if (!version || version.indexOf('-') === 0) {\n console.log('Usage: nvu default <version>');\n console.log('Example: nvu default 20');\n exit(1);\n return;\n }\n\n // Ensure storage directory exists\n if (!fs.existsSync(storagePath)) {\n mkdirpSync(storagePath);\n }\n\n // Write the default version\n fs.writeFileSync(defaultFilePath, `${version}\\n`, 'utf8');\n console.log(`Default Node version set to: ${version}`);\n exit(0);\n}\n"],"names":["exit","fs","path","mkdirpSync","storagePath","defaultCmd","args","defaultFilePath","join","length","existsSync","currentVersion","readFileSync","trim","console","log","version","indexOf","writeFileSync"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,WAAW,QAAQ,kBAAkB;AAE9C;;;;;CAKC,GACD,eAAe,SAASC,WAAWC,IAAc;IAC/C,IAAIC,kBAAkBL,KAAKM,IAAI,CAACJ,aAAa;IAE7C,kDAAkD;IAClD,IAAIE,KAAKG,MAAM,KAAK,GAAG;QACrB,IAAIR,GAAGS,UAAU,CAACH,kBAAkB;YAClC,IAAII,iBAAiBV,GAAGW,YAAY,CAACL,iBAAiB,QAAQM,IAAI;YAClEC,QAAQC,GAAG,CAAC,CAAC,iBAAiB,EAAEJ,gBAAgB;QAClD,OAAO;YACLG,QAAQC,GAAG,CAAC;YACZD,QAAQC,GAAG,CAAC;QACd;QACAf,KAAK;QACL;IACF;IAEA,IAAIgB,UAAUV,IAAI,CAAC,EAAE,CAACO,IAAI;IAE1B,sEAAsE;IACtE,IAAI,CAACG,WAAWA,QAAQC,OAAO,CAAC,SAAS,GAAG;QAC1CH,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZf,KAAK;QACL;IACF;IAEA,kCAAkC;IAClC,IAAI,CAACC,GAAGS,UAAU,CAACN,cAAc;QAC/BD,WAAWC;IACb;IAEA,4BAA4B;IAC5BH,GAAGiB,aAAa,CAACX,iBAAiB,GAAGS,QAAQ,EAAE,CAAC,EAAE;IAClDF,QAAQC,GAAG,CAAC,CAAC,6BAA6B,EAAEC,SAAS;IACrDhB,KAAK;AACP"}
|
|
@@ -16,8 +16,8 @@ import loadNodeVersionInstall from '../lib/loadNodeVersionInstall.js';
|
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
const version = args[0].trim();
|
|
19
|
-
// Validate version format (basic check)
|
|
20
|
-
if (!version || version.
|
|
19
|
+
// Validate version format (basic check, indexOf for Node 0.8+ compat)
|
|
20
|
+
if (!version || version.indexOf('-') === 0) {
|
|
21
21
|
console.log('Usage: nvu install <version>');
|
|
22
22
|
exit(1);
|
|
23
23
|
return;
|
|
@@ -31,7 +31,7 @@ import loadNodeVersionInstall from '../lib/loadNodeVersionInstall.js';
|
|
|
31
31
|
exit(1);
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
const versionsPath = path.join(storagePath, '
|
|
34
|
+
const versionsPath = path.join(storagePath, 'installed');
|
|
35
35
|
nodeVersionInstall(version, {
|
|
36
36
|
installPath: versionsPath
|
|
37
37
|
}, (installErr, results)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/install.ts"],"sourcesContent":["import exit from 'exit';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\nimport loadNodeVersionInstall from '../lib/loadNodeVersionInstall.ts';\n\n/**\n * nvu install <version>\n *\n * Download and install a specific Node version.\n */\nexport default function installCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu install <version>');\n console.log('Example: nvu install 20');\n console.log(' nvu install 20.10.0');\n console.log(' nvu install lts');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n\n // Validate version format (basic check)\n if (!version || version.
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/install.ts"],"sourcesContent":["import exit from 'exit';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\nimport loadNodeVersionInstall from '../lib/loadNodeVersionInstall.ts';\n\n/**\n * nvu install <version>\n *\n * Download and install a specific Node version.\n */\nexport default function installCmd(args: string[]): void {\n if (args.length === 0) {\n console.log('Usage: nvu install <version>');\n console.log('Example: nvu install 20');\n console.log(' nvu install 20.10.0');\n console.log(' nvu install lts');\n exit(1);\n return;\n }\n\n const version = args[0].trim();\n\n // Validate version format (basic check, indexOf for Node 0.8+ compat)\n if (!version || version.indexOf('-') === 0) {\n console.log('Usage: nvu install <version>');\n exit(1);\n return;\n }\n\n console.log(`Installing Node ${version}...`);\n\n // Load node-version-install dynamically\n loadNodeVersionInstall((err, nodeVersionInstall) => {\n if (err || !nodeVersionInstall) {\n console.error('Failed to load node-version-install:', err?.message || 'Module not available');\n console.error('Make sure node-version-install is installed: npm install node-version-install');\n exit(1);\n return;\n }\n\n const versionsPath = path.join(storagePath, 'installed');\n\n nodeVersionInstall(\n version,\n {\n installPath: versionsPath,\n },\n (installErr?: Error, results?: { version: string; installPath: string }[]) => {\n if (installErr) {\n console.error(`Failed to install Node ${version}:`, installErr.message);\n exit(1);\n return;\n }\n\n if (results && results.length > 0) {\n const result = results[0];\n console.log(`Successfully installed Node ${result.version}`);\n console.log(`Location: ${result.installPath}`);\n } else {\n console.log(`Node ${version} installed successfully.`);\n }\n exit(0);\n }\n );\n });\n}\n"],"names":["exit","path","storagePath","loadNodeVersionInstall","installCmd","args","length","console","log","version","trim","indexOf","err","nodeVersionInstall","error","message","versionsPath","join","installPath","installErr","results","result"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,UAAU,OAAO;AACxB,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,OAAOC,4BAA4B,mCAAmC;AAEtE;;;;CAIC,GACD,eAAe,SAASC,WAAWC,IAAc;IAC/C,IAAIA,KAAKC,MAAM,KAAK,GAAG;QACrBC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZR,KAAK;QACL;IACF;IAEA,MAAMS,UAAUJ,IAAI,CAAC,EAAE,CAACK,IAAI;IAE5B,sEAAsE;IACtE,IAAI,CAACD,WAAWA,QAAQE,OAAO,CAAC,SAAS,GAAG;QAC1CJ,QAAQC,GAAG,CAAC;QACZR,KAAK;QACL;IACF;IAEAO,QAAQC,GAAG,CAAC,CAAC,gBAAgB,EAAEC,QAAQ,GAAG,CAAC;IAE3C,wCAAwC;IACxCN,uBAAuB,CAACS,KAAKC;QAC3B,IAAID,OAAO,CAACC,oBAAoB;YAC9BN,QAAQO,KAAK,CAAC,wCAAwCF,CAAAA,gBAAAA,0BAAAA,IAAKG,OAAO,KAAI;YACtER,QAAQO,KAAK,CAAC;YACdd,KAAK;YACL;QACF;QAEA,MAAMgB,eAAef,KAAKgB,IAAI,CAACf,aAAa;QAE5CW,mBACEJ,SACA;YACES,aAAaF;QACf,GACA,CAACG,YAAoBC;YACnB,IAAID,YAAY;gBACdZ,QAAQO,KAAK,CAAC,CAAC,uBAAuB,EAAEL,QAAQ,CAAC,CAAC,EAAEU,WAAWJ,OAAO;gBACtEf,KAAK;gBACL;YACF;YAEA,IAAIoB,WAAWA,QAAQd,MAAM,GAAG,GAAG;gBACjC,MAAMe,SAASD,OAAO,CAAC,EAAE;gBACzBb,QAAQC,GAAG,CAAC,CAAC,4BAA4B,EAAEa,OAAOZ,OAAO,EAAE;gBAC3DF,QAAQC,GAAG,CAAC,CAAC,UAAU,EAAEa,OAAOH,WAAW,EAAE;YAC/C,OAAO;gBACLX,QAAQC,GAAG,CAAC,CAAC,KAAK,EAAEC,QAAQ,wBAAwB,CAAC;YACvD;YACAT,KAAK;QACP;IAEJ;AACF"}
|
|
@@ -8,7 +8,7 @@ import { storagePath } from '../constants.js';
|
|
|
8
8
|
*
|
|
9
9
|
* List all installed Node versions.
|
|
10
10
|
*/ export default function listCmd(_args) {
|
|
11
|
-
var versionsPath = path.join(storagePath, '
|
|
11
|
+
var versionsPath = path.join(storagePath, 'installed');
|
|
12
12
|
// Check if versions directory exists
|
|
13
13
|
if (!fs.existsSync(versionsPath)) {
|
|
14
14
|
console.log('No Node versions installed.');
|
|
@@ -43,7 +43,8 @@ import { storagePath } from '../constants.js';
|
|
|
43
43
|
return 0;
|
|
44
44
|
});
|
|
45
45
|
console.log('Installed Node versions:');
|
|
46
|
-
for
|
|
46
|
+
for(let i = 0; i < versions.length; i++){
|
|
47
|
+
const version = versions[i];
|
|
47
48
|
const isDefault = version === defaultVersion || `v${version}` === defaultVersion || version === `v${defaultVersion}`;
|
|
48
49
|
const marker = isDefault ? ' (default)' : '';
|
|
49
50
|
console.log(` ${version}${marker}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/list.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { readdirWithTypes } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu list\n *\n * List all installed Node versions.\n */\nexport default function listCmd(_args: string[]): void {\n var versionsPath = path.join(storagePath, '
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/list.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { readdirWithTypes } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu list\n *\n * List all installed Node versions.\n */\nexport default function listCmd(_args: string[]): void {\n var versionsPath = path.join(storagePath, 'installed');\n\n // Check if versions directory exists\n if (!fs.existsSync(versionsPath)) {\n console.log('No Node versions installed.');\n console.log('Install a version: nvu install <version>');\n exit(0);\n return;\n }\n\n // Read all directories in versions folder\n var entries = readdirWithTypes(versionsPath);\n var versions = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);\n\n if (versions.length === 0) {\n console.log('No Node versions installed.');\n console.log('Install a version: nvu install <version>');\n exit(0);\n return;\n }\n\n // Get the current default\n const defaultFilePath = path.join(storagePath, 'default');\n let defaultVersion = '';\n if (fs.existsSync(defaultFilePath)) {\n defaultVersion = fs.readFileSync(defaultFilePath, 'utf8').trim();\n }\n\n // Sort versions (simple string sort, could be improved with semver)\n versions.sort((a, b) => {\n const aParts = a.split('.').map((n) => parseInt(n, 10) || 0);\n const bParts = b.split('.').map((n) => parseInt(n, 10) || 0);\n for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {\n const aVal = aParts[i] || 0;\n const bVal = bParts[i] || 0;\n if (aVal !== bVal) return bVal - aVal; // Descending order\n }\n return 0;\n });\n\n console.log('Installed Node versions:');\n for (let i = 0; i < versions.length; i++) {\n const version = versions[i];\n const isDefault = version === defaultVersion || `v${version}` === defaultVersion || version === `v${defaultVersion}`;\n const marker = isDefault ? ' (default)' : '';\n console.log(` ${version}${marker}`);\n }\n exit(0);\n}\n"],"names":["exit","fs","path","readdirWithTypes","storagePath","listCmd","_args","versionsPath","join","existsSync","console","log","entries","versions","filter","entry","isDirectory","map","name","length","defaultFilePath","defaultVersion","readFileSync","trim","sort","a","b","aParts","split","n","parseInt","bParts","i","Math","max","aVal","bVal","version","isDefault","marker"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,SAASC,gBAAgB,QAAQ,eAAe;AAChD,SAASC,WAAW,QAAQ,kBAAkB;AAE9C;;;;CAIC,GACD,eAAe,SAASC,QAAQC,KAAe;IAC7C,IAAIC,eAAeL,KAAKM,IAAI,CAACJ,aAAa;IAE1C,qCAAqC;IACrC,IAAI,CAACH,GAAGQ,UAAU,CAACF,eAAe;QAChCG,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,0CAA0C;IAC1C,IAAIY,UAAUT,iBAAiBI;IAC/B,IAAIM,WAAWD,QAAQE,MAAM,CAAC,CAACC,QAAUA,MAAMC,WAAW,IAAIC,GAAG,CAAC,CAACF,QAAUA,MAAMG,IAAI;IAEvF,IAAIL,SAASM,MAAM,KAAK,GAAG;QACzBT,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZX,KAAK;QACL;IACF;IAEA,0BAA0B;IAC1B,MAAMoB,kBAAkBlB,KAAKM,IAAI,CAACJ,aAAa;IAC/C,IAAIiB,iBAAiB;IACrB,IAAIpB,GAAGQ,UAAU,CAACW,kBAAkB;QAClCC,iBAAiBpB,GAAGqB,YAAY,CAACF,iBAAiB,QAAQG,IAAI;IAChE;IAEA,oEAAoE;IACpEV,SAASW,IAAI,CAAC,CAACC,GAAGC;QAChB,MAAMC,SAASF,EAAEG,KAAK,CAAC,KAAKX,GAAG,CAAC,CAACY,IAAMC,SAASD,GAAG,OAAO;QAC1D,MAAME,SAASL,EAAEE,KAAK,CAAC,KAAKX,GAAG,CAAC,CAACY,IAAMC,SAASD,GAAG,OAAO;QAC1D,IAAK,IAAIG,IAAI,GAAGA,IAAIC,KAAKC,GAAG,CAACP,OAAOR,MAAM,EAAEY,OAAOZ,MAAM,GAAGa,IAAK;YAC/D,MAAMG,OAAOR,MAAM,CAACK,EAAE,IAAI;YAC1B,MAAMI,OAAOL,MAAM,CAACC,EAAE,IAAI;YAC1B,IAAIG,SAASC,MAAM,OAAOA,OAAOD,MAAM,mBAAmB;QAC5D;QACA,OAAO;IACT;IAEAzB,QAAQC,GAAG,CAAC;IACZ,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"}
|
|
@@ -8,8 +8,8 @@ import path from 'path';
|
|
|
8
8
|
* This pins the Node version for the current project.
|
|
9
9
|
*/ export default function localCmd(args) {
|
|
10
10
|
const cwd = process.cwd();
|
|
11
|
-
// Check for --nvurc flag
|
|
12
|
-
const useNvurc = args.
|
|
11
|
+
// Check for --nvurc flag (indexOf for Node 0.8+ compat)
|
|
12
|
+
const useNvurc = args.indexOf('--nvurc') !== -1;
|
|
13
13
|
const filteredArgs = args.filter((arg)=>arg !== '--nvurc');
|
|
14
14
|
const fileName = useNvurc ? '.nvurc' : '.nvmrc';
|
|
15
15
|
const filePath = path.join(cwd, fileName);
|
|
@@ -37,8 +37,8 @@ import path from 'path';
|
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
39
|
const version = filteredArgs[0].trim();
|
|
40
|
-
// Validate version format (basic check)
|
|
41
|
-
if (!version || version.
|
|
40
|
+
// Validate version format (basic check, indexOf for Node 0.8+ compat)
|
|
41
|
+
if (!version || version.indexOf('-') === 0) {
|
|
42
42
|
console.log('Usage: nvu local <version>');
|
|
43
43
|
console.log('Example: nvu local 20');
|
|
44
44
|
exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/local.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\n\n/**\n * nvu local [version] [--nvurc]\n *\n * Write .nvmrc (or .nvurc) to the current directory.\n * This pins the Node version for the current project.\n */\nexport default function localCmd(args: string[]): void {\n const cwd = process.cwd();\n\n // Check for --nvurc flag\n const useNvurc = args.
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/local.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\n\n/**\n * nvu local [version] [--nvurc]\n *\n * Write .nvmrc (or .nvurc) to the current directory.\n * This pins the Node version for the current project.\n */\nexport default function localCmd(args: string[]): void {\n const cwd = process.cwd();\n\n // Check for --nvurc flag (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,OAAO;AACxB,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"}
|
|
@@ -9,7 +9,7 @@ var __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : ur
|
|
|
9
9
|
/**
|
|
10
10
|
* nvu setup
|
|
11
11
|
*
|
|
12
|
-
* Install/reinstall nvu
|
|
12
|
+
* Install/reinstall nvu binaries to ~/.nvu/bin
|
|
13
13
|
* This runs the same logic as the postinstall script.
|
|
14
14
|
*/ export default function setupCmd(_args) {
|
|
15
15
|
var binDir = path.join(storagePath, 'bin');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/setup.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport url from 'url';\nimport { mkdirpSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\nvar __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\n/**\n * nvu setup\n *\n * Install/reinstall nvu
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/setup.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport url from 'url';\nimport { mkdirpSync } from '../compat.ts';\nimport { storagePath } from '../constants.ts';\n\nvar __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\n/**\n * nvu setup\n *\n * Install/reinstall nvu binaries to ~/.nvu/bin\n * This runs the same logic as the postinstall script.\n */\nexport default function setupCmd(_args: string[]): void {\n var binDir = path.join(storagePath, 'bin');\n\n // Create directories\n if (!fs.existsSync(storagePath)) {\n mkdirpSync(storagePath);\n }\n if (!fs.existsSync(binDir)) {\n mkdirpSync(binDir);\n }\n\n // Find the postinstall script relative to this module\n var postinstallPath = path.join(__dirname, '..', '..', '..', 'scripts', 'postinstall.cjs');\n\n if (fs.existsSync(postinstallPath)) {\n // Run the postinstall script\n try {\n execSync(`node \"${postinstallPath}\"`, { stdio: 'inherit' });\n } catch (_err) {\n // postinstall handles its own errors gracefully\n }\n } else {\n console.log('Setup script not found.');\n console.log('Try reinstalling: npm install -g node-version-use');\n exit(1);\n }\n}\n"],"names":["execSync","exit","fs","path","url","mkdirpSync","storagePath","__dirname","dirname","__filename","fileURLToPath","setupCmd","_args","binDir","join","existsSync","postinstallPath","stdio","_err","console","log"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAgB;AACzC,OAAOC,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,OAAOC,UAAU,OAAO;AACxB,OAAOC,SAAS,MAAM;AACtB,SAASC,UAAU,QAAQ,eAAe;AAC1C,SAASC,WAAW,QAAQ,kBAAkB;AAE9C,IAAIC,YAAYJ,KAAKK,OAAO,CAAC,OAAOC,eAAe,cAAcA,aAAaL,IAAIM,aAAa,CAAC,YAAYN,GAAG;AAE/G;;;;;CAKC,GACD,eAAe,SAASO,SAASC,KAAe;IAC9C,IAAIC,SAASV,KAAKW,IAAI,CAACR,aAAa;IAEpC,qBAAqB;IACrB,IAAI,CAACJ,GAAGa,UAAU,CAACT,cAAc;QAC/BD,WAAWC;IACb;IACA,IAAI,CAACJ,GAAGa,UAAU,CAACF,SAAS;QAC1BR,WAAWQ;IACb;IAEA,sDAAsD;IACtD,IAAIG,kBAAkBb,KAAKW,IAAI,CAACP,WAAW,MAAM,MAAM,MAAM,WAAW;IAExE,IAAIL,GAAGa,UAAU,CAACC,kBAAkB;QAClC,6BAA6B;QAC7B,IAAI;YACFhB,SAAS,CAAC,MAAM,EAAEgB,gBAAgB,CAAC,CAAC,EAAE;gBAAEC,OAAO;YAAU;QAC3D,EAAE,OAAOC,MAAM;QACb,gDAAgD;QAClD;IACF,OAAO;QACLC,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;QACZnB,KAAK;IACP;AACF"}
|
|
@@ -1,33 +1,36 @@
|
|
|
1
1
|
import exit from 'exit';
|
|
2
2
|
import fs from 'fs';
|
|
3
|
+
import { rmSync } from 'fs-remove-compat';
|
|
3
4
|
import path from 'path';
|
|
4
5
|
import { storagePath } from '../constants.js';
|
|
5
6
|
/**
|
|
6
7
|
* nvu teardown
|
|
7
8
|
*
|
|
8
|
-
* Remove nvu
|
|
9
|
+
* Remove nvu binaries from ~/.nvu/bin
|
|
9
10
|
*/ export default function teardownCmd(_args) {
|
|
10
11
|
const binDir = path.join(storagePath, 'bin');
|
|
11
|
-
const
|
|
12
|
+
const binaries = [
|
|
12
13
|
'node',
|
|
13
14
|
'npm',
|
|
14
15
|
'npx'
|
|
15
16
|
];
|
|
16
17
|
const ext = process.platform === 'win32' ? '.exe' : '';
|
|
17
18
|
let removed = 0;
|
|
18
|
-
for
|
|
19
|
-
const
|
|
20
|
-
if (fs.existsSync(
|
|
21
|
-
|
|
19
|
+
for(let i = 0; i < binaries.length; i++){
|
|
20
|
+
const binaryPath = path.join(binDir, binaries[i] + ext);
|
|
21
|
+
if (fs.existsSync(binaryPath)) {
|
|
22
|
+
rmSync(binaryPath, {
|
|
23
|
+
force: true
|
|
24
|
+
});
|
|
22
25
|
removed++;
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
if (removed > 0) {
|
|
26
|
-
console.log(`Removed ${removed}
|
|
29
|
+
console.log(`Removed ${removed} binary(s) from ${binDir}`);
|
|
27
30
|
console.log('');
|
|
28
31
|
console.log('You may also want to remove ~/.nvu/bin from your PATH.');
|
|
29
32
|
} else {
|
|
30
|
-
console.log('No
|
|
33
|
+
console.log('No binaries found to remove.');
|
|
31
34
|
}
|
|
32
35
|
exit(0);
|
|
33
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/teardown.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu teardown\n *\n * Remove nvu
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node-version/node-version-use/src/commands/teardown.ts"],"sourcesContent":["import exit from 'exit';\nimport fs from 'fs';\nimport { rmSync } from 'fs-remove-compat';\nimport path from 'path';\nimport { storagePath } from '../constants.ts';\n\n/**\n * nvu teardown\n *\n * Remove nvu binaries from ~/.nvu/bin\n */\nexport default function teardownCmd(_args: string[]): void {\n const binDir = path.join(storagePath, 'bin');\n\n const binaries = ['node', 'npm', 'npx'];\n const ext = process.platform === 'win32' ? '.exe' : '';\n\n let removed = 0;\n for (let i = 0; i < binaries.length; i++) {\n const binaryPath = path.join(binDir, binaries[i] + ext);\n if (fs.existsSync(binaryPath)) {\n rmSync(binaryPath, { force: true });\n removed++;\n }\n }\n\n if (removed > 0) {\n console.log(`Removed ${removed} binary(s) from ${binDir}`);\n console.log('');\n console.log('You may also want to remove ~/.nvu/bin from your PATH.');\n } else {\n console.log('No binaries found to remove.');\n }\n\n exit(0);\n}\n"],"names":["exit","fs","rmSync","path","storagePath","teardownCmd","_args","binDir","join","binaries","ext","process","platform","removed","i","length","binaryPath","existsSync","force","console","log"],"mappings":"AAAA,OAAOA,UAAU,OAAO;AACxB,OAAOC,QAAQ,KAAK;AACpB,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,UAAU,OAAO;AACxB,SAASC,WAAW,QAAQ,kBAAkB;AAE9C;;;;CAIC,GACD,eAAe,SAASC,YAAYC,KAAe;IACjD,MAAMC,SAASJ,KAAKK,IAAI,CAACJ,aAAa;IAEtC,MAAMK,WAAW;QAAC;QAAQ;QAAO;KAAM;IACvC,MAAMC,MAAMC,QAAQC,QAAQ,KAAK,UAAU,SAAS;IAEpD,IAAIC,UAAU;IACd,IAAK,IAAIC,IAAI,GAAGA,IAAIL,SAASM,MAAM,EAAED,IAAK;QACxC,MAAME,aAAab,KAAKK,IAAI,CAACD,QAAQE,QAAQ,CAACK,EAAE,GAAGJ;QACnD,IAAIT,GAAGgB,UAAU,CAACD,aAAa;YAC7Bd,OAAOc,YAAY;gBAAEE,OAAO;YAAK;YACjCL;QACF;IACF;IAEA,IAAIA,UAAU,GAAG;QACfM,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEP,QAAQ,gBAAgB,EAAEN,QAAQ;QACzDY,QAAQC,GAAG,CAAC;QACZD,QAAQC,GAAG,CAAC;IACd,OAAO;QACLD,QAAQC,GAAG,CAAC;IACd;IAEApB,KAAK;AACP"}
|
|
@@ -16,7 +16,7 @@ import { storagePath } from '../constants.js';
|
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
var version = args[0].trim();
|
|
19
|
-
var versionsPath = path.join(storagePath, '
|
|
19
|
+
var versionsPath = path.join(storagePath, 'installed');
|
|
20
20
|
// Find all matching installed versions
|
|
21
21
|
var matches = findInstalledVersions(versionsPath, version);
|
|
22
22
|
if (matches.length === 0) {
|