Skip to content

Commit 1c286dd

Browse files
ijjkhuozhi
authored andcommitted
Fix missing revalidate with notFound() (#75009)
This is follow-up to #74607 ensuring we also don't lose the revalidate value configured when `notFound()` or similar is used. x-ref: [slack thread](https://vercel.slack.com/archives/C02K2HCH5V4/p1736954974909349)
1 parent 48f2588 commit 1c286dd

File tree

3 files changed

+63
-3
lines changed

3 files changed

+63
-3
lines changed

packages/next/src/server/app-render/app-render.tsx

+12-3
Original file line numberDiff line numberDiff line change
@@ -3774,9 +3774,18 @@ async function prerenderToStream(
37743774
type: 'prerender-legacy',
37753775
phase: 'render',
37763776
implicitTags: implicitTags,
3777-
revalidate: INFINITE_CACHE,
3778-
expire: INFINITE_CACHE,
3779-
stale: INFINITE_CACHE,
3777+
revalidate:
3778+
typeof prerenderStore?.revalidate !== 'undefined'
3779+
? prerenderStore.revalidate
3780+
: INFINITE_CACHE,
3781+
expire:
3782+
typeof prerenderStore?.expire !== 'undefined'
3783+
? prerenderStore.expire
3784+
: INFINITE_CACHE,
3785+
stale:
3786+
typeof prerenderStore?.stale !== 'undefined'
3787+
? prerenderStore.stale
3788+
: INFINITE_CACHE,
37803789
tags: [...(prerenderStore?.tags || implicitTags)],
37813790
})
37823791
const errorRSCPayload = await workUnitAsyncStorage.run(

test/e2e/app-dir/app-static/app-static.test.ts

+28
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,10 @@ describe('app-dir static/dynamic handling', () => {
976976
"prerendered-not-found/first.rsc",
977977
"prerendered-not-found/second.html",
978978
"prerendered-not-found/second.rsc",
979+
"prerendered-not-found/segment-revalidate.html",
980+
"prerendered-not-found/segment-revalidate.rsc",
981+
"prerendered-not-found/segment-revalidate/page.js",
982+
"prerendered-not-found/segment-revalidate/page_client-reference-manifest.js",
979983
"react-fetch-deduping-edge/page.js",
980984
"react-fetch-deduping-edge/page_client-reference-manifest.js",
981985
"react-fetch-deduping-node/page.js",
@@ -2008,6 +2012,30 @@ describe('app-dir static/dynamic handling', () => {
20082012
"initialRevalidateSeconds": false,
20092013
"srcRoute": "/prerendered-not-found/[slug]",
20102014
},
2015+
"/prerendered-not-found/segment-revalidate": {
2016+
"allowHeader": [
2017+
"host",
2018+
"x-matched-path",
2019+
"x-prerender-revalidate",
2020+
"x-prerender-revalidate-if-generated",
2021+
"x-next-revalidated-tags",
2022+
"x-next-revalidate-tag-token",
2023+
],
2024+
"dataRoute": "/prerendered-not-found/segment-revalidate.rsc",
2025+
"experimentalBypassFor": [
2026+
{
2027+
"key": "Next-Action",
2028+
"type": "header",
2029+
},
2030+
{
2031+
"key": "content-type",
2032+
"type": "header",
2033+
"value": "multipart/form-data;.*",
2034+
},
2035+
],
2036+
"initialRevalidateSeconds": 3,
2037+
"srcRoute": "/prerendered-not-found/segment-revalidate",
2038+
},
20112039
"/route-handler/no-store-force-static": {
20122040
"allowHeader": [
20132041
"host",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import React from 'react'
2+
import { notFound } from 'next/navigation'
3+
4+
export const revalidate = 3
5+
6+
export default async function Page() {
7+
await fetch('https://next-data-api.vercel.app/api/random', {
8+
next: {
9+
tags: ['explicit-tag'],
10+
},
11+
})
12+
13+
if (process.env.NEXT_PHASE === 'phase-production-build') {
14+
notFound()
15+
}
16+
17+
return (
18+
<>
19+
<p>/prerendered-not-found/segment-revalidate</p>
20+
<p>{Date.now()}</p>
21+
</>
22+
)
23+
}

0 commit comments

Comments
 (0)