From cef4c29f1034c6a73249e8aaa6e413a08bec1d96 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Mon, 1 Sep 2025 18:51:35 +0100 Subject: [PATCH] Revert "chore: disable pre-render for roadmaps" This reverts commit 679e29d12de4f69fcc03d15e920977c85638a418. --- .astro/types.d.ts | 1 - src/pages/[roadmapId].json.ts | 3 +++ src/pages/[roadmapId]/courses.astro | 19 ++++++++++++++----- src/pages/[roadmapId]/index.astro | 17 +++++++++++++---- src/pages/[roadmapId]/projects.astro | 17 +++++++++++++---- src/pages/[roadmapId]/svg.astro | 17 +++++++++++++---- src/pages/projects/[projectId]/index.astro | 18 +++++++++++------- .../projects/[projectId]/solutions.astro | 19 ++++++++++++------- src/pages/projects/index.astro | 2 -- 9 files changed, 79 insertions(+), 34 deletions(-) diff --git a/.astro/types.d.ts b/.astro/types.d.ts index 03d7cc43f..f964fe0cf 100644 --- a/.astro/types.d.ts +++ b/.astro/types.d.ts @@ -1,2 +1 @@ /// -/// \ No newline at end of file diff --git a/src/pages/[roadmapId].json.ts b/src/pages/[roadmapId].json.ts index 87a9fb935..16ad93c30 100644 --- a/src/pages/[roadmapId].json.ts +++ b/src/pages/[roadmapId].json.ts @@ -11,6 +11,9 @@ export const prerender = false; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); +// hack to make it work. TODO: Fix +const projectRoot = path.resolve(__dirname, '../..').replace(/dist$/, ''); + type RoadmapJson = { _id: string; title: string; diff --git a/src/pages/[roadmapId]/courses.astro b/src/pages/[roadmapId]/courses.astro index 6570657db..b72d68cae 100644 --- a/src/pages/[roadmapId]/courses.astro +++ b/src/pages/[roadmapId]/courses.astro @@ -3,9 +3,20 @@ import RoadmapHeader from '../../components/RoadmapHeader.astro'; import BaseLayout from '../../layouts/BaseLayout.astro'; import { getOpenGraphImageUrl } from '../../lib/open-graph'; import { getProjectsByRoadmapId } from '../../lib/project'; -import { officialRoadmapDetails } from '../../queries/official-roadmap'; +import { + listOfficialRoadmaps, + officialRoadmapDetails, +} from '../../queries/official-roadmap'; -export const prerender = false; +export const prerender = true; + +export async function getStaticPaths() { + const roadmaps = await listOfficialRoadmaps(); + + return roadmaps.map((roadmap) => ({ + params: { roadmapId: roadmap.slug }, + })); +} interface Params extends Record { roadmapId: string; @@ -14,9 +25,7 @@ interface Params extends Record { const { roadmapId } = Astro.params as Params; const roadmapData = await officialRoadmapDetails(roadmapId); if (!roadmapData) { - Astro.response.status = 404; - Astro.response.statusText = 'Not found'; - return Astro.rewrite('/404'); + return Astro.redirect('/404', 404); } // update og for projects diff --git a/src/pages/[roadmapId]/index.astro b/src/pages/[roadmapId]/index.astro index bcf9f6982..40356bbbd 100644 --- a/src/pages/[roadmapId]/index.astro +++ b/src/pages/[roadmapId]/index.astro @@ -16,10 +16,21 @@ import { RoadmapTitleQuestion } from '../../components/RoadmapTitleQuestion'; import ResourceProgressStats from '../../components/ResourceProgressStats.astro'; import { getProjectsByRoadmapId } from '../../lib/project'; import { CheckSubscriptionVerification } from '../../components/Billing/CheckSubscriptionVerification'; -import { officialRoadmapDetails } from '../../queries/official-roadmap'; +import { + listOfficialRoadmaps, + officialRoadmapDetails, +} from '../../queries/official-roadmap'; import { DateTime } from 'luxon'; -export const prerender = false; +export const prerender = true; + +export async function getStaticPaths() { + const officialRoadmaps = await listOfficialRoadmaps(); + + return officialRoadmaps.map((roadmap) => ({ + params: { roadmapId: roadmap.slug }, + })); +} interface Params extends Record { roadmapId: string; @@ -28,8 +39,6 @@ interface Params extends Record { const { roadmapId } = Astro.params as Params; const roadmapData = await officialRoadmapDetails(roadmapId); if (!roadmapData) { - Astro.response.status = 404; - Astro.response.statusText = 'Not found'; return Astro.rewrite('/404'); } diff --git a/src/pages/[roadmapId]/projects.astro b/src/pages/[roadmapId]/projects.astro index ccff751d7..94c0c184c 100644 --- a/src/pages/[roadmapId]/projects.astro +++ b/src/pages/[roadmapId]/projects.astro @@ -6,9 +6,20 @@ import BaseLayout from '../../layouts/BaseLayout.astro'; import { getProjectsByRoadmapId } from '../../lib/project'; import { getOpenGraphImageUrl } from '../../lib/open-graph'; import { projectApi } from '../../api/project'; -import { officialRoadmapDetails } from '../../queries/official-roadmap'; +import { + listOfficialRoadmaps, + officialRoadmapDetails, +} from '../../queries/official-roadmap'; -export const prerender = false; +export const prerender = true; + +export async function getStaticPaths() { + const roadmapIds = await listOfficialRoadmaps(); + + return roadmapIds.map((roadmap) => ({ + params: { roadmapId: roadmap.slug }, + })); +} interface Params extends Record { roadmapId: string; @@ -17,8 +28,6 @@ interface Params extends Record { const { roadmapId } = Astro.params as Params; const roadmapData = await officialRoadmapDetails(roadmapId); if (!roadmapData) { - Astro.response.status = 404; - Astro.response.statusText = 'Not found'; return Astro.rewrite('/404'); } diff --git a/src/pages/[roadmapId]/svg.astro b/src/pages/[roadmapId]/svg.astro index 19f86f45e..d353d723e 100644 --- a/src/pages/[roadmapId]/svg.astro +++ b/src/pages/[roadmapId]/svg.astro @@ -2,9 +2,20 @@ import { EditorRoadmap } from '../../components/EditorRoadmap/EditorRoadmap'; import SkeletonLayout from '../../layouts/SkeletonLayout.astro'; import { getOpenGraphImageUrl } from '../../lib/open-graph'; -import { officialRoadmapDetails } from '../../queries/official-roadmap'; +import { + listOfficialRoadmaps, + officialRoadmapDetails, +} from '../../queries/official-roadmap'; -export const prerender = false; +export const prerender = true; + +export async function getStaticPaths() { + const roadmapIds = await listOfficialRoadmaps(); + + return roadmapIds.map((roadmap) => ({ + params: { roadmapId: roadmap.slug }, + })); +} interface Params extends Record { roadmapId: string; @@ -13,8 +24,6 @@ interface Params extends Record { const { roadmapId } = Astro.params as Params; const roadmapData = await officialRoadmapDetails(roadmapId); if (!roadmapData) { - Astro.response.status = 404; - Astro.response.statusText = 'Not found'; return Astro.rewrite('/404'); } diff --git a/src/pages/projects/[projectId]/index.astro b/src/pages/projects/[projectId]/index.astro index 038044ee2..4fe963e04 100644 --- a/src/pages/projects/[projectId]/index.astro +++ b/src/pages/projects/[projectId]/index.astro @@ -11,7 +11,17 @@ import { ProjectStepper } from '../../../components/Projects/StatusStepper/Proje import { ProjectTrackingActions } from '../../../components/Projects/StatusStepper/ProjectTrackingActions'; import { ProjectTabs } from '../../../components/Projects/ProjectTabs'; -export const prerender = false; +export const prerender = true; + +export async function getStaticPaths() { + const projects = await getAllProjects(); + + return projects + .map((project) => project.id) + .map((projectId) => ({ + params: { projectId }, + })); +} interface Params extends Record { projectId: string; @@ -20,12 +30,6 @@ interface Params extends Record { const { projectId } = Astro.params as Params; const project = await getProjectById(projectId); -if (!project) { - Astro.response.status = 404; - Astro.response.statusText = 'Not found'; - return Astro.rewrite('/404'); -} - const projectData = project.frontmatter as ProjectFrontmatter; let jsonLdSchema: any[] = []; diff --git a/src/pages/projects/[projectId]/solutions.astro b/src/pages/projects/[projectId]/solutions.astro index d533956db..344f4a0a0 100644 --- a/src/pages/projects/[projectId]/solutions.astro +++ b/src/pages/projects/[projectId]/solutions.astro @@ -9,7 +9,18 @@ import { ProjectTabs } from '../../../components/Projects/ProjectTabs'; import { ListProjectSolutions } from '../../../components/Projects/ListProjectSolutions'; import { ProjectSolutionModal } from '../../../components/Projects/ProjectSolutionModal'; -export const prerender = false; +export const prerender = true; + +export async function getStaticPaths() { + const projects = await getAllProjects(); + + return projects + .filter((project) => !(project?.frontmatter?.hasNoSubmission || false)) + .map((project) => project.id) + .map((projectId) => ({ + params: { projectId }, + })); +} interface Params extends Record { projectId: string; @@ -18,12 +29,6 @@ interface Params extends Record { const { projectId } = Astro.params as Params; const project = await getProjectById(projectId); -if (!project) { - Astro.response.status = 404; - Astro.response.statusText = 'Not found'; - return Astro.rewrite('/404'); -} - const projectData = project.frontmatter as ProjectFrontmatter; let jsonLdSchema: any[] = []; diff --git a/src/pages/projects/index.astro b/src/pages/projects/index.astro index 8e52067b7..68f08a2a4 100644 --- a/src/pages/projects/index.astro +++ b/src/pages/projects/index.astro @@ -6,8 +6,6 @@ import { ProjectsPage } from '../../components/Projects/ProjectsPage'; import { projectApi } from '../../api/project'; import { listOfficialRoadmaps } from '../../queries/official-roadmap'; -export const prerender = false; - const roadmapProjects = await getRoadmapsProjects(); const allRoadmapIds = Object.keys(roadmapProjects);