From 1c115ae6b67ae75f61f92a63c1833039ef55a0ef Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Mon, 28 May 2018 13:25:54 +0200 Subject: [PATCH] refactor: move getRangeStrategy into npm/lookup --- lib/manager/npm/lookup/index.js | 6 ++-- lib/manager/npm/lookup/range.js | 45 +++++++++++++++++++++++++ lib/manager/npm/package.js | 48 +-------------------------- test/manager/npm/lookup/range.spec.js | 46 +++++++++++++++++++++++++ test/manager/npm/package.spec.js | 42 ----------------------- 5 files changed, 95 insertions(+), 92 deletions(-) create mode 100644 lib/manager/npm/lookup/range.js create mode 100644 test/manager/npm/lookup/range.spec.js diff --git a/lib/manager/npm/lookup/index.js b/lib/manager/npm/lookup/index.js index 2e25482e8b..5bf108c9a6 100644 --- a/lib/manager/npm/lookup/index.js +++ b/lib/manager/npm/lookup/index.js @@ -1,7 +1,7 @@ const versioning = require('../../../versioning/semver'); const moment = require('moment'); const { getRollbackUpdate } = require('./rollback'); - +const { getRangeStrategy } = require('./range'); const { filterVersions } = require('./filter'); const { @@ -20,7 +20,7 @@ module.exports = { }; function lookupUpdates(dependency, config) { - const { currentVersion, lockedVersion, rangeStrategy } = config; + const { currentVersion, lockedVersion } = config; const { latestVersion } = dependency; const allVersions = Object.keys(dependency.versions); if (allVersions.length === 0) { @@ -41,7 +41,7 @@ function lookupUpdates(dependency, config) { } const fromVersion = getFromVersion( currentVersion, - rangeStrategy, + getRangeStrategy(config), lockedVersion, allVersions ); diff --git a/lib/manager/npm/lookup/range.js b/lib/manager/npm/lookup/range.js new file mode 100644 index 0000000000..7962267887 --- /dev/null +++ b/lib/manager/npm/lookup/range.js @@ -0,0 +1,45 @@ +const { parseRange } = require('semver-utils'); + +module.exports = { + getRangeStrategy, +}; + +function getRangeStrategy(config) { + const { + depType, + depName, + packageJsonType, + 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; + } + if (depType === 'devDependencies') { + // Always pin devDependencies + logger.debug({ depName }, 'Pinning devDependency'); + return 'pin'; + } + if (depType === 'dependencies' && packageJsonType === 'app') { + // Pin dependencies if we're pretty sure it's not a browser library + logger.debug('Pinning app dependency'); + return 'pin'; + } + if (depType === 'peerDependencies') { + // Widen peer dependencies + logger.debug('Widening peer dependencies'); + return 'widen'; + } + if (isComplexRange) { + return 'widen'; + } + return 'replace'; +} diff --git a/lib/manager/npm/package.js b/lib/manager/npm/package.js index d6cae10aa6..19963ff9ec 100644 --- a/lib/manager/npm/package.js +++ b/lib/manager/npm/package.js @@ -2,53 +2,11 @@ const npmApi = require('../../datasource/npm'); const lookup = require('./lookup'); const { isValid } = require('../../versioning/semver'); const nodeManager = require('../_helpers/node/package'); -const { parseRange } = require('semver-utils'); module.exports = { - getRangeStrategy, getPackageUpdates, }; -function getRangeStrategy(config) { - const { - depType, - depName, - packageJsonType, - 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; - } - if (depType === 'devDependencies') { - // Always pin devDependencies - logger.debug({ depName }, 'Pinning devDependency'); - return 'pin'; - } - if (depType === 'dependencies' && packageJsonType === 'app') { - // Pin dependencies if we're pretty sure it's not a browser library - logger.debug('Pinning app dependency'); - return 'pin'; - } - if (depType === 'peerDependencies') { - // Widen peer dependencies - logger.debug('Widening peer dependencies'); - return 'widen'; - } - if (isComplexRange) { - return 'widen'; - } - return 'replace'; -} - async function getPackageUpdates(config) { logger.trace({ config }, `npm.getPackageUpdates()`); const { depType, depName, currentVersion } = config; @@ -76,17 +34,13 @@ async function getPackageUpdates(config) { logger.debug(results[0].message); return results; } - const rangeStrategy = getRangeStrategy(config); npmApi.setNpmrc( config.npmrc, config.global ? config.global.exposeEnv : false ); const npmDep = await npmApi.getDependency(depName); if (npmDep) { - results = lookup.lookupUpdates(npmDep, { - ...config, - rangeStrategy, - }); + results = lookup.lookupUpdates(npmDep, config); if (results.length > 0) { logger.info( { dependency: depName }, diff --git a/test/manager/npm/lookup/range.spec.js b/test/manager/npm/lookup/range.spec.js new file mode 100644 index 0000000000..3891f1778b --- /dev/null +++ b/test/manager/npm/lookup/range.spec.js @@ -0,0 +1,46 @@ +const { + getRangeStrategy, +} = require('../../../../lib/manager/npm/lookup/range'); + +describe('getRangeStrategy', () => { + it('returns same if not auto', () => { + const config = { rangeStrategy: 'widen' }; + expect(getRangeStrategy(config)).toEqual('widen'); + }); + it('pins devDependencies', () => { + const config = { rangeStrategy: 'auto', depType: 'devDependencies' }; + expect(getRangeStrategy(config)).toEqual('pin'); + }); + it('pins app dependencies', () => { + const config = { + rangeStrategy: 'auto', + depType: 'dependencies', + packageJsonType: 'app', + }; + expect(getRangeStrategy(config)).toEqual('pin'); + }); + it('widens peerDependencies', () => { + const config = { rangeStrategy: 'auto', depType: 'peerDependencies' }; + expect(getRangeStrategy(config)).toEqual('widen'); + }); + it('widens complex ranges', () => { + const config = { + rangeStrategy: 'auto', + depType: 'dependencies', + currentVersion: '^1.6.0 || ^2.0.0', + }; + expect(getRangeStrategy(config)).toEqual('widen'); + }); + it('widens complex bump', () => { + const config = { + rangeStrategy: 'bump', + depType: 'dependencies', + currentVersion: '^1.6.0 || ^2.0.0', + }; + expect(getRangeStrategy(config)).toEqual('widen'); + }); + it('defaults to replace', () => { + const config = { rangeStrategy: 'auto', depType: 'dependencies' }; + expect(getRangeStrategy(config)).toEqual('replace'); + }); +}); diff --git a/test/manager/npm/package.spec.js b/test/manager/npm/package.spec.js index 162124db68..7db607dcbf 100644 --- a/test/manager/npm/package.spec.js +++ b/test/manager/npm/package.spec.js @@ -8,48 +8,6 @@ jest.mock('../../../lib/manager/_helpers/node/package'); npmApi.getDependency = jest.fn(); describe('lib/manager/npm/package', () => { - describe('getRangeStrategy', () => { - it('returns same if not auto', () => { - const config = { rangeStrategy: 'widen' }; - expect(npm.getRangeStrategy(config)).toEqual('widen'); - }); - it('pins devDependencies', () => { - const config = { rangeStrategy: 'auto', depType: 'devDependencies' }; - expect(npm.getRangeStrategy(config)).toEqual('pin'); - }); - it('pins app dependencies', () => { - const config = { - rangeStrategy: 'auto', - depType: 'dependencies', - packageJsonType: 'app', - }; - expect(npm.getRangeStrategy(config)).toEqual('pin'); - }); - it('widens peerDependencies', () => { - const config = { rangeStrategy: 'auto', depType: 'peerDependencies' }; - expect(npm.getRangeStrategy(config)).toEqual('widen'); - }); - it('widens complex ranges', () => { - const config = { - rangeStrategy: 'auto', - depType: 'dependencies', - currentVersion: '^1.6.0 || ^2.0.0', - }; - 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'); - }); - }); describe('getPackageUpdates', () => { let config; beforeEach(() => { -- GitLab