UNPKG

@jbrowse/plugin-config

Version:

JBrowse 2 config utilities

57 lines (56 loc) 2.3 kB
"use strict"; 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;