diff --git a/lib/config/migration.js b/lib/config/migration.js index 9c017cf294b93320cd6997939face4f853480021..eb2376f8dc6d4c19350ee46eb37beb4df045d016 100644 --- a/lib/config/migration.js +++ b/lib/config/migration.js @@ -34,7 +34,14 @@ function migrateConfig(config) { } } }); + isMigrated = true; delete migratedConfig.depTypes; + } else if (isObject(val)) { + const subMigrate = migrateConfig(val); + if (subMigrate.isMigrated) { + isMigrated = true; + migratedConfig[key] = subMigrate.migratedConfig; + } } } return { isMigrated, migratedConfig }; diff --git a/test/config/__snapshots__/migration.spec.js.snap b/test/config/__snapshots__/migration.spec.js.snap index 6ea6cee4fc195e1059a456412ee6be32e7a901e0..ef00800e7f559a0df7eacac71a483b8c80daa950 100644 --- a/test/config/__snapshots__/migration.spec.js.snap +++ b/test/config/__snapshots__/migration.spec.js.snap @@ -8,3 +8,13 @@ Object { }, } `; + +exports[`config/migration migrateConfig(config) it migrates subconfig 1`] = ` +Object { + "lockFileMaintenance": Object { + "optionalDependencies": Object { + "respectLatest": false, + }, + }, +} +`; diff --git a/test/config/migration.spec.js b/test/config/migration.spec.js index eebde0d06b8a47ff61ba3e935a30d4b73eb0c78b..4e9db9c9a236cdb0ec39069cc557c05ecf3526e5 100644 --- a/test/config/migration.spec.js +++ b/test/config/migration.spec.js @@ -33,5 +33,27 @@ describe('config/migration', () => { expect(isMigrated).toBe(false); expect(migratedConfig).toMatchObject(config); }); + it('it migrates subconfig', () => { + const config = { + lockFileMaintenance: { + depTypes: [ + 'dependencies', + { + depType: 'optionalDependencies', + respectLatest: false, + }, + ], + }, + }; + const { isMigrated, migratedConfig } = configMigration.migrateConfig( + config + ); + expect(isMigrated).toBe(true); + expect(migratedConfig).toMatchSnapshot(); + expect(migratedConfig.lockFileMaintenance.depTypes).not.toBeDefined(); + expect( + migratedConfig.lockFileMaintenance.optionalDependencies.respectLatest + ).toBe(false); + }); }); });