diff options
author | Minteck <contact@minteck.org> | 2022-06-04 08:51:01 +0200 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-06-04 08:51:01 +0200 |
commit | 383285ecd5292bf9a825e05904955b937de84cc9 (patch) | |
tree | 0a53b6f02c1604b078044567c03dc1b6c944c8c2 /node_modules/global-dirs/index.js | |
download | equestriadb-383285ecd5292bf9a825e05904955b937de84cc9.tar.gz equestriadb-383285ecd5292bf9a825e05904955b937de84cc9.tar.bz2 equestriadb-383285ecd5292bf9a825e05904955b937de84cc9.zip |
Initial commit
Diffstat (limited to 'node_modules/global-dirs/index.js')
-rw-r--r-- | node_modules/global-dirs/index.js | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/node_modules/global-dirs/index.js b/node_modules/global-dirs/index.js new file mode 100644 index 0000000..c5d2438 --- /dev/null +++ b/node_modules/global-dirs/index.js @@ -0,0 +1,120 @@ +'use strict'; +const path = require('path'); +const os = require('os'); +const fs = require('fs'); +const ini = require('ini'); + +const isWindows = process.platform === 'win32'; + +const readRc = filePath => { + try { + return ini.parse(fs.readFileSync(filePath, 'utf8')).prefix; + } catch {} +}; + +const getEnvNpmPrefix = () => { + // TODO: Remove the `.reduce` call. + // eslint-disable-next-line unicorn/no-array-reduce + return Object.keys(process.env).reduce((prefix, name) => { + return /^npm_config_prefix$/i.test(name) ? process.env[name] : prefix; + }, undefined); +}; + +const getGlobalNpmrc = () => { + if (isWindows && process.env.APPDATA) { + // Hardcoded contents of `c:\Program Files\nodejs\node_modules\npm\npmrc` + return path.join(process.env.APPDATA, '/npm/etc/npmrc'); + } + + // Homebrew special case: `$(brew --prefix)/lib/node_modules/npm/npmrc` + if (process.execPath.includes('/Cellar/node')) { + const homebrewPrefix = process.execPath.slice(0, process.execPath.indexOf('/Cellar/node')); + return path.join(homebrewPrefix, '/lib/node_modules/npm/npmrc'); + } + + if (process.execPath.endsWith('/bin/node')) { + const installDir = path.dirname(path.dirname(process.execPath)); + return path.join(installDir, '/etc/npmrc'); + } +}; + +const getDefaultNpmPrefix = () => { + if (isWindows) { + // `c:\node\node.exe` → `prefix=c:\node\` + return path.dirname(process.execPath); + } + + // `/usr/local/bin/node` → `prefix=/usr/local` + return path.dirname(path.dirname(process.execPath)); +}; + +const getNpmPrefix = () => { + const envPrefix = getEnvNpmPrefix(); + if (envPrefix) { + return envPrefix; + } + + const homePrefix = readRc(path.join(os.homedir(), '.npmrc')); + if (homePrefix) { + return homePrefix; + } + + if (process.env.PREFIX) { + return process.env.PREFIX; + } + + const globalPrefix = readRc(getGlobalNpmrc()); + if (globalPrefix) { + return globalPrefix; + } + + return getDefaultNpmPrefix(); +}; + +const npmPrefix = path.resolve(getNpmPrefix()); + +const getYarnWindowsDirectory = () => { + if (isWindows && process.env.LOCALAPPDATA) { + const dir = path.join(process.env.LOCALAPPDATA, 'Yarn'); + if (fs.existsSync(dir)) { + return dir; + } + } + + return false; +}; + +const getYarnPrefix = () => { + if (process.env.PREFIX) { + return process.env.PREFIX; + } + + const windowsPrefix = getYarnWindowsDirectory(); + if (windowsPrefix) { + return windowsPrefix; + } + + const configPrefix = path.join(os.homedir(), '.config/yarn'); + if (fs.existsSync(configPrefix)) { + return configPrefix; + } + + const homePrefix = path.join(os.homedir(), '.yarn-config'); + if (fs.existsSync(homePrefix)) { + return homePrefix; + } + + // Yarn supports the npm conventions but the inverse is not true + return npmPrefix; +}; + +exports.npm = {}; +exports.npm.prefix = npmPrefix; +exports.npm.packages = path.join(npmPrefix, isWindows ? 'node_modules' : 'lib/node_modules'); +exports.npm.binaries = isWindows ? npmPrefix : path.join(npmPrefix, 'bin'); + +const yarnPrefix = path.resolve(getYarnPrefix()); +exports.yarn = {}; +exports.yarn.prefix = yarnPrefix; +exports.yarn.packages = path.join(yarnPrefix, getYarnWindowsDirectory() ? 'Data/global/node_modules' : 'global/node_modules'); +exports.yarn.binaries = path.join(exports.yarn.packages, '.bin'); |