fix(angular): do not wrap bootstrap call when setting up ssr in workspaces with angular >= 15.2.0 (#16714)

This commit is contained in:
Leosvel Pérez Espinosa 2023-05-03 10:58:01 +01:00 committed by GitHub
parent 68c262d933
commit ae89df9482
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 70 additions and 48 deletions

View File

@ -22,21 +22,7 @@ export class AppModule {}
`;
exports[`Host App Generator --ssr should generate the correct files 2`] = `
"import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
function bootstrap() {
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch((err) => console.error(err));
}
if (document.readyState !== 'loading') {
bootstrap();
} else {
document.addEventListener('DOMContentLoaded', bootstrap);
}
"import('./bootstrap').catch((err) => console.error(err));
"
`;

View File

@ -1,16 +0,0 @@
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
function bootstrap() {
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch((err) => console.error(err));
};
if (document.readyState !== 'loading') {
bootstrap();
} else {
document.addEventListener('DOMContentLoaded', bootstrap);
}

View File

@ -0,0 +1,14 @@
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
function bootstrap() {
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch((err) => console.error(err));
}
if (document.readyState !== 'loading') {
bootstrap();
} else {
document.addEventListener('DOMContentLoaded', bootstrap);
}

View File

@ -4,8 +4,12 @@ import {
joinPathFragments,
readProjectConfiguration,
} from '@nx/devkit';
import { getInstalledAngularMajorVersion } from '../../utils/version-utils';
import {
getInstalledAngularMajorVersion,
getInstalledAngularVersionInfo,
} from '../../utils/version-utils';
import type { Schema } from '../schema';
import { lt } from 'semver';
export function generateSSRFiles(tree: Tree, schema: Schema) {
const projectRoot = readProjectConfiguration(tree, schema.project).root;
@ -17,7 +21,8 @@ export function generateSSRFiles(tree: Tree, schema: Schema) {
{ ...schema, tpl: '' }
);
const angularMajorVersion = getInstalledAngularMajorVersion(tree);
const { major: angularMajorVersion, version: angularVersion } =
getInstalledAngularVersionInfo(tree);
if (angularMajorVersion < 15) {
generateFiles(
tree,
@ -26,4 +31,13 @@ export function generateSSRFiles(tree: Tree, schema: Schema) {
{ ...schema, tpl: '' }
);
}
if (lt(angularVersion, '15.2.0')) {
generateFiles(
tree,
joinPathFragments(__dirname, '..', 'files', 'pre-v15-2'),
projectRoot,
{ ...schema, tpl: '' }
);
}
}

View File

@ -35,20 +35,11 @@ describe('setupSSR', () => {
`);
expect(tree.read('apps/app1/src/main.ts', 'utf-8')).toMatchInlineSnapshot(`
"import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
function bootstrap() {
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch((err) => console.error(err));
}
if (document.readyState !== 'loading') {
bootstrap();
} else {
document.addEventListener('DOMContentLoaded', bootstrap);
}
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch((err) => console.error(err));
"
`);
expect(tree.read('apps/app1/tsconfig.server.json', 'utf-8'))
@ -220,5 +211,40 @@ describe('setupSSR', () => {
"
`);
});
it('should wrap bootstrap call for Angular versions lower than 15.2', async () => {
// ARRANGE
const tree = createTreeWithEmptyWorkspace({ layout: 'apps-libs' });
await generateTestApplication(tree, {
name: 'app1',
});
updateJson(tree, 'package.json', (json) => ({
...json,
dependencies: { '@angular/core': '15.1.0' },
}));
// ACT
await setupSsr(tree, { project: 'app1' });
// ASSERT
expect(tree.read('apps/app1/src/main.ts', 'utf-8'))
.toMatchInlineSnapshot(`
"import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
function bootstrap() {
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch((err) => console.error(err));
}
if (document.readyState !== 'loading') {
bootstrap();
} else {
document.addEventListener('DOMContentLoaded', bootstrap);
}
"
`);
});
});
});

View File

@ -78,8 +78,6 @@ describe('updateFileServerExecutor', () => {
addProjectConfiguration(tree, 'test', project);
// ACT
expect(async () => {
await updateFileServerExecutor(tree);
}).not.toThrow();
await expect(updateFileServerExecutor(tree)).resolves.not.toThrow();
});
});