@gmod/bbi 7.0.5 → 8.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 +8 -0
- package/README.md +59 -0
- package/dist/bbi.d.ts +13 -3
- package/dist/bbi.js +81 -18
- package/dist/bbi.js.map +1 -1
- package/dist/bigbed.d.ts +14 -2
- package/dist/bigbed.js +127 -86
- package/dist/bigbed.js.map +1 -1
- package/dist/bigwig.js +1 -2
- package/dist/bigwig.js.map +1 -1
- package/dist/block-view.d.ts +13 -4
- package/dist/block-view.js +332 -150
- package/dist/block-view.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/parse-bigwig.d.ts +3 -0
- package/dist/parse-bigwig.js +15 -0
- package/dist/parse-bigwig.js.map +1 -0
- package/dist/range.js +12 -24
- package/dist/range.js.map +1 -1
- package/dist/types.d.ts +14 -2
- package/dist/unzip.d.ts +18 -1
- package/dist/unzip.js +33 -4
- package/dist/unzip.js.map +1 -1
- package/dist/util.d.ts +2 -4
- package/dist/util.js +7 -5
- package/dist/util.js.map +1 -1
- package/dist/wasm/inflate-wasm-inlined.d.ts +19 -0
- package/dist/wasm/inflate-wasm-inlined.js +117 -0
- package/dist/wasm/inflate-wasm-inlined.js.map +1 -0
- package/dist/wasm/inflate_wasm.d.ts +1 -0
- package/dist/wasm/inflate_wasm.js +43 -0
- package/dist/wasm/inflate_wasm.js.map +1 -0
- package/dist/wasm/inflate_wasm_bg.d.ts +68 -0
- package/dist/wasm/inflate_wasm_bg.js +307 -0
- package/dist/wasm/inflate_wasm_bg.js.map +1 -0
- package/esm/bbi.d.ts +13 -3
- package/esm/bbi.js +81 -18
- package/esm/bbi.js.map +1 -1
- package/esm/bigbed.d.ts +14 -2
- package/esm/bigbed.js +127 -86
- package/esm/bigbed.js.map +1 -1
- package/esm/bigwig.js +1 -2
- package/esm/bigwig.js.map +1 -1
- package/esm/block-view.d.ts +13 -4
- package/esm/block-view.js +334 -152
- package/esm/block-view.js.map +1 -1
- package/esm/index.d.ts +2 -1
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/parse-bigwig.d.ts +3 -0
- package/esm/parse-bigwig.js +12 -0
- package/esm/parse-bigwig.js.map +1 -0
- package/esm/range.js +12 -24
- package/esm/range.js.map +1 -1
- package/esm/types.d.ts +14 -2
- package/esm/unzip.d.ts +18 -1
- package/esm/unzip.js +30 -3
- package/esm/unzip.js.map +1 -1
- package/esm/util.d.ts +2 -4
- package/esm/util.js +7 -5
- package/esm/util.js.map +1 -1
- package/esm/wasm/inflate-wasm-inlined.d.ts +19 -0
- package/esm/wasm/inflate-wasm-inlined.js +111 -0
- package/esm/wasm/inflate-wasm-inlined.js.map +1 -0
- package/esm/wasm/inflate_wasm.d.ts +1 -0
- package/esm/wasm/inflate_wasm.js +5 -0
- package/esm/wasm/inflate_wasm.js.map +1 -0
- package/esm/wasm/inflate_wasm_bg.d.ts +68 -0
- package/esm/wasm/inflate_wasm_bg.js +296 -0
- package/esm/wasm/inflate_wasm_bg.js.map +1 -0
- package/package.json +21 -17
- package/src/bbi.ts +101 -21
- package/src/bigbed.ts +165 -83
- package/src/bigwig.ts +1 -2
- package/src/block-view.ts +415 -158
- package/src/index.ts +8 -1
- package/src/parse-bigwig.ts +19 -0
- package/src/range.ts +13 -21
- package/src/types.ts +19 -2
- package/src/unzip.ts +88 -3
- package/src/util.ts +9 -10
- package/src/wasm/inflate-wasm-inlined.d.ts +49 -0
- package/src/wasm/inflate-wasm-inlined.js +1 -0
- package/src/wasm/inflate_wasm.d.ts +35 -0
- package/src/wasm/inflate_wasm.js +4 -0
- package/src/wasm/inflate_wasm_bg.js +309 -0
- package/src/wasm/inflate_wasm_bg.wasm +0 -0
- package/src/wasm/inflate_wasm_bg.wasm.d.ts +13 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# [8.0.0](https://github.com/GMOD/bbi-js/compare/v7.1.0...v8.0.0) (2025-12-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# [7.1.0](https://github.com/GMOD/bbi-js/compare/v7.0.5...v7.1.0) (2025-11-09)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
1
9
|
## [7.0.5](https://github.com/GMOD/bbi-js/compare/v7.0.4...v7.0.5) (2025-06-10)
|
|
2
10
|
|
|
3
11
|
|
package/README.md
CHANGED
|
@@ -123,6 +123,65 @@ observer.subscribe(
|
|
|
123
123
|
)
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
+
#### getFeaturesAsArrays(refName, start, end, opts)
|
|
127
|
+
|
|
128
|
+
Same parameters as getFeatures, but returns typed arrays instead of an array of
|
|
129
|
+
objects. This is more memory-efficient and reduces garbage collection pressure
|
|
130
|
+
for large datasets.
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
const result = await bigwig.getFeaturesAsArrays('chr1', 0, 100000)
|
|
134
|
+
// For regular BigWig data:
|
|
135
|
+
// { starts: Int32Array, ends: Int32Array, scores: Float32Array }
|
|
136
|
+
|
|
137
|
+
// For summary/zoomed data (when using scale parameter):
|
|
138
|
+
// { starts: Int32Array, ends: Int32Array, scores: Float32Array,
|
|
139
|
+
// minScores: Float32Array, maxScores: Float32Array }
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Example usage:
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
const { starts, ends, scores } = await bigwig.getFeaturesAsArrays(
|
|
146
|
+
'chr1',
|
|
147
|
+
0,
|
|
148
|
+
100000,
|
|
149
|
+
)
|
|
150
|
+
for (let i = 0; i < starts.length; i++) {
|
|
151
|
+
console.log(`Feature at ${starts[i]}-${ends[i]} with score ${scores[i]}`)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Check if it's summary data
|
|
155
|
+
const result = await bigwig.getFeaturesAsArrays('chr1', 0, 100000, {
|
|
156
|
+
scale: 0.01,
|
|
157
|
+
})
|
|
158
|
+
if ('minScores' in result) {
|
|
159
|
+
// Summary data with min/max scores
|
|
160
|
+
const { minScores, maxScores } = result
|
|
161
|
+
for (let i = 0; i < starts.length; i++) {
|
|
162
|
+
console.log(`Range: ${minScores[i]} - ${maxScores[i]}`)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
TypeScript types:
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
interface BigWigFeatureArrays {
|
|
171
|
+
starts: Int32Array
|
|
172
|
+
ends: Int32Array
|
|
173
|
+
scores: Float32Array
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
interface SummaryFeatureArrays {
|
|
177
|
+
starts: Int32Array
|
|
178
|
+
ends: Int32Array
|
|
179
|
+
scores: Float32Array
|
|
180
|
+
minScores: Float32Array
|
|
181
|
+
maxScores: Float32Array
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
126
185
|
### BigBed
|
|
127
186
|
|
|
128
187
|
#### getFeatures(refName, start, end, opts)
|
package/dist/bbi.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import { BlockView } from './block-view.ts';
|
|
3
|
-
import type { BigWigHeaderWithRefNames, Feature, RequestOptions2, RequestOptions } from './types.ts';
|
|
3
|
+
import type { BigWigFeatureArrays, BigWigHeaderWithRefNames, Feature, RequestOptions2, RequestOptions, SummaryFeatureArrays } from './types.ts';
|
|
4
4
|
import type { GenericFilehandle } from 'generic-filehandle2';
|
|
5
5
|
export declare abstract class BBI {
|
|
6
6
|
protected bbi: GenericFilehandle;
|
|
@@ -15,7 +15,7 @@ export declare abstract class BBI {
|
|
|
15
15
|
});
|
|
16
16
|
private _getHeader;
|
|
17
17
|
private _getMainHeader;
|
|
18
|
-
private
|
|
18
|
+
private _readChromosomeTree;
|
|
19
19
|
protected getUnzoomedView(opts?: RequestOptions): Promise<BlockView>;
|
|
20
20
|
protected abstract getView(scale: number, opts?: RequestOptions): Promise<BlockView>;
|
|
21
21
|
/**
|
|
@@ -31,5 +31,15 @@ export declare abstract class BBI {
|
|
|
31
31
|
* or scale used to infer the zoomLevel to use
|
|
32
32
|
*/
|
|
33
33
|
getFeatureStream(refName: string, start: number, end: number, opts?: RequestOptions2): Promise<Observable<Feature[]>>;
|
|
34
|
-
getFeatures(refName: string, start: number, end: number, opts?: RequestOptions2): Promise<
|
|
34
|
+
getFeatures(refName: string, start: number, end: number, opts?: RequestOptions2): Promise<any[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Gets features from a BigWig file as typed arrays (more efficient than getFeatures)
|
|
37
|
+
*
|
|
38
|
+
* @param refName - The chromosome name
|
|
39
|
+
* @param start - The start of a region
|
|
40
|
+
* @param end - The end of a region
|
|
41
|
+
* @param opts - Options including basesPerSpan or scale
|
|
42
|
+
* @returns Promise with typed arrays: starts, ends, scores (and minScores/maxScores for summary data)
|
|
43
|
+
*/
|
|
44
|
+
getFeaturesAsArrays(refName: string, start: number, end: number, opts?: RequestOptions2): Promise<BigWigFeatureArrays | SummaryFeatureArrays>;
|
|
35
45
|
}
|
package/dist/bbi.js
CHANGED
|
@@ -7,10 +7,14 @@ 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
|
+
const decoder = new TextDecoder('utf8');
|
|
10
11
|
function getDataView(buffer) {
|
|
11
12
|
return new DataView(buffer.buffer, buffer.byteOffset, buffer.length);
|
|
12
13
|
}
|
|
13
14
|
class BBI {
|
|
15
|
+
bbi;
|
|
16
|
+
headerP;
|
|
17
|
+
renameRefSeqs;
|
|
14
18
|
getHeader(opts) {
|
|
15
19
|
if (!this.headerP) {
|
|
16
20
|
this.headerP = this._getHeader(opts).catch((e) => {
|
|
@@ -48,7 +52,7 @@ class BBI {
|
|
|
48
52
|
}
|
|
49
53
|
async _getHeader(opts) {
|
|
50
54
|
const header = await this._getMainHeader(opts);
|
|
51
|
-
const chroms = await this.
|
|
55
|
+
const chroms = await this._readChromosomeTree(header, opts);
|
|
52
56
|
return {
|
|
53
57
|
...header,
|
|
54
58
|
...chroms,
|
|
@@ -68,7 +72,8 @@ class BBI {
|
|
|
68
72
|
offset += 2;
|
|
69
73
|
const numZoomLevels = dataView.getUint16(offset, true);
|
|
70
74
|
offset += 2;
|
|
71
|
-
|
|
75
|
+
// Offset to the B+ tree that maps chromosome names to integer IDs
|
|
76
|
+
const chromosomeTreeOffset = Number(dataView.getBigUint64(offset, true));
|
|
72
77
|
offset += 8;
|
|
73
78
|
const unzoomedDataOffset = Number(dataView.getBigUint64(offset, true));
|
|
74
79
|
offset += 8;
|
|
@@ -111,7 +116,7 @@ class BBI {
|
|
|
111
116
|
}
|
|
112
117
|
let totalSummary;
|
|
113
118
|
if (totalSummaryOffset) {
|
|
114
|
-
const b2 = b.subarray(
|
|
119
|
+
const b2 = b.subarray(totalSummaryOffset);
|
|
115
120
|
let offset = 0;
|
|
116
121
|
const dataView = getDataView(b2);
|
|
117
122
|
const basesCovered = Number(dataView.getBigUint64(offset, true));
|
|
@@ -135,7 +140,6 @@ class BBI {
|
|
|
135
140
|
else {
|
|
136
141
|
throw new Error('no stats');
|
|
137
142
|
}
|
|
138
|
-
const decoder = new TextDecoder('utf8');
|
|
139
143
|
return {
|
|
140
144
|
zoomLevels,
|
|
141
145
|
magic,
|
|
@@ -146,7 +150,7 @@ class BBI {
|
|
|
146
150
|
definedFieldCount,
|
|
147
151
|
uncompressBufSize,
|
|
148
152
|
asOffset,
|
|
149
|
-
|
|
153
|
+
chromosomeTreeOffset,
|
|
150
154
|
totalSummaryOffset,
|
|
151
155
|
unzoomedDataOffset,
|
|
152
156
|
unzoomedIndexOffset,
|
|
@@ -157,11 +161,14 @@ class BBI {
|
|
|
157
161
|
: '',
|
|
158
162
|
};
|
|
159
163
|
}
|
|
160
|
-
|
|
164
|
+
// Reads the B+ tree that maps chromosome names to integer IDs
|
|
165
|
+
// This is part of the "cirTree" (combined ID R-tree) structure, which uses
|
|
166
|
+
// integer chromosome IDs instead of strings for more efficient spatial indexing
|
|
167
|
+
async _readChromosomeTree(header, opts) {
|
|
161
168
|
const refsByNumber = [];
|
|
162
169
|
const refsByName = {};
|
|
163
|
-
const
|
|
164
|
-
const dataView = getDataView(await this.bbi.read(32,
|
|
170
|
+
const chromosomeTreeOffset = header.chromosomeTreeOffset;
|
|
171
|
+
const dataView = getDataView(await this.bbi.read(32, chromosomeTreeOffset, opts));
|
|
165
172
|
let offset = 0;
|
|
166
173
|
// const magic = dataView.getUint32(offset, true) // unused
|
|
167
174
|
offset += 4;
|
|
@@ -173,8 +180,8 @@ class BBI {
|
|
|
173
180
|
offset += 4;
|
|
174
181
|
// const itemCount = dataView.getBigUint64(offset, true) // unused
|
|
175
182
|
offset += 8;
|
|
176
|
-
|
|
177
|
-
const
|
|
183
|
+
// Recursively traverses the B+ tree to populate chromosome name-to-ID mappings
|
|
184
|
+
const readBPlusTreeNode = async (currentOffset) => {
|
|
178
185
|
const b = await this.bbi.read(4, currentOffset);
|
|
179
186
|
const dataView = getDataView(b);
|
|
180
187
|
let offset = 0;
|
|
@@ -184,14 +191,14 @@ class BBI {
|
|
|
184
191
|
offset += 1;
|
|
185
192
|
const count = dataView.getUint16(offset, true);
|
|
186
193
|
offset += 2;
|
|
194
|
+
// Leaf nodes contain the actual chromosome name-to-ID mappings
|
|
187
195
|
if (isLeafNode) {
|
|
188
196
|
const b = await this.bbi.read(count * (keySize + valSize), currentOffset + offset);
|
|
189
197
|
const dataView = getDataView(b);
|
|
190
198
|
offset = 0;
|
|
191
199
|
for (let n = 0; n < count; n++) {
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
.replaceAll('\0', '');
|
|
200
|
+
const keyEnd = b.indexOf(0, offset);
|
|
201
|
+
const key = decoder.decode(b.subarray(offset, keyEnd !== -1 ? keyEnd : offset + keySize));
|
|
195
202
|
offset += keySize;
|
|
196
203
|
const refId = dataView.getUint32(offset, true);
|
|
197
204
|
offset += 4;
|
|
@@ -206,6 +213,7 @@ class BBI {
|
|
|
206
213
|
}
|
|
207
214
|
}
|
|
208
215
|
else {
|
|
216
|
+
// Non-leaf nodes contain pointers to child nodes
|
|
209
217
|
const nextNodes = [];
|
|
210
218
|
const dataView = getDataView(await this.bbi.read(count * (keySize + 8), currentOffset + offset));
|
|
211
219
|
offset = 0;
|
|
@@ -213,12 +221,12 @@ class BBI {
|
|
|
213
221
|
offset += keySize;
|
|
214
222
|
const childOffset = Number(dataView.getBigUint64(offset, true));
|
|
215
223
|
offset += 8;
|
|
216
|
-
nextNodes.push(
|
|
224
|
+
nextNodes.push(readBPlusTreeNode(childOffset));
|
|
217
225
|
}
|
|
218
226
|
await Promise.all(nextNodes);
|
|
219
227
|
}
|
|
220
228
|
};
|
|
221
|
-
await
|
|
229
|
+
await readBPlusTreeNode(chromosomeTreeOffset + 32);
|
|
222
230
|
return {
|
|
223
231
|
refsByName,
|
|
224
232
|
refsByNumber,
|
|
@@ -230,7 +238,7 @@ class BBI {
|
|
|
230
238
|
*/
|
|
231
239
|
async getUnzoomedView(opts) {
|
|
232
240
|
const { unzoomedIndexOffset, refsByName, uncompressBufSize, fileType } = await this.getHeader(opts);
|
|
233
|
-
return new block_view_ts_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, uncompressBufSize
|
|
241
|
+
return new block_view_ts_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, uncompressBufSize, fileType);
|
|
234
242
|
}
|
|
235
243
|
/**
|
|
236
244
|
* Gets features from a BigWig file
|
|
@@ -268,8 +276,63 @@ class BBI {
|
|
|
268
276
|
}
|
|
269
277
|
async getFeatures(refName, start, end, opts) {
|
|
270
278
|
const ob = await this.getFeatureStream(refName, start, end, opts);
|
|
271
|
-
const
|
|
272
|
-
|
|
279
|
+
const arrays = await (0, rxjs_1.firstValueFrom)(ob.pipe((0, operators_1.toArray)()));
|
|
280
|
+
const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
|
|
281
|
+
const result = new Array(totalLength);
|
|
282
|
+
let index = 0;
|
|
283
|
+
for (const arr of arrays) {
|
|
284
|
+
for (const item of arr) {
|
|
285
|
+
result[index++] = item;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Gets features from a BigWig file as typed arrays (more efficient than getFeatures)
|
|
292
|
+
*
|
|
293
|
+
* @param refName - The chromosome name
|
|
294
|
+
* @param start - The start of a region
|
|
295
|
+
* @param end - The end of a region
|
|
296
|
+
* @param opts - Options including basesPerSpan or scale
|
|
297
|
+
* @returns Promise with typed arrays: starts, ends, scores (and minScores/maxScores for summary data)
|
|
298
|
+
*/
|
|
299
|
+
async getFeaturesAsArrays(refName, start, end, opts) {
|
|
300
|
+
const features = await this.getFeatures(refName, start, end, opts);
|
|
301
|
+
const count = features.length;
|
|
302
|
+
if (count === 0) {
|
|
303
|
+
return {
|
|
304
|
+
starts: new Int32Array(0),
|
|
305
|
+
ends: new Int32Array(0),
|
|
306
|
+
scores: new Float32Array(0),
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
const hasSummary = features[0]?.summary === true;
|
|
310
|
+
if (hasSummary) {
|
|
311
|
+
const starts = new Int32Array(count);
|
|
312
|
+
const ends = new Int32Array(count);
|
|
313
|
+
const scores = new Float32Array(count);
|
|
314
|
+
const minScores = new Float32Array(count);
|
|
315
|
+
const maxScores = new Float32Array(count);
|
|
316
|
+
for (let i = 0; i < count; i++) {
|
|
317
|
+
const f = features[i];
|
|
318
|
+
starts[i] = f.start;
|
|
319
|
+
ends[i] = f.end;
|
|
320
|
+
scores[i] = f.score ?? 0;
|
|
321
|
+
minScores[i] = f.minScore ?? 0;
|
|
322
|
+
maxScores[i] = f.maxScore ?? 0;
|
|
323
|
+
}
|
|
324
|
+
return { starts, ends, scores, minScores, maxScores };
|
|
325
|
+
}
|
|
326
|
+
const starts = new Int32Array(count);
|
|
327
|
+
const ends = new Int32Array(count);
|
|
328
|
+
const scores = new Float32Array(count);
|
|
329
|
+
for (let i = 0; i < count; i++) {
|
|
330
|
+
const f = features[i];
|
|
331
|
+
starts[i] = f.start;
|
|
332
|
+
ends[i] = f.end;
|
|
333
|
+
scores[i] = f.score ?? 0;
|
|
334
|
+
}
|
|
335
|
+
return { starts, ends, scores };
|
|
273
336
|
}
|
|
274
337
|
}
|
|
275
338
|
exports.BBI = BBI;
|
package/dist/bbi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"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"}
|
package/dist/bigbed.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import AbortablePromiseCache from '@gmod/abortable-promise-cache';
|
|
2
2
|
import { BBI } from './bbi.ts';
|
|
3
|
-
import type {
|
|
3
|
+
import type { RequestOptions } from './types.ts';
|
|
4
4
|
interface Index {
|
|
5
5
|
type: number;
|
|
6
6
|
fieldcount: number;
|
|
@@ -14,6 +14,18 @@ export declare class BigBed extends BBI {
|
|
|
14
14
|
protected getView(_scale: number, opts?: RequestOptions): Promise<import("./block-view.ts").BlockView>;
|
|
15
15
|
private _readIndices;
|
|
16
16
|
private searchExtraIndexBlocks;
|
|
17
|
-
searchExtraIndex(name: string, opts?: RequestOptions): Promise<
|
|
17
|
+
searchExtraIndex(name: string, opts?: RequestOptions): Promise<{
|
|
18
|
+
field: number | undefined;
|
|
19
|
+
offset?: number;
|
|
20
|
+
chromId?: number;
|
|
21
|
+
start: number;
|
|
22
|
+
end: number;
|
|
23
|
+
score?: number;
|
|
24
|
+
rest?: string;
|
|
25
|
+
minScore?: number;
|
|
26
|
+
maxScore?: number;
|
|
27
|
+
summary?: boolean;
|
|
28
|
+
uniqueId?: string;
|
|
29
|
+
}[]>;
|
|
18
30
|
}
|
|
19
31
|
export {};
|
package/dist/bigbed.js
CHANGED
|
@@ -10,17 +10,113 @@ const quick_lru_1 = __importDefault(require("quick-lru"));
|
|
|
10
10
|
const rxjs_1 = require("rxjs");
|
|
11
11
|
const operators_1 = require("rxjs/operators");
|
|
12
12
|
const bbi_ts_1 = require("./bbi.js");
|
|
13
|
+
const decoder = new TextDecoder('utf8');
|
|
13
14
|
function filterUndef(ts) {
|
|
14
15
|
return ts.filter((t) => !!t);
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
17
|
+
function getTabField(str, fieldIndex) {
|
|
18
|
+
if (fieldIndex < 0) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
let start = 0;
|
|
22
|
+
for (let i = 0; i < fieldIndex; i++) {
|
|
23
|
+
start = str.indexOf('\t', start);
|
|
24
|
+
if (start === -1) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
start++;
|
|
28
|
+
}
|
|
29
|
+
const end = str.indexOf('\t', start);
|
|
30
|
+
return end === -1 ? str.slice(start) : str.slice(start, end);
|
|
31
|
+
}
|
|
32
|
+
// Parses a null-terminated string key from a B+ tree node
|
|
33
|
+
function parseKey(buffer, offset, keySize) {
|
|
34
|
+
const keyEnd = buffer.indexOf(0, offset);
|
|
35
|
+
return decoder.decode(buffer.subarray(offset, keyEnd !== -1 ? keyEnd : offset + keySize));
|
|
36
|
+
}
|
|
37
|
+
// Recursively traverses a B+ tree to search for a specific name in the BigBed extraIndex
|
|
38
|
+
// B+ trees are balanced tree structures optimized for disk-based searches
|
|
39
|
+
async function readBPlusTreeNode(bbi, nodeOffset, blockSize, keySize, valSize, name, field, opts) {
|
|
40
|
+
const len = 4 + blockSize * (keySize + valSize);
|
|
41
|
+
const buffer = await bbi.read(len, nodeOffset, opts);
|
|
42
|
+
const dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.length);
|
|
43
|
+
let offset = 0;
|
|
44
|
+
const nodeType = dataView.getInt8(offset);
|
|
45
|
+
offset += 2; // skip nodeType byte + 1 reserved byte
|
|
46
|
+
const cnt = dataView.getInt16(offset, true);
|
|
47
|
+
offset += 2;
|
|
48
|
+
// Non-leaf node (nodeType === 0): contains keys and child node pointers for navigation
|
|
49
|
+
if (nodeType === 0) {
|
|
50
|
+
const leafkeys = [];
|
|
51
|
+
for (let i = 0; i < cnt; i++) {
|
|
52
|
+
const key = parseKey(buffer, offset, keySize);
|
|
53
|
+
offset += keySize;
|
|
54
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
55
|
+
offset += 8;
|
|
56
|
+
leafkeys.push({
|
|
57
|
+
key,
|
|
58
|
+
offset: dataOffset,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Binary search to find the appropriate child node
|
|
62
|
+
let left = 0;
|
|
63
|
+
let right = leafkeys.length - 1;
|
|
64
|
+
let targetIndex = leafkeys.length - 1;
|
|
65
|
+
while (left <= right) {
|
|
66
|
+
const mid = Math.floor((left + right) / 2);
|
|
67
|
+
const cmp = name.localeCompare(leafkeys[mid].key);
|
|
68
|
+
if (cmp < 0) {
|
|
69
|
+
targetIndex = mid - 1;
|
|
70
|
+
right = mid - 1;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
left = mid + 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const childOffset = targetIndex >= 0 ? leafkeys[targetIndex].offset : leafkeys[0].offset;
|
|
77
|
+
return readBPlusTreeNode(bbi, childOffset, blockSize, keySize, valSize, name, field, opts);
|
|
78
|
+
}
|
|
79
|
+
else if (nodeType === 1) {
|
|
80
|
+
// Leaf node (nodeType === 1): contains actual key-value data
|
|
81
|
+
const keys = [];
|
|
82
|
+
for (let i = 0; i < cnt; i++) {
|
|
83
|
+
const key = parseKey(buffer, offset, keySize);
|
|
84
|
+
offset += keySize;
|
|
85
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
86
|
+
offset += 8;
|
|
87
|
+
const length = dataView.getUint32(offset, true);
|
|
88
|
+
offset += 4;
|
|
89
|
+
offset += 4; // skip reserved
|
|
90
|
+
keys.push({
|
|
91
|
+
key,
|
|
92
|
+
offset: dataOffset,
|
|
93
|
+
length,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Binary search for exact key match in sorted leaf node
|
|
97
|
+
let left = 0;
|
|
98
|
+
let right = keys.length - 1;
|
|
99
|
+
while (left <= right) {
|
|
100
|
+
const mid = Math.floor((left + right) / 2);
|
|
101
|
+
const cmp = name.localeCompare(keys[mid].key);
|
|
102
|
+
if (cmp === 0) {
|
|
103
|
+
return { ...keys[mid], field };
|
|
104
|
+
}
|
|
105
|
+
else if (cmp < 0) {
|
|
106
|
+
right = mid - 1;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
left = mid + 1;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
23
113
|
}
|
|
114
|
+
}
|
|
115
|
+
class BigBed extends bbi_ts_1.BBI {
|
|
116
|
+
readIndicesCache = new abortable_promise_cache_1.default({
|
|
117
|
+
cache: new quick_lru_1.default({ maxSize: 1 }),
|
|
118
|
+
fill: (args, signal) => this._readIndices({ ...args, signal }),
|
|
119
|
+
});
|
|
24
120
|
readIndices(opts = {}) {
|
|
25
121
|
const { signal, ...rest } = opts;
|
|
26
122
|
return this.readIndicesCache.get(JSON.stringify(rest), opts, signal);
|
|
@@ -40,7 +136,7 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
40
136
|
*/
|
|
41
137
|
async _readIndices(opts) {
|
|
42
138
|
const { extHeaderOffset } = await this.getHeader(opts);
|
|
43
|
-
const b = await this.bbi.read(64,
|
|
139
|
+
const b = await this.bbi.read(64, extHeaderOffset);
|
|
44
140
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
45
141
|
let offset = 0;
|
|
46
142
|
// const _size = dataView.getUint16(offset, true)
|
|
@@ -55,7 +151,7 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
55
151
|
}
|
|
56
152
|
const blocklen = 20;
|
|
57
153
|
const len = blocklen * count;
|
|
58
|
-
const buffer = await this.bbi.read(len,
|
|
154
|
+
const buffer = await this.bbi.read(len, dataOffset);
|
|
59
155
|
const indices = [];
|
|
60
156
|
for (let i = 0; i < count; i += 1) {
|
|
61
157
|
const b = buffer.subarray(i * blocklen);
|
|
@@ -66,9 +162,14 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
66
162
|
const fieldcount = dataView.getInt16(offset, true);
|
|
67
163
|
offset += 2;
|
|
68
164
|
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
69
|
-
offset += 8 + 4; //4
|
|
165
|
+
offset += 8 + 4; // skip 8-byte offset + 4 reserved bytes
|
|
70
166
|
const field = dataView.getInt16(offset, true);
|
|
71
|
-
indices.push({
|
|
167
|
+
indices.push({
|
|
168
|
+
type,
|
|
169
|
+
fieldcount,
|
|
170
|
+
offset: dataOffset,
|
|
171
|
+
field,
|
|
172
|
+
});
|
|
72
173
|
}
|
|
73
174
|
return indices;
|
|
74
175
|
}
|
|
@@ -87,7 +188,6 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
87
188
|
if (indices.length === 0) {
|
|
88
189
|
return [];
|
|
89
190
|
}
|
|
90
|
-
const decoder = new TextDecoder('utf8');
|
|
91
191
|
const locs = indices.map(async (index) => {
|
|
92
192
|
const { offset: offset2, field } = index;
|
|
93
193
|
const b = await this.bbi.read(32, offset2, opts);
|
|
@@ -103,72 +203,7 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
103
203
|
offset += 4;
|
|
104
204
|
// const _itemCount = Number(dataView.getBigUint64(offset, true))
|
|
105
205
|
offset += 8;
|
|
106
|
-
|
|
107
|
-
const val = Number(nodeOffset);
|
|
108
|
-
const len = 4 + blockSize * (keySize + valSize);
|
|
109
|
-
const buffer = await this.bbi.read(len, val, opts);
|
|
110
|
-
const b = buffer;
|
|
111
|
-
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
112
|
-
let offset = 0;
|
|
113
|
-
const nodeType = dataView.getInt8(offset);
|
|
114
|
-
offset += 2; //skip 1
|
|
115
|
-
const cnt = dataView.getInt16(offset, true);
|
|
116
|
-
offset += 2;
|
|
117
|
-
const keys = [];
|
|
118
|
-
if (nodeType === 0) {
|
|
119
|
-
const leafkeys = [];
|
|
120
|
-
for (let i = 0; i < cnt; i++) {
|
|
121
|
-
const key = decoder
|
|
122
|
-
.decode(b.subarray(offset, offset + keySize))
|
|
123
|
-
.replaceAll('\0', '');
|
|
124
|
-
offset += keySize;
|
|
125
|
-
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
126
|
-
offset += 8;
|
|
127
|
-
leafkeys.push({
|
|
128
|
-
key,
|
|
129
|
-
offset: dataOffset,
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
let lastOffset = 0;
|
|
133
|
-
for (const { key, offset } of leafkeys) {
|
|
134
|
-
if (name.localeCompare(key) < 0 && lastOffset) {
|
|
135
|
-
return bptReadNode(lastOffset);
|
|
136
|
-
}
|
|
137
|
-
lastOffset = offset;
|
|
138
|
-
}
|
|
139
|
-
return bptReadNode(lastOffset);
|
|
140
|
-
}
|
|
141
|
-
else if (nodeType === 1) {
|
|
142
|
-
for (let i = 0; i < cnt; i++) {
|
|
143
|
-
const key = decoder
|
|
144
|
-
.decode(b.subarray(offset, offset + keySize))
|
|
145
|
-
.replaceAll('\0', '');
|
|
146
|
-
offset += keySize;
|
|
147
|
-
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
148
|
-
offset += 8;
|
|
149
|
-
const length = dataView.getUint32(offset, true);
|
|
150
|
-
offset += 4;
|
|
151
|
-
const reserved = dataView.getUint32(offset, true);
|
|
152
|
-
offset += 4;
|
|
153
|
-
keys.push({
|
|
154
|
-
key,
|
|
155
|
-
offset: dataOffset,
|
|
156
|
-
length,
|
|
157
|
-
reserved,
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
for (const n of keys) {
|
|
161
|
-
if (n.key === name) {
|
|
162
|
-
return {
|
|
163
|
-
...n,
|
|
164
|
-
field,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return undefined;
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
return bptReadNode(offset2 + 32);
|
|
206
|
+
return readBPlusTreeNode(this.bbi, offset2 + 32, blockSize, keySize, valSize, name, field, opts);
|
|
172
207
|
});
|
|
173
208
|
return filterUndef(await Promise.all(locs));
|
|
174
209
|
}
|
|
@@ -179,7 +214,7 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
179
214
|
*
|
|
180
215
|
* @param name - the name to search for
|
|
181
216
|
*
|
|
182
|
-
* @param opts - options object with optional
|
|
217
|
+
* @param opts - options object with optional AbortSignal
|
|
183
218
|
*
|
|
184
219
|
* @return array of Feature
|
|
185
220
|
*/
|
|
@@ -194,15 +229,21 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
194
229
|
view.readFeatures(observer, [block], opts).catch((e) => {
|
|
195
230
|
observer.error(e);
|
|
196
231
|
});
|
|
197
|
-
}).pipe((0, operators_1.reduce)((acc, curr) =>
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return x;
|
|
202
|
-
}));
|
|
232
|
+
}).pipe((0, operators_1.reduce)((acc, curr) => {
|
|
233
|
+
acc.push(...curr);
|
|
234
|
+
return acc;
|
|
235
|
+
}, []), (0, operators_1.map)(features => features.map(f => ({ ...f, field: block.field }))));
|
|
203
236
|
});
|
|
204
237
|
const ret = await (0, rxjs_1.firstValueFrom)((0, rxjs_1.merge)(...res));
|
|
205
|
-
|
|
238
|
+
// Filter to features where the indexed field matches the search name
|
|
239
|
+
// field offset is adjusted by -3 to account for chrom, chromStart, chromEnd columns
|
|
240
|
+
return ret.filter(f => {
|
|
241
|
+
if (!f.rest) {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
const fieldIndex = (f.field || 0) - 3;
|
|
245
|
+
return getTabField(f.rest, fieldIndex) === name;
|
|
246
|
+
});
|
|
206
247
|
}
|
|
207
248
|
}
|
|
208
249
|
exports.BigBed = BigBed;
|