aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorLibravatarLarge Libravatar memdmp <memdmpestrogenzone>2026-01-14 04:36:14 +0100
committerLibravatarLarge Libravatar memdmp <memdmpestrogenzone>2026-01-14 04:36:14 +0100
commit481c06cdb6bfb370ba2d84f4b6bb4ba260eb14cd (patch)
treeb022a161677183e9a08e2183c1a254a553907927 /src/lib
parent347824c75406238a6e9d50b4833a60c2c43140a7 (diff)
downloadmem-estrogen-zone-481c06cdb6bfb370ba2d84f4b6bb4ba260eb14cd.tar.gz
mem-estrogen-zone-481c06cdb6bfb370ba2d84f4b6bb4ba260eb14cd.tar.bz2
mem-estrogen-zone-481c06cdb6bfb370ba2d84f4b6bb4ba260eb14cd.tar.lz
mem-estrogen-zone-481c06cdb6bfb370ba2d84f4b6bb4ba260eb14cd.zip

feat: start work on blog

Diffstat (limited to 'src/lib')
-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),
+});