diff --git a/lib/package-managers/npm.js b/lib/package-managers/npm.js index 332b4dd7..8ec46e33 100644 --- a/lib/package-managers/npm.js +++ b/lib/package-managers/npm.js @@ -88,7 +88,7 @@ function viewMany(packageName, fields, currentVersion) { * @returns {Array} An array of versions with the release versions filtered out */ function filterOutPrereleaseVersions(versions, pre) { - return _.filter(versions, version => pre || !isPre(version)); + return pre ? versions : _.filter(versions, version => !isPre(version)); } /** @@ -245,8 +245,9 @@ module.exports = { .then(versions => _.last(filterOutPrereleaseVersions( doesSatisfyEnginesNode(versions, options.enginesNode), - options.pre - )) + options.pre) + .sort(versionUtil.compareVersions) + ) ); }, diff --git a/lib/version-util.js b/lib/version-util.js index f344452b..01894565 100644 --- a/lib/version-util.js +++ b/lib/version-util.js @@ -3,6 +3,7 @@ const semverutils = require('semver-utils'); const _ = require('lodash'); const chalk = require('chalk'); const util = require('util'); +const semver = require('semver'); const VERSION_BASE_PARTS = ['major', 'minor', 'patch']; const VERSION_ADDED_PARTS = ['release', 'build']; @@ -213,7 +214,13 @@ function findGreatestByLevel(versions, current, level) { .value(); } +/** Comparator used to sort semver versions */ +function compareVersions(a, b) { + return semver.gt(a, b) ? 1 : a === b ? 0 : -1; +} + module.exports = { + compareVersions, numParts, stringify, precisionAdd, diff --git a/test/individual/test-package-managers.js b/test/individual/test-package-managers.js index 77d7fbaf..ea82001a 100644 --- a/test/individual/test-package-managers.js +++ b/test/individual/test-package-managers.js @@ -24,7 +24,7 @@ describe('package-managers', () => { ); it('greatest', () => - packageManagers.npm.greatest('express', null, {prefix: testDir}).then(parseInt).should.eventually.be.above(1) + packageManagers.npm.greatest('ncu-test-greatest-not-newest', null, {prefix: testDir}).should.eventually.equal('2.0.0-beta') ); });