import fs from 'fs'; import path from 'path'; import matter from 'gray-matter'; import { mapSlugToFileSlug } from './slugs'; export interface PageFrontmatter { title: string; excerpt: string; featuredImage: string | null; locale: string; } export interface PageMdx { slug: string; frontmatter: PageFrontmatter; content: string; } export async function getPageBySlug(slug: string, locale: string): Promise { // Map translated slug to file slug const fileSlug = await mapSlugToFileSlug(slug, locale); const pagesDir = path.join(process.cwd(), 'data', 'pages', locale); const filePath = path.join(pagesDir, `${fileSlug}.mdx`); if (!fs.existsSync(filePath)) { return null; } const fileContent = fs.readFileSync(filePath, 'utf8'); const { data, content } = matter(fileContent); return { slug: fileSlug, frontmatter: data as PageFrontmatter, content, }; } export async function getAllPages(locale: string): Promise { const pagesDir = path.join(process.cwd(), 'data', 'pages', locale); if (!fs.existsSync(pagesDir)) return []; const files = fs.readdirSync(pagesDir); const pages = await Promise.all( files .filter((file) => file.endsWith('.mdx')) .map((file) => { const fileSlug = file.replace(/\.mdx$/, ''); const filePath = path.join(pagesDir, file); const fileContent = fs.readFileSync(filePath, 'utf8'); const { data, content } = matter(fileContent); return { slug: fileSlug, frontmatter: data as PageFrontmatter, content, }; }), ); return pages.filter((p): p is PageMdx => p !== null); } export async function getAllPagesMetadata(locale: string): Promise[]> { const pagesDir = path.join(process.cwd(), 'data', 'pages', locale); if (!fs.existsSync(pagesDir)) return []; const files = fs.readdirSync(pagesDir); return files .filter((file) => file.endsWith('.mdx')) .map((file) => { const fileSlug = file.replace(/\.mdx$/, ''); const filePath = path.join(pagesDir, file); const fileContent = fs.readFileSync(filePath, 'utf8'); const { data } = matter(fileContent); return { slug: fileSlug, frontmatter: data as PageFrontmatter, }; }); }