aboutsummaryrefslogtreecommitdiff
path: root/deps/npm/lib/install/save.js
diff options
context:
space:
mode:
authorKat Marchán <kzm@sykosomatic.org>2017-05-09 14:46:02 -0700
committerAnna Henningsen <anna@addaleax.net>2017-05-23 19:39:43 +0200
commitc0d858f8bb8ba5212548da2fba6a7bc02db0462b (patch)
tree99f043ec5aec3f5150a2aed0f62597234b158140 /deps/npm/lib/install/save.js
parent994617370e8e66f3ea9488fec32fd912e7902396 (diff)
downloadandroid-node-v8-c0d858f8bb8ba5212548da2fba6a7bc02db0462b.tar.gz
android-node-v8-c0d858f8bb8ba5212548da2fba6a7bc02db0462b.tar.bz2
android-node-v8-c0d858f8bb8ba5212548da2fba6a7bc02db0462b.zip
deps: upgrade npm beta to 5.0.0-beta.56
PR-URL: https://github.com/nodejs/node/pull/12936 Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'deps/npm/lib/install/save.js')
-rw-r--r--deps/npm/lib/install/save.js147
1 files changed, 50 insertions, 97 deletions
diff --git a/deps/npm/lib/install/save.js b/deps/npm/lib/install/save.js
index 18028a3c26..5d5f4e7f7a 100644
--- a/deps/npm/lib/install/save.js
+++ b/deps/npm/lib/install/save.js
@@ -1,19 +1,20 @@
'use strict'
-var fs = require('graceful-fs')
-var path = require('path')
-var url = require('url')
-var writeFileAtomic = require('write-file-atomic')
-var log = require('npmlog')
-var semver = require('semver')
-var iferr = require('iferr')
-var validate = require('aproba')
-var without = require('lodash.without')
-var npm = require('../npm.js')
-var deepSortObject = require('../utils/deep-sort-object.js')
-var parseJSON = require('../utils/parse-json.js')
-var moduleName = require('../utils/module-name.js')
-var isDevDep = require('./is-dev-dep.js')
-var createShrinkwrap = require('../shrinkwrap.js').createShrinkwrap
+
+const BB = require('bluebird')
+
+const createShrinkwrap = require('../shrinkwrap.js').createShrinkwrap
+const deepSortObject = require('../utils/deep-sort-object.js')
+const detectIndent = require('detect-indent')
+const fs = BB.promisifyAll(require('graceful-fs'))
+const iferr = require('iferr')
+const log = require('npmlog')
+const moduleName = require('../utils/module-name.js')
+const npm = require('../npm.js')
+const parseJSON = require('../utils/parse-json.js')
+const path = require('path')
+const validate = require('aproba')
+const without = require('lodash.without')
+const writeFileAtomic = require('write-file-atomic')
// if the -S|--save option is specified, then write installed packages
// as dependencies to a package.json file.
@@ -42,30 +43,13 @@ function andWarnErrors (cb) {
function saveShrinkwrap (tree, next) {
validate('OF', arguments)
- var saveTarget = path.resolve(tree.path, 'npm-shrinkwrap.json')
- fs.stat(saveTarget, function (er, stat) {
- if (er) return next()
- var save = npm.config.get('save')
- var saveDev = npm.config.get('save-dev')
- var saveOptional = npm.config.get('save-optional')
-
- var shrinkwrap = tree.package._shrinkwrap || {dependencies: {}}
- var shrinkwrapHasAnyDevOnlyDeps = tree.requires.some(function (dep) {
- var name = moduleName(dep)
- return isDevDep(tree, name) &&
- shrinkwrap.dependencies[name] != null
- })
-
- if (!saveOptional && saveDev && !shrinkwrapHasAnyDevOnlyDeps) return next()
- if (saveOptional || !(save || saveDev)) return next()
-
- var silent = false
- createShrinkwrap(tree.path, tree.package, shrinkwrapHasAnyDevOnlyDeps, silent, next)
- })
+ createShrinkwrap(tree, {silent: false}, next)
}
function savePackageJson (args, tree, next) {
validate('AOF', arguments)
+ if (!args || !args.length) { return next() }
+
var saveBundle = npm.config.get('save-bundle')
// each item in the tree is a top-level thing that should be saved
@@ -74,33 +58,34 @@ function savePackageJson (args, tree, next) {
var saveTarget = path.resolve(tree.path, 'package.json')
// don't use readJson, because we don't want to do all the other
// tricky npm-specific stuff that's in there.
- fs.readFile(saveTarget, iferr(next, function (packagejson) {
+ fs.readFile(saveTarget, 'utf8', iferr(next, function (packagejson) {
+ const indent = detectIndent(packagejson).indent || ' '
try {
- packagejson = parseJSON(packagejson)
+ tree.package = parseJSON(packagejson)
} catch (ex) {
return next(ex)
}
// If we're saving bundled deps, normalize the key before we start
if (saveBundle) {
- var bundle = packagejson.bundleDependencies || packagejson.bundledDependencies
- delete packagejson.bundledDependencies
+ var bundle = tree.package.bundleDependencies || tree.package.bundledDependencies
+ delete tree.package.bundledDependencies
if (!Array.isArray(bundle)) bundle = []
}
var toSave = getThingsToSave(tree)
- var toRemove = getThingsToRemove(args, tree)
+ var toRemove = getThingsToRemove(tree)
var savingTo = {}
toSave.forEach(function (pkg) { savingTo[pkg.save] = true })
toRemove.forEach(function (pkg) { savingTo[pkg.save] = true })
Object.keys(savingTo).forEach(function (save) {
- if (!packagejson[save]) packagejson[save] = {}
+ if (!tree.package[save]) tree.package[save] = {}
})
log.verbose('saving', toSave)
toSave.forEach(function (pkg) {
- packagejson[pkg.save][pkg.name] = pkg.spec
+ tree.package[pkg.save][pkg.name] = pkg.spec
if (saveBundle) {
var ii = bundle.indexOf(pkg.name)
if (ii === -1) bundle.push(pkg.name)
@@ -108,71 +93,46 @@ function savePackageJson (args, tree, next) {
})
toRemove.forEach(function (pkg) {
- delete packagejson[pkg.save][pkg.name]
+ delete tree.package[pkg.save][pkg.name]
if (saveBundle) {
bundle = without(bundle, pkg.name)
}
})
Object.keys(savingTo).forEach(function (key) {
- packagejson[key] = deepSortObject(packagejson[key])
+ tree.package[key] = deepSortObject(tree.package[key])
})
if (saveBundle) {
- packagejson.bundledDependencies = deepSortObject(bundle)
+ tree.package.bundleDependencies = deepSortObject(bundle)
}
- var json = JSON.stringify(packagejson, null, 2) + '\n'
+ var json = JSON.stringify(tree.package, null, indent) + '\n'
writeFileAtomic(saveTarget, json, next)
}))
}
-var getSaveType = exports.getSaveType = function (args) {
- validate('A', arguments)
- var nothingToSave = !args.length
+exports.getSaveType = function (tree, arg) {
+ if (arguments.length) validate('OO', arguments)
var globalInstall = npm.config.get('global')
var noSaveFlags = !npm.config.get('save') &&
!npm.config.get('save-dev') &&
!npm.config.get('save-optional')
- if (nothingToSave || globalInstall || noSaveFlags) return null
-
- if (npm.config.get('save-optional')) return 'optionalDependencies'
- else if (npm.config.get('save-dev')) return 'devDependencies'
- else return 'dependencies'
-}
+ if (globalInstall || noSaveFlags) return null
-function computeVersionSpec (child) {
- validate('O', arguments)
- var requested = child.package._requested
- if (!requested || requested.type === 'tag') {
- requested = {
- type: 'version',
- spec: child.package.version
- }
- }
- if (requested.type === 'version' || requested.type === 'range') {
- var version = child.package.version
- var rangeDescriptor = ''
- if (semver.valid(version, true) &&
- semver.gte(version, '0.1.0', true) &&
- !npm.config.get('save-exact')) {
- rangeDescriptor = npm.config.get('save-prefix')
- }
- return rangeDescriptor + version
- } else if (requested.type === 'directory' || requested.type === 'local') {
- var relativePath = path.relative(child.parent.path, requested.spec)
- if (/^[.][.]/.test(relativePath)) {
- return url.format({
- protocol: 'file',
- slashes: true,
- pathname: requested.spec
- })
- } else {
- return 'file:' + relativePath
- }
- } else if (requested.type === 'hosted') {
- return requested.spec
+ if (npm.config.get('save-optional')) {
+ return 'optionalDependencies'
+ } else if (npm.config.get('save-dev')) {
+ return 'devDependencies'
} else {
- return requested.rawSpec
+ if (arg) {
+ var name = moduleName(arg)
+ if (tree.package.optionalDependencies[name]) {
+ return 'optionalDependencies'
+ } else if (tree.package.devDependencies[name]) {
+ return 'devDependencies'
+ }
+ }
+ return 'dependencies'
}
}
@@ -183,15 +143,15 @@ function getThingsToSave (tree) {
}).map(function (child) {
return {
name: moduleName(child),
- spec: computeVersionSpec(child),
+ spec: child.saveSpec,
save: child.save
}
})
return toSave
}
-function getThingsToRemove (args, tree) {
- validate('AO', arguments)
+function getThingsToRemove (tree) {
+ validate('O', arguments)
if (!tree.removed) return []
var toRemove = tree.removed.map(function (child) {
return {
@@ -199,12 +159,5 @@ function getThingsToRemove (args, tree) {
save: child.save
}
})
- var saveType = getSaveType(args)
- args.forEach(function (arg) {
- toRemove.push({
- name: arg,
- save: saveType
- })
- })
return toRemove
}