From ef5a110f2999f0d56c6e2e6daaf63bfd0497bff5 Mon Sep 17 00:00:00 2001
From: "Braden M. Kelley" <redbmk@gmail.com>
Date: Fri, 9 Oct 2020 08:11:13 -0700
Subject: [PATCH] allow homepage to provide a full URL in production

Fixes #8813
---
 .../__tests__/getPublicUrlOrPath.test.js      | 20 +++++++++++++++++--
 .../react-dev-utils/getPublicUrlOrPath.js     | 10 ++++------
 2 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/packages/react-dev-utils/__tests__/getPublicUrlOrPath.test.js b/packages/react-dev-utils/__tests__/getPublicUrlOrPath.test.js
index 9e9677edc..505a9e131 100644
--- a/packages/react-dev-utils/__tests__/getPublicUrlOrPath.test.js
+++ b/packages/react-dev-utils/__tests__/getPublicUrlOrPath.test.js
@@ -58,6 +58,12 @@ const tests = [
     homepage: '/path',
     expect: '/test/',
   },
+  {
+    dev: true,
+    publicUrl: '/path',
+    homepage: 'https://create-react-app.dev/test',
+    expect: '/path/',
+  },
 
   // PRODUCTION with homepage
   { dev: false, homepage: '/', expect: '/' },
@@ -67,11 +73,15 @@ const tests = [
   { dev: false, homepage: '../', expect: '../' },
   { dev: false, homepage: '../test', expect: '../test/' },
   { dev: false, homepage: './test/path', expect: './test/path/' },
-  { dev: false, homepage: 'https://create-react-app.dev/', expect: '/' },
+  {
+    dev: false,
+    homepage: 'https://create-react-app.dev/',
+    expect: 'https://create-react-app.dev/',
+  },
   {
     dev: false,
     homepage: 'https://create-react-app.dev/test',
-    expect: '/test/',
+    expect: 'https://create-react-app.dev/test/',
   },
   // PRODUCTION with publicUrl
   { dev: false, publicUrl: '/', expect: '/' },
@@ -116,6 +126,12 @@ const tests = [
     homepage: '/path',
     expect: 'https://create-react-app.dev/test/',
   },
+  {
+    dev: false,
+    publicUrl: '/path',
+    homepage: 'https://create-react-app.dev/test',
+    expect: '/path/',
+  },
 ];
 
 describe('getPublicUrlOrPath', () => {
diff --git a/packages/react-dev-utils/getPublicUrlOrPath.js b/packages/react-dev-utils/getPublicUrlOrPath.js
index dbb7cda5a..f8c064354 100644
--- a/packages/react-dev-utils/getPublicUrlOrPath.js
+++ b/packages/react-dev-utils/getPublicUrlOrPath.js
@@ -49,16 +49,14 @@ function getPublicUrlOrPath(isEnvDevelopment, homepage, envPublicUrl) {
     homepage = homepage.endsWith('/') ? homepage : homepage + '/';
 
     // validate if `homepage` is a URL or path like and use just pathname
-    const validHomepagePathname = new URL(homepage, stubDomain).pathname;
+    const validHomepage = new URL(homepage, stubDomain);
     return isEnvDevelopment
       ? homepage.startsWith('.')
         ? '/'
-        : validHomepagePathname
+        : validHomepage.pathname
       : // Some apps do not use client-side routing with pushState.
-      // For these, "homepage" can be set to "." to enable relative asset paths.
-      homepage.startsWith('.')
-      ? homepage
-      : validHomepagePathname;
+        // For these, "homepage" can be set to "." to enable relative asset paths.
+        homepage;
   }
 
   return '/';
-- 
GitLab