Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | // lib/awareness/bus.ts import { AWARENESS_ENABLED, AwarenessEventPayload, TELEMETRY_ENABLED, AwarenessEvent, } from './events'; import { updateSnapshot, resetSnapshot } from './snapshot'; type AwarenessListener = (event: AwarenessEventPayload) => void; const listeners: Set<AwarenessListener> = new Set(); // For testing purposes function _resetListeners(): void { listeners.clear(); } export function resetBus(): void { _resetListeners(); resetSnapshot(); } export function subscribe(listener: AwarenessListener): () => void { listeners.add(listener); return () => { listeners.delete(listener); }; } export function publish(event: AwarenessEventPayload): void { if (!AWARENESS_ENABLED) { return; } if (event.type === AwarenessEvent.TELEMETRY_METRIC && !TELEMETRY_ENABLED) { return; } // Log to console for debugging, respecting the guards if (process.env.NODE_ENV !== 'test') { console.log('[Awareness]', event.type, event.payload); } // Update internal state snapshot updateSnapshot(event); // Notify subscribers listeners.forEach(listener => { try { listener(event); } catch (error) { console.error('Error in awareness listener:', error); } }); } |