UNPKG

@jbrowse/plugin-config

Version:

JBrowse 2 config utilities

50 lines (49 loc) 1.78 kB
import { readConfObject } from '@jbrowse/core/configuration'; import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'; import { ObservableCreate } from '@jbrowse/core/util/rxjs'; import SimpleFeature from '@jbrowse/core/util/simpleFeature'; export function makeFeatures(fdata) { const features = new Map(); for (const entry of fdata) { const f = new SimpleFeature(entry); const refName = f.get('refName'); let bucket = features.get(refName); if (!bucket) { bucket = []; features.set(refName, bucket); } bucket.push(f); } for (const refFeatures of features.values()) { refFeatures.sort((a, b) => a.get('start') - b.get('start')); } return features; } export default class FromConfigAdapter extends BaseFeatureDataAdapter { constructor(conf, getSubAdapter, pluginManager) { super(conf, getSubAdapter, pluginManager); const feats = readConfObject(conf, 'features'); this.features = makeFeatures(feats); } async getRefNames() { return [...this.features.keys()]; } async getRefNameAliases() { return [...this.features.values()].map(featureArray => ({ refName: featureArray[0].get('refName'), aliases: featureArray[0].get('aliases'), })); } getFeatures(region) { const { refName, start, end } = region; return ObservableCreate(async (observer) => { const features = this.features.get(refName) || []; for (const f of features) { if (f.get('end') > start && f.get('start') < end) { observer.next(f); } } observer.complete(); }); } }