Change posts.js to blog.js and improve default values

This commit is contained in:
prototypa
2023-01-06 15:15:50 -05:00
parent 12c585c301
commit f1ed6df7a1
10 changed files with 31 additions and 23 deletions

View File

@ -2,7 +2,7 @@
import Grid from '~/components/blog/Grid.astro';
import { getBlogPermalink } from '~/utils/permalinks';
import { findPostsByIds } from '~/utils/posts';
import { findPostsByIds } from '~/utils/blog';
const ids = [
'get-started-website-with-astro-tailwind-css.md',

View File

@ -2,7 +2,7 @@
import Grid from '~/components/blog/Grid.astro';
import { getBlogPermalink } from '~/utils/permalinks';
import { findLatestPosts } from '~/utils/posts';
import { findLatestPosts } from '~/utils/blog';
const count = 4;
const posts = await findLatestPosts({ count });

View File

@ -1,4 +1,5 @@
import { z, defineCollection } from 'astro:content';
import { cleanSlug } from '~/utils/permalinks';
const blog = defineCollection({
schema: {
@ -9,16 +10,16 @@ const blog = defineCollection({
canonical: z.string().url().optional(),
permalink: z.string().optional(),
publishDate: z.string().transform((str) => new Date(str)),
publishDate: z.date().optional(),
draft: z.boolean().optional(),
excerpt: z.string().optional(),
category: z.string().optional(),
tags: z.array(z.string()).optional(),
authors: z.array(z.string()).optional(),
author: z.string().optional(),
},
slug: ({ defaultSlug, data }) => {
return data.permalink || defaultSlug;
return cleanSlug(data.permalink || defaultSlug);
},
});

View File

@ -5,14 +5,13 @@ import Layout from '~/layouts/PageLayout.astro';
import BlogList from '~/components/blog/List.astro';
import Pagination from '~/components/common/Pagination.astro';
import { fetchPosts } from '~/utils/posts';
import { getCanonical, getPermalink, BLOG_BASE } from '~/utils/permalinks';
import { fetchPosts } from '~/utils/blog';
import { BLOG_BASE } from '~/utils/permalinks';
import Title from '~/components/blog/Title.astro';
export async function getStaticPaths({ paginate }) {
if (BLOG?.disabled || BLOG?.blog?.disabled) return [];
const posts = await fetchPosts();
return paginate(posts, {
return paginate(await fetchPosts(), {
params: { blog: BLOG_BASE || undefined },
pageSize: BLOG.postsPerPage,
});

View File

@ -5,8 +5,8 @@ import Layout from '~/layouts/PageLayout.astro';
import BlogList from '~/components/blog/List.astro';
import Pagination from '~/components/common/Pagination.astro';
import { fetchPosts } from '~/utils/posts';
import { cleanSlug, CATEGORY_BASE } from '~/utils/permalinks';
import { fetchPosts } from '~/utils/blog';
import { CATEGORY_BASE } from '~/utils/permalinks';
import Title from '~/components/blog/Title.astro';
export async function getStaticPaths({ paginate }) {
@ -22,7 +22,7 @@ export async function getStaticPaths({ paginate }) {
paginate(
posts.filter((post) => typeof post.category === 'string' && category === post.category.toLowerCase()),
{
params: { category: cleanSlug(category), blog: CATEGORY_BASE || undefined },
params: { category: category, blog: CATEGORY_BASE || undefined },
pageSize: BLOG.postsPerPage,
props: { category },
}

View File

@ -5,16 +5,15 @@ import Layout from '~/layouts/PageLayout.astro';
import SinglePost from '~/components/blog/SinglePost.astro';
import ToBlogLink from '~/components/blog/ToBlogLink.astro';
import { getCanonical, getPermalink, cleanSlug, POST_BASE } from '~/utils/permalinks';
import { fetchPosts } from '~/utils/posts';
import { getCanonical, getPermalink, POST_BASE } from '~/utils/permalinks';
import { fetchPosts } from '~/utils/blog';
import { findImage } from '~/utils/images';
export async function getStaticPaths() {
if (BLOG?.disabled || BLOG?.post?.disabled) return [];
const posts = await fetchPosts();
return posts.map((post) => ({
return (await fetchPosts()).map((post) => ({
params: {
slug: cleanSlug(post.slug),
slug: post.slug,
blog: POST_BASE || undefined,
},
props: { post },

View File

@ -5,8 +5,8 @@ import Layout from '~/layouts/PageLayout.astro';
import BlogList from '~/components/blog/List.astro';
import Pagination from '~/components/common/Pagination.astro';
import { fetchPosts } from '~/utils/posts';
import { getCanonical, getPermalink, cleanSlug, TAG_BASE } from '~/utils/permalinks';
import { fetchPosts } from '~/utils/blog';
import { TAG_BASE } from '~/utils/permalinks';
import Title from '~/components/blog/Title.astro';
export async function getStaticPaths({ paginate }) {
@ -22,7 +22,7 @@ export async function getStaticPaths({ paginate }) {
paginate(
posts.filter((post) => Array.isArray(post.tags) && post.tags.find((elem) => elem.toLowerCase() === tag)),
{
params: { tag: cleanSlug(tag), blog: TAG_BASE || undefined },
params: { tag: tag, blog: TAG_BASE || undefined },
pageSize: BLOG.postsPerPage,
props: { tag },
}

View File

@ -1,7 +1,7 @@
import rss from '@astrojs/rss';
import { SITE, BLOG } from '~/config.mjs';
import { fetchPosts } from '~/utils/posts';
import { fetchPosts } from '~/utils/blog';
import { getPermalink } from '~/utils/permalinks';
export const get = async () => {

View File

@ -16,7 +16,7 @@ export interface Post {
excerpt?: string;
category?: string;
tags?: Array<string>;
authors?: Array<string>;
author?: string;
Content: unknown;
content?: string;

View File

@ -1,15 +1,24 @@
import { getCollection, getEntry } from 'astro:content';
import type { CollectionEntry } from 'astro:content';
import type { Post } from '~/types';
import { cleanSlug } from './permalinks';
const getNormalizedPost = async (post: CollectionEntry<'blog'>): Promise<Post> => {
const { id, slug, data } = post;
const { Content, injectedFrontmatter } = await post.render();
const { tags = [], category = 'default', author = 'Anonymous', publishDate, ...rest } = data;
return {
id: id,
slug: slug,
...data,
publishDate: new Date(publishDate),
category: cleanSlug(category),
tags: tags.map((tag: string) => cleanSlug(tag)),
author,
...rest,
Content: Content,
// or 'body' in case you consume from API