diff options
author | Rebecca Turner <me@re-becca.org> | 2015-07-01 05:19:37 +0300 |
---|---|---|
committer | Rebecca Turner <me@re-becca.org> | 2015-07-01 15:16:22 +0300 |
commit | 6c248ff8f61a57f7f3e16e688d2fbaa52559a834 (patch) | |
tree | 0a55021623c431c9a753ede6ff7e91e6406b1d4c | |
parent | 391e29daa769e7fdd00fd8afe14eb9669344d823 (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.js | 25 | ||||
-rw-r--r-- | test/tap/peer-deps-invalid.js | 5 |
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() }) |