@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
70 lines (69 loc) • 3.11 kB
JavaScript
;
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;