@jbrowse/plugin-config
Version:
JBrowse 2 config utilities
51 lines (50 loc) • 1.96 kB
JavaScript
import { ObservableCreate } from '@jbrowse/core/util/rxjs';
import SimpleFeature from '@jbrowse/core/util/simpleFeature';
import { firstValueFrom } from 'rxjs';
import { toArray } from 'rxjs/operators';
import FromConfigAdapter from '../FromConfigAdapter/FromConfigAdapter';
export default class FromConfigSequenceAdapter extends FromConfigAdapter {
getFeatures(region) {
return ObservableCreate(async (observer) => {
const feats = await firstValueFrom(super.getFeatures(region).pipe(toArray()));
const feat = feats[0];
observer.next(new SimpleFeature({
...feat.toJSON(),
uniqueId: `${feat.id()}:${region.start}-${region.end}`,
end: region.end,
start: region.start,
seq: feat
.get('seq')
.slice(Math.max(region.start - feat.get('start'), 0), Math.max(region.end - feat.get('start'), 0)),
}));
observer.complete();
});
}
async getRegions() {
const regions = [];
for (const [refName, features] of this.features) {
let currentRegion;
for (const feature of features) {
if (currentRegion &&
currentRegion.end >= feature.get('start') &&
currentRegion.start <= feature.get('end')) {
currentRegion.end = feature.get('end');
}
else {
if (currentRegion) {
regions.push(currentRegion);
}
currentRegion = {
refName,
start: feature.get('start'),
end: feature.get('end'),
};
}
}
if (currentRegion) {
regions.push(currentRegion);
}
}
return regions;
}
}