@gmod/tabix 1.5.15 → 1.6.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 +7 -7
- package/README.md +175 -37
- package/dist/chunk.js.map +1 -1
- package/dist/csi.js +132 -128
- 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 +9 -8
- package/dist/tabixIndexedFile.js +156 -161
- package/dist/tabixIndexedFile.js.map +1 -1
- package/dist/tbi.js +167 -172
- 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 +9 -8
- package/esm/tabixIndexedFile.js +70 -50
- package/esm/tabixIndexedFile.js.map +1 -1
- package/package.json +6 -4
- package/src/chunk.ts +0 -1
- package/src/tabixIndexedFile.ts +70 -57
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
|
}
|
|
@@ -231,7 +237,7 @@ export default class TabixIndexedFile {
|
|
|
231
237
|
lastNewline = i;
|
|
232
238
|
}
|
|
233
239
|
}
|
|
234
|
-
return bytes.
|
|
240
|
+
return bytes.subarray(0, lastNewline + 1);
|
|
235
241
|
}
|
|
236
242
|
return bytes;
|
|
237
243
|
}
|
|
@@ -296,12 +302,15 @@ export default class TabixIndexedFile {
|
|
|
296
302
|
let currentColumnStart = 0;
|
|
297
303
|
let refSeq = '';
|
|
298
304
|
let startCoordinate = -Infinity;
|
|
299
|
-
|
|
300
|
-
|
|
305
|
+
const l = line.length;
|
|
306
|
+
for (let i = 0; i < l + 1; i++) {
|
|
307
|
+
if (line[i] === '\t' || i === l) {
|
|
301
308
|
if (currentColumnNumber === ref) {
|
|
302
309
|
if (this.renameRefSeq(line.slice(currentColumnStart, i)) !==
|
|
303
310
|
regionRefName) {
|
|
304
|
-
return {
|
|
311
|
+
return {
|
|
312
|
+
overlaps: false,
|
|
313
|
+
};
|
|
305
314
|
}
|
|
306
315
|
}
|
|
307
316
|
else if (currentColumnNumber === start) {
|
|
@@ -311,12 +320,18 @@ export default class TabixIndexedFile {
|
|
|
311
320
|
startCoordinate -= 1;
|
|
312
321
|
}
|
|
313
322
|
if (startCoordinate >= regionEnd) {
|
|
314
|
-
return {
|
|
323
|
+
return {
|
|
324
|
+
startCoordinate,
|
|
325
|
+
overlaps: false,
|
|
326
|
+
};
|
|
315
327
|
}
|
|
316
328
|
if (end === 0 || end === start) {
|
|
317
329
|
// if we have no end, we assume the feature is 1 bp long
|
|
318
330
|
if (startCoordinate + 1 <= regionStart) {
|
|
319
|
-
return {
|
|
331
|
+
return {
|
|
332
|
+
startCoordinate,
|
|
333
|
+
overlaps: false,
|
|
334
|
+
};
|
|
320
335
|
}
|
|
321
336
|
}
|
|
322
337
|
}
|
|
@@ -327,9 +342,11 @@ export default class TabixIndexedFile {
|
|
|
327
342
|
// this will never match if there is no end column
|
|
328
343
|
const endCoordinate = format === 'VCF'
|
|
329
344
|
? this._getVcfEnd(startCoordinate, refSeq, line.slice(currentColumnStart, i))
|
|
330
|
-
: parseInt(line.slice(currentColumnStart, i), 10);
|
|
345
|
+
: Number.parseInt(line.slice(currentColumnStart, i), 10);
|
|
331
346
|
if (endCoordinate <= regionStart) {
|
|
332
|
-
return {
|
|
347
|
+
return {
|
|
348
|
+
overlaps: false,
|
|
349
|
+
};
|
|
333
350
|
}
|
|
334
351
|
}
|
|
335
352
|
currentColumnStart = i + 1;
|
|
@@ -339,7 +356,10 @@ export default class TabixIndexedFile {
|
|
|
339
356
|
}
|
|
340
357
|
}
|
|
341
358
|
}
|
|
342
|
-
return {
|
|
359
|
+
return {
|
|
360
|
+
startCoordinate,
|
|
361
|
+
overlaps: true,
|
|
362
|
+
};
|
|
343
363
|
}
|
|
344
364
|
_getVcfEnd(startCoordinate, refSeq, info) {
|
|
345
365
|
let endCoordinate = startCoordinate + refSeq.length;
|
|
@@ -382,7 +402,7 @@ export default class TabixIndexedFile {
|
|
|
382
402
|
async _readRegion(pos, size, opts = {}) {
|
|
383
403
|
const b = Buffer.alloc(size);
|
|
384
404
|
const { bytesRead, buffer } = await this.filehandle.read(b, 0, size, pos, opts);
|
|
385
|
-
return buffer.
|
|
405
|
+
return buffer.subarray(0, bytesRead);
|
|
386
406
|
}
|
|
387
407
|
/**
|
|
388
408
|
* 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.0",
|
|
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,10 +56,11 @@
|
|
|
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",
|
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,6 +288,7 @@ 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
294
|
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
@@ -314,7 +313,7 @@ export default class TabixIndexedFile {
|
|
|
314
313
|
lastNewline = i
|
|
315
314
|
}
|
|
316
315
|
}
|
|
317
|
-
return bytes.
|
|
316
|
+
return bytes.subarray(0, lastNewline + 1)
|
|
318
317
|
}
|
|
319
318
|
return bytes
|
|
320
319
|
}
|
|
@@ -391,14 +390,17 @@ export default class TabixIndexedFile {
|
|
|
391
390
|
let currentColumnStart = 0
|
|
392
391
|
let refSeq = ''
|
|
393
392
|
let startCoordinate = -Infinity
|
|
394
|
-
|
|
395
|
-
|
|
393
|
+
const l = line.length
|
|
394
|
+
for (let i = 0; i < l + 1; i++) {
|
|
395
|
+
if (line[i] === '\t' || i === l) {
|
|
396
396
|
if (currentColumnNumber === ref) {
|
|
397
397
|
if (
|
|
398
398
|
this.renameRefSeq(line.slice(currentColumnStart, i)) !==
|
|
399
399
|
regionRefName
|
|
400
400
|
) {
|
|
401
|
-
return {
|
|
401
|
+
return {
|
|
402
|
+
overlaps: false,
|
|
403
|
+
}
|
|
402
404
|
}
|
|
403
405
|
} else if (currentColumnNumber === start) {
|
|
404
406
|
startCoordinate = parseInt(line.slice(currentColumnStart, i), 10)
|
|
@@ -407,12 +409,18 @@ export default class TabixIndexedFile {
|
|
|
407
409
|
startCoordinate -= 1
|
|
408
410
|
}
|
|
409
411
|
if (startCoordinate >= regionEnd) {
|
|
410
|
-
return {
|
|
412
|
+
return {
|
|
413
|
+
startCoordinate,
|
|
414
|
+
overlaps: false,
|
|
415
|
+
}
|
|
411
416
|
}
|
|
412
417
|
if (end === 0 || end === start) {
|
|
413
418
|
// if we have no end, we assume the feature is 1 bp long
|
|
414
419
|
if (startCoordinate + 1 <= regionStart) {
|
|
415
|
-
return {
|
|
420
|
+
return {
|
|
421
|
+
startCoordinate,
|
|
422
|
+
overlaps: false,
|
|
423
|
+
}
|
|
416
424
|
}
|
|
417
425
|
}
|
|
418
426
|
} else if (format === 'VCF' && currentColumnNumber === 4) {
|
|
@@ -426,9 +434,11 @@ export default class TabixIndexedFile {
|
|
|
426
434
|
refSeq,
|
|
427
435
|
line.slice(currentColumnStart, i),
|
|
428
436
|
)
|
|
429
|
-
: parseInt(line.slice(currentColumnStart, i), 10)
|
|
437
|
+
: Number.parseInt(line.slice(currentColumnStart, i), 10)
|
|
430
438
|
if (endCoordinate <= regionStart) {
|
|
431
|
-
return {
|
|
439
|
+
return {
|
|
440
|
+
overlaps: false,
|
|
441
|
+
}
|
|
432
442
|
}
|
|
433
443
|
}
|
|
434
444
|
currentColumnStart = i + 1
|
|
@@ -438,7 +448,10 @@ export default class TabixIndexedFile {
|
|
|
438
448
|
}
|
|
439
449
|
}
|
|
440
450
|
}
|
|
441
|
-
return {
|
|
451
|
+
return {
|
|
452
|
+
startCoordinate,
|
|
453
|
+
overlaps: true,
|
|
454
|
+
}
|
|
442
455
|
}
|
|
443
456
|
|
|
444
457
|
_getVcfEnd(startCoordinate: number, refSeq: string, info: any) {
|
|
@@ -490,7 +503,7 @@ export default class TabixIndexedFile {
|
|
|
490
503
|
opts,
|
|
491
504
|
)
|
|
492
505
|
|
|
493
|
-
return buffer.
|
|
506
|
+
return buffer.subarray(0, bytesRead)
|
|
494
507
|
}
|
|
495
508
|
|
|
496
509
|
/**
|