@gmod/bbi 1.0.33 → 2.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 (60) hide show
  1. package/CHANGELOG.md +20 -3
  2. package/dist/bbi.d.ts +2 -2
  3. package/dist/bbi.js +56 -59
  4. package/dist/bbi.js.map +1 -0
  5. package/dist/bigbed.d.ts +1 -2
  6. package/dist/bigbed.js +23 -20
  7. package/dist/bigbed.js.map +1 -0
  8. package/dist/bigwig.d.ts +1 -3
  9. package/dist/bigwig.js +5 -8
  10. package/dist/bigwig.js.map +1 -0
  11. package/dist/blockView.d.ts +8 -9
  12. package/dist/blockView.js +153 -92
  13. package/dist/blockView.js.map +1 -0
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/range.js +2 -0
  17. package/dist/range.js.map +1 -0
  18. package/dist/unzip-pako.d.ts +1 -1
  19. package/dist/unzip-pako.js +2 -1
  20. package/dist/unzip-pako.js.map +1 -0
  21. package/dist/unzip.js +1 -0
  22. package/dist/unzip.js.map +1 -0
  23. package/dist/util.d.ts +11 -1
  24. package/dist/util.js +10 -4
  25. package/dist/util.js.map +1 -0
  26. package/esm/bbi.d.ts +2 -2
  27. package/esm/bbi.js +62 -67
  28. package/esm/bbi.js.map +1 -0
  29. package/esm/bigbed.d.ts +1 -2
  30. package/esm/bigbed.js +42 -46
  31. package/esm/bigbed.js.map +1 -0
  32. package/esm/bigwig.d.ts +1 -3
  33. package/esm/bigwig.js +7 -14
  34. package/esm/bigwig.js.map +1 -0
  35. package/esm/blockView.d.ts +8 -9
  36. package/esm/blockView.js +166 -116
  37. package/esm/blockView.js.map +1 -0
  38. package/esm/index.js +3 -7
  39. package/esm/index.js.map +1 -0
  40. package/esm/range.js +3 -4
  41. package/esm/range.js.map +1 -0
  42. package/esm/unzip-pako.d.ts +1 -1
  43. package/esm/unzip-pako.js +4 -7
  44. package/esm/unzip-pako.js.map +1 -0
  45. package/esm/unzip.js +3 -5
  46. package/esm/unzip.js.map +1 -0
  47. package/esm/util.d.ts +11 -1
  48. package/esm/util.js +14 -15
  49. package/esm/util.js.map +1 -0
  50. package/package.json +13 -13
  51. package/src/bbi.ts +375 -0
  52. package/src/bigbed.ts +244 -0
  53. package/src/bigwig.ts +38 -0
  54. package/src/blockView.ts +496 -0
  55. package/src/declare.d.ts +2 -0
  56. package/src/index.ts +3 -0
  57. package/src/range.ts +142 -0
  58. package/src/unzip-pako.ts +5 -0
  59. package/src/unzip.ts +2 -0
  60. package/src/util.ts +83 -0
package/esm/bbi.js CHANGED
@@ -1,16 +1,8 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.BBI = void 0;
7
- const binary_parser_1 = require("@gmod/binary-parser");
8
- const generic_filehandle_1 = require("generic-filehandle");
9
- const rxjs_1 = require("rxjs");
10
- const operators_1 = require("rxjs/operators");
11
- const abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
12
- const quick_lru_1 = __importDefault(require("quick-lru"));
13
- const blockView_1 = require("./blockView");
1
+ import { Parser } from 'binary-parser';
2
+ import { LocalFile, RemoteFile } from 'generic-filehandle';
3
+ import { Observable } from 'rxjs';
4
+ import { reduce } from 'rxjs/operators';
5
+ import { BlockView } from './blockView';
14
6
  const BIG_WIG_MAGIC = -2003829722;
15
7
  const BIG_BED_MAGIC = -2021002517;
16
8
  /* get the compiled parsers for different sections of the bigwig file
@@ -20,7 +12,7 @@ const BIG_BED_MAGIC = -2021002517;
20
12
  */
21
13
  function getParsers(isBE) {
22
14
  const le = isBE ? 'big' : 'little';
23
- const headerParser = new binary_parser_1.Parser()
15
+ const headerParser = new Parser()
24
16
  .endianess(le)
25
17
  .int32('magic')
26
18
  .uint16('version')
@@ -36,31 +28,33 @@ function getParsers(isBE) {
36
28
  .uint64('extHeaderOffset') // name index offset, used in bigbed
37
29
  .array('zoomLevels', {
38
30
  length: 'numZoomLevels',
39
- type: new binary_parser_1.Parser()
31
+ type: new Parser()
32
+ .endianess(le)
40
33
  .uint32('reductionLevel')
41
34
  .uint32('reserved')
42
35
  .uint64('dataOffset')
43
36
  .uint64('indexOffset'),
44
37
  });
45
- const totalSummaryParser = new binary_parser_1.Parser()
38
+ const totalSummaryParser = new Parser()
46
39
  .endianess(le)
47
40
  .uint64('basesCovered')
48
- .double('scoreMin')
49
- .double('scoreMax')
50
- .double('scoreSum')
51
- .double('scoreSumSquares');
52
- const chromTreeParser = new binary_parser_1.Parser()
41
+ .doublele('scoreMin')
42
+ .doublele('scoreMax')
43
+ .doublele('scoreSum')
44
+ .doublele('scoreSumSquares');
45
+ const chromTreeParser = new Parser()
53
46
  .endianess(le)
54
47
  .uint32('magic')
55
48
  .uint32('blockSize')
56
49
  .uint32('keySize')
57
50
  .uint32('valSize')
58
51
  .uint64('itemCount');
59
- const isLeafNode = new binary_parser_1.Parser()
52
+ const isLeafNode = new Parser()
60
53
  .endianess(le)
61
54
  .uint8('isLeafNode')
62
55
  .skip(1)
63
- .uint16('cnt');
56
+ .uint16('cnt')
57
+ .saveOffset('offset');
64
58
  return {
65
59
  chromTreeParser,
66
60
  totalSummaryParser,
@@ -68,7 +62,7 @@ function getParsers(isBE) {
68
62
  isLeafNode,
69
63
  };
70
64
  }
71
- class BBI {
65
+ export class BBI {
72
66
  /*
73
67
  * @param filehandle - a filehandle from generic-filehandle or implementing something similar to the node10 fs.promises API
74
68
  * @param path - a Local file path as a string
@@ -76,22 +70,16 @@ class BBI {
76
70
  * @param renameRefSeqs - an optional method to rename the internal reference sequences using a mapping function
77
71
  */
78
72
  constructor(options = {}) {
79
- this.headerCache = new abortable_promise_cache_1.default({
80
- cache: new quick_lru_1.default({ maxSize: 1 }),
81
- fill: async (params, signal) => {
82
- return this._getHeader({ ...params, signal });
83
- },
84
- });
85
- const { filehandle, renameRefSeqs, path, url } = options;
86
- this.renameRefSeqs = renameRefSeqs || ((s) => s);
73
+ const { filehandle, renameRefSeqs = s => s, path, url } = options;
74
+ this.renameRefSeqs = renameRefSeqs;
87
75
  if (filehandle) {
88
76
  this.bbi = filehandle;
89
77
  }
90
78
  else if (url) {
91
- this.bbi = new generic_filehandle_1.RemoteFile(url);
79
+ this.bbi = new RemoteFile(url);
92
80
  }
93
81
  else if (path) {
94
- this.bbi = new generic_filehandle_1.LocalFile(path);
82
+ this.bbi = new LocalFile(path);
95
83
  }
96
84
  else {
97
85
  throw new Error('no file given');
@@ -103,7 +91,13 @@ class BBI {
103
91
  */
104
92
  getHeader(opts = {}) {
105
93
  const options = 'aborted' in opts ? { signal: opts } : opts;
106
- return this.headerCache.get(JSON.stringify(options), options, options.signal);
94
+ if (!this.headerP) {
95
+ this.headerP = this._getHeader(options).catch(e => {
96
+ this.headerP = undefined;
97
+ throw e;
98
+ });
99
+ }
100
+ return this.headerP;
107
101
  }
108
102
  async _getHeader(opts) {
109
103
  const header = await this._getMainHeader(opts);
@@ -114,23 +108,24 @@ class BBI {
114
108
  const { buffer } = await this.bbi.read(Buffer.alloc(requestSize), 0, requestSize, 0, opts);
115
109
  const isBigEndian = this._isBigEndian(buffer);
116
110
  const ret = getParsers(isBigEndian);
117
- const header = ret.headerParser.parse(buffer).result;
118
- header.fileType = header.magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
119
- if (header.asOffset > requestSize ||
120
- header.totalSummaryOffset > requestSize) {
111
+ const header = ret.headerParser.parse(buffer);
112
+ const { magic, asOffset, totalSummaryOffset } = header;
113
+ header.fileType = magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
114
+ if (asOffset > requestSize || totalSummaryOffset > requestSize) {
121
115
  return this._getMainHeader(opts, requestSize * 2);
122
116
  }
123
- if (header.asOffset) {
117
+ if (asOffset) {
118
+ const off = Number(header.asOffset);
124
119
  header.autoSql = buffer
125
- .subarray(header.asOffset, buffer.indexOf(0, header.asOffset))
120
+ .subarray(off, buffer.indexOf(0, off))
126
121
  .toString('utf8');
127
122
  }
128
123
  if (header.totalSummaryOffset > requestSize) {
129
124
  return this._getMainHeader(opts, requestSize * 2);
130
125
  }
131
126
  if (header.totalSummaryOffset) {
132
- const tail = buffer.subarray(header.totalSummaryOffset);
133
- header.totalSummary = ret.totalSummaryParser.parse(tail).result;
127
+ const tail = buffer.subarray(Number(header.totalSummaryOffset));
128
+ header.totalSummary = ret.totalSummaryParser.parse(tail);
134
129
  }
135
130
  return { ...header, isBigEndian };
136
131
  }
@@ -151,37 +146,40 @@ class BBI {
151
146
  const le = isBE ? 'big' : 'little';
152
147
  const refsByNumber = [];
153
148
  const refsByName = {};
154
- const { chromTreeOffset } = header;
155
- let { unzoomedDataOffset } = header;
149
+ let unzoomedDataOffset = Number(header.unzoomedDataOffset);
150
+ const chromTreeOffset = Number(header.chromTreeOffset);
156
151
  while (unzoomedDataOffset % 4 !== 0) {
157
152
  unzoomedDataOffset += 1;
158
153
  }
159
- const { buffer: data } = await this.bbi.read(Buffer.alloc(unzoomedDataOffset - chromTreeOffset), 0, unzoomedDataOffset - chromTreeOffset, chromTreeOffset, opts);
154
+ const off = unzoomedDataOffset - chromTreeOffset;
155
+ const { buffer } = await this.bbi.read(Buffer.alloc(off), 0, off, Number(chromTreeOffset), opts);
160
156
  const p = getParsers(isBE);
161
- const { keySize } = p.chromTreeParser.parse(data).result;
162
- const leafNodeParser = new binary_parser_1.Parser()
157
+ const { keySize } = p.chromTreeParser.parse(buffer);
158
+ const leafNodeParser = new Parser()
163
159
  .endianess(le)
164
160
  .string('key', { stripNull: true, length: keySize })
165
161
  .uint32('refId')
166
- .uint32('refSize');
167
- const nonleafNodeParser = new binary_parser_1.Parser()
162
+ .uint32('refSize')
163
+ .saveOffset('offset');
164
+ const nonleafNodeParser = new Parser()
168
165
  .endianess(le)
169
166
  .skip(keySize)
170
- .uint64('childOffset');
167
+ .uint64('childOffset')
168
+ .saveOffset('offset');
171
169
  const rootNodeOffset = 32;
172
170
  const bptReadNode = async (currentOffset) => {
173
171
  let offset = currentOffset;
174
- if (offset >= data.length) {
172
+ if (offset >= buffer.length) {
175
173
  throw new Error('reading beyond end of buffer');
176
174
  }
177
- const ret = p.isLeafNode.parse(data.subarray(offset));
178
- const { isLeafNode, cnt } = ret.result;
175
+ const ret = p.isLeafNode.parse(buffer.subarray(offset));
176
+ const { isLeafNode, cnt } = ret;
179
177
  offset += ret.offset;
180
178
  if (isLeafNode) {
181
179
  for (let n = 0; n < cnt; n += 1) {
182
- const leafRet = leafNodeParser.parse(data.subarray(offset));
180
+ const leafRet = leafNodeParser.parse(buffer.subarray(offset));
183
181
  offset += leafRet.offset;
184
- const { key, refId, refSize } = leafRet.result;
182
+ const { key, refId, refSize } = leafRet;
185
183
  const refRec = { name: key, id: refId, length: refSize };
186
184
  refsByName[this.renameRefSeqs(key)] = refId;
187
185
  refsByNumber[refId] = refRec;
@@ -191,11 +189,10 @@ class BBI {
191
189
  // parse index node
192
190
  const nextNodes = [];
193
191
  for (let n = 0; n < cnt; n += 1) {
194
- const nonleafRet = nonleafNodeParser.parse(data.subarray(offset));
195
- let { childOffset } = nonleafRet.result;
192
+ const nonleafRet = nonleafNodeParser.parse(buffer.subarray(offset));
193
+ const { childOffset } = nonleafRet;
196
194
  offset += nonleafRet.offset;
197
- childOffset -= chromTreeOffset;
198
- nextNodes.push(bptReadNode(childOffset));
195
+ nextNodes.push(bptReadNode(Number(childOffset) - Number(chromTreeOffset)));
199
196
  }
200
197
  await Promise.all(nextNodes);
201
198
  }
@@ -211,10 +208,8 @@ class BBI {
211
208
  * @param abortSignal - a signal to optionally abort this operation
212
209
  */
213
210
  async getUnzoomedView(opts) {
214
- const { unzoomedIndexOffset, zoomLevels, refsByName, uncompressBufSize, isBigEndian, fileType, } = await this.getHeader(opts);
215
- const nzl = zoomLevels[0];
216
- const cirLen = nzl ? nzl.dataOffset - unzoomedIndexOffset : 4000;
217
- return new blockView_1.BlockView(this.bbi, refsByName, unzoomedIndexOffset, cirLen, isBigEndian, uncompressBufSize > 0, fileType);
211
+ const { unzoomedIndexOffset, refsByName, uncompressBufSize, isBigEndian, fileType, } = await this.getHeader(opts);
212
+ return new BlockView(this.bbi, refsByName, unzoomedIndexOffset, isBigEndian, uncompressBufSize > 0, fileType);
218
213
  }
219
214
  /**
220
215
  * Gets features from a BigWig file
@@ -242,7 +237,7 @@ class BBI {
242
237
  if (!view) {
243
238
  throw new Error('unable to get block view for data');
244
239
  }
245
- return new rxjs_1.Observable((observer) => {
240
+ return new Observable((observer) => {
246
241
  view.readWigData(chrName, start, end, observer, opts);
247
242
  });
248
243
  }
@@ -251,9 +246,9 @@ class BBI {
251
246
  }) {
252
247
  const ob = await this.getFeatureStream(refName, start, end, opts);
253
248
  const ret = await ob
254
- .pipe((0, operators_1.reduce)((acc, curr) => acc.concat(curr)))
249
+ .pipe(reduce((acc, curr) => acc.concat(curr)))
255
250
  .toPromise();
256
251
  return ret || [];
257
252
  }
258
253
  }
259
- exports.BBI = BBI;
254
+ //# sourceMappingURL=bbi.js.map
package/esm/bbi.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bbi.js","sourceRoot":"","sources":["../src/bbi.ts"],"names":[],"mappings":"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"}
package/esm/bigbed.d.ts CHANGED
@@ -3,9 +3,8 @@ import { BlockView } from './blockView';
3
3
  export declare function filterUndef<T>(ts: (T | undefined)[]): T[];
4
4
  export declare class BigBed extends BBI {
5
5
  readIndicesCache: any;
6
- constructor(opts?: any);
7
6
  readIndices(opts?: AbortSignal | RequestOptions): any;
8
- protected getView(scale: number, opts: RequestOptions): Promise<BlockView>;
7
+ protected getView(_scale: number, opts: RequestOptions): Promise<BlockView>;
9
8
  private _readIndices;
10
9
  private searchExtraIndexBlocks;
11
10
  searchExtraIndex(name: string, opts?: RequestOptions): Promise<Feature[]>;
package/esm/bigbed.js CHANGED
@@ -1,24 +1,17 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.BigBed = exports.filterUndef = void 0;
7
- const binary_parser_1 = require("@gmod/binary-parser");
8
- const rxjs_1 = require("rxjs");
9
- const operators_1 = require("rxjs/operators");
10
- const abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
11
- const quick_lru_1 = __importDefault(require("quick-lru"));
12
- const bbi_1 = require("./bbi");
13
- function filterUndef(ts) {
1
+ import { Parser } from 'binary-parser';
2
+ import { Observable, merge } from 'rxjs';
3
+ import { map, reduce } from 'rxjs/operators';
4
+ import AbortablePromiseCache from 'abortable-promise-cache';
5
+ import QuickLRU from 'quick-lru';
6
+ import { BBI } from './bbi';
7
+ export function filterUndef(ts) {
14
8
  return ts.filter((t) => !!t);
15
9
  }
16
- exports.filterUndef = filterUndef;
17
- class BigBed extends bbi_1.BBI {
18
- constructor(opts) {
19
- super(opts);
20
- this.readIndicesCache = new abortable_promise_cache_1.default({
21
- cache: new quick_lru_1.default({ maxSize: 1 }),
10
+ export class BigBed extends BBI {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.readIndicesCache = new AbortablePromiseCache({
14
+ cache: new QuickLRU({ maxSize: 1 }),
22
15
  fill: async (args, signal) => {
23
16
  return this._readIndices({ ...args, signal });
24
17
  },
@@ -34,7 +27,7 @@ class BigBed extends bbi_1.BBI {
34
27
  * @param abortSignal - an optional AbortSignal to kill operation
35
28
  * @return promise for a BlockView
36
29
  */
37
- async getView(scale, opts) {
30
+ async getView(_scale, opts) {
38
31
  return this.getUnzoomedView(opts);
39
32
  }
40
33
  /*
@@ -44,14 +37,14 @@ class BigBed extends bbi_1.BBI {
44
37
  */
45
38
  async _readIndices(opts) {
46
39
  const { extHeaderOffset, isBigEndian } = await this.getHeader(opts);
47
- const { buffer: data } = await this.bbi.read(Buffer.alloc(64), 0, 64, extHeaderOffset);
40
+ const { buffer: data } = await this.bbi.read(Buffer.alloc(64), 0, 64, Number(extHeaderOffset));
48
41
  const le = isBigEndian ? 'big' : 'little';
49
- const ret = new binary_parser_1.Parser()
42
+ const ret = new Parser()
50
43
  .endianess(le)
51
44
  .uint16('size')
52
45
  .uint16('count')
53
46
  .uint64('offset')
54
- .parse(data).result;
47
+ .parse(data);
55
48
  const { count, offset } = ret;
56
49
  // no extra index is defined if count==0
57
50
  if (count === 0) {
@@ -59,8 +52,8 @@ class BigBed extends bbi_1.BBI {
59
52
  }
60
53
  const blocklen = 20;
61
54
  const len = blocklen * count;
62
- const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, offset);
63
- const extParser = new binary_parser_1.Parser()
55
+ const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, Number(offset));
56
+ const extParser = new Parser()
64
57
  .endianess(le)
65
58
  .int16('type')
66
59
  .int16('fieldcount')
@@ -69,7 +62,7 @@ class BigBed extends bbi_1.BBI {
69
62
  .int16('field');
70
63
  const indices = [];
71
64
  for (let i = 0; i < count; i += 1) {
72
- indices.push(extParser.parse(buffer.subarray(i * blocklen)).result);
65
+ indices.push(extParser.parse(buffer.subarray(i * blocklen)));
73
66
  }
74
67
  return indices;
75
68
  }
@@ -89,32 +82,36 @@ class BigBed extends bbi_1.BBI {
89
82
  }
90
83
  const locs = indices.map(async (index) => {
91
84
  const { offset, field } = index;
92
- const { buffer: data } = await this.bbi.read(Buffer.alloc(32), 0, 32, offset, opts);
93
- const p = new binary_parser_1.Parser()
94
- .endianess(isBigEndian ? 'big' : 'little')
85
+ const { buffer: data } = await this.bbi.read(Buffer.alloc(32), 0, 32, Number(offset), opts);
86
+ const le = isBigEndian ? 'big' : 'little';
87
+ const p = new Parser()
88
+ .endianess(le)
95
89
  .int32('magic')
96
90
  .int32('blockSize')
97
91
  .int32('keySize')
98
92
  .int32('valSize')
99
93
  .uint64('itemCount');
100
- const { blockSize, keySize, valSize } = p.parse(data).result;
101
- const bpt = new binary_parser_1.Parser()
102
- .endianess(isBigEndian ? 'big' : 'little')
94
+ const { blockSize, keySize, valSize } = p.parse(data);
95
+ // console.log({blockSize,keySize,valSize})
96
+ const bpt = new Parser()
97
+ .endianess(le)
103
98
  .int8('nodeType')
104
99
  .skip(1)
105
100
  .int16('cnt')
106
101
  .choice({
107
102
  tag: 'nodeType',
108
103
  choices: {
109
- 0: new binary_parser_1.Parser().array('leafkeys', {
104
+ 0: new Parser().array('leafkeys', {
110
105
  length: 'cnt',
111
- type: new binary_parser_1.Parser()
106
+ type: new Parser()
107
+ .endianess(le)
112
108
  .string('key', { length: keySize, stripNull: true })
113
109
  .uint64('offset'),
114
110
  }),
115
- 1: new binary_parser_1.Parser().array('keys', {
111
+ 1: new Parser().array('keys', {
116
112
  length: 'cnt',
117
- type: new binary_parser_1.Parser()
113
+ type: new Parser()
114
+ .endianess(le)
118
115
  .string('key', { length: keySize, stripNull: true })
119
116
  .uint64('offset')
120
117
  .uint32('length')
@@ -123,9 +120,10 @@ class BigBed extends bbi_1.BBI {
123
120
  },
124
121
  });
125
122
  const bptReadNode = async (nodeOffset) => {
123
+ const val = Number(nodeOffset);
126
124
  const len = 4 + blockSize * (keySize + valSize);
127
- const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, nodeOffset, opts);
128
- const node = bpt.parse(buffer).result;
125
+ const { buffer } = await this.bbi.read(Buffer.alloc(len), 0, len, val, opts);
126
+ const node = bpt.parse(buffer);
129
127
  if (node.leafkeys) {
130
128
  let lastOffset;
131
129
  for (let i = 0; i < node.leafkeys.length; i += 1) {
@@ -145,7 +143,7 @@ class BigBed extends bbi_1.BBI {
145
143
  return undefined;
146
144
  };
147
145
  const rootNodeOffset = 32;
148
- return bptReadNode(offset + rootNodeOffset);
146
+ return bptReadNode(Number(offset) + rootNodeOffset);
149
147
  });
150
148
  return filterUndef(await Promise.all(locs));
151
149
  }
@@ -164,19 +162,17 @@ class BigBed extends bbi_1.BBI {
164
162
  }
165
163
  const view = await this.getUnzoomedView(opts);
166
164
  const res = blocks.map(block => {
167
- return new rxjs_1.Observable((observer) => {
165
+ return new Observable(observer => {
168
166
  view.readFeatures(observer, [block], opts);
169
- }).pipe((0, operators_1.reduce)((acc, curr) => acc.concat(curr)), (0, operators_1.map)(x => {
167
+ }).pipe(reduce((acc, curr) => acc.concat(curr)), map(x => {
170
168
  for (let i = 0; i < x.length; i += 1) {
171
169
  x[i].field = block.field;
172
170
  }
173
171
  return x;
174
172
  }));
175
173
  });
176
- const ret = await (0, rxjs_1.merge)(...res).toPromise();
177
- return ret.filter((f) => {
178
- return f.rest.split('\t')[f.field - 3] === name;
179
- });
174
+ const ret = await merge(...res).toPromise();
175
+ return ret.filter(f => { var _a; return ((_a = f.rest) === null || _a === void 0 ? void 0 : _a.split('\t')[(f.field || 0) - 3]) === name; });
180
176
  }
181
177
  }
182
- exports.BigBed = BigBed;
178
+ //# sourceMappingURL=bigbed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigbed.js","sourceRoot":"","sources":["../src/bigbed.ts"],"names":[],"mappings":"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"}
package/esm/bigwig.d.ts CHANGED
@@ -4,9 +4,7 @@ export declare class BigWig extends BBI {
4
4
  /**
5
5
  * Retrieves a BlockView of a specific zoomLevel
6
6
  *
7
- * @param refName - The chromosome name
8
- * @param start - The start of a region
9
- * @param end - The end of a region
7
+ * @param scale - number
10
8
  * @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use
11
9
  */
12
10
  protected getView(scale: number, opts: RequestOptions): Promise<BlockView>;
package/esm/bigwig.js CHANGED
@@ -1,15 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BigWig = void 0;
4
- const blockView_1 = require("./blockView");
5
- const bbi_1 = require("./bbi");
6
- class BigWig extends bbi_1.BBI {
1
+ import { BlockView } from './blockView';
2
+ import { BBI } from './bbi';
3
+ export class BigWig extends BBI {
7
4
  /**
8
5
  * Retrieves a BlockView of a specific zoomLevel
9
6
  *
10
- * @param refName - The chromosome name
11
- * @param start - The start of a region
12
- * @param end - The end of a region
7
+ * @param scale - number
13
8
  * @param opts - An object containing basesPerSpan (e.g. pixels per basepair) or scale used to infer the zoomLevel to use
14
9
  */
15
10
  async getView(scale, opts) {
@@ -23,13 +18,11 @@ class BigWig extends bbi_1.BBI {
23
18
  for (let i = maxLevel; i >= 0; i -= 1) {
24
19
  const zh = zoomLevels[i];
25
20
  if (zh && zh.reductionLevel <= 2 * basesPerPx) {
26
- const indexLength = i < zoomLevels.length - 1
27
- ? zoomLevels[i + 1].dataOffset - zh.indexOffset
28
- : fileSize - 4 - zh.indexOffset;
29
- return new blockView_1.BlockView(this.bbi, refsByName, zh.indexOffset, indexLength, isBigEndian, uncompressBufSize > 0, 'summary');
21
+ const indexOffset = Number(zh.indexOffset);
22
+ return new BlockView(this.bbi, refsByName, indexOffset, isBigEndian, uncompressBufSize > 0, 'summary');
30
23
  }
31
24
  }
32
25
  return this.getUnzoomedView(opts);
33
26
  }
34
27
  }
35
- exports.BigWig = BigWig;
28
+ //# sourceMappingURL=bigwig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigwig.js","sourceRoot":"","sources":["../src/bigwig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,GAAG,EAAkB,MAAM,OAAO,CAAA;AAE3C,MAAM,OAAO,MAAO,SAAQ,GAAG;IAC7B;;;;;OAKG;IACO,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,IAAoB;QACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,GACxE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAA;QAC5B,IAAI,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAA;QAChC,IAAI,CAAC,QAAQ,EAAE;YACb,4EAA4E;YAC5E,QAAQ,IAAI,CAAC,CAAA;SACd;QAED,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACrC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,IAAI,CAAC,GAAG,UAAU,EAAE;gBAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;gBAE1C,OAAO,IAAI,SAAS,CAClB,IAAI,CAAC,GAAG,EACR,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,GAAG,CAAC,EACrB,SAAS,CACV,CAAA;aACF;SACF;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;CACF"}
@@ -18,25 +18,24 @@ interface Options {
18
18
  * @constructs
19
19
  */
20
20
  export declare class BlockView {
21
- private cirTreeOffset;
22
- private cirTreeLength;
23
21
  private bbi;
24
- private isCompressed;
25
- private isBigEndian;
26
22
  private refsByName;
23
+ private cirTreeOffset;
24
+ private isBigEndian;
25
+ private isCompressed;
27
26
  private blockType;
28
27
  private cirTreePromise?;
29
28
  private featureCache;
30
29
  private leafParser;
31
- private bigWigParser;
32
30
  private bigBedParser;
33
- private summaryParser;
34
- constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number, cirTreeLength: number, isBigEndian: boolean, isCompressed: boolean, blockType: string);
31
+ constructor(bbi: GenericFilehandle, refsByName: any, cirTreeOffset: number, isBigEndian: boolean, isCompressed: boolean, blockType: string);
35
32
  readWigData(chrName: string, start: number, end: number, observer: Observer<Feature[]>, opts: Options): Promise<void>;
36
33
  private parseSummaryBlock;
37
34
  private parseBigBedBlock;
38
35
  private parseBigWigBlock;
39
- private static coordFilter;
40
- readFeatures(observer: Observer<Feature[]>, blocks: any, opts?: Options): Promise<void>;
36
+ readFeatures(observer: Observer<Feature[]>, blocks: {
37
+ offset: bigint;
38
+ length: bigint;
39
+ }[], opts?: Options): Promise<void>;
41
40
  }
42
41
  export {};