@gmod/bbi 4.0.6 → 5.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 (50) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/dist/bbi.d.ts +20 -4
  3. package/dist/bbi.js +124 -104
  4. package/dist/bbi.js.map +1 -1
  5. package/dist/bigbed.js +88 -69
  6. package/dist/bigbed.js.map +1 -1
  7. package/dist/bigint-polyfill/polyfill.js +0 -10
  8. package/dist/bigint-polyfill/polyfill.js.map +1 -1
  9. package/dist/bigint-polyfill/pure.d.ts +0 -2
  10. package/dist/bigint-polyfill/pure.js +0 -26
  11. package/dist/bigint-polyfill/pure.js.map +1 -1
  12. package/dist/bigwig.js +3 -8
  13. package/dist/bigwig.js.map +1 -1
  14. package/dist/block-view.d.ts +4 -6
  15. package/dist/block-view.js +122 -131
  16. package/dist/block-view.js.map +1 -1
  17. package/dist/range.js +1 -1
  18. package/dist/range.js.map +1 -1
  19. package/dist/util.d.ts +12 -14
  20. package/dist/util.js +8 -14
  21. package/dist/util.js.map +1 -1
  22. package/esm/bbi.d.ts +20 -4
  23. package/esm/bbi.js +124 -104
  24. package/esm/bbi.js.map +1 -1
  25. package/esm/bigbed.js +88 -69
  26. package/esm/bigbed.js.map +1 -1
  27. package/esm/bigint-polyfill/polyfill.js +1 -11
  28. package/esm/bigint-polyfill/polyfill.js.map +1 -1
  29. package/esm/bigint-polyfill/pure.d.ts +0 -2
  30. package/esm/bigint-polyfill/pure.js +0 -24
  31. package/esm/bigint-polyfill/pure.js.map +1 -1
  32. package/esm/bigwig.js +3 -8
  33. package/esm/bigwig.js.map +1 -1
  34. package/esm/block-view.d.ts +4 -6
  35. package/esm/block-view.js +122 -131
  36. package/esm/block-view.js.map +1 -1
  37. package/esm/range.js +1 -1
  38. package/esm/range.js.map +1 -1
  39. package/esm/util.d.ts +12 -14
  40. package/esm/util.js +8 -14
  41. package/esm/util.js.map +1 -1
  42. package/package.json +4 -5
  43. package/src/bbi.ts +151 -115
  44. package/src/bigbed.ts +99 -80
  45. package/src/bigint-polyfill/polyfill.ts +1 -13
  46. package/src/bigint-polyfill/pure.ts +0 -36
  47. package/src/bigwig.ts +3 -9
  48. package/src/block-view.ts +133 -168
  49. package/src/range.ts +1 -1
  50. package/src/util.ts +16 -21
package/dist/util.d.ts CHANGED
@@ -2,22 +2,19 @@ export declare class AbortError extends Error {
2
2
  code: string;
3
3
  constructor(message: string);
4
4
  }
5
- export declare function groupBlocks(blocks: {
6
- offset: bigint;
7
- length: bigint;
8
- }[]): {
9
- blocks: {
10
- offset: bigint;
11
- length: bigint;
12
- }[];
13
- length: bigint;
14
- offset: bigint;
5
+ interface Block {
6
+ offset: number;
7
+ length: number;
8
+ }
9
+ export declare function groupBlocks(blocks: Block[]): {
10
+ blocks: Block[];
11
+ length: number;
12
+ offset: number;
15
13
  }[];
16
14
  /**
17
- * Properly check if the given AbortSignal is aborted.
18
- * Per the standard, if the signal reads as aborted,
19
- * this function throws either a DOMException AbortError, or a regular error
20
- * with a `code` attribute set to `ERR_ABORTED`.
15
+ * Properly check if the given AbortSignal is aborted. Per the standard, if the
16
+ * signal reads as aborted, this function throws either a DOMException
17
+ * AbortError, or a regular error with a `code` attribute set to `ERR_ABORTED`.
21
18
  *
22
19
  * For convenience, passing `undefined` is a no-op
23
20
  *
@@ -32,3 +29,4 @@ export declare function checkAbortSignal(signal?: AbortSignal): void;
32
29
  * @param {AbortSignal} signal
33
30
  */
34
31
  export declare function abortBreakPoint(signal?: AbortSignal): Promise<void>;
32
+ export {};
package/dist/util.js CHANGED
@@ -23,18 +23,14 @@ exports.AbortError = AbortError;
23
23
  // sort blocks by file offset and
24
24
  // group blocks that are within 2KB of eachother
25
25
  function groupBlocks(blocks) {
26
- blocks.sort((b0, b1) => Number(b0.offset) - Number(b1.offset));
26
+ blocks.sort((b0, b1) => b0.offset - b1.offset);
27
27
  const blockGroups = [];
28
28
  let lastBlock;
29
29
  let lastBlockEnd;
30
30
  for (const block of blocks) {
31
- if (lastBlock &&
32
- lastBlockEnd &&
33
- Number(block.offset) - lastBlockEnd <= 2000) {
34
- lastBlock.length = BigInt(Number(lastBlock.length) +
35
- Number(block.length) -
36
- lastBlockEnd +
37
- Number(block.offset));
31
+ if (lastBlock && lastBlockEnd && block.offset - lastBlockEnd <= 2000) {
32
+ lastBlock.length =
33
+ lastBlock.length + block.length - lastBlockEnd + block.offset;
38
34
  lastBlock.blocks.push(block);
39
35
  }
40
36
  else {
@@ -44,15 +40,14 @@ function groupBlocks(blocks) {
44
40
  offset: block.offset,
45
41
  }));
46
42
  }
47
- lastBlockEnd = Number(lastBlock.offset) + Number(lastBlock.length);
43
+ lastBlockEnd = lastBlock.offset + lastBlock.length;
48
44
  }
49
45
  return blockGroups;
50
46
  }
51
47
  /**
52
- * Properly check if the given AbortSignal is aborted.
53
- * Per the standard, if the signal reads as aborted,
54
- * this function throws either a DOMException AbortError, or a regular error
55
- * with a `code` attribute set to `ERR_ABORTED`.
48
+ * Properly check if the given AbortSignal is aborted. Per the standard, if the
49
+ * signal reads as aborted, this function throws either a DOMException
50
+ * AbortError, or a regular error with a `code` attribute set to `ERR_ABORTED`.
56
51
  *
57
52
  * For convenience, passing `undefined` is a no-op
58
53
  *
@@ -64,7 +59,6 @@ function checkAbortSignal(signal) {
64
59
  return;
65
60
  }
66
61
  if (signal.aborted) {
67
- // console.log('bam aborted!')
68
62
  if (typeof DOMException === 'undefined') {
69
63
  const e = new AbortError('aborted');
70
64
  e.code = 'ERR_ABORTED';
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;;;;;;;AAUA,kCAgCC;AAaD,4CAeC;AAQD,0CAGC;AAjFD,MAAa,UAAW,SAAQ,KAAK;IAGnC,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AAPD,gCAOC;AACD,iCAAiC;AACjC,gDAAgD;AAChD,SAAgB,WAAW,CAAC,MAA4C;IACtE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IAE9D,MAAM,WAAW,GAAG,EAAE,CAAA;IACtB,IAAI,SAAS,CAAA;IACb,IAAI,YAAY,CAAA;IAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IACE,SAAS;YACT,YAAY;YACZ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,YAAY,IAAI,IAAI,EAC3C,CAAC;YACD,SAAS,CAAC,MAAM,GAAG,MAAM,CACvB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;gBACtB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBACpB,YAAY;gBACZ,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CACvB,CAAA;YACD,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CACd,CAAC,SAAS,GAAG;gBACX,MAAM,EAAE,CAAC,KAAK,CAAC;gBACf,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CACH,CAAA;QACH,CAAC;QACD,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,gBAAgB,CAAC,MAAoB;IACnD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAM;IACR,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,8BAA8B;QAC9B,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;YACnC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAA;YACtB,MAAM,CAAC,CAAA;QACT,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAsB,eAAe,CAAC,MAAoB;;QACxD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QACvB,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;CAAA"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;;;;;;;AAeA,kCAwBC;AAYD,4CAcC;AAQD,0CAGC;AA5ED,MAAa,UAAW,SAAQ,KAAK;IAGnC,YAAmB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AAPD,gCAOC;AAMD,iCAAiC;AACjC,gDAAgD;AAChD,SAAgB,WAAW,CAAC,MAAe;IACzC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;IAE9C,MAAM,WAAW,GAAG,EAAE,CAAA;IACtB,IAAI,SAAoD,CAAA;IACxD,IAAI,YAAgC,CAAA;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,SAAS,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,IAAI,IAAI,EAAE,CAAC;YACrE,SAAS,CAAC,MAAM;gBACd,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY,GAAG,KAAK,CAAC,MAAM,CAAA;YAC/D,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CACd,CAAC,SAAS,GAAG;gBACX,MAAM,EAAE,CAAC,KAAK,CAAC;gBACf,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CACH,CAAA;QACH,CAAC;QACD,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;IACpD,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,gBAAgB,CAAC,MAAoB;IACnD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAM;IACR,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAA;YACnC,CAAC,CAAC,IAAI,GAAG,aAAa,CAAA;YACtB,MAAM,CAAC,CAAA;QACT,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAsB,eAAe,CAAC,MAAoB;;QACxD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QACvB,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;CAAA"}
package/esm/bbi.d.ts CHANGED
@@ -1,10 +1,18 @@
1
1
  import { GenericFilehandle } from 'generic-filehandle';
2
2
  import { Observable } from 'rxjs';
3
3
  import { BlockView } from './block-view';
4
+ interface ZoomLevel {
5
+ reductionLevel: number;
6
+ reserved: number;
7
+ dataOffset: number;
8
+ indexOffset: number;
9
+ }
4
10
  export interface Feature {
11
+ offset?: number;
12
+ chromId: number;
5
13
  start: number;
6
14
  end: number;
7
- score: number;
15
+ score?: number;
8
16
  rest?: string;
9
17
  minScore?: number;
10
18
  maxScore?: number;
@@ -16,26 +24,34 @@ interface Statistics {
16
24
  scoreSum: number;
17
25
  basesCovered: number;
18
26
  scoreSumSquares: number;
27
+ scoreMin: number;
28
+ scoreMax: number;
19
29
  }
20
30
  interface RefInfo {
21
31
  name: string;
22
32
  id: number;
23
33
  length: number;
24
34
  }
25
- export interface Header {
35
+ export interface MainHeader {
36
+ magic: number;
26
37
  version: number;
27
38
  autoSql: string;
28
39
  totalSummary: Statistics;
29
- zoomLevels: any;
40
+ asOffset: number;
41
+ zoomLevels: ZoomLevel[];
42
+ fieldCount: number;
43
+ numZoomLevels: number;
30
44
  unzoomedIndexOffset: number;
45
+ totalSummaryOffset: number;
31
46
  unzoomedDataOffset: number;
32
47
  definedFieldCount: number;
33
48
  uncompressBufSize: number;
34
49
  chromTreeOffset: number;
35
- fileSize: number;
36
50
  extHeaderOffset: number;
37
51
  isBigEndian: boolean;
38
52
  fileType: string;
53
+ }
54
+ export interface Header extends MainHeader {
39
55
  refsByName: Record<string, number>;
40
56
  refsByNumber: Record<number, RefInfo>;
41
57
  }
package/esm/bbi.js CHANGED
@@ -1,72 +1,13 @@
1
1
  import { Buffer } from 'buffer';
2
- import { Parser } from 'binary-parser';
3
2
  import { LocalFile, RemoteFile } from 'generic-filehandle';
4
3
  import { firstValueFrom, Observable } from 'rxjs';
5
4
  import { toArray } from 'rxjs/operators';
6
5
  import { BlockView } from './block-view';
7
6
  const BIG_WIG_MAGIC = -2003829722;
8
7
  const BIG_BED_MAGIC = -2021002517;
9
- function toString(arr) {
8
+ function myToString(arr) {
10
9
  return new TextDecoder().decode(arr);
11
10
  }
12
- /**
13
- * get the compiled parsers for different sections of the bigwig file
14
- *
15
- * @param isBE - is big endian, typically false
16
- * @return an object with compiled parsers
17
- */
18
- function getParsers(isBE) {
19
- const le = isBE ? 'big' : 'little';
20
- const headerParser = new Parser()
21
- .endianess(le)
22
- .int32('magic')
23
- .uint16('version')
24
- .uint16('numZoomLevels')
25
- .uint64('chromTreeOffset')
26
- .uint64('unzoomedDataOffset')
27
- .uint64('unzoomedIndexOffset')
28
- .uint16('fieldCount')
29
- .uint16('definedFieldCount')
30
- .uint64('asOffset') // autoSql offset, used in bigbed
31
- .uint64('totalSummaryOffset')
32
- .uint32('uncompressBufSize')
33
- .uint64('extHeaderOffset') // name index offset, used in bigbed
34
- .array('zoomLevels', {
35
- length: 'numZoomLevels',
36
- type: new Parser()
37
- .endianess(le)
38
- .uint32('reductionLevel')
39
- .uint32('reserved')
40
- .uint64('dataOffset')
41
- .uint64('indexOffset'),
42
- });
43
- const totalSummaryParser = new Parser()
44
- .endianess(le)
45
- .uint64('basesCovered')
46
- .doublele('scoreMin')
47
- .doublele('scoreMax')
48
- .doublele('scoreSum')
49
- .doublele('scoreSumSquares');
50
- const chromTreeParser = new Parser()
51
- .endianess(le)
52
- .uint32('magic')
53
- .uint32('blockSize')
54
- .uint32('keySize')
55
- .uint32('valSize')
56
- .uint64('itemCount');
57
- const isLeafNode = new Parser()
58
- .endianess(le)
59
- .uint8('isLeafNode')
60
- .skip(1)
61
- .uint16('cnt')
62
- .saveOffset('offset');
63
- return {
64
- chromTreeParser,
65
- totalSummaryParser,
66
- headerParser,
67
- isLeafNode,
68
- };
69
- }
70
11
  export class BBI {
71
12
  getHeader(opts) {
72
13
  if (!this.headerP) {
@@ -78,7 +19,8 @@ export class BBI {
78
19
  return this.headerP;
79
20
  }
80
21
  /*
81
- * @param filehandle - a filehandle from generic-filehandle or implementing something similar to the node10 fs.promises API
22
+ * @param filehandle - a filehandle from generic-filehandle or implementing
23
+ * something similar to the node10 fs.promises API
82
24
  *
83
25
  * @param path - a Local file path as a string
84
26
  *
@@ -109,30 +51,101 @@ export class BBI {
109
51
  return { ...header, ...chroms };
110
52
  }
111
53
  async _getMainHeader(opts, requestSize = 2000) {
54
+ const le = true;
112
55
  const { buffer } = await this.bbi.read(Buffer.alloc(requestSize), 0, requestSize, 0, opts);
113
56
  const isBigEndian = this._isBigEndian(buffer);
114
- const ret = getParsers(isBigEndian);
115
- const header = ret.headerParser.parse(buffer);
116
- const { magic, asOffset, totalSummaryOffset } = header;
117
- header.fileType = magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
118
- if (asOffset > requestSize || totalSummaryOffset > requestSize) {
119
- return this._getMainHeader(opts, requestSize * 2);
120
- }
121
- if (asOffset) {
122
- const off = Number(header.asOffset);
123
- header.autoSql = toString(buffer.subarray(off, buffer.indexOf(0, off)));
57
+ const b = buffer;
58
+ const dataView = new DataView(b.buffer, b.byteOffset, b.length);
59
+ let offset = 0;
60
+ const magic = dataView.getInt32(offset, le);
61
+ offset += 4;
62
+ const version = dataView.getUint16(offset, le);
63
+ offset += 2;
64
+ const numZoomLevels = dataView.getUint16(offset, le);
65
+ offset += 2;
66
+ const chromTreeOffset = Number(dataView.getBigUint64(offset, le));
67
+ offset += 8;
68
+ const unzoomedDataOffset = Number(dataView.getBigUint64(offset, le));
69
+ offset += 8;
70
+ const unzoomedIndexOffset = Number(dataView.getBigUint64(offset, le));
71
+ offset += 8;
72
+ const fieldCount = dataView.getUint16(offset, le);
73
+ offset += 2;
74
+ const definedFieldCount = dataView.getUint16(offset, le);
75
+ offset += 2;
76
+ const asOffset = Number(dataView.getBigUint64(offset, le));
77
+ offset += 8;
78
+ const totalSummaryOffset = Number(dataView.getBigUint64(offset, le));
79
+ offset += 8;
80
+ const uncompressBufSize = dataView.getUint32(offset, le);
81
+ offset += 4;
82
+ const extHeaderOffset = Number(dataView.getBigUint64(offset, le));
83
+ offset += 8;
84
+ const zoomLevels = [];
85
+ for (let i = 0; i < numZoomLevels; i++) {
86
+ const reductionLevel = dataView.getUint32(offset, le);
87
+ offset += 4;
88
+ const reserved = dataView.getUint32(offset, le);
89
+ offset += 4;
90
+ const dataOffset = Number(dataView.getBigUint64(offset, le));
91
+ offset += 8;
92
+ const indexOffset = Number(dataView.getBigUint64(offset, le));
93
+ offset += 8;
94
+ zoomLevels.push({ reductionLevel, reserved, dataOffset, indexOffset });
124
95
  }
96
+ const fileType = magic === BIG_BED_MAGIC ? 'bigbed' : 'bigwig';
125
97
  // refetch header if it is too large on first pass,
126
98
  // 8*5 is the sizeof the totalSummary struct
127
- if (header.totalSummaryOffset > requestSize - 8 * 5) {
99
+ if (asOffset > requestSize || totalSummaryOffset > requestSize - 8 * 5) {
128
100
  return this._getMainHeader(opts, requestSize * 2);
129
101
  }
130
- if (header.totalSummaryOffset) {
131
- const tail = buffer.subarray(Number(header.totalSummaryOffset));
132
- const sum = ret.totalSummaryParser.parse(tail);
133
- header.totalSummary = { ...sum, basesCovered: Number(sum.basesCovered) };
102
+ let totalSummary;
103
+ if (totalSummaryOffset) {
104
+ const b = buffer.subarray(Number(totalSummaryOffset));
105
+ let offset = 0;
106
+ const dataView = new DataView(b.buffer, b.byteOffset, b.length);
107
+ const basesCovered = Number(dataView.getBigUint64(offset, le));
108
+ offset += 8;
109
+ const scoreMin = dataView.getFloat64(offset, le);
110
+ offset += 8;
111
+ const scoreMax = dataView.getFloat64(offset, le);
112
+ offset += 8;
113
+ const scoreSum = dataView.getFloat64(offset, le);
114
+ offset += 8;
115
+ const scoreSumSquares = dataView.getFloat64(offset, le);
116
+ offset += 8;
117
+ totalSummary = {
118
+ scoreMin,
119
+ scoreMax,
120
+ scoreSum,
121
+ scoreSumSquares,
122
+ basesCovered,
123
+ };
134
124
  }
135
- return { ...header, isBigEndian };
125
+ else {
126
+ throw new Error('no stats');
127
+ }
128
+ return {
129
+ zoomLevels,
130
+ magic,
131
+ extHeaderOffset,
132
+ numZoomLevels,
133
+ fieldCount,
134
+ totalSummary,
135
+ definedFieldCount,
136
+ uncompressBufSize,
137
+ asOffset,
138
+ chromTreeOffset,
139
+ totalSummaryOffset,
140
+ unzoomedDataOffset,
141
+ unzoomedIndexOffset,
142
+ fileType,
143
+ version,
144
+ isBigEndian,
145
+ autoSql: asOffset
146
+ ? myToString(buffer.subarray(asOffset, buffer.indexOf(0, asOffset)))
147
+ : '',
148
+ };
136
149
  }
137
150
  _isBigEndian(buffer) {
138
151
  let ret = buffer.readInt32LE(0);
@@ -148,43 +161,50 @@ export class BBI {
148
161
  // todo: add progress if long running
149
162
  async _readChromTree(header, opts) {
150
163
  const isBE = header.isBigEndian;
151
- const le = isBE ? 'big' : 'little';
164
+ const le = !isBE;
152
165
  const refsByNumber = [];
153
166
  const refsByName = {};
154
- let unzoomedDataOffset = Number(header.unzoomedDataOffset);
155
- const chromTreeOffset = Number(header.chromTreeOffset);
167
+ let unzoomedDataOffset = header.unzoomedDataOffset;
168
+ const chromTreeOffset = header.chromTreeOffset;
156
169
  while (unzoomedDataOffset % 4 !== 0) {
157
170
  unzoomedDataOffset += 1;
158
171
  }
159
172
  const off = unzoomedDataOffset - chromTreeOffset;
160
173
  const { buffer } = await this.bbi.read(Buffer.alloc(off), 0, off, Number(chromTreeOffset), opts);
161
- const p = getParsers(isBE);
162
- const { keySize } = p.chromTreeParser.parse(buffer);
163
- const leafNodeParser = new Parser()
164
- .endianess(le)
165
- .string('key', { stripNull: true, length: keySize })
166
- .uint32('refId')
167
- .uint32('refSize')
168
- .saveOffset('offset');
169
- const nonleafNodeParser = new Parser()
170
- .endianess(le)
171
- .skip(keySize)
172
- .uint64('childOffset')
173
- .saveOffset('offset');
174
+ const b = buffer;
175
+ const dataView = new DataView(b.buffer, b.byteOffset, b.length);
176
+ let offset = 0;
177
+ // const magic = dataView.getUint32(offset, le)
178
+ offset += 4;
179
+ // const blockSize = dataView.getUint32(offset, le)
180
+ offset += 4;
181
+ const keySize = dataView.getUint32(offset, le);
182
+ offset += 4;
183
+ // const valSize = dataView.getUint32(offset, le)
184
+ offset += 4;
185
+ // const itemCount = dataView.getBigUint64(offset, le)
186
+ offset += 8;
174
187
  const rootNodeOffset = 32;
175
188
  const bptReadNode = async (currentOffset) => {
176
189
  let offset = currentOffset;
177
190
  if (offset >= buffer.length) {
178
191
  throw new Error('reading beyond end of buffer');
179
192
  }
180
- const ret = p.isLeafNode.parse(buffer.subarray(offset));
181
- const { isLeafNode, cnt } = ret;
182
- offset += ret.offset;
193
+ const isLeafNode = dataView.getUint8(offset);
194
+ offset += 2; //skip 1
195
+ const cnt = dataView.getUint16(offset, le);
196
+ offset += 2;
183
197
  if (isLeafNode) {
184
- for (let n = 0; n < cnt; n += 1) {
185
- const leafRet = leafNodeParser.parse(buffer.subarray(offset));
186
- offset += leafRet.offset;
187
- const { key, refId, refSize } = leafRet;
198
+ for (let n = 0; n < cnt; n++) {
199
+ const key = buffer
200
+ .subarray(offset, offset + keySize)
201
+ .toString()
202
+ .replaceAll('\0', '');
203
+ offset += keySize;
204
+ const refId = dataView.getUint32(offset, le);
205
+ offset += 4;
206
+ const refSize = dataView.getUint32(offset, le);
207
+ offset += 4;
188
208
  const refRec = { name: key, id: refId, length: refSize };
189
209
  refsByName[this.renameRefSeqs(key)] = refId;
190
210
  refsByNumber[refId] = refRec;
@@ -193,10 +213,10 @@ export class BBI {
193
213
  else {
194
214
  // parse index node
195
215
  const nextNodes = [];
196
- for (let n = 0; n < cnt; n += 1) {
197
- const nonleafRet = nonleafNodeParser.parse(buffer.subarray(offset));
198
- const { childOffset } = nonleafRet;
199
- offset += nonleafRet.offset;
216
+ for (let n = 0; n < cnt; n++) {
217
+ offset += keySize;
218
+ const childOffset = Number(dataView.getBigUint64(offset, le));
219
+ offset += 8;
200
220
  nextNodes.push(bptReadNode(Number(childOffset) - Number(chromTreeOffset)));
201
221
  }
202
222
  await Promise.all(nextNodes);
package/esm/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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"}