From 68c5b92792323cfb5ac893ccc72cba33958cec33 Mon Sep 17 00:00:00 2001 From: Aaron Moore Date: Fri, 18 Oct 2024 15:02:22 +0100 Subject: [PATCH] Lite anchor transform only WS services (#12059) * Lite anchor transform only WS services * Update transformAnchorTags.ts * Update index.test.ts --- .../litePageTransforms/index.test.ts | 28 +++++++++++++++---- .../litePageTransforms/transformAnchorTags.ts | 18 ++++++++++-- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/server/Document/Renderers/litePageTransforms/index.test.ts b/src/server/Document/Renderers/litePageTransforms/index.test.ts index 9de7c4f5cc9..b97cc83fc3e 100644 --- a/src/server/Document/Renderers/litePageTransforms/index.test.ts +++ b/src/server/Document/Renderers/litePageTransforms/index.test.ts @@ -5,6 +5,8 @@ describe('litePageTransforms', () => { it('should append .lite suffix to valid hrefs', () => { const html = ` News + News + News News News `; @@ -13,13 +15,15 @@ describe('litePageTransforms', () => { expect(modifiedHtml).toEqual(` News + News + News News News `); }); it('should not append .lite suffix to invalid hrefs', () => { - const html = ` + const originalHtml = ` News News News @@ -27,17 +31,29 @@ describe('litePageTransforms', () => { News `; - const modifiedHtml = litePageTransforms(html); + const modifiedHtml = litePageTransforms(originalHtml); + + expect(modifiedHtml).toEqual(originalHtml); + }); - expect(modifiedHtml).toEqual(html); + it('should not append .lite suffix to an invalid "service"', () => { + const originalHtml = ` + Future + Food + Weather + `; + + const modifiedHtml = litePageTransforms(originalHtml); + + expect(modifiedHtml).toEqual(originalHtml); }); it('should not append .lite suffix when no anchor tags are present', () => { - const html = '

I am a paragraph

'; + const originalHtml = '

I am a paragraph

'; - const modifiedHtml = litePageTransforms(html); + const modifiedHtml = litePageTransforms(originalHtml); - expect(modifiedHtml).toEqual(html); + expect(modifiedHtml).toEqual(originalHtml); }); }); }); diff --git a/src/server/Document/Renderers/litePageTransforms/transformAnchorTags.ts b/src/server/Document/Renderers/litePageTransforms/transformAnchorTags.ts index 4a67a87635f..f168a818d07 100644 --- a/src/server/Document/Renderers/litePageTransforms/transformAnchorTags.ts +++ b/src/server/Document/Renderers/litePageTransforms/transformAnchorTags.ts @@ -1,3 +1,8 @@ +import { Services } from '#app/models/types/global'; +import services from '#lib/config/services/loadableConfig'; + +const SERVICES = Object.keys(services) as Services[]; + const VALID_DOMAINS = [ '/', 'localhost', @@ -15,9 +20,18 @@ const isValidHref = (href: string) => { const extension = url?.pathname?.split('.')?.pop() || ''; const startsWithHash = href?.startsWith('#'); + const hasReservedRouteExtension = + RESERVED_ROUTE_EXTENSIONS.includes(extension); + + const isValidDomain = VALID_DOMAINS.includes(url.hostname); + const isWsService = SERVICES.includes( + url?.pathname?.split('/')?.[1] as Services, + ); + return ( - VALID_DOMAINS.includes(url.hostname) && - !RESERVED_ROUTE_EXTENSIONS.includes(extension) && + isValidDomain && + isWsService && + !hasReservedRouteExtension && !startsWithHash ); };