--- import { Image } from 'astro:assets'; import { marked } from 'marked'; import markedShiki from 'marked-shiki'; import { createHighlighter } from 'shiki'; import { readItems, readSingleton } from '@directus/sdk'; import "photoswipe/style.css"; import type { Post } from '@/lib/directusTypes' import SocialShareButton from '@components/buttons/SocialShareButton.astro'; import PostMetadataSnippet from '@/components/snippets/PostMetadataSnippet.astro'; import BaseLayout from '@layouts/BaseLayout.astro'; import directus from '@lib/directus'; import { getDirectusImageURL } from '@/scripts/url'; export async function getStaticPaths() { const posts = await directus.request(readItems('posts', { fields: ['*', { category: ['*'] }], })); const globalData = await directus.request(readSingleton('site_global')); const highlighter = await createHighlighter({ themes: ['github-light', 'github-dark'], langs: ['typescript', 'python', 'css', 'html', 'yaml', 'bash', 'json'], }); const renderer = { image({ href, title, text }: { href: string; title: string | null; text: string }) { return ` `; }, }; marked.use({ renderer }); marked.use(markedShiki({ highlight(code, lang) { return highlighter.codeToHtml(code, { lang: lang || 'plaintext', themes: { light: 'github-light', dark: 'github-dark' }, defaultColor: false, }); } })); return posts.map((post: Post) => ({ params: { slug: post.slug }, props: { post, global: globalData, content: marked.parse(post.content || ''), }, })); } const { post, global, content } = Astro.props; --- {post.title} {post.tags && post.tags.length > 0 && ( {post.tags.map((tag: string) => ( {tag} ))} )}