@gmod/bam 1.1.18 → 2.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 (81) hide show
  1. package/CHANGELOG.md +66 -25
  2. package/README.md +95 -57
  3. package/dist/bai.d.ts +34 -15
  4. package/dist/bai.js +87 -91
  5. package/dist/bai.js.map +1 -1
  6. package/dist/bamFile.d.ts +33 -27
  7. package/dist/bamFile.js +132 -130
  8. package/dist/bamFile.js.map +1 -1
  9. package/dist/chunk.d.ts +4 -8
  10. package/dist/chunk.js +2 -8
  11. package/dist/chunk.js.map +1 -1
  12. package/dist/csi.d.ts +74 -10
  13. package/dist/csi.js +78 -90
  14. package/dist/csi.js.map +1 -1
  15. package/dist/htsget.d.ts +5 -8
  16. package/dist/htsget.js +75 -49
  17. package/dist/htsget.js.map +1 -1
  18. package/dist/index.d.ts +5 -6
  19. package/dist/index.js +11 -11
  20. package/dist/index.js.map +1 -1
  21. package/dist/indexFile.d.ts +0 -6
  22. package/dist/indexFile.js +0 -35
  23. package/dist/indexFile.js.map +1 -1
  24. package/dist/nullIndex.d.ts +7 -0
  25. package/dist/nullIndex.js +33 -0
  26. package/dist/nullIndex.js.map +1 -0
  27. package/dist/record.d.ts +2 -2
  28. package/dist/record.js +34 -25
  29. package/dist/record.js.map +1 -1
  30. package/dist/sam.js +11 -7
  31. package/dist/sam.js.map +1 -1
  32. package/dist/util.d.ts +13 -1
  33. package/dist/util.js +47 -15
  34. package/dist/util.js.map +1 -1
  35. package/dist/virtualOffset.js.map +1 -1
  36. package/esm/bai.d.ts +34 -15
  37. package/esm/bai.js +86 -91
  38. package/esm/bai.js.map +1 -1
  39. package/esm/bamFile.d.ts +33 -27
  40. package/esm/bamFile.js +124 -120
  41. package/esm/bamFile.js.map +1 -1
  42. package/esm/chunk.d.ts +4 -8
  43. package/esm/chunk.js +2 -8
  44. package/esm/chunk.js.map +1 -1
  45. package/esm/csi.d.ts +74 -10
  46. package/esm/csi.js +85 -93
  47. package/esm/csi.js.map +1 -1
  48. package/esm/htsget.d.ts +5 -8
  49. package/esm/htsget.js +68 -43
  50. package/esm/htsget.js.map +1 -1
  51. package/esm/index.d.ts +5 -6
  52. package/esm/index.js +5 -6
  53. package/esm/index.js.map +1 -1
  54. package/esm/indexFile.d.ts +0 -6
  55. package/esm/indexFile.js +0 -22
  56. package/esm/indexFile.js.map +1 -1
  57. package/esm/nullIndex.d.ts +7 -0
  58. package/esm/nullIndex.js +16 -0
  59. package/esm/nullIndex.js.map +1 -0
  60. package/esm/record.d.ts +2 -2
  61. package/esm/record.js +34 -25
  62. package/esm/record.js.map +1 -1
  63. package/esm/sam.js +11 -7
  64. package/esm/sam.js.map +1 -1
  65. package/esm/util.d.ts +13 -1
  66. package/esm/util.js +40 -14
  67. package/esm/util.js.map +1 -1
  68. package/esm/virtualOffset.js.map +1 -1
  69. package/package.json +19 -21
  70. package/src/bai.ts +99 -102
  71. package/src/bamFile.ts +174 -198
  72. package/src/chunk.ts +6 -20
  73. package/src/csi.ts +102 -111
  74. package/src/htsget.ts +81 -61
  75. package/src/index.ts +5 -7
  76. package/src/indexFile.ts +0 -27
  77. package/src/nullIndex.ts +18 -0
  78. package/src/record.ts +34 -25
  79. package/src/sam.ts +11 -7
  80. package/src/util.ts +54 -13
  81. package/src/declare.d.ts +0 -2
package/dist/util.js CHANGED
@@ -8,8 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.optimizeChunks = exports.makeOpts = exports.canMergeBlocks = exports.abortBreakPoint = exports.checkAbortSignal = exports.longToNumber = exports.timeout = void 0;
15
+ exports.parseNameBytes = exports.findFirstData = exports.parsePseudoBin = exports.optimizeChunks = exports.makeOpts = exports.canMergeBlocks = exports.abortBreakPoint = exports.checkAbortSignal = exports.longToNumber = exports.timeout = void 0;
16
+ const long_1 = __importDefault(require("long"));
13
17
  function timeout(ms) {
14
18
  return new Promise(resolve => setTimeout(resolve, ms));
15
19
  }
@@ -39,15 +43,15 @@ function checkAbortSignal(signal) {
39
43
  }
40
44
  if (signal.aborted) {
41
45
  // console.log('bam aborted!')
42
- if (typeof DOMException !== 'undefined') {
43
- throw new DOMException('aborted', 'AbortError');
44
- }
45
- else {
46
+ if (typeof DOMException === 'undefined') {
46
47
  const e = new Error('aborted');
47
48
  //@ts-ignore
48
49
  e.code = 'ERR_ABORTED';
49
50
  throw e;
50
51
  }
52
+ else {
53
+ throw new DOMException('aborted', 'AbortError');
54
+ }
51
55
  }
52
56
  }
53
57
  exports.checkAbortSignal = checkAbortSignal;
@@ -75,22 +79,17 @@ function makeOpts(obj = {}) {
75
79
  exports.makeOpts = makeOpts;
76
80
  function optimizeChunks(chunks, lowest) {
77
81
  const mergedChunks = [];
78
- let lastChunk = null;
82
+ let lastChunk;
79
83
  if (chunks.length === 0) {
80
84
  return chunks;
81
85
  }
82
86
  chunks.sort((c0, c1) => {
83
87
  const dif = c0.minv.blockPosition - c1.minv.blockPosition;
84
- if (dif !== 0) {
85
- return dif;
86
- }
87
- else {
88
- return c0.minv.dataPosition - c1.minv.dataPosition;
89
- }
88
+ return dif === 0 ? c0.minv.dataPosition - c1.minv.dataPosition : dif;
90
89
  });
91
- chunks.forEach(chunk => {
90
+ for (const chunk of chunks) {
92
91
  if (!lowest || chunk.maxv.compareTo(lowest) > 0) {
93
- if (lastChunk === null) {
92
+ if (lastChunk === undefined) {
94
93
  mergedChunks.push(chunk);
95
94
  lastChunk = chunk;
96
95
  }
@@ -106,8 +105,41 @@ function optimizeChunks(chunks, lowest) {
106
105
  }
107
106
  }
108
107
  }
109
- });
108
+ }
110
109
  return mergedChunks;
111
110
  }
112
111
  exports.optimizeChunks = optimizeChunks;
112
+ function parsePseudoBin(bytes, offset) {
113
+ const lineCount = longToNumber(long_1.default.fromBytesLE(Array.prototype.slice.call(bytes, offset, offset + 8), true));
114
+ return { lineCount };
115
+ }
116
+ exports.parsePseudoBin = parsePseudoBin;
117
+ function findFirstData(firstDataLine, virtualOffset) {
118
+ return firstDataLine
119
+ ? firstDataLine.compareTo(virtualOffset) > 0
120
+ ? virtualOffset
121
+ : firstDataLine
122
+ : virtualOffset;
123
+ }
124
+ exports.findFirstData = findFirstData;
125
+ function parseNameBytes(namesBytes, renameRefSeq = s => s) {
126
+ let currRefId = 0;
127
+ let currNameStart = 0;
128
+ const refIdToName = [];
129
+ const refNameToId = {};
130
+ for (let i = 0; i < namesBytes.length; i += 1) {
131
+ if (!namesBytes[i]) {
132
+ if (currNameStart < i) {
133
+ let refName = namesBytes.toString('utf8', currNameStart, i);
134
+ refName = renameRefSeq(refName);
135
+ refIdToName[currRefId] = refName;
136
+ refNameToId[refName] = currRefId;
137
+ }
138
+ currNameStart = i + 1;
139
+ currRefId += 1;
140
+ }
141
+ }
142
+ return { refNameToId, refIdToName };
143
+ }
144
+ exports.parseNameBytes = parseNameBytes;
113
145
  //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"virtualOffset.js","sourceRoot":"","sources":["../src/virtualOffset.ts"],"names":[],"mappings":";;;AAAA,MAAqB,aAAa;IAGhC,YAAY,aAAqB,EAAE,YAAoB;QACrD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA,CAAC,wCAAwC;QAC3E,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA,CAAC,sCAAsC;IACzE,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;IACrD,CAAC;IAED,SAAS,CAAC,CAAgB;QACxB,OAAO,CACL,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAC3E,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,IAAqB;QACjC,IAAI,GAAG,CAAA;QACP,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;YACnB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;SACd;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC9B,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBAC9B,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;aACd;SACF;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;AA/BD,gCA+BC;AACD,SAAgB,SAAS,CAAC,KAAa,EAAE,MAAM,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK;IACpE,IAAI,SAAS,EAAE;QACb,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;KACnE;IAED,OAAO,IAAI,aAAa,CACtB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa;QAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,WAAW;QAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;QAC7B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO;QAC3B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK;QACzB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EACnB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CACzC,CAAA;AACH,CAAC;AAdD,8BAcC"}
1
+ {"version":3,"file":"virtualOffset.js","sourceRoot":"","sources":["../src/virtualOffset.ts"],"names":[],"mappings":";;;AAAA,MAAqB,aAAa;IAGhC,YAAY,aAAqB,EAAE,YAAoB;QACrD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA,CAAC,wCAAwC;QAC3E,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA,CAAC,sCAAsC;IACzE,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,CAAA;IACrD,CAAC;IAED,SAAS,CAAC,CAAgB;QACxB,OAAO,CACL,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY,CAC3E,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,IAAqB;QACjC,IAAI,GAAG,CAAA;QACP,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACf,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;AA/BD,gCA+BC;AACD,SAAgB,SAAS,CAAC,KAAa,EAAE,MAAM,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK;IACpE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,IAAI,aAAa,CACtB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa;QAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,WAAW;QAC/B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;QAC7B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO;QAC3B,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK;QACzB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,EACnB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CACzC,CAAA;AACH,CAAC;AAdD,8BAcC"}
package/esm/bai.d.ts CHANGED
@@ -1,26 +1,45 @@
1
- /// <reference types="node" />
1
+ import VirtualOffset from './virtualOffset';
2
2
  import Chunk from './chunk';
3
- import IndexFile from './indexFile';
4
3
  import { BaseOpts } from './util';
4
+ import IndexFile from './indexFile';
5
5
  export default class BAI extends IndexFile {
6
- baiP?: Promise<Buffer>;
7
- parsePseudoBin(bytes: Buffer, offset: number): {
8
- lineCount: number;
9
- };
10
- lineCount(refId: number, opts?: BaseOpts): Promise<any>;
11
- fetchBai(opts?: BaseOpts): Promise<Buffer>;
12
- _parse(): Promise<{
13
- [key: string]: any;
6
+ setupP?: ReturnType<BAI['_parse']>;
7
+ lineCount(refId: number, opts?: BaseOpts): Promise<number>;
8
+ _parse(opts?: BaseOpts): Promise<{
9
+ bai: boolean;
10
+ firstDataLine: VirtualOffset | undefined;
11
+ maxBlockSize: number;
12
+ indices: {
13
+ binIndex: {
14
+ [key: string]: Chunk[];
15
+ };
16
+ linearIndex: VirtualOffset[];
17
+ stats?: {
18
+ lineCount: number;
19
+ } | undefined;
20
+ }[];
21
+ refCount: number;
14
22
  }>;
15
23
  indexCov(seqId: number, start?: number, end?: number, opts?: BaseOpts): Promise<{
16
24
  start: number;
17
25
  end: number;
18
26
  score: number;
19
27
  }[]>;
20
- /**
21
- * calculate the list of bins that may overlap with region [beg,end) (zero-based half-open)
22
- * @returns {Array[number]}
23
- */
24
- reg2bins(beg: number, end: number): number[][];
25
28
  blocksForRange(refId: number, min: number, max: number, opts?: BaseOpts): Promise<Chunk[]>;
29
+ parse(opts?: BaseOpts): Promise<{
30
+ bai: boolean;
31
+ firstDataLine: VirtualOffset | undefined;
32
+ maxBlockSize: number;
33
+ indices: {
34
+ binIndex: {
35
+ [key: string]: Chunk[];
36
+ };
37
+ linearIndex: VirtualOffset[];
38
+ stats?: {
39
+ lineCount: number;
40
+ } | undefined;
41
+ }[];
42
+ refCount: number;
43
+ }>;
44
+ hasRefSeq(seqId: number, opts?: BaseOpts): Promise<boolean>;
26
45
  }
package/esm/bai.js CHANGED
@@ -1,8 +1,7 @@
1
- import Long from 'long';
2
1
  import { fromBytes } from './virtualOffset';
3
2
  import Chunk from './chunk';
3
+ import { optimizeChunks, parsePseudoBin, findFirstData } from './util';
4
4
  import IndexFile from './indexFile';
5
- import { longToNumber, optimizeChunks } from './util';
6
5
  const BAI_MAGIC = 21578050; // BAI\1
7
6
  function roundDown(n, multiple) {
8
7
  return n - (n % multiple);
@@ -10,88 +9,90 @@ function roundDown(n, multiple) {
10
9
  function roundUp(n, multiple) {
11
10
  return n - (n % multiple) + multiple;
12
11
  }
12
+ function reg2bins(beg, end) {
13
+ end -= 1;
14
+ return [
15
+ [0, 0],
16
+ [1 + (beg >> 26), 1 + (end >> 26)],
17
+ [9 + (beg >> 23), 9 + (end >> 23)],
18
+ [73 + (beg >> 20), 73 + (end >> 20)],
19
+ [585 + (beg >> 17), 585 + (end >> 17)],
20
+ [4681 + (beg >> 14), 4681 + (end >> 14)],
21
+ ];
22
+ }
13
23
  export default class BAI extends IndexFile {
14
- parsePseudoBin(bytes, offset) {
15
- const lineCount = longToNumber(Long.fromBytesLE(Array.prototype.slice.call(bytes, offset + 16, offset + 24), true));
16
- return { lineCount };
17
- }
18
- async lineCount(refId, opts = {}) {
19
- const prom = await this.parse(opts);
20
- const index = prom.indices[refId];
21
- if (!index) {
22
- return -1;
23
- }
24
- const ret = index.stats || {};
25
- return ret.lineCount === undefined ? -1 : ret.lineCount;
26
- }
27
- fetchBai(opts = {}) {
28
- if (!this.baiP) {
29
- this.baiP = this.filehandle.readFile(opts).catch(e => {
30
- this.baiP = undefined;
31
- throw e;
32
- });
33
- }
34
- return this.baiP;
24
+ async lineCount(refId, opts) {
25
+ var _a, _b;
26
+ const indexData = await this.parse(opts);
27
+ return ((_b = (_a = indexData.indices[refId]) === null || _a === void 0 ? void 0 : _a.stats) === null || _b === void 0 ? void 0 : _b.lineCount) || 0;
35
28
  }
36
29
  // fetch and parse the index
37
- async _parse() {
38
- const data = { bai: true, maxBlockSize: 1 << 16 };
39
- const bytes = await this.fetchBai();
30
+ async _parse(opts) {
31
+ const bytes = (await this.filehandle.readFile(opts));
40
32
  // check BAI magic numbers
41
33
  if (bytes.readUInt32LE(0) !== BAI_MAGIC) {
42
34
  throw new Error('Not a BAI file');
43
35
  }
44
- data.refCount = bytes.readInt32LE(4);
36
+ const refCount = bytes.readInt32LE(4);
45
37
  const depth = 5;
46
38
  const binLimit = ((1 << ((depth + 1) * 3)) - 1) / 7;
47
39
  // read the indexes for each reference sequence
48
- data.indices = new Array(data.refCount);
49
- let currOffset = 8;
50
- for (let i = 0; i < data.refCount; i += 1) {
40
+ let curr = 8;
41
+ let firstDataLine;
42
+ const indices = new Array(refCount);
43
+ for (let i = 0; i < refCount; i++) {
51
44
  // the binning index
52
- const binCount = bytes.readInt32LE(currOffset);
45
+ const binCount = bytes.readInt32LE(curr);
53
46
  let stats;
54
- currOffset += 4;
47
+ curr += 4;
55
48
  const binIndex = {};
56
49
  for (let j = 0; j < binCount; j += 1) {
57
- const bin = bytes.readUInt32LE(currOffset);
58
- currOffset += 4;
50
+ const bin = bytes.readUInt32LE(curr);
51
+ curr += 4;
59
52
  if (bin === binLimit + 1) {
60
- currOffset += 4;
61
- stats = this.parsePseudoBin(bytes, currOffset);
62
- currOffset += 32;
53
+ curr += 4;
54
+ stats = parsePseudoBin(bytes, curr + 16);
55
+ curr += 32;
63
56
  }
64
57
  else if (bin > binLimit + 1) {
65
58
  throw new Error('bai index contains too many bins, please use CSI');
66
59
  }
67
60
  else {
68
- const chunkCount = bytes.readInt32LE(currOffset);
69
- currOffset += 4;
61
+ const chunkCount = bytes.readInt32LE(curr);
62
+ curr += 4;
70
63
  const chunks = new Array(chunkCount);
71
- for (let k = 0; k < chunkCount; k += 1) {
72
- const u = fromBytes(bytes, currOffset);
73
- const v = fromBytes(bytes, currOffset + 8);
74
- currOffset += 16;
75
- this._findFirstData(data, u);
64
+ for (let k = 0; k < chunkCount; k++) {
65
+ const u = fromBytes(bytes, curr);
66
+ curr += 8;
67
+ const v = fromBytes(bytes, curr);
68
+ curr += 8;
69
+ firstDataLine = findFirstData(firstDataLine, u);
76
70
  chunks[k] = new Chunk(u, v, bin);
77
71
  }
78
72
  binIndex[bin] = chunks;
79
73
  }
80
74
  }
81
- const linearCount = bytes.readInt32LE(currOffset);
82
- currOffset += 4;
83
- // as we're going through the linear index, figure out
84
- // the smallest virtual offset in the indexes, which
85
- // tells us where the BAM header ends
75
+ const linearCount = bytes.readInt32LE(curr);
76
+ curr += 4;
77
+ // as we're going through the linear index, figure out the smallest
78
+ // virtual offset in the indexes, which tells us where the BAM header
79
+ // ends
86
80
  const linearIndex = new Array(linearCount);
87
- for (let k = 0; k < linearCount; k += 1) {
88
- linearIndex[k] = fromBytes(bytes, currOffset);
89
- currOffset += 8;
90
- this._findFirstData(data, linearIndex[k]);
81
+ for (let j = 0; j < linearCount; j++) {
82
+ const offset = fromBytes(bytes, curr);
83
+ curr += 8;
84
+ firstDataLine = findFirstData(firstDataLine, offset);
85
+ linearIndex[j] = offset;
91
86
  }
92
- data.indices[i] = { binIndex, linearIndex, stats };
87
+ indices[i] = { binIndex, linearIndex, stats };
93
88
  }
94
- return data;
89
+ return {
90
+ bai: true,
91
+ firstDataLine,
92
+ maxBlockSize: 1 << 16,
93
+ indices,
94
+ refCount,
95
+ };
95
96
  }
96
97
  async indexCov(seqId, start, end, opts = {}) {
97
98
  const v = 16384;
@@ -102,18 +103,14 @@ export default class BAI extends IndexFile {
102
103
  return [];
103
104
  }
104
105
  const { linearIndex = [], stats } = seqIdx;
105
- if (!linearIndex.length) {
106
+ if (linearIndex.length === 0) {
106
107
  return [];
107
108
  }
108
- const e = end !== undefined ? roundUp(end, v) : (linearIndex.length - 1) * v;
109
- const s = start !== undefined ? roundDown(start, v) : 0;
110
- let depths;
111
- if (range) {
112
- depths = new Array((e - s) / v);
113
- }
114
- else {
115
- depths = new Array(linearIndex.length - 1);
116
- }
109
+ const e = end === undefined ? (linearIndex.length - 1) * v : roundUp(end, v);
110
+ const s = start === undefined ? 0 : roundDown(start, v);
111
+ const depths = range
112
+ ? new Array((e - s) / v)
113
+ : new Array(linearIndex.length - 1);
117
114
  const totalSize = linearIndex[linearIndex.length - 1].blockPosition;
118
115
  if (e > (linearIndex.length - 1) * v) {
119
116
  throw new Error('query outside of range of linear index');
@@ -127,24 +124,10 @@ export default class BAI extends IndexFile {
127
124
  };
128
125
  currentPos = linearIndex[i + 1].blockPosition;
129
126
  }
130
- return depths.map(d => {
131
- return { ...d, score: (d.score * stats.lineCount) / totalSize };
132
- });
133
- }
134
- /**
135
- * calculate the list of bins that may overlap with region [beg,end) (zero-based half-open)
136
- * @returns {Array[number]}
137
- */
138
- reg2bins(beg, end) {
139
- end -= 1;
140
- return [
141
- [0, 0],
142
- [1 + (beg >> 26), 1 + (end >> 26)],
143
- [9 + (beg >> 23), 9 + (end >> 23)],
144
- [73 + (beg >> 20), 73 + (end >> 20)],
145
- [585 + (beg >> 17), 585 + (end >> 17)],
146
- [4681 + (beg >> 14), 4681 + (end >> 14)],
147
- ];
127
+ return depths.map(d => ({
128
+ ...d,
129
+ score: (d.score * ((stats === null || stats === void 0 ? void 0 : stats.lineCount) || 0)) / totalSize,
130
+ }));
148
131
  }
149
132
  async blocksForRange(refId, min, max, opts = {}) {
150
133
  if (min < 0) {
@@ -159,15 +142,15 @@ export default class BAI extends IndexFile {
159
142
  return [];
160
143
  }
161
144
  // List of bin #s that overlap min, max
162
- const overlappingBins = this.reg2bins(min, max);
145
+ const overlappingBins = reg2bins(min, max);
163
146
  const chunks = [];
164
147
  // Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
165
148
  for (const [start, end] of overlappingBins) {
166
149
  for (let bin = start; bin <= end; bin++) {
167
150
  if (ba.binIndex[bin]) {
168
151
  const binChunks = ba.binIndex[bin];
169
- for (let c = 0; c < binChunks.length; ++c) {
170
- chunks.push(new Chunk(binChunks[c].minv, binChunks[c].maxv, bin));
152
+ for (const binChunk of binChunks) {
153
+ chunks.push(binChunk);
171
154
  }
172
155
  }
173
156
  }
@@ -175,18 +158,30 @@ export default class BAI extends IndexFile {
175
158
  // Use the linear index to find minimum file position of chunks that could
176
159
  // contain alignments in the region
177
160
  const nintv = ba.linearIndex.length;
178
- let lowest = null;
161
+ let lowest;
179
162
  const minLin = Math.min(min >> 14, nintv - 1);
180
163
  const maxLin = Math.min(max >> 14, nintv - 1);
181
164
  for (let i = minLin; i <= maxLin; ++i) {
182
165
  const vp = ba.linearIndex[i];
183
- if (vp) {
184
- if (!lowest || vp.compareTo(lowest) < 0) {
185
- lowest = vp;
186
- }
166
+ if (vp && (!lowest || vp.compareTo(lowest) < 0)) {
167
+ lowest = vp;
187
168
  }
188
169
  }
189
170
  return optimizeChunks(chunks, lowest);
190
171
  }
172
+ async parse(opts = {}) {
173
+ if (!this.setupP) {
174
+ this.setupP = this._parse(opts).catch(e => {
175
+ this.setupP = undefined;
176
+ throw e;
177
+ });
178
+ }
179
+ return this.setupP;
180
+ }
181
+ async hasRefSeq(seqId, opts = {}) {
182
+ var _a;
183
+ const header = await this.parse(opts);
184
+ return !!((_a = header.indices[seqId]) === null || _a === void 0 ? void 0 : _a.binIndex);
185
+ }
191
186
  }
192
187
  //# sourceMappingURL=bai.js.map
package/esm/bai.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bai.js","sourceRoot":"","sources":["../src/bai.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bai.js","sourceRoot":"","sources":["../src/bai.ts"],"names":[],"mappings":"AAAA,OAAsB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,MAAM,SAAS,CAAA;AAE3B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAY,MAAM,QAAQ,CAAA;AAChF,OAAO,SAAS,MAAM,aAAa,CAAA;AAEnC,MAAM,SAAS,GAAG,QAAQ,CAAA,CAAC,QAAQ;AAEnC,SAAS,SAAS,CAAC,CAAS,EAAE,QAAgB;IAC5C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAA;AAC3B,CAAC;AACD,SAAS,OAAO,CAAC,CAAS,EAAE,QAAgB;IAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,CAAA;AACtC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,GAAG,IAAI,CAAC,CAAA;IACR,OAAO;QACL,CAAC,CAAC,EAAE,CAAC,CAAC;QACN,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;KACzC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,SAAS;IAGxC,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,IAAe;;QAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxC,OAAO,CAAA,MAAA,MAAA,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,0CAAE,KAAK,0CAAE,SAAS,KAAI,CAAC,CAAA;IACxD,CAAC;IAED,4BAA4B;IAC5B,KAAK,CAAC,MAAM,CAAC,IAAe;QAC1B,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAW,CAAA;QAE9D,0BAA0B;QAC1B,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACnC,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,KAAK,GAAG,CAAC,CAAA;QACf,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QAEnD,+CAA+C;QAC/C,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,aAAwC,CAAA;QAI5C,MAAM,OAAO,GAAG,IAAI,KAAK,CAItB,QAAQ,CAAC,CAAA;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,oBAAoB;YACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YACxC,IAAI,KAAK,CAAA;YAET,IAAI,IAAI,CAAC,CAAA;YACT,MAAM,QAAQ,GAA+B,EAAE,CAAA;YAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;gBACpC,IAAI,IAAI,CAAC,CAAA;gBACT,IAAI,GAAG,KAAK,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,CAAA;oBACT,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;oBACxC,IAAI,IAAI,EAAE,CAAA;gBACZ,CAAC;qBAAM,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;gBACrE,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;oBAC1C,IAAI,IAAI,CAAC,CAAA;oBACT,MAAM,MAAM,GAAG,IAAI,KAAK,CAAQ,UAAU,CAAC,CAAA;oBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;wBACpC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;wBAChC,IAAI,IAAI,CAAC,CAAA;wBACT,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;wBAChC,IAAI,IAAI,CAAC,CAAA;wBACT,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;wBAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;oBAClC,CAAC;oBACD,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;gBACxB,CAAC;YACH,CAAC;YAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAC3C,IAAI,IAAI,CAAC,CAAA;YACT,mEAAmE;YACnE,qEAAqE;YACrE,OAAO;YACP,MAAM,WAAW,GAAG,IAAI,KAAK,CAAgB,WAAW,CAAC,CAAA;YACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gBACrC,IAAI,IAAI,CAAC,CAAA;gBACT,aAAa,GAAG,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;gBACpD,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAA;YACzB,CAAC;YAED,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAA;QAC/C,CAAC;QAED,OAAO;YACL,GAAG,EAAE,IAAI;YACT,aAAa;YACb,YAAY,EAAE,CAAC,IAAI,EAAE;YACrB,OAAO;YACP,QAAQ;SACT,CAAA;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,KAAa,EACb,KAAc,EACd,GAAY,EACZ,OAAiB,EAAE;QAEnB,MAAM,CAAC,GAAG,KAAK,CAAA;QACf,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,CAAA;QACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,CAAA;QAC1C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,CAAC,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QAC5E,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,KAAK;YAClB,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACrC,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,aAAa,CAAA;QACnE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;QAC3D,CAAC;QACD,IAAI,UAAU,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAA;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,CAAC,CAAC,GAAG;gBACV,KAAK,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,UAAU;gBACpD,KAAK,EAAE,CAAC,GAAG,CAAC;gBACZ,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;aACf,CAAA;YACD,UAAU,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAA;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtB,GAAG,CAAC;YACJ,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,KAAI,CAAC,CAAC,CAAC,GAAG,SAAS;SACvD,CAAC,CAAC,CAAA;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,KAAa,EACb,GAAW,EACX,GAAW,EACX,OAAiB,EAAE;QAEnB,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,GAAG,GAAG,CAAC,CAAA;QACT,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,EAAE,CAAA;QACX,CAAC;QAED,uCAAuC;QACvC,MAAM,eAAe,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAY,EAAE,CAAA;QAE1B,sEAAsE;QACtE,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC;YAC3C,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;gBACxC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;oBAClC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;wBACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,mCAAmC;QACnC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAA;QACnC,IAAI,MAAiC,CAAA;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC7C,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;YAC5B,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAChD,MAAM,GAAG,EAAE,CAAA;YACb,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAiB,EAAE;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACxC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;gBACvB,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,OAAiB,EAAE;;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,OAAO,CAAC,CAAC,CAAA,MAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,0CAAE,QAAQ,CAAA,CAAA;IAC1C,CAAC;CACF"}
package/esm/bamFile.d.ts CHANGED
@@ -1,28 +1,27 @@
1
1
  /// <reference types="node" />
2
+ import { Buffer } from 'buffer';
2
3
  import { GenericFilehandle } from 'generic-filehandle';
4
+ import BAI from './bai';
5
+ import CSI from './csi';
3
6
  import Chunk from './chunk';
4
7
  import BAMFeature from './record';
5
8
  import { BamOpts, BaseOpts } from './util';
6
9
  export declare const BAM_MAGIC = 21840194;
7
10
  export default class BamFile {
8
- private renameRefSeq;
9
- private bam;
10
- private index;
11
- private chunkSizeLimit;
12
- private fetchSizeLimit;
13
- private header;
14
- protected chrToIndex: any;
15
- protected indexToChr: any;
16
- private yieldThreadTime;
11
+ renameRefSeq: (a: string) => string;
12
+ bam: GenericFilehandle;
13
+ header?: string;
14
+ chrToIndex?: Record<string, number>;
15
+ indexToChr?: {
16
+ refName: string;
17
+ length: number;
18
+ }[];
19
+ yieldThreadTime: number;
20
+ index?: BAI | CSI;
21
+ htsget: boolean;
22
+ headerP?: ReturnType<BamFile['getHeaderPre']>;
17
23
  private featureCache;
18
- /**
19
- * @param {object} args
20
- * @param {string} [args.bamPath]
21
- * @param {FileHandle} [args.bamFilehandle]
22
- * @param {string} [args.baiPath]
23
- * @param {FileHandle} [args.baiFilehandle]
24
- */
25
- constructor({ bamFilehandle, bamPath, bamUrl, baiPath, baiFilehandle, baiUrl, csiPath, csiFilehandle, csiUrl, fetchSizeLimit, chunkSizeLimit, yieldThreadTime, renameRefSeqs, }: {
24
+ constructor({ bamFilehandle, bamPath, bamUrl, baiPath, baiFilehandle, baiUrl, csiPath, csiFilehandle, csiUrl, htsget, yieldThreadTime, renameRefSeqs, }: {
26
25
  bamFilehandle?: GenericFilehandle;
27
26
  bamPath?: string;
28
27
  bamUrl?: string;
@@ -32,19 +31,25 @@ export default class BamFile {
32
31
  csiPath?: string;
33
32
  csiFilehandle?: GenericFilehandle;
34
33
  csiUrl?: string;
35
- fetchSizeLimit?: number;
36
- chunkSizeLimit?: number;
37
34
  renameRefSeqs?: (a: string) => string;
38
35
  yieldThreadTime?: number;
36
+ htsget?: boolean;
39
37
  });
40
- getHeader(origOpts?: AbortSignal | BaseOpts): Promise<{
38
+ getHeaderPre(origOpts?: BaseOpts): Promise<{
41
39
  tag: string;
42
40
  data: {
43
41
  tag: string;
44
42
  value: string;
45
43
  }[];
46
- }[]>;
47
- getHeaderText(opts?: BaseOpts): Promise<any>;
44
+ }[] | undefined>;
45
+ getHeader(opts?: BaseOpts): Promise<{
46
+ tag: string;
47
+ data: {
48
+ tag: string;
49
+ value: string;
50
+ }[];
51
+ }[] | undefined>;
52
+ getHeaderText(opts?: BaseOpts): Promise<string | undefined>;
48
53
  _readRefSeqs(start: number, refSeqBytes: number, opts?: BaseOpts): Promise<{
49
54
  chrToIndex: {
50
55
  [key: string]: number;
@@ -56,19 +61,20 @@ export default class BamFile {
56
61
  }>;
57
62
  getRecordsForRange(chr: string, min: number, max: number, opts?: BamOpts): Promise<BAMFeature[]>;
58
63
  streamRecordsForRange(chr: string, min: number, max: number, opts?: BamOpts): AsyncGenerator<BAMFeature[], void, unknown>;
59
- _fetchChunkFeatures(chunks: Chunk[], chrId: number, min: number, max: number, opts: BamOpts): AsyncGenerator<BAMFeature[], void, unknown>;
64
+ _fetchChunkFeatures(chunks: Chunk[], chrId: number, min: number, max: number, opts?: BamOpts): AsyncGenerator<BAMFeature[], void, unknown>;
60
65
  fetchPairs(chrId: number, feats: BAMFeature[][], opts: BamOpts): Promise<BAMFeature[]>;
66
+ _readRegion(position: number, size: number, opts?: BaseOpts): Promise<Buffer>;
61
67
  _readChunk({ chunk, opts }: {
62
68
  chunk: Chunk;
63
69
  opts: BaseOpts;
64
70
  }): Promise<{
65
- data: any;
66
- cpositions: any;
67
- dpositions: any;
71
+ data: Buffer;
72
+ cpositions: number[];
73
+ dpositions: number[];
68
74
  chunk: Chunk;
69
75
  }>;
70
76
  readBamFeatures(ba: Buffer, cpositions: number[], dpositions: number[], chunk: Chunk): Promise<BAMFeature[]>;
71
- hasRefSeq(seqName: string): Promise<boolean>;
77
+ hasRefSeq(seqName: string): Promise<boolean | undefined>;
72
78
  lineCount(seqName: string): Promise<number>;
73
79
  indexCov(seqName: string, start?: number, end?: number): Promise<{
74
80
  start: number;