@gmod/bam 1.1.18 → 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 (79) hide show
  1. package/CHANGELOG.md +61 -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 +127 -121
  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 +72 -47
  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 -24
  29. package/dist/record.js.map +1 -1
  30. package/dist/sam.js +9 -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/esm/bai.d.ts +34 -15
  36. package/esm/bai.js +86 -91
  37. package/esm/bai.js.map +1 -1
  38. package/esm/bamFile.d.ts +33 -27
  39. package/esm/bamFile.js +124 -120
  40. package/esm/bamFile.js.map +1 -1
  41. package/esm/chunk.d.ts +4 -8
  42. package/esm/chunk.js +2 -8
  43. package/esm/chunk.js.map +1 -1
  44. package/esm/csi.d.ts +74 -10
  45. package/esm/csi.js +85 -93
  46. package/esm/csi.js.map +1 -1
  47. package/esm/htsget.d.ts +5 -8
  48. package/esm/htsget.js +68 -43
  49. package/esm/htsget.js.map +1 -1
  50. package/esm/index.d.ts +5 -6
  51. package/esm/index.js +5 -6
  52. package/esm/index.js.map +1 -1
  53. package/esm/indexFile.d.ts +0 -6
  54. package/esm/indexFile.js +0 -22
  55. package/esm/indexFile.js.map +1 -1
  56. package/esm/nullIndex.d.ts +7 -0
  57. package/esm/nullIndex.js +16 -0
  58. package/esm/nullIndex.js.map +1 -0
  59. package/esm/record.d.ts +2 -2
  60. package/esm/record.js +34 -24
  61. package/esm/record.js.map +1 -1
  62. package/esm/sam.js +9 -7
  63. package/esm/sam.js.map +1 -1
  64. package/esm/util.d.ts +13 -1
  65. package/esm/util.js +40 -14
  66. package/esm/util.js.map +1 -1
  67. package/package.json +16 -17
  68. package/src/bai.ts +99 -102
  69. package/src/bamFile.ts +174 -198
  70. package/src/chunk.ts +6 -20
  71. package/src/csi.ts +102 -111
  72. package/src/htsget.ts +81 -61
  73. package/src/index.ts +5 -7
  74. package/src/indexFile.ts +0 -27
  75. package/src/nullIndex.ts +18 -0
  76. package/src/record.ts +34 -24
  77. package/src/sam.ts +9 -7
  78. package/src/util.ts +54 -13
  79. package/src/declare.d.ts +0 -2
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":"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"}
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;