@jbrowse/plugin-alignments 1.6.7 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +216 -0
  2. package/dist/AlignmentsFeatureDetail/index.js +63 -0
  3. package/dist/AlignmentsFeatureDetail/index.test.js +60 -0
  4. package/dist/AlignmentsTrack/index.js +37 -0
  5. package/dist/BamAdapter/BamAdapter.js +598 -0
  6. package/dist/BamAdapter/BamAdapter.test.js +177 -0
  7. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +1 -10
  8. package/dist/BamAdapter/BamSlightlyLazyFeature.js +176 -0
  9. package/dist/BamAdapter/MismatchParser.d.ts +3 -5
  10. package/dist/BamAdapter/MismatchParser.js +384 -0
  11. package/dist/BamAdapter/MismatchParser.test.js +259 -0
  12. package/dist/BamAdapter/configSchema.js +48 -0
  13. package/dist/BamAdapter/index.js +36 -0
  14. package/dist/CramAdapter/CramAdapter.js +660 -0
  15. package/dist/CramAdapter/CramAdapter.test.js +138 -0
  16. package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +1 -2
  17. package/dist/CramAdapter/CramSlightlyLazyFeature.js +447 -0
  18. package/dist/CramAdapter/CramTestAdapters.js +234 -0
  19. package/dist/CramAdapter/configSchema.js +40 -0
  20. package/dist/CramAdapter/index.js +36 -0
  21. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +97 -0
  22. package/dist/HtsgetBamAdapter/configSchema.js +31 -0
  23. package/dist/HtsgetBamAdapter/index.js +42 -0
  24. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +69 -0
  25. package/dist/LinearAlignmentsDisplay/index.js +31 -0
  26. package/dist/LinearAlignmentsDisplay/models/configSchema.js +25 -0
  27. package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +83 -0
  28. package/dist/LinearAlignmentsDisplay/models/model.js +250 -0
  29. package/dist/LinearPileupDisplay/components/ColorByModifications.js +123 -0
  30. package/dist/LinearPileupDisplay/components/ColorByTag.js +98 -0
  31. package/dist/LinearPileupDisplay/components/FilterByTag.js +203 -0
  32. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +32 -0
  33. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +99 -0
  34. package/dist/LinearPileupDisplay/components/SetMaxHeight.js +90 -0
  35. package/dist/LinearPileupDisplay/components/SortByTag.js +95 -0
  36. package/dist/LinearPileupDisplay/configSchema.js +47 -0
  37. package/dist/LinearPileupDisplay/configSchema.test.js +92 -0
  38. package/dist/LinearPileupDisplay/index.js +30 -0
  39. package/dist/LinearPileupDisplay/model.js +602 -0
  40. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +63 -0
  41. package/dist/LinearSNPCoverageDisplay/index.js +30 -0
  42. package/dist/LinearSNPCoverageDisplay/models/configSchema.js +57 -0
  43. package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +62 -0
  44. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +2 -2
  45. package/dist/LinearSNPCoverageDisplay/models/model.js +237 -0
  46. package/dist/NestedFrequencyTable.js +152 -0
  47. package/dist/PileupRPC/rpcMethods.js +285 -0
  48. package/dist/PileupRenderer/PileupLayoutSession.js +79 -0
  49. package/dist/PileupRenderer/PileupRenderer.d.ts +20 -6
  50. package/dist/PileupRenderer/PileupRenderer.js +1220 -0
  51. package/dist/PileupRenderer/components/PileupRendering.js +270 -0
  52. package/dist/PileupRenderer/components/PileupRendering.test.js +36 -0
  53. package/dist/PileupRenderer/configSchema.js +72 -0
  54. package/dist/PileupRenderer/index.js +25 -0
  55. package/dist/PileupRenderer/sortUtil.js +112 -0
  56. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +3 -11
  57. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +606 -0
  58. package/dist/SNPCoverageAdapter/configSchema.js +22 -0
  59. package/dist/SNPCoverageAdapter/index.js +45 -0
  60. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +296 -0
  61. package/dist/SNPCoverageRenderer/configSchema.js +40 -0
  62. package/dist/SNPCoverageRenderer/index.js +34 -0
  63. package/dist/declare.d.js +1 -0
  64. package/dist/index.js +154 -6
  65. package/dist/index.test.js +26 -0
  66. package/dist/plugin-alignments.cjs.development.js +591 -552
  67. package/dist/plugin-alignments.cjs.development.js.map +1 -1
  68. package/dist/plugin-alignments.cjs.production.min.js +1 -1
  69. package/dist/plugin-alignments.cjs.production.min.js.map +1 -1
  70. package/dist/plugin-alignments.esm.js +594 -555
  71. package/dist/plugin-alignments.esm.js.map +1 -1
  72. package/dist/shared.js +96 -0
  73. package/dist/util.d.ts +4 -0
  74. package/dist/util.js +135 -0
  75. package/package.json +5 -9
  76. package/src/BamAdapter/BamAdapter.ts +45 -15
  77. package/src/BamAdapter/BamSlightlyLazyFeature.ts +11 -79
  78. package/src/BamAdapter/MismatchParser.test.ts +53 -297
  79. package/src/BamAdapter/MismatchParser.ts +54 -116
  80. package/src/BamAdapter/configSchema.ts +0 -4
  81. package/src/CramAdapter/CramAdapter.ts +42 -15
  82. package/src/CramAdapter/CramSlightlyLazyFeature.ts +3 -10
  83. package/src/LinearPileupDisplay/components/ColorByModifications.tsx +76 -80
  84. package/src/LinearPileupDisplay/components/ColorByTag.tsx +24 -23
  85. package/src/LinearPileupDisplay/components/FilterByTag.tsx +73 -68
  86. package/src/LinearPileupDisplay/components/SetFeatureHeight.tsx +28 -26
  87. package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +24 -13
  88. package/src/LinearPileupDisplay/components/SortByTag.tsx +29 -21
  89. package/src/LinearPileupDisplay/model.ts +8 -22
  90. package/src/LinearSNPCoverageDisplay/models/model.ts +6 -36
  91. package/src/PileupRenderer/PileupRenderer.tsx +178 -60
  92. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +189 -244
  93. package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +12 -11
  94. package/src/util.ts +25 -0
@@ -0,0 +1,598 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
+
18
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
+
20
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
21
+
22
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
+
24
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
+
26
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
+
28
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
29
+
30
+ var _bam = require("@gmod/bam");
31
+
32
+ var _BaseAdapter = require("@jbrowse/core/data_adapters/BaseAdapter");
33
+
34
+ var _util = require("@jbrowse/core/util");
35
+
36
+ var _io = require("@jbrowse/core/util/io");
37
+
38
+ var _rxjs = require("@jbrowse/core/util/rxjs");
39
+
40
+ var _operators = require("rxjs/operators");
41
+
42
+ var _configuration = require("@jbrowse/core/configuration");
43
+
44
+ var _BamSlightlyLazyFeature = _interopRequireDefault(require("./BamSlightlyLazyFeature"));
45
+
46
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
47
+
48
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
49
+
50
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
51
+
52
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
53
+
54
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
55
+
56
+ var BamAdapter = /*#__PURE__*/function (_BaseFeatureDataAdapt) {
57
+ (0, _inherits2["default"])(BamAdapter, _BaseFeatureDataAdapt);
58
+
59
+ var _super = _createSuper(BamAdapter);
60
+
61
+ function BamAdapter() {
62
+ var _this;
63
+
64
+ (0, _classCallCheck2["default"])(this, BamAdapter);
65
+
66
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
67
+ args[_key] = arguments[_key];
68
+ }
69
+
70
+ _this = _super.call.apply(_super, [this].concat(args));
71
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "samHeader", void 0);
72
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setupP", void 0);
73
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "configured", void 0);
74
+ return _this;
75
+ }
76
+
77
+ (0, _createClass2["default"])(BamAdapter, [{
78
+ key: "configure",
79
+ value: // derived classes may not use the same configuration so a custom
80
+ // configure method allows derived classes to override this behavior
81
+ function () {
82
+ var _configure = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
83
+ var bamLocation, location, indexType, bam, adapterConfig;
84
+ return _regenerator["default"].wrap(function _callee$(_context) {
85
+ while (1) {
86
+ switch (_context.prev = _context.next) {
87
+ case 0:
88
+ if (!this.configured) {
89
+ bamLocation = (0, _configuration.readConfObject)(this.config, 'bamLocation');
90
+ location = (0, _configuration.readConfObject)(this.config, ['index', 'location']);
91
+ indexType = (0, _configuration.readConfObject)(this.config, ['index', 'indexType']);
92
+ bam = new _bam.BamFile({
93
+ bamFilehandle: (0, _io.openLocation)(bamLocation, this.pluginManager),
94
+ csiFilehandle: indexType === 'CSI' ? (0, _io.openLocation)(location, this.pluginManager) : undefined,
95
+ baiFilehandle: indexType !== 'CSI' ? (0, _io.openLocation)(location, this.pluginManager) : undefined,
96
+ // chunkSizeLimit and fetchSizeLimit are more troublesome than
97
+ // helpful, and have given overly large values on the ultra long
98
+ // nanopore reads even with 500MB limits, so disabled with infinity
99
+ chunkSizeLimit: Infinity,
100
+ fetchSizeLimit: Infinity,
101
+ yieldThreadTime: Infinity
102
+ });
103
+ adapterConfig = (0, _configuration.readConfObject)(this.config, 'sequenceAdapter');
104
+
105
+ if (adapterConfig && this.getSubAdapter) {
106
+ this.configured = this.getSubAdapter(adapterConfig).then(function (_ref) {
107
+ var dataAdapter = _ref.dataAdapter;
108
+ return {
109
+ bam: bam,
110
+ sequenceAdapter: dataAdapter
111
+ };
112
+ });
113
+ } else {
114
+ this.configured = Promise.resolve({
115
+ bam: bam
116
+ });
117
+ }
118
+ }
119
+
120
+ return _context.abrupt("return", this.configured);
121
+
122
+ case 2:
123
+ case "end":
124
+ return _context.stop();
125
+ }
126
+ }
127
+ }, _callee, this);
128
+ }));
129
+
130
+ function configure() {
131
+ return _configure.apply(this, arguments);
132
+ }
133
+
134
+ return configure;
135
+ }()
136
+ }, {
137
+ key: "getHeader",
138
+ value: function () {
139
+ var _getHeader = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(opts) {
140
+ var _yield$this$configure, bam;
141
+
142
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
143
+ while (1) {
144
+ switch (_context2.prev = _context2.next) {
145
+ case 0:
146
+ _context2.next = 2;
147
+ return this.configure();
148
+
149
+ case 2:
150
+ _yield$this$configure = _context2.sent;
151
+ bam = _yield$this$configure.bam;
152
+ return _context2.abrupt("return", bam.getHeaderText(opts));
153
+
154
+ case 5:
155
+ case "end":
156
+ return _context2.stop();
157
+ }
158
+ }
159
+ }, _callee2, this);
160
+ }));
161
+
162
+ function getHeader(_x) {
163
+ return _getHeader.apply(this, arguments);
164
+ }
165
+
166
+ return getHeader;
167
+ }()
168
+ }, {
169
+ key: "setupPre",
170
+ value: function () {
171
+ var _setupPre = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(opts) {
172
+ var _ref2, _ref2$statusCallback, statusCallback, _yield$this$configure2, bam;
173
+
174
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
175
+ while (1) {
176
+ switch (_context4.prev = _context4.next) {
177
+ case 0:
178
+ _ref2 = opts || {}, _ref2$statusCallback = _ref2.statusCallback, statusCallback = _ref2$statusCallback === void 0 ? function () {} : _ref2$statusCallback;
179
+ _context4.next = 3;
180
+ return this.configure();
181
+
182
+ case 3:
183
+ _yield$this$configure2 = _context4.sent;
184
+ bam = _yield$this$configure2.bam;
185
+ _context4.next = 7;
186
+ return (0, _util.updateStatus)('Downloading index', statusCallback, /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
187
+ var samHeader, idToName, nameToId;
188
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
189
+ while (1) {
190
+ switch (_context3.prev = _context3.next) {
191
+ case 0:
192
+ _context3.next = 2;
193
+ return bam.getHeader(opts);
194
+
195
+ case 2:
196
+ samHeader = _context3.sent;
197
+ // use the @SQ lines in the header to figure out the
198
+ // mapping between ref ref ID numbers and names
199
+ idToName = [];
200
+ nameToId = {};
201
+ samHeader.filter(function (l) {
202
+ return l.tag === 'SQ';
203
+ }).forEach(function (sqLine, refId) {
204
+ sqLine.data.forEach(function (item) {
205
+ if (item.tag === 'SN') {
206
+ // this is the ref name
207
+ var refName = item.value;
208
+ nameToId[refName] = refId;
209
+ idToName[refId] = refName;
210
+ }
211
+ });
212
+ });
213
+ return _context3.abrupt("return", {
214
+ idToName: idToName,
215
+ nameToId: nameToId
216
+ });
217
+
218
+ case 7:
219
+ case "end":
220
+ return _context3.stop();
221
+ }
222
+ }
223
+ }, _callee3);
224
+ })));
225
+
226
+ case 7:
227
+ this.samHeader = _context4.sent;
228
+ return _context4.abrupt("return", this.samHeader);
229
+
230
+ case 9:
231
+ case "end":
232
+ return _context4.stop();
233
+ }
234
+ }
235
+ }, _callee4, this);
236
+ }));
237
+
238
+ function setupPre(_x2) {
239
+ return _setupPre.apply(this, arguments);
240
+ }
241
+
242
+ return setupPre;
243
+ }()
244
+ }, {
245
+ key: "setup",
246
+ value: function () {
247
+ var _setup = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(opts) {
248
+ var _this2 = this;
249
+
250
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
251
+ while (1) {
252
+ switch (_context5.prev = _context5.next) {
253
+ case 0:
254
+ if (!this.setupP) {
255
+ this.setupP = this.setupPre(opts)["catch"](function (e) {
256
+ _this2.setupP = undefined;
257
+ throw e;
258
+ });
259
+ }
260
+
261
+ return _context5.abrupt("return", this.setupP);
262
+
263
+ case 2:
264
+ case "end":
265
+ return _context5.stop();
266
+ }
267
+ }
268
+ }, _callee5, this);
269
+ }));
270
+
271
+ function setup(_x3) {
272
+ return _setup.apply(this, arguments);
273
+ }
274
+
275
+ return setup;
276
+ }()
277
+ }, {
278
+ key: "getRefNames",
279
+ value: function () {
280
+ var _getRefNames = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(opts) {
281
+ var _yield$this$setup, idToName;
282
+
283
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
284
+ while (1) {
285
+ switch (_context6.prev = _context6.next) {
286
+ case 0:
287
+ _context6.next = 2;
288
+ return this.setup(opts);
289
+
290
+ case 2:
291
+ _yield$this$setup = _context6.sent;
292
+ idToName = _yield$this$setup.idToName;
293
+ return _context6.abrupt("return", idToName);
294
+
295
+ case 5:
296
+ case "end":
297
+ return _context6.stop();
298
+ }
299
+ }
300
+ }, _callee6, this);
301
+ }));
302
+
303
+ function getRefNames(_x4) {
304
+ return _getRefNames.apply(this, arguments);
305
+ }
306
+
307
+ return getRefNames;
308
+ }()
309
+ }, {
310
+ key: "seqFetch",
311
+ value: function () {
312
+ var _seqFetch = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(refName, start, end) {
313
+ var _yield$this$configure3, sequenceAdapter, refSeqStore, features, seqChunks, sequence;
314
+
315
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
316
+ while (1) {
317
+ switch (_context7.prev = _context7.next) {
318
+ case 0:
319
+ _context7.next = 2;
320
+ return this.configure();
321
+
322
+ case 2:
323
+ _yield$this$configure3 = _context7.sent;
324
+ sequenceAdapter = _yield$this$configure3.sequenceAdapter;
325
+ refSeqStore = sequenceAdapter;
326
+
327
+ if (refSeqStore) {
328
+ _context7.next = 7;
329
+ break;
330
+ }
331
+
332
+ return _context7.abrupt("return", undefined);
333
+
334
+ case 7:
335
+ if (refName) {
336
+ _context7.next = 9;
337
+ break;
338
+ }
339
+
340
+ return _context7.abrupt("return", undefined);
341
+
342
+ case 9:
343
+ features = refSeqStore.getFeatures({
344
+ refName: refName,
345
+ start: start,
346
+ end: end,
347
+ assemblyName: ''
348
+ });
349
+ _context7.next = 12;
350
+ return features.pipe((0, _operators.toArray)()).toPromise();
351
+
352
+ case 12:
353
+ seqChunks = _context7.sent;
354
+ sequence = '';
355
+ seqChunks.sort(function (a, b) {
356
+ return a.get('start') - b.get('start');
357
+ }).forEach(function (chunk) {
358
+ var chunkStart = chunk.get('start');
359
+ var chunkEnd = chunk.get('end');
360
+ var trimStart = Math.max(start - chunkStart, 0);
361
+ var trimEnd = Math.min(end - chunkStart, chunkEnd - chunkStart);
362
+ var trimLength = trimEnd - trimStart;
363
+ var chunkSeq = chunk.get('seq') || chunk.get('residues');
364
+ sequence += chunkSeq.substr(trimStart, trimLength);
365
+ });
366
+
367
+ if (!(sequence.length !== end - start)) {
368
+ _context7.next = 17;
369
+ break;
370
+ }
371
+
372
+ throw new Error("sequence fetch failed: fetching ".concat(refName, ":").concat((start - 1).toLocaleString(), "-").concat(end.toLocaleString(), " returned ").concat(sequence.length.toLocaleString(), " bases, but should have returned ").concat((end - start).toLocaleString()));
373
+
374
+ case 17:
375
+ return _context7.abrupt("return", sequence);
376
+
377
+ case 18:
378
+ case "end":
379
+ return _context7.stop();
380
+ }
381
+ }
382
+ }, _callee7, this);
383
+ }));
384
+
385
+ function seqFetch(_x5, _x6, _x7) {
386
+ return _seqFetch.apply(this, arguments);
387
+ }
388
+
389
+ return seqFetch;
390
+ }()
391
+ }, {
392
+ key: "getFeatures",
393
+ value: function getFeatures(region, opts) {
394
+ var _this3 = this;
395
+
396
+ var refName = region.refName,
397
+ start = region.start,
398
+ end = region.end,
399
+ originalRefName = region.originalRefName;
400
+
401
+ var _ref4 = opts || {},
402
+ signal = _ref4.signal,
403
+ filterBy = _ref4.filterBy,
404
+ _ref4$statusCallback = _ref4.statusCallback,
405
+ statusCallback = _ref4$statusCallback === void 0 ? function () {} : _ref4$statusCallback;
406
+
407
+ return (0, _rxjs.ObservableCreate)( /*#__PURE__*/function () {
408
+ var _ref5 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(observer) {
409
+ var _yield$_this3$configu, bam, records, _ref6, _ref6$flagInclude, flagInclude, _ref6$flagExclude, flagExclude, tagFilter, name, _iterator, _step, record, ref, flags, val;
410
+
411
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
412
+ while (1) {
413
+ switch (_context8.prev = _context8.next) {
414
+ case 0:
415
+ _context8.next = 2;
416
+ return _this3.configure();
417
+
418
+ case 2:
419
+ _yield$_this3$configu = _context8.sent;
420
+ bam = _yield$_this3$configu.bam;
421
+ _context8.next = 6;
422
+ return _this3.setup(opts);
423
+
424
+ case 6:
425
+ statusCallback('Downloading alignments');
426
+ _context8.next = 9;
427
+ return bam.getRecordsForRange(refName, start, end, opts);
428
+
429
+ case 9:
430
+ records = _context8.sent;
431
+ _ref6 = filterBy || {}, _ref6$flagInclude = _ref6.flagInclude, flagInclude = _ref6$flagInclude === void 0 ? 0 : _ref6$flagInclude, _ref6$flagExclude = _ref6.flagExclude, flagExclude = _ref6$flagExclude === void 0 ? 0 : _ref6$flagExclude, tagFilter = _ref6.tagFilter, name = _ref6.name;
432
+ _iterator = _createForOfIteratorHelper(records);
433
+ _context8.prev = 12;
434
+
435
+ _iterator.s();
436
+
437
+ case 14:
438
+ if ((_step = _iterator.n()).done) {
439
+ _context8.next = 33;
440
+ break;
441
+ }
442
+
443
+ record = _step.value;
444
+ ref = void 0;
445
+
446
+ if (record.get('MD')) {
447
+ _context8.next = 21;
448
+ break;
449
+ }
450
+
451
+ _context8.next = 20;
452
+ return _this3.seqFetch(originalRefName || refName, record.get('start'), record.get('end'));
453
+
454
+ case 20:
455
+ ref = _context8.sent;
456
+
457
+ case 21:
458
+ flags = record.flags;
459
+
460
+ if ((flags & flagInclude) === flagInclude && !(flags & flagExclude)) {
461
+ _context8.next = 24;
462
+ break;
463
+ }
464
+
465
+ return _context8.abrupt("continue", 31);
466
+
467
+ case 24:
468
+ if (!tagFilter) {
469
+ _context8.next = 28;
470
+ break;
471
+ }
472
+
473
+ val = record.get(tagFilter.tag);
474
+
475
+ if (val === '*' ? val !== undefined : val === tagFilter.value) {
476
+ _context8.next = 28;
477
+ break;
478
+ }
479
+
480
+ return _context8.abrupt("continue", 31);
481
+
482
+ case 28:
483
+ if (!(name && record.get('name') !== name)) {
484
+ _context8.next = 30;
485
+ break;
486
+ }
487
+
488
+ return _context8.abrupt("continue", 31);
489
+
490
+ case 30:
491
+ observer.next(new _BamSlightlyLazyFeature["default"](record, _this3, ref));
492
+
493
+ case 31:
494
+ _context8.next = 14;
495
+ break;
496
+
497
+ case 33:
498
+ _context8.next = 38;
499
+ break;
500
+
501
+ case 35:
502
+ _context8.prev = 35;
503
+ _context8.t0 = _context8["catch"](12);
504
+
505
+ _iterator.e(_context8.t0);
506
+
507
+ case 38:
508
+ _context8.prev = 38;
509
+
510
+ _iterator.f();
511
+
512
+ return _context8.finish(38);
513
+
514
+ case 41:
515
+ statusCallback('');
516
+ observer.complete();
517
+
518
+ case 43:
519
+ case "end":
520
+ return _context8.stop();
521
+ }
522
+ }
523
+ }, _callee8, null, [[12, 35, 38, 41]]);
524
+ }));
525
+
526
+ return function (_x8) {
527
+ return _ref5.apply(this, arguments);
528
+ };
529
+ }(), signal);
530
+ }
531
+ }, {
532
+ key: "estimateRegionsStats",
533
+ value: function () {
534
+ var _estimateRegionsStats = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(regions, opts) {
535
+ var _yield$this$configure4, bam, bytes, fetchSizeLimit;
536
+
537
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
538
+ while (1) {
539
+ switch (_context9.prev = _context9.next) {
540
+ case 0:
541
+ _context9.next = 2;
542
+ return this.configure();
543
+
544
+ case 2:
545
+ _yield$this$configure4 = _context9.sent;
546
+ bam = _yield$this$configure4.bam;
547
+
548
+ if (!(bam.index.filehandle !== '?')) {
549
+ _context9.next = 12;
550
+ break;
551
+ }
552
+
553
+ _context9.next = 7;
554
+ return (0, _util.bytesForRegions)(regions, bam);
555
+
556
+ case 7:
557
+ bytes = _context9.sent;
558
+ fetchSizeLimit = (0, _configuration.readConfObject)(this.config, 'fetchSizeLimit');
559
+ return _context9.abrupt("return", {
560
+ bytes: bytes,
561
+ fetchSizeLimit: fetchSizeLimit
562
+ });
563
+
564
+ case 12:
565
+ return _context9.abrupt("return", (0, _get2["default"])((0, _getPrototypeOf2["default"])(BamAdapter.prototype), "estimateRegionsStats", this).call(this, regions, opts));
566
+
567
+ case 13:
568
+ case "end":
569
+ return _context9.stop();
570
+ }
571
+ }
572
+ }, _callee9, this);
573
+ }));
574
+
575
+ function estimateRegionsStats(_x9, _x10) {
576
+ return _estimateRegionsStats.apply(this, arguments);
577
+ }
578
+
579
+ return estimateRegionsStats;
580
+ }()
581
+ }, {
582
+ key: "freeResources",
583
+ value: function
584
+ /* { region } */
585
+ freeResources() {} // depends on setup being called before the BAM constructor
586
+
587
+ }, {
588
+ key: "refIdToName",
589
+ value: function refIdToName(refId) {
590
+ var _this$samHeader;
591
+
592
+ return (_this$samHeader = this.samHeader) === null || _this$samHeader === void 0 ? void 0 : _this$samHeader.idToName[refId];
593
+ }
594
+ }]);
595
+ return BamAdapter;
596
+ }(_BaseAdapter.BaseFeatureDataAdapter);
597
+
598
+ exports["default"] = BamAdapter;