1+ import { generatePageMeta } from "@/lib/meta" ;
2+ import {
3+ DocsPage ,
4+ DocsBody ,
5+ } from "fumadocs-ui/page" ;
6+ import {
7+ getRepositoryBySlug ,
8+ getRepositoryDisplayName ,
9+ repositories ,
10+ getVersionBySlug ,
11+ } from "@/lib/repo-config" ;
12+ import { notFound } from "next/navigation" ;
13+ import { DocPageHeading } from "../../../components" ;
14+ import { source } from "@/lib/source" ;
15+ import { createMdxComponents , createRelativeLink } from "@/components/mdx" ;
16+
17+ type Props = {
18+ params : Promise < { plugin : string ; version : string , slug : string [ ] } > ;
19+ } ;
20+
21+ export default async function Page ( props : Props ) {
22+ const resolvedParams = await props . params ;
23+ const repoSlug = resolvedParams . plugin ;
24+ const versionSlug = resolvedParams . version ;
25+ const slugs = resolvedParams . slug || [ ] ;
26+
27+ const repository = getRepositoryBySlug ( repoSlug ) ;
28+ if ( ! repository ) {
29+ notFound ( ) ;
30+ }
31+
32+ const version = getVersionBySlug ( repository , versionSlug ) ;
33+ if ( ! version ) {
34+ notFound ( ) ;
35+ }
36+
37+ const fullSlug = [ repoSlug , versionSlug , ...slugs ] ;
38+ const page = source . getPage ( fullSlug ) ;
39+ if ( ! page ) {
40+ notFound ( ) ;
41+ }
42+
43+
44+ let content = await page . data . load ( ) ;
45+
46+ if ( content . source ) {
47+ const sourcePage = source . getPage ( content . source . split ( "/" ) ) ;
48+
49+ if ( ! sourcePage )
50+ throw new Error (
51+ `unresolved source in frontmatter of ${ page . file . path } : ${ content . source } ` ,
52+ ) ;
53+ content = await sourcePage . data . load ( ) ;
54+ }
55+
56+ const MdxContent = content . body ;
57+
58+ return (
59+ < DocsPage toc = { content . toc } full = { content . full } >
60+ < DocPageHeading repository = { repository } />
61+ < DocsBody >
62+ < MdxContent
63+ components = { createMdxComponents ( {
64+ a : ( { href, ...props } : { href : string } ) => {
65+ return < a href = { createRelativeLink ( repository , version , href ) } { ...props } /> ;
66+ } ,
67+ } ) }
68+ />
69+ { /* {page.file.name === "index" && (
70+ <DocsCategory page={page} from={source} />
71+ )} */ }
72+ </ DocsBody >
73+ </ DocsPage >
74+ ) ;
75+ }
76+
77+ export async function generateMetadata ( { params } : Props ) {
78+ const resolvedParams = await params ;
79+ const repoSlug = resolvedParams . plugin ;
80+ const versionSlug = resolvedParams . version ;
81+ const slugs = resolvedParams . slug || [ ] ;
82+
83+ const repository = getRepositoryBySlug ( repoSlug ) ;
84+ if ( ! repository ) {
85+ return generatePageMeta (
86+ "Repository Not Found" ,
87+ ) ;
88+ }
89+
90+ const version = getVersionBySlug ( repository , versionSlug ) ;
91+ if ( ! version ) {
92+ return generatePageMeta (
93+ "Version Not Found" ,
94+ ) ;
95+ }
96+
97+ const fullSlug = [ repoSlug , versionSlug , ...slugs ] ;
98+ const page = source . getPage ( fullSlug ) ;
99+ if ( ! page ) {
100+ return generatePageMeta (
101+ `${ getRepositoryDisplayName ( repository ) } v${ version . version } ` ,
102+ `Documentation for ${ repository . owner } /${ repository . repo } `
103+ ) ;
104+ }
105+
106+ return generatePageMeta (
107+ `${ page . data . title } - ${ getRepositoryDisplayName ( repository ) } v${ version . version } ` ,
108+ `Documentation for ${ repository . owner } /${ repository . repo } `
109+ ) ;
110+ }
111+
112+ export async function generateStaticParams ( ) {
113+
114+ // Generate params for all repository and version combinations
115+ const params : { plugin : string , version : string , slug : string [ ] } [ ] = [ ] ;
116+
117+ for ( const repository of repositories ) {
118+ const repoSlug = repository . repo ;
119+
120+ for ( const version of repository . versions ) {
121+ const versionSlug = version . version ;
122+
123+ params . push ( { plugin : repoSlug , version : versionSlug , slug : [ ] } ) ;
124+
125+ // Add limited files for this version
126+ if ( version . limited_files ) {
127+ for ( const file of version . limited_files ) {
128+ params . push ( { plugin : repoSlug , version : versionSlug , slug : [ file . slug ] } ) ;
129+ }
130+ }
131+ }
132+ }
133+
134+ return params ;
135+ }
0 commit comments