Ir al contenido

Clase Tabus

Tabus es la única clase pública que expone la librería.

import { Tabus } from "tabus-js";
const bus = new Tabus<Events>(channelName?, options?);
Miembro Descripción
new Tabus<Events>(channelName?, options?) Crea una instancia. channelName por defecto es "tabus".
tabId: string Identificador único de esta instancia/pestaña (crypto.randomUUID() o fallback manual).
on(event, handler) Se suscribe a un evento (incluye "tab:join" / "tab:leave"). Devuelve this (encadenable).
off(event, handler) Cancela la suscripción de un handler específico. Devuelve this.
emit(event, payload) Difunde un evento a todas las demás instancias del mismo canal. La instancia emisora no recibe su propio evento. Devuelve this (encadenable).
destroy() Emite "tab:leave", cierra el transporte y limpia todos los handlers. Es seguro llamarlo varias veces (no-op tras la primera).
new Tabus<Events extends EventMap>(channelName?: string, options?: TabusOptions)
  • channelName (opcional): nombre del canal. Todas las instancias con el mismo nombre, en el mismo origen, se comunican entre sí. Por defecto: "tabus".
  • options (opcional): ver TabusOptions.

Al construirse, Tabus elige automáticamente el transporte adecuado — ver Transportes — y programa la emisión diferida de tab:join (ver Eventos de ciclo de vida).

readonly tabId: string

Identificador único de esta instancia, generado con crypto.randomUUID() (o un fallback manual si no está disponible). Se usa internamente para deduplicar mensajes: Tabus nunca entrega a un handler un mensaje cuyo tabId coincida con el propio.

on<E extends keyof FullEventMap<Events>>(
event: E,
handler: Handler<FullEventMap<Events>[E]>,
): this

Suscribe handler al evento indicado. Acepta tanto los eventos definidos por ti como los internos "tab:join" y "tab:leave". Devuelve this, por lo que las llamadas son encadenables:

bus
.on("data", (payload) => console.log(payload))
.on("tab:join", ({ tabId }) => console.log(tabId));
off<E extends keyof FullEventMap<Events>>(
event: E,
handler: Handler<FullEventMap<Events>[E]>,
): this

Cancela la suscripción de un handler específico previamente registrado con on(). Debe ser la misma referencia de función.

emit<E extends keyof Events>(event: E, payload: Events[E]): this

Difunde event con payload a todas las demás instancias del mismo canal (en cualquier pestaña o ventana). Devuelve this, por lo que es encadenable igual que on() y off().

El tipo de event está restringido a keyof Events — es decir, no puedes emitir "tab:join" ni "tab:leave" manualmente: TypeScript lo rechaza, porque esos eventos son responsabilidad exclusiva de Tabus.

Si se configuró throttle en el constructor, emit() limita la frecuencia real de envío — ver Throttling.

destroy(): void

Emite "tab:leave" (si correspondía), cierra el transporte subyacente (cerrando el BroadcastChannel o liberando los listeners en memoria) y limpia todos los handlers registrados.

  • Opciones: la forma de TabusOptions.
  • Tipos: Handler, EventMap, TabusMessage, InternalEvents y FullEventMap.