summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/libcipm/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/libcipm/index.js')
-rw-r--r--deps/npm/node_modules/libcipm/index.js82
1 files changed, 61 insertions, 21 deletions
diff --git a/deps/npm/node_modules/libcipm/index.js b/deps/npm/node_modules/libcipm/index.js
index 9061ec4b18..7f4d13f74a 100644
--- a/deps/npm/node_modules/libcipm/index.js
+++ b/deps/npm/node_modules/libcipm/index.js
@@ -5,6 +5,7 @@ const BB = require('bluebird')
const binLink = require('bin-links')
const buildLogicalTree = require('npm-logical-tree')
const extract = require('./lib/extract.js')
+const figgyPudding = require('figgy-pudding')
const fs = require('graceful-fs')
const getPrefix = require('find-npm-prefix')
const lifecycle = require('npm-lifecycle')
@@ -20,10 +21,45 @@ const statAsync = BB.promisify(fs.stat)
const symlinkAsync = BB.promisify(fs.symlink)
const writeFileAsync = BB.promisify(fs.writeFile)
+const CipmOpts = figgyPudding({
+ also: {},
+ dev: 'development',
+ development: {},
+ dirPacker: {},
+ force: {},
+ global: {},
+ ignoreScripts: 'ignore-scripts',
+ 'ignore-scripts': {},
+ log: {},
+ loglevel: {},
+ only: {},
+ prefix: {},
+ prod: 'production',
+ production: {},
+ Promise: { default: () => BB },
+ umask: {}
+})
+
+const LifecycleOpts = figgyPudding({
+ config: {},
+ 'script-shell': {},
+ scriptShell: 'script-shell',
+ 'ignore-scripts': {},
+ ignoreScripts: 'ignore-scripts',
+ 'ignore-prepublish': {},
+ ignorePrepublish: 'ignore-prepublish',
+ 'scripts-prepend-node-path': {},
+ scriptsPrependNodePath: 'scripts-prepend-node-path',
+ 'unsafe-perm': {},
+ unsafePerm: 'unsafe-perm',
+ prefix: {},
+ dir: 'prefix',
+ failOk: { default: false }
+}, { other () { return true } })
+
class Installer {
constructor (opts) {
- this.opts = opts
- this.config = opts.config
+ this.opts = CipmOpts(opts)
// Stats
this.startTime = Date.now()
@@ -80,17 +116,17 @@ class Installer {
prepare () {
this.log.info('prepare', 'initializing installer')
- this.log.level = this.config.get('loglevel')
+ this.log.level = this.opts.loglevel
this.log.verbose('prepare', 'starting workers')
extract.startWorkers()
return (
- this.config.get('prefix') && this.config.get('global')
- ? BB.resolve(this.config.get('prefix'))
+ this.opts.prefix && this.opts.global
+ ? BB.resolve(this.opts.prefix)
// There's some Specialâ„¢ logic around the `--prefix` config when it
// comes from a config file or env vs when it comes from the CLI
: process.argv.some(arg => arg.match(/^\s*--prefix\s*/i))
- ? BB.resolve(this.config.get('prefix'))
+ ? BB.resolve(this.opts.prefix)
: getPrefix(process.cwd())
)
.then(prefix => {
@@ -203,7 +239,7 @@ class Installer {
return next()
} else {
return BB.resolve(extract.child(
- dep.name, dep, depPath, this.config, this.opts
+ dep.name, dep, depPath, this.opts
))
.then(() => cg.completeWork(1))
.then(() => { this.pkgCount++ })
@@ -218,15 +254,15 @@ class Installer {
checkDepEnv (dep) {
const includeDev = (
// Covers --dev and --development (from npm config itself)
- this.config.get('dev') ||
+ this.opts.dev ||
(
- !/^prod(uction)?$/.test(this.config.get('only')) &&
- !this.config.get('production')
+ !/^prod(uction)?$/.test(this.opts.only) &&
+ !this.opts.production
) ||
- /^dev(elopment)?$/.test(this.config.get('only')) ||
- /^dev(elopment)?$/.test(this.config.get('also'))
+ /^dev(elopment)?$/.test(this.opts.only) ||
+ /^dev(elopment)?$/.test(this.opts.also)
)
- const includeProd = !/^dev(elopment)?$/.test(this.config.get('only'))
+ const includeProd = !/^dev(elopment)?$/.test(this.opts.only)
return (dep.dev && includeDev) || (!dep.dev && includeProd)
}
@@ -274,14 +310,14 @@ class Installer {
}
return readPkgJson(path.join(depPath, 'package.json'))
.then(pkg => binLink(pkg, depPath, false, {
- force: this.config.get('force'),
- ignoreScripts: this.config.get('ignore-scripts'),
+ force: this.opts.force,
+ ignoreScripts: this.opts['ignore-scripts'],
log: Object.assign({}, this.log, { info: () => {} }),
name: pkg.name,
pkgId: pkg.name + '@' + pkg.version,
prefix: this.prefix,
prefixes: [this.prefix],
- umask: this.config.get('umask')
+ umask: this.opts.umask
}), e => {
this.log.verbose('buildTree', `error linking ${spec}: ${e.message} ${e.stack}`)
})
@@ -346,18 +382,22 @@ class Installer {
runScript (stage, pkg, pkgPath) {
const start = Date.now()
- if (!this.config.get('ignore-scripts')) {
+ if (!this.opts['ignore-scripts']) {
// TODO(mikesherov): remove pkg._id when npm-lifecycle no longer relies on it
pkg._id = pkg.name + '@' + pkg.version
- const opts = this.config.toLifecycle()
- return BB.resolve(lifecycle(pkg, stage, pkgPath, opts))
- .tap(() => { this.timings.scripts += Date.now() - start })
+ return BB.resolve(lifecycle(
+ pkg, stage, pkgPath, LifecycleOpts(this.opts).concat({
+ // TODO: can be removed once npm-lifecycle is updated to modern
+ // config practices.
+ config: this.opts,
+ dir: this.prefix
+ }))
+ ).tap(() => { this.timings.scripts += Date.now() - start })
}
return BB.resolve()
}
}
module.exports = Installer
-module.exports.CipmConfig = require('./lib/config/npm-config.js').CipmConfig
function mark (tree, failed) {
const liveDeps = new Set()