@gmod/bbi 7.1.0 → 8.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 +8 -0
- package/README.md +59 -0
- package/dist/bbi.d.ts +13 -3
- package/dist/bbi.js +80 -17
- package/dist/bbi.js.map +1 -1
- package/dist/bigbed.d.ts +14 -2
- package/dist/bigbed.js +116 -76
- 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 +324 -148
- 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 +11 -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 +6 -5
- package/dist/util.js.map +1 -1
- package/dist/wasm/inflate-wasm-inlined.d.ts +18 -0
- package/dist/wasm/inflate-wasm-inlined.js +455 -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 +80 -17
- package/esm/bbi.js.map +1 -1
- package/esm/bigbed.d.ts +14 -2
- package/esm/bigbed.js +116 -76
- 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 +326 -150
- 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 +11 -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 +6 -5
- package/esm/util.js.map +1 -1
- package/esm/wasm/inflate-wasm-inlined.d.ts +18 -0
- package/esm/wasm/inflate-wasm-inlined.js +449 -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 +17 -12
- package/src/bbi.ts +102 -20
- package/src/bigbed.ts +157 -80
- package/src/bigwig.ts +1 -2
- package/src/block-view.ts +418 -156
- 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 +86 -3
- package/src/util.ts +9 -10
- package/src/wasm/inflate-wasm-inlined.d.ts +49 -0
- package/src/wasm/inflate-wasm-inlined.js +547 -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.1](https://github.com/GMOD/bbi-js/compare/v8.0.0...v8.0.1) (2025-12-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# [8.0.0](https://github.com/GMOD/bbi-js/compare/v7.1.0...v8.0.0) (2025-12-11)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
1
9
|
# [7.1.0](https://github.com/GMOD/bbi-js/compare/v7.0.5...v7.1.0) (2025-11-09)
|
|
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,6 +7,7 @@ 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
|
}
|
|
@@ -51,7 +52,7 @@ class BBI {
|
|
|
51
52
|
}
|
|
52
53
|
async _getHeader(opts) {
|
|
53
54
|
const header = await this._getMainHeader(opts);
|
|
54
|
-
const chroms = await this.
|
|
55
|
+
const chroms = await this._readChromosomeTree(header, opts);
|
|
55
56
|
return {
|
|
56
57
|
...header,
|
|
57
58
|
...chroms,
|
|
@@ -71,7 +72,8 @@ class BBI {
|
|
|
71
72
|
offset += 2;
|
|
72
73
|
const numZoomLevels = dataView.getUint16(offset, true);
|
|
73
74
|
offset += 2;
|
|
74
|
-
|
|
75
|
+
// Offset to the B+ tree that maps chromosome names to integer IDs
|
|
76
|
+
const chromosomeTreeOffset = Number(dataView.getBigUint64(offset, true));
|
|
75
77
|
offset += 8;
|
|
76
78
|
const unzoomedDataOffset = Number(dataView.getBigUint64(offset, true));
|
|
77
79
|
offset += 8;
|
|
@@ -138,7 +140,6 @@ class BBI {
|
|
|
138
140
|
else {
|
|
139
141
|
throw new Error('no stats');
|
|
140
142
|
}
|
|
141
|
-
const decoder = new TextDecoder('utf8');
|
|
142
143
|
return {
|
|
143
144
|
zoomLevels,
|
|
144
145
|
magic,
|
|
@@ -149,7 +150,7 @@ class BBI {
|
|
|
149
150
|
definedFieldCount,
|
|
150
151
|
uncompressBufSize,
|
|
151
152
|
asOffset,
|
|
152
|
-
|
|
153
|
+
chromosomeTreeOffset,
|
|
153
154
|
totalSummaryOffset,
|
|
154
155
|
unzoomedDataOffset,
|
|
155
156
|
unzoomedIndexOffset,
|
|
@@ -160,11 +161,14 @@ class BBI {
|
|
|
160
161
|
: '',
|
|
161
162
|
};
|
|
162
163
|
}
|
|
163
|
-
|
|
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) {
|
|
164
168
|
const refsByNumber = [];
|
|
165
169
|
const refsByName = {};
|
|
166
|
-
const
|
|
167
|
-
const dataView = getDataView(await this.bbi.read(32,
|
|
170
|
+
const chromosomeTreeOffset = header.chromosomeTreeOffset;
|
|
171
|
+
const dataView = getDataView(await this.bbi.read(32, chromosomeTreeOffset, opts));
|
|
168
172
|
let offset = 0;
|
|
169
173
|
// const magic = dataView.getUint32(offset, true) // unused
|
|
170
174
|
offset += 4;
|
|
@@ -176,8 +180,8 @@ class BBI {
|
|
|
176
180
|
offset += 4;
|
|
177
181
|
// const itemCount = dataView.getBigUint64(offset, true) // unused
|
|
178
182
|
offset += 8;
|
|
179
|
-
|
|
180
|
-
const
|
|
183
|
+
// Recursively traverses the B+ tree to populate chromosome name-to-ID mappings
|
|
184
|
+
const readBPlusTreeNode = async (currentOffset) => {
|
|
181
185
|
const b = await this.bbi.read(4, currentOffset);
|
|
182
186
|
const dataView = getDataView(b);
|
|
183
187
|
let offset = 0;
|
|
@@ -187,14 +191,17 @@ class BBI {
|
|
|
187
191
|
offset += 1;
|
|
188
192
|
const count = dataView.getUint16(offset, true);
|
|
189
193
|
offset += 2;
|
|
194
|
+
// Leaf nodes contain the actual chromosome name-to-ID mappings
|
|
190
195
|
if (isLeafNode) {
|
|
191
196
|
const b = await this.bbi.read(count * (keySize + valSize), currentOffset + offset);
|
|
192
197
|
const dataView = getDataView(b);
|
|
193
198
|
offset = 0;
|
|
194
199
|
for (let n = 0; n < count; n++) {
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
|
|
200
|
+
const keyEnd = b.indexOf(0, offset);
|
|
201
|
+
const effectiveKeyEnd = keyEnd !== -1 && keyEnd < offset + keySize
|
|
202
|
+
? keyEnd
|
|
203
|
+
: offset + keySize;
|
|
204
|
+
const key = decoder.decode(b.subarray(offset, effectiveKeyEnd));
|
|
198
205
|
offset += keySize;
|
|
199
206
|
const refId = dataView.getUint32(offset, true);
|
|
200
207
|
offset += 4;
|
|
@@ -209,6 +216,7 @@ class BBI {
|
|
|
209
216
|
}
|
|
210
217
|
}
|
|
211
218
|
else {
|
|
219
|
+
// Non-leaf nodes contain pointers to child nodes
|
|
212
220
|
const nextNodes = [];
|
|
213
221
|
const dataView = getDataView(await this.bbi.read(count * (keySize + 8), currentOffset + offset));
|
|
214
222
|
offset = 0;
|
|
@@ -216,12 +224,12 @@ class BBI {
|
|
|
216
224
|
offset += keySize;
|
|
217
225
|
const childOffset = Number(dataView.getBigUint64(offset, true));
|
|
218
226
|
offset += 8;
|
|
219
|
-
nextNodes.push(
|
|
227
|
+
nextNodes.push(readBPlusTreeNode(childOffset));
|
|
220
228
|
}
|
|
221
229
|
await Promise.all(nextNodes);
|
|
222
230
|
}
|
|
223
231
|
};
|
|
224
|
-
await
|
|
232
|
+
await readBPlusTreeNode(chromosomeTreeOffset + 32);
|
|
225
233
|
return {
|
|
226
234
|
refsByName,
|
|
227
235
|
refsByNumber,
|
|
@@ -233,7 +241,7 @@ class BBI {
|
|
|
233
241
|
*/
|
|
234
242
|
async getUnzoomedView(opts) {
|
|
235
243
|
const { unzoomedIndexOffset, refsByName, uncompressBufSize, fileType } = await this.getHeader(opts);
|
|
236
|
-
return new block_view_ts_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, uncompressBufSize
|
|
244
|
+
return new block_view_ts_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, uncompressBufSize, fileType);
|
|
237
245
|
}
|
|
238
246
|
/**
|
|
239
247
|
* Gets features from a BigWig file
|
|
@@ -271,8 +279,63 @@ class BBI {
|
|
|
271
279
|
}
|
|
272
280
|
async getFeatures(refName, start, end, opts) {
|
|
273
281
|
const ob = await this.getFeatureStream(refName, start, end, opts);
|
|
274
|
-
const
|
|
275
|
-
|
|
282
|
+
const arrays = await (0, rxjs_1.firstValueFrom)(ob.pipe((0, operators_1.toArray)()));
|
|
283
|
+
const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
|
|
284
|
+
const result = new Array(totalLength);
|
|
285
|
+
let index = 0;
|
|
286
|
+
for (const arr of arrays) {
|
|
287
|
+
for (const item of arr) {
|
|
288
|
+
result[index++] = item;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return result;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Gets features from a BigWig file as typed arrays (more efficient than getFeatures)
|
|
295
|
+
*
|
|
296
|
+
* @param refName - The chromosome name
|
|
297
|
+
* @param start - The start of a region
|
|
298
|
+
* @param end - The end of a region
|
|
299
|
+
* @param opts - Options including basesPerSpan or scale
|
|
300
|
+
* @returns Promise with typed arrays: starts, ends, scores (and minScores/maxScores for summary data)
|
|
301
|
+
*/
|
|
302
|
+
async getFeaturesAsArrays(refName, start, end, opts) {
|
|
303
|
+
const features = await this.getFeatures(refName, start, end, opts);
|
|
304
|
+
const count = features.length;
|
|
305
|
+
if (count === 0) {
|
|
306
|
+
return {
|
|
307
|
+
starts: new Int32Array(0),
|
|
308
|
+
ends: new Int32Array(0),
|
|
309
|
+
scores: new Float32Array(0),
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
const hasSummary = features[0]?.summary === true;
|
|
313
|
+
if (hasSummary) {
|
|
314
|
+
const starts = new Int32Array(count);
|
|
315
|
+
const ends = new Int32Array(count);
|
|
316
|
+
const scores = new Float32Array(count);
|
|
317
|
+
const minScores = new Float32Array(count);
|
|
318
|
+
const maxScores = new Float32Array(count);
|
|
319
|
+
for (let i = 0; i < count; i++) {
|
|
320
|
+
const f = features[i];
|
|
321
|
+
starts[i] = f.start;
|
|
322
|
+
ends[i] = f.end;
|
|
323
|
+
scores[i] = f.score ?? 0;
|
|
324
|
+
minScores[i] = f.minScore ?? 0;
|
|
325
|
+
maxScores[i] = f.maxScore ?? 0;
|
|
326
|
+
}
|
|
327
|
+
return { starts, ends, scores, minScores, maxScores };
|
|
328
|
+
}
|
|
329
|
+
const starts = new Int32Array(count);
|
|
330
|
+
const ends = new Int32Array(count);
|
|
331
|
+
const scores = new Float32Array(count);
|
|
332
|
+
for (let i = 0; i < count; i++) {
|
|
333
|
+
const f = features[i];
|
|
334
|
+
starts[i] = f.start;
|
|
335
|
+
ends[i] = f.end;
|
|
336
|
+
scores[i] = f.score ?? 0;
|
|
337
|
+
}
|
|
338
|
+
return { starts, ends, scores };
|
|
276
339
|
}
|
|
277
340
|
}
|
|
278
341
|
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,9 +10,109 @@ 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
|
}
|
|
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
|
+
const effectiveKeyEnd = keyEnd !== -1 && keyEnd < offset + keySize ? keyEnd : offset + keySize;
|
|
36
|
+
return decoder.decode(buffer.subarray(offset, effectiveKeyEnd));
|
|
37
|
+
}
|
|
38
|
+
// Recursively traverses a B+ tree to search for a specific name in the BigBed extraIndex
|
|
39
|
+
// B+ trees are balanced tree structures optimized for disk-based searches
|
|
40
|
+
async function readBPlusTreeNode(bbi, nodeOffset, blockSize, keySize, valSize, name, field, opts) {
|
|
41
|
+
const len = 4 + blockSize * (keySize + valSize);
|
|
42
|
+
const buffer = await bbi.read(len, nodeOffset, opts);
|
|
43
|
+
const dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.length);
|
|
44
|
+
let offset = 0;
|
|
45
|
+
const nodeType = dataView.getInt8(offset);
|
|
46
|
+
offset += 2; // skip nodeType byte + 1 reserved byte
|
|
47
|
+
const cnt = dataView.getInt16(offset, true);
|
|
48
|
+
offset += 2;
|
|
49
|
+
// Non-leaf node (nodeType === 0): contains keys and child node pointers for navigation
|
|
50
|
+
if (nodeType === 0) {
|
|
51
|
+
const leafkeys = [];
|
|
52
|
+
for (let i = 0; i < cnt; i++) {
|
|
53
|
+
const key = parseKey(buffer, offset, keySize);
|
|
54
|
+
offset += keySize;
|
|
55
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
56
|
+
offset += 8;
|
|
57
|
+
leafkeys.push({
|
|
58
|
+
key,
|
|
59
|
+
offset: dataOffset,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Binary search to find the appropriate child node
|
|
63
|
+
let left = 0;
|
|
64
|
+
let right = leafkeys.length - 1;
|
|
65
|
+
let targetIndex = leafkeys.length - 1;
|
|
66
|
+
while (left <= right) {
|
|
67
|
+
const mid = Math.floor((left + right) / 2);
|
|
68
|
+
const cmp = name.localeCompare(leafkeys[mid].key);
|
|
69
|
+
if (cmp < 0) {
|
|
70
|
+
targetIndex = mid - 1;
|
|
71
|
+
right = mid - 1;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
left = mid + 1;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const childOffset = targetIndex >= 0 ? leafkeys[targetIndex].offset : leafkeys[0].offset;
|
|
78
|
+
return readBPlusTreeNode(bbi, childOffset, blockSize, keySize, valSize, name, field, opts);
|
|
79
|
+
}
|
|
80
|
+
else if (nodeType === 1) {
|
|
81
|
+
// Leaf node (nodeType === 1): contains actual key-value data
|
|
82
|
+
const keys = [];
|
|
83
|
+
for (let i = 0; i < cnt; i++) {
|
|
84
|
+
const key = parseKey(buffer, offset, keySize);
|
|
85
|
+
offset += keySize;
|
|
86
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
87
|
+
offset += 8;
|
|
88
|
+
const length = dataView.getUint32(offset, true);
|
|
89
|
+
offset += 4;
|
|
90
|
+
offset += 4; // skip reserved
|
|
91
|
+
keys.push({
|
|
92
|
+
key,
|
|
93
|
+
offset: dataOffset,
|
|
94
|
+
length,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// Binary search for exact key match in sorted leaf node
|
|
98
|
+
let left = 0;
|
|
99
|
+
let right = keys.length - 1;
|
|
100
|
+
while (left <= right) {
|
|
101
|
+
const mid = Math.floor((left + right) / 2);
|
|
102
|
+
const cmp = name.localeCompare(keys[mid].key);
|
|
103
|
+
if (cmp === 0) {
|
|
104
|
+
return { ...keys[mid], field };
|
|
105
|
+
}
|
|
106
|
+
else if (cmp < 0) {
|
|
107
|
+
right = mid - 1;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
left = mid + 1;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
16
116
|
class BigBed extends bbi_ts_1.BBI {
|
|
17
117
|
readIndicesCache = new abortable_promise_cache_1.default({
|
|
18
118
|
cache: new quick_lru_1.default({ maxSize: 1 }),
|
|
@@ -63,7 +163,7 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
63
163
|
const fieldcount = dataView.getInt16(offset, true);
|
|
64
164
|
offset += 2;
|
|
65
165
|
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
66
|
-
offset += 8 + 4; //4
|
|
166
|
+
offset += 8 + 4; // skip 8-byte offset + 4 reserved bytes
|
|
67
167
|
const field = dataView.getInt16(offset, true);
|
|
68
168
|
indices.push({
|
|
69
169
|
type,
|
|
@@ -89,7 +189,6 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
89
189
|
if (indices.length === 0) {
|
|
90
190
|
return [];
|
|
91
191
|
}
|
|
92
|
-
const decoder = new TextDecoder('utf8');
|
|
93
192
|
const locs = indices.map(async (index) => {
|
|
94
193
|
const { offset: offset2, field } = index;
|
|
95
194
|
const b = await this.bbi.read(32, offset2, opts);
|
|
@@ -105,72 +204,7 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
105
204
|
offset += 4;
|
|
106
205
|
// const _itemCount = Number(dataView.getBigUint64(offset, true))
|
|
107
206
|
offset += 8;
|
|
108
|
-
|
|
109
|
-
const val = nodeOffset;
|
|
110
|
-
const len = 4 + blockSize * (keySize + valSize);
|
|
111
|
-
const buffer = await this.bbi.read(len, val, opts);
|
|
112
|
-
const b = buffer;
|
|
113
|
-
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
114
|
-
let offset = 0;
|
|
115
|
-
const nodeType = dataView.getInt8(offset);
|
|
116
|
-
offset += 2; //skip 1
|
|
117
|
-
const cnt = dataView.getInt16(offset, true);
|
|
118
|
-
offset += 2;
|
|
119
|
-
const keys = [];
|
|
120
|
-
if (nodeType === 0) {
|
|
121
|
-
const leafkeys = [];
|
|
122
|
-
for (let i = 0; i < cnt; i++) {
|
|
123
|
-
const key = decoder
|
|
124
|
-
.decode(b.subarray(offset, offset + keySize))
|
|
125
|
-
.replaceAll('\0', '');
|
|
126
|
-
offset += keySize;
|
|
127
|
-
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
128
|
-
offset += 8;
|
|
129
|
-
leafkeys.push({
|
|
130
|
-
key,
|
|
131
|
-
offset: dataOffset,
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
let lastOffset = 0;
|
|
135
|
-
for (const { key, offset } of leafkeys) {
|
|
136
|
-
if (name.localeCompare(key) < 0 && lastOffset) {
|
|
137
|
-
return bptReadNode(lastOffset);
|
|
138
|
-
}
|
|
139
|
-
lastOffset = offset;
|
|
140
|
-
}
|
|
141
|
-
return bptReadNode(lastOffset);
|
|
142
|
-
}
|
|
143
|
-
else if (nodeType === 1) {
|
|
144
|
-
for (let i = 0; i < cnt; i++) {
|
|
145
|
-
const key = decoder
|
|
146
|
-
.decode(b.subarray(offset, offset + keySize))
|
|
147
|
-
.replaceAll('\0', '');
|
|
148
|
-
offset += keySize;
|
|
149
|
-
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
150
|
-
offset += 8;
|
|
151
|
-
const length = dataView.getUint32(offset, true);
|
|
152
|
-
offset += 4;
|
|
153
|
-
const reserved = dataView.getUint32(offset, true);
|
|
154
|
-
offset += 4;
|
|
155
|
-
keys.push({
|
|
156
|
-
key,
|
|
157
|
-
offset: dataOffset,
|
|
158
|
-
length,
|
|
159
|
-
reserved,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
for (const n of keys) {
|
|
163
|
-
if (n.key === name) {
|
|
164
|
-
return {
|
|
165
|
-
...n,
|
|
166
|
-
field,
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return undefined;
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
return bptReadNode(offset2 + 32);
|
|
207
|
+
return readBPlusTreeNode(this.bbi, offset2 + 32, blockSize, keySize, valSize, name, field, opts);
|
|
174
208
|
});
|
|
175
209
|
return filterUndef(await Promise.all(locs));
|
|
176
210
|
}
|
|
@@ -181,7 +215,7 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
181
215
|
*
|
|
182
216
|
* @param name - the name to search for
|
|
183
217
|
*
|
|
184
|
-
* @param opts - options object with optional
|
|
218
|
+
* @param opts - options object with optional AbortSignal
|
|
185
219
|
*
|
|
186
220
|
* @return array of Feature
|
|
187
221
|
*/
|
|
@@ -196,15 +230,21 @@ class BigBed extends bbi_ts_1.BBI {
|
|
|
196
230
|
view.readFeatures(observer, [block], opts).catch((e) => {
|
|
197
231
|
observer.error(e);
|
|
198
232
|
});
|
|
199
|
-
}).pipe((0, operators_1.reduce)((acc, curr) =>
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
return x;
|
|
204
|
-
}));
|
|
233
|
+
}).pipe((0, operators_1.reduce)((acc, curr) => {
|
|
234
|
+
acc.push(...curr);
|
|
235
|
+
return acc;
|
|
236
|
+
}, []), (0, operators_1.map)(features => features.map(f => ({ ...f, field: block.field }))));
|
|
205
237
|
});
|
|
206
238
|
const ret = await (0, rxjs_1.firstValueFrom)((0, rxjs_1.merge)(...res));
|
|
207
|
-
|
|
239
|
+
// Filter to features where the indexed field matches the search name
|
|
240
|
+
// field offset is adjusted by -3 to account for chrom, chromStart, chromEnd columns
|
|
241
|
+
return ret.filter(f => {
|
|
242
|
+
if (!f.rest) {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
const fieldIndex = (f.field || 0) - 3;
|
|
246
|
+
return getTabField(f.rest, fieldIndex) === name;
|
|
247
|
+
});
|
|
208
248
|
}
|
|
209
249
|
}
|
|
210
250
|
exports.BigBed = BigBed;
|