@gmod/bbi 4.0.6 → 5.0.1
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 +10 -1
- package/dist/bbi.d.ts +20 -4
- package/dist/bbi.js +123 -106
- package/dist/bbi.js.map +1 -1
- package/dist/bigbed.js +88 -69
- package/dist/bigbed.js.map +1 -1
- package/dist/bigint-polyfill/polyfill.js +0 -10
- package/dist/bigint-polyfill/polyfill.js.map +1 -1
- package/dist/bigint-polyfill/pure.d.ts +0 -2
- package/dist/bigint-polyfill/pure.js +0 -26
- package/dist/bigint-polyfill/pure.js.map +1 -1
- package/dist/bigwig.js +3 -8
- package/dist/bigwig.js.map +1 -1
- package/dist/block-view.d.ts +4 -6
- package/dist/block-view.js +122 -131
- package/dist/block-view.js.map +1 -1
- package/dist/range.js +1 -1
- package/dist/range.js.map +1 -1
- package/dist/util.d.ts +12 -14
- package/dist/util.js +8 -14
- package/dist/util.js.map +1 -1
- package/esm/bbi.d.ts +20 -4
- package/esm/bbi.js +123 -106
- package/esm/bbi.js.map +1 -1
- package/esm/bigbed.js +88 -69
- package/esm/bigbed.js.map +1 -1
- package/esm/bigint-polyfill/polyfill.js +1 -11
- package/esm/bigint-polyfill/polyfill.js.map +1 -1
- package/esm/bigint-polyfill/pure.d.ts +0 -2
- package/esm/bigint-polyfill/pure.js +0 -24
- package/esm/bigint-polyfill/pure.js.map +1 -1
- package/esm/bigwig.js +3 -8
- package/esm/bigwig.js.map +1 -1
- package/esm/block-view.d.ts +4 -6
- package/esm/block-view.js +122 -131
- package/esm/block-view.js.map +1 -1
- package/esm/range.js +1 -1
- package/esm/range.js.map +1 -1
- package/esm/util.d.ts +12 -14
- package/esm/util.js +8 -14
- package/esm/util.js.map +1 -1
- package/package.json +4 -5
- package/src/bbi.ts +149 -116
- package/src/bigbed.ts +99 -80
- package/src/bigint-polyfill/polyfill.ts +1 -13
- package/src/bigint-polyfill/pure.ts +0 -36
- package/src/bigwig.ts +3 -9
- package/src/block-view.ts +133 -168
- package/src/range.ts +1 -1
- package/src/util.ts +16 -21
package/esm/bigbed.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Buffer } from 'buffer';
|
|
2
|
-
import { Parser } from 'binary-parser';
|
|
3
2
|
import { Observable, merge, firstValueFrom } from 'rxjs';
|
|
4
3
|
import { map, reduce } from 'rxjs/operators';
|
|
5
4
|
import AbortablePromiseCache from '@gmod/abortable-promise-cache';
|
|
6
5
|
import QuickLRU from 'quick-lru';
|
|
6
|
+
// locals
|
|
7
7
|
import { BBI } from './bbi';
|
|
8
8
|
export function filterUndef(ts) {
|
|
9
9
|
return ts.filter((t) => !!t);
|
|
@@ -28,43 +28,50 @@ export class BigBed extends BBI {
|
|
|
28
28
|
}
|
|
29
29
|
/*
|
|
30
30
|
* parse the bigbed extraIndex fields
|
|
31
|
-
*
|
|
32
|
-
*
|
|
31
|
+
*
|
|
32
|
+
*
|
|
33
|
+
* @return a Promise for an array of Index data structure since there can be
|
|
34
|
+
* multiple extraIndexes in a bigbed, see bedToBigBed documentation
|
|
33
35
|
*/
|
|
34
36
|
async _readIndices(opts) {
|
|
35
37
|
const { extHeaderOffset, isBigEndian } = await this.getHeader(opts);
|
|
36
38
|
const { buffer: data } = await this.bbi.read(Buffer.alloc(64), 0, 64, Number(extHeaderOffset));
|
|
37
|
-
const le = isBigEndian
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
const le = !isBigEndian;
|
|
40
|
+
const b = data;
|
|
41
|
+
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
42
|
+
let offset = 0;
|
|
43
|
+
// const _size = dataView.getUint16(offset, le)
|
|
44
|
+
offset += 2;
|
|
45
|
+
const count = dataView.getUint16(offset, le);
|
|
46
|
+
offset += 2;
|
|
47
|
+
const dataOffset = Number(dataView.getBigUint64(offset, le));
|
|
48
|
+
offset += 8;
|
|
45
49
|
// no extra index is defined if count==0
|
|
46
50
|
if (count === 0) {
|
|
47
51
|
return [];
|
|
48
52
|
}
|
|
49
53
|
const blocklen = 20;
|
|
50
54
|
const len = blocklen * count;
|
|
51
|
-
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, Number(
|
|
52
|
-
const extParser = new Parser()
|
|
53
|
-
.endianess(le)
|
|
54
|
-
.int16('type')
|
|
55
|
-
.int16('fieldcount')
|
|
56
|
-
.uint64('offset')
|
|
57
|
-
.skip(4)
|
|
58
|
-
.int16('field');
|
|
55
|
+
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, Number(dataOffset));
|
|
59
56
|
const indices = [];
|
|
60
57
|
for (let i = 0; i < count; i += 1) {
|
|
61
|
-
|
|
58
|
+
const b = buffer.subarray(i * blocklen);
|
|
59
|
+
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
60
|
+
let offset = 0;
|
|
61
|
+
const type = dataView.getInt16(offset, le);
|
|
62
|
+
offset += 2;
|
|
63
|
+
const fieldcount = dataView.getInt16(offset, le);
|
|
64
|
+
offset += 2;
|
|
65
|
+
const dataOffset = Number(dataView.getBigUint64(offset, le));
|
|
66
|
+
offset += 8 + 4; //4 skip
|
|
67
|
+
const field = dataView.getInt16(offset, le);
|
|
68
|
+
indices.push({ type, fieldcount, offset: Number(dataOffset), field });
|
|
62
69
|
}
|
|
63
70
|
return indices;
|
|
64
71
|
}
|
|
65
72
|
/*
|
|
66
|
-
* perform a search in the bigbed extraIndex to find which blocks in the
|
|
67
|
-
* actual feature data
|
|
73
|
+
* perform a search in the bigbed extraIndex to find which blocks in the
|
|
74
|
+
* bigbed data to look for the actual feature data
|
|
68
75
|
*
|
|
69
76
|
* @param name - the name to search for
|
|
70
77
|
* @param opts - a SearchOptions argument with optional signal
|
|
@@ -77,52 +84,48 @@ export class BigBed extends BBI {
|
|
|
77
84
|
return [];
|
|
78
85
|
}
|
|
79
86
|
const locs = indices.map(async (index) => {
|
|
80
|
-
const { offset, field } = index;
|
|
81
|
-
const { buffer: data } = await this.bbi.read(Buffer.alloc(32), 0, 32,
|
|
82
|
-
const le = isBigEndian
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
.int16('cnt')
|
|
97
|
-
.choice({
|
|
98
|
-
tag: 'nodeType',
|
|
99
|
-
choices: {
|
|
100
|
-
0: new Parser().array('leafkeys', {
|
|
101
|
-
length: 'cnt',
|
|
102
|
-
type: new Parser()
|
|
103
|
-
.endianess(le)
|
|
104
|
-
.string('key', { length: keySize, stripNull: true })
|
|
105
|
-
.uint64('offset'),
|
|
106
|
-
}),
|
|
107
|
-
1: new Parser().array('keys', {
|
|
108
|
-
length: 'cnt',
|
|
109
|
-
type: new Parser()
|
|
110
|
-
.endianess(le)
|
|
111
|
-
.string('key', { length: keySize, stripNull: true })
|
|
112
|
-
.uint64('offset')
|
|
113
|
-
.uint32('length')
|
|
114
|
-
.uint32('reserved'),
|
|
115
|
-
}),
|
|
116
|
-
},
|
|
117
|
-
});
|
|
87
|
+
const { offset: offset2, field } = index;
|
|
88
|
+
const { buffer: data } = await this.bbi.read(Buffer.alloc(32), 0, 32, offset2, opts);
|
|
89
|
+
const le = !isBigEndian;
|
|
90
|
+
const b = data;
|
|
91
|
+
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
92
|
+
let offset = 0;
|
|
93
|
+
// const _magic = dataView.getInt32(offset, le)
|
|
94
|
+
offset += 4;
|
|
95
|
+
const blockSize = dataView.getInt32(offset, le);
|
|
96
|
+
offset += 4;
|
|
97
|
+
const keySize = dataView.getInt32(offset, le);
|
|
98
|
+
offset += 4;
|
|
99
|
+
const valSize = dataView.getInt32(offset, le);
|
|
100
|
+
offset += 4;
|
|
101
|
+
// const _itemCount = Number(dataView.getBigUint64(offset, le))
|
|
102
|
+
offset += 8;
|
|
118
103
|
const bptReadNode = async (nodeOffset) => {
|
|
119
104
|
const val = Number(nodeOffset);
|
|
120
105
|
const len = 4 + blockSize * (keySize + valSize);
|
|
121
106
|
const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, val, opts);
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
107
|
+
const b = buffer;
|
|
108
|
+
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
109
|
+
let offset = 0;
|
|
110
|
+
const nodeType = dataView.getInt8(offset);
|
|
111
|
+
offset += 2; //skip 1
|
|
112
|
+
const cnt = dataView.getInt16(offset, le);
|
|
113
|
+
offset += 2;
|
|
114
|
+
const keys = [];
|
|
115
|
+
if (nodeType === 0) {
|
|
116
|
+
const leafkeys = [];
|
|
117
|
+
for (let i = 0; i < cnt; i++) {
|
|
118
|
+
const key = b
|
|
119
|
+
.subarray(offset, offset + keySize)
|
|
120
|
+
.toString()
|
|
121
|
+
.replaceAll('\0', '');
|
|
122
|
+
offset += keySize;
|
|
123
|
+
const dataOffset = Number(dataView.getBigUint64(offset, le));
|
|
124
|
+
offset += 8;
|
|
125
|
+
leafkeys.push({ key, offset: dataOffset });
|
|
126
|
+
}
|
|
127
|
+
let lastOffset = 0;
|
|
128
|
+
for (const { key, offset } of leafkeys) {
|
|
126
129
|
if (name.localeCompare(key) < 0 && lastOffset) {
|
|
127
130
|
return bptReadNode(lastOffset);
|
|
128
131
|
}
|
|
@@ -130,15 +133,31 @@ export class BigBed extends BBI {
|
|
|
130
133
|
}
|
|
131
134
|
return bptReadNode(lastOffset);
|
|
132
135
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
+
else if (nodeType === 1) {
|
|
137
|
+
for (let i = 0; i < cnt; i++) {
|
|
138
|
+
const key = b
|
|
139
|
+
.subarray(offset, offset + keySize)
|
|
140
|
+
.toString()
|
|
141
|
+
.replaceAll('\0', '');
|
|
142
|
+
offset += keySize;
|
|
143
|
+
const dataOffset = Number(dataView.getBigUint64(offset, le));
|
|
144
|
+
offset += 8;
|
|
145
|
+
const length = dataView.getUint32(offset, le);
|
|
146
|
+
offset += 4;
|
|
147
|
+
const reserved = dataView.getUint32(offset, le);
|
|
148
|
+
offset += 4;
|
|
149
|
+
keys.push({ key, offset: dataOffset, length, reserved });
|
|
150
|
+
}
|
|
151
|
+
for (const n of keys) {
|
|
152
|
+
if (n.key === name) {
|
|
153
|
+
return { ...n, field };
|
|
154
|
+
}
|
|
136
155
|
}
|
|
156
|
+
return undefined;
|
|
137
157
|
}
|
|
138
|
-
return undefined;
|
|
139
158
|
};
|
|
140
159
|
const rootNodeOffset = 32;
|
|
141
|
-
return bptReadNode(
|
|
160
|
+
return bptReadNode(offset2 + rootNodeOffset);
|
|
142
161
|
});
|
|
143
162
|
return filterUndef(await Promise.all(locs));
|
|
144
163
|
}
|
package/esm/bigbed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getBigInt64, getBigUint64
|
|
1
|
+
import { getBigInt64, getBigUint64 } from './pure';
|
|
2
2
|
if (!('getBigInt64' in DataView)) {
|
|
3
3
|
DataView.prototype.getBigInt64 = function (byteOffset, littleEndian) {
|
|
4
4
|
return getBigInt64(this, byteOffset, littleEndian);
|
|
@@ -9,14 +9,4 @@ if (!('getBigUint64' in DataView)) {
|
|
|
9
9
|
return getBigUint64(this, byteOffset, littleEndian);
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
|
-
if (!('setBigInt64' in DataView)) {
|
|
13
|
-
DataView.prototype.setBigInt64 = function (byteOffset, value, littleEndian) {
|
|
14
|
-
setBigInt64(this, byteOffset, value, littleEndian);
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
if (!('setBigUint64' in DataView)) {
|
|
18
|
-
DataView.prototype.setBigUint64 = function (byteOffset, value, littleEndian) {
|
|
19
|
-
setBigUint64(this, byteOffset, value, littleEndian);
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
12
|
//# sourceMappingURL=polyfill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../../src/bigint-polyfill/polyfill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../../src/bigint-polyfill/polyfill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAElD,IAAI,CAAC,CAAC,aAAa,IAAI,QAAQ,CAAC,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,UAAU,UAAU,EAAE,YAAY;QACjE,OAAO,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IACpD,CAAC,CAAA;AACH,CAAC;AAED,IAAI,CAAC,CAAC,cAAc,IAAI,QAAQ,CAAC,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,UAAU,EAAE,YAAY;QAClE,OAAO,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;IACrD,CAAC,CAAA;AACH,CAAC"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
1
|
export declare function getBigInt64(dataView: DataView, byteOffset: number, littleEndian: boolean | undefined): bigint;
|
|
2
2
|
export declare function getBigUint64(dataView: DataView, byteOffset: number, littleEndian: boolean | undefined): bigint;
|
|
3
|
-
export declare function setBigInt64(dataView: DataView, byteOffset: number, value: bigint, littleEndian: boolean | undefined): void;
|
|
4
|
-
export declare function setBigUint64(dataView: DataView, byteOffset: number, value: bigint, littleEndian: boolean | undefined): void;
|
|
@@ -19,28 +19,4 @@ export function getBigUint64(dataView, byteOffset, littleEndian) {
|
|
|
19
19
|
return ((BigInt(a * bigEndianMask + b * littleEndianMask) << BigInt32) |
|
|
20
20
|
BigInt(a * littleEndianMask + b * bigEndianMask));
|
|
21
21
|
}
|
|
22
|
-
export function setBigInt64(dataView, byteOffset, value, littleEndian) {
|
|
23
|
-
const hi = Number(value >> BigInt32);
|
|
24
|
-
const lo = Number(value & BigInt(0xffffffff));
|
|
25
|
-
if (littleEndian) {
|
|
26
|
-
dataView.setInt32(byteOffset + 4, hi, littleEndian);
|
|
27
|
-
dataView.setUint32(byteOffset, lo, littleEndian);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
dataView.setInt32(byteOffset, hi, littleEndian);
|
|
31
|
-
dataView.setUint32(byteOffset + 4, lo, littleEndian);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export function setBigUint64(dataView, byteOffset, value, littleEndian) {
|
|
35
|
-
const hi = Number(value >> BigInt32);
|
|
36
|
-
const lo = Number(value & BigInt(0xffffffff));
|
|
37
|
-
if (littleEndian) {
|
|
38
|
-
dataView.setUint32(byteOffset + 4, hi, littleEndian);
|
|
39
|
-
dataView.setUint32(byteOffset, lo, littleEndian);
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
dataView.setUint32(byteOffset, hi, littleEndian);
|
|
43
|
-
dataView.setUint32(byteOffset + 4, lo, littleEndian);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
22
|
//# sourceMappingURL=pure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pure.js","sourceRoot":"","sources":["../../src/bigint-polyfill/pure.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;AAE3B,MAAM,UAAU,WAAW,CACzB,QAAkB,EAClB,UAAkB,EAClB,YAAiC;IAEjC,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,CAAA;IAE3C,OAAO,CACL,CAAC,MAAM,CACL,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,aAAa;QACzD,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,gBAAgB,CACrE;QACC,QAAQ,CAAC;QACX,MAAM,CACJ,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,gBAAgB;YAC7D,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,aAAa,CACnE,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,UAAkB,EAClB,YAAiC;IAEjC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,CAAA;IAE1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,CAAA;IAE3C,4EAA4E;IAC5E,gDAAgD;IAChD,kCAAkC;IAClC,OAAO,CACL,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,QAAQ,CAAC;QAC9D,MAAM,CAAC,CAAC,GAAG,gBAAgB,GAAG,CAAC,GAAG,aAAa,CAAC,CACjD,CAAA;AACH,CAAC
|
|
1
|
+
{"version":3,"file":"pure.js","sourceRoot":"","sources":["../../src/bigint-polyfill/pure.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;AAE3B,MAAM,UAAU,WAAW,CACzB,QAAkB,EAClB,UAAkB,EAClB,YAAiC;IAEjC,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,CAAA;IAE3C,OAAO,CACL,CAAC,MAAM,CACL,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,aAAa;QACzD,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,gBAAgB,CACrE;QACC,QAAQ,CAAC;QACX,MAAM,CACJ,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,gBAAgB;YAC7D,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,aAAa,CACnE,CACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAkB,EAClB,UAAkB,EAClB,YAAiC;IAEjC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACtD,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,CAAA;IAE1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,CAAA;IAE3C,4EAA4E;IAC5E,gDAAgD;IAChD,kCAAkC;IAClC,OAAO,CACL,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,QAAQ,CAAC;QAC9D,MAAM,CAAC,CAAC,GAAG,gBAAgB,GAAG,CAAC,GAAG,aAAa,CAAC,CACjD,CAAA;AACH,CAAC"}
|
package/esm/bigwig.js
CHANGED
|
@@ -10,18 +10,13 @@ export class BigWig extends BBI {
|
|
|
10
10
|
* or scale used to infer the zoomLevel to use
|
|
11
11
|
*/
|
|
12
12
|
async getView(scale, opts) {
|
|
13
|
-
const { zoomLevels, refsByName,
|
|
13
|
+
const { zoomLevels, refsByName, isBigEndian, uncompressBufSize } = await this.getHeader(opts);
|
|
14
14
|
const basesPerPx = 1 / scale;
|
|
15
|
-
|
|
16
|
-
if (!fileSize) {
|
|
17
|
-
// if we don't know the file size, we can't fetch the highest zoom level :-(
|
|
18
|
-
maxLevel -= 1;
|
|
19
|
-
}
|
|
15
|
+
const maxLevel = zoomLevels.length - 1;
|
|
20
16
|
for (let i = maxLevel; i >= 0; i -= 1) {
|
|
21
17
|
const zh = zoomLevels[i];
|
|
22
18
|
if (zh && zh.reductionLevel <= 2 * basesPerPx) {
|
|
23
|
-
|
|
24
|
-
return new BlockView(this.bbi, refsByName, indexOffset, isBigEndian, uncompressBufSize > 0, 'summary');
|
|
19
|
+
return new BlockView(this.bbi, refsByName, zh.indexOffset, isBigEndian, uncompressBufSize > 0, 'summary');
|
|
25
20
|
}
|
|
26
21
|
}
|
|
27
22
|
return this.getUnzoomedView(opts);
|
package/esm/bigwig.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,GAAG,EAAkB,MAAM,OAAO,CAAA;AAE3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;;;OAOG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,GAAG,EAAkB,MAAM,OAAO,CAAA;AAE3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;;;OAOG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAC9D,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAA;QAC5B,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;QAEtC,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC;gBAC9C,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,EACR,UAAU,EACV,EAAE,CAAC,WAAW,EACd,WAAW,EACX,iBAAiB,GAAG,CAAC,EACrB,SAAS,CACV,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;CACF"}
|
package/esm/block-view.d.ts
CHANGED
|
@@ -13,8 +13,8 @@ interface Options {
|
|
|
13
13
|
/**
|
|
14
14
|
* View into a subset of the data in a BigWig file.
|
|
15
15
|
*
|
|
16
|
-
* Adapted by Robert Buels and Colin Diesh from bigwig.js in the Dalliance
|
|
17
|
-
* Explorer by Thomas Down.
|
|
16
|
+
* Adapted by Robert Buels and Colin Diesh from bigwig.js in the Dalliance
|
|
17
|
+
* Genome Explorer by Thomas Down.
|
|
18
18
|
* @constructs
|
|
19
19
|
*/
|
|
20
20
|
export declare class BlockView {
|
|
@@ -26,16 +26,14 @@ export declare class BlockView {
|
|
|
26
26
|
private blockType;
|
|
27
27
|
private cirTreePromise?;
|
|
28
28
|
private featureCache;
|
|
29
|
-
private leafParser;
|
|
30
|
-
private bigBedParser;
|
|
31
29
|
constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number, isBigEndian: boolean, isCompressed: boolean, blockType: string);
|
|
32
30
|
readWigData(chrName: string, start: number, end: number, observer: Observer<Feature[]>, opts?: Options): Promise<void>;
|
|
33
31
|
private parseSummaryBlock;
|
|
34
32
|
private parseBigBedBlock;
|
|
35
33
|
private parseBigWigBlock;
|
|
36
34
|
readFeatures(observer: Observer<Feature[]>, blocks: {
|
|
37
|
-
offset:
|
|
38
|
-
length:
|
|
35
|
+
offset: number;
|
|
36
|
+
length: number;
|
|
39
37
|
}[], opts?: Options): Promise<void>;
|
|
40
38
|
}
|
|
41
39
|
export {};
|