@gmod/bbi 2.0.4 → 3.0.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.
- package/CHANGELOG.md +9 -1
- package/CHANGELOG.md.orig +200 -0
- package/README.md +91 -76
- package/dist/bbi.js +164 -275
- 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/esm/bbi.js +18 -20
- package/esm/bbi.js.map +1 -1
- package/esm/bigbed.js +2 -2
- package/esm/bigbed.js.map +1 -1
- package/package.json +12 -12
- package/src/bbi.ts +5 -7
- package/src/bigbed.ts +3 -6
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,56 @@ 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 {
|
|
81
|
+
/* fetch and parse header information from a bigwig or bigbed file
|
|
82
|
+
* @param abortSignal - abort the operation, can be null
|
|
83
|
+
* @return a Header object
|
|
84
|
+
*/
|
|
85
|
+
getHeader(opts = {}) {
|
|
86
|
+
const options = 'aborted' in opts ? { signal: opts } : opts;
|
|
87
|
+
if (!this.headerP) {
|
|
88
|
+
this.headerP = this._getHeader(options).catch(e => {
|
|
89
|
+
this.headerP = undefined;
|
|
90
|
+
throw e;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return this.headerP;
|
|
94
|
+
}
|
|
119
95
|
/*
|
|
120
96
|
* @param filehandle - a filehandle from generic-filehandle or implementing something similar to the node10 fs.promises API
|
|
121
97
|
* @param path - a Local file path as a string
|
|
122
98
|
* @param url - a URL string
|
|
123
99
|
* @param renameRefSeqs - an optional method to rename the internal reference sequences using a mapping function
|
|
124
100
|
*/
|
|
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;
|
|
101
|
+
constructor(options = {}) {
|
|
102
|
+
const { filehandle, renameRefSeqs = s => s, path, url } = options;
|
|
128
103
|
this.renameRefSeqs = renameRefSeqs;
|
|
129
104
|
if (filehandle) {
|
|
130
105
|
this.bbi = filehandle;
|
|
@@ -139,74 +114,41 @@ var BBI = /** @class */ (function () {
|
|
|
139
114
|
throw new Error('no file given');
|
|
140
115
|
}
|
|
141
116
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
var _this = this;
|
|
148
|
-
if (opts === void 0) { opts = {}; }
|
|
149
|
-
var options = 'aborted' in opts ? { signal: opts } : opts;
|
|
150
|
-
if (!this.headerP) {
|
|
151
|
-
this.headerP = this._getHeader(options).catch(function (e) {
|
|
152
|
-
_this.headerP = undefined;
|
|
153
|
-
throw e;
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
return this.headerP;
|
|
157
|
-
};
|
|
158
|
-
BBI.prototype._getHeader = function (opts) {
|
|
159
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
160
|
-
var header, chroms;
|
|
161
|
-
return __generator(this, function (_a) {
|
|
162
|
-
switch (_a.label) {
|
|
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
|
-
});
|
|
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,39 @@ 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
|
-
return
|
|
373
|
-
switch (_a.label) {
|
|
374
|
-
case 0: return [4 /*yield*/, this.getFeatureStream(refName, start, end, opts)];
|
|
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 (0, rxjs_1.firstValueFrom)(ob.pipe((0, operators_1.toArray)()));
|
|
274
|
+
return ret.flat();
|
|
385
275
|
});
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
}());
|
|
276
|
+
}
|
|
277
|
+
}
|
|
389
278
|
exports.BBI = BBI;
|
|
390
279
|
//# 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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"}
|