UNPKG

altair-graphql-core

Version:

Several of the core logic for altair graphql client

61 lines 2.09 kB
import { EvaluatorWorker } from '../../evaluator/worker'; export const instanceTypes = { MAIN: 'main', PANEL: 'panel', }; export class PluginFrameWorker extends EvaluatorWorker { constructor() { super(); this.instanceType = instanceTypes.MAIN; this.messageListeners = []; // Check for params in special params object on the window object first. Using srcdoc, we will set the params on the window object const paramFromWindow = window.__ALTAIR_PLUGIN_PARAMS__; const paramsFromUrl = Object.fromEntries(new URLSearchParams(window.location.search)); const params = paramFromWindow ?? paramsFromUrl; this.params = params; if (!params.sc) { console.log('Invalid source provided!', paramFromWindow, paramsFromUrl); throw new Error('Invalid source provided!'); } if (!params.id) { throw new Error('Invalid plugin ID provided!'); } this.origin = params.sc; this.id = params.id; this.instanceType = params.instanceType ?? instanceTypes.MAIN; } getInstanceType() { return this.instanceType; } getParams() { return this.params; } onMessage(handler) { const listener = (e) => { if (e.origin !== this.origin) { return; } handler(e.data); }; window.addEventListener('message', listener); this.messageListeners.push(listener); } send(type, payload) { window.parent.postMessage({ type, payload, frameId: this.id }, this.origin); } onError(handler) { window.addEventListener('error', handler); window.addEventListener('unhandledrejection', (e) => { e.preventDefault(); handler(e.reason); }); } destroy() { // cleanup resources this.messageListeners.forEach((listener) => { window.removeEventListener('message', listener); }); window.close(); } } //# sourceMappingURL=frame-worker.js.map