@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
32 lines (31 loc) • 1.52 kB
JavaScript
import { firstValueFrom } from 'rxjs';
import { toArray } from 'rxjs/operators';
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 { stopToken, statusCallback, sessionId, adapterConfig, regions, opts, } = await this.deserializeArguments(args, rpcDriver);
const dataAdapter = (await getAdapter(this.pluginManager, sessionId, adapterConfig)).dataAdapter;
const r = await firstValueFrom(dataAdapter
.getFeaturesInMultipleRegions(regions, {
...opts,
statusCallback,
stopToken,
})
.pipe(toArray()));
return r.map(f => f.toJSON());
}
}