| 1 | // Lightweight invalidation channel: Follow does not eagerly load the directory UI. |
| 2 | type Signal = "dirty" | "suspend"; |
| 3 | const listeners = new Map<string, (signal: Signal) => void>(); |
| 4 | export function observeOutline(tab: string, listener: (signal: Signal) => void): () => void { |
| 5 | listeners.set(tab, listener); |
| 6 | return () => { if (listeners.get(tab) === listener) listeners.delete(tab); }; |
| 7 | } |
| 8 | export function signalOutline(tab: string, signal: Signal = "dirty"): void { listeners.get(tab)?.(signal); } |
| 9 |