@jbrowse/plugin-alignments 1.6.9 → 1.7.3

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 (131) hide show
  1. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +6 -6
  2. package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +216 -0
  3. package/dist/AlignmentsFeatureDetail/index.d.ts +13 -13
  4. package/dist/AlignmentsFeatureDetail/index.js +63 -0
  5. package/dist/AlignmentsFeatureDetail/index.test.js +60 -0
  6. package/dist/AlignmentsTrack/index.d.ts +2 -2
  7. package/dist/AlignmentsTrack/index.js +37 -0
  8. package/dist/BamAdapter/BamAdapter.d.ts +40 -30
  9. package/dist/BamAdapter/BamAdapter.js +598 -0
  10. package/dist/BamAdapter/BamAdapter.test.js +177 -0
  11. package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +33 -33
  12. package/dist/BamAdapter/BamSlightlyLazyFeature.js +176 -0
  13. package/dist/BamAdapter/MismatchParser.d.ts +28 -28
  14. package/dist/BamAdapter/MismatchParser.js +384 -0
  15. package/dist/BamAdapter/MismatchParser.test.js +259 -0
  16. package/dist/BamAdapter/configSchema.d.ts +2 -2
  17. package/dist/BamAdapter/configSchema.js +48 -0
  18. package/dist/BamAdapter/index.d.ts +3 -3
  19. package/dist/BamAdapter/index.js +36 -0
  20. package/dist/CramAdapter/CramAdapter.d.ts +52 -43
  21. package/dist/CramAdapter/CramAdapter.js +660 -0
  22. package/dist/CramAdapter/CramAdapter.test.js +138 -0
  23. package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +49 -49
  24. package/dist/CramAdapter/CramSlightlyLazyFeature.js +447 -0
  25. package/dist/CramAdapter/CramTestAdapters.d.ts +29 -29
  26. package/dist/CramAdapter/CramTestAdapters.js +234 -0
  27. package/dist/CramAdapter/configSchema.d.ts +3 -3
  28. package/dist/CramAdapter/configSchema.js +40 -0
  29. package/dist/CramAdapter/index.d.ts +3 -3
  30. package/dist/CramAdapter/index.js +36 -0
  31. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +9 -9
  32. package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +97 -0
  33. package/dist/HtsgetBamAdapter/configSchema.d.ts +2 -2
  34. package/dist/HtsgetBamAdapter/configSchema.js +31 -0
  35. package/dist/HtsgetBamAdapter/index.d.ts +3 -3
  36. package/dist/HtsgetBamAdapter/index.js +42 -0
  37. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +7 -7
  38. package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +69 -0
  39. package/dist/LinearAlignmentsDisplay/index.d.ts +2 -2
  40. package/dist/LinearAlignmentsDisplay/index.js +31 -0
  41. package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +4 -4
  42. package/dist/LinearAlignmentsDisplay/models/configSchema.js +25 -0
  43. package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +83 -0
  44. package/dist/LinearAlignmentsDisplay/models/model.d.ts +105 -105
  45. package/dist/LinearAlignmentsDisplay/models/model.js +250 -0
  46. package/dist/LinearPileupDisplay/components/ColorByModifications.d.ts +14 -14
  47. package/dist/LinearPileupDisplay/components/ColorByModifications.js +123 -0
  48. package/dist/LinearPileupDisplay/components/ColorByTag.d.ts +9 -9
  49. package/dist/LinearPileupDisplay/components/ColorByTag.js +98 -0
  50. package/dist/LinearPileupDisplay/components/FilterByTag.d.ts +18 -18
  51. package/dist/LinearPileupDisplay/components/FilterByTag.js +203 -0
  52. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +13 -13
  53. package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +32 -0
  54. package/dist/LinearPileupDisplay/components/SetFeatureHeight.d.ts +16 -16
  55. package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +99 -0
  56. package/dist/LinearPileupDisplay/components/SetMaxHeight.d.ts +10 -10
  57. package/dist/LinearPileupDisplay/components/SetMaxHeight.js +90 -0
  58. package/dist/LinearPileupDisplay/components/SortByTag.d.ts +9 -9
  59. package/dist/LinearPileupDisplay/components/SortByTag.js +95 -0
  60. package/dist/LinearPileupDisplay/configSchema.d.ts +6 -6
  61. package/dist/LinearPileupDisplay/configSchema.js +47 -0
  62. package/dist/LinearPileupDisplay/configSchema.test.js +92 -0
  63. package/dist/LinearPileupDisplay/index.d.ts +2 -2
  64. package/dist/LinearPileupDisplay/index.js +30 -0
  65. package/dist/LinearPileupDisplay/model.d.ts +319 -321
  66. package/dist/LinearPileupDisplay/model.js +602 -0
  67. package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +10 -10
  68. package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +63 -0
  69. package/dist/LinearSNPCoverageDisplay/index.d.ts +2 -2
  70. package/dist/LinearSNPCoverageDisplay/index.js +30 -0
  71. package/dist/LinearSNPCoverageDisplay/models/configSchema.d.ts +2 -2
  72. package/dist/LinearSNPCoverageDisplay/models/configSchema.js +57 -0
  73. package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +62 -0
  74. package/dist/LinearSNPCoverageDisplay/models/model.d.ts +346 -96
  75. package/dist/LinearSNPCoverageDisplay/models/model.js +237 -0
  76. package/dist/NestedFrequencyTable.d.ts +14 -14
  77. package/dist/NestedFrequencyTable.js +152 -0
  78. package/dist/PileupRPC/rpcMethods.d.ts +34 -34
  79. package/dist/PileupRPC/rpcMethods.js +285 -0
  80. package/dist/PileupRenderer/PileupLayoutSession.d.ts +29 -29
  81. package/dist/PileupRenderer/PileupLayoutSession.js +79 -0
  82. package/dist/PileupRenderer/PileupRenderer.d.ts +125 -125
  83. package/dist/PileupRenderer/PileupRenderer.js +1220 -0
  84. package/dist/PileupRenderer/components/PileupRendering.d.ts +23 -23
  85. package/dist/PileupRenderer/components/PileupRendering.js +270 -0
  86. package/dist/PileupRenderer/components/PileupRendering.test.js +36 -0
  87. package/dist/PileupRenderer/configSchema.d.ts +2 -2
  88. package/dist/PileupRenderer/configSchema.js +72 -0
  89. package/dist/PileupRenderer/index.d.ts +2 -2
  90. package/dist/PileupRenderer/index.js +25 -0
  91. package/dist/PileupRenderer/sortUtil.d.ts +8 -8
  92. package/dist/PileupRenderer/sortUtil.js +112 -0
  93. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +67 -71
  94. package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +606 -0
  95. package/dist/SNPCoverageAdapter/configSchema.d.ts +3 -3
  96. package/dist/SNPCoverageAdapter/configSchema.js +22 -0
  97. package/dist/SNPCoverageAdapter/index.d.ts +3 -3
  98. package/dist/SNPCoverageAdapter/index.js +45 -0
  99. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +20 -20
  100. package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +296 -0
  101. package/dist/SNPCoverageRenderer/configSchema.d.ts +2 -2
  102. package/dist/SNPCoverageRenderer/configSchema.js +40 -0
  103. package/dist/SNPCoverageRenderer/index.d.ts +3 -3
  104. package/dist/SNPCoverageRenderer/index.js +34 -0
  105. package/dist/declare.d.js +1 -0
  106. package/dist/index.d.ts +10 -10
  107. package/dist/index.js +154 -6
  108. package/dist/index.test.js +26 -0
  109. package/dist/shared.d.ts +25 -25
  110. package/dist/shared.js +96 -0
  111. package/dist/util.d.ts +19 -19
  112. package/dist/util.js +135 -0
  113. package/package.json +5 -8
  114. package/src/BamAdapter/BamAdapter.ts +35 -8
  115. package/src/CramAdapter/CramAdapter.ts +42 -15
  116. package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +1 -1
  117. package/src/LinearPileupDisplay/model.ts +2 -22
  118. package/src/LinearSNPCoverageDisplay/models/model.ts +6 -36
  119. package/src/PileupRenderer/PileupRenderer.tsx +3 -6
  120. package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +11 -17
  121. package/dist/AlignmentsFeatureDetail/index.test.d.ts +0 -1
  122. package/dist/LinearAlignmentsDisplay/models/configSchema.test.d.ts +0 -1
  123. package/dist/LinearPileupDisplay/configSchema.test.d.ts +0 -1
  124. package/dist/LinearSNPCoverageDisplay/models/configSchema.test.d.ts +0 -1
  125. package/dist/PileupRenderer/components/PileupRendering.test.d.ts +0 -1
  126. package/dist/plugin-alignments.cjs.development.js +0 -8438
  127. package/dist/plugin-alignments.cjs.development.js.map +0 -1
  128. package/dist/plugin-alignments.cjs.production.min.js +0 -2
  129. package/dist/plugin-alignments.cjs.production.min.js.map +0 -1
  130. package/dist/plugin-alignments.esm.js +0 -8430
  131. package/dist/plugin-alignments.esm.js.map +0 -1
@@ -0,0 +1,660 @@
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 _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
+
22
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
+
24
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
+
26
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
+
28
+ var _cram = require("@gmod/cram");
29
+
30
+ var _BaseAdapter = require("@jbrowse/core/data_adapters/BaseAdapter");
31
+
32
+ var _util = require("@jbrowse/core/util");
33
+
34
+ var _io = require("@jbrowse/core/util/io");
35
+
36
+ var _rxjs = require("@jbrowse/core/util/rxjs");
37
+
38
+ var _operators = require("rxjs/operators");
39
+
40
+ var _CramSlightlyLazyFeature = _interopRequireDefault(require("./CramSlightlyLazyFeature"));
41
+
42
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
43
+
44
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
45
+
46
+ 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); }; }
47
+
48
+ 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; } }
49
+
50
+ var CramAdapter = /*#__PURE__*/function (_BaseFeatureDataAdapt) {
51
+ (0, _inherits2["default"])(CramAdapter, _BaseFeatureDataAdapt);
52
+
53
+ var _super = _createSuper(CramAdapter);
54
+
55
+ function CramAdapter() {
56
+ var _this;
57
+
58
+ (0, _classCallCheck2["default"])(this, CramAdapter);
59
+
60
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
61
+ args[_key] = arguments[_key];
62
+ }
63
+
64
+ _this = _super.call.apply(_super, [this].concat(args));
65
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "samHeader", {});
66
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setupP", void 0);
67
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "seqIdToRefName", void 0);
68
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "seqIdToOriginalRefName", []);
69
+ return _this;
70
+ }
71
+
72
+ (0, _createClass2["default"])(CramAdapter, [{
73
+ key: "configure",
74
+ value: function () {
75
+ var _configure = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
76
+ var cramLocation, craiLocation, cram, sequenceAdapterType, seqConf, _yield$this$getSubAda, sequenceAdapter;
77
+
78
+ return _regenerator["default"].wrap(function _callee$(_context) {
79
+ while (1) {
80
+ switch (_context.prev = _context.next) {
81
+ case 0:
82
+ cramLocation = this.getConf('cramLocation');
83
+ craiLocation = this.getConf('craiLocation');
84
+
85
+ if (cramLocation) {
86
+ _context.next = 4;
87
+ break;
88
+ }
89
+
90
+ throw new Error('missing cramLocation argument');
91
+
92
+ case 4:
93
+ if (craiLocation) {
94
+ _context.next = 6;
95
+ break;
96
+ }
97
+
98
+ throw new Error('missing craiLocation argument');
99
+
100
+ case 6:
101
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
+ cram = new _cram.IndexedCramFile({
103
+ cramFilehandle: (0, _io.openLocation)(cramLocation, this.pluginManager),
104
+ index: new _cram.CraiIndex({
105
+ filehandle: (0, _io.openLocation)(craiLocation, this.pluginManager)
106
+ }),
107
+ seqFetch: this.seqFetch.bind(this),
108
+ checkSequenceMD5: false,
109
+ fetchSizeLimit: 200000000 // just make this a large size to avoid hitting it
110
+
111
+ }); // instantiate the sequence adapter
112
+
113
+ sequenceAdapterType = this.getConf(['sequenceAdapter', 'type']);
114
+
115
+ if (this.getSubAdapter) {
116
+ _context.next = 10;
117
+ break;
118
+ }
119
+
120
+ throw new Error('Error getting subadapter');
121
+
122
+ case 10:
123
+ seqConf = this.getConf('sequenceAdapter');
124
+ _context.next = 13;
125
+ return this.getSubAdapter(seqConf);
126
+
127
+ case 13:
128
+ _yield$this$getSubAda = _context.sent;
129
+ sequenceAdapter = _yield$this$getSubAda.dataAdapter;
130
+
131
+ if (sequenceAdapter instanceof _BaseAdapter.BaseFeatureDataAdapter) {
132
+ _context.next = 17;
133
+ break;
134
+ }
135
+
136
+ throw new Error("CRAM feature adapters cannot use sequence adapters of type '".concat(sequenceAdapterType, "'"));
137
+
138
+ case 17:
139
+ return _context.abrupt("return", {
140
+ cram: cram,
141
+ sequenceAdapter: sequenceAdapter
142
+ });
143
+
144
+ case 18:
145
+ case "end":
146
+ return _context.stop();
147
+ }
148
+ }
149
+ }, _callee, this);
150
+ }));
151
+
152
+ function configure() {
153
+ return _configure.apply(this, arguments);
154
+ }
155
+
156
+ return configure;
157
+ }()
158
+ }, {
159
+ key: "getHeader",
160
+ value: function () {
161
+ var _getHeader = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(opts) {
162
+ var _yield$this$configure, cram;
163
+
164
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
165
+ while (1) {
166
+ switch (_context2.prev = _context2.next) {
167
+ case 0:
168
+ _context2.next = 2;
169
+ return this.configure();
170
+
171
+ case 2:
172
+ _yield$this$configure = _context2.sent;
173
+ cram = _yield$this$configure.cram;
174
+ return _context2.abrupt("return", cram.cram.getHeaderText(opts));
175
+
176
+ case 5:
177
+ case "end":
178
+ return _context2.stop();
179
+ }
180
+ }
181
+ }, _callee2, this);
182
+ }));
183
+
184
+ function getHeader(_x) {
185
+ return _getHeader.apply(this, arguments);
186
+ }
187
+
188
+ return getHeader;
189
+ }()
190
+ }, {
191
+ key: "seqFetch",
192
+ value: function () {
193
+ var _seqFetch = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(seqId, start, end) {
194
+ var _yield$this$configure2, sequenceAdapter, refName, seqChunks, sequence;
195
+
196
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
197
+ while (1) {
198
+ switch (_context3.prev = _context3.next) {
199
+ case 0:
200
+ start -= 1; // convert from 1-based closed to interbase
201
+
202
+ _context3.next = 3;
203
+ return this.configure();
204
+
205
+ case 3:
206
+ _yield$this$configure2 = _context3.sent;
207
+ sequenceAdapter = _yield$this$configure2.sequenceAdapter;
208
+ refName = this.refIdToOriginalName(seqId) || this.refIdToName(seqId);
209
+
210
+ if (refName) {
211
+ _context3.next = 8;
212
+ break;
213
+ }
214
+
215
+ return _context3.abrupt("return", undefined);
216
+
217
+ case 8:
218
+ _context3.next = 10;
219
+ return sequenceAdapter.getFeatures({
220
+ refName: refName,
221
+ start: start,
222
+ end: end,
223
+ assemblyName: ''
224
+ }).pipe((0, _operators.toArray)()).toPromise();
225
+
226
+ case 10:
227
+ seqChunks = _context3.sent;
228
+ sequence = seqChunks.sort(function (a, b) {
229
+ return a.get('start') - b.get('start');
230
+ }).map(function (chunk) {
231
+ var chunkStart = chunk.get('start');
232
+ var chunkEnd = chunk.get('end');
233
+ var trimStart = Math.max(start - chunkStart, 0);
234
+ var trimEnd = Math.min(end - chunkStart, chunkEnd - chunkStart);
235
+ var trimLength = trimEnd - trimStart;
236
+ var chunkSeq = chunk.get('seq') || chunk.get('residues');
237
+ return chunkSeq.substr(trimStart, trimLength);
238
+ }).join('');
239
+
240
+ if (!(sequence.length !== end - start)) {
241
+ _context3.next = 14;
242
+ break;
243
+ }
244
+
245
+ 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()));
246
+
247
+ case 14:
248
+ return _context3.abrupt("return", sequence);
249
+
250
+ case 15:
251
+ case "end":
252
+ return _context3.stop();
253
+ }
254
+ }
255
+ }, _callee3, this);
256
+ }));
257
+
258
+ function seqFetch(_x2, _x3, _x4) {
259
+ return _seqFetch.apply(this, arguments);
260
+ }
261
+
262
+ return seqFetch;
263
+ }()
264
+ }, {
265
+ key: "setupPre",
266
+ value: function () {
267
+ var _setupPre = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(opts) {
268
+ var _ref, _ref$statusCallback, statusCallback, configured, cram, samHeader, idToName, nameToId, readGroups, data;
269
+
270
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
271
+ while (1) {
272
+ switch (_context4.prev = _context4.next) {
273
+ case 0:
274
+ _ref = opts || {}, _ref$statusCallback = _ref.statusCallback, statusCallback = _ref$statusCallback === void 0 ? function () {} : _ref$statusCallback;
275
+ _context4.next = 3;
276
+ return this.configure();
277
+
278
+ case 3:
279
+ configured = _context4.sent;
280
+ statusCallback('Downloading index');
281
+ cram = configured.cram;
282
+ _context4.next = 8;
283
+ return cram.cram.getSamHeader(opts === null || opts === void 0 ? void 0 : opts.signal);
284
+
285
+ case 8:
286
+ samHeader = _context4.sent;
287
+ // use the @SQ lines in the header to figure out the
288
+ // mapping between ref ID numbers and names
289
+ idToName = [];
290
+ nameToId = {};
291
+ samHeader.filter(function (l) {
292
+ return l.tag === 'SQ';
293
+ }).forEach(function (sqLine, refId) {
294
+ sqLine.data.forEach(function (item) {
295
+ if (item.tag === 'SN') {
296
+ // this is the ref name
297
+ var refName = item.value;
298
+ nameToId[refName] = refId;
299
+ idToName[refId] = refName;
300
+ }
301
+ });
302
+ });
303
+ readGroups = samHeader.filter(function (l) {
304
+ return l.tag === 'RG';
305
+ }).map(function (rgLine) {
306
+ var _rgLine$data$find;
307
+
308
+ return (_rgLine$data$find = rgLine.data.find(function (item) {
309
+ return item.tag === 'ID';
310
+ })) === null || _rgLine$data$find === void 0 ? void 0 : _rgLine$data$find.value;
311
+ });
312
+ data = {
313
+ idToName: idToName,
314
+ nameToId: nameToId,
315
+ readGroups: readGroups
316
+ };
317
+ statusCallback('');
318
+ this.samHeader = data;
319
+ return _context4.abrupt("return", _objectSpread({
320
+ samHeader: data
321
+ }, configured));
322
+
323
+ case 17:
324
+ case "end":
325
+ return _context4.stop();
326
+ }
327
+ }
328
+ }, _callee4, this);
329
+ }));
330
+
331
+ function setupPre(_x5) {
332
+ return _setupPre.apply(this, arguments);
333
+ }
334
+
335
+ return setupPre;
336
+ }()
337
+ }, {
338
+ key: "setup",
339
+ value: function () {
340
+ var _setup = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(opts) {
341
+ var _this2 = this;
342
+
343
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
344
+ while (1) {
345
+ switch (_context5.prev = _context5.next) {
346
+ case 0:
347
+ if (!this.setupP) {
348
+ this.setupP = this.setupPre(opts)["catch"](function (e) {
349
+ _this2.setupP = undefined;
350
+ throw e;
351
+ });
352
+ }
353
+
354
+ return _context5.abrupt("return", this.setupP);
355
+
356
+ case 2:
357
+ case "end":
358
+ return _context5.stop();
359
+ }
360
+ }
361
+ }, _callee5, this);
362
+ }));
363
+
364
+ function setup(_x6) {
365
+ return _setup.apply(this, arguments);
366
+ }
367
+
368
+ return setup;
369
+ }()
370
+ }, {
371
+ key: "getRefNames",
372
+ value: function () {
373
+ var _getRefNames = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(opts) {
374
+ var _yield$this$setup, samHeader;
375
+
376
+ return _regenerator["default"].wrap(function _callee6$(_context6) {
377
+ while (1) {
378
+ switch (_context6.prev = _context6.next) {
379
+ case 0:
380
+ _context6.next = 2;
381
+ return this.setup(opts);
382
+
383
+ case 2:
384
+ _yield$this$setup = _context6.sent;
385
+ samHeader = _yield$this$setup.samHeader;
386
+
387
+ if (samHeader.idToName) {
388
+ _context6.next = 6;
389
+ break;
390
+ }
391
+
392
+ throw new Error('CRAM file has no header lines');
393
+
394
+ case 6:
395
+ return _context6.abrupt("return", samHeader.idToName);
396
+
397
+ case 7:
398
+ case "end":
399
+ return _context6.stop();
400
+ }
401
+ }
402
+ }, _callee6, this);
403
+ }));
404
+
405
+ function getRefNames(_x7) {
406
+ return _getRefNames.apply(this, arguments);
407
+ }
408
+
409
+ return getRefNames;
410
+ }() // use info from the SAM header if possible, but fall back to using
411
+ // the ref seq order from when the browser's refseqs were loaded
412
+
413
+ }, {
414
+ key: "refNameToId",
415
+ value: function refNameToId(refName) {
416
+ if (this.samHeader.nameToId) {
417
+ return this.samHeader.nameToId[refName];
418
+ }
419
+
420
+ if (this.seqIdToRefName) {
421
+ return this.seqIdToRefName.indexOf(refName);
422
+ }
423
+
424
+ return undefined;
425
+ } // use info from the SAM header if possible, but fall back to using
426
+ // the ref seq order from when the browser's refseqs were loaded
427
+
428
+ }, {
429
+ key: "refIdToName",
430
+ value: function refIdToName(refId) {
431
+ if (this.samHeader.idToName) {
432
+ return this.samHeader.idToName[refId];
433
+ }
434
+
435
+ if (this.seqIdToRefName) {
436
+ return this.seqIdToRefName[refId];
437
+ }
438
+
439
+ return undefined;
440
+ }
441
+ }, {
442
+ key: "refIdToOriginalName",
443
+ value: function refIdToOriginalName(refId) {
444
+ return this.seqIdToOriginalRefName[refId];
445
+ }
446
+ }, {
447
+ key: "getFeatures",
448
+ value: function getFeatures(region, opts) {
449
+ var _this3 = this;
450
+
451
+ var _ref2 = opts || {},
452
+ signal = _ref2.signal,
453
+ filterBy = _ref2.filterBy,
454
+ _ref2$statusCallback = _ref2.statusCallback,
455
+ statusCallback = _ref2$statusCallback === void 0 ? function () {} : _ref2$statusCallback;
456
+
457
+ var refName = region.refName,
458
+ start = region.start,
459
+ end = region.end,
460
+ originalRefName = region.originalRefName;
461
+ return (0, _rxjs.ObservableCreate)( /*#__PURE__*/function () {
462
+ var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(observer) {
463
+ var _yield$_this3$setup, cram, sequenceAdapter, refId, records, _ref4, _ref4$flagInclude, flagInclude, _ref4$flagExclude, flagExclude, tagFilter, name, filtered;
464
+
465
+ return _regenerator["default"].wrap(function _callee7$(_context7) {
466
+ while (1) {
467
+ switch (_context7.prev = _context7.next) {
468
+ case 0:
469
+ _context7.next = 2;
470
+ return _this3.setup(opts);
471
+
472
+ case 2:
473
+ _yield$_this3$setup = _context7.sent;
474
+ cram = _yield$_this3$setup.cram;
475
+ sequenceAdapter = _yield$_this3$setup.sequenceAdapter;
476
+ statusCallback('Downloading alignments');
477
+
478
+ if (_this3.seqIdToRefName) {
479
+ _context7.next = 10;
480
+ break;
481
+ }
482
+
483
+ _context7.next = 9;
484
+ return sequenceAdapter.getRefNames(opts);
485
+
486
+ case 9:
487
+ _this3.seqIdToRefName = _context7.sent;
488
+
489
+ case 10:
490
+ refId = _this3.refNameToId(refName);
491
+
492
+ if (!(refId !== undefined)) {
493
+ _context7.next = 24;
494
+ break;
495
+ }
496
+
497
+ if (originalRefName) {
498
+ _this3.seqIdToOriginalRefName[refId] = originalRefName;
499
+ }
500
+
501
+ _context7.next = 15;
502
+ return cram.getRecordsForRange(refId, start, end, opts);
503
+
504
+ case 15:
505
+ records = _context7.sent;
506
+ (0, _util.checkAbortSignal)(signal);
507
+ _ref4 = filterBy || {}, _ref4$flagInclude = _ref4.flagInclude, flagInclude = _ref4$flagInclude === void 0 ? 0 : _ref4$flagInclude, _ref4$flagExclude = _ref4.flagExclude, flagExclude = _ref4$flagExclude === void 0 ? 0 : _ref4$flagExclude, tagFilter = _ref4.tagFilter, name = _ref4.name; // eslint-disable-next-line @typescript-eslint/no-explicit-any
508
+
509
+ filtered = records.filter(function (record) {
510
+ var flags = record.flags;
511
+ return (flags & flagInclude) === flagInclude && !(flags & flagExclude);
512
+ });
513
+
514
+ if (tagFilter) {
515
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
516
+ filtered = filtered.filter(function (record) {
517
+ var val = record[tagFilter.tag];
518
+ return val === '*' ? val !== undefined : val === tagFilter.value;
519
+ });
520
+ }
521
+
522
+ if (name) {
523
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
524
+ filtered = filtered.filter(function (record) {
525
+ return record.name === name;
526
+ });
527
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
528
+
529
+
530
+ filtered.forEach(function (record) {
531
+ observer.next(_this3.cramRecordToFeature(record));
532
+ });
533
+ _context7.next = 25;
534
+ break;
535
+
536
+ case 24:
537
+ console.warn('Unknown refName', refName);
538
+
539
+ case 25:
540
+ statusCallback('');
541
+ observer.complete();
542
+
543
+ case 27:
544
+ case "end":
545
+ return _context7.stop();
546
+ }
547
+ }
548
+ }, _callee7);
549
+ }));
550
+
551
+ return function (_x8) {
552
+ return _ref3.apply(this, arguments);
553
+ };
554
+ }(), signal);
555
+ }
556
+ }, {
557
+ key: "freeResources",
558
+ value: function
559
+ /* { region } */
560
+ freeResources() {}
561
+ }, {
562
+ key: "cramRecordToFeature",
563
+ value: function cramRecordToFeature(record) {
564
+ return new _CramSlightlyLazyFeature["default"](record, this);
565
+ } // we return the configured fetchSizeLimit, and the bytes for the region
566
+
567
+ }, {
568
+ key: "estimateRegionsStats",
569
+ value: function () {
570
+ var _estimateRegionsStats = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(regions, opts) {
571
+ var bytes, fetchSizeLimit;
572
+ return _regenerator["default"].wrap(function _callee8$(_context8) {
573
+ while (1) {
574
+ switch (_context8.prev = _context8.next) {
575
+ case 0:
576
+ _context8.next = 2;
577
+ return this.bytesForRegions(regions, opts);
578
+
579
+ case 2:
580
+ bytes = _context8.sent;
581
+ fetchSizeLimit = this.getConf('fetchSizeLimit');
582
+ return _context8.abrupt("return", {
583
+ bytes: bytes,
584
+ fetchSizeLimit: fetchSizeLimit
585
+ });
586
+
587
+ case 5:
588
+ case "end":
589
+ return _context8.stop();
590
+ }
591
+ }
592
+ }, _callee8, this);
593
+ }));
594
+
595
+ function estimateRegionsStats(_x9, _x10) {
596
+ return _estimateRegionsStats.apply(this, arguments);
597
+ }
598
+
599
+ return estimateRegionsStats;
600
+ }()
601
+ /**
602
+ * get the approximate number of bytes queried from the file for the given
603
+ * query regions
604
+ * @param regions - list of query regions
605
+ */
606
+
607
+ }, {
608
+ key: "bytesForRegions",
609
+ value: function () {
610
+ var _bytesForRegions = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(regions, _opts) {
611
+ var _this4 = this;
612
+
613
+ var _yield$this$configure3, cram, blockResults;
614
+
615
+ return _regenerator["default"].wrap(function _callee9$(_context9) {
616
+ while (1) {
617
+ switch (_context9.prev = _context9.next) {
618
+ case 0:
619
+ _context9.next = 2;
620
+ return this.configure();
621
+
622
+ case 2:
623
+ _yield$this$configure3 = _context9.sent;
624
+ cram = _yield$this$configure3.cram;
625
+ _context9.next = 6;
626
+ return Promise.all(regions.map(function (region) {
627
+ var refName = region.refName,
628
+ start = region.start,
629
+ end = region.end;
630
+
631
+ var chrId = _this4.refNameToId(refName);
632
+
633
+ return cram.index.getEntriesForRange(chrId, start, end);
634
+ }));
635
+
636
+ case 6:
637
+ blockResults = _context9.sent;
638
+ return _context9.abrupt("return", blockResults.flat().reduce(function (a, b) {
639
+ return a + b.sliceBytes;
640
+ }, 0));
641
+
642
+ case 8:
643
+ case "end":
644
+ return _context9.stop();
645
+ }
646
+ }
647
+ }, _callee9, this);
648
+ }));
649
+
650
+ function bytesForRegions(_x11, _x12) {
651
+ return _bytesForRegions.apply(this, arguments);
652
+ }
653
+
654
+ return bytesForRegions;
655
+ }()
656
+ }]);
657
+ return CramAdapter;
658
+ }(_BaseAdapter.BaseFeatureDataAdapter);
659
+
660
+ exports["default"] = CramAdapter;