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