40 lines
1.2 KiB
Plaintext
40 lines
1.2 KiB
Plaintext
---
|
|
import merge from 'lodash.merge';
|
|
import type { ImageMetadata } from 'astro';
|
|
import Layout from '~/layouts/PageLayout.astro';
|
|
import SinglePost from '~/components/blog/SinglePost.astro';
|
|
import ToBlogLink from '~/components/blog/ToBlogLink.astro';
|
|
|
|
import { getCanonical, getPermalink } from '~/utils/permalinks';
|
|
import { getStaticPathsBlogPost, blogPostRobots } from '~/utils/blog';
|
|
import { findImage } from '~/utils/images';
|
|
|
|
export const getStaticPaths = getStaticPathsBlogPost();
|
|
|
|
const { post } = Astro.props;
|
|
|
|
const url = getCanonical(getPermalink(post.permalink, 'post'));
|
|
const image = (await findImage(post.image)) as ImageMetadata | undefined;
|
|
|
|
const metadata = merge(
|
|
{
|
|
title: post.title,
|
|
description: post.excerpt,
|
|
robots: {
|
|
index: blogPostRobots?.index,
|
|
follow: blogPostRobots?.follow,
|
|
},
|
|
openGraph: {
|
|
type: 'article',
|
|
...(image ? { images: [{ url: image?.src, width: image?.width, height: image?.height }] } : {}),
|
|
},
|
|
},
|
|
{ ...(post?.metadata ? { ...post.metadata, canonical: post.metadata?.canonical || url } : {}) }
|
|
);
|
|
---
|
|
|
|
<Layout metadata={metadata}>
|
|
<SinglePost post={{ ...post, image: image }} url={url} />
|
|
<ToBlogLink />
|
|
</Layout>
|