Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRebecca Turner <me@re-becca.org>2015-07-01 05:19:37 +0300
committerRebecca Turner <me@re-becca.org>2015-07-01 15:16:22 +0300
commit6c248ff8f61a57f7f3e16e688d2fbaa52559a834 (patch)
tree0a55021623c431c9a753ede6ff7e91e6406b1d4c
parent391e29daa769e7fdd00fd8afe14eb9669344d823 (diff)
install: Report normalization errors of the top level package
PR-URL: https://github.com/npm/npm/pull/8779
-rw-r--r--lib/install/validate-tree.js25
-rw-r--r--test/tap/peer-deps-invalid.js5
2 files changed, 26 insertions, 4 deletions
diff --git a/lib/install/validate-tree.js b/lib/install/validate-tree.js
index 880a0fb66..cb04a447a 100644
--- a/lib/install/validate-tree.js
+++ b/lib/install/validate-tree.js
@@ -7,6 +7,8 @@ var checkPlatform = npmInstallChecks.checkPlatform
var checkGit = npmInstallChecks.checkGit
var asyncMap = require('slide').asyncMap
var chain = require('slide').chain
+var clone = require('lodash.clonedeep')
+var normalizePackageData = require('normalize-package-data')
var npm = require('../npm.js')
var andFinishTracker = require('./and-finish-tracker.js')
var flattenTree = require('./flatten-tree.js')
@@ -28,7 +30,7 @@ module.exports = function (idealTree, log, next) {
mod.parent && !isInLink(mod) && [checkGit, mod.realpath],
[checkErrors, mod, idealTree]
], done)
- }, andValidateAllPeerDeps(idealTree, andFinishTracker(log, next)))
+ }, andValidateAllPeerDeps(idealTree, andCheckTop(idealTree, andFinishTracker(log, next))))
}
function isInLink (mod) {
@@ -54,3 +56,24 @@ function andValidateAllPeerDeps (idealTree, next) {
next(er)
}
}
+
+function andCheckTop (idealTree, next) {
+ validate('OF', arguments)
+ if (idealTree.package.error) {
+ return next
+ } else {
+ return function (er) {
+ // FIXME: when we replace read-package-json with something less magic,
+ // this should done elsewhere.
+ // As it is, the package has already been normalized and thus some
+ // errors are suppressed.
+ var pkg = clone(idealTree.package)
+ normalizePackageData(pkg, function (warn) {
+ var warnObj = new Error(pkg._id + ' ' + warn)
+ warnObj.code = 'EPACKAGEJSON'
+ idealTree.warnings.push(warnObj)
+ }, false)
+ next(er)
+ }
+ }
+}
diff --git a/test/tap/peer-deps-invalid.js b/test/tap/peer-deps-invalid.js
index 4ce2d6b26..39ad612e5 100644
--- a/test/tap/peer-deps-invalid.js
+++ b/test/tap/peer-deps-invalid.js
@@ -79,9 +79,8 @@ test('installing dependencies that have conflicting peerDependencies', function
function () {
npm.commands.install([], function (err, additions, tree) {
t.error(err)
- t.is(tree.warnings.length, 2)
- t.is(tree.warnings[0].code, 'EPEERINVALID')
- t.is(tree.warnings[1].code, 'EPEERINVALID')
+ var invalid = tree.warnings.filter(function (warning) { return warning.code === 'EPEERINVALID' })
+ t.is(invalid.length, 2)
s.close()
t.end()
})