diff --git a/lib/manager/npm/package.js b/lib/manager/npm/package.js index f8a420226c2bab67ff41c84eb08916187d3255be..d6cae10aa65cdc02c91d8b81fc3205308b41aa4c 100644 --- a/lib/manager/npm/package.js +++ b/lib/manager/npm/package.js @@ -17,6 +17,14 @@ function getRangeStrategy(config) { currentVersion, rangeStrategy, } = config; + const isComplexRange = parseRange(currentVersion).length > 1; + if (rangeStrategy === 'bump' && isComplexRange) { + logger.info( + { currentVersion }, + 'Replacing bump strategy for complex range with widen' + ); + return 'widen'; + } if (rangeStrategy !== 'auto') { return rangeStrategy; } @@ -35,8 +43,7 @@ function getRangeStrategy(config) { logger.debug('Widening peer dependencies'); return 'widen'; } - const semverParsed = parseRange(currentVersion); - if (semverParsed.length > 1) { + if (isComplexRange) { return 'widen'; } return 'replace'; diff --git a/test/manager/npm/package.spec.js b/test/manager/npm/package.spec.js index b3b660a284cfbf9b7b562ec5272e3c24ffa361d0..162124db68579f70a7797ae56572f5b803740c71 100644 --- a/test/manager/npm/package.spec.js +++ b/test/manager/npm/package.spec.js @@ -37,6 +37,14 @@ describe('lib/manager/npm/package', () => { }; expect(npm.getRangeStrategy(config)).toEqual('widen'); }); + it('widens complex bump', () => { + const config = { + rangeStrategy: 'bump', + depType: 'dependencies', + currentVersion: '^1.6.0 || ^2.0.0', + }; + expect(npm.getRangeStrategy(config)).toEqual('widen'); + }); it('defaults to replace', () => { const config = { rangeStrategy: 'auto', depType: 'dependencies' }; expect(npm.getRangeStrategy(config)).toEqual('replace');