UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

70 lines (69 loc) 3.11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const configuration_1 = require("../configuration"); const MainThreadRpcDriver_1 = __importDefault(require("./MainThreadRpcDriver")); const WebWorkerRpcDriver_1 = __importDefault(require("./WebWorkerRpcDriver")); const configSchema_1 = __importDefault(require("./configSchema")); const DriverClasses = { WebWorkerRpcDriver: WebWorkerRpcDriver_1.default, MainThreadRpcDriver: MainThreadRpcDriver_1.default, }; class RpcManager { constructor(pluginManager, mainConfiguration, backendConfigurations) { this.pluginManager = pluginManager; this.mainConfiguration = mainConfiguration; this.backendConfigurations = backendConfigurations; this.driverObjects = new Map(); } getDriver(backendName) { const driver = this.driverObjects.get(backendName); if (driver) { return driver; } const config = this.mainConfiguration.drivers.get('WebWorkerRpcDriver'); if (backendName === 'MainThreadRpcDriver') { const backendConfiguration = this.backendConfigurations.MainThreadRpcDriver; if (!backendConfiguration) { throw new Error(`requested RPC driver "${backendName}" is missing config`); } const newDriver = new MainThreadRpcDriver_1.default({ ...backendConfiguration, config, }); this.driverObjects.set(backendName, newDriver); return newDriver; } else if (backendName === 'WebWorkerRpcDriver') { const backendConfiguration = this.backendConfigurations.WebWorkerRpcDriver; if (!backendConfiguration) { throw new Error(`requested RPC driver "${backendName}" is missing config`); } const newDriver = new WebWorkerRpcDriver_1.default({ ...backendConfiguration, config }, { plugins: this.pluginManager.runtimePluginDefinitions, windowHref: window.location.href, }); this.driverObjects.set(backendName, newDriver); return newDriver; } else { throw new Error(`requested RPC driver "${backendName}" is not installed`); } } async getDriverForCall(_sessionId, _functionName, args) { const backendName = args.rpcDriverName || (0, configuration_1.readConfObject)(this.mainConfiguration, 'defaultDriver'); return this.getDriver(backendName); } async call(sessionId, functionName, args, opts = {}) { if (!sessionId) { throw new Error('sessionId is required'); } const driverForCall = await this.getDriverForCall(sessionId, functionName, args); return driverForCall.call(this.pluginManager, sessionId, functionName, args, opts); } } RpcManager.configSchema = configSchema_1.default; exports.default = RpcManager;