~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/knotless

git that lives in your Atmosphere account

Forked from chadtmiller.com/knotless

0
0
30 lines · 1.3 KB Raw History
import type * as getPreferences from '#lib/lexicons/dev/knotless/getPreferences.ts';
import type * as listThemes from '#lib/lexicons/dev/knotless/listThemes.ts';
import type { PageLoad } from './$types';
import { xrpc } from '#lib/data.ts';
import { themesOf } from '#lib/preferences.ts';

/** The most themes of one's own Appearance lists, which is all of anyone's but a few. */
const MINE = 100;

/** The themes the viewer published, those it added, and who made each of those still there: none for no one, nor on a server that keeps no index. */
export const load: PageLoad = async (event) => {
	const { me } = await event.parent();
	if (!me) return { mine: [], added: [], makers: {} };
	const [made, prefs] = await Promise.all([
		xrpc<typeof listThemes.main>(
			event,
			'dev.knotless.listThemes',
			{ actor: me.did, limit: MINE },
			true
		),
		xrpc<typeof getPreferences.main>(event, 'dev.knotless.getPreferences', {}, true)
	]);
	const added = prefs ? themesOf(prefs) : [];
	const uris = added.map((a) => a.uri);
	const found = uris.length
		? await xrpc<typeof listThemes.main>(event, 'dev.knotless.listThemes', { uris }, true)
		: null;
	const makers = Object.fromEntries((found?.themes ?? []).map((t) => [t.uri, t.creator.handle]));
	return { mine: made?.themes ?? [], added, makers };
};