Skip to content
This repository was archived by the owner on Apr 4, 2025. It is now read-only.

Commit 65992bc

Browse files
filipesilvahansl
authored andcommitted
fix(@schematics/update): stabilize package list before continuing
Fix angular/angular-cli#10875
1 parent 6de2e57 commit 65992bc

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

packages/schematics/update/update/index.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -790,10 +790,16 @@ export default function(options: UpdateSchema): Rule {
790790

791791
map(npmPackageJsonMap => {
792792
// Augment the command line package list with packageGroups and forward peer dependencies.
793-
npmPackageJsonMap.forEach((npmPackageJson) => {
794-
_addPackageGroup(packages, allDependencies, npmPackageJson, logger);
795-
_addPeerDependencies(packages, allDependencies, npmPackageJson, logger);
796-
});
793+
// Each added package may uncover new package groups and peer dependencies, so we must
794+
// repeat this process until the package list stabilizes.
795+
let lastPackagesSize;
796+
do {
797+
lastPackagesSize = packages.size;
798+
npmPackageJsonMap.forEach((npmPackageJson) => {
799+
_addPackageGroup(packages, allDependencies, npmPackageJson, logger);
800+
_addPeerDependencies(packages, allDependencies, npmPackageJson, logger);
801+
});
802+
} while (packages.size > lastPackagesSize);
797803

798804
// Build the PackageInfo for each module.
799805
const packageInfoMap = new Map<string, PackageInfo>();

packages/schematics/update/update/index_spec.ts

+5
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,11 @@ describe('@schematics/update', () => {
161161
dependencies['@angular/animations'] = '5.1.0';
162162
dependencies['@angular/common'] = '5.1.0';
163163
dependencies['@angular/compiler'] = '5.1.0';
164+
dependencies['@angular/compiler-cli'] = '5.1.0';
164165
dependencies['@angular/platform-browser'] = '5.1.0';
165166
dependencies['rxjs'] = '5.5.0';
166167
dependencies['zone.js'] = '0.8.26';
168+
dependencies['typescript'] = '2.4.2';
167169
host.sync.write(
168170
normalize('/package.json'),
169171
virtualFs.stringToFileBuffer(JSON.stringify(packageJson)),
@@ -176,6 +178,9 @@ describe('@schematics/update', () => {
176178
map(tree => {
177179
const packageJson = JSON.parse(tree.readContent('/package.json'));
178180
expect(packageJson['dependencies']['@angular/core'][0]).toBe('6');
181+
expect(packageJson['dependencies']['rxjs'][0]).toBe('6');
182+
expect(packageJson['dependencies']['typescript'][0]).toBe('2');
183+
expect(packageJson['dependencies']['typescript'][2]).toBe('7');
179184

180185
// Check install task.
181186
expect(schematicRunner.tasks).toEqual([

0 commit comments

Comments
 (0)