Trail (Histórico)
Histórico de eventos por canal: publicados, recebidos e desinscrições. Limite opcional com maxHistory e toText() para debug.
Uso básico
ts
import { Fox } from "fox-events";
const channel = Fox.channel<{ userId: string }>("user:login");
channel.emit({ userId: "u-1" });
channel.on((payload) => console.log(payload.userId));
const snapshot = channel.trail();
console.log(snapshot.published); // EventTrail<T>[]
console.log(snapshot.received); // EventTrail<T>[]
console.log(snapshot.unsubscribed); // UnsubscribedHistory[]
console.log(snapshot.toText()); // string formatada para logsmaxHistory
Limita quantos itens são mantidos em cada lista. Itens antigos são removidos após cada registro.
ts
const channel = Fox.channel<{ id: string }>("user:action", {
maxHistory: 100,
});
channel.emit({ id: "1" });
// ... após 100+ publicados, só os últimos 100 permanecem
const snap = channel.trail();
console.log(snap.published.length); // <= 100clearTrail
Zera todo o histórico daquele canal.
ts
channel.clearTrail();
const snap = channel.trail();
console.log(snap.published.length); // 0Trail global
Para observar todos os eventos da página em um único lugar (vários canais, uma lista), inscreva-se em cada canal e acumule as entradas em um estado único. Exemplo:
ts
const canais = [
{ nome: "app:login", channel: loginChannel },
{ nome: "app:cart", channel: cartChannel },
{ nome: "app:theme", channel: themeChannel },
];
const [entradas, setEntradas] = useState<Array<{ canal: string; payload: unknown; at: number }>>([]);
const MAX = 50;
const adicionar = (canal: string, payload: unknown) => {
setEntradas((prev) => [...prev.slice(-(MAX - 1)), { canal, payload, at: Date.now() }]);
};
useEffect(() => {
const unsubs = canais.map(({ nome, channel }) =>
channel.on((payload: unknown) => adicionar(nome, payload))
);
return () => unsubs.forEach((u) => u());
}, []);Assim você tem uma lista unificada (canal + payload + horário) para debug ou para exibir ao usuário. O limite (MAX) evita crescimento infinito.
Tipos
Exportados de fox-events:
- EventTrail<T> —
{ name: string; payload: T; timestamp: number } - UnsubscribedHistory —
{ name: string; timestamp: number } - HistorySnapshot<T> —
{ published: EventTrail<T>[]; received: EventTrail<T>[]; unsubscribed: UnsubscribedHistory[]; toText(): string }
ts
import type { EventTrail, UnsubscribedHistory, HistorySnapshot } from "fox-events";