@gmod/bbi 8.1.1 → 9.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.
Files changed (77) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +49 -53
  3. package/dist/array-feature-view.d.ts +4 -1
  4. package/dist/array-feature-view.js.map +1 -1
  5. package/dist/bbi.d.ts +5 -25
  6. package/dist/bbi.js +31 -133
  7. package/dist/bbi.js.map +1 -1
  8. package/dist/bigbed.d.ts +0 -1
  9. package/dist/bigbed.js +19 -51
  10. package/dist/bigbed.js.map +1 -1
  11. package/dist/bigwig.d.ts +1 -2
  12. package/dist/bigwig.js +1 -2
  13. package/dist/bigwig.js.map +1 -1
  14. package/dist/block-view.d.ts +7 -16
  15. package/dist/block-view.js +370 -440
  16. package/dist/block-view.js.map +1 -1
  17. package/dist/parse-bigwig.d.ts +2 -2
  18. package/dist/parse-bigwig.js +5 -5
  19. package/dist/parse-bigwig.js.map +1 -1
  20. package/dist/range.d.ts +1 -15
  21. package/dist/range.js +16 -49
  22. package/dist/range.js.map +1 -1
  23. package/dist/util.d.ts +0 -22
  24. package/dist/util.js +0 -46
  25. package/dist/util.js.map +1 -1
  26. package/dist/wasm/inflate-wasm-inlined.js +85 -86
  27. package/dist/wasm/inflate-wasm-inlined.js.map +1 -1
  28. package/dist/wasm/inflate_wasm.d.ts +1 -1
  29. package/dist/wasm/inflate_wasm.js +10 -4
  30. package/dist/wasm/inflate_wasm.js.map +1 -1
  31. package/dist/wasm/inflate_wasm_bg.d.ts +2 -2
  32. package/dist/wasm/inflate_wasm_bg.js +85 -86
  33. package/dist/wasm/inflate_wasm_bg.js.map +1 -1
  34. package/esm/array-feature-view.d.ts +4 -1
  35. package/esm/array-feature-view.js.map +1 -1
  36. package/esm/bbi.d.ts +5 -25
  37. package/esm/bbi.js +31 -133
  38. package/esm/bbi.js.map +1 -1
  39. package/esm/bigbed.d.ts +0 -1
  40. package/esm/bigbed.js +19 -50
  41. package/esm/bigbed.js.map +1 -1
  42. package/esm/bigwig.d.ts +1 -2
  43. package/esm/bigwig.js +1 -2
  44. package/esm/bigwig.js.map +1 -1
  45. package/esm/block-view.d.ts +7 -16
  46. package/esm/block-view.js +370 -440
  47. package/esm/block-view.js.map +1 -1
  48. package/esm/parse-bigwig.d.ts +2 -2
  49. package/esm/parse-bigwig.js +5 -5
  50. package/esm/parse-bigwig.js.map +1 -1
  51. package/esm/range.d.ts +1 -15
  52. package/esm/range.js +15 -48
  53. package/esm/range.js.map +1 -1
  54. package/esm/util.d.ts +0 -22
  55. package/esm/util.js +0 -42
  56. package/esm/util.js.map +1 -1
  57. package/esm/wasm/inflate-wasm-inlined.js +85 -86
  58. package/esm/wasm/inflate-wasm-inlined.js.map +1 -1
  59. package/esm/wasm/inflate_wasm.d.ts +1 -1
  60. package/esm/wasm/inflate_wasm.js +2 -1
  61. package/esm/wasm/inflate_wasm.js.map +1 -1
  62. package/esm/wasm/inflate_wasm_bg.d.ts +2 -2
  63. package/esm/wasm/inflate_wasm_bg.js +83 -84
  64. package/esm/wasm/inflate_wasm_bg.js.map +1 -1
  65. package/package.json +14 -16
  66. package/src/array-feature-view.ts +8 -0
  67. package/src/bbi.ts +50 -153
  68. package/src/bigbed.ts +22 -55
  69. package/src/bigwig.ts +1 -3
  70. package/src/block-view.ts +526 -634
  71. package/src/parse-bigwig.ts +7 -9
  72. package/src/range.ts +19 -58
  73. package/src/util.ts +0 -46
  74. package/src/wasm/inflate-wasm-inlined.js +101 -102
  75. package/src/wasm/inflate_wasm.js +7 -2
  76. package/src/wasm/inflate_wasm_bg.js +99 -100
  77. package/src/wasm/inflate_wasm_bg.wasm +0 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # [9.0.0](https://github.com/GMOD/bbi-js/compare/v8.1.2...v9.0.0) (2026-03-20)
2
+
3
+ ## [8.1.2](https://github.com/GMOD/bbi-js/compare/v8.1.1...v8.1.2) (2026-03-20)
4
+
1
5
  ## [8.1.1](https://github.com/GMOD/bbi-js/compare/v8.1.0...v8.1.1) (2026-01-06)
2
6
 
3
7
 
package/README.md CHANGED
@@ -6,47 +6,69 @@
6
6
 
7
7
  A parser for bigwig and bigbed file formats
8
8
 
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm install @gmod/bbi
13
+ ```
14
+
9
15
  ## Usage
10
16
 
11
- If using locally
17
+ ### Local files
12
18
 
13
19
  ```typescript
14
- const { BigWig } = require('@gmod/bbi')
15
- const file = new BigWig({
16
- path: 'volvox.bw',
17
- })
18
- ;(async () => {
19
- await file.getHeader()
20
- const feats = await file.getFeatures('chr1', 0, 100, { scale: 1 })
21
- })()
20
+ import { BigWig } from '@gmod/bbi'
21
+
22
+ const file = new BigWig({ path: 'volvox.bw' })
23
+ const header = await file.getHeader()
24
+ const features = await file.getFeatures('chr1', 0, 100, { scale: 1 })
22
25
  ```
23
26
 
24
- If using remotely, you can use it in combination with generic-filehandle2 or
25
- your own implementation of something like generic-filehandle2
26
- https://github.com/GMOD/generic-filehandle2/
27
+ ### Remote files
28
+
29
+ You can use the `url` option or provide a custom filehandle from
30
+ [generic-filehandle2](https://github.com/GMOD/generic-filehandle2/):
27
31
 
28
32
  ```typescript
29
- const { BigWig } = require('@gmod/bbi')
30
- const { RemoteFile } = require('generic-filehandle2')
33
+ import { BigWig } from '@gmod/bbi'
31
34
 
32
- // if running in the browser or newer versions of node.js, RemoteFile will use
33
- // the the global fetch
35
+ // Using url directly
34
36
  const file = new BigWig({
35
- filehandle: new RemoteFile('volvox.bw'),
37
+ url: 'https://example.com/file.bw',
36
38
  })
37
39
 
38
- // old versions of node.js without a global fetch, supply custom fetch function
39
- const fetch = require('node-fetch')
40
+ // Or with a custom RemoteFile instance
41
+ import { RemoteFile } from 'generic-filehandle2'
42
+
40
43
  const file = new BigWig({
41
- filehandle: new RemoteFile('volvox.bw', { fetch }),
44
+ filehandle: new RemoteFile('https://example.com/file.bw'),
42
45
  })
43
46
 
44
- ;(async () => {
45
- await file.getHeader()
46
- const feats = await file.getFeatures('chr1', 0, 100, { scale: 1 })
47
- })()
47
+ const header = await file.getHeader()
48
+ const features = await file.getFeatures('chr1', 0, 100, { scale: 1 })
48
49
  ```
49
50
 
51
+ ### Using without npm (CDN)
52
+
53
+ You can use this library directly in the browser without npm by importing from
54
+ an ESM CDN like [esm.sh](https://esm.sh) (note that we don't necessarily
55
+ recommend CDN usage, it is just a way to test things easily):
56
+
57
+ ```html
58
+ <script type="module">
59
+ import { BigWig } from 'https://esm.sh/@gmod/bbi'
60
+
61
+ const file = new BigWig({
62
+ url: 'https://example.com/file.bw',
63
+ })
64
+ const header = await file.getHeader()
65
+ const features = await file.getFeatures('chr1', 0, 100)
66
+ console.log(features)
67
+ </script>
68
+ ```
69
+
70
+ See the [example](./example/) folder for a complete working demo.
71
+
50
72
  ## Documentation
51
73
 
52
74
  ### BigWig/BigBed constructors
@@ -103,26 +125,6 @@ reductionLevel<2/opts.scale) when scanning backwards through this list
103
125
  { reductionLevel: 40960, ... },
104
126
  { reductionLevel: 163840, ... } ]
105
127
 
106
- #### getFeatureStream(refName, start, end, opts)
107
-
108
- Same as getFeatures but returns an RxJS observable stream, useful for very large
109
- queries
110
-
111
- ```typescript
112
- const observer = await bigwig.getFeatureStream('chr1', 0, 100)
113
- observer.subscribe(
114
- chunk => {
115
- /* chunk contains array of features with start, end, score */
116
- },
117
- error => {
118
- /* process error */
119
- },
120
- () => {
121
- /* completed */
122
- },
123
- )
124
- ```
125
-
126
128
  #### getFeaturesAsArrays(refName, start, end, opts)
127
129
 
128
130
  Same parameters as getFeatures, but returns typed arrays instead of an array of
@@ -200,10 +202,6 @@ they exist.
200
202
  returns a promise to an array of features. no concept of zoom levels is used
201
203
  with bigwig data
202
204
 
203
- #### getFeatureStream(refName, start, end, opts)
204
-
205
- Similar to BigWig, returns an RxJS observable for a observable stream
206
-
207
205
  #### searchExtraIndex(name, opts)
208
206
 
209
207
  Specific, to bigbed files, this method searches the bigBed "extra indexes",
@@ -233,11 +231,9 @@ this module, but can be combined with it as follows
233
231
  import { BigBed } from '@gmod/bbi'
234
232
  import BED from '@gmod/bed'
235
233
 
236
- const ti = new BigBed({
237
- filehandle: new LocalFile(require.resolve('./data/hg18.bb')),
238
- })
239
- const { autoSql } = await ti.getHeader()
240
- const feats = await ti.getFeatures('chr7', 0, 100000)
234
+ const file = new BigBed({ path: './data/hg18.bb' })
235
+ const { autoSql } = await file.getHeader()
236
+ const feats = await file.getFeatures('chr7', 0, 100000)
241
237
  const parser = new BED({ autoSql })
242
238
  const lines = feats.map(f => {
243
239
  const { start, end, rest, uniqueId } = f
@@ -18,5 +18,8 @@ export declare class ArrayFeatureView {
18
18
  minScore(i: number): number | undefined;
19
19
  maxScore(i: number): number | undefined;
20
20
  id(i: number): string;
21
- get(i: number, key: string): string | number | boolean | undefined;
21
+ get(i: number, key: 'refName' | 'source'): string;
22
+ get(i: number, key: 'start' | 'end' | 'score' | 'minScore' | 'maxScore'): number | undefined;
23
+ get(i: number, key: 'summary'): boolean;
24
+ get(i: number, key: string): any;
22
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"array-feature-view.js","sourceRoot":"","sources":["../src/array-feature-view.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IACX,MAAM,CAAY;IAClB,IAAI,CAAY;IAChB,MAAM,CAAc;IACpB,SAAS,CAA0B;IACnC,SAAS,CAA0B;IACnC,SAAS,CAAS;IAC1B,OAAO,CAAQ;IACf,QAAQ,CAAQ;IAExB,YACE,MAAkD,EAClD,MAAc,EACd,OAAe;QAEf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QACjC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;QAChE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;QAChE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,CAAS;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAA;IACxB,CAAC;IAED,GAAG,CAAC,CAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,CAAS;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAA;IACxB,CAAC;IAED,QAAQ,CAAC,CAAS;QAChB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAC;IAED,QAAQ,CAAC,CAAS;QAChB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAC;IAED,EAAE,CAAC,CAAS;QACV,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7E,CAAC;IAED,GAAG,CAAC,CAAS,EAAE,GAAW;QACxB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACrB,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,QAAQ,CAAA;YACtB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,OAAO,CAAA;YACrB,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5B,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5B,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,SAAS,CAAA;YACvB;gBACE,OAAO,SAAS,CAAA;QACpB,CAAC;IACH,CAAC;CACF;AAnFD,4CAmFC"}
1
+ {"version":3,"file":"array-feature-view.js","sourceRoot":"","sources":["../src/array-feature-view.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IACX,MAAM,CAAY;IAClB,IAAI,CAAY;IAChB,MAAM,CAAc;IACpB,SAAS,CAA0B;IACnC,SAAS,CAA0B;IACnC,SAAS,CAAS;IAC1B,OAAO,CAAQ;IACf,QAAQ,CAAQ;IAExB,YACE,MAAkD,EAClD,MAAc,EACd,OAAe;QAEf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QACjC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;QAChE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;QAChE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;IAC3B,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,CAAS;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAA;IACxB,CAAC;IAED,GAAG,CAAC,CAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAE,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,CAAS;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAA;IACxB,CAAC;IAED,QAAQ,CAAC,CAAS;QAChB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAC;IAED,QAAQ,CAAC,CAAS;QAChB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5B,CAAC;IAED,EAAE,CAAC,CAAS;QACV,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7E,CAAC;IAUD,GAAG,CAAC,CAAS,EAAE,GAAW;QACxB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACrB,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,QAAQ,CAAA;YACtB,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,OAAO,CAAA;YACrB,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5B,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5B,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,SAAS,CAAA;YACvB;gBACE,OAAO,SAAS,CAAA;QACpB,CAAC;IACH,CAAC;CACF;AA3FD,4CA2FC"}
package/dist/bbi.d.ts CHANGED
@@ -1,6 +1,5 @@
1
- import { Observable } from 'rxjs';
2
1
  import { BlockView } from './block-view.ts';
3
- import type { BigWigFeatureArrays, BigWigHeaderWithRefNames, Feature, RequestOptions2, RequestOptions, SummaryFeatureArrays } from './types.ts';
2
+ import type { BigWigFeatureArrays, BigWigHeaderWithRefNames, RequestOptions2, RequestOptions, SummaryFeatureArrays } from './types.ts';
4
3
  import type { GenericFilehandle } from 'generic-filehandle2';
5
4
  export declare abstract class BBI {
6
5
  protected bbi: GenericFilehandle;
@@ -16,30 +15,11 @@ export declare abstract class BBI {
16
15
  private _getHeader;
17
16
  private _getMainHeader;
18
17
  private _readChromosomeTree;
18
+ private viewCache;
19
+ protected getOrCreateBlockView(refsByName: Record<string, number>, rTreeOffset: number, uncompressBufSize: number, blockType: string): BlockView;
19
20
  protected getUnzoomedView(opts?: RequestOptions): Promise<BlockView>;
20
21
  protected abstract getView(scale: number, opts?: RequestOptions): Promise<BlockView>;
21
- /**
22
- * Gets features from a BigWig file
23
- *
24
- * @param refName - The chromosome name
25
- *
26
- * @param start - The start of a region
27
- *
28
- * @param end - The end of a region
29
- *
30
- * @param opts - An object containing basesPerSpan (e.g. pixels per basepair)
31
- * or scale used to infer the zoomLevel to use
32
- */
33
- getFeatureStream(refName: string, start: number, end: number, opts?: RequestOptions2): Promise<Observable<Feature[]>>;
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
- */
22
+ private _getView;
23
+ getFeatures(refName: string, start: number, end: number, opts?: RequestOptions2): Promise<import("./types.ts").Feature[]>;
44
24
  getFeaturesAsArrays(refName: string, start: number, end: number, opts?: RequestOptions2): Promise<BigWigFeatureArrays | SummaryFeatureArrays>;
45
25
  }
package/dist/bbi.js CHANGED
@@ -2,8 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BBI = void 0;
4
4
  const generic_filehandle2_1 = require("generic-filehandle2");
5
- const rxjs_1 = require("rxjs");
6
- const operators_1 = require("rxjs/operators");
7
5
  const block_view_ts_1 = require("./block-view.js");
8
6
  const BIG_WIG_MAGIC = -2003829722;
9
7
  const BIG_BED_MAGIC = -2021002517;
@@ -61,13 +59,12 @@ class BBI {
61
59
  async _getMainHeader(opts, requestSize = 2000) {
62
60
  const b = await this.bbi.read(requestSize, 0, opts);
63
61
  const dataView = getDataView(b);
64
- const r1 = dataView.getInt32(0, true);
65
- if (r1 !== BIG_WIG_MAGIC && r1 !== BIG_BED_MAGIC) {
66
- throw new Error('not a BigWig/BigBed file');
67
- }
68
62
  let offset = 0;
69
63
  const magic = dataView.getInt32(offset, true);
70
64
  offset += 4;
65
+ if (magic !== BIG_WIG_MAGIC && magic !== BIG_BED_MAGIC) {
66
+ throw new Error('not a BigWig/BigBed file');
67
+ }
71
68
  const version = dataView.getUint16(offset, true);
72
69
  offset += 2;
73
70
  const numZoomLevels = dataView.getUint16(offset, true);
@@ -128,7 +125,6 @@ class BBI {
128
125
  const scoreSum = dataView.getFloat64(offset, true);
129
126
  offset += 8;
130
127
  const scoreSumSquares = dataView.getFloat64(offset, true);
131
- offset += 8;
132
128
  totalSummary = {
133
129
  scoreMin,
134
130
  scoreMax,
@@ -169,33 +165,18 @@ class BBI {
169
165
  const refsByName = {};
170
166
  const chromosomeTreeOffset = header.chromosomeTreeOffset;
171
167
  const dataView = getDataView(await this.bbi.read(32, chromosomeTreeOffset, opts));
172
- let offset = 0;
173
- // const magic = dataView.getUint32(offset, true) // unused
174
- offset += 4;
175
- // const blockSize = dataView.getUint32(offset, true) // unused
176
- offset += 4;
177
- const keySize = dataView.getUint32(offset, true);
178
- offset += 4;
179
- const valSize = dataView.getUint32(offset, true);
180
- offset += 4;
181
- // const itemCount = dataView.getBigUint64(offset, true) // unused
182
- offset += 8;
168
+ const keySize = dataView.getUint32(8, true);
169
+ const valSize = dataView.getUint32(12, true);
183
170
  // Recursively traverses the B+ tree to populate chromosome name-to-ID mappings
184
171
  const readBPlusTreeNode = async (currentOffset) => {
185
- const b = await this.bbi.read(4, currentOffset);
186
- const dataView = getDataView(b);
187
- let offset = 0;
188
- const isLeafNode = dataView.getUint8(offset);
189
- offset += 1;
190
- // const reserved = dataView.getUint8(offset) // unused
191
- offset += 1;
192
- const count = dataView.getUint16(offset, true);
193
- offset += 2;
172
+ const header = getDataView(await this.bbi.read(4, currentOffset));
173
+ const isLeafNode = header.getUint8(0);
174
+ const count = header.getUint16(2, true);
194
175
  // Leaf nodes contain the actual chromosome name-to-ID mappings
195
176
  if (isLeafNode) {
196
- const b = await this.bbi.read(count * (keySize + valSize), currentOffset + offset);
177
+ const b = await this.bbi.read(count * (keySize + valSize), currentOffset + 4);
197
178
  const dataView = getDataView(b);
198
- offset = 0;
179
+ let offset = 0;
199
180
  for (let n = 0; n < count; n++) {
200
181
  const keyEnd = b.indexOf(0, offset);
201
182
  const effectiveKeyEnd = keyEnd !== -1 && keyEnd < offset + keySize
@@ -208,18 +189,14 @@ class BBI {
208
189
  const refSize = dataView.getUint32(offset, true);
209
190
  offset += 4;
210
191
  refsByName[this.renameRefSeqs(key)] = refId;
211
- refsByNumber[refId] = {
212
- name: key,
213
- id: refId,
214
- length: refSize,
215
- };
192
+ refsByNumber[refId] = { name: key, id: refId, length: refSize };
216
193
  }
217
194
  }
218
195
  else {
219
196
  // Non-leaf nodes contain pointers to child nodes
197
+ const dataView = getDataView(await this.bbi.read(count * (keySize + 8), currentOffset + 4));
220
198
  const nextNodes = [];
221
- const dataView = getDataView(await this.bbi.read(count * (keySize + 8), currentOffset + offset));
222
- offset = 0;
199
+ let offset = 0;
223
200
  for (let n = 0; n < count; n++) {
224
201
  offset += keySize;
225
202
  const childOffset = Number(dataView.getBigUint64(offset, true));
@@ -235,115 +212,36 @@ class BBI {
235
212
  refsByNumber,
236
213
  };
237
214
  }
215
+ viewCache = new Map();
216
+ getOrCreateBlockView(refsByName, rTreeOffset, uncompressBufSize, blockType) {
217
+ const key = `${rTreeOffset}_${blockType}`;
218
+ let view = this.viewCache.get(key);
219
+ if (!view) {
220
+ view = new block_view_ts_1.BlockView(this.bbi, refsByName, rTreeOffset, uncompressBufSize, blockType);
221
+ this.viewCache.set(key, view);
222
+ }
223
+ return view;
224
+ }
238
225
  /*
239
226
  * fetches the "unzoomed" view of the bigwig data. this is the default for bigbed
240
227
  * @param abortSignal - a signal to optionally abort this operation
241
228
  */
242
229
  async getUnzoomedView(opts) {
243
230
  const { unzoomedIndexOffset, refsByName, uncompressBufSize, fileType } = await this.getHeader(opts);
244
- return new block_view_ts_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, uncompressBufSize, fileType);
231
+ return this.getOrCreateBlockView(refsByName, unzoomedIndexOffset, uncompressBufSize, fileType);
245
232
  }
246
- /**
247
- * Gets features from a BigWig file
248
- *
249
- * @param refName - The chromosome name
250
- *
251
- * @param start - The start of a region
252
- *
253
- * @param end - The end of a region
254
- *
255
- * @param opts - An object containing basesPerSpan (e.g. pixels per basepair)
256
- * or scale used to infer the zoomLevel to use
257
- */
258
- async getFeatureStream(refName, start, end, opts) {
259
- await this.getHeader(opts);
260
- const chrName = this.renameRefSeqs(refName);
261
- let view;
233
+ async _getView(opts) {
262
234
  const { basesPerSpan, scale } = opts || {};
263
- if (basesPerSpan) {
264
- view = await this.getView(1 / basesPerSpan, opts);
265
- }
266
- else if (scale) {
267
- view = await this.getView(scale, opts);
268
- }
269
- else {
270
- view = await this.getView(1, opts);
271
- }
272
- return new rxjs_1.Observable(observer => {
273
- view
274
- .readWigData(chrName, start, end, observer, opts)
275
- .catch((e) => {
276
- observer.error(e);
277
- });
278
- });
235
+ const viewScale = basesPerSpan ? 1 / basesPerSpan : (scale ?? 1);
236
+ return this.getView(viewScale, opts);
279
237
  }
280
238
  async getFeatures(refName, start, end, opts) {
281
- const ob = await this.getFeatureStream(refName, start, end, opts);
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;
239
+ const view = await this._getView(opts);
240
+ return view.readWigData(this.renameRefSeqs(refName), start, end, opts);
292
241
  }
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
242
  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
- isSummary: false,
311
- };
312
- }
313
- const hasSummary = features[0]?.summary === true;
314
- if (hasSummary) {
315
- const starts = new Int32Array(count);
316
- const ends = new Int32Array(count);
317
- const scores = new Float32Array(count);
318
- const minScores = new Float32Array(count);
319
- const maxScores = new Float32Array(count);
320
- for (let i = 0; i < count; i++) {
321
- const f = features[i];
322
- starts[i] = f.start;
323
- ends[i] = f.end;
324
- scores[i] = f.score ?? 0;
325
- minScores[i] = f.minScore ?? 0;
326
- maxScores[i] = f.maxScore ?? 0;
327
- }
328
- return {
329
- starts,
330
- ends,
331
- scores,
332
- minScores,
333
- maxScores,
334
- isSummary: true,
335
- };
336
- }
337
- const starts = new Int32Array(count);
338
- const ends = new Int32Array(count);
339
- const scores = new Float32Array(count);
340
- for (let i = 0; i < count; i++) {
341
- const f = features[i];
342
- starts[i] = f.start;
343
- ends[i] = f.end;
344
- scores[i] = f.score ?? 0;
345
- }
346
- return { starts, ends, scores, isSummary: false };
243
+ const view = await this._getView(opts);
244
+ return view.readWigDataAsArrays(this.renameRefSeqs(refName), start, end, opts);
347
245
  }
348
246
  }
349
247
  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
@@ -7,7 +7,6 @@ interface Index {
7
7
  offset: number;
8
8
  field: number;
9
9
  }
10
- export declare function filterUndef<T>(ts: (T | undefined)[]): T[];
11
10
  export declare class BigBed extends BBI {
12
11
  readIndicesCache: AbortablePromiseCache<RequestOptions, Index[], string>;
13
12
  readIndices(opts?: RequestOptions): Promise<Index[]>;
package/dist/bigbed.js CHANGED
@@ -4,16 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.BigBed = void 0;
7
- exports.filterUndef = filterUndef;
8
7
  const abortable_promise_cache_1 = __importDefault(require("@gmod/abortable-promise-cache"));
9
8
  const quick_lru_1 = __importDefault(require("@jbrowse/quick-lru"));
10
- const rxjs_1 = require("rxjs");
11
- const operators_1 = require("rxjs/operators");
12
9
  const bbi_ts_1 = require("./bbi.js");
13
10
  const decoder = new TextDecoder('utf8');
14
- function filterUndef(ts) {
15
- return ts.filter((t) => !!t);
16
- }
17
11
  function getTabField(str, fieldIndex) {
18
12
  if (fieldIndex < 0) {
19
13
  return undefined;
@@ -41,11 +35,9 @@ async function readBPlusTreeNode(bbi, nodeOffset, blockSize, keySize, valSize, n
41
35
  const len = 4 + blockSize * (keySize + valSize);
42
36
  const buffer = await bbi.read(len, nodeOffset, opts);
43
37
  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;
38
+ const nodeType = dataView.getInt8(0);
39
+ const cnt = dataView.getInt16(2, true);
40
+ let offset = 4;
49
41
  // Non-leaf node (nodeType === 0): contains keys and child node pointers for navigation
50
42
  if (nodeType === 0) {
51
43
  const leafkeys = [];
@@ -139,13 +131,8 @@ class BigBed extends bbi_ts_1.BBI {
139
131
  const { extHeaderOffset } = await this.getHeader(opts);
140
132
  const b = await this.bbi.read(64, extHeaderOffset);
141
133
  const dataView = new DataView(b.buffer, b.byteOffset, b.length);
142
- let offset = 0;
143
- // const _size = dataView.getUint16(offset, true)
144
- offset += 2;
145
- const count = dataView.getUint16(offset, true);
146
- offset += 2;
147
- const dataOffset = Number(dataView.getBigUint64(offset, true));
148
- offset += 8;
134
+ const count = dataView.getUint16(2, true);
135
+ const dataOffset = Number(dataView.getBigUint64(4, true));
149
136
  // no extra index is defined if count==0
150
137
  if (count === 0) {
151
138
  return [];
@@ -157,14 +144,10 @@ class BigBed extends bbi_ts_1.BBI {
157
144
  for (let i = 0; i < count; i += 1) {
158
145
  const b = buffer.subarray(i * blocklen);
159
146
  const dataView = new DataView(b.buffer, b.byteOffset, b.length);
160
- let offset = 0;
161
- const type = dataView.getInt16(offset, true);
162
- offset += 2;
163
- const fieldcount = dataView.getInt16(offset, true);
164
- offset += 2;
165
- const dataOffset = Number(dataView.getBigUint64(offset, true));
166
- offset += 8 + 4; // skip 8-byte offset + 4 reserved bytes
167
- const field = dataView.getInt16(offset, true);
147
+ const type = dataView.getInt16(0, true);
148
+ const fieldcount = dataView.getInt16(2, true);
149
+ const dataOffset = Number(dataView.getBigUint64(4, true));
150
+ const field = dataView.getInt16(16, true);
168
151
  indices.push({
169
152
  type,
170
153
  fieldcount,
@@ -193,20 +176,13 @@ class BigBed extends bbi_ts_1.BBI {
193
176
  const { offset: offset2, field } = index;
194
177
  const b = await this.bbi.read(32, offset2, opts);
195
178
  const dataView = new DataView(b.buffer, b.byteOffset, b.length);
196
- let offset = 0;
197
- // const _magic = dataView.getInt32(offset, true)
198
- offset += 4;
199
- const blockSize = dataView.getInt32(offset, true);
200
- offset += 4;
201
- const keySize = dataView.getInt32(offset, true);
202
- offset += 4;
203
- const valSize = dataView.getInt32(offset, true);
204
- offset += 4;
205
- // const _itemCount = Number(dataView.getBigUint64(offset, true))
206
- offset += 8;
179
+ const blockSize = dataView.getInt32(4, true);
180
+ const keySize = dataView.getInt32(8, true);
181
+ const valSize = dataView.getInt32(12, true);
207
182
  return readBPlusTreeNode(this.bbi, offset2 + 32, blockSize, keySize, valSize, name, field, opts);
208
183
  });
209
- return filterUndef(await Promise.all(locs));
184
+ const results = await Promise.all(locs);
185
+ return results.filter((l) => l !== undefined);
210
186
  }
211
187
  /*
212
188
  * retrieve the features from the bigbed data that were found through the
@@ -225,20 +201,12 @@ class BigBed extends bbi_ts_1.BBI {
225
201
  return [];
226
202
  }
227
203
  const view = await this.getUnzoomedView(opts);
228
- const res = blocks.map(block => {
229
- return new rxjs_1.Observable(observer => {
230
- view.readFeatures(observer, [block], opts).catch((e) => {
231
- observer.error(e);
232
- });
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 }))));
237
- });
238
- const ret = await (0, rxjs_1.firstValueFrom)((0, rxjs_1.merge)(...res));
239
- // Filter to features where the indexed field matches the search name
204
+ const results = await Promise.all(blocks.map(async (block) => {
205
+ const features = await view.readFeatures([block], opts);
206
+ return features.map(f => ({ ...f, field: block.field }));
207
+ }));
240
208
  // field offset is adjusted by -3 to account for chrom, chromStart, chromEnd columns
241
- return ret.filter(f => {
209
+ return results.flat().filter(f => {
242
210
  if (!f.rest) {
243
211
  return false;
244
212
  }