@jbrowse/plugin-config
Version:
JBrowse 2 config utilities
57 lines (56 loc) • 2.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const rxjs_1 = require("@jbrowse/core/util/rxjs");
const simpleFeature_1 = __importDefault(require("@jbrowse/core/util/simpleFeature"));
const rxjs_2 = require("rxjs");
const operators_1 = require("rxjs/operators");
const FromConfigAdapter_1 = __importDefault(require("../FromConfigAdapter/FromConfigAdapter"));
class FromConfigSequenceAdapter extends FromConfigAdapter_1.default {
getFeatures(region) {
return (0, rxjs_1.ObservableCreate)(async (observer) => {
const feats = await (0, rxjs_2.firstValueFrom)(super.getFeatures(region).pipe((0, operators_1.toArray)()));
const feat = feats[0];
observer.next(new simpleFeature_1.default({
...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;
}
}
exports.default = FromConfigSequenceAdapter;