aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/blog
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/blog')
-rw-r--r--src/lib/blog/Post.svelte19
-rw-r--r--src/lib/blog/Post.ts28
2 files changed, 47 insertions, 0 deletions
diff --git a/src/lib/blog/Post.svelte b/src/lib/blog/Post.svelte
new file mode 100644
index 0000000..20178e4
--- /dev/null
+++ b/src/lib/blog/Post.svelte
@@ -0,0 +1,19 @@
+<script lang="ts" module>
+ export * from './Post';
+</script>
+
+<script lang="ts">
+ import type { Post } from './Post';
+
+ let {
+ post,
+ }: {
+ post: Post;
+ } = $props();
+
+ let PostComp = $derived(post.default);
+</script>
+
+<div id="postmd">
+ <PostComp />
+</div>
diff --git a/src/lib/blog/Post.ts b/src/lib/blog/Post.ts
new file mode 100644
index 0000000..440dffa
--- /dev/null
+++ b/src/lib/blog/Post.ts
@@ -0,0 +1,28 @@
+
+import type { Component } from 'svelte';
+
+export type PostMetadata<Parsed extends boolean = false> = {
+ title: string;
+ blurb: string;
+ author: string | null;
+ slug: string;
+ id: string | number;
+ created: Parsed extends true ? Date : string;
+ updated: Parsed extends true ? Date : string;
+};
+export type Post<MetadataParsed extends boolean = false> = {
+ metadata: PostMetadata<MetadataParsed>;
+ default: Component;
+};
+
+export const parsePostMetadata = (
+ m: PostMetadata<boolean>,
+): PostMetadata<true> => ({
+ ...m,
+ created: new Date(m.created),
+ updated: new Date(m.updated),
+});
+export const parsePost = (p: Post<boolean>): Post<true> => ({
+ ...p,
+ metadata: parsePostMetadata(p.metadata),
+});