UNPKG

crx-rpc

Version:

A lightweight RPC framework for Chrome Extension (background <-> content <-> web)

34 lines (31 loc) 974 B
import { BaseObservable, RPCClient } from "./client"; import { Identifier } from "./id"; import { IMessageAdapter } from "./types"; export const webMessageAdapter: IMessageAdapter = { onMessage<T>(type: string, callback: (message: T) => void) { const handler = (event: any) => { callback(event.detail); } window.addEventListener(type, handler); return () => { window.removeEventListener(type, handler); }; }, sendMessage<T>(type: string, message: T): void { window.dispatchEvent(new CustomEvent(type, { detail: message })); }, }; export class WebRPCClient extends RPCClient { constructor() { super(webMessageAdapter); } } export class WebObservable<T> extends BaseObservable<T> { constructor( identifier: Identifier<T>, key: string, callback: (value: T) => void, ) { super(identifier, key, callback, webMessageAdapter); } }