UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

33 lines (32 loc) 1.68 kB
import { firstValueFrom } from 'rxjs'; import { toArray } from 'rxjs/operators'; import { isFeatureAdapter } from "../../data_adapters/BaseAdapter/index.js"; import { getAdapter } from "../../data_adapters/dataAdapterCache.js"; import RpcMethodType from "../../pluggableElementTypes/RpcMethodType.js"; import { renameRegionsIfNeeded } from "../../util/index.js"; import SimpleFeature from "../../util/simpleFeature.js"; export default class CoreGetFeatures extends RpcMethodType { name = 'CoreGetFeatures'; async deserializeReturn(feats, args, rpcDriver) { const superDeserialized = (await super.deserializeReturn(feats, args, rpcDriver)); return superDeserialized.map(feat => new SimpleFeature(feat)); } async serializeArguments(args, rpcDriver) { const { rootModel } = this.pluginManager; const assemblyManager = rootModel.session.assemblyManager; const renamedArgs = await renameRegionsIfNeeded(assemblyManager, args); return super.serializeArguments(renamedArgs, rpcDriver); } async execute(args, rpcDriver) { const pm = this.pluginManager; const deserializedArgs = await this.deserializeArguments(args, rpcDriver); const { sessionId, adapterConfig, regions, opts } = deserializedArgs; const { dataAdapter } = await getAdapter(pm, sessionId, adapterConfig); if (!isFeatureAdapter(dataAdapter)) { throw new Error('Adapter does not support retrieving features'); } const ret = dataAdapter.getFeaturesInMultipleRegions(regions, opts); const r = await firstValueFrom(ret.pipe(toArray())); return r.map(f => f.toJSON()); } }