UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

41 lines (40 loc) 2.28 kB
import { validateRendererType } from "./util.js"; import RpcMethodType, { convertFileHandleLocations, } from "../../pluggableElementTypes/RpcMethodType.js"; import { renameRegionsIfNeeded } from "../../util/index.js"; import { getBlobMap, setBlobMap } from "../../util/tracks.js"; export default class CoreRender extends RpcMethodType { name = 'CoreRender'; async serializeArguments(args, rpcDriver) { const { rootModel } = this.pluginManager; const assemblyManager = rootModel.session.assemblyManager; const renamedArgs = await renameRegionsIfNeeded(assemblyManager, args); const superArgs = (await super.serializeArguments(renamedArgs, rpcDriver)); return validateRendererType(args.rendererType, this.pluginManager.getRendererType(args.rendererType)).serializeArgsInClient(superArgs); } async executeDirect(args) { const { rootModel } = this.pluginManager; const assemblyManager = rootModel.session.assemblyManager; const renamedArgs = await renameRegionsIfNeeded(assemblyManager, args); const { sessionId, rendererType } = renamedArgs; if (!sessionId) { throw new Error('must pass a unique session id'); } const { renderingProps, ...rest } = renamedArgs; const blobMap = getBlobMap(); convertFileHandleLocations(rest, blobMap); setBlobMap(blobMap); return validateRendererType(rendererType, this.pluginManager.getRendererType(rendererType)).renderDirect({ ...rest, renderingProps }); } async execute(args, rpcDriver) { const deserializedArgs = await this.deserializeArguments(args, rpcDriver); const { sessionId, rendererType } = deserializedArgs; if (!sessionId) { throw new Error('must pass a unique session id'); } return validateRendererType(rendererType, this.pluginManager.getRendererType(rendererType)).renderInWorker(deserializedArgs); } async deserializeReturn(serializedReturn, args, rpcDriver) { const des = await super.deserializeReturn(serializedReturn, args, rpcDriver); return validateRendererType(args.rendererType, this.pluginManager.getRendererType(args.rendererType)).deserializeResultsInClient(des, args); } }