JavaScript-optional public web frontend for Bluesky anartia.kelinci.net
sveltekit atcute bluesky typescript svelte
7
fork

Configure Feed

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

refactor: move profile layout inside

Mary 470d30ba 3cd552cb

+15 -3
+3 -3
src/lib/redirector.ts
··· 45 45 46 46 return { 47 47 type: 'internal', 48 - url: resolve('/(app)/(profile)/[actor=didOrHandle]/(timeline)', { actor: match[1] }), 48 + url: resolve('/(app)/[actor=didOrHandle]/(profile)/(timeline)', { actor: match[1] }), 49 49 }; 50 50 } 51 51 ··· 248 248 case 'app.bsky.actor.profile': { 249 249 return { 250 250 type: 'internal', 251 - url: resolve('/(app)/(profile)/[actor=didOrHandle]/(timeline)', { actor: uri.repo }), 251 + url: resolve('/(app)/[actor=didOrHandle]/(profile)/(timeline)', { actor: uri.repo }), 252 252 }; 253 253 } 254 254 case 'app.bsky.feed.post': { ··· 285 285 if (uri.collection === undefined) { 286 286 return { 287 287 type: 'internal', 288 - url: resolve('/(app)/(profile)/[actor=didOrHandle]/(timeline)', { actor: uri.repo }), 288 + url: resolve('/(app)/[actor=didOrHandle]/(profile)/(timeline)', { actor: uri.repo }), 289 289 }; 290 290 } 291 291
src/routes/(app)/(profile)/[actor=didOrHandle]/(timeline)/+layout.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/(timeline)/+layout.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/(timeline)/+page.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/(timeline)/+page.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/(timeline)/+page.ts src/routes/(app)/[actor=didOrHandle]/(profile)/(timeline)/+page.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/(timeline)/media/+page.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/(timeline)/media/+page.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/(timeline)/media/+page.ts src/routes/(app)/[actor=didOrHandle]/(profile)/(timeline)/media/+page.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/(timeline)/rss/+server.ts src/routes/(app)/[actor=didOrHandle]/(profile)/(timeline)/rss/+server.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/(timeline)/with_replies/+page.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/(timeline)/with_replies/+page.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/(timeline)/with_replies/+page.ts src/routes/(app)/[actor=didOrHandle]/(profile)/(timeline)/with_replies/+page.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/+layout.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/+layout.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/+layout.ts src/routes/(app)/[actor=didOrHandle]/(profile)/+layout.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/components/profile-aside.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/components/profile-aside.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/components/profile-meta-tags.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/components/profile-meta-tags.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/feeds/+page.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/feeds/+page.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/feeds/+page.ts src/routes/(app)/[actor=didOrHandle]/(profile)/feeds/+page.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/followers/+page.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/followers/+page.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/followers/+page.ts src/routes/(app)/[actor=didOrHandle]/(profile)/followers/+page.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/following/+page.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/following/+page.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/following/+page.ts src/routes/(app)/[actor=didOrHandle]/(profile)/following/+page.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/lists/+page.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/lists/+page.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/lists/+page.ts src/routes/(app)/[actor=didOrHandle]/(profile)/lists/+page.ts
src/routes/(app)/(profile)/[actor=didOrHandle]/packs/+page.svelte src/routes/(app)/[actor=didOrHandle]/(profile)/packs/+page.svelte
src/routes/(app)/(profile)/[actor=didOrHandle]/packs/+page.ts src/routes/(app)/[actor=didOrHandle]/(profile)/packs/+page.ts
+12
src/routes/(app)/search/posts/+page.ts
··· 4 4 5 5 import { PUBLIC_APPVIEW_URL } from '$env/static/public'; 6 6 import type { PageLoad } from './$types'; 7 + import { mapDefined, unique } from '@mary/array-fns'; 8 + import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky'; 7 9 8 10 export const load: PageLoad = async ({ url }) => { 9 11 const [{ q, sort, cursor }] = useSearchParams(url, { ··· 37 39 } 38 40 39 41 const data = response.data; 42 + 43 + const replyUris = unique( 44 + mapDefined(data.posts, (post) => { 45 + const record = post.record as AppBskyFeedPost.Main; 46 + const reply = record.reply; 47 + if (reply) { 48 + return [reply.root.uri, reply.parent.uri]; 49 + } 50 + }).flat(), 51 + ); 40 52 41 53 return { query, posts: { cursor: data.cursor, items: data.posts } }; 42 54 };