From 14bb5df1c1513a7991183d34e72220cb2b139cf5 Mon Sep 17 00:00:00 2001 From: Bret Little Date: Thu, 4 Apr 2024 14:00:44 -0400 Subject: [PATCH] Lowercase storefront redirects to make them case insensitive. (#1941) --- .changeset/big-impalas-brush.md | 5 +++++ .../hydrogen/src/routing/redirect.test.ts | 22 +++++++++++++++++++ packages/hydrogen/src/routing/redirect.ts | 6 ++--- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 .changeset/big-impalas-brush.md diff --git a/.changeset/big-impalas-brush.md b/.changeset/big-impalas-brush.md new file mode 100644 index 0000000000..b98dcd3d80 --- /dev/null +++ b/.changeset/big-impalas-brush.md @@ -0,0 +1,5 @@ +--- +'@shopify/hydrogen': patch +--- + +Change StorefrontRedirect to base case insensitive in querying redirect URLs from the Storefront API. diff --git a/packages/hydrogen/src/routing/redirect.test.ts b/packages/hydrogen/src/routing/redirect.test.ts index 957db82c5c..1899c6677e 100644 --- a/packages/hydrogen/src/routing/redirect.test.ts +++ b/packages/hydrogen/src/routing/redirect.test.ts @@ -46,6 +46,28 @@ describe('storefrontRedirect', () => { }); }); + it('queries the SFAPI with the url lower cased', async () => { + queryMock.mockResolvedValueOnce({ + urlRedirects: {edges: [{node: {target: shopifyDomain + '/some-page'}}]}, + }); + + await expect( + storefrontRedirect({ + storefront: storefrontMock, + request: new Request('https://domain.com/some-PAGE'), + }), + ).resolves.toEqual( + new Response(null, { + status: 301, + headers: {location: shopifyDomain + '/some-page'}, + }), + ); + + expect(queryMock).toHaveBeenCalledWith(expect.anything(), { + variables: {query: 'path:/some-page'}, + }); + }); + it('strips remix _data query parameter on soft navigations', async () => { queryMock.mockResolvedValueOnce({ urlRedirects: {edges: [{node: {target: shopifyDomain + '/some-page'}}]}, diff --git a/packages/hydrogen/src/routing/redirect.ts b/packages/hydrogen/src/routing/redirect.ts index 87b12dc9ba..932396944c 100644 --- a/packages/hydrogen/src/routing/redirect.ts +++ b/packages/hydrogen/src/routing/redirect.ts @@ -42,9 +42,9 @@ export async function storefrontRedirect( searchParams.delete('return_to'); searchParams.delete('_data'); - const redirectFrom = matchQueryParams - ? url.toString().replace(url.origin, '') - : pathname; + const redirectFrom = ( + matchQueryParams ? url.toString().replace(url.origin, '') : pathname + ).toLowerCase(); if (url.pathname === '/admin' && !noAdminRedirect) { return createRedirectResponse(