data endpoint for entity 90008 (aka. a website)
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: format stuffs fix warnings

dusk 081e709b 25ee5d47

+127 -93
+26 -23
src/routes/entries/+layout.server.ts
··· 1 - import convertDate from "$lib/convertDate"; 1 + import convertDate from '$lib/convertDate'; 2 2 3 3 export interface PostData { 4 - path: string, 5 - published: string, 6 - metadata: Record<string, string>, 4 + path: string; 5 + published: string; 6 + metadata: Record<string, string>; 7 7 } 8 8 9 9 const allPostFiles: Record<string, any> = import.meta.glob('./*/+page.md', { eager: true }); 10 - const allPosts: PostData[] = Object.entries(allPostFiles).map(([path, post]) => { 11 - const postPath = path.slice(2, -8); 12 - return { 13 - metadata: post.metadata, 14 - path: postPath, 15 - published: convertDate(post.metadata.date) 16 - }; 17 - }).map((post) => { 18 - if (!("excerpt" in post.metadata)) { 19 - post.metadata.excerpt = "" 20 - } 21 - return post; 22 - }).toSorted((post, opost) => { 23 - const date = new Date(post.metadata.date); 24 - const odate = new Date(opost.metadata.date); 25 - return odate.getTime() - date.getTime() 26 - }); 10 + const allPosts: PostData[] = Object.entries(allPostFiles) 11 + .map(([path, post]) => { 12 + const postPath = path.slice(2, -8); 13 + return { 14 + metadata: post.metadata, 15 + path: postPath, 16 + published: convertDate(post.metadata.date) 17 + }; 18 + }) 19 + .map((post) => { 20 + if (!('excerpt' in post.metadata)) { 21 + post.metadata.excerpt = ''; 22 + } 23 + return post; 24 + }) 25 + .toSorted((post, opost) => { 26 + const date = new Date(post.metadata.date); 27 + const odate = new Date(opost.metadata.date); 28 + return odate.getTime() - date.getTime(); 29 + }); 27 30 export const _allPosts = allPosts; 28 31 29 - export async function load({}) { 32 + export async function load() { 30 33 if (!allPosts.length) { 31 34 return { status: 404 }; 32 35 } 33 36 return { posts: allPosts }; 34 - } 37 + }
+18 -16
src/routes/entries/+page.svelte
··· 15 15 <div class="mx-auto md:max-w-fit flex flex-col-reverse md:flex-row gap-y-4 gap-x-16"> 16 16 <div class="flex flex-col gap-y-4"> 17 17 {#each posts as post} 18 - <Window title={post.metadata.title} iconUri='/icons/entry.webp'> 19 - <a 20 - href="/entries/{post.path}" 21 - title="cd /entries/{post.path}" 22 - data-sveltekit-preload-data="off" 23 - > 24 - <div class="flex flex-col prose prose-ralsei leading-5"> 25 - <ul> 26 - <li>published on: <time datetime="{post.metadata.date} 00:00:00">{post.published}</time></li> 27 - <li class="max-w-[34ch] text-wrap">excerpt: {post.metadata.excerpt}</li> 28 - </ul> 29 - <strong class="place-self-end text-ralsei-green-light"> read more... </strong> 30 - </div> 31 - </a> 32 - </Window> 18 + <Window title={post.metadata.title} iconUri="/icons/entry.webp"> 19 + <a 20 + href="/entries/{post.path}" 21 + title="cd /entries/{post.path}" 22 + data-sveltekit-preload-data="off" 23 + > 24 + <div class="flex flex-col prose prose-ralsei leading-5"> 25 + <ul> 26 + <li> 27 + published on: <time datetime="{post.metadata.date} 00:00:00">{post.published}</time> 28 + </li> 29 + <li class="max-w-[34ch] text-wrap">excerpt: {post.metadata.excerpt}</li> 30 + </ul> 31 + <strong class="place-self-end text-ralsei-green-light"> read more... </strong> 32 + </div> 33 + </a> 34 + </Window> 33 35 {/each} 34 36 </div> 35 - <LogPage {data}/> 37 + <LogPage {data} /> 36 38 </div>
+14 -12
src/routes/entries/_rss/+server.ts
··· 3 3 4 4 const entriesUrl = `${PUBLIC_BASE_URL}/entries`; 5 5 6 - export const GET = async ({ }) => { 7 - return new Response( 8 - render(_allPosts), 9 - { 10 - headers: { 11 - 'content-type': 'application/xml', 12 - 'cache-control': 'no-store', 13 - } 14 - }) 6 + export const GET = async () => { 7 + return new Response(render(_allPosts), { 8 + headers: { 9 + 'content-type': 'application/xml', 10 + 'cache-control': 'no-store' 11 + } 12 + }); 15 13 }; 16 14 17 15 const render = (posts: PostData[]) => `<?xml version="1.0" encoding="UTF-8" ?> ··· 21 19 <title>dusk's posts (@gaze.systems)</title> 22 20 <link>${entriesUrl}</link> 23 21 <description>posts from my website</description> 24 - ${posts.map((post) => `<item> 22 + ${posts 23 + .map( 24 + (post) => `<item> 25 25 <guid>${entriesUrl}/${post.path}</guid> 26 26 <title>${post.metadata.title}</title> 27 27 <link>${entriesUrl}/${post.path}</link> 28 28 <description>${post.metadata.excerpt}</description> 29 29 <pubDate>${new Date(post.metadata.date).toUTCString()}</pubDate> 30 - </item>`).join('')} 30 + </item>` 31 + ) 32 + .join('')} 31 33 </channel> 32 34 </rss> 33 - `; 35 + `;
+10 -10
src/routes/entries/japan-trip24/+page.server.ts
··· 1 - import images from './images.json' 1 + import images from './images.json'; 2 2 3 - export async function load({}) { 3 + export async function load() { 4 4 return { 5 - images: images.map((id) => { 6 - return { 7 - og: `https://res.cloudinary.com/dgtwf7mar/image/upload/v1/${id}`, 8 - thumb: `https://res.cloudinary.com/dgtwf7mar/image/upload/c_fill,w_480,h_480,g_center/c_limit,w_480/f_auto/q_auto/v1/${id}`, 9 - } 10 - }) 11 - }; 12 - } 5 + images: images.map((id) => { 6 + return { 7 + og: `https://res.cloudinary.com/dgtwf7mar/image/upload/v1/${id}`, 8 + thumb: `https://res.cloudinary.com/dgtwf7mar/image/upload/c_fill,w_480,h_480,g_center/c_limit,w_480/f_auto/q_auto/v1/${id}` 9 + }; 10 + }) 11 + }; 12 + }
+7 -7
src/routes/log/+page.server.ts
··· 1 1 import { getLastPosts } from '$lib/bluesky.js'; 2 2 import { noteFromBskyPost } from '../../components/note.svelte'; 3 3 4 - export const load = async ({ }) => { 5 - return _load() 6 - } 4 + export const load = async () => { 5 + return _load(); 6 + }; 7 7 8 8 export const _load = async () => { 9 - return { 10 - feedPosts: getLastPosts().map(noteFromBskyPost), 11 - } 12 - } 9 + return { 10 + feedPosts: getLastPosts().map(noteFromBskyPost) 11 + }; 12 + };
+50 -23
src/routes/log/+page.svelte
··· 1 1 <script lang="ts"> 2 2 import Window from '../../components/window.svelte'; 3 - import Token from '../../components/token.svelte'; 4 - import Note from '../../components/note.svelte'; 3 + import Token from '../../components/token.svelte'; 4 + import Note, { type NoteData } from '../../components/note.svelte'; 5 5 6 - interface Props { 7 - data: any; 8 - } 6 + interface Props { 7 + data: { 8 + feedPosts: NoteData[]; 9 + }; 10 + } 9 11 10 - let { data }: Props = $props(); 12 + let { data }: Props = $props(); 11 13 </script> 12 14 13 15 <Window title="terminal" removePadding> 14 - <div 15 - class=" 16 + <div 17 + class=" 16 18 prose prose-ralsei 17 19 prose-pre:rounded-none prose-pre:!m-0 prose-pre:!p-2 18 20 prose-pre:!bg-ralsei-black prose-code:!bg-ralsei-black 19 21 " 20 - > 21 - <pre class="language-bash"><code class="language-bash"><nobr> 22 - <Token v="[" punct/>gazesystems <Token v="/" keywd/><Token v="]$" punct/> <Token v="source" funct/> <Token v="scripts/log.nu" /> 23 - <br> 24 - <Token v="[" punct/>gazesystems <Token v="/" keywd/><Token v="]$" punct/> <Token v="let" funct/> <Token v="entries"/> <Token v="=" punct/> <Token v="(" punct/><Token v="ls" funct/> <Token v="logs" /> <Token v="|" punct/> <Token v="reverse" funct/> <Token v="|" punct/> <Token v="take" funct/> <Token v="13"/><Token v=")" punct/> 25 - <br> 26 - <Token v="[" punct/>gazesystems <Token v="/" keywd/><Token v="]$" punct/> <Token v="$entries" /> <Token v="|" punct/> <Token v="each" funct/> <Token v="&#123;" punct/><Token v="|" punct/><Token v="file"/><Token v="|" punct/> <Token v="render" funct/> <Token v="(" punct/><Token v="open" funct/> <Token v="$file.name" /><Token v=")" punct/><Token v="&#125;" punct/> 27 - <br> 28 - <br> 22 + > 23 + <pre class="language-bash"><code class="language-bash" 24 + ><nobr> 25 + <Token v="[" punct />gazesystems <Token v="/" keywd /><Token v="]$" punct /> <Token 26 + v="source" 27 + funct 28 + /> <Token v="scripts/log.nu" /> 29 + <br /> 30 + <Token v="[" punct />gazesystems <Token v="/" keywd /><Token v="]$" punct /> <Token 31 + v="let" 32 + funct 33 + /> <Token v="entries" /> <Token v="=" punct /> <Token v="(" punct /><Token 34 + v="ls" 35 + funct 36 + /> <Token v="logs" /> <Token v="|" punct /> <Token v="reverse" funct /> <Token 37 + v="|" 38 + punct 39 + /> <Token v="take" funct /> <Token v="13" /><Token v=")" punct /> 40 + <br /> 41 + <Token v="[" punct />gazesystems <Token v="/" keywd /><Token v="]$" punct /> <Token 42 + v="$entries" 43 + /> <Token v="|" punct /> <Token v="each" funct /> <Token v="&#123;" punct /><Token 44 + v="|" 45 + punct 46 + /><Token v="file" /><Token v="|" punct /> <Token v="render" funct /> <Token 47 + v="(" 48 + punct 49 + /><Token v="open" funct /> <Token v="$file.name" /><Token v=")" punct /><Token 50 + v="&#125;" 51 + punct 52 + /> 53 + <br /> 54 + <br /> 29 55 {#each data.feedPosts as note, index} 30 - <Note {note}/> 56 + <Note {note} /> 31 57 {#if index < data.feedPosts.length - 1} 32 - <div class="mt-3"></div> 33 - {/if} 34 - {/each} 35 - </nobr></code></pre> 36 - </div> 58 + <div class="mt-3"></div> 59 + {/if} 60 + {/each} 61 + </nobr></code 62 + ></pre> 63 + </div> 37 64 </Window>
+2 -2
src/routes/log/_rss/+server.ts
··· 1 1 import { redirect } from '@sveltejs/kit'; 2 2 3 - export const GET = async ({ }) => { 4 - redirect(301, "https://bsky.app/profile/did:plc:dfl62fgb7wtjj3fcbb72naae/rss") 3 + export const GET = async () => { 4 + redirect(301, 'https://bsky.app/profile/did:plc:dfl62fgb7wtjj3fcbb72naae/rss'); 5 5 };