diff options
feat: prerendering page
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/blog/_posts/+page.server.ts | 13 | ||||
| -rw-r--r-- | src/routes/blog/_posts/+page.svelte | 32 |
2 files changed, 45 insertions, 0 deletions
diff --git a/src/routes/blog/_posts/+page.server.ts b/src/routes/blog/_posts/+page.server.ts new file mode 100644 index 0000000..bc9d5d9 --- /dev/null +++ b/src/routes/blog/_posts/+page.server.ts @@ -0,0 +1,13 @@ +import { parsePost, type Post } from '$/lib/blog/Post.svelte' + +const posts = import.meta.glob("../posts/*.svx") as Record<string, () => Promise<Post>> +const returnedData = Promise.all(Object.entries(posts).map(v => v[1]().then(r => [v[0], { + ...parsePost(r as Post), + default: null, +}] as const))); + +export const load = async () => { + return { + posts: Object.fromEntries(await returnedData) + } +} diff --git a/src/routes/blog/_posts/+page.svelte b/src/routes/blog/_posts/+page.svelte new file mode 100644 index 0000000..2f7ca25 --- /dev/null +++ b/src/routes/blog/_posts/+page.svelte @@ -0,0 +1,32 @@ +<script lang="ts"> + import { resolve } from '$app/paths'; + import type { PageProps } from '../_/$types'; + import { browser } from '$app/environment'; + import { onMount, tick } from 'svelte'; + import { goto } from '$app/navigation'; + + let { data }: PageProps = $props(); + let posts = $derived(Object.entries(data.posts)); + onMount(() => { + requestAnimationFrame(() => goto(resolve('/blog/'))); + tick().then(() => goto(resolve('/blog/'))); + }); +</script> + +{#if !browser} + {#each posts as a} + <!-- svelte-ignore a11y_consider_explicit_label --> + <a + href={resolve('/blog/[id=int]-[slug]', { + id: a[1].metadata.id.toString(), + slug: a[1].metadata.slug, + })} + ></a> + <!-- svelte-ignore a11y_consider_explicit_label --> + <a + href={resolve('/blog/[id=int]', { + id: a[1].metadata.id.toString(), + })} + ></a> + {/each} +{/if} |