From 086fe4aee9c1c78f48f8e10cf6fa6847cbd180f5 Mon Sep 17 00:00:00 2001 From: jsbalrog Date: Thu, 29 Jan 2026 15:05:28 -0700 Subject: [PATCH 1/3] fix: update manifest query param issue for PWAs --- packages/react-scripts/layout/views/layout.ejs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/react-scripts/layout/views/layout.ejs b/packages/react-scripts/layout/views/layout.ejs index 39b2a49a20..e8c9087dd5 100644 --- a/packages/react-scripts/layout/views/layout.ejs +++ b/packages/react-scripts/layout/views/layout.ejs @@ -19,7 +19,12 @@ <% if (typeof manifestJsonExists === 'undefined' || manifestJsonExists) { %> - + <% + var manifestPath = typeof appPathOverride !== 'undefined' ? appPathOverride : appPath(''); + // Strip query parameters for manifest path to avoid malformed URLs like /africa?lang=en/manifest.json + manifestPath = manifestPath.split('?')[0]; + %> + <% } %> From 9fd0b5e2617e9e3cd2f106cd99d274fbafa5f360 Mon Sep 17 00:00:00 2001 From: jsbalrog Date: Mon, 9 Feb 2026 09:49:00 -0700 Subject: [PATCH 2/3] Update to use URL constructor --- packages/react-scripts/layout/views/layout.ejs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/react-scripts/layout/views/layout.ejs b/packages/react-scripts/layout/views/layout.ejs index e8c9087dd5..db298f04d8 100644 --- a/packages/react-scripts/layout/views/layout.ejs +++ b/packages/react-scripts/layout/views/layout.ejs @@ -20,11 +20,12 @@ <% if (typeof manifestJsonExists === 'undefined' || manifestJsonExists) { %> <% - var manifestPath = typeof appPathOverride !== 'undefined' ? appPathOverride : appPath(''); - // Strip query parameters for manifest path to avoid malformed URLs like /africa?lang=en/manifest.json - manifestPath = manifestPath.split('?')[0]; + // Construct manifest URL using URL constructor to extract relative path with query params + // e.g., http://localhost:5006/africa?lang=en/manifest.json becomes /africa/manifest.json?lang=en + var url = new URL(appPath('/manifest.json')); + var manifestUrl = url.pathname + url.search; %> - + <% } %> From 1ae84a8936e2d3ae06385db8d6d2ce3821aeb95f Mon Sep 17 00:00:00 2001 From: jsbalrog Date: Fri, 13 Feb 2026 11:04:12 -0700 Subject: [PATCH 3/3] Restore consideration of appPathOverride --- packages/react-scripts/layout/views/layout.ejs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/layout/views/layout.ejs b/packages/react-scripts/layout/views/layout.ejs index db298f04d8..5b5878187f 100644 --- a/packages/react-scripts/layout/views/layout.ejs +++ b/packages/react-scripts/layout/views/layout.ejs @@ -21,8 +21,11 @@ <% if (typeof manifestJsonExists === 'undefined' || manifestJsonExists) { %> <% // Construct manifest URL using URL constructor to extract relative path with query params - // e.g., http://localhost:5006/africa?lang=en/manifest.json becomes /africa/manifest.json?lang=en - var url = new URL(appPath('/manifest.json')); + // Supports both normal app paths and appPathOverride for special routing scenarios + // e.g., http://localhost:5006/africa?lang=en becomes /africa/manifest.json?lang=en + var basePath = typeof appPathOverride !== 'undefined' ? appPathOverride : appPath(''); + var url = new URL(basePath); + url.pathname = url.pathname.replace(/\/$/, '') + '/manifest.json'; var manifestUrl = url.pathname + url.search; %>