Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
31 lines
926 B
TypeScript
31 lines
926 B
TypeScript
// The other games of Kestrel's Hall, from the family list the kit keeps
|
|
// (family.json, one copy shipped with every game), so a player who liked one
|
|
// table can find the next, and the hall's front door. This game is left out
|
|
// of its own list.
|
|
|
|
export interface FamilyGame {
|
|
slug: string;
|
|
name: string;
|
|
url: string;
|
|
pitch: string;
|
|
players: string;
|
|
origin: string;
|
|
}
|
|
|
|
/** The family list: the hall's front door and every game but this one. */
|
|
export interface Family {
|
|
hall: string;
|
|
games: FamilyGame[];
|
|
}
|
|
|
|
export async function loadFamily(self: string): Promise<Family> {
|
|
try {
|
|
const res = await fetch('/family.json', { cache: 'no-cache' });
|
|
if (!res.ok) return { hall: '', games: [] };
|
|
const data = (await res.json()) as { hall?: string; games?: FamilyGame[] };
|
|
return { hall: data.hall ?? '', games: (data.games ?? []).filter((g) => g.slug !== self) };
|
|
} catch {
|
|
return { hall: '', games: [] };
|
|
}
|
|
}
|