@gmod/bam 4.0.1 → 5.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.
- package/CHANGELOG.md +5 -5
- package/README.md +7 -11
- package/dist/bai.d.ts +1 -1
- package/dist/bai.js +151 -169
- package/dist/bai.js.map +1 -1
- package/dist/bamFile.d.ts +4 -5
- package/dist/bamFile.js +271 -350
- package/dist/bamFile.js.map +1 -1
- package/dist/chunk.d.ts +1 -1
- package/dist/chunk.js +5 -0
- package/dist/chunk.js.map +1 -1
- package/dist/csi.d.ts +1 -1
- package/dist/csi.js +140 -145
- package/dist/csi.js.map +1 -1
- package/dist/htsget.d.ts +1 -2
- package/dist/htsget.js +136 -160
- package/dist/htsget.js.map +1 -1
- package/dist/indexFile.d.ts +1 -1
- package/dist/indexFile.js +2 -0
- package/dist/indexFile.js.map +1 -1
- package/dist/nullIndex.js +2 -13
- package/dist/nullIndex.js.map +1 -1
- package/dist/record.d.ts +4 -4
- package/dist/record.js +43 -36
- package/dist/record.js.map +1 -1
- package/dist/util.d.ts +4 -2
- package/dist/util.js +25 -15
- package/dist/util.js.map +1 -1
- package/dist/virtualOffset.d.ts +1 -1
- package/dist/virtualOffset.js +2 -0
- package/dist/virtualOffset.js.map +1 -1
- package/esm/bai.d.ts +1 -1
- package/esm/bai.js +13 -13
- package/esm/bai.js.map +1 -1
- package/esm/bamFile.d.ts +4 -5
- package/esm/bamFile.js +49 -50
- package/esm/bamFile.js.map +1 -1
- package/esm/chunk.d.ts +1 -1
- package/esm/chunk.js +5 -0
- package/esm/chunk.js.map +1 -1
- package/esm/csi.d.ts +1 -1
- package/esm/csi.js +26 -28
- package/esm/csi.js.map +1 -1
- package/esm/htsget.d.ts +1 -2
- package/esm/htsget.js +27 -11
- package/esm/htsget.js.map +1 -1
- package/esm/indexFile.d.ts +1 -1
- package/esm/indexFile.js +2 -0
- package/esm/indexFile.js.map +1 -1
- package/esm/record.d.ts +4 -4
- package/esm/record.js +43 -36
- package/esm/record.js.map +1 -1
- package/esm/util.d.ts +4 -2
- package/esm/util.js +20 -1
- package/esm/util.js.map +1 -1
- package/esm/virtualOffset.d.ts +1 -1
- package/esm/virtualOffset.js +2 -0
- package/esm/virtualOffset.js.map +1 -1
- package/package.json +6 -6
- package/src/bai.ts +11 -8
- package/src/bamFile.ts +22 -41
- package/src/chunk.ts +1 -1
- package/src/csi.ts +22 -19
- package/src/htsget.ts +24 -9
- package/src/indexFile.ts +1 -1
- package/src/record.ts +43 -42
- package/src/util.ts +23 -3
- package/src/virtualOffset.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
## [
|
|
1
|
+
## [5.0.1](https://github.com/GMOD/bam-js/compare/v5.0.0...v5.0.1) (2024-12-12)
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
# [
|
|
5
|
+
# [5.0.0](https://github.com/GMOD/bam-js/compare/v4.0.1...v5.0.0) (2024-12-12)
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
## [
|
|
9
|
+
## [4.0.1](https://github.com/GMOD/bam-js/compare/v4.0.0...v4.0.1) (2024-11-12)
|
|
10
10
|
|
|
11
|
+
# [4.0.0](https://github.com/GMOD/bam-js/compare/v3.0.3...v4.0.0) (2024-11-12)
|
|
11
12
|
|
|
13
|
+
## [3.0.3](https://github.com/GMOD/bam-js/compare/v3.0.0...v3.0.3) (2024-11-11)
|
|
12
14
|
|
|
13
15
|
## [3.0.2](https://github.com/GMOD/bam-js/compare/v3.0.0...v3.0.2) (2024-11-11)
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
17
|
- republish v3.0.1 since it got tagged on a deleted branch
|
|
18
18
|
|
|
19
19
|
## [3.0.1](https://github.com/GMOD/bam-js/compare/v3.0.0...v3.0.1) (2024-11-11)
|
package/README.md
CHANGED
|
@@ -26,10 +26,10 @@ var records = await t.getRecordsForRange('ctgA', 0, 50000)
|
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
The `bamPath` argument only works on nodejs. In the browser, you should pass
|
|
29
|
-
`bamFilehandle` with a generic-
|
|
29
|
+
`bamFilehandle` with a generic-filehandle2 e.g. `RemoteFile`
|
|
30
30
|
|
|
31
31
|
```typescript
|
|
32
|
-
const { RemoteFile } = require('generic-
|
|
32
|
+
const { RemoteFile } = require('generic-filehandle2')
|
|
33
33
|
const bam = new BamFile({
|
|
34
34
|
bamFilehandle: new RemoteFile('yourfile.bam'), // or a full http url
|
|
35
35
|
baiFilehandle: new RemoteFile('yourfile.bam.bai'), // or a full http url
|
|
@@ -76,9 +76,10 @@ The BAM class constructor accepts arguments
|
|
|
76
76
|
yielding
|
|
77
77
|
|
|
78
78
|
Note: filehandles implement the Filehandle interface from
|
|
79
|
-
https://www.npmjs.com/package/generic-
|
|
80
|
-
|
|
81
|
-
|
|
79
|
+
https://www.npmjs.com/package/generic-filehandle2.
|
|
80
|
+
|
|
81
|
+
This module offers the path and url arguments as convenience methods for
|
|
82
|
+
supplying the LocalFile and RemoteFile
|
|
82
83
|
|
|
83
84
|
### async getRecordsForRange(refName, start, end, opts)
|
|
84
85
|
|
|
@@ -112,7 +113,7 @@ for await (const chunk of file.streamRecordsForRange(
|
|
|
112
113
|
The `getRecordsForRange` simply wraps this process by concatenating chunks into
|
|
113
114
|
an array
|
|
114
115
|
|
|
115
|
-
### async getHeader(opts: {....anything to pass to generic-
|
|
116
|
+
### async getHeader(opts: {....anything to pass to generic-filehandle2 opts})
|
|
116
117
|
|
|
117
118
|
This obtains the header from `HtsgetFile` or `BamFile`. Retrieves BAM file and
|
|
118
119
|
BAI/CSI header if applicable, or API request for refnames from htsget
|
|
@@ -157,11 +158,6 @@ feature.flags // flags
|
|
|
157
158
|
feature.template_length // TLEN
|
|
158
159
|
```
|
|
159
160
|
|
|
160
|
-
#### Note
|
|
161
|
-
|
|
162
|
-
The reason that we hide the data behind this ".get" function is that we lazily
|
|
163
|
-
decode records on demand, which can reduce memory consumption.
|
|
164
|
-
|
|
165
161
|
## License
|
|
166
162
|
|
|
167
163
|
MIT © [Colin Diesh](https://github.com/cmdcolin)
|
package/dist/bai.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import IndexFile from './indexFile';
|
|
|
5
5
|
export default class BAI extends IndexFile {
|
|
6
6
|
setupP?: ReturnType<BAI['_parse']>;
|
|
7
7
|
lineCount(refId: number, opts?: BaseOpts): Promise<number>;
|
|
8
|
-
_parse(
|
|
8
|
+
_parse(_opts?: BaseOpts): Promise<{
|
|
9
9
|
bai: boolean;
|
|
10
10
|
firstDataLine: VirtualOffset | undefined;
|
|
11
11
|
maxBlockSize: number;
|
package/dist/bai.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -35,181 +26,172 @@ function reg2bins(beg, end) {
|
|
|
35
26
|
];
|
|
36
27
|
}
|
|
37
28
|
class BAI extends indexFile_1.default {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return ((_b = (_a = indexData.indices[refId]) === null || _a === void 0 ? void 0 : _a.stats) === null || _b === void 0 ? void 0 : _b.lineCount) || 0;
|
|
43
|
-
});
|
|
29
|
+
setupP;
|
|
30
|
+
async lineCount(refId, opts) {
|
|
31
|
+
const indexData = await this.parse(opts);
|
|
32
|
+
return indexData.indices[refId]?.stats?.lineCount || 0;
|
|
44
33
|
}
|
|
45
34
|
// fetch and parse the index
|
|
46
|
-
_parse(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
35
|
+
async _parse(_opts) {
|
|
36
|
+
const bytes = await this.filehandle.readFile();
|
|
37
|
+
const dataView = new DataView(bytes.buffer);
|
|
38
|
+
// check BAI magic numbers
|
|
39
|
+
if (dataView.getUint32(0, true) !== BAI_MAGIC) {
|
|
40
|
+
throw new Error('Not a BAI file');
|
|
41
|
+
}
|
|
42
|
+
const refCount = dataView.getInt32(4, true);
|
|
43
|
+
const depth = 5;
|
|
44
|
+
const binLimit = ((1 << ((depth + 1) * 3)) - 1) / 7;
|
|
45
|
+
// read the indexes for each reference sequence
|
|
46
|
+
let curr = 8;
|
|
47
|
+
let firstDataLine;
|
|
48
|
+
const indices = new Array(refCount);
|
|
49
|
+
for (let i = 0; i < refCount; i++) {
|
|
50
|
+
// the binning index
|
|
51
|
+
const binCount = dataView.getInt32(curr, true);
|
|
52
|
+
let stats;
|
|
53
|
+
curr += 4;
|
|
54
|
+
const binIndex = {};
|
|
55
|
+
for (let j = 0; j < binCount; j += 1) {
|
|
56
|
+
const bin = dataView.getUint32(curr, true);
|
|
64
57
|
curr += 4;
|
|
65
|
-
|
|
66
|
-
for (let j = 0; j < binCount; j += 1) {
|
|
67
|
-
const bin = bytes.readUInt32LE(curr);
|
|
58
|
+
if (bin === binLimit + 1) {
|
|
68
59
|
curr += 4;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
stats = (0, util_1.parsePseudoBin)(bytes, curr + 16);
|
|
72
|
-
curr += 32;
|
|
73
|
-
}
|
|
74
|
-
else if (bin > binLimit + 1) {
|
|
75
|
-
throw new Error('bai index contains too many bins, please use CSI');
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
const chunkCount = bytes.readInt32LE(curr);
|
|
79
|
-
curr += 4;
|
|
80
|
-
const chunks = new Array(chunkCount);
|
|
81
|
-
for (let k = 0; k < chunkCount; k++) {
|
|
82
|
-
const u = (0, virtualOffset_1.fromBytes)(bytes, curr);
|
|
83
|
-
curr += 8;
|
|
84
|
-
const v = (0, virtualOffset_1.fromBytes)(bytes, curr);
|
|
85
|
-
curr += 8;
|
|
86
|
-
firstDataLine = (0, util_1.findFirstData)(firstDataLine, u);
|
|
87
|
-
chunks[k] = new chunk_1.default(u, v, bin);
|
|
88
|
-
}
|
|
89
|
-
binIndex[bin] = chunks;
|
|
90
|
-
}
|
|
60
|
+
stats = (0, util_1.parsePseudoBin)(bytes, curr + 16);
|
|
61
|
+
curr += 32;
|
|
91
62
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
63
|
+
else if (bin > binLimit + 1) {
|
|
64
|
+
throw new Error('bai index contains too many bins, please use CSI');
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
const chunkCount = dataView.getInt32(curr, true);
|
|
68
|
+
curr += 4;
|
|
69
|
+
const chunks = new Array(chunkCount);
|
|
70
|
+
for (let k = 0; k < chunkCount; k++) {
|
|
71
|
+
const u = (0, virtualOffset_1.fromBytes)(bytes, curr);
|
|
72
|
+
curr += 8;
|
|
73
|
+
const v = (0, virtualOffset_1.fromBytes)(bytes, curr);
|
|
74
|
+
curr += 8;
|
|
75
|
+
firstDataLine = (0, util_1.findFirstData)(firstDataLine, u);
|
|
76
|
+
chunks[k] = new chunk_1.default(u, v, bin);
|
|
77
|
+
}
|
|
78
|
+
binIndex[bin] = chunks;
|
|
103
79
|
}
|
|
104
|
-
indices[i] = { binIndex, linearIndex, stats };
|
|
105
|
-
}
|
|
106
|
-
return {
|
|
107
|
-
bai: true,
|
|
108
|
-
firstDataLine,
|
|
109
|
-
maxBlockSize: 1 << 16,
|
|
110
|
-
indices,
|
|
111
|
-
refCount,
|
|
112
|
-
};
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
indexCov(seqId_1, start_1, end_1) {
|
|
116
|
-
return __awaiter(this, arguments, void 0, function* (seqId, start, end, opts = {}) {
|
|
117
|
-
const v = 16384;
|
|
118
|
-
const range = start !== undefined;
|
|
119
|
-
const indexData = yield this.parse(opts);
|
|
120
|
-
const seqIdx = indexData.indices[seqId];
|
|
121
|
-
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
122
|
-
if (!seqIdx) {
|
|
123
|
-
return [];
|
|
124
|
-
}
|
|
125
|
-
const { linearIndex = [], stats } = seqIdx;
|
|
126
|
-
if (linearIndex.length === 0) {
|
|
127
|
-
return [];
|
|
128
|
-
}
|
|
129
|
-
const e = end === undefined ? (linearIndex.length - 1) * v : roundUp(end, v);
|
|
130
|
-
const s = start === undefined ? 0 : roundDown(start, v);
|
|
131
|
-
const depths = range
|
|
132
|
-
? new Array((e - s) / v)
|
|
133
|
-
: new Array(linearIndex.length - 1);
|
|
134
|
-
const totalSize = linearIndex[linearIndex.length - 1].blockPosition;
|
|
135
|
-
if (e > (linearIndex.length - 1) * v) {
|
|
136
|
-
throw new Error('query outside of range of linear index');
|
|
137
80
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
81
|
+
const linearCount = dataView.getInt32(curr, true);
|
|
82
|
+
curr += 4;
|
|
83
|
+
// as we're going through the linear index, figure out the smallest
|
|
84
|
+
// virtual offset in the indexes, which tells us where the BAM header
|
|
85
|
+
// ends
|
|
86
|
+
const linearIndex = new Array(linearCount);
|
|
87
|
+
for (let j = 0; j < linearCount; j++) {
|
|
88
|
+
const offset = (0, virtualOffset_1.fromBytes)(bytes, curr);
|
|
89
|
+
curr += 8;
|
|
90
|
+
firstDataLine = (0, util_1.findFirstData)(firstDataLine, offset);
|
|
91
|
+
linearIndex[j] = offset;
|
|
146
92
|
}
|
|
147
|
-
|
|
148
|
-
}
|
|
93
|
+
indices[i] = { binIndex, linearIndex, stats };
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
bai: true,
|
|
97
|
+
firstDataLine,
|
|
98
|
+
maxBlockSize: 1 << 16,
|
|
99
|
+
indices,
|
|
100
|
+
refCount,
|
|
101
|
+
};
|
|
149
102
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
103
|
+
async indexCov(seqId, start, end, opts = {}) {
|
|
104
|
+
const v = 16384;
|
|
105
|
+
const range = start !== undefined;
|
|
106
|
+
const indexData = await this.parse(opts);
|
|
107
|
+
const seqIdx = indexData.indices[seqId];
|
|
108
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
109
|
+
if (!seqIdx) {
|
|
110
|
+
return [];
|
|
111
|
+
}
|
|
112
|
+
const { linearIndex = [], stats } = seqIdx;
|
|
113
|
+
if (linearIndex.length === 0) {
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
const e = end === undefined ? (linearIndex.length - 1) * v : roundUp(end, v);
|
|
117
|
+
const s = start === undefined ? 0 : roundDown(start, v);
|
|
118
|
+
const depths = range
|
|
119
|
+
? new Array((e - s) / v)
|
|
120
|
+
: new Array(linearIndex.length - 1);
|
|
121
|
+
const totalSize = linearIndex[linearIndex.length - 1].blockPosition;
|
|
122
|
+
if (e > (linearIndex.length - 1) * v) {
|
|
123
|
+
throw new Error('query outside of range of linear index');
|
|
124
|
+
}
|
|
125
|
+
let currentPos = linearIndex[s / v].blockPosition;
|
|
126
|
+
for (let i = s / v, j = 0; i < e / v; i++, j++) {
|
|
127
|
+
depths[j] = {
|
|
128
|
+
score: linearIndex[i + 1].blockPosition - currentPos,
|
|
129
|
+
start: i * v,
|
|
130
|
+
end: i * v + v,
|
|
131
|
+
};
|
|
132
|
+
currentPos = linearIndex[i + 1].blockPosition;
|
|
133
|
+
}
|
|
134
|
+
return depths.map(d => ({
|
|
135
|
+
...d,
|
|
136
|
+
score: (d.score * (stats?.lineCount || 0)) / totalSize,
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
async blocksForRange(refId, min, max, opts = {}) {
|
|
140
|
+
if (min < 0) {
|
|
141
|
+
min = 0;
|
|
142
|
+
}
|
|
143
|
+
const indexData = await this.parse(opts);
|
|
144
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
145
|
+
if (!indexData) {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
const ba = indexData.indices[refId];
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
150
|
+
if (!ba) {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
// List of bin #s that overlap min, max
|
|
154
|
+
const overlappingBins = reg2bins(min, max);
|
|
155
|
+
const chunks = [];
|
|
156
|
+
// Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
|
|
157
|
+
for (const [start, end] of overlappingBins) {
|
|
158
|
+
for (let bin = start; bin <= end; bin++) {
|
|
159
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
160
|
+
if (ba.binIndex[bin]) {
|
|
161
|
+
const binChunks = ba.binIndex[bin];
|
|
162
|
+
for (const binChunk of binChunks) {
|
|
163
|
+
chunks.push(new chunk_1.default(binChunk.minv, binChunk.maxv, bin));
|
|
177
164
|
}
|
|
178
165
|
}
|
|
179
166
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
167
|
+
}
|
|
168
|
+
// Use the linear index to find minimum file position of chunks that could
|
|
169
|
+
// contain alignments in the region
|
|
170
|
+
const nintv = ba.linearIndex.length;
|
|
171
|
+
let lowest;
|
|
172
|
+
const minLin = Math.min(min >> 14, nintv - 1);
|
|
173
|
+
const maxLin = Math.min(max >> 14, nintv - 1);
|
|
174
|
+
for (let i = minLin; i <= maxLin; ++i) {
|
|
175
|
+
const vp = ba.linearIndex[i];
|
|
176
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
177
|
+
if (vp && (!lowest || vp.compareTo(lowest) < 0)) {
|
|
178
|
+
lowest = vp;
|
|
192
179
|
}
|
|
193
|
-
|
|
194
|
-
|
|
180
|
+
}
|
|
181
|
+
return (0, util_1.optimizeChunks)(chunks, lowest);
|
|
195
182
|
}
|
|
196
|
-
parse() {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
this.setupP =
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
return this.setupP;
|
|
205
|
-
});
|
|
183
|
+
async parse(opts = {}) {
|
|
184
|
+
if (!this.setupP) {
|
|
185
|
+
this.setupP = this._parse(opts).catch((e) => {
|
|
186
|
+
this.setupP = undefined;
|
|
187
|
+
throw e;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
return this.setupP;
|
|
206
191
|
}
|
|
207
|
-
hasRefSeq(
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
const header = yield this.parse(opts);
|
|
211
|
-
return !!((_a = header.indices[seqId]) === null || _a === void 0 ? void 0 : _a.binIndex);
|
|
212
|
-
});
|
|
192
|
+
async hasRefSeq(seqId, opts = {}) {
|
|
193
|
+
const header = await this.parse(opts);
|
|
194
|
+
return !!header.indices[seqId]?.binIndex;
|
|
213
195
|
}
|
|
214
196
|
}
|
|
215
197
|
exports.default = BAI;
|
package/dist/bai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bai.js","sourceRoot":"","sources":["../src/bai.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bai.js","sourceRoot":"","sources":["../src/bai.ts"],"names":[],"mappings":"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"}
|
package/dist/bamFile.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { GenericFilehandle } from 'generic-filehandle';
|
|
1
|
+
import { GenericFilehandle } from 'generic-filehandle2';
|
|
3
2
|
import BAI from './bai';
|
|
4
3
|
import CSI from './csi';
|
|
5
4
|
import Chunk from './chunk';
|
|
@@ -60,17 +59,17 @@ export default class BamFile {
|
|
|
60
59
|
streamRecordsForRange(chr: string, min: number, max: number, opts?: BamOpts): AsyncGenerator<BAMFeature[], void, unknown>;
|
|
61
60
|
_fetchChunkFeatures(chunks: Chunk[], chrId: number, min: number, max: number, opts?: BamOpts): AsyncGenerator<BAMFeature[], void, unknown>;
|
|
62
61
|
fetchPairs(chrId: number, feats: BAMFeature[][], opts: BamOpts): Promise<BAMFeature[]>;
|
|
63
|
-
_readRegion(position: number, size: number, opts?: BaseOpts): Promise<
|
|
62
|
+
_readRegion(position: number, size: number, opts?: BaseOpts): Promise<Uint8Array<ArrayBuffer>>;
|
|
64
63
|
_readChunk({ chunk, opts }: {
|
|
65
64
|
chunk: Chunk;
|
|
66
65
|
opts: BaseOpts;
|
|
67
66
|
}): Promise<{
|
|
68
|
-
data:
|
|
67
|
+
data: Uint8Array<ArrayBuffer>;
|
|
69
68
|
cpositions: number[];
|
|
70
69
|
dpositions: number[];
|
|
71
70
|
chunk: Chunk;
|
|
72
71
|
}>;
|
|
73
|
-
readBamFeatures(ba:
|
|
72
|
+
readBamFeatures(ba: Uint8Array, cpositions: number[], dpositions: number[], chunk: Chunk): Promise<BAMFeature[]>;
|
|
74
73
|
hasRefSeq(seqName: string): Promise<boolean | undefined>;
|
|
75
74
|
lineCount(seqName: string): Promise<number>;
|
|
76
75
|
indexCov(seqName: string, start?: number, end?: number): Promise<{
|