Update page.tsx

This commit is contained in:
MacRimi 2025-02-15 23:01:40 +01:00 committed by GitHub
parent 618d6d8e16
commit 36b5e17cf9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -12,46 +12,32 @@ const CopyableCode = dynamic(() => import("@/components/CopyableCode"), { ssr: f
const guidesDirectory = path.join(process.cwd(), "..", "guides") const guidesDirectory = path.join(process.cwd(), "..", "guides")
// 🔹 Función para buscar archivos Markdown dentro de subdirectorios // 🔹 Encuentra todos los archivos Markdown dentro de `/guides`
function findMarkdownFiles(dir: string, basePath = "") { function getMarkdownFiles() {
let files: { slug: string; path: string }[] = [] return fs
.readdirSync(guidesDirectory)
fs.readdirSync(dir, { withFileTypes: true }).forEach((entry) => { .filter((file) => file.endsWith(".md"))
const fullPath = path.join(dir, entry.name) .map((file) => ({
const relativePath = path.join(basePath, entry.name) slug: file.replace(/\.md$/, ""), // 🔹 Quitamos la extensión .md
path: path.join(guidesDirectory, file),
if (entry.isDirectory()) { }))
files = files.concat(findMarkdownFiles(fullPath, relativePath))
} else if (entry.isFile() && entry.name.endsWith(".md")) {
files.push({
slug: relativePath.replace(/\.md$/, ""), // 🔹 Quitamos la extensión `.md`
path: fullPath,
})
}
})
return files
} }
// 🔹 Obtiene el contenido de la guía // 🔹 Obtiene el contenido de una guía específica
async function getGuideContent(slug: string) { async function getGuideContent(slug: string) {
try { try {
const decodedSlug = decodeURIComponent(slug) // 🔹 Solución: Decodificamos el slug para evitar `%2F` const markdownFiles = getMarkdownFiles()
const markdownFiles = findMarkdownFiles(guidesDirectory) const guideFile = markdownFiles.find((file) => file.slug === slug)
// 🔹 Buscamos el archivo dentro de subdirectorios
let guideFile = markdownFiles.find((file) => file.slug === decodedSlug)
if (!guideFile) { if (!guideFile) {
console.error(`❌ No se encontró la guía: ${decodedSlug}`) console.error(`❌ No se encontró la guía: ${slug}`)
return { content: "<p class='text-red-600'>Error: No se encontró la guía solicitada.</p>", metadata: null } return { content: "<p class='text-red-600'>Error: No se encontró la guía solicitada.</p>", metadata: null }
} }
const fileContents = fs.readFileSync(guideFile.path, "utf8") const fileContents = fs.readFileSync(guideFile.path, "utf8")
const { content, data } = matter(fileContents) // 🔹 Extrae metadata y contenido del `.md`
// 🔹 Extraemos los metadatos (title, description, etc.) // 🔹 Convertimos el Markdown a HTML con soporte para imágenes y tablas
const { content, data } = matter(fileContents)
const result = await remark() const result = await remark()
.use(gfm.default || gfm) .use(gfm.default || gfm)
.use(html) .use(html)
@ -64,10 +50,10 @@ async function getGuideContent(slug: string) {
} }
} }
// 🔹 Generamos rutas estáticas incluyendo subdirectorios // 🔹 Generamos rutas estáticas asegurando que Next.js las acepte
export async function generateStaticParams() { export async function generateStaticParams() {
try { try {
const markdownFiles = findMarkdownFiles(guidesDirectory) const markdownFiles = getMarkdownFiles()
return markdownFiles.map((file) => ({ slug: file.slug })) return markdownFiles.map((file) => ({ slug: file.slug }))
} catch (error) { } catch (error) {
console.error("❌ Error al generar las rutas estáticas para guides:", error) console.error("❌ Error al generar las rutas estáticas para guides:", error)