diff --git a/lib/worker.js b/lib/worker.js index ab3c0271f9c2229e9b025d6ffa2acc2871461287..318176e11a6167f991d624f74d43674309f84a77 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -18,6 +18,7 @@ module.exports = { processUpgradesSequentially, updateDependency, assignDepConfigs, + getDepTypeConfig, }; // This function manages the queue per-package file @@ -48,8 +49,15 @@ async function processPackageFile(repoName, packageFile, packageConfig) { return; } + const depTypes = config.depTypes.map((depType) => { + if (typeof depType === 'string') { + return depType; + } + return depType.depType; + }); + // Extract all dependencies from the package.json - let dependencies = await packageJson.extractDependencies(packageContent, config.depTypes); + let dependencies = await packageJson.extractDependencies(packageContent, depTypes); // Filter out ignored dependencies dependencies = dependencies.filter(dependency => config.ignoreDeps.indexOf(dependency.depName) === -1); @@ -69,7 +77,7 @@ function assignDepConfigs(inputConfig, deps) { return deps.map((dep) => { const returnDep = Object.assign({}, dep); returnDep.config = - Object.assign({}, inputConfig); + Object.assign({}, inputConfig, getDepTypeConfig(inputConfig.depTypes, dep.depType)); delete returnDep.config.depTypes; delete returnDep.config.enabled; delete returnDep.config.onboarding; @@ -87,6 +95,18 @@ function assignDepConfigs(inputConfig, deps) { }); } +function getDepTypeConfig(depTypes, depTypeName) { + let depTypeConfig = {}; + if (depTypes) { + depTypes.forEach((depType) => { + if (typeof depType !== 'string' && depType.depType === depTypeName) { + depTypeConfig = depType; + } + }); + } + return depTypeConfig; +} + async function maintainYarnLock(inputConfig) { const packageContent = await inputConfig.api.getFileContent(inputConfig.packageFile); const yarnLockFileName = path.join(path.dirname(inputConfig.packageFile), 'yarn.lock'); diff --git a/test/__snapshots__/worker.spec.js.snap b/test/__snapshots__/worker.spec.js.snap index 9b14d6629d0d1f6050c58bbb88e2f801e565330e..50e6f885d4e22382cb191bdc70220c0609b94a33 100644 --- a/test/__snapshots__/worker.spec.js.snap +++ b/test/__snapshots__/worker.spec.js.snap @@ -1,5 +1,32 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`worker assignDepConfigs(inputConfig, deps) handles depType config with override 1`] = ` +Array [ + Object { + "config": Object { + "depType": "dependencies", + "foo": "beta", + }, + "depName": "a", + "depType": "dependencies", + }, +] +`; + +exports[`worker assignDepConfigs(inputConfig, deps) handles depType config without override 1`] = ` +Array [ + Object { + "config": Object { + "alpha": "beta", + "depType": "dependencies", + "foo": "bar", + }, + "depName": "a", + "depType": "dependencies", + }, +] +`; + exports[`worker assignDepConfigs(inputConfig, deps) handles multiple deps 1`] = ` Array [ Object { diff --git a/test/worker.spec.js b/test/worker.spec.js index db955a022759680ad8fb203d6d8f3f0f66afc383..93efa892c7e4061f6e4b1267aeab743a29f46872 100644 --- a/test/worker.spec.js +++ b/test/worker.spec.js @@ -134,5 +134,67 @@ describe('worker', () => { const updatedDeps = worker.assignDepConfigs(config, deps); expect(updatedDeps).toMatchSnapshot(); }); + it('handles depType config without override', () => { + config.foo = 'bar'; + config.depTypes = [{ + depType: 'dependencies', + alpha: 'beta', + }]; + deps.push({ + depName: 'a', + depType: 'dependencies', + }); + const updatedDeps = worker.assignDepConfigs(config, deps); + expect(updatedDeps).toMatchSnapshot(); + }); + it('handles depType config with override', () => { + config.foo = 'bar'; + config.depTypes = [{ + depType: 'dependencies', + foo: 'beta', + }]; + deps.push({ + depName: 'a', + depType: 'dependencies', + }); + const updatedDeps = worker.assignDepConfigs(config, deps); + expect(updatedDeps).toMatchSnapshot(); + }); + }); + describe('getDepTypeConfig(depTypes, depTypeName)', () => { + it('handles empty depTypes', () => { + const depTypeConfig = worker.getDepTypeConfig([], 'dependencies'); + expect(depTypeConfig).toMatchObject({}); + }); + it('handles all strings', () => { + const depTypes = ['dependencies', 'devDependencies']; + const depTypeConfig = worker.getDepTypeConfig(depTypes, 'dependencies'); + expect(depTypeConfig).toMatchObject({}); + }); + it('handles missed object', () => { + const depTypes = [ + 'dependencies', + { + depType: 'devDependencies', + foo: 'bar', + }, + ]; + const depTypeConfig = worker.getDepTypeConfig(depTypes, 'dependencies'); + expect(depTypeConfig).toMatchObject({}); + }); + it('handles hit object', () => { + const depTypes = [ + { + depType: 'dependencies', + foo: 'bar', + }, + 'devDependencies', + ]; + const depTypeConfig = worker.getDepTypeConfig(depTypes, 'dependencies'); + const expectedResult = { + foo: 'bar', + }; + expect(depTypeConfig).toMatchObject(expectedResult); + }); }); });