aboutsummaryrefslogtreecommitdiff
path: root/node_modules/global-dirs/index.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-06-04 08:51:01 +0200
committerMinteck <contact@minteck.org>2022-06-04 08:51:01 +0200
commit383285ecd5292bf9a825e05904955b937de84cc9 (patch)
tree0a53b6f02c1604b078044567c03dc1b6c944c8c2 /node_modules/global-dirs/index.js
downloadequestriadb-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.js120
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');