node-version-use
Version:
Cross-platform solution for using multiple versions of node. Useful for compatibility testing
150 lines • 6.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "default", {
enumerable: true,
get: function() {
return _default;
}
});
var _exitcompat = /*#__PURE__*/ _interop_require_default(require("exit-compat"));
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
var _getoptscompat = /*#__PURE__*/ _interop_require_default(require("getopts-compat"));
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
var _spawnterm = require("spawn-term");
var _url = /*#__PURE__*/ _interop_require_default(require("url"));
var _indexts = require("./commands/index.js");
var _indexts1 = /*#__PURE__*/ _interop_require_default(require("./index.js"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
var __dirname = _path.default.dirname(typeof __filename !== 'undefined' ? __filename : _url.default.fileURLToPath(require("url").pathToFileURL(__filename).toString()));
var ERROR_CODE = 13;
function getVersion() {
var packagePath = _path.default.join(__dirname, '..', '..', 'package.json');
var packageJson = JSON.parse(_fs.default.readFileSync(packagePath, 'utf8'));
return packageJson.version;
}
function printHelp(name) {
var version = getVersion();
console.log("".concat(name, " v").concat(version));
console.log('');
console.log("Usage: ".concat(name, " [options] <version> <command> [args...]"));
console.log(" ".concat(name, " <subcommand> [args...]"));
console.log('');
console.log('Run commands with specific Node.js versions');
console.log('');
console.log('Subcommands:');
console.log(' default [version] Set or display the global default Node version');
console.log(' local [version] Set or display the local Node version (.nvmrc)');
console.log(' install <version> Download and install a Node version');
console.log(' uninstall <version> Remove an installed Node version');
console.log(' list List installed Node versions');
console.log(' which Show which Node version would be used');
console.log(' setup Install/reinstall binaries to ~/.nvu/bin');
console.log(' teardown Remove binaries from ~/.nvu/bin');
console.log('');
console.log('Options:');
console.log(' -v, --version Print version number');
console.log(' -h, --help Print this help message');
console.log(' -r, --range Range type (major, minor, patch) with filters (lts, even, odd)');
console.log(' Default: major,even');
console.log(' -d, --desc Sort versions in descending order');
console.log(' -e, --expanded Use expanded version format');
console.log(' -s, --streaming Enable streaming output');
console.log(' --silent Suppress logging');
console.log('');
console.log('Examples:');
console.log(" ".concat(name, " 22 node --version Run with Node 22"));
console.log(" ".concat(name, " 22,20,18 npm test Run with multiple versions"));
console.log(" ".concat(name, " engines node --version Use version from package.json"));
console.log(" ".concat(name, " default 20 Set global default to Node 20"));
console.log(" ".concat(name, " local 18 Create .nvmrc with Node 18"));
}
var _default = function(argv, name) {
var options = (0, _getoptscompat.default)(argv, {
alias: {
range: 'r',
desc: 'd',
expanded: 'e',
streaming: 's',
silent: 'si',
version: 'v',
help: 'h'
},
default: {
range: 'major,even',
interactive: true
},
boolean: [
'silent',
'desc',
'expanded',
'streaming',
'interactive',
'version',
'help'
],
stopEarly: true
});
if (options.version) {
console.log(getVersion());
(0, _exitcompat.default)(0);
return;
}
if (options.help) {
printHelp(name);
(0, _exitcompat.default)(0);
return;
}
// Check if first argument is a subcommand
var args = options._;
if (args.length > 0 && (0, _indexts.isCommand)(args[0])) {
(0, _indexts.runCommand)(args[0], args.slice(1));
return;
}
// define.option('-r, --range [range]', 'range type of major, minor, or patch with filters of lts, even, odd for version string expressions', 'major,even');
// define.option('-s, --silent', 'suppress logging', false);
options.sort = options.desc ? -1 : 1;
if (args.length === 0) {
console.log("Missing version expression. Example usage: ".concat(name, " version command arg1 arg2"));
(0, _exitcompat.default)(ERROR_CODE);
return;
}
if (args.length === 1) {
console.log("Missing command. Example usage: ".concat(name, " version command arg1 arg2"));
(0, _exitcompat.default)(ERROR_CODE);
return;
}
options.stdio = 'inherit'; // pass through stdio
(0, _indexts1.default)(args[0], args[1], args.slice(2), options, function(err, results) {
var useErr = err;
if (useErr && !useErr.results) {
console.log(useErr.message);
(0, _exitcompat.default)(ERROR_CODE);
return;
}
if (useErr) results = useErr.results;
var safeResults = results || [];
var errors = safeResults.filter(function(result) {
return !!result.error;
});
if (!options.silent) {
if (!_spawnterm.createSession) {
console.log('\n======================');
safeResults.forEach(function(res) {
console.log("".concat(res.error ? _spawnterm.figures.cross : _spawnterm.figures.tick, " ").concat(res.version).concat(res.error ? " Error: ".concat(res.error.message) : ''));
});
console.log('\n----------------------');
console.log("".concat(name, " ").concat((0, _spawnterm.formatArguments)(args).join(' ')));
console.log("".concat(_spawnterm.figures.tick, " ").concat(safeResults.length - errors.length, " succeeded"));
if (errors.length) console.log("".concat(_spawnterm.figures.cross, " ").concat(errors.length, " failed"));
}
}
(0, _exitcompat.default)(err || errors.length ? ERROR_CODE : 0);
});
};
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }