import { getMessageById } from "$lib/api/message"; import { isErrorResponse, type Message } from "$lib/types"; import { get, writable, type Writable } from "svelte/store"; const messagesCache: Writable> = writable(new Map()); const runningCaches = new Set(); export function addMessageToCache(message: Message) { messagesCache.update((messages) => messages.set(message.id, message)); } export async function getCachedMessage(messageId: number): Promise { const cached = get(messagesCache).get(messageId); if (cached) return cached; if (runningCaches.has(messageId)) return await new Promise((resolve) => { messagesCache.subscribe((users) => { const user = users.get(messageId); if (user) { runningCaches.delete(messageId); resolve(user); } }); }); runningCaches.add(messageId); const response = await getMessageById(messageId); if (isErrorResponse(response)) return null; const message = response as Message; addMessageToCache(message); return message; }