aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/blog/Post.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/blog/Post.ts')
-rw-r--r--src/lib/blog/Post.ts28
1 files changed, 28 insertions, 0 deletions
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),
+});