From 701509509974574023699263fc21f2f1fa607fa2 Mon Sep 17 00:00:00 2001 From: Aviv Keller Date: Sat, 18 Oct 2025 17:35:15 -0400 Subject: [PATCH] feat(cache): `use cache` more often (#8238) * feat(cache): `use cache` more often * fixup! * fixup! --- .../[locale]/download/archive/[version]/page.tsx | 10 +++++++--- apps/site/components/EOL/EOLReleaseTable/index.tsx | 2 +- apps/site/components/withSupporters.tsx | 8 ++++---- apps/site/next-data/generators/supportersData.mjs | 2 +- apps/site/next-data/providers/releaseData.ts | 4 +--- apps/site/next-data/providers/releaseVersions.ts | 8 ++------ apps/site/next-data/providers/supportersData.mjs | 9 --------- apps/site/next-data/providers/supportersData.ts | 5 +++++ apps/site/next-data/providers/vulnerabilities.ts | 8 ++------ apps/site/next.dynamic.constants.mjs | 14 -------------- 10 files changed, 23 insertions(+), 47 deletions(-) delete mode 100644 apps/site/next-data/providers/supportersData.mjs create mode 100644 apps/site/next-data/providers/supportersData.ts diff --git a/apps/site/app/[locale]/download/archive/[version]/page.tsx b/apps/site/app/[locale]/download/archive/[version]/page.tsx index 2fa7b6040c0cd..b82a736c14d81 100644 --- a/apps/site/app/[locale]/download/archive/[version]/page.tsx +++ b/apps/site/app/[locale]/download/archive/[version]/page.tsx @@ -2,8 +2,8 @@ import { notFound, redirect } from 'next/navigation'; import type { FC } from 'react'; import provideReleaseData from '#site/next-data/providers/releaseData'; +import provideReleaseVersions from '#site/next-data/providers/releaseVersions'; import { ENABLE_STATIC_EXPORT } from '#site/next.constants.mjs'; -import { ARCHIVE_DYNAMIC_ROUTES } from '#site/next.dynamic.constants.mjs'; import * as basePage from '#site/next.dynamic.page.mjs'; import { defaultLocale } from '#site/next.locales.mjs'; import type { DynamicParams } from '#site/types'; @@ -29,7 +29,9 @@ export const generateStaticParams = async () => { return []; } - return ARCHIVE_DYNAMIC_ROUTES.map(version => ({ + const versions = await provideReleaseVersions(); + + return versions.map(version => ({ locale: defaultLocale.code, version, })); @@ -53,8 +55,10 @@ const getPage: FC = async props => { redirect(`/${locale}/download/archive/${release?.versionWithPrefix}`); } + const versions = await provideReleaseVersions(); + // Verifies if the current route is a dynamic route - const isDynamicRoute = ARCHIVE_DYNAMIC_ROUTES.some(r => r.includes(pathname)); + const isDynamicRoute = versions.some(r => r.includes(pathname)); // Gets the Markdown content and context for Download Archive pages const [content, context] = await basePage.getMarkdownContext({ diff --git a/apps/site/components/EOL/EOLReleaseTable/index.tsx b/apps/site/components/EOL/EOLReleaseTable/index.tsx index 36ee147bf5f7c..d1e15f6dc37de 100644 --- a/apps/site/components/EOL/EOLReleaseTable/index.tsx +++ b/apps/site/components/EOL/EOLReleaseTable/index.tsx @@ -9,7 +9,7 @@ import EOLReleaseTableBody from './TableBody'; const EOLReleaseTable: FC = async () => { const releaseData = await provideReleaseData(); - const vulnerabilities = provideVulnerabilities(); + const vulnerabilities = await provideVulnerabilities(); const eolReleases = releaseData.filter( release => release.status === EOL_VERSION_IDENTIFIER diff --git a/apps/site/components/withSupporters.tsx b/apps/site/components/withSupporters.tsx index 2227e653d6385..6ce69110ab217 100644 --- a/apps/site/components/withSupporters.tsx +++ b/apps/site/components/withSupporters.tsx @@ -2,12 +2,12 @@ import type { FC, PropsWithChildren } from 'react'; -import SupportersList from './Common/Supporters'; - import provideSupporters from '#site/next-data/providers/supportersData'; -const WithSupporters: FC = () => { - const supporters = provideSupporters(); +import SupportersList from './Common/Supporters'; + +const WithSupporters: FC = async () => { + const supporters = await provideSupporters(); return (
diff --git a/apps/site/next-data/generators/supportersData.mjs b/apps/site/next-data/generators/supportersData.mjs index fd788a7c14074..1c1c19f15b77b 100644 --- a/apps/site/next-data/generators/supportersData.mjs +++ b/apps/site/next-data/generators/supportersData.mjs @@ -25,4 +25,4 @@ async function fetchOpenCollectiveData() { return members; } -export { fetchOpenCollectiveData }; +export default fetchOpenCollectiveData; diff --git a/apps/site/next-data/providers/releaseData.ts b/apps/site/next-data/providers/releaseData.ts index 1ccae9de036dd..c063dd8fd5ea5 100644 --- a/apps/site/next-data/providers/releaseData.ts +++ b/apps/site/next-data/providers/releaseData.ts @@ -1,7 +1,5 @@ 'use cache'; -import generateReleaseData from '#site/next-data/generators/releaseData.mjs'; - -const provideReleaseData = async () => generateReleaseData(); +import provideReleaseData from '#site/next-data/generators/releaseData.mjs'; export default provideReleaseData; diff --git a/apps/site/next-data/providers/releaseVersions.ts b/apps/site/next-data/providers/releaseVersions.ts index f7ac4d86d010d..d9aa33346dc41 100644 --- a/apps/site/next-data/providers/releaseVersions.ts +++ b/apps/site/next-data/providers/releaseVersions.ts @@ -1,9 +1,5 @@ -import { cache } from 'react'; +'use cache'; -import generateAllVersionsData from '#site/next-data/generators/releaseVersions.mjs'; - -const releaseVersions = await generateAllVersionsData(); - -const provideReleaseVersions = cache(() => releaseVersions); +import provideReleaseVersions from '#site/next-data/generators/releaseVersions.mjs'; export default provideReleaseVersions; diff --git a/apps/site/next-data/providers/supportersData.mjs b/apps/site/next-data/providers/supportersData.mjs deleted file mode 100644 index a5479b43f03e3..0000000000000 --- a/apps/site/next-data/providers/supportersData.mjs +++ /dev/null @@ -1,9 +0,0 @@ -import { cache } from 'react'; - -import { fetchOpenCollectiveData } from '#site/next-data/generators/supportersData.mjs'; - -const openCollectiveSupporters = await fetchOpenCollectiveData(); - -const provideSupporters = cache(() => openCollectiveSupporters); - -export default provideSupporters; diff --git a/apps/site/next-data/providers/supportersData.ts b/apps/site/next-data/providers/supportersData.ts new file mode 100644 index 0000000000000..e6e34a6877590 --- /dev/null +++ b/apps/site/next-data/providers/supportersData.ts @@ -0,0 +1,5 @@ +'use cache'; + +import provideSupporters from '#site/next-data/generators/supportersData.mjs'; + +export default provideSupporters; diff --git a/apps/site/next-data/providers/vulnerabilities.ts b/apps/site/next-data/providers/vulnerabilities.ts index cfc3cce008ba0..e360781eebd10 100644 --- a/apps/site/next-data/providers/vulnerabilities.ts +++ b/apps/site/next-data/providers/vulnerabilities.ts @@ -1,9 +1,5 @@ -import { cache } from 'react'; +'use cache'; -import generateVulnerabilities from '#site/next-data/generators/vulnerabilities.mjs'; - -const vulnerabilities = await generateVulnerabilities(); - -const provideVulnerabilities = cache(() => vulnerabilities); +import provideVulnerabilities from '#site/next-data/generators/vulnerabilities.mjs'; export default provideVulnerabilities; diff --git a/apps/site/next.dynamic.constants.mjs b/apps/site/next.dynamic.constants.mjs index 68860ee2e2a0f..ce9f3128e0077 100644 --- a/apps/site/next.dynamic.constants.mjs +++ b/apps/site/next.dynamic.constants.mjs @@ -1,7 +1,6 @@ 'use strict'; import { provideBlogPosts } from '#site/next-data/providers/blogData'; -import provideReleaseVersions from '#site/next-data/providers/releaseVersions'; import { blogData } from '#site/next.json.mjs'; import { BASE_PATH, BASE_URL } from './next.constants.mjs'; @@ -28,19 +27,6 @@ export const BLOG_DYNAMIC_ROUTES = [ .flat(), ]; -/** - * This constant is used to create static routes on-the-fly that do not have a file-system - * counterpart route. This is useful for providing routes with matching Layout Names - * but that do not have Markdown content and a matching file for the route - * - * @type {Array} A Map of pathname and Layout Name - */ -export const ARCHIVE_DYNAMIC_ROUTES = [ - // Creates dynamic routes for downloads archive pages for each version - // (e.g., /download/archive/v18.20.8, /download/archive/v20.19.2) - ...provideReleaseVersions(), -]; - /** * This is the default Next.js Page Metadata for all pages *