From 2143ea5e3078d77ccccf701fcbb25847b1b16344 Mon Sep 17 00:00:00 2001 From: Colum Ferry Date: Fri, 20 Dec 2024 13:40:40 +0000 Subject: [PATCH] fix(angular): set up host and remote ssr apps correctly #29442 (#29447) ## Current Behavior During the update to support Angular 19, the host and remote generators' `updateSsrSetup` function was missed. This led to the creation of a second `server.ts` file, which would result in the node server trying to instantiate twice. ## Expected Behavior Fix the path normalization dependent on angular major version to ensure only one server will be instantiated. ## Related Issue(s) Fixes #29442 --- .../host/__snapshots__/host.spec.ts.snap | 8 ++++---- packages/angular/src/generators/host/host.spec.ts | 8 ++++---- .../src/generators/host/lib/update-ssr-setup.ts | 15 ++++++++++----- .../remote/__snapshots__/remote.spec.ts.snap | 4 ++-- .../src/generators/remote/lib/update-ssr-setup.ts | 13 +++++++++---- .../angular/src/generators/remote/remote.spec.ts | 4 ++-- 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/packages/angular/src/generators/host/__snapshots__/host.spec.ts.snap b/packages/angular/src/generators/host/__snapshots__/host.spec.ts.snap index 0c1f6b2d10..92d9ebe598 100644 --- a/packages/angular/src/generators/host/__snapshots__/host.spec.ts.snap +++ b/packages/angular/src/generators/host/__snapshots__/host.spec.ts.snap @@ -158,7 +158,7 @@ export default AppServerModule; `; exports[`Host App Generator --ssr should generate the correct files 5`] = ` -"import('./src/main.server'); +"import('./main.server'); " `; @@ -350,7 +350,7 @@ export default bootstrap; `; exports[`Host App Generator --ssr should generate the correct files for standalone 4`] = ` -"import('./src/main.server'); +"import('./main.server'); " `; @@ -573,7 +573,7 @@ export default bootstrap; " `; -exports[`Host App Generator --ssr should generate the correct files for standalone when --typescript=true 4`] = `"import('./src/main.server');"`; +exports[`Host App Generator --ssr should generate the correct files for standalone when --typescript=true 4`] = `"import('./main.server');"`; exports[`Host App Generator --ssr should generate the correct files for standalone when --typescript=true 5`] = ` "import { ModuleFederationConfig } from '@nx/module-federation'; @@ -815,7 +815,7 @@ export default AppServerModule; " `; -exports[`Host App Generator --ssr should generate the correct files when --typescript=true 5`] = `"import('./src/main.server');"`; +exports[`Host App Generator --ssr should generate the correct files when --typescript=true 5`] = `"import('./main.server');"`; exports[`Host App Generator --ssr should generate the correct files when --typescript=true 6`] = ` "import { ModuleFederationConfig } from '@nx/module-federation'; diff --git a/packages/angular/src/generators/host/host.spec.ts b/packages/angular/src/generators/host/host.spec.ts index 61aaf9333b..fef21ca90d 100644 --- a/packages/angular/src/generators/host/host.spec.ts +++ b/packages/angular/src/generators/host/host.spec.ts @@ -365,7 +365,7 @@ describe('Host App Generator', () => { tree.read(`test/src/bootstrap.server.ts`, 'utf-8') ).toMatchSnapshot(); expect(tree.read(`test/src/main.server.ts`, 'utf-8')).toMatchSnapshot(); - expect(tree.read(`test/server.ts`, 'utf-8')).toMatchSnapshot(); + expect(tree.read(`test/src/server.ts`, 'utf-8')).toMatchSnapshot(); expect( tree.read(`test/module-federation.config.js`, 'utf-8') ).toMatchSnapshot(); @@ -402,7 +402,7 @@ describe('Host App Generator', () => { tree.read(`test/src/bootstrap.server.ts`, 'utf-8') ).toMatchSnapshot(); expect(tree.read(`test/src/main.server.ts`, 'utf-8')).toMatchSnapshot(); - expect(tree.read(`test/server.ts`, 'utf-8')).toMatchSnapshot(); + expect(tree.read(`test/src/server.ts`, 'utf-8')).toMatchSnapshot(); expect( tree.read(`test/module-federation.config.ts`, 'utf-8') ).toMatchSnapshot(); @@ -435,7 +435,7 @@ describe('Host App Generator', () => { tree.read(`test/src/bootstrap.server.ts`, 'utf-8') ).toMatchSnapshot(); expect(tree.read(`test/src/main.server.ts`, 'utf-8')).toMatchSnapshot(); - expect(tree.read(`test/server.ts`, 'utf-8')).toMatchSnapshot(); + expect(tree.read(`test/src/server.ts`, 'utf-8')).toMatchSnapshot(); expect( tree.read(`test/module-federation.config.js`, 'utf-8') ).toMatchSnapshot(); @@ -475,7 +475,7 @@ describe('Host App Generator', () => { tree.read(`test/src/bootstrap.server.ts`, 'utf-8') ).toMatchSnapshot(); expect(tree.read(`test/src/main.server.ts`, 'utf-8')).toMatchSnapshot(); - expect(tree.read(`test/server.ts`, 'utf-8')).toMatchSnapshot(); + expect(tree.read(`test/src/server.ts`, 'utf-8')).toMatchSnapshot(); expect( tree.read(`test/module-federation.config.ts`, 'utf-8') ).toMatchSnapshot(); diff --git a/packages/angular/src/generators/host/lib/update-ssr-setup.ts b/packages/angular/src/generators/host/lib/update-ssr-setup.ts index 39ac0346ec..1b0be84c28 100644 --- a/packages/angular/src/generators/host/lib/update-ssr-setup.ts +++ b/packages/angular/src/generators/host/lib/update-ssr-setup.ts @@ -21,18 +21,23 @@ export async function updateSsrSetup( appName: string, typescriptConfiguration: boolean ) { + const { major: angularMajorVersion } = getInstalledAngularVersionInfo(tree); let project = readProjectConfiguration(tree, appName); tree.rename( joinPathFragments(project.sourceRoot, 'main.server.ts'), joinPathFragments(project.sourceRoot, 'bootstrap.server.ts') ); - tree.write( - joinPathFragments(project.root, 'server.ts'), - "import('./src/main.server');" + const pathToServerEntry = joinPathFragments( + angularMajorVersion >= 19 + ? project.sourceRoot ?? joinPathFragments(project.root, 'src') + : project.root, + 'server.ts' + ); + tree.write( + pathToServerEntry, + `import('./${angularMajorVersion >= 19 ? '' : 'src/'}main.server');` ); - - const { major: angularMajorVersion } = getInstalledAngularVersionInfo(tree); generateFiles(tree, join(__dirname, '../files/common'), project.root, { appName, diff --git a/packages/angular/src/generators/remote/__snapshots__/remote.spec.ts.snap b/packages/angular/src/generators/remote/__snapshots__/remote.spec.ts.snap index e5f87b7a1c..206398909b 100644 --- a/packages/angular/src/generators/remote/__snapshots__/remote.spec.ts.snap +++ b/packages/angular/src/generators/remote/__snapshots__/remote.spec.ts.snap @@ -125,7 +125,7 @@ export default AppServerModule; `; exports[`MF Remote App Generator --ssr should generate the correct files 5`] = ` -"import('./src/main.server'); +"import('./main.server'); " `; @@ -357,7 +357,7 @@ export default AppServerModule; " `; -exports[`MF Remote App Generator --ssr should generate the correct files when --typescriptConfiguration=true 5`] = `"import('./src/main.server');"`; +exports[`MF Remote App Generator --ssr should generate the correct files when --typescriptConfiguration=true 5`] = `"import('./main.server');"`; exports[`MF Remote App Generator --ssr should generate the correct files when --typescriptConfiguration=true 6`] = ` "import { ModuleFederationConfig } from '@nx/module-federation'; diff --git a/packages/angular/src/generators/remote/lib/update-ssr-setup.ts b/packages/angular/src/generators/remote/lib/update-ssr-setup.ts index 70245e12f6..e8c1459338 100644 --- a/packages/angular/src/generators/remote/lib/update-ssr-setup.ts +++ b/packages/angular/src/generators/remote/lib/update-ssr-setup.ts @@ -30,6 +30,7 @@ export async function updateSsrSetup( skipPackageJson?: boolean; } ) { + const { major: angularMajorVersion } = getInstalledAngularVersionInfo(tree); let project = readProjectConfiguration(tree, appName); tree.rename( @@ -37,9 +38,15 @@ export async function updateSsrSetup( joinPathFragments(project.sourceRoot, 'bootstrap.server.ts') ); + const pathToServerEntry = joinPathFragments( + angularMajorVersion >= 19 + ? project.sourceRoot ?? joinPathFragments(project.root, 'src') + : project.root, + 'server.ts' + ); tree.write( - joinPathFragments(project.root, 'server.ts'), - "import('./src/main.server');" + pathToServerEntry, + `import('./${angularMajorVersion >= 19 ? '' : 'src/'}main.server');` ); const browserBundleOutput = project.targets.build.options.outputPath; @@ -48,8 +55,6 @@ export async function updateSsrSetup( '/server' ); - const { major: angularMajorVersion } = getInstalledAngularVersionInfo(tree); - generateFiles(tree, join(__dirname, '../files/common'), project.root, { appName, browserBundleOutput, diff --git a/packages/angular/src/generators/remote/remote.spec.ts b/packages/angular/src/generators/remote/remote.spec.ts index 870e609c86..5647dc6ceb 100644 --- a/packages/angular/src/generators/remote/remote.spec.ts +++ b/packages/angular/src/generators/remote/remote.spec.ts @@ -329,7 +329,7 @@ describe('MF Remote App Generator', () => { tree.read(`test/src/bootstrap.server.ts`, 'utf-8') ).toMatchSnapshot(); expect(tree.read(`test/src/main.server.ts`, 'utf-8')).toMatchSnapshot(); - expect(tree.read(`test/server.ts`, 'utf-8')).toMatchSnapshot(); + expect(tree.read(`test/src/server.ts`, 'utf-8')).toMatchSnapshot(); expect( tree.read(`test/module-federation.config.js`, 'utf-8') ).toMatchSnapshot(); @@ -378,7 +378,7 @@ describe('MF Remote App Generator', () => { tree.read(`test/src/bootstrap.server.ts`, 'utf-8') ).toMatchSnapshot(); expect(tree.read(`test/src/main.server.ts`, 'utf-8')).toMatchSnapshot(); - expect(tree.read(`test/server.ts`, 'utf-8')).toMatchSnapshot(); + expect(tree.read(`test/src/server.ts`, 'utf-8')).toMatchSnapshot(); expect( tree.read(`test/module-federation.config.ts`, 'utf-8') ).toMatchSnapshot();