@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.
@@ -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
- const decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
10
- function timeout(time) {
11
- return new Promise(resolve => setTimeout(resolve, time));
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 {number} [args.yieldTime] yield to main thread after N milliseconds
30
- * if reading features is taking a long time to avoid hanging main thread
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, yieldTime = 500, renameRefSeqs = n => n, chunkCacheSize = 5 * 2 ** 20, }) {
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
- while (blockStart < buffer.length) {
152
- const n = buffer.indexOf('\n', blockStart);
153
- if (n === -1) {
154
- break;
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.trim(),
175
- // cpositions[pos] refers to actual file offset of a bgzip block boundaries
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 "unique"
178
- // address space so that data in that block could never overlap
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 from
181
- // that bgzip block boundary, and since the cpositions are multiplied by
182
- // (1 << 8) these uncompressed offsets get a unique space
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
- // we must be at the end of the relevant data and we can stop
191
- // processing data now
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.slice(0, lastNewline + 1);
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
- for (let i = 0; i < line.length + 1; i += 1) {
300
- if (line[i] === '\t' || i === line.length) {
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 { overlaps: false };
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 { startCoordinate, overlaps: false };
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 { startCoordinate, overlaps: false };
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 { overlaps: false };
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 { startCoordinate, overlaps: true };
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.slice(0, bytesRead);
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.5.15",
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 --target es2018 --outDir esm",
29
- "build:es5": "tsc --target es2015 --module commonjs --outDir dist",
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": "^55.0.0",
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": "^5.3.3",
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
@@ -20,7 +20,6 @@ export default class Chunk {
20
20
  }
21
21
 
22
22
  toUniqueString() {
23
-
24
23
  return `${this.minv}..${this.maxv} (bin ${
25
24
  this.bin
26
25
  }, fetchedSize ${this.fetchedSize()})`
@@ -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 {number} [args.yieldTime] yield to main thread after N milliseconds
56
- * if reading features is taking a long time to avoid hanging main thread
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
- while (blockStart < buffer.length) {
213
- const n = buffer.indexOf('\n', blockStart)
214
- if (n === -1) {
215
- break
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.trim(),
251
- // cpositions[pos] refers to actual file offset of a bgzip block boundaries
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 "unique"
254
- // address space so that data in that block could never overlap
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 from
257
- // that bgzip block boundary, and since the cpositions are multiplied by
258
- // (1 << 8) these uncompressed offsets get a unique space
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
- // we must be at the end of the relevant data and we can stop
267
- // processing data now
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.slice(0, lastNewline + 1)
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
- for (let i = 0; i < line.length + 1; i += 1) {
395
- if (line[i] === '\t' || i === line.length) {
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 { overlaps: false }
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 { startCoordinate, overlaps: false }
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 { startCoordinate, overlaps: false }
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 { overlaps: false }
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 { startCoordinate, overlaps: true }
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.slice(0, bytesRead)
505
+ return buffer.subarray(0, bytesRead)
494
506
  }
495
507
 
496
508
  /**