From 16c7c84b7c370ba64999cf50a7bc5a194f95584b Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 13 Jan 2021 09:49:18 +0100 Subject: [PATCH] feat(aspnetcore-engine): support .NET Core version 3 .NET Core version 3 users use the `completeHTML` property instead of `html` to avoid the below error. ``` InvalidOperationException: Globals is not supported when prerendering via UseSpaPrerendering(). Instead, your prerendering logic should return a complete HTML page, in which you embed any information you wish to return to the client. ``` .NET Core 3 usage examples ``` export default createServerRenderer(async params => { // Platform-server provider configuration const setupOptions: IEngineOptions = { appSelector: '', ngModule: AppServerModule, document: params.data.originalHtml, request: params, providers: [ ... ] }; const { completeHTML } = await ngAspnetCoreEngine(setupOptions); return { html: completeHTML }; }); ``` --- modules/aspnetcore-engine/README.md | 2 +- modules/aspnetcore-engine/src/interfaces/engine-options.ts | 3 ++- .../aspnetcore-engine/src/interfaces/engine-render-result.ts | 1 + modules/aspnetcore-engine/src/main.ts | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/aspnetcore-engine/README.md b/modules/aspnetcore-engine/README.md index 395818c2c..9cd19ca2a 100644 --- a/modules/aspnetcore-engine/README.md +++ b/modules/aspnetcore-engine/README.md @@ -7,7 +7,7 @@ This is an ASP.NET Core Engine for running Angular Apps on the server for server ## Installation ```bash -npm i --S @nguniversal/aspnetcore-engine +npm i --S @nguniversal/aspnetcore-engine @nguniversal/common-engine # or yarn install ``` diff --git a/modules/aspnetcore-engine/src/interfaces/engine-options.ts b/modules/aspnetcore-engine/src/interfaces/engine-options.ts index 8b04394ae..f9dda259d 100644 --- a/modules/aspnetcore-engine/src/interfaces/engine-options.ts +++ b/modules/aspnetcore-engine/src/interfaces/engine-options.ts @@ -6,9 +6,10 @@ * found in the LICENSE file at https://angular.io/license */ import { NgModuleFactory, StaticProvider, Type } from '@angular/core'; +import { ɵRenderOptions as RenderOptions } from '@nguniversal/common/engine'; import { IRequestParams } from './request-params'; -export interface IEngineOptions { +export interface IEngineOptions extends Pick { appSelector: string; // e.g., request: IRequestParams; // e.g., params url?: string; // e.g., http://testhost.com diff --git a/modules/aspnetcore-engine/src/interfaces/engine-render-result.ts b/modules/aspnetcore-engine/src/interfaces/engine-render-result.ts index fad8e772e..7a085f1a2 100644 --- a/modules/aspnetcore-engine/src/interfaces/engine-render-result.ts +++ b/modules/aspnetcore-engine/src/interfaces/engine-render-result.ts @@ -7,6 +7,7 @@ */ export interface IEngineRenderResult { + completeHTML: string; html: string; globals: { styles: string; diff --git a/modules/aspnetcore-engine/src/main.ts b/modules/aspnetcore-engine/src/main.ts index 76a737be2..2a9ff2378 100644 --- a/modules/aspnetcore-engine/src/main.ts +++ b/modules/aspnetcore-engine/src/main.ts @@ -49,6 +49,7 @@ function _getUniversalData(content: string, appSelector: string): IEngineRenderR } return { + completeHTML: content, // tslint:disable-next-line: no-non-null-assertion html: doc.querySelector(appSelector)!.outerHTML, globals: { @@ -76,6 +77,7 @@ export async function ngAspnetCoreEngine(options: Readonly) document: options.document || options.appSelector, providers: [...(options.providers || []), getReqResProviders(options.request.origin, options.request.data.request)], bootstrap: options.ngModule, + inlineCriticalCss: options.inlineCriticalCss, };