summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/libcipm/lib/config
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/libcipm/lib/config')
-rw-r--r--deps/npm/node_modules/libcipm/lib/config/lifecycle-opts.js29
-rw-r--r--deps/npm/node_modules/libcipm/lib/config/npm-config.js72
-rw-r--r--deps/npm/node_modules/libcipm/lib/config/pacote-opts.js135
3 files changed, 236 insertions, 0 deletions
diff --git a/deps/npm/node_modules/libcipm/lib/config/lifecycle-opts.js b/deps/npm/node_modules/libcipm/lib/config/lifecycle-opts.js
new file mode 100644
index 0000000000..7d57459779
--- /dev/null
+++ b/deps/npm/node_modules/libcipm/lib/config/lifecycle-opts.js
@@ -0,0 +1,29 @@
+'use strict'
+
+const log = require('npmlog')
+
+module.exports = lifecycleOpts
+function lifecycleOpts (opts) {
+ const objConfig = {}
+ for (const key of opts.keys()) {
+ const val = opts.get(key)
+ if (val != null) {
+ objConfig[key] = val
+ }
+ }
+ return {
+ config: objConfig,
+ scriptShell: opts.get('script-shell'),
+ force: opts.get('force'),
+ user: opts.get('user'),
+ group: opts.get('group'),
+ ignoreScripts: opts.get('ignore-scripts'),
+ ignorePrepublish: opts.get('ignore-prepublish'),
+ scriptsPrependNodePath: opts.get('scripts-prepend-node-path'),
+ unsafePerm: opts.get('unsafe-perm'),
+ log,
+ dir: opts.get('prefix'),
+ failOk: false,
+ production: opts.get('production')
+ }
+}
diff --git a/deps/npm/node_modules/libcipm/lib/config/npm-config.js b/deps/npm/node_modules/libcipm/lib/config/npm-config.js
new file mode 100644
index 0000000000..76b4054eef
--- /dev/null
+++ b/deps/npm/node_modules/libcipm/lib/config/npm-config.js
@@ -0,0 +1,72 @@
+'use strict'
+
+const BB = require('bluebird')
+const lifecycleOpts = require('./lifecycle-opts.js')
+const pacoteOpts = require('./pacote-opts.js')
+const protoduck = require('protoduck')
+const spawn = require('child_process').spawn
+
+class NpmConfig extends Map {}
+
+const CipmConfig = protoduck.define({
+ get: [],
+ set: [],
+ toPacote: [],
+ toLifecycle: []
+}, {
+ name: 'CipmConfig'
+})
+module.exports.CipmConfig = CipmConfig
+
+CipmConfig.impl(NpmConfig, {
+ get: Map.prototype.get,
+ set: Map.prototype.set,
+ toPacote (opts) {
+ return pacoteOpts(this, opts)
+ },
+ toLifecycle () {
+ return lifecycleOpts(this)
+ }
+})
+
+module.exports.fromObject = fromObj
+function fromObj (obj) {
+ const map = new NpmConfig()
+ Object.keys(obj).forEach(k => map.set(k, obj[k]))
+ return map
+}
+
+module.exports.fromNpm = getNpmConfig
+function getNpmConfig (argv) {
+ return new BB((resolve, reject) => {
+ const npmBin = process.platform === 'win32' ? 'npm.cmd' : 'npm'
+ const child = spawn(npmBin, [
+ 'config', 'ls', '--json', '-l'
+ // We add argv here to get npm to parse those options for us :D
+ ].concat(argv || []), {
+ env: process.env,
+ cwd: process.cwd(),
+ stdio: [0, 'pipe', 2]
+ })
+
+ let stdout = ''
+ if (child.stdout) {
+ child.stdout.on('data', (chunk) => {
+ stdout += chunk
+ })
+ }
+
+ child.on('error', reject)
+ child.on('close', (code) => {
+ if (code === 127) {
+ reject(new Error('`npm` command not found. Please ensure you have npm@5.4.0 or later installed.'))
+ } else {
+ try {
+ resolve(fromObj(JSON.parse(stdout)))
+ } catch (e) {
+ reject(new Error('`npm config ls --json` failed to output json. Please ensure you have npm@5.4.0 or later installed.'))
+ }
+ }
+ })
+ })
+}
diff --git a/deps/npm/node_modules/libcipm/lib/config/pacote-opts.js b/deps/npm/node_modules/libcipm/lib/config/pacote-opts.js
new file mode 100644
index 0000000000..234ed1352a
--- /dev/null
+++ b/deps/npm/node_modules/libcipm/lib/config/pacote-opts.js
@@ -0,0 +1,135 @@
+'use strict'
+
+const Buffer = require('safe-buffer').Buffer
+
+const crypto = require('crypto')
+const path = require('path')
+
+let effectiveOwner
+
+const npmSession = crypto.randomBytes(8).toString('hex')
+
+module.exports = pacoteOpts
+function pacoteOpts (npmOpts, moreOpts) {
+ const ownerStats = calculateOwner()
+ const opts = {
+ cache: path.join(npmOpts.get('cache'), '_cacache'),
+ ca: npmOpts.get('ca'),
+ cert: npmOpts.get('cert'),
+ git: npmOpts.get('git'),
+ key: npmOpts.get('key'),
+ localAddress: npmOpts.get('local-address'),
+ loglevel: npmOpts.get('loglevel'),
+ maxSockets: +(npmOpts.get('maxsockets') || 15),
+ npmSession: npmSession,
+ offline: npmOpts.get('offline'),
+ projectScope: moreOpts.rootPkg && getProjectScope(moreOpts.rootPkg.name),
+ proxy: npmOpts.get('https-proxy') || npmOpts.get('proxy'),
+ refer: 'cipm',
+ registry: npmOpts.get('registry'),
+ retry: {
+ retries: npmOpts.get('fetch-retries'),
+ factor: npmOpts.get('fetch-retry-factor'),
+ minTimeout: npmOpts.get('fetch-retry-mintimeout'),
+ maxTimeout: npmOpts.get('fetch-retry-maxtimeout')
+ },
+ strictSSL: npmOpts.get('strict-ssl'),
+ userAgent: npmOpts.get('user-agent'),
+
+ dmode: parseInt('0777', 8) & (~npmOpts.get('umask')),
+ fmode: parseInt('0666', 8) & (~npmOpts.get('umask')),
+ umask: npmOpts.get('umask')
+ }
+
+ if (ownerStats.uid != null || ownerStats.gid != null) {
+ Object.assign(opts, ownerStats)
+ }
+
+ (npmOpts.forEach ? Array.from(npmOpts.keys()) : npmOpts.keys).forEach(k => {
+ const authMatchGlobal = k.match(
+ /^(_authToken|username|_password|password|email|always-auth|_auth)$/
+ )
+ const authMatchScoped = k[0] === '/' && k.match(
+ /(.*):(_authToken|username|_password|password|email|always-auth|_auth)$/
+ )
+
+ // if it matches scoped it will also match global
+ if (authMatchGlobal || authMatchScoped) {
+ let nerfDart = null
+ let key = null
+ let val = null
+
+ if (!opts.auth) { opts.auth = {} }
+
+ if (authMatchScoped) {
+ nerfDart = authMatchScoped[1]
+ key = authMatchScoped[2]
+ val = npmOpts.get(k)
+ if (!opts.auth[nerfDart]) {
+ opts.auth[nerfDart] = {
+ alwaysAuth: !!npmOpts.get('always-auth')
+ }
+ }
+ } else {
+ key = authMatchGlobal[1]
+ val = npmOpts.get(k)
+ opts.auth.alwaysAuth = !!npmOpts.get('always-auth')
+ }
+
+ const auth = authMatchScoped ? opts.auth[nerfDart] : opts.auth
+ if (key === '_authToken') {
+ auth.token = val
+ } else if (key.match(/password$/i)) {
+ auth.password =
+ // the config file stores password auth already-encoded. pacote expects
+ // the actual username/password pair.
+ Buffer.from(val, 'base64').toString('utf8')
+ } else if (key === 'always-auth') {
+ auth.alwaysAuth = val === 'false' ? false : !!val
+ } else {
+ auth[key] = val
+ }
+ }
+
+ if (k[0] === '@') {
+ if (!opts.scopeTargets) { opts.scopeTargets = {} }
+ opts.scopeTargets[k.replace(/:registry$/, '')] = npmOpts.get(k)
+ }
+ })
+
+ Object.keys(moreOpts || {}).forEach((k) => {
+ opts[k] = moreOpts[k]
+ })
+
+ return opts
+}
+
+function calculateOwner () {
+ if (!effectiveOwner) {
+ effectiveOwner = { uid: 0, gid: 0 }
+
+ // Pretty much only on windows
+ if (!process.getuid) {
+ return effectiveOwner
+ }
+
+ effectiveOwner.uid = +process.getuid()
+ effectiveOwner.gid = +process.getgid()
+
+ if (effectiveOwner.uid === 0) {
+ if (process.env.SUDO_UID) effectiveOwner.uid = +process.env.SUDO_UID
+ if (process.env.SUDO_GID) effectiveOwner.gid = +process.env.SUDO_GID
+ }
+ }
+
+ return effectiveOwner
+}
+
+function getProjectScope (pkgName) {
+ const sep = pkgName.indexOf('/')
+ if (sep === -1) {
+ return ''
+ } else {
+ return pkgName.slice(0, sep)
+ }
+}