@gmod/bbi 2.0.4 → 2.0.5
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/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/dist/bbi.js +157 -266
- package/dist/bbi.js.map +1 -1
- package/dist/bigbed.js +146 -259
- package/dist/bigbed.js.map +1 -1
- package/dist/bigint-polyfill/polyfill.js +1 -1
- package/dist/bigint-polyfill/polyfill.js.map +1 -1
- package/dist/bigint-polyfill/pure.js +11 -11
- package/dist/bigint-polyfill/pure.js.map +1 -1
- package/dist/bigwig.js +21 -75
- package/dist/bigwig.js.map +1 -1
- package/dist/blockView.js +207 -302
- package/dist/blockView.js.map +1 -1
- package/dist/range.js +49 -50
- package/dist/range.js.map +1 -1
- package/dist/unzip-pako.js +1 -1
- package/dist/unzip-pako.js.map +1 -1
- package/dist/unzip.js +1 -1
- package/dist/unzip.js.map +1 -1
- package/dist/util.js +14 -66
- package/dist/util.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://npmjs.org/package/@gmod/bbi)
|
|
4
4
|
[](https://codecov.io/gh/GMOD/bbi-js/branch/master)
|
|
5
|
-
[](https://github.com/GMOD/bbi-js/actions?query=branch%3Amaster+workflow%3APush+)
|
|
6
6
|
|
|
7
7
|
A parser for bigwig and bigbed file formats
|
|
8
8
|
|
package/dist/bbi.js
CHANGED
|
@@ -1,15 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
3
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
4
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -19,42 +8,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
19
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
9
|
});
|
|
21
10
|
};
|
|
22
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
-
function step(op) {
|
|
27
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
-
while (_) try {
|
|
29
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
-
switch (op[0]) {
|
|
32
|
-
case 0: case 1: t = op; break;
|
|
33
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
-
default:
|
|
37
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
-
if (t[2]) _.ops.pop();
|
|
42
|
-
_.trys.pop(); continue;
|
|
43
|
-
}
|
|
44
|
-
op = body.call(thisArg, _);
|
|
45
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
12
|
exports.BBI = void 0;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
13
|
+
const binary_parser_1 = require("binary-parser");
|
|
14
|
+
const generic_filehandle_1 = require("generic-filehandle");
|
|
15
|
+
const rxjs_1 = require("rxjs");
|
|
16
|
+
const operators_1 = require("rxjs/operators");
|
|
17
|
+
const blockView_1 = require("./blockView");
|
|
18
|
+
const BIG_WIG_MAGIC = -2003829722;
|
|
19
|
+
const BIG_BED_MAGIC = -2021002517;
|
|
58
20
|
function toString(arr) {
|
|
59
21
|
return new TextDecoder().decode(arr);
|
|
60
22
|
}
|
|
@@ -64,8 +26,8 @@ function toString(arr) {
|
|
|
64
26
|
* @return an object with compiled parsers
|
|
65
27
|
*/
|
|
66
28
|
function getParsers(isBE) {
|
|
67
|
-
|
|
68
|
-
|
|
29
|
+
const le = isBE ? 'big' : 'little';
|
|
30
|
+
const headerParser = new binary_parser_1.Parser()
|
|
69
31
|
.endianess(le)
|
|
70
32
|
.int32('magic')
|
|
71
33
|
.uint16('version')
|
|
@@ -88,43 +50,42 @@ function getParsers(isBE) {
|
|
|
88
50
|
.uint64('dataOffset')
|
|
89
51
|
.uint64('indexOffset'),
|
|
90
52
|
});
|
|
91
|
-
|
|
53
|
+
const totalSummaryParser = new binary_parser_1.Parser()
|
|
92
54
|
.endianess(le)
|
|
93
55
|
.uint64('basesCovered')
|
|
94
56
|
.doublele('scoreMin')
|
|
95
57
|
.doublele('scoreMax')
|
|
96
58
|
.doublele('scoreSum')
|
|
97
59
|
.doublele('scoreSumSquares');
|
|
98
|
-
|
|
60
|
+
const chromTreeParser = new binary_parser_1.Parser()
|
|
99
61
|
.endianess(le)
|
|
100
62
|
.uint32('magic')
|
|
101
63
|
.uint32('blockSize')
|
|
102
64
|
.uint32('keySize')
|
|
103
65
|
.uint32('valSize')
|
|
104
66
|
.uint64('itemCount');
|
|
105
|
-
|
|
67
|
+
const isLeafNode = new binary_parser_1.Parser()
|
|
106
68
|
.endianess(le)
|
|
107
69
|
.uint8('isLeafNode')
|
|
108
70
|
.skip(1)
|
|
109
71
|
.uint16('cnt')
|
|
110
72
|
.saveOffset('offset');
|
|
111
73
|
return {
|
|
112
|
-
chromTreeParser
|
|
113
|
-
totalSummaryParser
|
|
114
|
-
headerParser
|
|
115
|
-
isLeafNode
|
|
74
|
+
chromTreeParser,
|
|
75
|
+
totalSummaryParser,
|
|
76
|
+
headerParser,
|
|
77
|
+
isLeafNode,
|
|
116
78
|
};
|
|
117
79
|
}
|
|
118
|
-
|
|
80
|
+
class BBI {
|
|
119
81
|
/*
|
|
120
82
|
* @param filehandle - a filehandle from generic-filehandle or implementing something similar to the node10 fs.promises API
|
|
121
83
|
* @param path - a Local file path as a string
|
|
122
84
|
* @param url - a URL string
|
|
123
85
|
* @param renameRefSeqs - an optional method to rename the internal reference sequences using a mapping function
|
|
124
86
|
*/
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
var filehandle = options.filehandle, _a = options.renameRefSeqs, renameRefSeqs = _a === void 0 ? function (s) { return s; } : _a, path = options.path, url = options.url;
|
|
87
|
+
constructor(options = {}) {
|
|
88
|
+
const { filehandle, renameRefSeqs = s => s, path, url } = options;
|
|
128
89
|
this.renameRefSeqs = renameRefSeqs;
|
|
129
90
|
if (filehandle) {
|
|
130
91
|
this.bbi = filehandle;
|
|
@@ -143,70 +104,51 @@ var BBI = /** @class */ (function () {
|
|
|
143
104
|
* @param abortSignal - abort the operation, can be null
|
|
144
105
|
* @return a Header object
|
|
145
106
|
*/
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (opts === void 0) { opts = {}; }
|
|
149
|
-
var options = 'aborted' in opts ? { signal: opts } : opts;
|
|
107
|
+
getHeader(opts = {}) {
|
|
108
|
+
const options = 'aborted' in opts ? { signal: opts } : opts;
|
|
150
109
|
if (!this.headerP) {
|
|
151
|
-
this.headerP = this._getHeader(options).catch(
|
|
152
|
-
|
|
110
|
+
this.headerP = this._getHeader(options).catch(e => {
|
|
111
|
+
this.headerP = undefined;
|
|
153
112
|
throw e;
|
|
154
113
|
});
|
|
155
114
|
}
|
|
156
115
|
return this.headerP;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
case 0: return [4 /*yield*/, this._getMainHeader(opts)];
|
|
164
|
-
case 1:
|
|
165
|
-
header = _a.sent();
|
|
166
|
-
return [4 /*yield*/, this._readChromTree(header, opts)];
|
|
167
|
-
case 2:
|
|
168
|
-
chroms = _a.sent();
|
|
169
|
-
return [2 /*return*/, __assign(__assign({}, header), chroms)];
|
|
170
|
-
}
|
|
171
|
-
});
|
|
116
|
+
}
|
|
117
|
+
_getHeader(opts) {
|
|
118
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
119
|
+
const header = yield this._getMainHeader(opts);
|
|
120
|
+
const chroms = yield this._readChromTree(header, opts);
|
|
121
|
+
return Object.assign(Object.assign({}, header), chroms);
|
|
172
122
|
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if (header.totalSummaryOffset) {
|
|
199
|
-
tail = buffer.subarray(Number(header.totalSummaryOffset));
|
|
200
|
-
sum = ret.totalSummaryParser.parse(tail);
|
|
201
|
-
header.totalSummary = __assign(__assign({}, sum), { basesCovered: Number(sum.basesCovered) });
|
|
202
|
-
}
|
|
203
|
-
return [2 /*return*/, __assign(__assign({}, header), { isBigEndian: isBigEndian })];
|
|
204
|
-
}
|
|
205
|
-
});
|
|
123
|
+
}
|
|
124
|
+
_getMainHeader(opts, requestSize = 2000) {
|
|
125
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
126
|
+
const { buffer } = yield this.bbi.read(Buffer.alloc(requestSize), 0, requestSize, 0, opts);
|
|
127
|
+
const isBigEndian = this._isBigEndian(buffer);
|
|
128
|
+
const ret = getParsers(isBigEndian);
|
|
129
|
+
const header = ret.headerParser.parse(buffer);
|
|
130
|
+
const { magic, asOffset, totalSummaryOffset } = header;
|
|
131
|
+
header.fileType = magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
|
|
132
|
+
if (asOffset > requestSize || totalSummaryOffset > requestSize) {
|
|
133
|
+
return this._getMainHeader(opts, requestSize * 2);
|
|
134
|
+
}
|
|
135
|
+
if (asOffset) {
|
|
136
|
+
const off = Number(header.asOffset);
|
|
137
|
+
header.autoSql = toString(buffer.subarray(off, buffer.indexOf(0, off)));
|
|
138
|
+
}
|
|
139
|
+
if (header.totalSummaryOffset > requestSize) {
|
|
140
|
+
return this._getMainHeader(opts, requestSize * 2);
|
|
141
|
+
}
|
|
142
|
+
if (header.totalSummaryOffset) {
|
|
143
|
+
const tail = buffer.subarray(Number(header.totalSummaryOffset));
|
|
144
|
+
const sum = ret.totalSummaryParser.parse(tail);
|
|
145
|
+
header.totalSummary = Object.assign(Object.assign({}, sum), { basesCovered: Number(sum.basesCovered) });
|
|
146
|
+
}
|
|
147
|
+
return Object.assign(Object.assign({}, header), { isBigEndian });
|
|
206
148
|
});
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
|
|
149
|
+
}
|
|
150
|
+
_isBigEndian(buffer) {
|
|
151
|
+
let ret = buffer.readInt32LE(0);
|
|
210
152
|
if (ret === BIG_WIG_MAGIC || ret === BIG_BED_MAGIC) {
|
|
211
153
|
return false;
|
|
212
154
|
}
|
|
@@ -215,108 +157,82 @@ var BBI = /** @class */ (function () {
|
|
|
215
157
|
return true;
|
|
216
158
|
}
|
|
217
159
|
throw new Error('not a BigWig/BigBed file');
|
|
218
|
-
}
|
|
160
|
+
}
|
|
219
161
|
// todo: add progress if long running
|
|
220
|
-
|
|
221
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
return [3 /*break*/, 3];
|
|
276
|
-
case 1:
|
|
277
|
-
nextNodes = [];
|
|
278
|
-
for (n = 0; n < cnt; n += 1) {
|
|
279
|
-
nonleafRet = nonleafNodeParser.parse(buffer.subarray(offset));
|
|
280
|
-
childOffset = nonleafRet.childOffset;
|
|
281
|
-
offset += nonleafRet.offset;
|
|
282
|
-
nextNodes.push(bptReadNode(Number(childOffset) - Number(chromTreeOffset)));
|
|
283
|
-
}
|
|
284
|
-
return [4 /*yield*/, Promise.all(nextNodes)];
|
|
285
|
-
case 2:
|
|
286
|
-
_a.sent();
|
|
287
|
-
_a.label = 3;
|
|
288
|
-
case 3: return [2 /*return*/];
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
}); };
|
|
292
|
-
return [4 /*yield*/, bptReadNode(rootNodeOffset)];
|
|
293
|
-
case 2:
|
|
294
|
-
_a.sent();
|
|
295
|
-
return [2 /*return*/, {
|
|
296
|
-
refsByName: refsByName,
|
|
297
|
-
refsByNumber: refsByNumber,
|
|
298
|
-
}];
|
|
162
|
+
_readChromTree(header, opts) {
|
|
163
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
164
|
+
const isBE = header.isBigEndian;
|
|
165
|
+
const le = isBE ? 'big' : 'little';
|
|
166
|
+
const refsByNumber = [];
|
|
167
|
+
const refsByName = {};
|
|
168
|
+
let unzoomedDataOffset = Number(header.unzoomedDataOffset);
|
|
169
|
+
const chromTreeOffset = Number(header.chromTreeOffset);
|
|
170
|
+
while (unzoomedDataOffset % 4 !== 0) {
|
|
171
|
+
unzoomedDataOffset += 1;
|
|
172
|
+
}
|
|
173
|
+
const off = unzoomedDataOffset - chromTreeOffset;
|
|
174
|
+
const { buffer } = yield this.bbi.read(Buffer.alloc(off), 0, off, Number(chromTreeOffset), opts);
|
|
175
|
+
const p = getParsers(isBE);
|
|
176
|
+
const { keySize } = p.chromTreeParser.parse(buffer);
|
|
177
|
+
const leafNodeParser = new binary_parser_1.Parser()
|
|
178
|
+
.endianess(le)
|
|
179
|
+
.string('key', { stripNull: true, length: keySize })
|
|
180
|
+
.uint32('refId')
|
|
181
|
+
.uint32('refSize')
|
|
182
|
+
.saveOffset('offset');
|
|
183
|
+
const nonleafNodeParser = new binary_parser_1.Parser()
|
|
184
|
+
.endianess(le)
|
|
185
|
+
.skip(keySize)
|
|
186
|
+
.uint64('childOffset')
|
|
187
|
+
.saveOffset('offset');
|
|
188
|
+
const rootNodeOffset = 32;
|
|
189
|
+
const bptReadNode = (currentOffset) => __awaiter(this, void 0, void 0, function* () {
|
|
190
|
+
let offset = currentOffset;
|
|
191
|
+
if (offset >= buffer.length) {
|
|
192
|
+
throw new Error('reading beyond end of buffer');
|
|
193
|
+
}
|
|
194
|
+
const ret = p.isLeafNode.parse(buffer.subarray(offset));
|
|
195
|
+
const { isLeafNode, cnt } = ret;
|
|
196
|
+
offset += ret.offset;
|
|
197
|
+
if (isLeafNode) {
|
|
198
|
+
for (let n = 0; n < cnt; n += 1) {
|
|
199
|
+
const leafRet = leafNodeParser.parse(buffer.subarray(offset));
|
|
200
|
+
offset += leafRet.offset;
|
|
201
|
+
const { key, refId, refSize } = leafRet;
|
|
202
|
+
const refRec = { name: key, id: refId, length: refSize };
|
|
203
|
+
refsByName[this.renameRefSeqs(key)] = refId;
|
|
204
|
+
refsByNumber[refId] = refRec;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// parse index node
|
|
209
|
+
const nextNodes = [];
|
|
210
|
+
for (let n = 0; n < cnt; n += 1) {
|
|
211
|
+
const nonleafRet = nonleafNodeParser.parse(buffer.subarray(offset));
|
|
212
|
+
const { childOffset } = nonleafRet;
|
|
213
|
+
offset += nonleafRet.offset;
|
|
214
|
+
nextNodes.push(bptReadNode(Number(childOffset) - Number(chromTreeOffset)));
|
|
215
|
+
}
|
|
216
|
+
yield Promise.all(nextNodes);
|
|
299
217
|
}
|
|
300
218
|
});
|
|
219
|
+
yield bptReadNode(rootNodeOffset);
|
|
220
|
+
return {
|
|
221
|
+
refsByName,
|
|
222
|
+
refsByNumber,
|
|
223
|
+
};
|
|
301
224
|
});
|
|
302
|
-
}
|
|
225
|
+
}
|
|
303
226
|
/*
|
|
304
227
|
* fetches the "unzoomed" view of the bigwig data. this is the default for bigbed
|
|
305
228
|
* @param abortSignal - a signal to optionally abort this operation
|
|
306
229
|
*/
|
|
307
|
-
|
|
308
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
309
|
-
|
|
310
|
-
return
|
|
311
|
-
switch (_b.label) {
|
|
312
|
-
case 0: return [4 /*yield*/, this.getHeader(opts)];
|
|
313
|
-
case 1:
|
|
314
|
-
_a = _b.sent(), unzoomedIndexOffset = _a.unzoomedIndexOffset, refsByName = _a.refsByName, uncompressBufSize = _a.uncompressBufSize, isBigEndian = _a.isBigEndian, fileType = _a.fileType;
|
|
315
|
-
return [2 /*return*/, new blockView_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, isBigEndian, uncompressBufSize > 0, fileType)];
|
|
316
|
-
}
|
|
317
|
-
});
|
|
230
|
+
getUnzoomedView(opts) {
|
|
231
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
232
|
+
const { unzoomedIndexOffset, refsByName, uncompressBufSize, isBigEndian, fileType, } = yield this.getHeader(opts);
|
|
233
|
+
return new blockView_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, isBigEndian, uncompressBufSize > 0, fileType);
|
|
318
234
|
});
|
|
319
|
-
}
|
|
235
|
+
}
|
|
320
236
|
/**
|
|
321
237
|
* Gets features from a BigWig file
|
|
322
238
|
*
|
|
@@ -325,66 +241,41 @@ var BBI = /** @class */ (function () {
|
|
|
325
241
|
* @param end - The end of a region
|
|
326
242
|
* @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use
|
|
327
243
|
*/
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
view = _a.sent();
|
|
350
|
-
return [3 /*break*/, 7];
|
|
351
|
-
case 5: return [4 /*yield*/, this.getView(1, opts)];
|
|
352
|
-
case 6:
|
|
353
|
-
view = _a.sent();
|
|
354
|
-
_a.label = 7;
|
|
355
|
-
case 7:
|
|
356
|
-
if (!view) {
|
|
357
|
-
throw new Error('unable to get block view for data');
|
|
358
|
-
}
|
|
359
|
-
return [2 /*return*/, new rxjs_1.Observable(function (observer) {
|
|
360
|
-
view.readWigData(chrName, start, end, observer, opts);
|
|
361
|
-
})];
|
|
362
|
-
}
|
|
244
|
+
getFeatureStream(refName, start, end, opts = {
|
|
245
|
+
scale: 1,
|
|
246
|
+
}) {
|
|
247
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
248
|
+
yield this.getHeader(opts);
|
|
249
|
+
const chrName = this.renameRefSeqs(refName);
|
|
250
|
+
let view;
|
|
251
|
+
if (opts.basesPerSpan) {
|
|
252
|
+
view = yield this.getView(1 / opts.basesPerSpan, opts);
|
|
253
|
+
}
|
|
254
|
+
else if (opts.scale) {
|
|
255
|
+
view = yield this.getView(opts.scale, opts);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
view = yield this.getView(1, opts);
|
|
259
|
+
}
|
|
260
|
+
if (!view) {
|
|
261
|
+
throw new Error('unable to get block view for data');
|
|
262
|
+
}
|
|
263
|
+
return new rxjs_1.Observable((observer) => {
|
|
264
|
+
view.readWigData(chrName, start, end, observer, opts);
|
|
363
265
|
});
|
|
364
266
|
});
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
case 1:
|
|
376
|
-
ob = _a.sent();
|
|
377
|
-
return [4 /*yield*/, ob
|
|
378
|
-
.pipe((0, operators_1.reduce)(function (acc, curr) { return acc.concat(curr); }))
|
|
379
|
-
.toPromise()];
|
|
380
|
-
case 2:
|
|
381
|
-
ret = _a.sent();
|
|
382
|
-
return [2 /*return*/, ret || []];
|
|
383
|
-
}
|
|
384
|
-
});
|
|
267
|
+
}
|
|
268
|
+
getFeatures(refName, start, end, opts = {
|
|
269
|
+
scale: 1,
|
|
270
|
+
}) {
|
|
271
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
272
|
+
const ob = yield this.getFeatureStream(refName, start, end, opts);
|
|
273
|
+
const ret = yield ob
|
|
274
|
+
.pipe((0, operators_1.reduce)((acc, curr) => acc.concat(curr)))
|
|
275
|
+
.toPromise();
|
|
276
|
+
return ret || [];
|
|
385
277
|
});
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
}());
|
|
278
|
+
}
|
|
279
|
+
}
|
|
389
280
|
exports.BBI = BBI;
|
|
390
281
|
//# sourceMappingURL=bbi.js.map
|
package/dist/bbi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"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"}
|