@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.
Files changed (90) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +59 -0
  3. package/dist/bbi.d.ts +13 -3
  4. package/dist/bbi.js +80 -17
  5. package/dist/bbi.js.map +1 -1
  6. package/dist/bigbed.d.ts +14 -2
  7. package/dist/bigbed.js +116 -76
  8. package/dist/bigbed.js.map +1 -1
  9. package/dist/bigwig.js +1 -2
  10. package/dist/bigwig.js.map +1 -1
  11. package/dist/block-view.d.ts +13 -4
  12. package/dist/block-view.js +324 -148
  13. package/dist/block-view.js.map +1 -1
  14. package/dist/index.d.ts +2 -1
  15. package/dist/index.js +3 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/parse-bigwig.d.ts +3 -0
  18. package/dist/parse-bigwig.js +15 -0
  19. package/dist/parse-bigwig.js.map +1 -0
  20. package/dist/range.js +11 -24
  21. package/dist/range.js.map +1 -1
  22. package/dist/types.d.ts +14 -2
  23. package/dist/unzip.d.ts +18 -1
  24. package/dist/unzip.js +33 -4
  25. package/dist/unzip.js.map +1 -1
  26. package/dist/util.d.ts +2 -4
  27. package/dist/util.js +6 -5
  28. package/dist/util.js.map +1 -1
  29. package/dist/wasm/inflate-wasm-inlined.d.ts +18 -0
  30. package/dist/wasm/inflate-wasm-inlined.js +455 -0
  31. package/dist/wasm/inflate-wasm-inlined.js.map +1 -0
  32. package/dist/wasm/inflate_wasm.d.ts +1 -0
  33. package/dist/wasm/inflate_wasm.js +43 -0
  34. package/dist/wasm/inflate_wasm.js.map +1 -0
  35. package/dist/wasm/inflate_wasm_bg.d.ts +68 -0
  36. package/dist/wasm/inflate_wasm_bg.js +307 -0
  37. package/dist/wasm/inflate_wasm_bg.js.map +1 -0
  38. package/esm/bbi.d.ts +13 -3
  39. package/esm/bbi.js +80 -17
  40. package/esm/bbi.js.map +1 -1
  41. package/esm/bigbed.d.ts +14 -2
  42. package/esm/bigbed.js +116 -76
  43. package/esm/bigbed.js.map +1 -1
  44. package/esm/bigwig.js +1 -2
  45. package/esm/bigwig.js.map +1 -1
  46. package/esm/block-view.d.ts +13 -4
  47. package/esm/block-view.js +326 -150
  48. package/esm/block-view.js.map +1 -1
  49. package/esm/index.d.ts +2 -1
  50. package/esm/index.js +1 -0
  51. package/esm/index.js.map +1 -1
  52. package/esm/parse-bigwig.d.ts +3 -0
  53. package/esm/parse-bigwig.js +12 -0
  54. package/esm/parse-bigwig.js.map +1 -0
  55. package/esm/range.js +11 -24
  56. package/esm/range.js.map +1 -1
  57. package/esm/types.d.ts +14 -2
  58. package/esm/unzip.d.ts +18 -1
  59. package/esm/unzip.js +30 -3
  60. package/esm/unzip.js.map +1 -1
  61. package/esm/util.d.ts +2 -4
  62. package/esm/util.js +6 -5
  63. package/esm/util.js.map +1 -1
  64. package/esm/wasm/inflate-wasm-inlined.d.ts +18 -0
  65. package/esm/wasm/inflate-wasm-inlined.js +449 -0
  66. package/esm/wasm/inflate-wasm-inlined.js.map +1 -0
  67. package/esm/wasm/inflate_wasm.d.ts +1 -0
  68. package/esm/wasm/inflate_wasm.js +5 -0
  69. package/esm/wasm/inflate_wasm.js.map +1 -0
  70. package/esm/wasm/inflate_wasm_bg.d.ts +68 -0
  71. package/esm/wasm/inflate_wasm_bg.js +296 -0
  72. package/esm/wasm/inflate_wasm_bg.js.map +1 -0
  73. package/package.json +17 -12
  74. package/src/bbi.ts +102 -20
  75. package/src/bigbed.ts +157 -80
  76. package/src/bigwig.ts +1 -2
  77. package/src/block-view.ts +418 -156
  78. package/src/index.ts +8 -1
  79. package/src/parse-bigwig.ts +19 -0
  80. package/src/range.ts +13 -21
  81. package/src/types.ts +19 -2
  82. package/src/unzip.ts +86 -3
  83. package/src/util.ts +9 -10
  84. package/src/wasm/inflate-wasm-inlined.d.ts +49 -0
  85. package/src/wasm/inflate-wasm-inlined.js +547 -0
  86. package/src/wasm/inflate_wasm.d.ts +35 -0
  87. package/src/wasm/inflate_wasm.js +4 -0
  88. package/src/wasm/inflate_wasm_bg.js +309 -0
  89. package/src/wasm/inflate_wasm_bg.wasm +0 -0
  90. package/src/wasm/inflate_wasm_bg.wasm.d.ts +13 -0
@@ -0,0 +1,68 @@
1
+ export function __wbg_set_wasm(val: any): void;
2
+ /**
3
+ * Combined decompress + parse for BigWig blocks
4
+ * Returns same format as parse_bigwig_block but handles multiple compressed blocks
5
+ * @param {Uint8Array} inputs
6
+ * @param {Uint32Array} input_offsets
7
+ * @param {Uint32Array} input_lengths
8
+ * @param {number} max_block_size
9
+ * @param {number} req_start
10
+ * @param {number} req_end
11
+ * @returns {Uint8Array}
12
+ */
13
+ export function decompress_and_parse_bigwig(inputs: Uint8Array, input_offsets: Uint32Array, input_lengths: Uint32Array, max_block_size: number, req_start: number, req_end: number): Uint8Array;
14
+ /**
15
+ * Combined decompress + parse for summary blocks
16
+ * @param {Uint8Array} inputs
17
+ * @param {Uint32Array} input_offsets
18
+ * @param {Uint32Array} input_lengths
19
+ * @param {number} max_block_size
20
+ * @param {number} req_chr_id
21
+ * @param {number} req_start
22
+ * @param {number} req_end
23
+ * @returns {Uint8Array}
24
+ */
25
+ export function decompress_and_parse_summary(inputs: Uint8Array, input_offsets: Uint32Array, input_lengths: Uint32Array, max_block_size: number, req_chr_id: number, req_start: number, req_end: number): Uint8Array;
26
+ /**
27
+ * @param {Uint8Array} input
28
+ * @param {number} output_size
29
+ * @returns {Uint8Array}
30
+ */
31
+ export function inflate_raw(input: Uint8Array, output_size: number): Uint8Array;
32
+ /**
33
+ * @param {Uint8Array} inputs
34
+ * @param {Uint32Array} input_offsets
35
+ * @param {Uint32Array} input_lengths
36
+ * @param {number} max_block_size
37
+ * @returns {Uint8Array}
38
+ */
39
+ export function inflate_raw_batch(inputs: Uint8Array, input_offsets: Uint32Array, input_lengths: Uint32Array, max_block_size: number): Uint8Array;
40
+ /**
41
+ * @param {Uint8Array} input
42
+ * @returns {Uint8Array}
43
+ */
44
+ export function inflate_raw_unknown_size(input: Uint8Array): Uint8Array;
45
+ /**
46
+ * Parse a BigWig data block and return packed typed arrays
47
+ * Block types: 1 = bedGraph, 2 = varstep, 3 = fixedstep
48
+ *
49
+ * Returns packed binary: [count: u32][starts: i32*count][ends: i32*count][scores: f32*count]
50
+ * @param {Uint8Array} data
51
+ * @param {number} req_start
52
+ * @param {number} req_end
53
+ * @returns {Uint8Array}
54
+ */
55
+ export function parse_bigwig_block(data: Uint8Array, req_start: number, req_end: number): Uint8Array;
56
+ /**
57
+ * Parse a BigWig summary block and return packed typed arrays
58
+ * Summary blocks contain: chromId, start, end, validCnt, minScore, maxScore, sumData, sumSqData
59
+ *
60
+ * Returns: [count: u32][starts: i32*n][ends: i32*n][scores: f32*n][minScores: f32*n][maxScores: f32*n]
61
+ * @param {Uint8Array} data
62
+ * @param {number} req_chr_id
63
+ * @param {number} req_start
64
+ * @param {number} req_end
65
+ * @returns {Uint8Array}
66
+ */
67
+ export function parse_summary_block(data: Uint8Array, req_chr_id: number, req_start: number, req_end: number): Uint8Array;
68
+ export function __wbg_Error_52673b7de5a0ca89(arg0: any, arg1: any): number;
@@ -0,0 +1,296 @@
1
+ let wasm;
2
+ export function __wbg_set_wasm(val) {
3
+ wasm = val;
4
+ }
5
+ function addHeapObject(obj) {
6
+ if (heap_next === heap.length)
7
+ heap.push(heap.length + 1);
8
+ const idx = heap_next;
9
+ heap_next = heap[idx];
10
+ heap[idx] = obj;
11
+ return idx;
12
+ }
13
+ function dropObject(idx) {
14
+ if (idx < 132)
15
+ return;
16
+ heap[idx] = heap_next;
17
+ heap_next = idx;
18
+ }
19
+ function getArrayU8FromWasm0(ptr, len) {
20
+ ptr = ptr >>> 0;
21
+ return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
22
+ }
23
+ let cachedDataViewMemory0 = null;
24
+ function getDataViewMemory0() {
25
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
26
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
27
+ }
28
+ return cachedDataViewMemory0;
29
+ }
30
+ function getStringFromWasm0(ptr, len) {
31
+ ptr = ptr >>> 0;
32
+ return decodeText(ptr, len);
33
+ }
34
+ let cachedUint32ArrayMemory0 = null;
35
+ function getUint32ArrayMemory0() {
36
+ if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {
37
+ cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);
38
+ }
39
+ return cachedUint32ArrayMemory0;
40
+ }
41
+ let cachedUint8ArrayMemory0 = null;
42
+ function getUint8ArrayMemory0() {
43
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
44
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
45
+ }
46
+ return cachedUint8ArrayMemory0;
47
+ }
48
+ function getObject(idx) { return heap[idx]; }
49
+ let heap = new Array(128).fill(undefined);
50
+ heap.push(undefined, null, true, false);
51
+ let heap_next = heap.length;
52
+ function passArray32ToWasm0(arg, malloc) {
53
+ const ptr = malloc(arg.length * 4, 4) >>> 0;
54
+ getUint32ArrayMemory0().set(arg, ptr / 4);
55
+ WASM_VECTOR_LEN = arg.length;
56
+ return ptr;
57
+ }
58
+ function passArray8ToWasm0(arg, malloc) {
59
+ const ptr = malloc(arg.length * 1, 1) >>> 0;
60
+ getUint8ArrayMemory0().set(arg, ptr / 1);
61
+ WASM_VECTOR_LEN = arg.length;
62
+ return ptr;
63
+ }
64
+ function takeObject(idx) {
65
+ const ret = getObject(idx);
66
+ dropObject(idx);
67
+ return ret;
68
+ }
69
+ let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
70
+ cachedTextDecoder.decode();
71
+ const MAX_SAFARI_DECODE_BYTES = 2146435072;
72
+ let numBytesDecoded = 0;
73
+ function decodeText(ptr, len) {
74
+ numBytesDecoded += len;
75
+ if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
76
+ cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
77
+ cachedTextDecoder.decode();
78
+ numBytesDecoded = len;
79
+ }
80
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
81
+ }
82
+ let WASM_VECTOR_LEN = 0;
83
+ /**
84
+ * Combined decompress + parse for BigWig blocks
85
+ * Returns same format as parse_bigwig_block but handles multiple compressed blocks
86
+ * @param {Uint8Array} inputs
87
+ * @param {Uint32Array} input_offsets
88
+ * @param {Uint32Array} input_lengths
89
+ * @param {number} max_block_size
90
+ * @param {number} req_start
91
+ * @param {number} req_end
92
+ * @returns {Uint8Array}
93
+ */
94
+ export function decompress_and_parse_bigwig(inputs, input_offsets, input_lengths, max_block_size, req_start, req_end) {
95
+ try {
96
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
97
+ const ptr0 = passArray8ToWasm0(inputs, wasm.__wbindgen_export);
98
+ const len0 = WASM_VECTOR_LEN;
99
+ const ptr1 = passArray32ToWasm0(input_offsets, wasm.__wbindgen_export);
100
+ const len1 = WASM_VECTOR_LEN;
101
+ const ptr2 = passArray32ToWasm0(input_lengths, wasm.__wbindgen_export);
102
+ const len2 = WASM_VECTOR_LEN;
103
+ wasm.decompress_and_parse_bigwig(retptr, ptr0, len0, ptr1, len1, ptr2, len2, max_block_size, req_start, req_end);
104
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
105
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
106
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
107
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
108
+ if (r3) {
109
+ throw takeObject(r2);
110
+ }
111
+ var v4 = getArrayU8FromWasm0(r0, r1).slice();
112
+ wasm.__wbindgen_export2(r0, r1 * 1, 1);
113
+ return v4;
114
+ }
115
+ finally {
116
+ wasm.__wbindgen_add_to_stack_pointer(16);
117
+ }
118
+ }
119
+ /**
120
+ * Combined decompress + parse for summary blocks
121
+ * @param {Uint8Array} inputs
122
+ * @param {Uint32Array} input_offsets
123
+ * @param {Uint32Array} input_lengths
124
+ * @param {number} max_block_size
125
+ * @param {number} req_chr_id
126
+ * @param {number} req_start
127
+ * @param {number} req_end
128
+ * @returns {Uint8Array}
129
+ */
130
+ export function decompress_and_parse_summary(inputs, input_offsets, input_lengths, max_block_size, req_chr_id, req_start, req_end) {
131
+ try {
132
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
133
+ const ptr0 = passArray8ToWasm0(inputs, wasm.__wbindgen_export);
134
+ const len0 = WASM_VECTOR_LEN;
135
+ const ptr1 = passArray32ToWasm0(input_offsets, wasm.__wbindgen_export);
136
+ const len1 = WASM_VECTOR_LEN;
137
+ const ptr2 = passArray32ToWasm0(input_lengths, wasm.__wbindgen_export);
138
+ const len2 = WASM_VECTOR_LEN;
139
+ wasm.decompress_and_parse_summary(retptr, ptr0, len0, ptr1, len1, ptr2, len2, max_block_size, req_chr_id, req_start, req_end);
140
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
141
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
142
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
143
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
144
+ if (r3) {
145
+ throw takeObject(r2);
146
+ }
147
+ var v4 = getArrayU8FromWasm0(r0, r1).slice();
148
+ wasm.__wbindgen_export2(r0, r1 * 1, 1);
149
+ return v4;
150
+ }
151
+ finally {
152
+ wasm.__wbindgen_add_to_stack_pointer(16);
153
+ }
154
+ }
155
+ /**
156
+ * @param {Uint8Array} input
157
+ * @param {number} output_size
158
+ * @returns {Uint8Array}
159
+ */
160
+ export function inflate_raw(input, output_size) {
161
+ try {
162
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
163
+ const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_export);
164
+ const len0 = WASM_VECTOR_LEN;
165
+ wasm.inflate_raw(retptr, ptr0, len0, output_size);
166
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
167
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
168
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
169
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
170
+ if (r3) {
171
+ throw takeObject(r2);
172
+ }
173
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
174
+ wasm.__wbindgen_export2(r0, r1 * 1, 1);
175
+ return v2;
176
+ }
177
+ finally {
178
+ wasm.__wbindgen_add_to_stack_pointer(16);
179
+ }
180
+ }
181
+ /**
182
+ * @param {Uint8Array} inputs
183
+ * @param {Uint32Array} input_offsets
184
+ * @param {Uint32Array} input_lengths
185
+ * @param {number} max_block_size
186
+ * @returns {Uint8Array}
187
+ */
188
+ export function inflate_raw_batch(inputs, input_offsets, input_lengths, max_block_size) {
189
+ try {
190
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
191
+ const ptr0 = passArray8ToWasm0(inputs, wasm.__wbindgen_export);
192
+ const len0 = WASM_VECTOR_LEN;
193
+ const ptr1 = passArray32ToWasm0(input_offsets, wasm.__wbindgen_export);
194
+ const len1 = WASM_VECTOR_LEN;
195
+ const ptr2 = passArray32ToWasm0(input_lengths, wasm.__wbindgen_export);
196
+ const len2 = WASM_VECTOR_LEN;
197
+ wasm.inflate_raw_batch(retptr, ptr0, len0, ptr1, len1, ptr2, len2, max_block_size);
198
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
199
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
200
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
201
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
202
+ if (r3) {
203
+ throw takeObject(r2);
204
+ }
205
+ var v4 = getArrayU8FromWasm0(r0, r1).slice();
206
+ wasm.__wbindgen_export2(r0, r1 * 1, 1);
207
+ return v4;
208
+ }
209
+ finally {
210
+ wasm.__wbindgen_add_to_stack_pointer(16);
211
+ }
212
+ }
213
+ /**
214
+ * @param {Uint8Array} input
215
+ * @returns {Uint8Array}
216
+ */
217
+ export function inflate_raw_unknown_size(input) {
218
+ try {
219
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
220
+ const ptr0 = passArray8ToWasm0(input, wasm.__wbindgen_export);
221
+ const len0 = WASM_VECTOR_LEN;
222
+ wasm.inflate_raw_unknown_size(retptr, ptr0, len0);
223
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
224
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
225
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
226
+ var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
227
+ if (r3) {
228
+ throw takeObject(r2);
229
+ }
230
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
231
+ wasm.__wbindgen_export2(r0, r1 * 1, 1);
232
+ return v2;
233
+ }
234
+ finally {
235
+ wasm.__wbindgen_add_to_stack_pointer(16);
236
+ }
237
+ }
238
+ /**
239
+ * Parse a BigWig data block and return packed typed arrays
240
+ * Block types: 1 = bedGraph, 2 = varstep, 3 = fixedstep
241
+ *
242
+ * Returns packed binary: [count: u32][starts: i32*count][ends: i32*count][scores: f32*count]
243
+ * @param {Uint8Array} data
244
+ * @param {number} req_start
245
+ * @param {number} req_end
246
+ * @returns {Uint8Array}
247
+ */
248
+ export function parse_bigwig_block(data, req_start, req_end) {
249
+ try {
250
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
251
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
252
+ const len0 = WASM_VECTOR_LEN;
253
+ wasm.parse_bigwig_block(retptr, ptr0, len0, req_start, req_end);
254
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
255
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
256
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
257
+ wasm.__wbindgen_export2(r0, r1 * 1, 1);
258
+ return v2;
259
+ }
260
+ finally {
261
+ wasm.__wbindgen_add_to_stack_pointer(16);
262
+ }
263
+ }
264
+ /**
265
+ * Parse a BigWig summary block and return packed typed arrays
266
+ * Summary blocks contain: chromId, start, end, validCnt, minScore, maxScore, sumData, sumSqData
267
+ *
268
+ * Returns: [count: u32][starts: i32*n][ends: i32*n][scores: f32*n][minScores: f32*n][maxScores: f32*n]
269
+ * @param {Uint8Array} data
270
+ * @param {number} req_chr_id
271
+ * @param {number} req_start
272
+ * @param {number} req_end
273
+ * @returns {Uint8Array}
274
+ */
275
+ export function parse_summary_block(data, req_chr_id, req_start, req_end) {
276
+ try {
277
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
278
+ const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
279
+ const len0 = WASM_VECTOR_LEN;
280
+ wasm.parse_summary_block(retptr, ptr0, len0, req_chr_id, req_start, req_end);
281
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
282
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
283
+ var v2 = getArrayU8FromWasm0(r0, r1).slice();
284
+ wasm.__wbindgen_export2(r0, r1 * 1, 1);
285
+ return v2;
286
+ }
287
+ finally {
288
+ wasm.__wbindgen_add_to_stack_pointer(16);
289
+ }
290
+ }
291
+ export function __wbg_Error_52673b7de5a0ca89(arg0, arg1) {
292
+ const ret = Error(getStringFromWasm0(arg0, arg1));
293
+ return addHeapObject(ret);
294
+ }
295
+ ;
296
+ //# sourceMappingURL=inflate_wasm_bg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inflate_wasm_bg.js","sourceRoot":"","sources":["../../src/wasm/inflate_wasm_bg.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gmod/bbi",
3
- "version": "7.1.0",
3
+ "version": "8.0.1",
4
4
  "description": "Parser for BigWig/BigBed files",
5
5
  "license": "MIT",
6
6
  "repository": "GMOD/bbi-js",
@@ -25,14 +25,17 @@
25
25
  ],
26
26
  "scripts": {
27
27
  "test": "vitest",
28
+ "benchonly": "vitest bench",
29
+ "bench": "./scripts/build-both-branches.sh \"$BRANCH1\" \"$BRANCH2\" && vitest bench",
28
30
  "lint": "eslint --report-unused-disable-directives --max-warnings 0",
29
31
  "format": "prettier --write .",
30
32
  "clean": "rimraf dist esm",
31
33
  "prebuild": "yarn clean",
34
+ "build:wasm": "./scripts/build-wasm.sh",
32
35
  "build:esm": "tsc --outDir esm",
33
36
  "build:es5": "tsc --module commonjs --outDir dist",
34
37
  "postbuild:es5": "echo '{\"type\": \"commonjs\"}' > dist/package.json",
35
- "build": "yarn build:esm && yarn build:es5",
38
+ "build": "yarn build:wasm && yarn build:esm && yarn build:es5",
36
39
  "preversion": "yarn lint && yarn test --run && yarn build",
37
40
  "version": "standard-changelog && git add CHANGELOG.md",
38
41
  "postversion": "git push origin master --follow-tags"
@@ -47,26 +50,28 @@
47
50
  ],
48
51
  "dependencies": {
49
52
  "@gmod/abortable-promise-cache": "^3.0.1",
50
- "generic-filehandle2": "^2.0.10",
51
- "pako-esm2": "^1.0.13",
53
+ "generic-filehandle2": "^2.0.16",
54
+ "pako-esm2": "^2.0.2",
52
55
  "quick-lru": "^4.0.0",
53
56
  "rxjs": "^7.8.0"
54
57
  },
55
58
  "devDependencies": {
56
59
  "@gmod/bed": "^2.1.2",
57
60
  "@types/node": "^24.10.0",
58
- "@typescript-eslint/eslint-plugin": "^8.4.0",
59
- "@typescript-eslint/parser": "^8.4.0",
60
- "@vitest/coverage-v8": "^4.0.6",
61
- "eslint": "^9.9.1",
61
+ "@typescript-eslint/eslint-plugin": "^8.50.0",
62
+ "@typescript-eslint/parser": "^8.50.0",
63
+ "@vitest/coverage-v8": "^4.0.15",
64
+ "eslint": "^9.39.2",
62
65
  "eslint-plugin-import": "^2.31.0",
63
66
  "eslint-plugin-unicorn": "^62.0.0",
64
- "prettier": "^3.2.5",
65
- "rimraf": "^6.0.1",
67
+ "prettier": "^3.7.4",
68
+ "rimraf": "^6.1.2",
66
69
  "standard-changelog": "^7.0.1",
67
70
  "typescript": "^5.1.6",
68
- "typescript-eslint": "^8.4.0",
69
- "vitest": "^4.0.6"
71
+ "typescript-eslint": "^8.50.0",
72
+ "vitest": "^4.0.15",
73
+ "webpack": "^5.104.0",
74
+ "webpack-cli": "^6.0.1"
70
75
  },
71
76
  "publishConfig": {
72
77
  "access": "public"
package/src/bbi.ts CHANGED
@@ -5,6 +5,7 @@ import { toArray } from 'rxjs/operators'
5
5
  import { BlockView } from './block-view.ts'
6
6
 
7
7
  import type {
8
+ BigWigFeatureArrays,
8
9
  BigWigHeader,
9
10
  BigWigHeaderWithRefNames,
10
11
  Feature,
@@ -12,6 +13,7 @@ import type {
12
13
  RequestOptions2,
13
14
  RequestOptions,
14
15
  Statistics,
16
+ SummaryFeatureArrays,
15
17
  ZoomLevel,
16
18
  } from './types.ts'
17
19
  import type { GenericFilehandle } from 'generic-filehandle2'
@@ -19,6 +21,8 @@ import type { GenericFilehandle } from 'generic-filehandle2'
19
21
  const BIG_WIG_MAGIC = -2003829722
20
22
  const BIG_BED_MAGIC = -2021002517
21
23
 
24
+ const decoder = new TextDecoder('utf8')
25
+
22
26
  function getDataView(buffer: Uint8Array) {
23
27
  return new DataView(buffer.buffer, buffer.byteOffset, buffer.length)
24
28
  }
@@ -71,7 +75,7 @@ export abstract class BBI {
71
75
 
72
76
  private async _getHeader(opts?: RequestOptions) {
73
77
  const header = await this._getMainHeader(opts)
74
- const chroms = await this._readChromTree(header, opts)
78
+ const chroms = await this._readChromosomeTree(header, opts)
75
79
  return {
76
80
  ...header,
77
81
  ...chroms,
@@ -96,7 +100,8 @@ export abstract class BBI {
96
100
  offset += 2
97
101
  const numZoomLevels = dataView.getUint16(offset, true)
98
102
  offset += 2
99
- const chromTreeOffset = Number(dataView.getBigUint64(offset, true))
103
+ // Offset to the B+ tree that maps chromosome names to integer IDs
104
+ const chromosomeTreeOffset = Number(dataView.getBigUint64(offset, true))
100
105
  offset += 8
101
106
  const unzoomedDataOffset = Number(dataView.getBigUint64(offset, true))
102
107
  offset += 8
@@ -166,7 +171,6 @@ export abstract class BBI {
166
171
  } else {
167
172
  throw new Error('no stats')
168
173
  }
169
- const decoder = new TextDecoder('utf8')
170
174
 
171
175
  return {
172
176
  zoomLevels,
@@ -178,7 +182,7 @@ export abstract class BBI {
178
182
  definedFieldCount,
179
183
  uncompressBufSize,
180
184
  asOffset,
181
- chromTreeOffset,
185
+ chromosomeTreeOffset,
182
186
  totalSummaryOffset,
183
187
  unzoomedDataOffset,
184
188
  unzoomedIndexOffset,
@@ -190,16 +194,21 @@ export abstract class BBI {
190
194
  }
191
195
  }
192
196
 
193
- private async _readChromTree(
197
+ // Reads the B+ tree that maps chromosome names to integer IDs
198
+ // This is part of the "cirTree" (combined ID R-tree) structure, which uses
199
+ // integer chromosome IDs instead of strings for more efficient spatial indexing
200
+ private async _readChromosomeTree(
194
201
  header: BigWigHeader,
195
202
  opts?: { signal?: AbortSignal },
196
203
  ) {
197
- const refsByNumber: Record<number, RefInfo> = []
198
- const refsByName: Record<string, number> = {}
204
+ const refsByNumber: RefInfo[] = []
205
+ const refsByName = {} as Record<string, number>
199
206
 
200
- const chromTreeOffset = header.chromTreeOffset
207
+ const chromosomeTreeOffset = header.chromosomeTreeOffset
201
208
 
202
- const dataView = getDataView(await this.bbi.read(32, chromTreeOffset, opts))
209
+ const dataView = getDataView(
210
+ await this.bbi.read(32, chromosomeTreeOffset, opts),
211
+ )
203
212
  let offset = 0
204
213
  // const magic = dataView.getUint32(offset, true) // unused
205
214
  offset += 4
@@ -212,9 +221,8 @@ export abstract class BBI {
212
221
  // const itemCount = dataView.getBigUint64(offset, true) // unused
213
222
  offset += 8
214
223
 
215
- const decoder = new TextDecoder('utf8')
216
-
217
- const bptReadNode = async (currentOffset: number) => {
224
+ // Recursively traverses the B+ tree to populate chromosome name-to-ID mappings
225
+ const readBPlusTreeNode = async (currentOffset: number) => {
218
226
  const b = await this.bbi.read(4, currentOffset)
219
227
  const dataView = getDataView(b)
220
228
  let offset = 0
@@ -225,6 +233,7 @@ export abstract class BBI {
225
233
  const count = dataView.getUint16(offset, true)
226
234
  offset += 2
227
235
 
236
+ // Leaf nodes contain the actual chromosome name-to-ID mappings
228
237
  if (isLeafNode) {
229
238
  const b = await this.bbi.read(
230
239
  count * (keySize + valSize),
@@ -234,9 +243,12 @@ export abstract class BBI {
234
243
  offset = 0
235
244
 
236
245
  for (let n = 0; n < count; n++) {
237
- const key = decoder
238
- .decode(b.subarray(offset, offset + keySize))
239
- .replaceAll('\0', '')
246
+ const keyEnd = b.indexOf(0, offset)
247
+ const effectiveKeyEnd =
248
+ keyEnd !== -1 && keyEnd < offset + keySize
249
+ ? keyEnd
250
+ : offset + keySize
251
+ const key = decoder.decode(b.subarray(offset, effectiveKeyEnd))
240
252
  offset += keySize
241
253
  const refId = dataView.getUint32(offset, true)
242
254
  offset += 4
@@ -251,6 +263,7 @@ export abstract class BBI {
251
263
  }
252
264
  }
253
265
  } else {
266
+ // Non-leaf nodes contain pointers to child nodes
254
267
  const nextNodes = []
255
268
  const dataView = getDataView(
256
269
  await this.bbi.read(count * (keySize + 8), currentOffset + offset),
@@ -261,12 +274,12 @@ export abstract class BBI {
261
274
  offset += keySize
262
275
  const childOffset = Number(dataView.getBigUint64(offset, true))
263
276
  offset += 8
264
- nextNodes.push(bptReadNode(childOffset))
277
+ nextNodes.push(readBPlusTreeNode(childOffset))
265
278
  }
266
279
  await Promise.all(nextNodes)
267
280
  }
268
281
  }
269
- await bptReadNode(chromTreeOffset + 32)
282
+ await readBPlusTreeNode(chromosomeTreeOffset + 32)
270
283
  return {
271
284
  refsByName,
272
285
  refsByNumber,
@@ -284,7 +297,7 @@ export abstract class BBI {
284
297
  this.bbi,
285
298
  refsByName,
286
299
  unzoomedIndexOffset,
287
- uncompressBufSize > 0,
300
+ uncompressBufSize,
288
301
  fileType,
289
302
  )
290
303
  }
@@ -345,7 +358,76 @@ export abstract class BBI {
345
358
  ) {
346
359
  const ob = await this.getFeatureStream(refName, start, end, opts)
347
360
 
348
- const ret = await firstValueFrom(ob.pipe(toArray()))
349
- return ret.flat()
361
+ const arrays = await firstValueFrom(ob.pipe(toArray()))
362
+ const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0)
363
+ const result = new Array(totalLength)
364
+ let index = 0
365
+ for (const arr of arrays) {
366
+ for (const item of arr) {
367
+ result[index++] = item
368
+ }
369
+ }
370
+ return result
371
+ }
372
+
373
+ /**
374
+ * Gets features from a BigWig file as typed arrays (more efficient than getFeatures)
375
+ *
376
+ * @param refName - The chromosome name
377
+ * @param start - The start of a region
378
+ * @param end - The end of a region
379
+ * @param opts - Options including basesPerSpan or scale
380
+ * @returns Promise with typed arrays: starts, ends, scores (and minScores/maxScores for summary data)
381
+ */
382
+ public async getFeaturesAsArrays(
383
+ refName: string,
384
+ start: number,
385
+ end: number,
386
+ opts?: RequestOptions2,
387
+ ): Promise<BigWigFeatureArrays | SummaryFeatureArrays> {
388
+ const features = await this.getFeatures(refName, start, end, opts)
389
+ const count = features.length
390
+
391
+ if (count === 0) {
392
+ return {
393
+ starts: new Int32Array(0),
394
+ ends: new Int32Array(0),
395
+ scores: new Float32Array(0),
396
+ }
397
+ }
398
+
399
+ const hasSummary = features[0]?.summary === true
400
+
401
+ if (hasSummary) {
402
+ const starts = new Int32Array(count)
403
+ const ends = new Int32Array(count)
404
+ const scores = new Float32Array(count)
405
+ const minScores = new Float32Array(count)
406
+ const maxScores = new Float32Array(count)
407
+
408
+ for (let i = 0; i < count; i++) {
409
+ const f = features[i]!
410
+ starts[i] = f.start
411
+ ends[i] = f.end
412
+ scores[i] = f.score ?? 0
413
+ minScores[i] = f.minScore ?? 0
414
+ maxScores[i] = f.maxScore ?? 0
415
+ }
416
+
417
+ return { starts, ends, scores, minScores, maxScores }
418
+ }
419
+
420
+ const starts = new Int32Array(count)
421
+ const ends = new Int32Array(count)
422
+ const scores = new Float32Array(count)
423
+
424
+ for (let i = 0; i < count; i++) {
425
+ const f = features[i]!
426
+ starts[i] = f.start
427
+ ends[i] = f.end
428
+ scores[i] = f.score ?? 0
429
+ }
430
+
431
+ return { starts, ends, scores }
350
432
  }
351
433
  }