UNPKG

adnbn

Version:

Addon Bone - Cross-browser web extension framework with shared code base

41 lines (39 loc) 2.3 kB
declare const MessageGlobalKey = "adnbnMessage"; declare const MessageTypeSeparator = ":"; declare const MessageSenderProperty = "_sender"; type MessageSender = chrome.runtime.MessageSender; type MessageSendOptions = number | { tabId: number; frameId?: number; documentId?: string; }; interface MessageDictionary { [key: string]: (data: any) => any; } interface MessageSenderAware { [MessageSenderProperty]?: MessageSender; } type MessageType<T extends MessageDictionary> = Extract<keyof T, string>; type MessageData<T extends MessageDictionary, K extends MessageType<T>> = Parameters<T[K]>[0]; type MessageResponse<T extends MessageDictionary, K extends MessageType<T>> = ReturnType<T[K]>; type MessageTargetHandler<T extends MessageDictionary, K extends MessageType<T>> = (data: MessageData<T, K>, sender: MessageSender) => MessageResponse<T, K>; type MessageMapHandler<T extends MessageDictionary> = { [K in MessageType<T>]?: MessageTargetHandler<T, K>; }; type MessageGeneralHandler<T extends MessageDictionary, K extends MessageType<T>> = (type: K, data: MessageData<T, K>, sender: MessageSender) => any; interface MessageBody<T extends MessageDictionary, K extends MessageType<T>> { id: string; type: K; data: MessageData<T, K>; timestamp: number; } interface MessageProvider<T extends MessageDictionary, TOptions = void> { send<K extends MessageType<T>>(type: K, data: MessageData<T, K>, options?: TOptions): Promise<MessageResponse<T, K>>; watch<K extends MessageType<T>>(type: K, handler: MessageTargetHandler<T, K>): () => void; watch(map: MessageMapHandler<T>): () => void; watch<K extends MessageType<T>>(general: MessageGeneralHandler<T, K>): () => void; } interface MessageHandler<T extends MessageDictionary> { run(type: MessageType<T>, data: MessageData<T, MessageType<T>>, sender: MessageSender): MessageResponse<T, MessageType<T>> | undefined | null; } export { type MessageBody, type MessageData, type MessageDictionary, type MessageGeneralHandler, MessageGlobalKey, type MessageHandler, type MessageMapHandler, type MessageProvider, type MessageResponse, type MessageSendOptions, type MessageSender, type MessageSenderAware, MessageSenderProperty, type MessageTargetHandler, type MessageType, MessageTypeSeparator };