@gmod/bbi 1.0.33 → 2.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 +20 -3
- package/dist/bbi.d.ts +2 -2
- package/dist/bbi.js +56 -59
- package/dist/bbi.js.map +1 -0
- package/dist/bigbed.d.ts +1 -2
- package/dist/bigbed.js +23 -20
- package/dist/bigbed.js.map +1 -0
- package/dist/bigwig.d.ts +1 -3
- package/dist/bigwig.js +5 -8
- package/dist/bigwig.js.map +1 -0
- package/dist/blockView.d.ts +8 -9
- package/dist/blockView.js +153 -92
- package/dist/blockView.js.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/range.js +2 -0
- package/dist/range.js.map +1 -0
- package/dist/unzip-pako.d.ts +1 -1
- package/dist/unzip-pako.js +2 -1
- package/dist/unzip-pako.js.map +1 -0
- package/dist/unzip.js +1 -0
- package/dist/unzip.js.map +1 -0
- package/dist/util.d.ts +11 -1
- package/dist/util.js +10 -4
- package/dist/util.js.map +1 -0
- package/esm/bbi.d.ts +2 -2
- package/esm/bbi.js +62 -67
- package/esm/bbi.js.map +1 -0
- package/esm/bigbed.d.ts +1 -2
- package/esm/bigbed.js +42 -46
- package/esm/bigbed.js.map +1 -0
- package/esm/bigwig.d.ts +1 -3
- package/esm/bigwig.js +7 -14
- package/esm/bigwig.js.map +1 -0
- package/esm/blockView.d.ts +8 -9
- package/esm/blockView.js +166 -116
- package/esm/blockView.js.map +1 -0
- package/esm/index.js +3 -7
- package/esm/index.js.map +1 -0
- package/esm/range.js +3 -4
- package/esm/range.js.map +1 -0
- package/esm/unzip-pako.d.ts +1 -1
- package/esm/unzip-pako.js +4 -7
- package/esm/unzip-pako.js.map +1 -0
- package/esm/unzip.js +3 -5
- package/esm/unzip.js.map +1 -0
- package/esm/util.d.ts +11 -1
- package/esm/util.js +14 -15
- package/esm/util.js.map +1 -0
- package/package.json +13 -13
- package/src/bbi.ts +375 -0
- package/src/bigbed.ts +244 -0
- package/src/bigwig.ts +38 -0
- package/src/blockView.ts +496 -0
- package/src/declare.d.ts +2 -0
- package/src/index.ts +3 -0
- package/src/range.ts +142 -0
- package/src/unzip-pako.ts +5 -0
- package/src/unzip.ts +2 -0
- package/src/util.ts +83 -0
package/esm/bbi.js
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
exports.BBI = void 0;
|
|
7
|
-
const binary_parser_1 = require("@gmod/binary-parser");
|
|
8
|
-
const generic_filehandle_1 = require("generic-filehandle");
|
|
9
|
-
const rxjs_1 = require("rxjs");
|
|
10
|
-
const operators_1 = require("rxjs/operators");
|
|
11
|
-
const abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
|
|
12
|
-
const quick_lru_1 = __importDefault(require("quick-lru"));
|
|
13
|
-
const blockView_1 = require("./blockView");
|
|
1
|
+
import { Parser } from 'binary-parser';
|
|
2
|
+
import { LocalFile, RemoteFile } from 'generic-filehandle';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { reduce } from 'rxjs/operators';
|
|
5
|
+
import { BlockView } from './blockView';
|
|
14
6
|
const BIG_WIG_MAGIC = -2003829722;
|
|
15
7
|
const BIG_BED_MAGIC = -2021002517;
|
|
16
8
|
/* get the compiled parsers for different sections of the bigwig file
|
|
@@ -20,7 +12,7 @@ const BIG_BED_MAGIC = -2021002517;
|
|
|
20
12
|
*/
|
|
21
13
|
function getParsers(isBE) {
|
|
22
14
|
const le = isBE ? 'big' : 'little';
|
|
23
|
-
const headerParser = new
|
|
15
|
+
const headerParser = new Parser()
|
|
24
16
|
.endianess(le)
|
|
25
17
|
.int32('magic')
|
|
26
18
|
.uint16('version')
|
|
@@ -36,31 +28,33 @@ function getParsers(isBE) {
|
|
|
36
28
|
.uint64('extHeaderOffset') // name index offset, used in bigbed
|
|
37
29
|
.array('zoomLevels', {
|
|
38
30
|
length: 'numZoomLevels',
|
|
39
|
-
type: new
|
|
31
|
+
type: new Parser()
|
|
32
|
+
.endianess(le)
|
|
40
33
|
.uint32('reductionLevel')
|
|
41
34
|
.uint32('reserved')
|
|
42
35
|
.uint64('dataOffset')
|
|
43
36
|
.uint64('indexOffset'),
|
|
44
37
|
});
|
|
45
|
-
const totalSummaryParser = new
|
|
38
|
+
const totalSummaryParser = new Parser()
|
|
46
39
|
.endianess(le)
|
|
47
40
|
.uint64('basesCovered')
|
|
48
|
-
.
|
|
49
|
-
.
|
|
50
|
-
.
|
|
51
|
-
.
|
|
52
|
-
const chromTreeParser = new
|
|
41
|
+
.doublele('scoreMin')
|
|
42
|
+
.doublele('scoreMax')
|
|
43
|
+
.doublele('scoreSum')
|
|
44
|
+
.doublele('scoreSumSquares');
|
|
45
|
+
const chromTreeParser = new Parser()
|
|
53
46
|
.endianess(le)
|
|
54
47
|
.uint32('magic')
|
|
55
48
|
.uint32('blockSize')
|
|
56
49
|
.uint32('keySize')
|
|
57
50
|
.uint32('valSize')
|
|
58
51
|
.uint64('itemCount');
|
|
59
|
-
const isLeafNode = new
|
|
52
|
+
const isLeafNode = new Parser()
|
|
60
53
|
.endianess(le)
|
|
61
54
|
.uint8('isLeafNode')
|
|
62
55
|
.skip(1)
|
|
63
|
-
.uint16('cnt')
|
|
56
|
+
.uint16('cnt')
|
|
57
|
+
.saveOffset('offset');
|
|
64
58
|
return {
|
|
65
59
|
chromTreeParser,
|
|
66
60
|
totalSummaryParser,
|
|
@@ -68,7 +62,7 @@ function getParsers(isBE) {
|
|
|
68
62
|
isLeafNode,
|
|
69
63
|
};
|
|
70
64
|
}
|
|
71
|
-
class BBI {
|
|
65
|
+
export class BBI {
|
|
72
66
|
/*
|
|
73
67
|
* @param filehandle - a filehandle from generic-filehandle or implementing something similar to the node10 fs.promises API
|
|
74
68
|
* @param path - a Local file path as a string
|
|
@@ -76,22 +70,16 @@ class BBI {
|
|
|
76
70
|
* @param renameRefSeqs - an optional method to rename the internal reference sequences using a mapping function
|
|
77
71
|
*/
|
|
78
72
|
constructor(options = {}) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
fill: async (params, signal) => {
|
|
82
|
-
return this._getHeader({ ...params, signal });
|
|
83
|
-
},
|
|
84
|
-
});
|
|
85
|
-
const { filehandle, renameRefSeqs, path, url } = options;
|
|
86
|
-
this.renameRefSeqs = renameRefSeqs || ((s) => s);
|
|
73
|
+
const { filehandle, renameRefSeqs = s => s, path, url } = options;
|
|
74
|
+
this.renameRefSeqs = renameRefSeqs;
|
|
87
75
|
if (filehandle) {
|
|
88
76
|
this.bbi = filehandle;
|
|
89
77
|
}
|
|
90
78
|
else if (url) {
|
|
91
|
-
this.bbi = new
|
|
79
|
+
this.bbi = new RemoteFile(url);
|
|
92
80
|
}
|
|
93
81
|
else if (path) {
|
|
94
|
-
this.bbi = new
|
|
82
|
+
this.bbi = new LocalFile(path);
|
|
95
83
|
}
|
|
96
84
|
else {
|
|
97
85
|
throw new Error('no file given');
|
|
@@ -103,7 +91,13 @@ class BBI {
|
|
|
103
91
|
*/
|
|
104
92
|
getHeader(opts = {}) {
|
|
105
93
|
const options = 'aborted' in opts ? { signal: opts } : opts;
|
|
106
|
-
|
|
94
|
+
if (!this.headerP) {
|
|
95
|
+
this.headerP = this._getHeader(options).catch(e => {
|
|
96
|
+
this.headerP = undefined;
|
|
97
|
+
throw e;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return this.headerP;
|
|
107
101
|
}
|
|
108
102
|
async _getHeader(opts) {
|
|
109
103
|
const header = await this._getMainHeader(opts);
|
|
@@ -114,23 +108,24 @@ class BBI {
|
|
|
114
108
|
const { buffer } = await this.bbi.read(Buffer.alloc(requestSize), 0, requestSize, 0, opts);
|
|
115
109
|
const isBigEndian = this._isBigEndian(buffer);
|
|
116
110
|
const ret = getParsers(isBigEndian);
|
|
117
|
-
const header = ret.headerParser.parse(buffer)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
111
|
+
const header = ret.headerParser.parse(buffer);
|
|
112
|
+
const { magic, asOffset, totalSummaryOffset } = header;
|
|
113
|
+
header.fileType = magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
|
|
114
|
+
if (asOffset > requestSize || totalSummaryOffset > requestSize) {
|
|
121
115
|
return this._getMainHeader(opts, requestSize * 2);
|
|
122
116
|
}
|
|
123
|
-
if (
|
|
117
|
+
if (asOffset) {
|
|
118
|
+
const off = Number(header.asOffset);
|
|
124
119
|
header.autoSql = buffer
|
|
125
|
-
.subarray(
|
|
120
|
+
.subarray(off, buffer.indexOf(0, off))
|
|
126
121
|
.toString('utf8');
|
|
127
122
|
}
|
|
128
123
|
if (header.totalSummaryOffset > requestSize) {
|
|
129
124
|
return this._getMainHeader(opts, requestSize * 2);
|
|
130
125
|
}
|
|
131
126
|
if (header.totalSummaryOffset) {
|
|
132
|
-
const tail = buffer.subarray(header.totalSummaryOffset);
|
|
133
|
-
header.totalSummary = ret.totalSummaryParser.parse(tail)
|
|
127
|
+
const tail = buffer.subarray(Number(header.totalSummaryOffset));
|
|
128
|
+
header.totalSummary = ret.totalSummaryParser.parse(tail);
|
|
134
129
|
}
|
|
135
130
|
return { ...header, isBigEndian };
|
|
136
131
|
}
|
|
@@ -151,37 +146,40 @@ class BBI {
|
|
|
151
146
|
const le = isBE ? 'big' : 'little';
|
|
152
147
|
const refsByNumber = [];
|
|
153
148
|
const refsByName = {};
|
|
154
|
-
|
|
155
|
-
|
|
149
|
+
let unzoomedDataOffset = Number(header.unzoomedDataOffset);
|
|
150
|
+
const chromTreeOffset = Number(header.chromTreeOffset);
|
|
156
151
|
while (unzoomedDataOffset % 4 !== 0) {
|
|
157
152
|
unzoomedDataOffset += 1;
|
|
158
153
|
}
|
|
159
|
-
const
|
|
154
|
+
const off = unzoomedDataOffset - chromTreeOffset;
|
|
155
|
+
const { buffer } = await this.bbi.read(Buffer.alloc(off), 0, off, Number(chromTreeOffset), opts);
|
|
160
156
|
const p = getParsers(isBE);
|
|
161
|
-
const { keySize } = p.chromTreeParser.parse(
|
|
162
|
-
const leafNodeParser = new
|
|
157
|
+
const { keySize } = p.chromTreeParser.parse(buffer);
|
|
158
|
+
const leafNodeParser = new Parser()
|
|
163
159
|
.endianess(le)
|
|
164
160
|
.string('key', { stripNull: true, length: keySize })
|
|
165
161
|
.uint32('refId')
|
|
166
|
-
.uint32('refSize')
|
|
167
|
-
|
|
162
|
+
.uint32('refSize')
|
|
163
|
+
.saveOffset('offset');
|
|
164
|
+
const nonleafNodeParser = new Parser()
|
|
168
165
|
.endianess(le)
|
|
169
166
|
.skip(keySize)
|
|
170
|
-
.uint64('childOffset')
|
|
167
|
+
.uint64('childOffset')
|
|
168
|
+
.saveOffset('offset');
|
|
171
169
|
const rootNodeOffset = 32;
|
|
172
170
|
const bptReadNode = async (currentOffset) => {
|
|
173
171
|
let offset = currentOffset;
|
|
174
|
-
if (offset >=
|
|
172
|
+
if (offset >= buffer.length) {
|
|
175
173
|
throw new Error('reading beyond end of buffer');
|
|
176
174
|
}
|
|
177
|
-
const ret = p.isLeafNode.parse(
|
|
178
|
-
const { isLeafNode, cnt } = ret
|
|
175
|
+
const ret = p.isLeafNode.parse(buffer.subarray(offset));
|
|
176
|
+
const { isLeafNode, cnt } = ret;
|
|
179
177
|
offset += ret.offset;
|
|
180
178
|
if (isLeafNode) {
|
|
181
179
|
for (let n = 0; n < cnt; n += 1) {
|
|
182
|
-
const leafRet = leafNodeParser.parse(
|
|
180
|
+
const leafRet = leafNodeParser.parse(buffer.subarray(offset));
|
|
183
181
|
offset += leafRet.offset;
|
|
184
|
-
const { key, refId, refSize } = leafRet
|
|
182
|
+
const { key, refId, refSize } = leafRet;
|
|
185
183
|
const refRec = { name: key, id: refId, length: refSize };
|
|
186
184
|
refsByName[this.renameRefSeqs(key)] = refId;
|
|
187
185
|
refsByNumber[refId] = refRec;
|
|
@@ -191,11 +189,10 @@ class BBI {
|
|
|
191
189
|
// parse index node
|
|
192
190
|
const nextNodes = [];
|
|
193
191
|
for (let n = 0; n < cnt; n += 1) {
|
|
194
|
-
const nonleafRet = nonleafNodeParser.parse(
|
|
195
|
-
|
|
192
|
+
const nonleafRet = nonleafNodeParser.parse(buffer.subarray(offset));
|
|
193
|
+
const { childOffset } = nonleafRet;
|
|
196
194
|
offset += nonleafRet.offset;
|
|
197
|
-
childOffset
|
|
198
|
-
nextNodes.push(bptReadNode(childOffset));
|
|
195
|
+
nextNodes.push(bptReadNode(Number(childOffset) - Number(chromTreeOffset)));
|
|
199
196
|
}
|
|
200
197
|
await Promise.all(nextNodes);
|
|
201
198
|
}
|
|
@@ -211,10 +208,8 @@ class BBI {
|
|
|
211
208
|
* @param abortSignal - a signal to optionally abort this operation
|
|
212
209
|
*/
|
|
213
210
|
async getUnzoomedView(opts) {
|
|
214
|
-
const { unzoomedIndexOffset,
|
|
215
|
-
|
|
216
|
-
const cirLen = nzl ? nzl.dataOffset - unzoomedIndexOffset : 4000;
|
|
217
|
-
return new blockView_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, cirLen, isBigEndian, uncompressBufSize > 0, fileType);
|
|
211
|
+
const { unzoomedIndexOffset, refsByName, uncompressBufSize, isBigEndian, fileType, } = await this.getHeader(opts);
|
|
212
|
+
return new BlockView(this.bbi, refsByName, unzoomedIndexOffset, isBigEndian, uncompressBufSize > 0, fileType);
|
|
218
213
|
}
|
|
219
214
|
/**
|
|
220
215
|
* Gets features from a BigWig file
|
|
@@ -242,7 +237,7 @@ class BBI {
|
|
|
242
237
|
if (!view) {
|
|
243
238
|
throw new Error('unable to get block view for data');
|
|
244
239
|
}
|
|
245
|
-
return new
|
|
240
|
+
return new Observable((observer) => {
|
|
246
241
|
view.readWigData(chrName, start, end, observer, opts);
|
|
247
242
|
});
|
|
248
243
|
}
|
|
@@ -251,9 +246,9 @@ class BBI {
|
|
|
251
246
|
}) {
|
|
252
247
|
const ob = await this.getFeatureStream(refName, start, end, opts);
|
|
253
248
|
const ret = await ob
|
|
254
|
-
.pipe(
|
|
249
|
+
.pipe(reduce((acc, curr) => acc.concat(curr)))
|
|
255
250
|
.toPromise();
|
|
256
251
|
return ret || [];
|
|
257
252
|
}
|
|
258
253
|
}
|
|
259
|
-
|
|
254
|
+
//# sourceMappingURL=bbi.js.map
|
package/esm/bbi.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"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"}
|
package/esm/bigbed.d.ts
CHANGED
|
@@ -3,9 +3,8 @@ import { BlockView } from './blockView';
|
|
|
3
3
|
export declare function filterUndef<T>(ts: (T | undefined)[]): T[];
|
|
4
4
|
export declare class BigBed extends BBI {
|
|
5
5
|
readIndicesCache: any;
|
|
6
|
-
constructor(opts?: any);
|
|
7
6
|
readIndices(opts?: AbortSignal | RequestOptions): any;
|
|
8
|
-
protected getView(
|
|
7
|
+
protected getView(_scale: number, opts: RequestOptions): Promise<BlockView>;
|
|
9
8
|
private _readIndices;
|
|
10
9
|
private searchExtraIndexBlocks;
|
|
11
10
|
searchExtraIndex(name: string, opts?: RequestOptions): Promise<Feature[]>;
|
package/esm/bigbed.js
CHANGED
|
@@ -1,24 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const rxjs_1 = require("rxjs");
|
|
9
|
-
const operators_1 = require("rxjs/operators");
|
|
10
|
-
const abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
|
|
11
|
-
const quick_lru_1 = __importDefault(require("quick-lru"));
|
|
12
|
-
const bbi_1 = require("./bbi");
|
|
13
|
-
function filterUndef(ts) {
|
|
1
|
+
import { Parser } from 'binary-parser';
|
|
2
|
+
import { Observable, merge } from 'rxjs';
|
|
3
|
+
import { map, reduce } from 'rxjs/operators';
|
|
4
|
+
import AbortablePromiseCache from 'abortable-promise-cache';
|
|
5
|
+
import QuickLRU from 'quick-lru';
|
|
6
|
+
import { BBI } from './bbi';
|
|
7
|
+
export function filterUndef(ts) {
|
|
14
8
|
return ts.filter((t) => !!t);
|
|
15
9
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
cache: new quick_lru_1.default({ maxSize: 1 }),
|
|
10
|
+
export class BigBed extends BBI {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.readIndicesCache = new AbortablePromiseCache({
|
|
14
|
+
cache: new QuickLRU({ maxSize: 1 }),
|
|
22
15
|
fill: async (args, signal) => {
|
|
23
16
|
return this._readIndices({ ...args, signal });
|
|
24
17
|
},
|
|
@@ -34,7 +27,7 @@ class BigBed extends bbi_1.BBI {
|
|
|
34
27
|
* @param abortSignal - an optional AbortSignal to kill operation
|
|
35
28
|
* @return promise for a BlockView
|
|
36
29
|
*/
|
|
37
|
-
async getView(
|
|
30
|
+
async getView(_scale, opts) {
|
|
38
31
|
return this.getUnzoomedView(opts);
|
|
39
32
|
}
|
|
40
33
|
/*
|
|
@@ -44,14 +37,14 @@ class BigBed extends bbi_1.BBI {
|
|
|
44
37
|
*/
|
|
45
38
|
async _readIndices(opts) {
|
|
46
39
|
const { extHeaderOffset, isBigEndian } = await this.getHeader(opts);
|
|
47
|
-
const { buffer: data } = await this.bbi.read(Buffer.alloc(64), 0, 64, extHeaderOffset);
|
|
40
|
+
const { buffer: data } = await this.bbi.read(Buffer.alloc(64), 0, 64, Number(extHeaderOffset));
|
|
48
41
|
const le = isBigEndian ? 'big' : 'little';
|
|
49
|
-
const ret = new
|
|
42
|
+
const ret = new Parser()
|
|
50
43
|
.endianess(le)
|
|
51
44
|
.uint16('size')
|
|
52
45
|
.uint16('count')
|
|
53
46
|
.uint64('offset')
|
|
54
|
-
.parse(data)
|
|
47
|
+
.parse(data);
|
|
55
48
|
const { count, offset } = ret;
|
|
56
49
|
// no extra index is defined if count==0
|
|
57
50
|
if (count === 0) {
|
|
@@ -59,8 +52,8 @@ class BigBed extends bbi_1.BBI {
|
|
|
59
52
|
}
|
|
60
53
|
const blocklen = 20;
|
|
61
54
|
const len = blocklen * count;
|
|
62
|
-
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, offset);
|
|
63
|
-
const extParser = new
|
|
55
|
+
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, Number(offset));
|
|
56
|
+
const extParser = new Parser()
|
|
64
57
|
.endianess(le)
|
|
65
58
|
.int16('type')
|
|
66
59
|
.int16('fieldcount')
|
|
@@ -69,7 +62,7 @@ class BigBed extends bbi_1.BBI {
|
|
|
69
62
|
.int16('field');
|
|
70
63
|
const indices = [];
|
|
71
64
|
for (let i = 0; i < count; i += 1) {
|
|
72
|
-
indices.push(extParser.parse(buffer.subarray(i * blocklen))
|
|
65
|
+
indices.push(extParser.parse(buffer.subarray(i * blocklen)));
|
|
73
66
|
}
|
|
74
67
|
return indices;
|
|
75
68
|
}
|
|
@@ -89,32 +82,36 @@ class BigBed extends bbi_1.BBI {
|
|
|
89
82
|
}
|
|
90
83
|
const locs = indices.map(async (index) => {
|
|
91
84
|
const { offset, field } = index;
|
|
92
|
-
const { buffer: data } = await this.bbi.read(Buffer.alloc(32), 0, 32, offset, opts);
|
|
93
|
-
const
|
|
94
|
-
|
|
85
|
+
const { buffer: data } = await this.bbi.read(Buffer.alloc(32), 0, 32, Number(offset), opts);
|
|
86
|
+
const le = isBigEndian ? 'big' : 'little';
|
|
87
|
+
const p = new Parser()
|
|
88
|
+
.endianess(le)
|
|
95
89
|
.int32('magic')
|
|
96
90
|
.int32('blockSize')
|
|
97
91
|
.int32('keySize')
|
|
98
92
|
.int32('valSize')
|
|
99
93
|
.uint64('itemCount');
|
|
100
|
-
const { blockSize, keySize, valSize } = p.parse(data)
|
|
101
|
-
|
|
102
|
-
|
|
94
|
+
const { blockSize, keySize, valSize } = p.parse(data);
|
|
95
|
+
// console.log({blockSize,keySize,valSize})
|
|
96
|
+
const bpt = new Parser()
|
|
97
|
+
.endianess(le)
|
|
103
98
|
.int8('nodeType')
|
|
104
99
|
.skip(1)
|
|
105
100
|
.int16('cnt')
|
|
106
101
|
.choice({
|
|
107
102
|
tag: 'nodeType',
|
|
108
103
|
choices: {
|
|
109
|
-
0: new
|
|
104
|
+
0: new Parser().array('leafkeys', {
|
|
110
105
|
length: 'cnt',
|
|
111
|
-
type: new
|
|
106
|
+
type: new Parser()
|
|
107
|
+
.endianess(le)
|
|
112
108
|
.string('key', { length: keySize, stripNull: true })
|
|
113
109
|
.uint64('offset'),
|
|
114
110
|
}),
|
|
115
|
-
1: new
|
|
111
|
+
1: new Parser().array('keys', {
|
|
116
112
|
length: 'cnt',
|
|
117
|
-
type: new
|
|
113
|
+
type: new Parser()
|
|
114
|
+
.endianess(le)
|
|
118
115
|
.string('key', { length: keySize, stripNull: true })
|
|
119
116
|
.uint64('offset')
|
|
120
117
|
.uint32('length')
|
|
@@ -123,9 +120,10 @@ class BigBed extends bbi_1.BBI {
|
|
|
123
120
|
},
|
|
124
121
|
});
|
|
125
122
|
const bptReadNode = async (nodeOffset) => {
|
|
123
|
+
const val = Number(nodeOffset);
|
|
126
124
|
const len = 4 + blockSize * (keySize + valSize);
|
|
127
|
-
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len,
|
|
128
|
-
const node = bpt.parse(buffer)
|
|
125
|
+
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, val, opts);
|
|
126
|
+
const node = bpt.parse(buffer);
|
|
129
127
|
if (node.leafkeys) {
|
|
130
128
|
let lastOffset;
|
|
131
129
|
for (let i = 0; i < node.leafkeys.length; i += 1) {
|
|
@@ -145,7 +143,7 @@ class BigBed extends bbi_1.BBI {
|
|
|
145
143
|
return undefined;
|
|
146
144
|
};
|
|
147
145
|
const rootNodeOffset = 32;
|
|
148
|
-
return bptReadNode(offset + rootNodeOffset);
|
|
146
|
+
return bptReadNode(Number(offset) + rootNodeOffset);
|
|
149
147
|
});
|
|
150
148
|
return filterUndef(await Promise.all(locs));
|
|
151
149
|
}
|
|
@@ -164,19 +162,17 @@ class BigBed extends bbi_1.BBI {
|
|
|
164
162
|
}
|
|
165
163
|
const view = await this.getUnzoomedView(opts);
|
|
166
164
|
const res = blocks.map(block => {
|
|
167
|
-
return new
|
|
165
|
+
return new Observable(observer => {
|
|
168
166
|
view.readFeatures(observer, [block], opts);
|
|
169
|
-
}).pipe(
|
|
167
|
+
}).pipe(reduce((acc, curr) => acc.concat(curr)), map(x => {
|
|
170
168
|
for (let i = 0; i < x.length; i += 1) {
|
|
171
169
|
x[i].field = block.field;
|
|
172
170
|
}
|
|
173
171
|
return x;
|
|
174
172
|
}));
|
|
175
173
|
});
|
|
176
|
-
const ret = await
|
|
177
|
-
return ret.filter((f)
|
|
178
|
-
return f.rest.split('\t')[f.field - 3] === name;
|
|
179
|
-
});
|
|
174
|
+
const ret = await merge(...res).toPromise();
|
|
175
|
+
return ret.filter(f => { var _a; return ((_a = f.rest) === null || _a === void 0 ? void 0 : _a.split('\t')[(f.field || 0) - 3]) === name; });
|
|
180
176
|
}
|
|
181
177
|
}
|
|
182
|
-
|
|
178
|
+
//# sourceMappingURL=bigbed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"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"}
|
package/esm/bigwig.d.ts
CHANGED
|
@@ -4,9 +4,7 @@ export declare class BigWig extends BBI {
|
|
|
4
4
|
/**
|
|
5
5
|
* Retrieves a BlockView of a specific zoomLevel
|
|
6
6
|
*
|
|
7
|
-
* @param
|
|
8
|
-
* @param start - The start of a region
|
|
9
|
-
* @param end - The end of a region
|
|
7
|
+
* @param scale - number
|
|
10
8
|
* @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use
|
|
11
9
|
*/
|
|
12
10
|
protected getView(scale: number, opts: RequestOptions): Promise<BlockView>;
|
package/esm/bigwig.js
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const blockView_1 = require("./blockView");
|
|
5
|
-
const bbi_1 = require("./bbi");
|
|
6
|
-
class BigWig extends bbi_1.BBI {
|
|
1
|
+
import { BlockView } from './blockView';
|
|
2
|
+
import { BBI } from './bbi';
|
|
3
|
+
export class BigWig extends BBI {
|
|
7
4
|
/**
|
|
8
5
|
* Retrieves a BlockView of a specific zoomLevel
|
|
9
6
|
*
|
|
10
|
-
* @param
|
|
11
|
-
* @param start - The start of a region
|
|
12
|
-
* @param end - The end of a region
|
|
7
|
+
* @param scale - number
|
|
13
8
|
* @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use
|
|
14
9
|
*/
|
|
15
10
|
async getView(scale, opts) {
|
|
@@ -23,13 +18,11 @@ class BigWig extends bbi_1.BBI {
|
|
|
23
18
|
for (let i = maxLevel; i >= 0; i -= 1) {
|
|
24
19
|
const zh = zoomLevels[i];
|
|
25
20
|
if (zh && zh.reductionLevel <= 2 * basesPerPx) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
: fileSize - 4 - zh.indexOffset;
|
|
29
|
-
return new blockView_1.BlockView(this.bbi, refsByName, zh.indexOffset, indexLength, isBigEndian, uncompressBufSize > 0, 'summary');
|
|
21
|
+
const indexOffset = Number(zh.indexOffset);
|
|
22
|
+
return new BlockView(this.bbi, refsByName, indexOffset, isBigEndian, uncompressBufSize > 0, 'summary');
|
|
30
23
|
}
|
|
31
24
|
}
|
|
32
25
|
return this.getUnzoomedView(opts);
|
|
33
26
|
}
|
|
34
27
|
}
|
|
35
|
-
|
|
28
|
+
//# sourceMappingURL=bigwig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,GAAG,EAAkB,MAAM,OAAO,CAAA;AAE3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;OAKG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,GACxE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAA;QAC5B,IAAI,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,IAAI,CAAC,QAAQ,EAAE;YACb,4EAA4E;YAC5E,QAAQ,IAAI,CAAC,CAAA;SACd;QAED,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACrC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,IAAI,CAAC,GAAG,UAAU,EAAE;gBAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;gBAE1C,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,GAAG,CAAC,EACrB,SAAS,CACV,CAAA;aACF;SACF;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;CACF"}
|
package/esm/blockView.d.ts
CHANGED
|
@@ -18,25 +18,24 @@ interface Options {
|
|
|
18
18
|
* @constructs
|
|
19
19
|
*/
|
|
20
20
|
export declare class BlockView {
|
|
21
|
-
private cirTreeOffset;
|
|
22
|
-
private cirTreeLength;
|
|
23
21
|
private bbi;
|
|
24
|
-
private isCompressed;
|
|
25
|
-
private isBigEndian;
|
|
26
22
|
private refsByName;
|
|
23
|
+
private cirTreeOffset;
|
|
24
|
+
private isBigEndian;
|
|
25
|
+
private isCompressed;
|
|
27
26
|
private blockType;
|
|
28
27
|
private cirTreePromise?;
|
|
29
28
|
private featureCache;
|
|
30
29
|
private leafParser;
|
|
31
|
-
private bigWigParser;
|
|
32
30
|
private bigBedParser;
|
|
33
|
-
|
|
34
|
-
constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number, cirTreeLength: number, isBigEndian: boolean, isCompressed: boolean, blockType: string);
|
|
31
|
+
constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number, isBigEndian: boolean, isCompressed: boolean, blockType: string);
|
|
35
32
|
readWigData(chrName: string, start: number, end: number, observer: Observer<Feature[]>, opts: Options): Promise<void>;
|
|
36
33
|
private parseSummaryBlock;
|
|
37
34
|
private parseBigBedBlock;
|
|
38
35
|
private parseBigWigBlock;
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
readFeatures(observer: Observer<Feature[]>, blocks: {
|
|
37
|
+
offset: bigint;
|
|
38
|
+
length: bigint;
|
|
39
|
+
}[], opts?: Options): Promise<void>;
|
|
41
40
|
}
|
|
42
41
|
export {};
|