diff --git a/lib/config/massage.js b/lib/config/massage.js index f1497df21bba30ebdbfb8c17dc15ba2ca6e70807..a13b386284f81aee7c6d62078fd1104ab1fafcdf 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 5b3b9202f99a3d7b90bae3664e096c9843f12914..e6b8c49f9eb2eb841d81f10709bfec7e16956615 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 fa8bb4ec5ad30f43eb371f3e20b54e7859446891..c06ffb73297d795bc5723cbc40ef0e004df38676 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); + }); }); });