From 7454dbb6dc6dfa0581022361d09f38856ae60761 Mon Sep 17 00:00:00 2001 From: Daniel Power Date: Thu, 7 Nov 2024 20:02:38 -0330 Subject: [PATCH] Upgrade to Svelte 5 --- src/lib/server/posts.ts | 73 ++++++++++++------------ src/routes/blog/[slug]/+page.svelte | 2 +- src/routes/rss/+server.ts | 86 ++++++++++++++--------------- svelte.config.js | 25 +++++---- types.ts | 24 ++++---- 5 files changed, 107 insertions(+), 103 deletions(-) diff --git a/src/lib/server/posts.ts b/src/lib/server/posts.ts index 32c17bf..afad5f7 100644 --- a/src/lib/server/posts.ts +++ b/src/lib/server/posts.ts @@ -2,60 +2,61 @@ import type { SvelteComponent } from "svelte"; import type { PostFrontmatter } from "../../../types"; import { assignToBucket } from "./bucket"; import { dev } from "$app/environment"; +import { render } from "svelte/server"; const tagColors = [ - "#faedcb", - "#c9e4de", - "#dbcdf0", - "#f2c6de", - "#ffadad", - "#ffd6a5", - "#fdffb6", + "#faedcb", + "#c9e4de", + "#dbcdf0", + "#f2c6de", + "#ffadad", + "#ffd6a5", + "#fdffb6", ]; const postFiles = import.meta.glob<{ - default: SvelteComponent; - metadata: PostFrontmatter; + default: SvelteComponent; + metadata: PostFrontmatter; }>(`$lib/posts/*.md`); const slugs = Object.keys(postFiles).map( - (path) => path.split("/").at(-1)!.split(".").at(0)!, + (path) => path.split("/").at(-1)!.split(".").at(0)!, ); const data = await Promise.all( - Object.values(postFiles).map((resolver) => resolver()), + Object.values(postFiles).map((resolver) => resolver()), ); export const tags = new Map( - data - .map(({ metadata }) => metadata.tags) - .flat() - .filter(Boolean) - .map((tag) => [ - tag, - { - label: tag, - color: tagColors[assignToBucket(tag, tagColors.length)], - }, - ]), + data + .map(({ metadata }) => metadata.tags) + .flat() + .filter(Boolean) + .map((tag) => [ + tag, + { + label: tag, + color: tagColors[assignToBucket(tag, tagColors.length)], + }, + ]), ); const posts = data - .map(({ default: component, metadata }, index) => { - const { html, css } = component.render(); - return { - title: metadata.title, - draft: !metadata.date, - date: metadata.date || new Date().toISOString().slice(0, 10), - tags: metadata.tags?.map((tag) => tags.get(tag)!) ?? [], - slug: slugs[index], - content: `${html}`, - }; - }) - .sort((a, b) => +new Date(b.date) - +new Date(a.date)) - .filter((post) => dev || !post.draft); + .map(({ default: component, metadata }, index) => { + const { body } = render(component); + return { + title: metadata.title, + draft: !metadata.date, + date: metadata.date || new Date().toISOString().slice(0, 10), + tags: metadata.tags?.map((tag) => tags.get(tag)!) ?? [], + slug: slugs[index], + body, + }; + }) + .sort((a, b) => +new Date(b.date) - +new Date(a.date)) + .filter((post) => dev || !post.draft); const postsMap = new Map(posts.map((post) => [post.slug, post])); export const getPosts = () => { - return posts; + return posts; }; export const getPost = (slug: string) => postsMap.get(slug); diff --git a/src/routes/blog/[slug]/+page.svelte b/src/routes/blog/[slug]/+page.svelte index f1062d8..293d2d4 100644 --- a/src/routes/blog/[slug]/+page.svelte +++ b/src/routes/blog/[slug]/+page.svelte @@ -12,7 +12,7 @@ {/each} -{@html data.content} +{@html data.body}