UNPKG

node-version-use

Version:

Cross-platform solution for using multiple versions of node. Useful for compatibility testing

96 lines 4 kB
"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; }