UNPKG

tab-syncer

Version:

A lightweight (4KB) library for browser tab state synchronization and communication. Supports auto-persistence and real-time data sync between tabs.

69 lines (63 loc) 2.55 kB
type SyncMode = 'broadcast' | 'localstorage'; type EventMap = { [k: string]: any; }; interface BaseSync<T extends EventMap> { notify<E extends keyof T>(event: E, params: T[E]): void; subscribe(event: string, callback: (message: string) => void): void; unsubscribe(event: string, callback: (message: string) => void): void; } interface StateOptions<T> { persist: boolean; } declare class BroadcastHandler<T extends EventMap> implements BaseSync<T> { private static instance; private name; private bc; listeners: Map<string, ((event: any) => void)>; private constructor(); static getInstance<T extends EventMap>(name: string): BroadcastHandler<T>; _listenOn(): void; notify<E extends keyof T>(event: E, params: T[E]): void; subscribe<E extends keyof T>(event: E, callback: (params: T[E]) => void): void; unsubscribe<E extends keyof T>(event: E, callback: (params: T[E]) => void): void; dispose(): void; } interface TabSyncerType<T extends EventMap> extends BaseSync<T> { setState(state: any): void; getState(): any; onStateChange(callback: (state: any) => void): void; } declare class State<T> { _data: T; _listeners: ((state: T) => void)[]; _notifier: (state: T) => void; _subscriber: ((cb: (params: T) => void) => void); _options: StateOptions<T>; get data(): T; set data(value: T); constructor(initialState: T, subscriber: ((cb: (params: T) => void) => void), notifier: (state: T) => void, options?: StateOptions<T>); setState(param: T | ((prevState: T) => T), notify?: boolean): T; getState(): T; onStateChange(listener: (state: T) => void): void; offStateChange(listener: (state: T) => void): void; stateFromLocalStorage(): any; persist(data: T): void; removeAllListeners(): void; dispose(): void; } declare class TabSyncer<T extends EventMap, P extends object> implements TabSyncerType<T> { private name; private mode; private state; private _handler; constructor(name: string, mode: SyncMode, initialState: P); getHandler(): BroadcastHandler<T>; notify<E extends keyof T>(event: E, params: T[E]): void; subscribe<E extends keyof T>(event: E, callback: (params: T[E]) => void): void; unsubscribe<E extends keyof T>(event: E, callback: (params: T[E]) => void): void; setState(...params: Parameters<State<P>['setState']>): void; getState(): any; onStateChange(callback: (...args: Parameters<State<P>['setState']>) => void): void; } export { TabSyncer };