From c40f407d82258951b08525ae173444bc203d93ba Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Mon, 20 Jul 2020 20:23:51 +0200 Subject: [PATCH] Stabilize revalidate (#15338) --- packages/next/lib/constants.ts | 6 ++--- packages/next/next-server/server/render.tsx | 24 +++++++++---------- packages/next/types/index.d.ts | 2 +- .../integration/env-config/app/pages/index.js | 2 +- .../env-config/app/pages/some-ssg.js | 2 +- .../prerender/pages/another/index.js | 2 +- .../prerender/pages/blog/[post]/[comment].js | 2 +- .../prerender/pages/blog/[post]/index.js | 2 +- .../integration/prerender/pages/blog/index.js | 2 +- .../pages/catchall-explicit/[...slug].js | 2 +- .../prerender/pages/catchall/[...slug].js | 2 +- .../prerender/pages/fallback-only/[slug].js | 2 +- test/integration/prerender/pages/index.js | 2 +- test/integration/prerender/pages/something.js | 2 +- .../prerender/pages/user/[user]/profile.js | 2 +- .../typescript/pages/ssg/[slug].tsx | 2 +- .../typescript/pages/ssg/blog/index.tsx | 2 +- 17 files changed, 29 insertions(+), 31 deletions(-) diff --git a/packages/next/lib/constants.ts b/packages/next/lib/constants.ts index 25cab8bca5..5a459a7f24 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 aad2f02d95..ae89757548 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 6e2b94d47b..68794df30b 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 da92cea371..3f6247d2ce 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 da92cea371..3f6247d2ce 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 42cd8b44fb..1e2d91783b 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 3ddcfc1949..39ee2d9afc 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 0c9f829bca..40124b2c03 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 1a9e782fad..71ba9e9b1c 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 2b8cb9d53e..dcdd57e35e 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 b11dbf5ce8..ebb11e7af7 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 0be859bdbf..dbb44ed06c 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 02bf56107c..b63b9295f7 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 009ef6a9d5..180818998c 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 7ab61dc494..95bf6e7ad7 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 e41f6dc3d7..5d6af8cfcc 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 9e058e0464..f6c8d3ab4e 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, } } -- GitLab