@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.
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.d.ts +6 -6
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +216 -0
- package/dist/AlignmentsFeatureDetail/index.d.ts +13 -13
- package/dist/AlignmentsFeatureDetail/index.js +63 -0
- package/dist/AlignmentsFeatureDetail/index.test.js +60 -0
- package/dist/AlignmentsTrack/index.d.ts +2 -2
- package/dist/AlignmentsTrack/index.js +37 -0
- package/dist/BamAdapter/BamAdapter.d.ts +40 -30
- package/dist/BamAdapter/BamAdapter.js +598 -0
- package/dist/BamAdapter/BamAdapter.test.js +177 -0
- package/dist/BamAdapter/BamSlightlyLazyFeature.d.ts +33 -33
- package/dist/BamAdapter/BamSlightlyLazyFeature.js +176 -0
- package/dist/BamAdapter/MismatchParser.d.ts +28 -28
- package/dist/BamAdapter/MismatchParser.js +384 -0
- package/dist/BamAdapter/MismatchParser.test.js +259 -0
- package/dist/BamAdapter/configSchema.d.ts +2 -2
- package/dist/BamAdapter/configSchema.js +48 -0
- package/dist/BamAdapter/index.d.ts +3 -3
- package/dist/BamAdapter/index.js +36 -0
- package/dist/CramAdapter/CramAdapter.d.ts +52 -43
- package/dist/CramAdapter/CramAdapter.js +660 -0
- package/dist/CramAdapter/CramAdapter.test.js +138 -0
- package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +49 -49
- package/dist/CramAdapter/CramSlightlyLazyFeature.js +447 -0
- package/dist/CramAdapter/CramTestAdapters.d.ts +29 -29
- package/dist/CramAdapter/CramTestAdapters.js +234 -0
- package/dist/CramAdapter/configSchema.d.ts +3 -3
- package/dist/CramAdapter/configSchema.js +40 -0
- package/dist/CramAdapter/index.d.ts +3 -3
- package/dist/CramAdapter/index.js +36 -0
- package/dist/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +9 -9
- package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +97 -0
- package/dist/HtsgetBamAdapter/configSchema.d.ts +2 -2
- package/dist/HtsgetBamAdapter/configSchema.js +31 -0
- package/dist/HtsgetBamAdapter/index.d.ts +3 -3
- package/dist/HtsgetBamAdapter/index.js +42 -0
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.d.ts +7 -7
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +69 -0
- package/dist/LinearAlignmentsDisplay/index.d.ts +2 -2
- package/dist/LinearAlignmentsDisplay/index.js +31 -0
- package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +4 -4
- package/dist/LinearAlignmentsDisplay/models/configSchema.js +25 -0
- package/dist/LinearAlignmentsDisplay/models/configSchema.test.js +83 -0
- package/dist/LinearAlignmentsDisplay/models/model.d.ts +105 -105
- package/dist/LinearAlignmentsDisplay/models/model.js +250 -0
- package/dist/LinearPileupDisplay/components/ColorByModifications.d.ts +14 -14
- package/dist/LinearPileupDisplay/components/ColorByModifications.js +123 -0
- package/dist/LinearPileupDisplay/components/ColorByTag.d.ts +9 -9
- package/dist/LinearPileupDisplay/components/ColorByTag.js +98 -0
- package/dist/LinearPileupDisplay/components/FilterByTag.d.ts +18 -18
- package/dist/LinearPileupDisplay/components/FilterByTag.js +203 -0
- package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.d.ts +13 -13
- package/dist/LinearPileupDisplay/components/LinearPileupDisplayBlurb.js +32 -0
- package/dist/LinearPileupDisplay/components/SetFeatureHeight.d.ts +16 -16
- package/dist/LinearPileupDisplay/components/SetFeatureHeight.js +99 -0
- package/dist/LinearPileupDisplay/components/SetMaxHeight.d.ts +10 -10
- package/dist/LinearPileupDisplay/components/SetMaxHeight.js +90 -0
- package/dist/LinearPileupDisplay/components/SortByTag.d.ts +9 -9
- package/dist/LinearPileupDisplay/components/SortByTag.js +95 -0
- package/dist/LinearPileupDisplay/configSchema.d.ts +6 -6
- package/dist/LinearPileupDisplay/configSchema.js +47 -0
- package/dist/LinearPileupDisplay/configSchema.test.js +92 -0
- package/dist/LinearPileupDisplay/index.d.ts +2 -2
- package/dist/LinearPileupDisplay/index.js +30 -0
- package/dist/LinearPileupDisplay/model.d.ts +319 -321
- package/dist/LinearPileupDisplay/model.js +602 -0
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +10 -10
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.js +63 -0
- package/dist/LinearSNPCoverageDisplay/index.d.ts +2 -2
- package/dist/LinearSNPCoverageDisplay/index.js +30 -0
- package/dist/LinearSNPCoverageDisplay/models/configSchema.d.ts +2 -2
- package/dist/LinearSNPCoverageDisplay/models/configSchema.js +57 -0
- package/dist/LinearSNPCoverageDisplay/models/configSchema.test.js +62 -0
- package/dist/LinearSNPCoverageDisplay/models/model.d.ts +346 -96
- package/dist/LinearSNPCoverageDisplay/models/model.js +237 -0
- package/dist/NestedFrequencyTable.d.ts +14 -14
- package/dist/NestedFrequencyTable.js +152 -0
- package/dist/PileupRPC/rpcMethods.d.ts +34 -34
- package/dist/PileupRPC/rpcMethods.js +285 -0
- package/dist/PileupRenderer/PileupLayoutSession.d.ts +29 -29
- package/dist/PileupRenderer/PileupLayoutSession.js +79 -0
- package/dist/PileupRenderer/PileupRenderer.d.ts +125 -125
- package/dist/PileupRenderer/PileupRenderer.js +1220 -0
- package/dist/PileupRenderer/components/PileupRendering.d.ts +23 -23
- package/dist/PileupRenderer/components/PileupRendering.js +270 -0
- package/dist/PileupRenderer/components/PileupRendering.test.js +36 -0
- package/dist/PileupRenderer/configSchema.d.ts +2 -2
- package/dist/PileupRenderer/configSchema.js +72 -0
- package/dist/PileupRenderer/index.d.ts +2 -2
- package/dist/PileupRenderer/index.js +25 -0
- package/dist/PileupRenderer/sortUtil.d.ts +8 -8
- package/dist/PileupRenderer/sortUtil.js +112 -0
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.d.ts +67 -71
- package/dist/SNPCoverageAdapter/SNPCoverageAdapter.js +606 -0
- package/dist/SNPCoverageAdapter/configSchema.d.ts +3 -3
- package/dist/SNPCoverageAdapter/configSchema.js +22 -0
- package/dist/SNPCoverageAdapter/index.d.ts +3 -3
- package/dist/SNPCoverageAdapter/index.js +45 -0
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.d.ts +20 -20
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +296 -0
- package/dist/SNPCoverageRenderer/configSchema.d.ts +2 -2
- package/dist/SNPCoverageRenderer/configSchema.js +40 -0
- package/dist/SNPCoverageRenderer/index.d.ts +3 -3
- package/dist/SNPCoverageRenderer/index.js +34 -0
- package/dist/declare.d.js +1 -0
- package/dist/index.d.ts +10 -10
- package/dist/index.js +154 -6
- package/dist/index.test.js +26 -0
- package/dist/shared.d.ts +25 -25
- package/dist/shared.js +96 -0
- package/dist/util.d.ts +19 -19
- package/dist/util.js +135 -0
- package/package.json +5 -8
- package/src/BamAdapter/BamAdapter.ts +35 -8
- package/src/CramAdapter/CramAdapter.ts +42 -15
- package/src/LinearPileupDisplay/components/SetMaxHeight.tsx +1 -1
- package/src/LinearPileupDisplay/model.ts +2 -22
- package/src/LinearSNPCoverageDisplay/models/model.ts +6 -36
- package/src/PileupRenderer/PileupRenderer.tsx +3 -6
- package/src/SNPCoverageAdapter/SNPCoverageAdapter.ts +11 -17
- package/dist/AlignmentsFeatureDetail/index.test.d.ts +0 -1
- package/dist/LinearAlignmentsDisplay/models/configSchema.test.d.ts +0 -1
- package/dist/LinearPileupDisplay/configSchema.test.d.ts +0 -1
- package/dist/LinearSNPCoverageDisplay/models/configSchema.test.d.ts +0 -1
- package/dist/PileupRenderer/components/PileupRendering.test.d.ts +0 -1
- package/dist/plugin-alignments.cjs.development.js +0 -8438
- package/dist/plugin-alignments.cjs.development.js.map +0 -1
- package/dist/plugin-alignments.cjs.production.min.js +0 -2
- package/dist/plugin-alignments.cjs.production.min.js.map +0 -1
- package/dist/plugin-alignments.esm.js +0 -8430
- 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;
|