From 1742da9f0dff28f0b370da53fc97273520fa90a7 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Mon, 13 May 2019 10:37:27 +0200 Subject: [PATCH] fix(@schematics/angular): differential loading migration should run only for projects using `@angular-devkit/build-angular:browser` Differential loading migration should run only when the project is using `@angular-devkit/build-angular:browser` as it's browser builder. Otherwise we might break applications that are using different builders. Fixes #14389 --- .../update-8/differential-loading.ts | 26 ++++++++++++------- .../update-8/differential-loading_spec.ts | 14 ++++++++++ 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/packages/schematics/angular/migrations/update-8/differential-loading.ts b/packages/schematics/angular/migrations/update-8/differential-loading.ts index 8daf53941bef..ff565c60d29d 100644 --- a/packages/schematics/angular/migrations/update-8/differential-loading.ts +++ b/packages/schematics/angular/migrations/update-8/differential-loading.ts @@ -97,20 +97,26 @@ function updateProjects(): Rule { } // Older projects app and spec ts configs had script and module set in them. - const tsConfigs = []; const architect = project.architect; - if (isJsonObject(architect) + if (!(isJsonObject(architect) && isJsonObject(architect.build) - && isJsonObject(architect.build.options) - && typeof architect.build.options.tsConfig === 'string') { - tsConfigs.push(architect.build.options.tsConfig); + && architect.build.builder === '@angular-devkit/build-angular:browser') + ) { + // Skip projects who's build builder is not build-angular:browser + continue; + } + + const tsConfigs = []; + const buildOptionsConfig = architect.build.options; + if (isJsonObject(buildOptionsConfig) && typeof buildOptionsConfig.tsConfig === 'string') { + tsConfigs.push(buildOptionsConfig.tsConfig); } - if (isJsonObject(architect) - && isJsonObject(architect.test) - && isJsonObject(architect.test.options) - && typeof architect.test.options.tsConfig === 'string') { - tsConfigs.push(architect.test.options.tsConfig); + const testConfig = architect.test; + if (isJsonObject(testConfig) + && isJsonObject(testConfig.options) + && typeof testConfig.options.tsConfig === 'string') { + tsConfigs.push(testConfig.options.tsConfig); } for (const tsConfig of tsConfigs) { diff --git a/packages/schematics/angular/migrations/update-8/differential-loading_spec.ts b/packages/schematics/angular/migrations/update-8/differential-loading_spec.ts index 10d94f6d55dc..92ddab277791 100644 --- a/packages/schematics/angular/migrations/update-8/differential-loading_spec.ts +++ b/packages/schematics/angular/migrations/update-8/differential-loading_spec.ts @@ -113,5 +113,19 @@ describe('Migration to version 8', () => { expect(specsCompilerOptions.target).toBeUndefined(); expect(specsCompilerOptions.module).toBeUndefined(); }); + + it(`should not update projects which browser builder is not 'build-angular:browser'`, () => { + tree.delete('/browserslist'); + const config = JSON.parse(tree.readContent('angular.json')); + config + .projects['migration-test'] + .architect + .build + .builder = '@dummy/builders:browser'; + + tree.overwrite('angular.json', JSON.stringify(config)); + const tree2 = schematicRunner.runSchematic('migration-07', {}, tree.branch()); + expect(tree2.exists('/browserslist')).toBe(false); + }); }); });