From 0f6772e699448298a0cdae01904cedd9be8d3af7 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Tue, 13 Nov 2018 09:29:53 +0100 Subject: [PATCH] refactor: flatten updateTypes inside packageRules (#2808) Closes #2799 --- lib/config/massage.js | 30 +++++++++++++++++++ .../config/__snapshots__/massage.spec.js.snap | 30 +++++++++++++++++++ test/config/massage.spec.js | 18 +++++++++++ 3 files changed, 78 insertions(+) diff --git a/lib/config/massage.js b/lib/config/massage.js index f1497df21b..a13b386284 100644 --- a/lib/config/massage.js +++ b/lib/config/massage.js @@ -38,5 +38,35 @@ function massageConfig(config) { massagedConfig[key] = massageConfig(val); } } + if (massagedConfig.packageRules) { + const newRules = []; + const updateTypes = [ + 'major', + 'minor', + 'patch', + 'pin', + 'digest', + 'lockFileMaintenance', + 'rollback', + ]; + for (const rule of massagedConfig.packageRules) { + newRules.push(rule); + for (const [key, val] of Object.entries(rule)) { + if (updateTypes.includes(key)) { + const newRule = deepcopy(rule); + newRule.updateTypes = rule.updateTypes || []; + newRule.updateTypes.push(key); + Object.assign(newRule, val); + newRules.push(newRule); + } + } + } + for (const rule of newRules) { + updateTypes.forEach(updateType => { + delete rule[updateType]; + }); + } + massagedConfig.packageRules = newRules; + } return massagedConfig; } diff --git a/test/config/__snapshots__/massage.spec.js.snap b/test/config/__snapshots__/massage.spec.js.snap index 5b3b9202f9..e6b8c49f9e 100644 --- a/test/config/__snapshots__/massage.spec.js.snap +++ b/test/config/__snapshots__/massage.spec.js.snap @@ -7,4 +7,34 @@ Object { } `; +exports[`config/massage massageConfig massages packageRules updateTypes 1`] = ` +Object { + "packageRules": Array [ + Object { + "packageNames": Array [ + "foo", + ], + }, + Object { + "packageNames": Array [ + "foo", + ], + "semanticCommitType": "feat", + "updateTypes": Array [ + "minor", + ], + }, + Object { + "packageNames": Array [ + "foo", + ], + "semanticCommitType": "fix", + "updateTypes": Array [ + "patch", + ], + }, + ], +} +`; + exports[`config/massage massageConfig returns empty 1`] = `Object {}`; diff --git a/test/config/massage.spec.js b/test/config/massage.spec.js index fa8bb4ec5a..c06ffb7329 100644 --- a/test/config/massage.spec.js +++ b/test/config/massage.spec.js @@ -20,5 +20,23 @@ describe('config/massage', () => { }; expect(massage.massageConfig(config)).toMatchSnapshot(); }); + it('massages packageRules updateTypes', () => { + const config = { + packageRules: [ + { + packageNames: ['foo'], + minor: { + semanticCommitType: 'feat', + }, + patch: { + semanticCommitType: 'fix', + }, + }, + ], + }; + const res = massage.massageConfig(config); + expect(res).toMatchSnapshot(); + expect(res.packageRules).toHaveLength(3); + }); }); }); -- GitLab