/** * Dashboard Server Registry — API générique * * Les features s'enregistrent ici via registerServerWidget(). * Ce fichier ne doit jamais importer une feature directement. * Les features dépendent de ce fichier, pas l'inverse. */ const widgets = new Map(); // id → fetcher /** * Enregistre une fonction de fetch pour le tableau de bord. * Appelé en side effect par chaque feature (ex: auth/dashboard.server.js). * @param {string} id - Identifiant unique de la feature * @param {() => Promise} fetcher - Fonction async retournant des données sérialisables */ export function registerServerWidget(id, fetcher) { widgets.set(id, fetcher); } /** * Exécute tous les fetchers enregistrés en parallèle. * Un fetcher qui échoue n'empêche pas les autres (Promise.allSettled). * @returns {Promise>} Map featureId → données */ export async function collectAllDashboardData() { const results = await Promise.allSettled( Array.from(widgets.entries()).map(([id, fetcher]) => fetcher().then(data => ({ id, data })) ) ); return results.reduce((acc, result) => { if (result.status === 'fulfilled') { acc[result.value.id] = result.value.data; } return acc; }, {}); }