@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/esm/bigbed.js
CHANGED
|
@@ -3,17 +3,113 @@ import QuickLRU from 'quick-lru';
|
|
|
3
3
|
import { Observable, firstValueFrom, merge } from 'rxjs';
|
|
4
4
|
import { map, reduce } from 'rxjs/operators';
|
|
5
5
|
import { BBI } from "./bbi.js";
|
|
6
|
+
const decoder = new TextDecoder('utf8');
|
|
6
7
|
export function filterUndef(ts) {
|
|
7
8
|
return ts.filter((t) => !!t);
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
function getTabField(str, fieldIndex) {
|
|
11
|
+
if (fieldIndex < 0) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
let start = 0;
|
|
15
|
+
for (let i = 0; i < fieldIndex; i++) {
|
|
16
|
+
start = str.indexOf('\t', start);
|
|
17
|
+
if (start === -1) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
start++;
|
|
21
|
+
}
|
|
22
|
+
const end = str.indexOf('\t', start);
|
|
23
|
+
return end === -1 ? str.slice(start) : str.slice(start, end);
|
|
24
|
+
}
|
|
25
|
+
// Parses a null-terminated string key from a B+ tree node
|
|
26
|
+
function parseKey(buffer, offset, keySize) {
|
|
27
|
+
const keyEnd = buffer.indexOf(0, offset);
|
|
28
|
+
return decoder.decode(buffer.subarray(offset, keyEnd !== -1 ? keyEnd : offset + keySize));
|
|
29
|
+
}
|
|
30
|
+
// Recursively traverses a B+ tree to search for a specific name in the BigBed extraIndex
|
|
31
|
+
// B+ trees are balanced tree structures optimized for disk-based searches
|
|
32
|
+
async function readBPlusTreeNode(bbi, nodeOffset, blockSize, keySize, valSize, name, field, opts) {
|
|
33
|
+
const len = 4 + blockSize * (keySize + valSize);
|
|
34
|
+
const buffer = await bbi.read(len, nodeOffset, opts);
|
|
35
|
+
const dataView = new DataView(buffer.buffer, buffer.byteOffset, buffer.length);
|
|
36
|
+
let offset = 0;
|
|
37
|
+
const nodeType = dataView.getInt8(offset);
|
|
38
|
+
offset += 2; // skip nodeType byte + 1 reserved byte
|
|
39
|
+
const cnt = dataView.getInt16(offset, true);
|
|
40
|
+
offset += 2;
|
|
41
|
+
// Non-leaf node (nodeType === 0): contains keys and child node pointers for navigation
|
|
42
|
+
if (nodeType === 0) {
|
|
43
|
+
const leafkeys = [];
|
|
44
|
+
for (let i = 0; i < cnt; i++) {
|
|
45
|
+
const key = parseKey(buffer, offset, keySize);
|
|
46
|
+
offset += keySize;
|
|
47
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
48
|
+
offset += 8;
|
|
49
|
+
leafkeys.push({
|
|
50
|
+
key,
|
|
51
|
+
offset: dataOffset,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
// Binary search to find the appropriate child node
|
|
55
|
+
let left = 0;
|
|
56
|
+
let right = leafkeys.length - 1;
|
|
57
|
+
let targetIndex = leafkeys.length - 1;
|
|
58
|
+
while (left <= right) {
|
|
59
|
+
const mid = Math.floor((left + right) / 2);
|
|
60
|
+
const cmp = name.localeCompare(leafkeys[mid].key);
|
|
61
|
+
if (cmp < 0) {
|
|
62
|
+
targetIndex = mid - 1;
|
|
63
|
+
right = mid - 1;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
left = mid + 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const childOffset = targetIndex >= 0 ? leafkeys[targetIndex].offset : leafkeys[0].offset;
|
|
70
|
+
return readBPlusTreeNode(bbi, childOffset, blockSize, keySize, valSize, name, field, opts);
|
|
71
|
+
}
|
|
72
|
+
else if (nodeType === 1) {
|
|
73
|
+
// Leaf node (nodeType === 1): contains actual key-value data
|
|
74
|
+
const keys = [];
|
|
75
|
+
for (let i = 0; i < cnt; i++) {
|
|
76
|
+
const key = parseKey(buffer, offset, keySize);
|
|
77
|
+
offset += keySize;
|
|
78
|
+
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
79
|
+
offset += 8;
|
|
80
|
+
const length = dataView.getUint32(offset, true);
|
|
81
|
+
offset += 4;
|
|
82
|
+
offset += 4; // skip reserved
|
|
83
|
+
keys.push({
|
|
84
|
+
key,
|
|
85
|
+
offset: dataOffset,
|
|
86
|
+
length,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// Binary search for exact key match in sorted leaf node
|
|
90
|
+
let left = 0;
|
|
91
|
+
let right = keys.length - 1;
|
|
92
|
+
while (left <= right) {
|
|
93
|
+
const mid = Math.floor((left + right) / 2);
|
|
94
|
+
const cmp = name.localeCompare(keys[mid].key);
|
|
95
|
+
if (cmp === 0) {
|
|
96
|
+
return { ...keys[mid], field };
|
|
97
|
+
}
|
|
98
|
+
else if (cmp < 0) {
|
|
99
|
+
right = mid - 1;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
left = mid + 1;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
16
106
|
}
|
|
107
|
+
}
|
|
108
|
+
export class BigBed extends BBI {
|
|
109
|
+
readIndicesCache = new AbortablePromiseCache({
|
|
110
|
+
cache: new QuickLRU({ maxSize: 1 }),
|
|
111
|
+
fill: (args, signal) => this._readIndices({ ...args, signal }),
|
|
112
|
+
});
|
|
17
113
|
readIndices(opts = {}) {
|
|
18
114
|
const { signal, ...rest } = opts;
|
|
19
115
|
return this.readIndicesCache.get(JSON.stringify(rest), opts, signal);
|
|
@@ -33,7 +129,7 @@ export class BigBed extends BBI {
|
|
|
33
129
|
*/
|
|
34
130
|
async _readIndices(opts) {
|
|
35
131
|
const { extHeaderOffset } = await this.getHeader(opts);
|
|
36
|
-
const b = await this.bbi.read(64,
|
|
132
|
+
const b = await this.bbi.read(64, extHeaderOffset);
|
|
37
133
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
38
134
|
let offset = 0;
|
|
39
135
|
// const _size = dataView.getUint16(offset, true)
|
|
@@ -48,7 +144,7 @@ export class BigBed extends BBI {
|
|
|
48
144
|
}
|
|
49
145
|
const blocklen = 20;
|
|
50
146
|
const len = blocklen * count;
|
|
51
|
-
const buffer = await this.bbi.read(len,
|
|
147
|
+
const buffer = await this.bbi.read(len, dataOffset);
|
|
52
148
|
const indices = [];
|
|
53
149
|
for (let i = 0; i < count; i += 1) {
|
|
54
150
|
const b = buffer.subarray(i * blocklen);
|
|
@@ -59,9 +155,14 @@ export class BigBed extends BBI {
|
|
|
59
155
|
const fieldcount = dataView.getInt16(offset, true);
|
|
60
156
|
offset += 2;
|
|
61
157
|
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
62
|
-
offset += 8 + 4; //4
|
|
158
|
+
offset += 8 + 4; // skip 8-byte offset + 4 reserved bytes
|
|
63
159
|
const field = dataView.getInt16(offset, true);
|
|
64
|
-
indices.push({
|
|
160
|
+
indices.push({
|
|
161
|
+
type,
|
|
162
|
+
fieldcount,
|
|
163
|
+
offset: dataOffset,
|
|
164
|
+
field,
|
|
165
|
+
});
|
|
65
166
|
}
|
|
66
167
|
return indices;
|
|
67
168
|
}
|
|
@@ -80,7 +181,6 @@ export class BigBed extends BBI {
|
|
|
80
181
|
if (indices.length === 0) {
|
|
81
182
|
return [];
|
|
82
183
|
}
|
|
83
|
-
const decoder = new TextDecoder('utf8');
|
|
84
184
|
const locs = indices.map(async (index) => {
|
|
85
185
|
const { offset: offset2, field } = index;
|
|
86
186
|
const b = await this.bbi.read(32, offset2, opts);
|
|
@@ -96,72 +196,7 @@ export class BigBed extends BBI {
|
|
|
96
196
|
offset += 4;
|
|
97
197
|
// const _itemCount = Number(dataView.getBigUint64(offset, true))
|
|
98
198
|
offset += 8;
|
|
99
|
-
|
|
100
|
-
const val = Number(nodeOffset);
|
|
101
|
-
const len = 4 + blockSize * (keySize + valSize);
|
|
102
|
-
const buffer = await this.bbi.read(len, val, opts);
|
|
103
|
-
const b = buffer;
|
|
104
|
-
const dataView = new DataView(b.buffer, b.byteOffset, b.length);
|
|
105
|
-
let offset = 0;
|
|
106
|
-
const nodeType = dataView.getInt8(offset);
|
|
107
|
-
offset += 2; //skip 1
|
|
108
|
-
const cnt = dataView.getInt16(offset, true);
|
|
109
|
-
offset += 2;
|
|
110
|
-
const keys = [];
|
|
111
|
-
if (nodeType === 0) {
|
|
112
|
-
const leafkeys = [];
|
|
113
|
-
for (let i = 0; i < cnt; i++) {
|
|
114
|
-
const key = decoder
|
|
115
|
-
.decode(b.subarray(offset, offset + keySize))
|
|
116
|
-
.replaceAll('\0', '');
|
|
117
|
-
offset += keySize;
|
|
118
|
-
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
119
|
-
offset += 8;
|
|
120
|
-
leafkeys.push({
|
|
121
|
-
key,
|
|
122
|
-
offset: dataOffset,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
let lastOffset = 0;
|
|
126
|
-
for (const { key, offset } of leafkeys) {
|
|
127
|
-
if (name.localeCompare(key) < 0 && lastOffset) {
|
|
128
|
-
return bptReadNode(lastOffset);
|
|
129
|
-
}
|
|
130
|
-
lastOffset = offset;
|
|
131
|
-
}
|
|
132
|
-
return bptReadNode(lastOffset);
|
|
133
|
-
}
|
|
134
|
-
else if (nodeType === 1) {
|
|
135
|
-
for (let i = 0; i < cnt; i++) {
|
|
136
|
-
const key = decoder
|
|
137
|
-
.decode(b.subarray(offset, offset + keySize))
|
|
138
|
-
.replaceAll('\0', '');
|
|
139
|
-
offset += keySize;
|
|
140
|
-
const dataOffset = Number(dataView.getBigUint64(offset, true));
|
|
141
|
-
offset += 8;
|
|
142
|
-
const length = dataView.getUint32(offset, true);
|
|
143
|
-
offset += 4;
|
|
144
|
-
const reserved = dataView.getUint32(offset, true);
|
|
145
|
-
offset += 4;
|
|
146
|
-
keys.push({
|
|
147
|
-
key,
|
|
148
|
-
offset: dataOffset,
|
|
149
|
-
length,
|
|
150
|
-
reserved,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
for (const n of keys) {
|
|
154
|
-
if (n.key === name) {
|
|
155
|
-
return {
|
|
156
|
-
...n,
|
|
157
|
-
field,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return undefined;
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
return bptReadNode(offset2 + 32);
|
|
199
|
+
return readBPlusTreeNode(this.bbi, offset2 + 32, blockSize, keySize, valSize, name, field, opts);
|
|
165
200
|
});
|
|
166
201
|
return filterUndef(await Promise.all(locs));
|
|
167
202
|
}
|
|
@@ -172,7 +207,7 @@ export class BigBed extends BBI {
|
|
|
172
207
|
*
|
|
173
208
|
* @param name - the name to search for
|
|
174
209
|
*
|
|
175
|
-
* @param opts - options object with optional
|
|
210
|
+
* @param opts - options object with optional AbortSignal
|
|
176
211
|
*
|
|
177
212
|
* @return array of Feature
|
|
178
213
|
*/
|
|
@@ -187,15 +222,21 @@ export class BigBed extends BBI {
|
|
|
187
222
|
view.readFeatures(observer, [block], opts).catch((e) => {
|
|
188
223
|
observer.error(e);
|
|
189
224
|
});
|
|
190
|
-
}).pipe(reduce((acc, curr) =>
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return x;
|
|
195
|
-
}));
|
|
225
|
+
}).pipe(reduce((acc, curr) => {
|
|
226
|
+
acc.push(...curr);
|
|
227
|
+
return acc;
|
|
228
|
+
}, []), map(features => features.map(f => ({ ...f, field: block.field }))));
|
|
196
229
|
});
|
|
197
230
|
const ret = await firstValueFrom(merge(...res));
|
|
198
|
-
|
|
231
|
+
// Filter to features where the indexed field matches the search name
|
|
232
|
+
// field offset is adjusted by -3 to account for chrom, chromStart, chromEnd columns
|
|
233
|
+
return ret.filter(f => {
|
|
234
|
+
if (!f.rest) {
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
const fieldIndex = (f.field || 0) - 3;
|
|
238
|
+
return getTabField(f.rest, fieldIndex) === name;
|
|
239
|
+
});
|
|
199
240
|
}
|
|
200
241
|
}
|
|
201
242
|
//# sourceMappingURL=bigbed.js.map
|
package/esm/bigbed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,+BAA+B,CAAA;AACjE,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,MAAM,CAAA;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"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"}
|
package/esm/bigwig.js
CHANGED
|
@@ -15,9 +15,8 @@ export class BigWig extends BBI {
|
|
|
15
15
|
const maxLevel = zoomLevels.length - 1;
|
|
16
16
|
for (let i = maxLevel; i >= 0; i -= 1) {
|
|
17
17
|
const zh = zoomLevels[i];
|
|
18
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
19
18
|
if (zh && zh.reductionLevel <= 2 * basesPerPx) {
|
|
20
|
-
return new BlockView(this.bbi, refsByName, zh.indexOffset, uncompressBufSize
|
|
19
|
+
return new BlockView(this.bbi, refsByName, zh.indexOffset, uncompressBufSize, 'summary');
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
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,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;;;OAOG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,GACjD,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,
|
|
1
|
+
{"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;;;OAOG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,GACjD,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,iBAAiB,EACjB,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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Feature } from './types.ts';
|
|
2
|
+
import type { BigWigFeatureArrays, SummaryFeatureArrays } from './unzip.ts';
|
|
2
3
|
import type { GenericFilehandle } from 'generic-filehandle2';
|
|
3
4
|
import type { Observer } from 'rxjs';
|
|
4
5
|
interface CoordRequest {
|
|
@@ -19,12 +20,12 @@ interface Options {
|
|
|
19
20
|
export declare class BlockView {
|
|
20
21
|
private bbi;
|
|
21
22
|
private refsByName;
|
|
22
|
-
private
|
|
23
|
-
private
|
|
23
|
+
private rTreeOffset;
|
|
24
|
+
private uncompressBufSize;
|
|
24
25
|
private blockType;
|
|
25
|
-
private
|
|
26
|
+
private rTreePromise?;
|
|
26
27
|
private featureCache;
|
|
27
|
-
constructor(bbi: GenericFilehandle, refsByName:
|
|
28
|
+
constructor(bbi: GenericFilehandle, refsByName: Record<string, number>, rTreeOffset: number, uncompressBufSize: number, blockType: string);
|
|
28
29
|
readWigData(chrName: string, start: number, end: number, observer: Observer<Feature[]>, opts?: Options): Promise<void>;
|
|
29
30
|
private parseSummaryBlock;
|
|
30
31
|
private parseBigBedBlock;
|
|
@@ -33,5 +34,13 @@ export declare class BlockView {
|
|
|
33
34
|
offset: number;
|
|
34
35
|
length: number;
|
|
35
36
|
}[], opts?: Options): Promise<void>;
|
|
37
|
+
readBigWigFeaturesAsArrays(blocks: {
|
|
38
|
+
offset: number;
|
|
39
|
+
length: number;
|
|
40
|
+
}[], opts?: Options): Promise<BigWigFeatureArrays>;
|
|
41
|
+
readSummaryFeaturesAsArrays(blocks: {
|
|
42
|
+
offset: number;
|
|
43
|
+
length: number;
|
|
44
|
+
}[], opts?: Options): Promise<SummaryFeatureArrays>;
|
|
36
45
|
}
|
|
37
46
|
export {};
|