@jbrowse/plugin-config
Version:
JBrowse 2 config utilities
57 lines (56 loc) • 2.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeFeatures = makeFeatures;
const configuration_1 = require("@jbrowse/core/configuration");
const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
const rxjs_1 = require("@jbrowse/core/util/rxjs");
const simpleFeature_1 = __importDefault(require("@jbrowse/core/util/simpleFeature"));
function makeFeatures(fdata) {
const features = new Map();
for (const entry of fdata) {
const f = new simpleFeature_1.default(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;
}
class FromConfigAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
constructor(conf, getSubAdapter, pluginManager) {
super(conf, getSubAdapter, pluginManager);
const feats = (0, configuration_1.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 (0, rxjs_1.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();
});
}
}
exports.default = FromConfigAdapter;