From b41404e86beb473dce31b7b4dbabbdc9be38e9b3 Mon Sep 17 00:00:00 2001 From: Jack Merrill Date: Wed, 28 Aug 2024 00:39:17 -0400 Subject: [PATCH] use astro collections --- astro.config.mjs | 8 +-- src/components/WorkCard.astro | 50 ------------------ src/content/config.ts | 15 ++++++ src/{pages => content}/work/jacknet/index.md | 1 - .../work/this-website/index.md | 1 - .../work/this-website/thumb.png} | Bin .../work/[slug]/index.astro} | 43 ++++++++++----- src/pages/work/index.astro | 31 ++++++++++- 8 files changed, 77 insertions(+), 72 deletions(-) delete mode 100644 src/components/WorkCard.astro create mode 100644 src/content/config.ts rename src/{pages => content}/work/jacknet/index.md (98%) rename src/{pages => content}/work/this-website/index.md (87%) rename src/{assets/img/work/this-website-thumb.png => content/work/this-website/thumb.png} (100%) rename src/{components/WorkLayout.astro => pages/work/[slug]/index.astro} (74%) diff --git a/astro.config.mjs b/astro.config.mjs index f71d3c1..1695799 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -13,7 +13,7 @@ export default defineConfig({ integrations: [tailwind(), react()], output: "hybrid", adapter: vercel({ - // imageService: true, + imageService: true, webAnalytics: { enabled: true, }, @@ -22,7 +22,7 @@ export default defineConfig({ }, functionPerRoute: true, }), - image: { - service: squooshImageService(), - }, + // image: { + // service: passthroughImageService(), + // }, }); diff --git a/src/components/WorkCard.astro b/src/components/WorkCard.astro deleted file mode 100644 index 2ca3b61..0000000 --- a/src/components/WorkCard.astro +++ /dev/null @@ -1,50 +0,0 @@ ---- -import type { MarkdownInstance } from "astro"; -import { Image } from "astro:assets"; - -interface Props { - post: MarkdownInstance>; -} - -const { post } = Astro.props; -const postId = post.url!.split("/")[2]; -const images = import.meta.glob<{ default: ImageMetadata }>( - "/src/assets/img/work/*-thumb.{jpeg,jpg,png,gif}" -); - -if ( - !images[`/src/assets/img/work/${postId}-thumb.png`] && - post.frontmatter.image -) - throw new Error( - `"/src/assets/img/work/${postId}-thumb.png" does not exist in glob: "/src/assets/work/**/*-thumb.{jpeg,jpg,png,gif}"` - ); ---- - - -
-
- { - post.frontmatter.image && ( - {post.frontmatter.title} - ) - } - -
-

- {post.frontmatter.title} -

-

{post.frontmatter.description}

-
-
-
-

View →

-
diff --git a/src/content/config.ts b/src/content/config.ts new file mode 100644 index 0000000..d090a87 --- /dev/null +++ b/src/content/config.ts @@ -0,0 +1,15 @@ +import { defineCollection, z } from "astro:content"; + +const workCollection = defineCollection({ + schema: ({ image }) => + z.object({ + title: z.string(), + description: z.string(), + image: image().optional(), + link: z.string().optional(), + }), +}); + +export const collections = { + work: workCollection, +}; diff --git a/src/pages/work/jacknet/index.md b/src/content/work/jacknet/index.md similarity index 98% rename from src/pages/work/jacknet/index.md rename to src/content/work/jacknet/index.md index 53157d7..32d5fc3 100644 --- a/src/pages/work/jacknet/index.md +++ b/src/content/work/jacknet/index.md @@ -1,5 +1,4 @@ --- -layout: ../../../components/WorkLayout.astro title: JackNet description: "My various servers and services I host in my dorm room." --- diff --git a/src/pages/work/this-website/index.md b/src/content/work/this-website/index.md similarity index 87% rename from src/pages/work/this-website/index.md rename to src/content/work/this-website/index.md index 907e1e8..677d4f5 100644 --- a/src/pages/work/this-website/index.md +++ b/src/content/work/this-website/index.md @@ -1,5 +1,4 @@ --- -layout: ../../../components/WorkLayout.astro title: This Website description: "The website you're currently on. Built with Astro, Tailwind CSS, and MDX." image: "thumb.png" diff --git a/src/assets/img/work/this-website-thumb.png b/src/content/work/this-website/thumb.png similarity index 100% rename from src/assets/img/work/this-website-thumb.png rename to src/content/work/this-website/thumb.png diff --git a/src/components/WorkLayout.astro b/src/pages/work/[slug]/index.astro similarity index 74% rename from src/components/WorkLayout.astro rename to src/pages/work/[slug]/index.astro index 8849687..240b55f 100644 --- a/src/components/WorkLayout.astro +++ b/src/pages/work/[slug]/index.astro @@ -1,10 +1,29 @@ --- import { Image } from "astro:assets"; -import Layout from "./Layout.astro"; +import Layout from "../../../components/Layout.astro"; +import { getCollection, getEntry } from "astro:content"; -const { frontmatter } = Astro.props; +const { slug } = Astro.params; -const postId = frontmatter.url!.split("/")[2]; +const post = await getEntry("work", slug as string); + +if (!post) { + return { + status: 404, + }; +} + +const { Content, headings } = await post.render(); + +export async function getStaticPaths() { + const posts = await getCollection("work"); + + return posts.map((post) => ({ + params: { + slug: post.slug, + }, + })); +} --- @@ -40,27 +59,23 @@ const postId = frontmatter.url!.split("/")[2]; { - frontmatter.image && ( + post.data.image && (
- {frontmatter.title} + {post.data.title}
) }