import { withLeadingSlash } from 'ufo' import { stringify } from 'minimark/stringify' import { queryCollection } from '@nuxt/content/nitro' import type { Collections } from '@nuxt/content' export default eventHandler(async (event) => { const slug = getRouterParams(event)['slug.md'] if (!slug?.endsWith('.md')) { throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true }) } const path = withLeadingSlash(slug.replace('.md', '')) const page = await queryCollection(event, 'docs' as keyof Collections).path(path).first() if (!page) { throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true }) } // Add title and description to the top of the page if missing if (page.body.value[0]?.[0] !== 'h1') { page.body.value.unshift(['blockquote', {}, page.description]) page.body.value.unshift(['h1', {}, page.title]) } setHeader(event, 'Content-Type', 'text/markdown; charset=utf-8') return stringify({ ...page.body, type: 'minimark' }, { format: 'markdown/html' }) })