diff --git a/packages/next/lib/constants.ts b/packages/next/lib/constants.ts index 25cab8bca5e2edbb2462e7ea5280afdba9ed4e9d..5a459a7f24f145bf18fd2cb5cda2dad75f63a4e6 100644 --- a/packages/next/lib/constants.ts +++ b/packages/next/lib/constants.ts @@ -40,10 +40,8 @@ export const GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?' export const UNSTABLE_REVALIDATE_RENAME_ERROR = - 'The `revalidate` property is not yet available for general use.\n' + - 'To try the experimental implementation, please use `unstable_revalidate` instead.\n' + - "We're excited for you to try this feature—please share all feedback on the RFC:\n" + - 'https://nextjs.link/issg' + 'The `unstable_revalidate` property is available for general use.\n' + + 'Please use `revalidate` instead.' export const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://err.sh/next.js/gssp-component-member` diff --git a/packages/next/next-server/server/render.tsx b/packages/next/next-server/server/render.tsx index aad2f02d9557f62becdce17aca5b8227dfc808b4..ae89757548525a81d9c9304e28c02e8291483832 100644 --- a/packages/next/next-server/server/render.tsx +++ b/packages/next/next-server/server/render.tsx @@ -525,10 +525,10 @@ export async function renderToHTML( } const invalidKeys = Object.keys(data).filter( - (key) => key !== 'unstable_revalidate' && key !== 'props' + (key) => key !== 'revalidate' && key !== 'props' ) - if (invalidKeys.includes('revalidate')) { + if (invalidKeys.includes('unstable_revalidate')) { throw new Error(UNSTABLE_REVALIDATE_RENAME_ERROR) } @@ -546,41 +546,41 @@ export async function renderToHTML( ) } - if (typeof data.unstable_revalidate === 'number') { - if (!Number.isInteger(data.unstable_revalidate)) { + if (typeof data.revalidate === 'number') { + if (!Number.isInteger(data.revalidate)) { throw new Error( - `A page's revalidate option must be seconds expressed as a natural number. Mixed numbers, such as '${data.unstable_revalidate}', cannot be used.` + + `A page's revalidate option must be seconds expressed as a natural number. Mixed numbers, such as '${data.revalidate}', cannot be used.` + `\nTry changing the value to '${Math.ceil( - data.unstable_revalidate + data.revalidate )}' or using \`Math.ceil()\` if you're computing the value.` ) - } else if (data.unstable_revalidate <= 0) { + } else if (data.revalidate <= 0) { throw new Error( `A page's revalidate option can not be less than or equal to zero. A revalidate option of zero means to revalidate after _every_ request, and implies stale data cannot be tolerated.` + `\n\nTo never revalidate, you can set revalidate to \`false\` (only ran once at build-time).` + `\nTo revalidate as soon as possible, you can set the value to \`1\`.` ) - } else if (data.unstable_revalidate > 31536000) { + } else if (data.revalidate > 31536000) { // if it's greater than a year for some reason error console.warn( `Warning: A page's revalidate option was set to more than a year. This may have been done in error.` + `\nTo only run getStaticProps at build-time and not revalidate at runtime, you can set \`revalidate\` to \`false\`!` ) } - } else if (data.unstable_revalidate === true) { + } else if (data.revalidate === true) { // When enabled, revalidate after 1 second. This value is optimal for // the most up-to-date page possible, but without a 1-to-1 // request-refresh ratio. - data.unstable_revalidate = 1 + data.revalidate = 1 } else { // By default, we never revalidate. - data.unstable_revalidate = false + data.revalidate = false } props.pageProps = Object.assign({}, props.pageProps, data.props) // pass up revalidate and props for export // TODO: change this to a different passing mechanism - ;(renderOpts as any).revalidate = data.unstable_revalidate + ;(renderOpts as any).revalidate = data.revalidate ;(renderOpts as any).pageData = props } diff --git a/packages/next/types/index.d.ts b/packages/next/types/index.d.ts index 6e2b94d47bcfe277d88c44a1fc1caf7b914468b8..68794df30b7edeb5c88b7b14ea052554e1a5cdd0 100644 --- a/packages/next/types/index.d.ts +++ b/packages/next/types/index.d.ts @@ -80,7 +80,7 @@ export type GetStaticPropsContext = { export type GetStaticPropsResult

= { props: P - unstable_revalidate?: number | boolean + revalidate?: number | boolean } export type GetStaticProps< diff --git a/test/integration/env-config/app/pages/index.js b/test/integration/env-config/app/pages/index.js index da92cea371dfa48a8c03f1b1c1fb6219818f4357..3f6247d2ce8efb0b1b0de7249ea585543c50e123 100644 --- a/test/integration/env-config/app/pages/index.js +++ b/test/integration/env-config/app/pages/index.js @@ -34,7 +34,7 @@ export async function getStaticProps() { // Do not pass any sensitive values here as they will // be made PUBLICLY available in `pageProps` props: { env: items }, - unstable_revalidate: 1, + revalidate: 1, } } diff --git a/test/integration/env-config/app/pages/some-ssg.js b/test/integration/env-config/app/pages/some-ssg.js index da92cea371dfa48a8c03f1b1c1fb6219818f4357..3f6247d2ce8efb0b1b0de7249ea585543c50e123 100644 --- a/test/integration/env-config/app/pages/some-ssg.js +++ b/test/integration/env-config/app/pages/some-ssg.js @@ -34,7 +34,7 @@ export async function getStaticProps() { // Do not pass any sensitive values here as they will // be made PUBLICLY available in `pageProps` props: { env: items }, - unstable_revalidate: 1, + revalidate: 1, } } diff --git a/test/integration/prerender/pages/another/index.js b/test/integration/prerender/pages/another/index.js index 42cd8b44fb7d05f2a4f9a8efa2cfc6c1fd983628..1e2d91783b76685e4ddb96c94b6794b6596dff2c 100644 --- a/test/integration/prerender/pages/another/index.js +++ b/test/integration/prerender/pages/another/index.js @@ -18,7 +18,7 @@ export async function getStaticProps() { world: text, time: new Date().getTime(), }, - unstable_revalidate: true, + revalidate: true, } } diff --git a/test/integration/prerender/pages/blog/[post]/[comment].js b/test/integration/prerender/pages/blog/[post]/[comment].js index 3ddcfc1949cd04f6327dbdc814dcd3fa4cb4a6c9..39ee2d9afce5b867efdd3b7110c7fe4a0532e89d 100644 --- a/test/integration/prerender/pages/blog/[post]/[comment].js +++ b/test/integration/prerender/pages/blog/[post]/[comment].js @@ -18,7 +18,7 @@ export async function getStaticProps({ params }) { comment: params.comment, time: new Date().getTime(), }, - unstable_revalidate: 2, + revalidate: 2, } } diff --git a/test/integration/prerender/pages/blog/[post]/index.js b/test/integration/prerender/pages/blog/[post]/index.js index 0c9f829bca4915f62d0a89484dbfd7854ddca7ea..40124b2c034992b63f3621d5dbcd3e98ed5a2dc1 100644 --- a/test/integration/prerender/pages/blog/[post]/index.js +++ b/test/integration/prerender/pages/blog/[post]/index.js @@ -42,7 +42,7 @@ export async function getStaticProps({ params }) { post: params.post, time: (await import('perf_hooks')).performance.now(), }, - unstable_revalidate: 10, + revalidate: 10, } } diff --git a/test/integration/prerender/pages/blog/index.js b/test/integration/prerender/pages/blog/index.js index 1a9e782fadd6c6e8658eab2a90d6240aa9a1f5de..71ba9e9b1cca01787166cbc1df32166f1eaa901a 100644 --- a/test/integration/prerender/pages/blog/index.js +++ b/test/integration/prerender/pages/blog/index.js @@ -7,7 +7,7 @@ export async function getStaticProps() { slugs: ['post-1', 'post-2'], time: (await import('perf_hooks')).performance.now(), }, - unstable_revalidate: 10, + revalidate: 10, } } diff --git a/test/integration/prerender/pages/catchall-explicit/[...slug].js b/test/integration/prerender/pages/catchall-explicit/[...slug].js index 2b8cb9d53ef8751e1bc947139130601c31205240..dcdd57e35e5701bb6299d5e20456fd6c7afba881 100644 --- a/test/integration/prerender/pages/catchall-explicit/[...slug].js +++ b/test/integration/prerender/pages/catchall-explicit/[...slug].js @@ -9,7 +9,7 @@ export async function getStaticProps({ params: { slug } }) { props: { slug, }, - unstable_revalidate: 1, + revalidate: 1, } } diff --git a/test/integration/prerender/pages/catchall/[...slug].js b/test/integration/prerender/pages/catchall/[...slug].js index b11dbf5ce858cd5cd52cc7b1cc3d95f2404682ca..ebb11e7af77831705e729305643396b3b342c297 100644 --- a/test/integration/prerender/pages/catchall/[...slug].js +++ b/test/integration/prerender/pages/catchall/[...slug].js @@ -9,7 +9,7 @@ export async function getStaticProps({ params: { slug } }) { props: { slug, }, - unstable_revalidate: 1, + revalidate: 1, } } diff --git a/test/integration/prerender/pages/fallback-only/[slug].js b/test/integration/prerender/pages/fallback-only/[slug].js index 0be859bdbf57376a809d507070cee22ba6107072..dbb44ed06ce6932e051b6c30ade988d62453f754 100644 --- a/test/integration/prerender/pages/fallback-only/[slug].js +++ b/test/integration/prerender/pages/fallback-only/[slug].js @@ -20,7 +20,7 @@ export async function getStaticProps({ params }) { random: Math.random(), time: (await import('perf_hooks')).performance.now(), }, - unstable_revalidate: 1, + revalidate: 1, } } diff --git a/test/integration/prerender/pages/index.js b/test/integration/prerender/pages/index.js index 02bf56107cadbd0d80235e237395d5dd5779d7fc..b63b9295f70ceb753a44b779666e2beb53947d8f 100644 --- a/test/integration/prerender/pages/index.js +++ b/test/integration/prerender/pages/index.js @@ -5,7 +5,7 @@ export async function getStaticProps() { return { props: { world: 'world', time: new Date().getTime() }, // bad-prop - unstable_revalidate: 1, + revalidate: 1, } } diff --git a/test/integration/prerender/pages/something.js b/test/integration/prerender/pages/something.js index 009ef6a9d56d9ce0b7315fa7d784c30f3db41af8..180818998c8d82aa79184f45a71279b6cdade624 100644 --- a/test/integration/prerender/pages/something.js +++ b/test/integration/prerender/pages/something.js @@ -10,7 +10,7 @@ export async function getStaticProps({ params }) { time: new Date().getTime(), random: Math.random(), }, - unstable_revalidate: false, + revalidate: false, } } diff --git a/test/integration/prerender/pages/user/[user]/profile.js b/test/integration/prerender/pages/user/[user]/profile.js index 7ab61dc494de456a551bcebf572b87095abc3a99..95bf6e7ad7b0da6fac3a8e781ef2c7d20f0f1944 100644 --- a/test/integration/prerender/pages/user/[user]/profile.js +++ b/test/integration/prerender/pages/user/[user]/profile.js @@ -11,7 +11,7 @@ export async function getStaticProps({ params }) { user: params.user, time: (await import('perf_hooks')).performance.now(), }, - unstable_revalidate: 10, + revalidate: 10, } } diff --git a/test/integration/typescript/pages/ssg/[slug].tsx b/test/integration/typescript/pages/ssg/[slug].tsx index e41f6dc3d7e255a297f703445ef06cb07d75fbe6..5d6af8cfcc780a5309804f680448a460468a953e 100644 --- a/test/integration/typescript/pages/ssg/[slug].tsx +++ b/test/integration/typescript/pages/ssg/[slug].tsx @@ -20,7 +20,7 @@ export const getStaticProps: GetStaticProps = async ({ }) => { return { props: { data: params!.slug }, - unstable_revalidate: false, + revalidate: false, } } diff --git a/test/integration/typescript/pages/ssg/blog/index.tsx b/test/integration/typescript/pages/ssg/blog/index.tsx index 9e058e046441eeaa42bce97e483d0a201525ffe5..f6c8d3ab4e0e2c8487496a7bd5db9502c9b8cc38 100644 --- a/test/integration/typescript/pages/ssg/blog/index.tsx +++ b/test/integration/typescript/pages/ssg/blog/index.tsx @@ -3,7 +3,7 @@ import { InferGetStaticPropsType } from 'next' export const getStaticProps = async () => { return { props: { data: ['hello', 'world'] }, - unstable_revalidate: false, + revalidate: false, } }