@gmod/bbi 7.0.1 → 7.0.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/CHANGELOG.md +12 -0
- package/dist/bbi.js +27 -32
- package/dist/bbi.js.map +1 -1
- package/dist/bigbed.d.ts +1 -1
- package/dist/package.json +1 -0
- package/esm/bbi.js +27 -32
- package/esm/bbi.js.map +1 -1
- package/esm/bigbed.d.ts +1 -1
- package/package.json +2 -1
- package/src/bbi.ts +37 -35
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [7.0.3](https://github.com/GMOD/bbi-js/compare/v7.0.2...v7.0.3) (2025-05-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
## [7.0.2](https://github.com/GMOD/bbi-js/compare/v7.0.1...v7.0.2) (2025-05-13)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
## [7.0.2](https://github.com/GMOD/bbi-js/compare/v7.0.1...v7.0.2) (2025-05-13)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
1
13
|
## [7.0.1](https://github.com/GMOD/bbi-js/compare/v7.0.0...v7.0.1) (2025-04-30)
|
|
2
14
|
|
|
3
15
|
|
package/dist/bbi.js
CHANGED
|
@@ -7,6 +7,9 @@ const operators_1 = require("rxjs/operators");
|
|
|
7
7
|
const block_view_ts_1 = require("./block-view.js");
|
|
8
8
|
const BIG_WIG_MAGIC = -2003829722;
|
|
9
9
|
const BIG_BED_MAGIC = -2021002517;
|
|
10
|
+
function getDataView(buffer) {
|
|
11
|
+
return new DataView(buffer.buffer, buffer.byteOffset, buffer.length);
|
|
12
|
+
}
|
|
10
13
|
class BBI {
|
|
11
14
|
getHeader(opts) {
|
|
12
15
|
if (!this.headerP) {
|
|
@@ -53,7 +56,7 @@ class BBI {
|
|
|
53
56
|
}
|
|
54
57
|
async _getMainHeader(opts, requestSize = 2000) {
|
|
55
58
|
const b = await this.bbi.read(requestSize, 0, opts);
|
|
56
|
-
const dataView =
|
|
59
|
+
const dataView = getDataView(b);
|
|
57
60
|
const r1 = dataView.getInt32(0, true);
|
|
58
61
|
if (r1 !== BIG_WIG_MAGIC && r1 !== BIG_BED_MAGIC) {
|
|
59
62
|
throw new Error('not a BigWig/BigBed file');
|
|
@@ -110,7 +113,7 @@ class BBI {
|
|
|
110
113
|
if (totalSummaryOffset) {
|
|
111
114
|
const b2 = b.subarray(Number(totalSummaryOffset));
|
|
112
115
|
let offset = 0;
|
|
113
|
-
const dataView =
|
|
116
|
+
const dataView = getDataView(b2);
|
|
114
117
|
const basesCovered = Number(dataView.getBigUint64(offset, true));
|
|
115
118
|
offset += 8;
|
|
116
119
|
const scoreMin = dataView.getFloat64(offset, true);
|
|
@@ -157,45 +160,35 @@ class BBI {
|
|
|
157
160
|
async _readChromTree(header, opts) {
|
|
158
161
|
const refsByNumber = [];
|
|
159
162
|
const refsByName = {};
|
|
160
|
-
|
|
161
|
-
const
|
|
162
|
-
while (unzoomedDataOffset % 4 !== 0) {
|
|
163
|
-
unzoomedDataOffset += 1;
|
|
164
|
-
}
|
|
165
|
-
const off = unzoomedDataOffset - chromTreeOffset;
|
|
166
|
-
const b = await this.bbi.read(off, Number(chromTreeOffset), opts);
|
|
167
|
-
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
163
|
+
const chromTreeOffset = Number(header.chromTreeOffset);
|
|
164
|
+
const dataView = getDataView(await this.bbi.read(32, chromTreeOffset, opts));
|
|
168
165
|
let offset = 0;
|
|
169
|
-
// unused
|
|
170
|
-
// const magic = dataView.getUint32(offset, true)
|
|
166
|
+
// const magic = dataView.getUint32(offset, true) // unused
|
|
171
167
|
offset += 4;
|
|
172
|
-
// unused
|
|
173
|
-
// const blockSize = dataView.getUint32(offset, true)
|
|
168
|
+
// const blockSize = dataView.getUint32(offset, true) // unused
|
|
174
169
|
offset += 4;
|
|
175
170
|
const keySize = dataView.getUint32(offset, true);
|
|
176
171
|
offset += 4;
|
|
177
|
-
|
|
178
|
-
// const valSize = dataView.getUint32(offset, true)
|
|
172
|
+
const valSize = dataView.getUint32(offset, true);
|
|
179
173
|
offset += 4;
|
|
180
|
-
// unused
|
|
181
|
-
// const itemCount = dataView.getBigUint64(offset, true)
|
|
174
|
+
// const itemCount = dataView.getBigUint64(offset, true) // unused
|
|
182
175
|
offset += 8;
|
|
183
|
-
const rootNodeOffset = 32;
|
|
184
176
|
const decoder = new TextDecoder('utf8');
|
|
185
177
|
const bptReadNode = async (currentOffset) => {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
178
|
+
const b = await this.bbi.read(4, currentOffset);
|
|
179
|
+
const dataView = getDataView(b);
|
|
180
|
+
let offset = 0;
|
|
190
181
|
const isLeafNode = dataView.getUint8(offset);
|
|
191
|
-
offset +=
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
const cnt = dataView.getUint16(offset, true);
|
|
182
|
+
offset += 1;
|
|
183
|
+
// const reserved = dataView.getUint8(offset) // unused
|
|
184
|
+
offset += 1;
|
|
185
|
+
const count = dataView.getUint16(offset, true);
|
|
196
186
|
offset += 2;
|
|
197
187
|
if (isLeafNode) {
|
|
198
|
-
|
|
188
|
+
const b = await this.bbi.read(count * (keySize + valSize), currentOffset + offset);
|
|
189
|
+
const dataView = getDataView(b);
|
|
190
|
+
offset = 0;
|
|
191
|
+
for (let n = 0; n < count; n++) {
|
|
199
192
|
const key = decoder
|
|
200
193
|
.decode(b.subarray(offset, offset + keySize))
|
|
201
194
|
.replaceAll('\0', '');
|
|
@@ -214,16 +207,18 @@ class BBI {
|
|
|
214
207
|
}
|
|
215
208
|
else {
|
|
216
209
|
const nextNodes = [];
|
|
217
|
-
|
|
210
|
+
const dataView = getDataView(await this.bbi.read(count * (keySize + 8), currentOffset + offset));
|
|
211
|
+
offset = 0;
|
|
212
|
+
for (let n = 0; n < count; n++) {
|
|
218
213
|
offset += keySize;
|
|
219
214
|
const childOffset = Number(dataView.getBigUint64(offset, true));
|
|
220
215
|
offset += 8;
|
|
221
|
-
nextNodes.push(bptReadNode(
|
|
216
|
+
nextNodes.push(bptReadNode(childOffset));
|
|
222
217
|
}
|
|
223
218
|
await Promise.all(nextNodes);
|
|
224
219
|
}
|
|
225
220
|
};
|
|
226
|
-
await bptReadNode(
|
|
221
|
+
await bptReadNode(chromTreeOffset + 32);
|
|
227
222
|
return {
|
|
228
223
|
refsByName,
|
|
229
224
|
refsByNumber,
|
package/dist/bbi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":";;;AAAA,6DAA2D;AAC3D,+BAAiD;AACjD,8CAAwC;AAExC,mDAA2C;AAc3C,MAAM,aAAa,GAAG,CAAC,UAAU,CAAA;AACjC,MAAM,aAAa,GAAG,CAAC,UAAU,CAAA;AAEjC,MAAsB,GAAG;IAOhB,SAAS,CAAC,IAAqB;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACxD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;gBACxB,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;;;;;;;;OASG;IACH,YAAmB,IAKlB;QACC,MAAM,EAAE,UAAU,EAAE,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;QAC9D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,GAAG,UAAU,CAAA;QACvB,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,GAAG,IAAI,gCAAU,CAAC,GAAG,CAAC,CAAA;QAChC,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,GAAG,IAAI,+BAAS,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,IAAqB;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACtD,OAAO;YACL,GAAG,MAAM;YACT,GAAG,MAAM;SACV,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,IAAqB,EACrB,WAAW,GAAG,IAAI;QAElB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"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"}
|
package/dist/bigbed.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ interface Index {
|
|
|
9
9
|
}
|
|
10
10
|
export declare function filterUndef<T>(ts: (T | undefined)[]): T[];
|
|
11
11
|
export declare class BigBed extends BBI {
|
|
12
|
-
readIndicesCache: AbortablePromiseCache<RequestOptions, Index[]>;
|
|
12
|
+
readIndicesCache: AbortablePromiseCache<RequestOptions, Index[], string>;
|
|
13
13
|
readIndices(opts?: RequestOptions): Promise<Index[]>;
|
|
14
14
|
protected getView(_scale: number, opts?: RequestOptions): Promise<import("./block-view.ts").BlockView>;
|
|
15
15
|
private _readIndices;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type": "commonjs"}
|
package/esm/bbi.js
CHANGED
|
@@ -4,6 +4,9 @@ import { toArray } from 'rxjs/operators';
|
|
|
4
4
|
import { BlockView } from "./block-view.js";
|
|
5
5
|
const BIG_WIG_MAGIC = -2003829722;
|
|
6
6
|
const BIG_BED_MAGIC = -2021002517;
|
|
7
|
+
function getDataView(buffer) {
|
|
8
|
+
return new DataView(buffer.buffer, buffer.byteOffset, buffer.length);
|
|
9
|
+
}
|
|
7
10
|
export class BBI {
|
|
8
11
|
getHeader(opts) {
|
|
9
12
|
if (!this.headerP) {
|
|
@@ -50,7 +53,7 @@ export class BBI {
|
|
|
50
53
|
}
|
|
51
54
|
async _getMainHeader(opts, requestSize = 2000) {
|
|
52
55
|
const b = await this.bbi.read(requestSize, 0, opts);
|
|
53
|
-
const dataView =
|
|
56
|
+
const dataView = getDataView(b);
|
|
54
57
|
const r1 = dataView.getInt32(0, true);
|
|
55
58
|
if (r1 !== BIG_WIG_MAGIC && r1 !== BIG_BED_MAGIC) {
|
|
56
59
|
throw new Error('not a BigWig/BigBed file');
|
|
@@ -107,7 +110,7 @@ export class BBI {
|
|
|
107
110
|
if (totalSummaryOffset) {
|
|
108
111
|
const b2 = b.subarray(Number(totalSummaryOffset));
|
|
109
112
|
let offset = 0;
|
|
110
|
-
const dataView =
|
|
113
|
+
const dataView = getDataView(b2);
|
|
111
114
|
const basesCovered = Number(dataView.getBigUint64(offset, true));
|
|
112
115
|
offset += 8;
|
|
113
116
|
const scoreMin = dataView.getFloat64(offset, true);
|
|
@@ -154,45 +157,35 @@ export class BBI {
|
|
|
154
157
|
async _readChromTree(header, opts) {
|
|
155
158
|
const refsByNumber = [];
|
|
156
159
|
const refsByName = {};
|
|
157
|
-
|
|
158
|
-
const
|
|
159
|
-
while (unzoomedDataOffset % 4 !== 0) {
|
|
160
|
-
unzoomedDataOffset += 1;
|
|
161
|
-
}
|
|
162
|
-
const off = unzoomedDataOffset - chromTreeOffset;
|
|
163
|
-
const b = await this.bbi.read(off, Number(chromTreeOffset), opts);
|
|
164
|
-
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
160
|
+
const chromTreeOffset = Number(header.chromTreeOffset);
|
|
161
|
+
const dataView = getDataView(await this.bbi.read(32, chromTreeOffset, opts));
|
|
165
162
|
let offset = 0;
|
|
166
|
-
// unused
|
|
167
|
-
// const magic = dataView.getUint32(offset, true)
|
|
163
|
+
// const magic = dataView.getUint32(offset, true) // unused
|
|
168
164
|
offset += 4;
|
|
169
|
-
// unused
|
|
170
|
-
// const blockSize = dataView.getUint32(offset, true)
|
|
165
|
+
// const blockSize = dataView.getUint32(offset, true) // unused
|
|
171
166
|
offset += 4;
|
|
172
167
|
const keySize = dataView.getUint32(offset, true);
|
|
173
168
|
offset += 4;
|
|
174
|
-
|
|
175
|
-
// const valSize = dataView.getUint32(offset, true)
|
|
169
|
+
const valSize = dataView.getUint32(offset, true);
|
|
176
170
|
offset += 4;
|
|
177
|
-
// unused
|
|
178
|
-
// const itemCount = dataView.getBigUint64(offset, true)
|
|
171
|
+
// const itemCount = dataView.getBigUint64(offset, true) // unused
|
|
179
172
|
offset += 8;
|
|
180
|
-
const rootNodeOffset = 32;
|
|
181
173
|
const decoder = new TextDecoder('utf8');
|
|
182
174
|
const bptReadNode = async (currentOffset) => {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
175
|
+
const b = await this.bbi.read(4, currentOffset);
|
|
176
|
+
const dataView = getDataView(b);
|
|
177
|
+
let offset = 0;
|
|
187
178
|
const isLeafNode = dataView.getUint8(offset);
|
|
188
|
-
offset +=
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
const cnt = dataView.getUint16(offset, true);
|
|
179
|
+
offset += 1;
|
|
180
|
+
// const reserved = dataView.getUint8(offset) // unused
|
|
181
|
+
offset += 1;
|
|
182
|
+
const count = dataView.getUint16(offset, true);
|
|
193
183
|
offset += 2;
|
|
194
184
|
if (isLeafNode) {
|
|
195
|
-
|
|
185
|
+
const b = await this.bbi.read(count * (keySize + valSize), currentOffset + offset);
|
|
186
|
+
const dataView = getDataView(b);
|
|
187
|
+
offset = 0;
|
|
188
|
+
for (let n = 0; n < count; n++) {
|
|
196
189
|
const key = decoder
|
|
197
190
|
.decode(b.subarray(offset, offset + keySize))
|
|
198
191
|
.replaceAll('\0', '');
|
|
@@ -211,16 +204,18 @@ export class BBI {
|
|
|
211
204
|
}
|
|
212
205
|
else {
|
|
213
206
|
const nextNodes = [];
|
|
214
|
-
|
|
207
|
+
const dataView = getDataView(await this.bbi.read(count * (keySize + 8), currentOffset + offset));
|
|
208
|
+
offset = 0;
|
|
209
|
+
for (let n = 0; n < count; n++) {
|
|
215
210
|
offset += keySize;
|
|
216
211
|
const childOffset = Number(dataView.getBigUint64(offset, true));
|
|
217
212
|
offset += 8;
|
|
218
|
-
nextNodes.push(bptReadNode(
|
|
213
|
+
nextNodes.push(bptReadNode(childOffset));
|
|
219
214
|
}
|
|
220
215
|
await Promise.all(nextNodes);
|
|
221
216
|
}
|
|
222
217
|
};
|
|
223
|
-
await bptReadNode(
|
|
218
|
+
await bptReadNode(chromTreeOffset + 32);
|
|
224
219
|
return {
|
|
225
220
|
refsByName,
|
|
226
221
|
refsByNumber,
|
package/esm/bbi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAc3C,MAAM,aAAa,GAAG,CAAC,UAAU,CAAA;AACjC,MAAM,aAAa,GAAG,CAAC,UAAU,CAAA;AAEjC,MAAM,OAAgB,GAAG;IAOhB,SAAS,CAAC,IAAqB;QACpC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACxD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;gBACxB,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;;;;;;;;OASG;IACH,YAAmB,IAKlB;QACC,MAAM,EAAE,UAAU,EAAE,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;QAC9D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,GAAG,UAAU,CAAA;QACvB,CAAC;aAAM,IAAI,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;QAChC,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,IAAqB;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;QAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACtD,OAAO;YACL,GAAG,MAAM;YACT,GAAG,MAAM;SACV,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAC1B,IAAqB,EACrB,WAAW,GAAG,IAAI;QAElB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"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"}
|
package/esm/bigbed.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ interface Index {
|
|
|
9
9
|
}
|
|
10
10
|
export declare function filterUndef<T>(ts: (T | undefined)[]): T[];
|
|
11
11
|
export declare class BigBed extends BBI {
|
|
12
|
-
readIndicesCache: AbortablePromiseCache<RequestOptions, Index[]>;
|
|
12
|
+
readIndicesCache: AbortablePromiseCache<RequestOptions, Index[], string>;
|
|
13
13
|
readIndices(opts?: RequestOptions): Promise<Index[]>;
|
|
14
14
|
protected getView(_scale: number, opts?: RequestOptions): Promise<import("./block-view.ts").BlockView>;
|
|
15
15
|
private _readIndices;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmod/bbi",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.3",
|
|
4
4
|
"description": "Parser for BigWig/BigBed files",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "GMOD/bbi-js",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"prebuild": "npm run clean",
|
|
36
36
|
"build:esm": "tsc --outDir esm",
|
|
37
37
|
"build:es5": "tsc --module commonjs --outDir dist",
|
|
38
|
+
"postbuild:es5": "echo '{\"type\": \"commonjs\"}' > dist/package.json",
|
|
38
39
|
"build": "npm run build:esm && npm run build:es5",
|
|
39
40
|
"preversion": "npm run lint && npm test run && npm run build",
|
|
40
41
|
"version": "standard-changelog && git add CHANGELOG.md",
|
package/src/bbi.ts
CHANGED
|
@@ -19,6 +19,10 @@ import type { GenericFilehandle } from 'generic-filehandle2'
|
|
|
19
19
|
const BIG_WIG_MAGIC = -2003829722
|
|
20
20
|
const BIG_BED_MAGIC = -2021002517
|
|
21
21
|
|
|
22
|
+
function getDataView(buffer: Uint8Array) {
|
|
23
|
+
return new DataView(buffer.buffer, buffer.byteOffset, buffer.length)
|
|
24
|
+
}
|
|
25
|
+
|
|
22
26
|
export abstract class BBI {
|
|
23
27
|
protected bbi: GenericFilehandle
|
|
24
28
|
|
|
@@ -79,7 +83,7 @@ export abstract class BBI {
|
|
|
79
83
|
requestSize = 2000,
|
|
80
84
|
): Promise<BigWigHeader> {
|
|
81
85
|
const b = await this.bbi.read(requestSize, 0, opts)
|
|
82
|
-
const dataView =
|
|
86
|
+
const dataView = getDataView(b)
|
|
83
87
|
|
|
84
88
|
const r1 = dataView.getInt32(0, true)
|
|
85
89
|
if (r1 !== BIG_WIG_MAGIC && r1 !== BIG_BED_MAGIC) {
|
|
@@ -140,7 +144,7 @@ export abstract class BBI {
|
|
|
140
144
|
if (totalSummaryOffset) {
|
|
141
145
|
const b2 = b.subarray(Number(totalSummaryOffset))
|
|
142
146
|
let offset = 0
|
|
143
|
-
const dataView =
|
|
147
|
+
const dataView = getDataView(b2)
|
|
144
148
|
const basesCovered = Number(dataView.getBigUint64(offset, true))
|
|
145
149
|
offset += 8
|
|
146
150
|
const scoreMin = dataView.getFloat64(offset, true)
|
|
@@ -193,48 +197,43 @@ export abstract class BBI {
|
|
|
193
197
|
const refsByNumber: Record<number, RefInfo> = []
|
|
194
198
|
const refsByName: Record<string, number> = {}
|
|
195
199
|
|
|
196
|
-
|
|
197
|
-
const chromTreeOffset = header.chromTreeOffset
|
|
198
|
-
while (unzoomedDataOffset % 4 !== 0) {
|
|
199
|
-
unzoomedDataOffset += 1
|
|
200
|
-
}
|
|
201
|
-
const off = unzoomedDataOffset - chromTreeOffset
|
|
202
|
-
const b = await this.bbi.read(off, Number(chromTreeOffset), opts)
|
|
200
|
+
const chromTreeOffset = Number(header.chromTreeOffset)
|
|
203
201
|
|
|
204
|
-
const dataView =
|
|
202
|
+
const dataView = getDataView(await this.bbi.read(32, chromTreeOffset, opts))
|
|
205
203
|
let offset = 0
|
|
206
|
-
// unused
|
|
207
|
-
// const magic = dataView.getUint32(offset, true)
|
|
204
|
+
// const magic = dataView.getUint32(offset, true) // unused
|
|
208
205
|
offset += 4
|
|
209
|
-
// unused
|
|
210
|
-
// const blockSize = dataView.getUint32(offset, true)
|
|
206
|
+
// const blockSize = dataView.getUint32(offset, true) // unused
|
|
211
207
|
offset += 4
|
|
212
208
|
const keySize = dataView.getUint32(offset, true)
|
|
213
209
|
offset += 4
|
|
214
|
-
|
|
215
|
-
// const valSize = dataView.getUint32(offset, true)
|
|
210
|
+
const valSize = dataView.getUint32(offset, true)
|
|
216
211
|
offset += 4
|
|
217
|
-
// unused
|
|
218
|
-
// const itemCount = dataView.getBigUint64(offset, true)
|
|
212
|
+
// const itemCount = dataView.getBigUint64(offset, true) // unused
|
|
219
213
|
offset += 8
|
|
220
214
|
|
|
221
|
-
const rootNodeOffset = 32
|
|
222
215
|
const decoder = new TextDecoder('utf8')
|
|
216
|
+
|
|
223
217
|
const bptReadNode = async (currentOffset: number) => {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}
|
|
218
|
+
const b = await this.bbi.read(4, currentOffset)
|
|
219
|
+
const dataView = getDataView(b)
|
|
220
|
+
let offset = 0
|
|
228
221
|
const isLeafNode = dataView.getUint8(offset)
|
|
229
|
-
offset +=
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
const cnt = dataView.getUint16(offset, true)
|
|
222
|
+
offset += 1
|
|
223
|
+
// const reserved = dataView.getUint8(offset) // unused
|
|
224
|
+
offset += 1
|
|
225
|
+
const count = dataView.getUint16(offset, true)
|
|
235
226
|
offset += 2
|
|
227
|
+
|
|
236
228
|
if (isLeafNode) {
|
|
237
|
-
|
|
229
|
+
const b = await this.bbi.read(
|
|
230
|
+
count * (keySize + valSize),
|
|
231
|
+
currentOffset + offset,
|
|
232
|
+
)
|
|
233
|
+
const dataView = getDataView(b)
|
|
234
|
+
offset = 0
|
|
235
|
+
|
|
236
|
+
for (let n = 0; n < count; n++) {
|
|
238
237
|
const key = decoder
|
|
239
238
|
.decode(b.subarray(offset, offset + keySize))
|
|
240
239
|
.replaceAll('\0', '')
|
|
@@ -253,18 +252,21 @@ export abstract class BBI {
|
|
|
253
252
|
}
|
|
254
253
|
} else {
|
|
255
254
|
const nextNodes = []
|
|
256
|
-
|
|
255
|
+
const dataView = getDataView(
|
|
256
|
+
await this.bbi.read(count * (keySize + 8), currentOffset + offset),
|
|
257
|
+
)
|
|
258
|
+
offset = 0
|
|
259
|
+
|
|
260
|
+
for (let n = 0; n < count; n++) {
|
|
257
261
|
offset += keySize
|
|
258
262
|
const childOffset = Number(dataView.getBigUint64(offset, true))
|
|
259
263
|
offset += 8
|
|
260
|
-
nextNodes.push(
|
|
261
|
-
bptReadNode(Number(childOffset) - Number(chromTreeOffset)),
|
|
262
|
-
)
|
|
264
|
+
nextNodes.push(bptReadNode(childOffset))
|
|
263
265
|
}
|
|
264
266
|
await Promise.all(nextNodes)
|
|
265
267
|
}
|
|
266
268
|
}
|
|
267
|
-
await bptReadNode(
|
|
269
|
+
await bptReadNode(chromTreeOffset + 32)
|
|
268
270
|
return {
|
|
269
271
|
refsByName,
|
|
270
272
|
refsByNumber,
|