@gmod/tabix 1.5.15 → 1.6.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 +10 -6
- package/README.md +175 -37
- package/dist/chunk.js.map +1 -1
- package/dist/csi.js +115 -121
- package/dist/csi.js.map +1 -1
- package/dist/indexFile.js +15 -41
- package/dist/indexFile.js.map +1 -1
- package/dist/tabix-bundle.js +1 -1
- package/dist/tabixIndexedFile.d.ts +6 -5
- package/dist/tabixIndexedFile.js +155 -161
- package/dist/tabixIndexedFile.js.map +1 -1
- package/dist/tbi.js +150 -165
- package/dist/tbi.js.map +1 -1
- package/dist/util.js +3 -14
- package/dist/util.js.map +1 -1
- package/esm/chunk.js.map +1 -1
- package/esm/tabixIndexedFile.d.ts +6 -5
- package/esm/tabixIndexedFile.js +70 -51
- package/esm/tabixIndexedFile.js.map +1 -1
- package/package.json +7 -5
- package/src/chunk.ts +0 -1
- package/src/tabixIndexedFile.ts +70 -58
package/esm/tabixIndexedFile.js
CHANGED
|
@@ -6,10 +6,11 @@ import { unzip, unzipChunkSlice } from '@gmod/bgzf-filehandle';
|
|
|
6
6
|
import { checkAbortSignal } from './util';
|
|
7
7
|
import TBI from './tbi';
|
|
8
8
|
import CSI from './csi';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return
|
|
9
|
+
function isASCII(str) {
|
|
10
|
+
// eslint-disable-next-line no-control-regex
|
|
11
|
+
return /^[\u0000-\u007F]*$/.test(str);
|
|
12
12
|
}
|
|
13
|
+
const decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
|
|
13
14
|
export default class TabixIndexedFile {
|
|
14
15
|
/**
|
|
15
16
|
* @param {object} args
|
|
@@ -26,15 +27,18 @@ export default class TabixIndexedFile {
|
|
|
26
27
|
*
|
|
27
28
|
* @param {filehandle} [args.csiFilehandle]
|
|
28
29
|
*
|
|
29
|
-
* @param {
|
|
30
|
-
*
|
|
30
|
+
* @param {url} [args.url]
|
|
31
|
+
*
|
|
32
|
+
* @param {csiUrl} [args.csiUrl]
|
|
33
|
+
*
|
|
34
|
+
* @param {tbiUrl} [args.tbiUrl]
|
|
31
35
|
*
|
|
32
36
|
* @param {function} [args.renameRefSeqs] optional function with sig `string
|
|
33
37
|
* => string` to transform reference sequence names for the purpose of
|
|
34
38
|
* indexing and querying. note that the data that is returned is not altered,
|
|
35
39
|
* just the names of the reference sequences that are used for querying.
|
|
36
40
|
*/
|
|
37
|
-
constructor({ path, filehandle, url, tbiPath, tbiUrl, tbiFilehandle, csiPath, csiUrl, csiFilehandle,
|
|
41
|
+
constructor({ path, filehandle, url, tbiPath, tbiUrl, tbiFilehandle, csiPath, csiUrl, csiFilehandle, renameRefSeqs = n => n, chunkCacheSize = 5 * 2 ** 20, }) {
|
|
38
42
|
if (filehandle) {
|
|
39
43
|
this.filehandle = filehandle;
|
|
40
44
|
}
|
|
@@ -96,7 +100,6 @@ export default class TabixIndexedFile {
|
|
|
96
100
|
throw new TypeError('must provide one of tbiFilehandle, tbiPath, csiFilehandle, csiPath, tbiUrl, csiUrl');
|
|
97
101
|
}
|
|
98
102
|
this.renameRefSeq = renameRefSeqs;
|
|
99
|
-
this.yieldTime = yieldTime;
|
|
100
103
|
this.chunkCache = new AbortablePromiseCache({
|
|
101
104
|
cache: new LRU({ maxSize: Math.floor(chunkCacheSize / (1 << 16)) }),
|
|
102
105
|
fill: (args, signal) => this.readChunk(args, { signal }),
|
|
@@ -116,7 +119,7 @@ export default class TabixIndexedFile {
|
|
|
116
119
|
* rejected on error
|
|
117
120
|
*/
|
|
118
121
|
async getLines(refName, s, e, opts) {
|
|
119
|
-
var _a;
|
|
122
|
+
var _a, _b;
|
|
120
123
|
let signal;
|
|
121
124
|
let options = {};
|
|
122
125
|
let callback;
|
|
@@ -141,20 +144,34 @@ export default class TabixIndexedFile {
|
|
|
141
144
|
const chunks = await this.index.blocksForRange(refName, start, end, options);
|
|
142
145
|
checkAbortSignal(signal);
|
|
143
146
|
// now go through each chunk and parse and filter the lines out of it
|
|
144
|
-
let last = Date.now();
|
|
145
147
|
for (const c of chunks) {
|
|
146
|
-
let previousStartCoordinate;
|
|
147
148
|
const { buffer, cpositions, dpositions } = await this.chunkCache.get(c.toString(), c, signal);
|
|
148
149
|
checkAbortSignal(signal);
|
|
149
150
|
let blockStart = 0;
|
|
150
151
|
let pos = 0;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
const str = (_a = decoder === null || decoder === void 0 ? void 0 : decoder.decode(buffer)) !== null && _a !== void 0 ? _a : buffer.toString();
|
|
153
|
+
// fast path, Buffer is just ASCII chars and not gigantor, can be
|
|
154
|
+
// converted to string and processed directly. if it is not ASCII or
|
|
155
|
+
// gigantic (chrome max str len is 512Mb), we have to decode line by line
|
|
156
|
+
const strIsASCII = buffer.length < 500000000 && isASCII(str);
|
|
157
|
+
while (blockStart < str.length) {
|
|
158
|
+
let line;
|
|
159
|
+
let n;
|
|
160
|
+
if (strIsASCII) {
|
|
161
|
+
n = str.indexOf('\n', blockStart);
|
|
162
|
+
if (n === -1) {
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
line = str.slice(blockStart, n);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
n = buffer.indexOf('\n', blockStart);
|
|
169
|
+
if (n === -1) {
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
const b = buffer.slice(blockStart, n);
|
|
173
|
+
line = (_b = decoder === null || decoder === void 0 ? void 0 : decoder.decode(b)) !== null && _b !== void 0 ? _b : b.toString();
|
|
155
174
|
}
|
|
156
|
-
const b = buffer.slice(blockStart, n);
|
|
157
|
-
const line = (_a = decoder === null || decoder === void 0 ? void 0 : decoder.decode(b)) !== null && _a !== void 0 ? _a : b.toString();
|
|
158
175
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
159
176
|
if (dpositions) {
|
|
160
177
|
while (blockStart + c.minv.dataPosition >= dpositions[pos++]) { }
|
|
@@ -162,41 +179,30 @@ export default class TabixIndexedFile {
|
|
|
162
179
|
}
|
|
163
180
|
// filter the line for whether it is within the requested range
|
|
164
181
|
const { startCoordinate, overlaps } = this.checkLine(metadata, refName, start, end, line);
|
|
165
|
-
// do a small check just to make sure that the lines are really sorted
|
|
166
|
-
// by start coordinate
|
|
167
|
-
if (previousStartCoordinate !== undefined &&
|
|
168
|
-
startCoordinate !== undefined &&
|
|
169
|
-
previousStartCoordinate > startCoordinate) {
|
|
170
|
-
throw new Error(`Lines not sorted by start coordinate (${previousStartCoordinate} > ${startCoordinate}), this file is not usable with Tabix.`);
|
|
171
|
-
}
|
|
172
|
-
previousStartCoordinate = startCoordinate;
|
|
173
182
|
if (overlaps) {
|
|
174
|
-
callback(line
|
|
175
|
-
// cpositions[pos] refers to actual file offset of a bgzip block
|
|
183
|
+
callback(line,
|
|
184
|
+
// cpositions[pos] refers to actual file offset of a bgzip block
|
|
185
|
+
// boundaries
|
|
176
186
|
//
|
|
177
|
-
// we multiply by (1 <<8) in order to make sure each block has a
|
|
178
|
-
// address space so that data in that block could never
|
|
187
|
+
// we multiply by (1 <<8) in order to make sure each block has a
|
|
188
|
+
// "unique" address space so that data in that block could never
|
|
189
|
+
// overlap
|
|
179
190
|
//
|
|
180
|
-
// then the blockStart-dpositions is an uncompressed file offset
|
|
181
|
-
// that bgzip block boundary, and since the cpositions are
|
|
182
|
-
// (1 << 8) these uncompressed offsets get a unique
|
|
191
|
+
// then the blockStart-dpositions is an uncompressed file offset
|
|
192
|
+
// from that bgzip block boundary, and since the cpositions are
|
|
193
|
+
// multiplied by (1 << 8) these uncompressed offsets get a unique
|
|
194
|
+
// space
|
|
183
195
|
cpositions[pos] * (1 << 8) +
|
|
184
196
|
(blockStart - dpositions[pos]) +
|
|
185
197
|
c.minv.dataPosition +
|
|
186
198
|
1);
|
|
187
199
|
}
|
|
188
200
|
else if (startCoordinate !== undefined && startCoordinate >= end) {
|
|
189
|
-
// the lines were overlapping the region, but now have stopped, so
|
|
190
|
-
//
|
|
191
|
-
//
|
|
201
|
+
// the lines were overlapping the region, but now have stopped, so we
|
|
202
|
+
// must be at the end of the relevant data and we can stop processing
|
|
203
|
+
// data now
|
|
192
204
|
return;
|
|
193
205
|
}
|
|
194
|
-
// yield if we have emitted beyond the yield limit
|
|
195
|
-
if (this.yieldTime && last - Date.now() > this.yieldTime) {
|
|
196
|
-
last = Date.now();
|
|
197
|
-
checkAbortSignal(signal);
|
|
198
|
-
await timeout(1);
|
|
199
|
-
}
|
|
200
206
|
blockStart = n + 1;
|
|
201
207
|
}
|
|
202
208
|
}
|
|
@@ -211,7 +217,6 @@ export default class TabixIndexedFile {
|
|
|
211
217
|
async getHeaderBuffer(opts = {}) {
|
|
212
218
|
const { firstDataLine, metaChar, maxBlockSize } = await this.getMetadata(opts);
|
|
213
219
|
checkAbortSignal(opts.signal);
|
|
214
|
-
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
215
220
|
const maxFetch = ((firstDataLine === null || firstDataLine === void 0 ? void 0 : firstDataLine.blockPosition) || 0) + maxBlockSize;
|
|
216
221
|
// TODO: what if we don't have a firstDataLine, and the header
|
|
217
222
|
// actually takes up more than one block? this case is not covered here
|
|
@@ -231,7 +236,7 @@ export default class TabixIndexedFile {
|
|
|
231
236
|
lastNewline = i;
|
|
232
237
|
}
|
|
233
238
|
}
|
|
234
|
-
return bytes.
|
|
239
|
+
return bytes.subarray(0, lastNewline + 1);
|
|
235
240
|
}
|
|
236
241
|
return bytes;
|
|
237
242
|
}
|
|
@@ -296,12 +301,15 @@ export default class TabixIndexedFile {
|
|
|
296
301
|
let currentColumnStart = 0;
|
|
297
302
|
let refSeq = '';
|
|
298
303
|
let startCoordinate = -Infinity;
|
|
299
|
-
|
|
300
|
-
|
|
304
|
+
const l = line.length;
|
|
305
|
+
for (let i = 0; i < l + 1; i++) {
|
|
306
|
+
if (line[i] === '\t' || i === l) {
|
|
301
307
|
if (currentColumnNumber === ref) {
|
|
302
308
|
if (this.renameRefSeq(line.slice(currentColumnStart, i)) !==
|
|
303
309
|
regionRefName) {
|
|
304
|
-
return {
|
|
310
|
+
return {
|
|
311
|
+
overlaps: false,
|
|
312
|
+
};
|
|
305
313
|
}
|
|
306
314
|
}
|
|
307
315
|
else if (currentColumnNumber === start) {
|
|
@@ -311,12 +319,18 @@ export default class TabixIndexedFile {
|
|
|
311
319
|
startCoordinate -= 1;
|
|
312
320
|
}
|
|
313
321
|
if (startCoordinate >= regionEnd) {
|
|
314
|
-
return {
|
|
322
|
+
return {
|
|
323
|
+
startCoordinate,
|
|
324
|
+
overlaps: false,
|
|
325
|
+
};
|
|
315
326
|
}
|
|
316
327
|
if (end === 0 || end === start) {
|
|
317
328
|
// if we have no end, we assume the feature is 1 bp long
|
|
318
329
|
if (startCoordinate + 1 <= regionStart) {
|
|
319
|
-
return {
|
|
330
|
+
return {
|
|
331
|
+
startCoordinate,
|
|
332
|
+
overlaps: false,
|
|
333
|
+
};
|
|
320
334
|
}
|
|
321
335
|
}
|
|
322
336
|
}
|
|
@@ -327,9 +341,11 @@ export default class TabixIndexedFile {
|
|
|
327
341
|
// this will never match if there is no end column
|
|
328
342
|
const endCoordinate = format === 'VCF'
|
|
329
343
|
? this._getVcfEnd(startCoordinate, refSeq, line.slice(currentColumnStart, i))
|
|
330
|
-
: parseInt(line.slice(currentColumnStart, i), 10);
|
|
344
|
+
: Number.parseInt(line.slice(currentColumnStart, i), 10);
|
|
331
345
|
if (endCoordinate <= regionStart) {
|
|
332
|
-
return {
|
|
346
|
+
return {
|
|
347
|
+
overlaps: false,
|
|
348
|
+
};
|
|
333
349
|
}
|
|
334
350
|
}
|
|
335
351
|
currentColumnStart = i + 1;
|
|
@@ -339,7 +355,10 @@ export default class TabixIndexedFile {
|
|
|
339
355
|
}
|
|
340
356
|
}
|
|
341
357
|
}
|
|
342
|
-
return {
|
|
358
|
+
return {
|
|
359
|
+
startCoordinate,
|
|
360
|
+
overlaps: true,
|
|
361
|
+
};
|
|
343
362
|
}
|
|
344
363
|
_getVcfEnd(startCoordinate, refSeq, info) {
|
|
345
364
|
let endCoordinate = startCoordinate + refSeq.length;
|
|
@@ -382,7 +401,7 @@ export default class TabixIndexedFile {
|
|
|
382
401
|
async _readRegion(pos, size, opts = {}) {
|
|
383
402
|
const b = Buffer.alloc(size);
|
|
384
403
|
const { bytesRead, buffer } = await this.filehandle.read(b, 0, size, pos, opts);
|
|
385
|
-
return buffer.
|
|
404
|
+
return buffer.subarray(0, bytesRead);
|
|
386
405
|
}
|
|
387
406
|
/**
|
|
388
407
|
* read and uncompress the data in a chunk (composed of one or more
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabixIndexedFile.js","sourceRoot":"","sources":["../src/tabixIndexedFile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabixIndexedFile.js","sourceRoot":"","sources":["../src/tabixIndexedFile.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmod/tabix",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"description": "Read Tabix-indexed files, supports both .tbi and .csi indexes",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "GMOD/tabix-js",
|
|
@@ -23,10 +23,11 @@
|
|
|
23
23
|
"test": "vitest",
|
|
24
24
|
"lint": "eslint --report-unused-disable-directives --max-warnings 0",
|
|
25
25
|
"format": "prettier --write .",
|
|
26
|
+
"docs": "documentation readme --shallow src/tabixIndexedFile.ts --section TabixIndexedFile",
|
|
26
27
|
"clean": "rimraf dist esm",
|
|
27
28
|
"prebuild": "npm run clean && npm run lint",
|
|
28
|
-
"build:esm": "tsc --
|
|
29
|
-
"build:es5": "tsc --
|
|
29
|
+
"build:esm": "tsc --outDir esm",
|
|
30
|
+
"build:es5": "tsc --module commonjs --outDir dist",
|
|
30
31
|
"build": "npm run build:esm && npm run build:es5",
|
|
31
32
|
"postbuild": "webpack",
|
|
32
33
|
"preversion": "npm run lint && npm test run && npm run build",
|
|
@@ -55,14 +56,15 @@
|
|
|
55
56
|
"@typescript-eslint/parser": "^8.0.1",
|
|
56
57
|
"@vitest/coverage-v8": "^2.0.5",
|
|
57
58
|
"buffer": "^6.0.3",
|
|
59
|
+
"documentation": "^14.0.3",
|
|
58
60
|
"eslint": "^9.9.0",
|
|
59
61
|
"eslint-config-prettier": "^9.1.0",
|
|
60
62
|
"eslint-plugin-prettier": "^5.0.1",
|
|
61
|
-
"eslint-plugin-unicorn": "^
|
|
63
|
+
"eslint-plugin-unicorn": "^56.0.0",
|
|
62
64
|
"prettier": "^3.3.3",
|
|
63
65
|
"rimraf": "^6.0.1",
|
|
64
66
|
"standard-changelog": "^6.0.0",
|
|
65
|
-
"typescript": "
|
|
67
|
+
"typescript": "~5.6.0",
|
|
66
68
|
"typescript-eslint": "^8.0.1",
|
|
67
69
|
"vitest": "^2.0.5",
|
|
68
70
|
"webpack": "^5.93.0",
|
package/src/chunk.ts
CHANGED
package/src/tabixIndexedFile.ts
CHANGED
|
@@ -10,6 +10,11 @@ import Chunk from './chunk'
|
|
|
10
10
|
import TBI from './tbi'
|
|
11
11
|
import CSI from './csi'
|
|
12
12
|
|
|
13
|
+
function isASCII(str: string) {
|
|
14
|
+
// eslint-disable-next-line no-control-regex
|
|
15
|
+
return /^[\u0000-\u007F]*$/.test(str)
|
|
16
|
+
}
|
|
17
|
+
|
|
13
18
|
type GetLinesCallback = (line: string, fileOffset: number) => void
|
|
14
19
|
|
|
15
20
|
const decoder =
|
|
@@ -27,13 +32,9 @@ interface ReadChunk {
|
|
|
27
32
|
dpositions: number[]
|
|
28
33
|
}
|
|
29
34
|
|
|
30
|
-
function timeout(time: number) {
|
|
31
|
-
return new Promise(resolve => setTimeout(resolve, time))
|
|
32
|
-
}
|
|
33
35
|
export default class TabixIndexedFile {
|
|
34
36
|
private filehandle: GenericFilehandle
|
|
35
37
|
private index: IndexFile
|
|
36
|
-
private yieldTime: number
|
|
37
38
|
private renameRefSeq: (n: string) => string
|
|
38
39
|
private chunkCache: AbortablePromiseCache<Chunk, ReadChunk>
|
|
39
40
|
|
|
@@ -52,8 +53,11 @@ export default class TabixIndexedFile {
|
|
|
52
53
|
*
|
|
53
54
|
* @param {filehandle} [args.csiFilehandle]
|
|
54
55
|
*
|
|
55
|
-
* @param {
|
|
56
|
-
*
|
|
56
|
+
* @param {url} [args.url]
|
|
57
|
+
*
|
|
58
|
+
* @param {csiUrl} [args.csiUrl]
|
|
59
|
+
*
|
|
60
|
+
* @param {tbiUrl} [args.tbiUrl]
|
|
57
61
|
*
|
|
58
62
|
* @param {function} [args.renameRefSeqs] optional function with sig `string
|
|
59
63
|
* => string` to transform reference sequence names for the purpose of
|
|
@@ -70,7 +74,6 @@ export default class TabixIndexedFile {
|
|
|
70
74
|
csiPath,
|
|
71
75
|
csiUrl,
|
|
72
76
|
csiFilehandle,
|
|
73
|
-
yieldTime = 500,
|
|
74
77
|
renameRefSeqs = n => n,
|
|
75
78
|
chunkCacheSize = 5 * 2 ** 20,
|
|
76
79
|
}: {
|
|
@@ -83,7 +86,6 @@ export default class TabixIndexedFile {
|
|
|
83
86
|
csiPath?: string
|
|
84
87
|
csiUrl?: string
|
|
85
88
|
csiFilehandle?: GenericFilehandle
|
|
86
|
-
yieldTime?: number
|
|
87
89
|
renameRefSeqs?: (n: string) => string
|
|
88
90
|
chunkCacheSize?: number
|
|
89
91
|
}) {
|
|
@@ -141,7 +143,6 @@ export default class TabixIndexedFile {
|
|
|
141
143
|
}
|
|
142
144
|
|
|
143
145
|
this.renameRefSeq = renameRefSeqs
|
|
144
|
-
this.yieldTime = yieldTime
|
|
145
146
|
this.chunkCache = new AbortablePromiseCache<Chunk, ReadChunk>({
|
|
146
147
|
cache: new LRU({ maxSize: Math.floor(chunkCacheSize / (1 << 16)) }),
|
|
147
148
|
fill: (args: Chunk, signal?: AbortSignal) =>
|
|
@@ -197,9 +198,7 @@ export default class TabixIndexedFile {
|
|
|
197
198
|
checkAbortSignal(signal)
|
|
198
199
|
|
|
199
200
|
// now go through each chunk and parse and filter the lines out of it
|
|
200
|
-
let last = Date.now()
|
|
201
201
|
for (const c of chunks) {
|
|
202
|
-
let previousStartCoordinate: number | undefined
|
|
203
202
|
const { buffer, cpositions, dpositions } = await this.chunkCache.get(
|
|
204
203
|
c.toString(),
|
|
205
204
|
c,
|
|
@@ -209,13 +208,29 @@ export default class TabixIndexedFile {
|
|
|
209
208
|
checkAbortSignal(signal)
|
|
210
209
|
let blockStart = 0
|
|
211
210
|
let pos = 0
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
211
|
+
|
|
212
|
+
const str = decoder?.decode(buffer) ?? buffer.toString()
|
|
213
|
+
// fast path, Buffer is just ASCII chars and not gigantor, can be
|
|
214
|
+
// converted to string and processed directly. if it is not ASCII or
|
|
215
|
+
// gigantic (chrome max str len is 512Mb), we have to decode line by line
|
|
216
|
+
const strIsASCII = buffer.length < 500_000_000 && isASCII(str)
|
|
217
|
+
while (blockStart < str.length) {
|
|
218
|
+
let line: string
|
|
219
|
+
let n: number
|
|
220
|
+
if (strIsASCII) {
|
|
221
|
+
n = str.indexOf('\n', blockStart)
|
|
222
|
+
if (n === -1) {
|
|
223
|
+
break
|
|
224
|
+
}
|
|
225
|
+
line = str.slice(blockStart, n)
|
|
226
|
+
} else {
|
|
227
|
+
n = buffer.indexOf('\n', blockStart)
|
|
228
|
+
if (n === -1) {
|
|
229
|
+
break
|
|
230
|
+
}
|
|
231
|
+
const b = buffer.slice(blockStart, n)
|
|
232
|
+
line = decoder?.decode(b) ?? b.toString()
|
|
216
233
|
}
|
|
217
|
-
const b = buffer.slice(blockStart, n)
|
|
218
|
-
const line = decoder?.decode(b) ?? b.toString()
|
|
219
234
|
|
|
220
235
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
221
236
|
if (dpositions) {
|
|
@@ -232,48 +247,31 @@ export default class TabixIndexedFile {
|
|
|
232
247
|
line,
|
|
233
248
|
)
|
|
234
249
|
|
|
235
|
-
// do a small check just to make sure that the lines are really sorted
|
|
236
|
-
// by start coordinate
|
|
237
|
-
if (
|
|
238
|
-
previousStartCoordinate !== undefined &&
|
|
239
|
-
startCoordinate !== undefined &&
|
|
240
|
-
previousStartCoordinate > startCoordinate
|
|
241
|
-
) {
|
|
242
|
-
throw new Error(
|
|
243
|
-
`Lines not sorted by start coordinate (${previousStartCoordinate} > ${startCoordinate}), this file is not usable with Tabix.`,
|
|
244
|
-
)
|
|
245
|
-
}
|
|
246
|
-
previousStartCoordinate = startCoordinate
|
|
247
|
-
|
|
248
250
|
if (overlaps) {
|
|
249
251
|
callback(
|
|
250
|
-
line
|
|
251
|
-
// cpositions[pos] refers to actual file offset of a bgzip block
|
|
252
|
+
line,
|
|
253
|
+
// cpositions[pos] refers to actual file offset of a bgzip block
|
|
254
|
+
// boundaries
|
|
252
255
|
//
|
|
253
|
-
// we multiply by (1 <<8) in order to make sure each block has a
|
|
254
|
-
// address space so that data in that block could never
|
|
256
|
+
// we multiply by (1 <<8) in order to make sure each block has a
|
|
257
|
+
// "unique" address space so that data in that block could never
|
|
258
|
+
// overlap
|
|
255
259
|
//
|
|
256
|
-
// then the blockStart-dpositions is an uncompressed file offset
|
|
257
|
-
// that bgzip block boundary, and since the cpositions are
|
|
258
|
-
// (1 << 8) these uncompressed offsets get a unique
|
|
260
|
+
// then the blockStart-dpositions is an uncompressed file offset
|
|
261
|
+
// from that bgzip block boundary, and since the cpositions are
|
|
262
|
+
// multiplied by (1 << 8) these uncompressed offsets get a unique
|
|
263
|
+
// space
|
|
259
264
|
cpositions[pos]! * (1 << 8) +
|
|
260
265
|
(blockStart - dpositions[pos]!) +
|
|
261
266
|
c.minv.dataPosition +
|
|
262
267
|
1,
|
|
263
268
|
)
|
|
264
269
|
} else if (startCoordinate !== undefined && startCoordinate >= end) {
|
|
265
|
-
// the lines were overlapping the region, but now have stopped, so
|
|
266
|
-
//
|
|
267
|
-
//
|
|
270
|
+
// the lines were overlapping the region, but now have stopped, so we
|
|
271
|
+
// must be at the end of the relevant data and we can stop processing
|
|
272
|
+
// data now
|
|
268
273
|
return
|
|
269
274
|
}
|
|
270
|
-
|
|
271
|
-
// yield if we have emitted beyond the yield limit
|
|
272
|
-
if (this.yieldTime && last - Date.now() > this.yieldTime) {
|
|
273
|
-
last = Date.now()
|
|
274
|
-
checkAbortSignal(signal)
|
|
275
|
-
await timeout(1)
|
|
276
|
-
}
|
|
277
275
|
blockStart = n + 1
|
|
278
276
|
}
|
|
279
277
|
}
|
|
@@ -290,9 +288,9 @@ export default class TabixIndexedFile {
|
|
|
290
288
|
async getHeaderBuffer(opts: Options = {}) {
|
|
291
289
|
const { firstDataLine, metaChar, maxBlockSize } =
|
|
292
290
|
await this.getMetadata(opts)
|
|
291
|
+
|
|
293
292
|
checkAbortSignal(opts.signal)
|
|
294
293
|
|
|
295
|
-
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
296
294
|
const maxFetch = (firstDataLine?.blockPosition || 0) + maxBlockSize
|
|
297
295
|
// TODO: what if we don't have a firstDataLine, and the header
|
|
298
296
|
// actually takes up more than one block? this case is not covered here
|
|
@@ -314,7 +312,7 @@ export default class TabixIndexedFile {
|
|
|
314
312
|
lastNewline = i
|
|
315
313
|
}
|
|
316
314
|
}
|
|
317
|
-
return bytes.
|
|
315
|
+
return bytes.subarray(0, lastNewline + 1)
|
|
318
316
|
}
|
|
319
317
|
return bytes
|
|
320
318
|
}
|
|
@@ -391,14 +389,17 @@ export default class TabixIndexedFile {
|
|
|
391
389
|
let currentColumnStart = 0
|
|
392
390
|
let refSeq = ''
|
|
393
391
|
let startCoordinate = -Infinity
|
|
394
|
-
|
|
395
|
-
|
|
392
|
+
const l = line.length
|
|
393
|
+
for (let i = 0; i < l + 1; i++) {
|
|
394
|
+
if (line[i] === '\t' || i === l) {
|
|
396
395
|
if (currentColumnNumber === ref) {
|
|
397
396
|
if (
|
|
398
397
|
this.renameRefSeq(line.slice(currentColumnStart, i)) !==
|
|
399
398
|
regionRefName
|
|
400
399
|
) {
|
|
401
|
-
return {
|
|
400
|
+
return {
|
|
401
|
+
overlaps: false,
|
|
402
|
+
}
|
|
402
403
|
}
|
|
403
404
|
} else if (currentColumnNumber === start) {
|
|
404
405
|
startCoordinate = parseInt(line.slice(currentColumnStart, i), 10)
|
|
@@ -407,12 +408,18 @@ export default class TabixIndexedFile {
|
|
|
407
408
|
startCoordinate -= 1
|
|
408
409
|
}
|
|
409
410
|
if (startCoordinate >= regionEnd) {
|
|
410
|
-
return {
|
|
411
|
+
return {
|
|
412
|
+
startCoordinate,
|
|
413
|
+
overlaps: false,
|
|
414
|
+
}
|
|
411
415
|
}
|
|
412
416
|
if (end === 0 || end === start) {
|
|
413
417
|
// if we have no end, we assume the feature is 1 bp long
|
|
414
418
|
if (startCoordinate + 1 <= regionStart) {
|
|
415
|
-
return {
|
|
419
|
+
return {
|
|
420
|
+
startCoordinate,
|
|
421
|
+
overlaps: false,
|
|
422
|
+
}
|
|
416
423
|
}
|
|
417
424
|
}
|
|
418
425
|
} else if (format === 'VCF' && currentColumnNumber === 4) {
|
|
@@ -426,9 +433,11 @@ export default class TabixIndexedFile {
|
|
|
426
433
|
refSeq,
|
|
427
434
|
line.slice(currentColumnStart, i),
|
|
428
435
|
)
|
|
429
|
-
: parseInt(line.slice(currentColumnStart, i), 10)
|
|
436
|
+
: Number.parseInt(line.slice(currentColumnStart, i), 10)
|
|
430
437
|
if (endCoordinate <= regionStart) {
|
|
431
|
-
return {
|
|
438
|
+
return {
|
|
439
|
+
overlaps: false,
|
|
440
|
+
}
|
|
432
441
|
}
|
|
433
442
|
}
|
|
434
443
|
currentColumnStart = i + 1
|
|
@@ -438,7 +447,10 @@ export default class TabixIndexedFile {
|
|
|
438
447
|
}
|
|
439
448
|
}
|
|
440
449
|
}
|
|
441
|
-
return {
|
|
450
|
+
return {
|
|
451
|
+
startCoordinate,
|
|
452
|
+
overlaps: true,
|
|
453
|
+
}
|
|
442
454
|
}
|
|
443
455
|
|
|
444
456
|
_getVcfEnd(startCoordinate: number, refSeq: string, info: any) {
|
|
@@ -490,7 +502,7 @@ export default class TabixIndexedFile {
|
|
|
490
502
|
opts,
|
|
491
503
|
)
|
|
492
504
|
|
|
493
|
-
return buffer.
|
|
505
|
+
return buffer.subarray(0, bytesRead)
|
|
494
506
|
}
|
|
495
507
|
|
|
496
508
|
/**
|