node-version-use
Version:
Cross-platform solution for using multiple versions of node. Useful for compatibility testing
96 lines • 4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: Object.getOwnPropertyDescriptor(all, name).get
});
}
_export(exports, {
get getPathWithoutNvuBin () {
return getPathWithoutNvuBin;
},
get resolveSystemBinary () {
return resolveSystemBinary;
}
});
var _envpathkey = /*#__PURE__*/ _interop_require_default(require("env-path-key"));
var _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
var _path = /*#__PURE__*/ _interop_require_default(require("path"));
var _compatts = require("../compat.js");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
var _process_env_OSTYPE;
var isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test((_process_env_OSTYPE = process.env.OSTYPE) !== null && _process_env_OSTYPE !== void 0 ? _process_env_OSTYPE : '');
var nvuBinDir = _path.default.join((0, _compatts.homedir)(), '.nvu', 'bin');
var nvuInstalledDir = _path.default.join((0, _compatts.homedir)(), '.nvu', 'installed');
var pathKey = (0, _envpathkey.default)(); // PATH or Path or similar
var pathDelimiter = _path.default.delimiter ? _path.default.delimiter : isWindows ? ';' : ':';
/**
* Check if two paths are equal (case-insensitive on Windows)
*/ function pathsEqual(a, b) {
if (isWindows) return a.toLowerCase() === b.toLowerCase();
return a === b;
}
/**
* Check if a path is within the nvu bin directory or installed versions
*/ function isInNvuDir(filePath) {
try {
var realPath = _fs.default.realpathSync(filePath);
// Check for .nvu/bin or .nvu/installed
return realPath.indexOf(_path.default.join('.nvu', 'bin')) >= 0 || realPath.indexOf(_path.default.join('.nvu', 'installed')) >= 0 || pathsEqual(_path.default.dirname(realPath), nvuBinDir) || pathsEqual(_path.default.dirname(realPath), nvuInstalledDir);
} catch (_e) {
return false;
}
}
function resolveSystemBinary(name) {
var pathEnv = process.env[pathKey] || '';
var dirs = pathEnv.split(pathDelimiter);
for(var i = 0; i < dirs.length; i++){
var dir = dirs[i];
if (!dir) continue;
// Skip ~/.nvu/bin
if (pathsEqual(dir, nvuBinDir)) continue;
// Build candidate path with appropriate extension
var candidates = isWindows ? [
_path.default.join(dir, "".concat(name, ".exe")),
_path.default.join(dir, "".concat(name, ".cmd")),
_path.default.join(dir, name)
] : [
_path.default.join(dir, name)
];
for(var j = 0; j < candidates.length; j++){
var candidate = candidates[j];
try {
var stat = _fs.default.statSync(candidate);
if (!stat.isFile()) continue;
// Make sure it's not in ~/.nvu/bin or ~/.nvu/installed/*/bin
if (isInNvuDir(candidate)) continue;
return candidate;
} catch (_e) {
// File doesn't exist, continue
}
}
}
return null;
}
function getPathWithoutNvuBin() {
var pathEnv = process.env[pathKey] || '';
var dirs = pathEnv.split(pathDelimiter);
var filtered = [];
for(var i = 0; i < dirs.length; i++){
var dir = dirs[i];
if (!dir) continue;
if (pathsEqual(dir, nvuBinDir)) continue;
if (dir.indexOf(_path.default.join('.nvu', 'bin')) >= 0) continue;
if (dir.indexOf(_path.default.join('.nvu', 'installed')) >= 0) continue;
filtered.push(dir);
}
return filtered.join(pathDelimiter);
}
/* 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; }