ai-labs-team/casium-devtools

View on GitHub
src/messaging.ts

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
import { SerializedMessage } from './instrumenter';

export type Listener = (msg: SerializedMessage) => any;

window.LISTENERS = []

const processMsg = (msg: SerializedMessage) =>
  ([predicate, ...listeners]: Listener[]) => predicate(msg) && listeners.map(l => l(msg));

const backgroundPageConnection = browser.runtime.connect(undefined, {
  name: `CasiumDevToolsPanel@${browser.devtools.inspectedWindow.tabId}`
});

backgroundPageConnection.onMessage.addListener((message: any) => {
  window.LISTENERS.forEach(processMsg(message));
});

window.messageClient = (data) => {
  backgroundPageConnection.postMessage(Object.assign({ from: 'CasiumDevToolsPanel' }, data));
}