From ad014c7d9b6ecca2c8a74c280e17055067bfdbac Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Fri, 20 Sep 2024 14:05:57 +0000 Subject: [PATCH] refactor(@angular/ssr): update `HtmlTransformHandler` type to include URL parameter Modified the `HtmlTransformHandler` type to accept a context object containing a URL and HTML content. This change supports the `html:transform:pre` hook, enhancing the handler's capability to process transformations based on the request URL. --- packages/angular/ssr/src/app.ts | 4 ++-- packages/angular/ssr/src/hooks.ts | 10 +++++----- packages/angular/ssr/test/hooks_spec.ts | 5 +++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/angular/ssr/src/app.ts b/packages/angular/ssr/src/app.ts index d01b51bc4f60..8d03aea00e93 100644 --- a/packages/angular/ssr/src/app.ts +++ b/packages/angular/ssr/src/app.ts @@ -215,7 +215,7 @@ export class AngularServerApp { let html = await assets.getIndexServerHtml(); // Skip extra microtask if there are no pre hooks. if (hooks.has('html:transform:pre')) { - html = await hooks.run('html:transform:pre', { html }); + html = await hooks.run('html:transform:pre', { html, url }); } this.boostrap ??= await bootstrap(); @@ -223,7 +223,7 @@ export class AngularServerApp { html = await renderAngular( html, this.boostrap, - new URL(request.url), + url, platformProviders, SERVER_CONTEXT_VALUE[renderMode], ); diff --git a/packages/angular/ssr/src/hooks.ts b/packages/angular/ssr/src/hooks.ts index ab34973583b8..9b2209922fab 100644 --- a/packages/angular/ssr/src/hooks.ts +++ b/packages/angular/ssr/src/hooks.ts @@ -7,13 +7,13 @@ */ /** - * Handler function type for HTML transformation hooks. - * It takes an object containing the HTML content to be modified. + * Defines a handler function type for transforming HTML content. + * This function receives an object with the HTML to be processed. * - * @param ctx - The context object containing the HTML content. - * @returns The modified HTML content or a promise that resolves to the modified HTML content. + * @param ctx - An object containing the URL and HTML content to be transformed. + * @returns The transformed HTML as a string or a promise that resolves to the transformed HTML. */ -type HtmlTransformHandler = (ctx: { html: string }) => string | Promise; +type HtmlTransformHandler = (ctx: { url: URL; html: string }) => string | Promise; /** * Defines the names of available hooks for registering and triggering custom logic within the application. diff --git a/packages/angular/ssr/test/hooks_spec.ts b/packages/angular/ssr/test/hooks_spec.ts index ea2e32f87590..7d27b2a7efdc 100644 --- a/packages/angular/ssr/test/hooks_spec.ts +++ b/packages/angular/ssr/test/hooks_spec.ts @@ -10,6 +10,7 @@ import { Hooks } from '../src/hooks'; describe('Hooks', () => { let hooks: Hooks & { run: Function }; + const url = new URL('http://example.com/'); beforeEach(() => { hooks = new Hooks() as Hooks & { run: Function }; @@ -33,12 +34,12 @@ describe('Hooks', () => { hooks.on('html:transform:pre', ({ html }) => html + '1'); hooks.on('html:transform:pre', ({ html }) => html + '2'); - const result = await hooks.run('html:transform:pre', { html: 'start' }); + const result = await hooks.run('html:transform:pre', { html: 'start', url }); expect(result).toBe('start12'); }); it('should return the context html if no hooks are registered', async () => { - const result = await hooks.run('html:transform:pre', { html: 'start' }); + const result = await hooks.run('html:transform:pre', { html: 'start', url }); expect(result).toBe('start'); });