From c35b13dd2631fc1b8ef25dae690dab2274794dbb Mon Sep 17 00:00:00 2001 From: Jonathan Wagner <19970319+john-waitforit@users.noreply.github.com> Date: Thu, 12 May 2022 20:30:33 +0200 Subject: [PATCH] fix(react): migrations should not crash when adding development configuration (#10261) --- ...default-development-configurations.spec.ts | 37 ++++++++++++++++ .../add-default-development-configurations.ts | 2 + ...default-development-configurations.spec.ts | 43 +++++++++++++++++++ .../add-default-development-configurations.ts | 2 + 4 files changed, 84 insertions(+) diff --git a/packages/next/src/migrations/update-14-0-0/add-default-development-configurations.spec.ts b/packages/next/src/migrations/update-14-0-0/add-default-development-configurations.spec.ts index bb30ba83601c0..de8f931793497 100644 --- a/packages/next/src/migrations/update-14-0-0/add-default-development-configurations.spec.ts +++ b/packages/next/src/migrations/update-14-0-0/add-default-development-configurations.spec.ts @@ -42,6 +42,43 @@ describe('React default development configuration', () => { }); }); + it('should add development configuration if no configurations at all', async () => { + const tree = createTreeWithEmptyWorkspace(2); + addProjectConfiguration( + tree, + 'example', + { + root: 'apps/example', + projectType: 'application', + targets: { + build: { + executor: '@nrwl/next:build', + defaultConfiguration: 'production', + configurations: { production: {} }, + }, + serve: { + executor: '@nrwl/next:server', + }, + }, + }, + true + ); + + await update(tree); + + const config = readProjectConfiguration(tree, 'example'); + + expect(config.targets.build.defaultConfiguration).toEqual('production'); + expect(config.targets.build.configurations.production).toEqual({}); + expect(config.targets.build.configurations.development).toEqual({}); + + expect(config.targets.serve.defaultConfiguration).toEqual('development'); + expect(config.targets.serve.configurations.development).toEqual({ + buildTarget: `example:build:development`, + dev: true, + }); + }); + it('should work without targets', async () => { const tree = createTreeWithEmptyWorkspace(2); addProjectConfiguration( diff --git a/packages/next/src/migrations/update-14-0-0/add-default-development-configurations.ts b/packages/next/src/migrations/update-14-0-0/add-default-development-configurations.ts index 79ac33f5e1a1c..0242eba1711c6 100644 --- a/packages/next/src/migrations/update-14-0-0/add-default-development-configurations.ts +++ b/packages/next/src/migrations/update-14-0-0/add-default-development-configurations.ts @@ -13,12 +13,14 @@ export async function update(tree: Tree) { if (config.targets?.build?.executor === '@nrwl/next:build') { shouldUpdate = true; config.targets.build.defaultConfiguration ??= 'production'; + config.targets.build.configurations ??= {}; config.targets.build.configurations.development ??= {}; } if (config.targets?.serve?.executor === '@nrwl/next:server') { shouldUpdate = true; config.targets.serve.defaultConfiguration ??= 'development'; + config.targets.serve.configurations ??= {}; config.targets.serve.configurations.development ??= { buildTarget: `${name}:build:development`, dev: true, diff --git a/packages/react/src/migrations/update-14-0-0/add-default-development-configurations.spec.ts b/packages/react/src/migrations/update-14-0-0/add-default-development-configurations.spec.ts index ae706d57812af..e155445028910 100644 --- a/packages/react/src/migrations/update-14-0-0/add-default-development-configurations.spec.ts +++ b/packages/react/src/migrations/update-14-0-0/add-default-development-configurations.spec.ts @@ -46,6 +46,49 @@ describe('React default development configuration', () => { }); }); + it('should add development configuration if no configurations at all', async () => { + const tree = createTreeWithEmptyWorkspace(2); + addProjectConfiguration( + tree, + 'example', + { + root: 'apps/example', + projectType: 'application', + targets: { + build: { + executor: '@nrwl/web:webpack', + defaultConfiguration: 'production', + configurations: { production: { sourceMap: false } }, + }, + serve: { + executor: '@nrwl/web:dev-server', + }, + }, + }, + true + ); + + await update(tree); + + const config = readProjectConfiguration(tree, 'example'); + + expect(config.targets.build.defaultConfiguration).toEqual('production'); + expect(config.targets.build.configurations.production).toEqual({ + sourceMap: false, + }); + expect(config.targets.build.configurations.development).toEqual({ + extractLicenses: false, + optimization: false, + sourceMap: true, + vendorChunk: true, + }); + + expect(config.targets.serve.defaultConfiguration).toEqual('development'); + expect(config.targets.serve.configurations.development).toEqual({ + buildTarget: `example:build:development`, + }); + }); + it('should work without targets', async () => { const tree = createTreeWithEmptyWorkspace(2); addProjectConfiguration( diff --git a/packages/react/src/migrations/update-14-0-0/add-default-development-configurations.ts b/packages/react/src/migrations/update-14-0-0/add-default-development-configurations.ts index b50f26e80f7db..e52d7482c8a7b 100644 --- a/packages/react/src/migrations/update-14-0-0/add-default-development-configurations.ts +++ b/packages/react/src/migrations/update-14-0-0/add-default-development-configurations.ts @@ -13,6 +13,7 @@ export async function update(tree: Tree) { if (config.targets?.build?.executor === '@nrwl/web:webpack') { shouldUpdate = true; config.targets.build.defaultConfiguration ??= 'production'; + config.targets.build.configurations ??= {}; config.targets.build.configurations.development ??= { extractLicenses: false, optimization: false, @@ -24,6 +25,7 @@ export async function update(tree: Tree) { if (config.targets?.serve?.executor === '@nrwl/web:dev-server') { shouldUpdate = true; config.targets.serve.defaultConfiguration ??= 'development'; + config.targets.serve.configurations ??= {}; config.targets.serve.configurations.development ??= { buildTarget: `${name}:build:development`, };