diff --git a/lib/workers/package/versions.js b/lib/workers/package/versions.js index 601c43a5f80c469add6714df7bd76ed0c21f8140..a6278934ce40e8a89358ee7a17bf64c952237ee0 100644 --- a/lib/workers/package/versions.js +++ b/lib/workers/package/versions.js @@ -25,9 +25,23 @@ function determineUpgrades(npmDep, config) { logger.warn({ dependency }, result.message); return [result]; } - const versionList = Object.keys(versions); + let versionList = Object.keys(versions); const allUpgrades = {}; let { currentVersion } = config; + // filter out versions past latest + const currentIsPastLatest = isPastLatest( + npmDep, + semver.minSatisfying(versionList, currentVersion) + ); + if (currentIsPastLatest) { + logger.debug({ name: npmDep.name, currentVersion }, 'currentIsPastLatest'); + } + versionList = versionList.filter( + version => + currentIsPastLatest || // if current is past latest then don't filter any + config.respectLatest === false || // if user has configured respectLatest to false + isPastLatest(npmDep, version) === false // if the version is less than or equal to latest + ); let rangeOperator; if (config.upgradeInRange && semver.validRange(currentVersion)) { logger.debug({ currentVersion }, 'upgradeInRange is true'); @@ -124,13 +138,6 @@ function determineUpgrades(npmDep, config) { !stable.is(version) && semver.major(version) > semver.major(changeLogFromVersion) ) - // Ignore versions newer than "latest", unless current version is newer than the "latest" - .reject( - version => - config.respectLatest && - isPastLatest(npmDep, version) && - !isPastLatest(npmDep, changeLogFromVersion) - ) // Loop through all possible versions .forEach(newVersion => { // Group by major versions @@ -447,6 +454,9 @@ function isValidVersion(input) { } function isPastLatest(npmDep, version) { + if (!version) { + return false; + } if (npmDep['dist-tags'] && npmDep['dist-tags'].latest) { return semver.gt(version, npmDep['dist-tags'].latest); }