js-broadcast-channel
Version:
72 lines (70 loc) • 2.33 kB
TypeScript
interface IBroadcastJS {
close: () => void;
postMessage: (message: Message) => void;
onMessage: (messageName: string, onReceive: (message: Message) => void) => void;
canBrowserSupportBroadcastJS: () => boolean;
hasListeners: (messageName: string) => boolean;
}
interface Message<T = unknown> {
message: string;
data: T;
isInternal?: boolean;
}
interface BroadcastHandlers {
onBeforeSendMessage?: (message: Message) => void;
onAfterSendMessage?: (message: Message) => void;
onBeforePostMessage?: (message: Message) => void;
onAfterPostMessage?: (message: Message) => void;
onBeforeClose?: () => void;
onAfterClose?: () => void;
onError?: (message: Message) => void;
}
declare class BroadcastJS implements IBroadcastJS {
private static bcInstance;
private static bcJSInstance;
private static messageCallbacks;
private static handlers;
constructor(name: string, handlers?: BroadcastHandlers);
/**
* Closes the broadcast channel.
*
* @returns {void}
*
* @example
* const broadcast = new BroadcastJS("channelName");
* broadcast.close();
*/
close(): void;
/**
* Posts a message to the broadcast channel.
*
* @param {Message} message - The message to post.
* @returns {void}
*
* @example
* const broadcast = new BroadcastJS("channelName");
* broadcast.postMessage({ message: "message", data: { count: 0 } });
*/
postMessage(message: Message): void;
/**
* Calls a callback when a message is received.
*
* @param {string} messageName - The name of the message to call the callback for.
* @param {function} onRecieve - The callback to call when a message is received.
* @returns {void}
*
* @example
* const broadcast = new BroadcastJS("channelName");
* broadcast.onMessage("name", (message) => {
* console.log(message);
* });
*/
onMessage<T>(messageName: string, onRecieve: (message: Message<T>) => void): void;
removeMessage(messageName: string): void;
canBrowserSupportBroadcastJS(): boolean;
hasListeners(messageName: string): boolean;
private static internalMessage;
private createMessage;
private createSerializedMessage;
}
export { BroadcastJS, type Message };