From 9e6266a74ab752a77731bf41926b0d205a0f2e69 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Thu, 10 Oct 2024 14:22:37 -0400 Subject: [PATCH 1/2] Fix clone response backport --- packages/next/src/server/lib/patch-fetch.ts | 30 ++++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/packages/next/src/server/lib/patch-fetch.ts b/packages/next/src/server/lib/patch-fetch.ts index 3382c3d6526e1..4264f9021f0f2 100644 --- a/packages/next/src/server/lib/patch-fetch.ts +++ b/packages/next/src/server/lib/patch-fetch.ts @@ -737,16 +737,26 @@ function createPatchedFetcher( const res: Response = await pendingRevalidate return res.clone() } - return (staticGenerationStore.pendingRevalidates[cacheKey] = - doOriginalFetch(true, cacheReasonOverride) - .then((res) => { - return res.clone() - }) - .finally(async () => { - staticGenerationStore.pendingRevalidates ??= {} - delete staticGenerationStore.pendingRevalidates[cacheKey || ''] - await handleUnlock() - })) + const pendingResponse = doOriginalFetch(true, cacheReasonOverride) + const nextRevalidate = pendingResponse + .then((res) => res.clone()) + .finally(() => { + // If the pending revalidate is not present in the store, then + // we have nothing to delete. + if (!staticGenerationStore.pendingRevalidates?.[cacheKey]) { + return + } + + delete staticGenerationStore.pendingRevalidates[cacheKey] + }) + + // Attach the empty catch here so we don't get a "unhandled promise + // rejection" warning + nextRevalidate.catch(() => {}) + + staticGenerationStore.pendingRevalidates[cacheKey] = nextRevalidate + + return pendingResponse } else { return doOriginalFetch(false, cacheReasonOverride).finally( handleUnlock From aedf05fe1db9f2bfd08151b43a5402753947e927 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Thu, 10 Oct 2024 14:29:08 -0400 Subject: [PATCH 2/2] fix type --- packages/next/src/server/lib/patch-fetch.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/next/src/server/lib/patch-fetch.ts b/packages/next/src/server/lib/patch-fetch.ts index 4264f9021f0f2..63a4dccd74920 100644 --- a/packages/next/src/server/lib/patch-fetch.ts +++ b/packages/next/src/server/lib/patch-fetch.ts @@ -741,13 +741,15 @@ function createPatchedFetcher( const nextRevalidate = pendingResponse .then((res) => res.clone()) .finally(() => { - // If the pending revalidate is not present in the store, then - // we have nothing to delete. - if (!staticGenerationStore.pendingRevalidates?.[cacheKey]) { - return - } + if (cacheKey) { + // If the pending revalidate is not present in the store, then + // we have nothing to delete. + if (!staticGenerationStore.pendingRevalidates?.[cacheKey]) { + return + } - delete staticGenerationStore.pendingRevalidates[cacheKey] + delete staticGenerationStore.pendingRevalidates[cacheKey] + } }) // Attach the empty catch here so we don't get a "unhandled promise