@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.
- package/CHANGELOG.md +61 -25
- package/README.md +95 -57
- package/dist/bai.d.ts +34 -15
- package/dist/bai.js +87 -91
- package/dist/bai.js.map +1 -1
- package/dist/bamFile.d.ts +33 -27
- package/dist/bamFile.js +127 -121
- package/dist/bamFile.js.map +1 -1
- package/dist/chunk.d.ts +4 -8
- package/dist/chunk.js +2 -8
- package/dist/chunk.js.map +1 -1
- package/dist/csi.d.ts +74 -10
- package/dist/csi.js +78 -90
- package/dist/csi.js.map +1 -1
- package/dist/htsget.d.ts +5 -8
- package/dist/htsget.js +72 -47
- package/dist/htsget.js.map +1 -1
- package/dist/index.d.ts +5 -6
- package/dist/index.js +11 -11
- package/dist/index.js.map +1 -1
- package/dist/indexFile.d.ts +0 -6
- package/dist/indexFile.js +0 -35
- package/dist/indexFile.js.map +1 -1
- package/dist/nullIndex.d.ts +7 -0
- package/dist/nullIndex.js +33 -0
- package/dist/nullIndex.js.map +1 -0
- package/dist/record.d.ts +2 -2
- package/dist/record.js +34 -24
- package/dist/record.js.map +1 -1
- package/dist/sam.js +9 -7
- package/dist/sam.js.map +1 -1
- package/dist/util.d.ts +13 -1
- package/dist/util.js +47 -15
- package/dist/util.js.map +1 -1
- package/esm/bai.d.ts +34 -15
- package/esm/bai.js +86 -91
- package/esm/bai.js.map +1 -1
- package/esm/bamFile.d.ts +33 -27
- package/esm/bamFile.js +124 -120
- package/esm/bamFile.js.map +1 -1
- package/esm/chunk.d.ts +4 -8
- package/esm/chunk.js +2 -8
- package/esm/chunk.js.map +1 -1
- package/esm/csi.d.ts +74 -10
- package/esm/csi.js +85 -93
- package/esm/csi.js.map +1 -1
- package/esm/htsget.d.ts +5 -8
- package/esm/htsget.js +68 -43
- package/esm/htsget.js.map +1 -1
- package/esm/index.d.ts +5 -6
- package/esm/index.js +5 -6
- package/esm/index.js.map +1 -1
- package/esm/indexFile.d.ts +0 -6
- package/esm/indexFile.js +0 -22
- package/esm/indexFile.js.map +1 -1
- package/esm/nullIndex.d.ts +7 -0
- package/esm/nullIndex.js +16 -0
- package/esm/nullIndex.js.map +1 -0
- package/esm/record.d.ts +2 -2
- package/esm/record.js +34 -24
- package/esm/record.js.map +1 -1
- package/esm/sam.js +9 -7
- package/esm/sam.js.map +1 -1
- package/esm/util.d.ts +13 -1
- package/esm/util.js +40 -14
- package/esm/util.js.map +1 -1
- package/package.json +16 -17
- package/src/bai.ts +99 -102
- package/src/bamFile.ts +174 -198
- package/src/chunk.ts +6 -20
- package/src/csi.ts +102 -111
- package/src/htsget.ts +81 -61
- package/src/index.ts +5 -7
- package/src/indexFile.ts +0 -27
- package/src/nullIndex.ts +18 -0
- package/src/record.ts +34 -24
- package/src/sam.ts +9 -7
- package/src/util.ts +54 -13
- package/src/declare.d.ts +0 -2
package/esm/csi.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import Long from 'long';
|
|
2
1
|
import { unzip } from '@gmod/bgzf-filehandle';
|
|
3
2
|
import VirtualOffset, { fromBytes } from './virtualOffset';
|
|
4
3
|
import Chunk from './chunk';
|
|
5
|
-
import {
|
|
4
|
+
import { optimizeChunks, findFirstData, parsePseudoBin, parseNameBytes, } from './util';
|
|
6
5
|
import IndexFile from './indexFile';
|
|
7
6
|
const CSI1_MAGIC = 21582659; // CSI\1
|
|
8
7
|
const CSI2_MAGIC = 38359875; // CSI\2
|
|
@@ -13,84 +12,58 @@ function rshift(num, bits) {
|
|
|
13
12
|
return Math.floor(num / 2 ** bits);
|
|
14
13
|
}
|
|
15
14
|
export default class CSI extends IndexFile {
|
|
16
|
-
constructor(
|
|
17
|
-
super(
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
18
17
|
this.maxBinNumber = 0;
|
|
19
18
|
this.depth = 0;
|
|
20
19
|
this.minShift = 0;
|
|
21
20
|
}
|
|
22
|
-
async lineCount(refId) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
const idx = indexData.indices[refId];
|
|
28
|
-
if (!idx) {
|
|
29
|
-
return -1;
|
|
30
|
-
}
|
|
31
|
-
const { stats } = indexData.indices[refId];
|
|
32
|
-
if (stats) {
|
|
33
|
-
return stats.lineCount;
|
|
34
|
-
}
|
|
35
|
-
return -1;
|
|
21
|
+
async lineCount(refId, opts) {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
const indexData = await this.parse(opts);
|
|
24
|
+
return ((_b = (_a = indexData.indices[refId]) === null || _a === void 0 ? void 0 : _a.stats) === null || _b === void 0 ? void 0 : _b.lineCount) || 0;
|
|
36
25
|
}
|
|
37
26
|
async indexCov() {
|
|
38
27
|
return [];
|
|
39
28
|
}
|
|
40
|
-
parseAuxData(bytes, offset
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
data.format = { 0: 'generic', 1: 'SAM', 2: 'VCF' }[data.formatFlags & 0xf];
|
|
49
|
-
if (!data.format) {
|
|
50
|
-
throw new Error(`invalid Tabix preset format flags ${data.formatFlags}`);
|
|
51
|
-
}
|
|
52
|
-
data.columnNumbers = {
|
|
29
|
+
parseAuxData(bytes, offset) {
|
|
30
|
+
const formatFlags = bytes.readInt32LE(offset);
|
|
31
|
+
const coordinateType = formatFlags & 0x10000 ? 'zero-based-half-open' : '1-based-closed';
|
|
32
|
+
const format = { 0: 'generic', 1: 'SAM', 2: 'VCF' }[formatFlags & 0xf];
|
|
33
|
+
if (!format) {
|
|
34
|
+
throw new Error(`invalid Tabix preset format flags ${formatFlags}`);
|
|
35
|
+
}
|
|
36
|
+
const columnNumbers = {
|
|
53
37
|
ref: bytes.readInt32LE(offset + 4),
|
|
54
38
|
start: bytes.readInt32LE(offset + 8),
|
|
55
39
|
end: bytes.readInt32LE(offset + 12),
|
|
56
40
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
41
|
+
const metaValue = bytes.readInt32LE(offset + 16);
|
|
42
|
+
const metaChar = metaValue ? String.fromCharCode(metaValue) : '';
|
|
43
|
+
const skipLines = bytes.readInt32LE(offset + 20);
|
|
60
44
|
const nameSectionLength = bytes.readInt32LE(offset + 24);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (currNameStart < i) {
|
|
72
|
-
let refName = namesBytes.toString('utf8', currNameStart, i);
|
|
73
|
-
refName = this.renameRefSeq(refName);
|
|
74
|
-
refIdToName[currRefId] = refName;
|
|
75
|
-
refNameToId[refName] = currRefId;
|
|
76
|
-
}
|
|
77
|
-
currNameStart = i + 1;
|
|
78
|
-
currRefId += 1;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return { refNameToId, refIdToName };
|
|
45
|
+
return {
|
|
46
|
+
columnNumbers,
|
|
47
|
+
coordinateType,
|
|
48
|
+
metaValue,
|
|
49
|
+
metaChar,
|
|
50
|
+
skipLines,
|
|
51
|
+
format,
|
|
52
|
+
formatFlags,
|
|
53
|
+
...parseNameBytes(bytes.subarray(offset + 28, offset + 28 + nameSectionLength), this.renameRefSeq),
|
|
54
|
+
};
|
|
82
55
|
}
|
|
83
56
|
// fetch and parse the index
|
|
84
57
|
async _parse(opts) {
|
|
85
|
-
const
|
|
86
|
-
const buffer = (await this.filehandle.readFile(opts));
|
|
58
|
+
const buffer = await this.filehandle.readFile(opts);
|
|
87
59
|
const bytes = await unzip(buffer);
|
|
60
|
+
let csiVersion;
|
|
88
61
|
// check TBI magic numbers
|
|
89
62
|
if (bytes.readUInt32LE(0) === CSI1_MAGIC) {
|
|
90
|
-
|
|
63
|
+
csiVersion = 1;
|
|
91
64
|
}
|
|
92
65
|
else if (bytes.readUInt32LE(0) === CSI2_MAGIC) {
|
|
93
|
-
|
|
66
|
+
csiVersion = 2;
|
|
94
67
|
}
|
|
95
68
|
else {
|
|
96
69
|
throw new Error('Not a CSI file');
|
|
@@ -100,51 +73,53 @@ export default class CSI extends IndexFile {
|
|
|
100
73
|
this.depth = bytes.readInt32LE(8);
|
|
101
74
|
this.maxBinNumber = ((1 << ((this.depth + 1) * 3)) - 1) / 7;
|
|
102
75
|
const auxLength = bytes.readInt32LE(12);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
data.refCount = bytes.readInt32LE(16 + auxLength);
|
|
76
|
+
const aux = auxLength >= 30 ? this.parseAuxData(bytes, 16) : undefined;
|
|
77
|
+
const refCount = bytes.readInt32LE(16 + auxLength);
|
|
107
78
|
// read the indexes for each reference sequence
|
|
108
|
-
|
|
109
|
-
let
|
|
110
|
-
|
|
111
|
-
|
|
79
|
+
let curr = 16 + auxLength + 4;
|
|
80
|
+
let firstDataLine;
|
|
81
|
+
const indices = new Array(refCount);
|
|
82
|
+
for (let i = 0; i < refCount; i++) {
|
|
112
83
|
// the binning index
|
|
113
|
-
const binCount = bytes.readInt32LE(
|
|
114
|
-
|
|
84
|
+
const binCount = bytes.readInt32LE(curr);
|
|
85
|
+
curr += 4;
|
|
115
86
|
const binIndex = {};
|
|
116
87
|
let stats; // < provided by parsing a pseudo-bin, if present
|
|
117
|
-
for (let j = 0; j < binCount; j
|
|
118
|
-
const bin = bytes.readUInt32LE(
|
|
88
|
+
for (let j = 0; j < binCount; j++) {
|
|
89
|
+
const bin = bytes.readUInt32LE(curr);
|
|
90
|
+
curr += 4;
|
|
119
91
|
if (bin > this.maxBinNumber) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
stats = this.parsePseudoBin(bytes, currOffset + 4);
|
|
123
|
-
currOffset += 4 + 8 + 4 + 16 + 16;
|
|
92
|
+
stats = parsePseudoBin(bytes, curr + 28);
|
|
93
|
+
curr += 28 + 16;
|
|
124
94
|
}
|
|
125
95
|
else {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const chunkCount = bytes.readInt32LE(
|
|
129
|
-
|
|
96
|
+
firstDataLine = findFirstData(firstDataLine, fromBytes(bytes, curr));
|
|
97
|
+
curr += 8;
|
|
98
|
+
const chunkCount = bytes.readInt32LE(curr);
|
|
99
|
+
curr += 4;
|
|
130
100
|
const chunks = new Array(chunkCount);
|
|
131
101
|
for (let k = 0; k < chunkCount; k += 1) {
|
|
132
|
-
const u = fromBytes(bytes,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
102
|
+
const u = fromBytes(bytes, curr);
|
|
103
|
+
curr += 8;
|
|
104
|
+
const v = fromBytes(bytes, curr);
|
|
105
|
+
curr += 8;
|
|
106
|
+
firstDataLine = findFirstData(firstDataLine, u);
|
|
136
107
|
chunks[k] = new Chunk(u, v, bin);
|
|
137
108
|
}
|
|
138
109
|
binIndex[bin] = chunks;
|
|
139
110
|
}
|
|
140
111
|
}
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
return
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
112
|
+
indices[i] = { binIndex, stats };
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
csiVersion,
|
|
116
|
+
firstDataLine,
|
|
117
|
+
indices,
|
|
118
|
+
refCount,
|
|
119
|
+
csi: true,
|
|
120
|
+
maxBlockSize: 1 << 16,
|
|
121
|
+
...aux,
|
|
122
|
+
};
|
|
148
123
|
}
|
|
149
124
|
async blocksForRange(refId, min, max, opts = {}) {
|
|
150
125
|
if (min < 0) {
|
|
@@ -155,15 +130,18 @@ export default class CSI extends IndexFile {
|
|
|
155
130
|
if (!ba) {
|
|
156
131
|
return [];
|
|
157
132
|
}
|
|
158
|
-
const overlappingBins = this.reg2bins(min, max);
|
|
133
|
+
const overlappingBins = this.reg2bins(min, max);
|
|
134
|
+
if (overlappingBins.length === 0) {
|
|
135
|
+
return [];
|
|
136
|
+
}
|
|
159
137
|
const chunks = [];
|
|
160
138
|
// Find chunks in overlapping bins. Leaf bins (< 4681) are not pruned
|
|
161
139
|
for (const [start, end] of overlappingBins) {
|
|
162
140
|
for (let bin = start; bin <= end; bin++) {
|
|
163
141
|
if (ba.binIndex[bin]) {
|
|
164
142
|
const binChunks = ba.binIndex[bin];
|
|
165
|
-
for (
|
|
166
|
-
chunks.push(
|
|
143
|
+
for (const c of binChunks) {
|
|
144
|
+
chunks.push(c);
|
|
167
145
|
}
|
|
168
146
|
}
|
|
169
147
|
}
|
|
@@ -197,5 +175,19 @@ export default class CSI extends IndexFile {
|
|
|
197
175
|
}
|
|
198
176
|
return bins;
|
|
199
177
|
}
|
|
178
|
+
async parse(opts = {}) {
|
|
179
|
+
if (!this.setupP) {
|
|
180
|
+
this.setupP = this._parse(opts).catch(e => {
|
|
181
|
+
this.setupP = undefined;
|
|
182
|
+
throw e;
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return this.setupP;
|
|
186
|
+
}
|
|
187
|
+
async hasRefSeq(seqId, opts = {}) {
|
|
188
|
+
var _a;
|
|
189
|
+
const header = await this.parse(opts);
|
|
190
|
+
return !!((_a = header.indices[seqId]) === null || _a === void 0 ? void 0 : _a.binIndex);
|
|
191
|
+
}
|
|
200
192
|
}
|
|
201
193
|
//# sourceMappingURL=csi.js.map
|
package/esm/csi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csi.js","sourceRoot":"","sources":["../src/csi.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"csi.js","sourceRoot":"","sources":["../src/csi.ts"],"names":[],"mappings":"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"}
|
package/esm/htsget.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from 'buffer';
|
|
2
3
|
import { BaseOpts, BamOpts } from './util';
|
|
3
4
|
import BamFile from './bamFile';
|
|
4
|
-
import 'cross-fetch/polyfill';
|
|
5
5
|
import Chunk from './chunk';
|
|
6
6
|
export default class HtsgetFile extends BamFile {
|
|
7
7
|
private baseUrl;
|
|
@@ -11,16 +11,13 @@ export default class HtsgetFile extends BamFile {
|
|
|
11
11
|
baseUrl: string;
|
|
12
12
|
});
|
|
13
13
|
streamRecordsForRange(chr: string, min: number, max: number, opts?: BamOpts): AsyncGenerator<import("./record").default[], void, unknown>;
|
|
14
|
-
_readChunk(
|
|
15
|
-
chunk:
|
|
16
|
-
buffer: Buffer;
|
|
17
|
-
chunk: Chunk;
|
|
18
|
-
};
|
|
14
|
+
_readChunk({ chunk }: {
|
|
15
|
+
chunk: Chunk;
|
|
19
16
|
opts: BaseOpts;
|
|
20
17
|
}): Promise<{
|
|
21
18
|
data: Buffer;
|
|
22
|
-
cpositions:
|
|
23
|
-
dpositions:
|
|
19
|
+
cpositions: never[];
|
|
20
|
+
dpositions: never[];
|
|
24
21
|
chunk: Chunk;
|
|
25
22
|
}>;
|
|
26
23
|
getHeader(opts?: BaseOpts): Promise<{
|
package/esm/htsget.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import BamFile, { BAM_MAGIC } from './bamFile';
|
|
2
|
-
import 'cross-fetch/polyfill';
|
|
3
1
|
import { unzip } from '@gmod/bgzf-filehandle';
|
|
2
|
+
import { Buffer } from 'buffer';
|
|
3
|
+
import BamFile, { BAM_MAGIC } from './bamFile';
|
|
4
4
|
import { parseHeaderText } from './sam';
|
|
5
5
|
async function concat(arr, opts) {
|
|
6
6
|
const res = await Promise.all(arr.map(async (chunk) => {
|
|
@@ -10,15 +10,15 @@ async function concat(arr, opts) {
|
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
12
|
//remove referer header, it is not even allowed to be specified
|
|
13
|
-
|
|
13
|
+
// @ts-expect-error
|
|
14
14
|
//eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
15
15
|
const { referer, ...rest } = headers;
|
|
16
16
|
const res = await fetch(url, {
|
|
17
17
|
...opts,
|
|
18
|
-
headers: { ...opts.headers, ...rest },
|
|
18
|
+
headers: { ...opts === null || opts === void 0 ? void 0 : opts.headers, ...rest },
|
|
19
19
|
});
|
|
20
20
|
if (!res.ok) {
|
|
21
|
-
throw new Error(`
|
|
21
|
+
throw new Error(`HTTP ${res.status} fetching ${url}: ${await res.text()}`);
|
|
22
22
|
}
|
|
23
23
|
return Buffer.from(await res.arrayBuffer());
|
|
24
24
|
}
|
|
@@ -27,47 +27,68 @@ async function concat(arr, opts) {
|
|
|
27
27
|
}
|
|
28
28
|
export default class HtsgetFile extends BamFile {
|
|
29
29
|
constructor(args) {
|
|
30
|
-
|
|
31
|
-
super({ bamFilehandle: '?', baiFilehandle: '?' });
|
|
30
|
+
super({ htsget: true });
|
|
32
31
|
this.baseUrl = args.baseUrl;
|
|
33
32
|
this.trackId = args.trackId;
|
|
34
33
|
}
|
|
35
|
-
async *streamRecordsForRange(chr, min, max, opts
|
|
36
|
-
|
|
37
|
-
pairAcrossChr: false,
|
|
38
|
-
maxInsertSize: 200000,
|
|
39
|
-
}) {
|
|
34
|
+
async *streamRecordsForRange(chr, min, max, opts) {
|
|
35
|
+
var _a;
|
|
40
36
|
const base = `${this.baseUrl}/${this.trackId}`;
|
|
41
37
|
const url = `${base}?referenceName=${chr}&start=${min}&end=${max}&format=BAM`;
|
|
42
|
-
const chrId = this.chrToIndex
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
const chrId = (_a = this.chrToIndex) === null || _a === void 0 ? void 0 : _a[chr];
|
|
39
|
+
if (chrId === undefined) {
|
|
40
|
+
yield [];
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const result = await fetch(url, { ...opts });
|
|
44
|
+
if (!result.ok) {
|
|
45
|
+
throw new Error(`HTTP ${result.status} fetching ${url}: ${await result.text()}`);
|
|
46
|
+
}
|
|
47
|
+
const data = await result.json();
|
|
48
|
+
const uncba = await concat(data.htsget.urls.slice(1), opts);
|
|
49
|
+
yield* this._fetchChunkFeatures([
|
|
50
|
+
// fake stuff to pretend to be a Chunk
|
|
51
|
+
{
|
|
52
|
+
buffer: uncba,
|
|
53
|
+
_fetchedSize: undefined,
|
|
54
|
+
bin: 0,
|
|
55
|
+
compareTo() {
|
|
56
|
+
return 0;
|
|
57
|
+
},
|
|
58
|
+
toUniqueString() {
|
|
59
|
+
return `${chr}_${min}_${max}`;
|
|
60
|
+
},
|
|
61
|
+
fetchedSize() {
|
|
62
|
+
return 0;
|
|
63
|
+
},
|
|
64
|
+
minv: {
|
|
65
|
+
dataPosition: 0,
|
|
66
|
+
blockPosition: 0,
|
|
67
|
+
compareTo: () => 0,
|
|
68
|
+
},
|
|
69
|
+
maxv: {
|
|
70
|
+
dataPosition: Number.MAX_SAFE_INTEGER,
|
|
71
|
+
blockPosition: 0,
|
|
72
|
+
compareTo: () => 0,
|
|
73
|
+
},
|
|
74
|
+
toString() {
|
|
75
|
+
return `${chr}_${min}_${max}`;
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
], chrId, min, max, opts);
|
|
46
79
|
}
|
|
47
|
-
const data = await result.json();
|
|
48
|
-
const uncba = await concat(data.htsget.urls.slice(1), opts);
|
|
49
|
-
const chunk = {
|
|
50
|
-
buffer: uncba,
|
|
51
|
-
chunk: { minv: { dataPosition: 0 } },
|
|
52
|
-
toString() {
|
|
53
|
-
return `${chr}_${min}_${max}`;
|
|
54
|
-
},
|
|
55
|
-
};
|
|
56
|
-
yield* this._fetchChunkFeatures(
|
|
57
|
-
// @ts-ignore
|
|
58
|
-
[chunk], chrId, min, max, opts);
|
|
59
80
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return { data: buffer, cpositions:
|
|
81
|
+
async _readChunk({ chunk }) {
|
|
82
|
+
if (!chunk.buffer) {
|
|
83
|
+
throw new Error('expected chunk.buffer in htsget');
|
|
84
|
+
}
|
|
85
|
+
return { data: chunk.buffer, cpositions: [], dpositions: [], chunk };
|
|
65
86
|
}
|
|
66
87
|
async getHeader(opts = {}) {
|
|
67
88
|
const url = `${this.baseUrl}/${this.trackId}?referenceName=na&class=header`;
|
|
68
89
|
const result = await fetch(url, opts);
|
|
69
90
|
if (!result.ok) {
|
|
70
|
-
throw new Error(`
|
|
91
|
+
throw new Error(`HTTP ${result.status} fetching ${url}: ${await result.text()}`);
|
|
71
92
|
}
|
|
72
93
|
const data = await result.json();
|
|
73
94
|
const uncba = await concat(data.htsget.urls, opts);
|
|
@@ -81,17 +102,21 @@ export default class HtsgetFile extends BamFile {
|
|
|
81
102
|
// mapping between ref ref ID numbers and names
|
|
82
103
|
const idToName = [];
|
|
83
104
|
const nameToId = {};
|
|
84
|
-
const sqLines = samHeader.filter(
|
|
85
|
-
sqLines.
|
|
86
|
-
|
|
105
|
+
const sqLines = samHeader.filter(l => l.tag === 'SQ');
|
|
106
|
+
for (const [refId, sqLine] of sqLines.entries()) {
|
|
107
|
+
let refName = '';
|
|
108
|
+
let length = 0;
|
|
109
|
+
for (const item of sqLine.data) {
|
|
87
110
|
if (item.tag === 'SN') {
|
|
88
|
-
|
|
89
|
-
const refName = item.value;
|
|
90
|
-
nameToId[refName] = refId;
|
|
91
|
-
idToName[refId] = refName;
|
|
111
|
+
refName = item.value;
|
|
92
112
|
}
|
|
93
|
-
|
|
94
|
-
|
|
113
|
+
else if (item.tag === 'LN') {
|
|
114
|
+
length = +item.value;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
nameToId[refName] = refId;
|
|
118
|
+
idToName[refId] = { refName, length };
|
|
119
|
+
}
|
|
95
120
|
this.chrToIndex = nameToId;
|
|
96
121
|
this.indexToChr = idToName;
|
|
97
122
|
return samHeader;
|
package/esm/htsget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"htsget.js","sourceRoot":"","sources":["../src/htsget.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"htsget.js","sourceRoot":"","sources":["../src/htsget.ts"],"names":[],"mappings":"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"}
|
package/esm/index.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export { BAI, CSI, BamFile, BamRecord, HtsgetFile };
|
|
1
|
+
export { default as BAI } from './bai';
|
|
2
|
+
export { default as BamFile } from './bamFile';
|
|
3
|
+
export { default as CSI } from './csi';
|
|
4
|
+
export { default as BamRecord } from './record';
|
|
5
|
+
export { default as HtsgetFile } from './htsget';
|
package/esm/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export { BAI, CSI, BamFile, BamRecord, HtsgetFile };
|
|
1
|
+
export { default as BAI } from './bai';
|
|
2
|
+
export { default as BamFile } from './bamFile';
|
|
3
|
+
export { default as CSI } from './csi';
|
|
4
|
+
export { default as BamRecord } from './record';
|
|
5
|
+
export { default as HtsgetFile } from './htsget';
|
|
7
6
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,UAAU,CAAA"}
|
package/esm/indexFile.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { GenericFilehandle } from 'generic-filehandle';
|
|
2
|
-
import VirtualOffset from './virtualOffset';
|
|
3
2
|
import Chunk from './chunk';
|
|
4
3
|
import { BaseOpts } from './util';
|
|
5
4
|
export default abstract class IndexFile {
|
|
6
5
|
filehandle: GenericFilehandle;
|
|
7
6
|
renameRefSeq: (s: string) => string;
|
|
8
|
-
setupP?: Promise<any>;
|
|
9
7
|
/**
|
|
10
8
|
* @param {filehandle} filehandle
|
|
11
9
|
* @param {function} [renameRefSeqs]
|
|
@@ -15,14 +13,10 @@ export default abstract class IndexFile {
|
|
|
15
13
|
renameRefSeq?: (a: string) => string;
|
|
16
14
|
});
|
|
17
15
|
abstract lineCount(refId: number): Promise<number>;
|
|
18
|
-
protected abstract _parse(opts?: BaseOpts): Promise<any>;
|
|
19
16
|
abstract indexCov(refId: number, start?: number, end?: number): Promise<{
|
|
20
17
|
start: number;
|
|
21
18
|
end: number;
|
|
22
19
|
score: number;
|
|
23
20
|
}[]>;
|
|
24
21
|
abstract blocksForRange(chrId: number, start: number, end: number, opts?: BaseOpts): Promise<Chunk[]>;
|
|
25
|
-
_findFirstData(data: any, virtualOffset: VirtualOffset): void;
|
|
26
|
-
parse(opts?: BaseOpts): Promise<any>;
|
|
27
|
-
hasRefSeq(seqId: number, opts?: BaseOpts): Promise<boolean>;
|
|
28
22
|
}
|
package/esm/indexFile.js
CHANGED
|
@@ -7,27 +7,5 @@ export default class IndexFile {
|
|
|
7
7
|
this.filehandle = filehandle;
|
|
8
8
|
this.renameRefSeq = renameRefSeq;
|
|
9
9
|
}
|
|
10
|
-
_findFirstData(data, virtualOffset) {
|
|
11
|
-
const currentFdl = data.firstDataLine;
|
|
12
|
-
if (currentFdl) {
|
|
13
|
-
data.firstDataLine =
|
|
14
|
-
currentFdl.compareTo(virtualOffset) > 0 ? virtualOffset : currentFdl;
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
data.firstDataLine = virtualOffset;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
async parse(opts = {}) {
|
|
21
|
-
if (!this.setupP) {
|
|
22
|
-
this.setupP = this._parse(opts).catch(e => {
|
|
23
|
-
this.setupP = undefined;
|
|
24
|
-
throw e;
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
return this.setupP;
|
|
28
|
-
}
|
|
29
|
-
async hasRefSeq(seqId, opts = {}) {
|
|
30
|
-
return !!((await this.parse(opts)).indices[seqId] || {}).binIndex;
|
|
31
|
-
}
|
|
32
10
|
}
|
|
33
11
|
//# sourceMappingURL=indexFile.js.map
|
package/esm/indexFile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexFile.js","sourceRoot":"","sources":["../src/indexFile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"indexFile.js","sourceRoot":"","sources":["../src/indexFile.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,OAAgB,SAAS;IAIrC;;;OAGG;IACH,YAAY,EACV,UAAU,EACV,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAIhC;QACC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;CAcF"}
|
package/esm/nullIndex.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import IndexFile from './indexFile';
|
|
2
|
+
export default class NullIndex extends IndexFile {
|
|
3
|
+
lineCount() {
|
|
4
|
+
throw new Error('never called');
|
|
5
|
+
}
|
|
6
|
+
_parse() {
|
|
7
|
+
throw new Error('never called');
|
|
8
|
+
}
|
|
9
|
+
async indexCov() {
|
|
10
|
+
throw new Error('never called');
|
|
11
|
+
}
|
|
12
|
+
blocksForRange() {
|
|
13
|
+
throw new Error('never called');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=nullIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nullIndex.js","sourceRoot":"","sources":["../src/nullIndex.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,aAAa,CAAA;AAEnC,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,SAAS;IACvC,SAAS;QACd,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;IACjC,CAAC;IACS,MAAM;QACd,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;IACjC,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;IACjC,CAAC;IAEM,cAAc;QACnB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;IACjC,CAAC;CACF"}
|