aboutsummaryrefslogtreecommitdiff
path: root/deps/node/deps/npm/node_modules/libnpmconfig/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/npm/node_modules/libnpmconfig/index.js')
-rw-r--r--deps/node/deps/npm/node_modules/libnpmconfig/index.js107
1 files changed, 107 insertions, 0 deletions
diff --git a/deps/node/deps/npm/node_modules/libnpmconfig/index.js b/deps/node/deps/npm/node_modules/libnpmconfig/index.js
new file mode 100644
index 00000000..5501e26b
--- /dev/null
+++ b/deps/node/deps/npm/node_modules/libnpmconfig/index.js
@@ -0,0 +1,107 @@
+'use strict'
+
+const fs = require('fs')
+const figgyPudding = require('figgy-pudding')
+const findUp = require('find-up')
+const ini = require('ini')
+const os = require('os')
+const path = require('path')
+
+const NpmConfig = figgyPudding({}, {
+ // Open up the pudding object.
+ other () { return true }
+})
+
+const ConfigOpts = figgyPudding({
+ cache: { default: path.join(os.homedir(), '.npm') },
+ configNames: { default: ['npmrc', '.npmrc'] },
+ envPrefix: { default: /^npm_config_/i },
+ cwd: { default: () => process.cwd() },
+ globalconfig: {
+ default: () => path.join(getGlobalPrefix(), 'etc', 'npmrc')
+ },
+ userconfig: { default: path.join(os.homedir(), '.npmrc') }
+})
+
+module.exports.read = getNpmConfig
+function getNpmConfig (_opts, _builtin) {
+ const builtin = ConfigOpts(_builtin)
+ const env = {}
+ for (let key of Object.keys(process.env)) {
+ if (!key.match(builtin.envPrefix)) continue
+ const newKey = key.toLowerCase()
+ .replace(builtin.envPrefix, '')
+ .replace(/(?!^)_/g, '-')
+ env[newKey] = process.env[key]
+ }
+ const cli = NpmConfig(_opts)
+ const userConfPath = (
+ builtin.userconfig ||
+ cli.userconfig ||
+ env.userconfig
+ )
+ const user = userConfPath && maybeReadIni(userConfPath)
+ const globalConfPath = (
+ builtin.globalconfig ||
+ cli.globalconfig ||
+ env.globalconfig
+ )
+ const global = globalConfPath && maybeReadIni(globalConfPath)
+ const projConfPath = findUp.sync(builtin.configNames, { cwd: builtin.cwd })
+ let proj = {}
+ if (projConfPath && projConfPath !== userConfPath) {
+ proj = maybeReadIni(projConfPath)
+ }
+ const newOpts = NpmConfig(builtin, global, user, proj, env, cli)
+ if (newOpts.cache) {
+ return newOpts.concat({
+ cache: path.resolve(
+ (
+ (cli.cache || env.cache)
+ ? builtin.cwd
+ : proj.cache
+ ? path.dirname(projConfPath)
+ : user.cache
+ ? path.dirname(userConfPath)
+ : global.cache
+ ? path.dirname(globalConfPath)
+ : path.dirname(userConfPath)
+ ),
+ newOpts.cache
+ )
+ })
+ } else {
+ return newOpts
+ }
+}
+
+function maybeReadIni (f) {
+ let txt
+ try {
+ txt = fs.readFileSync(f, 'utf8')
+ } catch (err) {
+ if (err.code === 'ENOENT') {
+ return ''
+ } else {
+ throw err
+ }
+ }
+ return ini.parse(txt)
+}
+
+function getGlobalPrefix () {
+ if (process.env.PREFIX) {
+ return process.env.PREFIX
+ } else if (process.platform === 'win32') {
+ // c:\node\node.exe --> prefix=c:\node\
+ return path.dirname(process.execPath)
+ } else {
+ // /usr/local/bin/node --> prefix=/usr/local
+ let pref = path.dirname(path.dirname(process.execPath))
+ // destdir only is respected on Unix
+ if (process.env.DESTDIR) {
+ pref = path.join(process.env.DESTDIR, pref)
+ }
+ return pref
+ }
+}