@gmod/cram 1.6.0 → 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 CHANGED
@@ -1,7 +1,11 @@
1
+ # v1.6.1
2
+
3
+ - Explicitly use pako for browser bundle to help avoid buggy zlib polyfills
4
+
1
5
  # v1.6.0
2
6
 
3
- - Support CRAMv3.1
4
- - Support bzip codex
7
+ - Support CRAMv3.1 (thanks to @jkbonfield for contributing!)
8
+ - Support bzip codec
5
9
  - Remove localFile from the browser bundle using "browser" package.json field
6
10
  - Add esm module field in package.json
7
11
 
package/README.md CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  [![NPM version](https://img.shields.io/npm/v/@gmod/cram.svg?style=flat-square)](https://npmjs.org/package/@gmod/cram)
4
4
  [![Coverage Status](https://img.shields.io/codecov/c/github/GMOD/cram-js/master.svg?style=flat-square)](https://codecov.io/gh/GMOD/cram-js/branch/master)
5
- [![Build Status](https://img.shields.io/github/workflow/status/GMOD/cram-js/Push/master?logo=github\&style=flat-query)](https://github.com/GMOD/cram-js/actions?query=branch%3Amaster+workflow%3APush+)
5
+ [![Build Status](https://img.shields.io/github/workflow/status/GMOD/cram-js/Push/master?logo=github&style=flat-query)](https://github.com/GMOD/cram-js/actions?query=branch%3Amaster+workflow%3APush+)
6
6
 
7
7
  Read CRAM files (indexed or unindexed) with pure JS, works in node or in the browser.
8
8
 
9
- * Reads CRAM 3.x and 2.x (3.1 included)
10
- * Does not read CRAM 1.x
11
- * Can use .crai indexes out of the box, for efficient sequence fetching, but also has an [index API](#craiindex) that would allow use with other index types
12
- * Does not implement bzip2 or lzma codecs (yet), as these are rarely used in-the-wild; if this is important to your use case, please file an issue
9
+ - Reads CRAM 3.x and 2.x (3.1 added in v1.6.0)
10
+ - Does not read CRAM 1.x
11
+ - Can use .crai indexes out of the box, for efficient sequence fetching, but also has an [index API](#craiindex) that would allow use with other index types
12
+ - Does implement bzip2 but not lzma codecs (yet); if this is important to your use case, please file an issue
13
13
 
14
14
  ## Install
15
15
 
@@ -24,51 +24,87 @@ $ yarn add @gmod/cram
24
24
  ```js
25
25
  const { IndexedCramFile, CramFile, CraiIndex } = require('@gmod/cram')
26
26
 
27
- //Use indexedfasta library for seqFetch, if using local file (see below)
27
+ // Use indexedfasta library for seqFetch, if using local file (see below)
28
28
  const { IndexedFasta, BgzipIndexedFasta } = require('@gmod/indexedfasta')
29
29
 
30
-
30
+ // this uses local file paths for node.js for IndexedFasta, for usages using
31
+ // remote URLs see indexedfasta docs for filehandles and
32
+ // https://github.com/gmod/generic-filehandle
31
33
  const t = new IndexedFasta({
32
34
  path: '/filesystem/yourfile.fa',
33
35
  faiPath: '/filesystem/yourfile.fa.fai',
34
- });
35
-
36
-
37
- // open local files
38
- const indexedFile = new IndexedCramFile({
39
- cramPath: '/filesystem/yourfile.cram',
40
- index: new CraiIndex({
41
- path: '/filesystem/yourfile.cram.crai',
42
- }),
43
- seqFetch: async (seqId, start, end) => {
44
- // note:
45
- // * seqFetch should return a promise for a string, in this instance retrieved from IndexedFasta
46
- // * we use start-1 because cram-js uses 1-based but IndexedFasta uses 0-based coordinates
47
- // * the seqId is a numeric identifier
48
- // * you can return an empty string for testing if you want, but you may not get proper interpretation of record.readFeatures
49
- return t.getSequence(seqId, start-1, end)
50
- },
51
- checkSequenceMD5: false,
52
36
  })
53
37
 
54
38
  // example of fetching records from an indexed CRAM file.
55
39
  // NOTE: only numeric IDs for the reference sequence are accepted.
56
- // For indexedfasta the numeric ID is the order in which the sequence names appear in the header
40
+ // For indexedfasta the numeric ID is the order in which the sequence names
41
+ // appear in the header
57
42
 
58
43
  // Wrap in an async and then run
59
- run = async() => {
60
- const records = await indexedFile.getRecordsForRange(0, 10000, 20000)
44
+ run = async () => {
45
+ const idToName = []
46
+ const nameToId = {}
47
+
48
+ // example opening local files on node.js
49
+ // can also pass `cramUrl` (for the IndexedCramFile class), and `url` (for
50
+ // the CraiIndex) params to open remote URLs
51
+ //
52
+ // alternatively `cramFilehandle` (for the IndexedCramFile class) and
53
+ // `filehandle` (for the CraiIndex) can be used, see for examples
54
+ // https://github.com/gmod/generic-filehandle
55
+
56
+ const indexedFile = new IndexedCramFile({
57
+ cramPath: '/filesystem/yourfile.cram',
58
+ //or
59
+ //cramUrl: 'url/to/file.cram'
60
+ //cramFilehandle: a generic-filehandle or similar filehandle
61
+ index: new CraiIndex({
62
+ path: '/filesystem/yourfile.cram.crai',
63
+ // or
64
+ // url: 'url/to/file.cram.crai'
65
+ // filehandle: a generic-filehandle or similar filehandle
66
+ }),
67
+ seqFetch: async (seqId, start, end) => {
68
+ // note:
69
+ // * seqFetch should return a promise for a string, in this instance retrieved from IndexedFasta
70
+ // * we use start-1 because cram-js uses 1-based but IndexedFasta uses 0-based coordinates
71
+ // * the seqId is a numeric identifier, so we convert it back to a name with idToName
72
+ // * you can return an empty string from this function for testing if you want, but you may not get proper interpretation of record.readFeatures
73
+ return t.getSequence(idToName[seqId], start - 1, end)
74
+ },
75
+ checkSequenceMD5: false,
76
+ })
77
+ const samHeader = await indexedFile.cram.getSamHeader()
78
+
79
+ // use the @SQ lines in the header to figure out the
80
+ // mapping between ref ref ID numbers and names
81
+
82
+ const sqLines = samHeader.filter(l => l.tag === 'SQ')
83
+ sqLines.forEach((sqLine, refId) => {
84
+ sqLine.data.forEach(item => {
85
+ if (item.tag === 'SN') {
86
+ // this is the ref name
87
+ const refName = item.value
88
+ nameToId[refName] = refId
89
+ idToName[refId] = refName
90
+ }
91
+ })
92
+ })
93
+
94
+ const records = await indexedFile.getRecordsForRange(
95
+ nameToId['chr1'],
96
+ 10000,
97
+ 20000,
98
+ )
61
99
  records.forEach(record => {
62
100
  console.log(`got a record named ${record.readName}`)
63
- if(record.readFeatures != undefined) {
101
+ if (record.readFeatures != undefined) {
64
102
  record.readFeatures.forEach(({ code, pos, refPos, ref, sub }) => {
65
103
  // process the read features. this can be used similar to
66
104
  // CIGAR/MD strings in SAM. see CRAM specs for more details.
67
105
  if (code === 'X') {
68
106
  console.log(
69
- `${
70
- record.readName
71
- } shows a base substitution of ${ref}->${sub} at ${refPos}`,
107
+ `${record.readName} shows a base substitution of ${ref}->${sub} at ${refPos}`,
72
108
  )
73
109
  }
74
110
  })
@@ -78,19 +114,20 @@ run = async() => {
78
114
 
79
115
  run()
80
116
 
81
-
82
117
  // can also pass `cramUrl` (for the IndexedCramFile class), and `url` (for the CraiIndex) params to open remote URLs
83
118
  // alternatively `cramFilehandle` (for the IndexedCramFile class) and `filehandle` (for the CraiIndex) can be used, see for examples https://github.com/gmod/generic-filehandle
84
119
  ```
85
120
 
121
+ You can use cram-js without NPM also with the cram-bundle.js. See the example directory for usage with script tag
122
+
86
123
  ## API (auto-generated)
87
124
 
88
- * [CramRecord](#cramrecord) - format of CRAM records returned by this API
89
- * [ReadFeatures](#readfeatures) - format of read features on records
90
- * [IndexedCramFile](#indexedcramfile) - indexed access into a CRAM file
91
- * [CramFile](#cramfile) - .cram API
92
- * [CraiIndex](#craiindex) - .crai index API
93
- * [Error Classes](#error-classes) - special error classes thrown by this API
125
+ - [CramRecord](#cramrecord) - format of CRAM records returned by this API
126
+ - [ReadFeatures](#readfeatures) - format of read features on records
127
+ - [IndexedCramFile](#indexedcramfile) - indexed access into a CRAM file
128
+ - [CramFile](#cramfile) - .cram API
129
+ - [CraiIndex](#craiindex) - .crai index API
130
+ - [Error Classes](#error-classes) - special error classes thrown by this API
94
131
 
95
132
  ### CramRecord
96
133
 
@@ -98,27 +135,27 @@ run()
98
135
 
99
136
  ##### Table of Contents
100
137
 
101
- * [CramRecord](#cramrecord)
102
- * [isPaired](#ispaired)
103
- * [isProperlyPaired](#isproperlypaired)
104
- * [isSegmentUnmapped](#issegmentunmapped)
105
- * [isMateUnmapped](#ismateunmapped)
106
- * [isReverseComplemented](#isreversecomplemented)
107
- * [isMateReverseComplemented](#ismatereversecomplemented)
108
- * [isRead1](#isread1)
109
- * [isRead2](#isread2)
110
- * [isSecondary](#issecondary)
111
- * [isFailedQc](#isfailedqc)
112
- * [isDuplicate](#isduplicate)
113
- * [isSupplementary](#issupplementary)
114
- * [isDetached](#isdetached)
115
- * [hasMateDownStream](#hasmatedownstream)
116
- * [isPreservingQualityScores](#ispreservingqualityscores)
117
- * [isUnknownBases](#isunknownbases)
118
- * [getReadBases](#getreadbases)
119
- * [getPairOrientation](#getpairorientation)
120
- * [addReferenceSequence](#addreferencesequence)
121
- * [Parameters](#parameters)
138
+ - [CramRecord](#cramrecord)
139
+ - [isPaired](#ispaired)
140
+ - [isProperlyPaired](#isproperlypaired)
141
+ - [isSegmentUnmapped](#issegmentunmapped)
142
+ - [isMateUnmapped](#ismateunmapped)
143
+ - [isReverseComplemented](#isreversecomplemented)
144
+ - [isMateReverseComplemented](#ismatereversecomplemented)
145
+ - [isRead1](#isread1)
146
+ - [isRead2](#isread2)
147
+ - [isSecondary](#issecondary)
148
+ - [isFailedQc](#isfailedqc)
149
+ - [isDuplicate](#isduplicate)
150
+ - [isSupplementary](#issupplementary)
151
+ - [isDetached](#isdetached)
152
+ - [hasMateDownStream](#hasmatedownstream)
153
+ - [isPreservingQualityScores](#ispreservingqualityscores)
154
+ - [isUnknownBases](#isunknownbases)
155
+ - [getReadBases](#getreadbases)
156
+ - [getPairOrientation](#getpairorientation)
157
+ - [addReferenceSequence](#addreferencesequence)
158
+ - [Parameters](#parameters)
122
159
 
123
160
  #### CramRecord
124
161
 
@@ -209,12 +246,13 @@ base pairs, and will make the `getReadSequence()` method work.
209
246
 
210
247
  ###### Parameters
211
248
 
212
- * `refRegion` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
249
+ - `refRegion` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
250
+
251
+ - `refRegion.start` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
252
+ - `refRegion.end` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
253
+ - `refRegion.seq` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
213
254
 
214
- * `refRegion.start` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
215
- * `refRegion.end` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
216
- * `refRegion.seq` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)**
217
- * `compressionScheme` **CramContainerCompressionScheme**
255
+ - `compressionScheme` **CramContainerCompressionScheme**
218
256
 
219
257
  Returns **[undefined](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/undefined)** nothing
220
258
 
@@ -224,10 +262,10 @@ The feature objects appearing in the `readFeatures` member of CramRecord objects
224
262
 
225
263
  #### Static fields
226
264
 
227
- * **code** (`character`): One of "bqBXIDiQNSPH". See page 15 of the CRAM v3 spec for their meanings.
228
- * **data** (`any`): the data associated with the feature. The format of this varies depending on the feature code.
229
- * **pos** (`number`): location relative to the read (1-based)
230
- * **refPos** (`number`): location relative to the reference (1-based)
265
+ - **code** (`character`): One of "bqBXIDiQNSPH". See page 15 of the CRAM v3 spec for their meanings.
266
+ - **data** (`any`): the data associated with the feature. The format of this varies depending on the feature code.
267
+ - **pos** (`number`): location relative to the read (1-based)
268
+ - **refPos** (`number`): location relative to the reference (1-based)
231
269
 
232
270
  ### IndexedCramFile
233
271
 
@@ -235,40 +273,40 @@ The feature objects appearing in the `readFeatures` member of CramRecord objects
235
273
 
236
274
  ##### Table of Contents
237
275
 
238
- * [constructor](#constructor)
239
- * [Parameters](#parameters)
240
- * [getRecordsForRange](#getrecordsforrange)
241
- * [Parameters](#parameters-1)
242
- * [hasDataForReferenceSequence](#hasdataforreferencesequence)
243
- * [Parameters](#parameters-2)
276
+ - [constructor](#constructor)
277
+ - [Parameters](#parameters)
278
+ - [getRecordsForRange](#getrecordsforrange)
279
+ - [Parameters](#parameters-1)
280
+ - [hasDataForReferenceSequence](#hasdataforreferencesequence)
281
+ - [Parameters](#parameters-2)
244
282
 
245
283
  #### constructor
246
284
 
247
285
  ##### Parameters
248
286
 
249
- * `args` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
287
+ - `args` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
250
288
 
251
- * `args.cram` **CramFile**
252
- * `args.index` **Index-like** object that supports getEntriesForRange(seqId,start,end) -> Promise\[Array\[index entries]]
253
- * `args.cacheSize` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** optional maximum number of CRAM records to cache. default 20,000
254
- * `args.fetchSizeLimit` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** optional maximum number of bytes to fetch in a single getRecordsForRange call. Default 3 MiB.
255
- * `args.checkSequenceMD5` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** default true. if false, disables verifying the MD5
256
- checksum of the reference sequence underlying a slice. In some applications, this check can cause an inconvenient amount (many megabases) of sequences to be fetched.
289
+ - `args.cram` **CramFile**
290
+ - `args.index` **Index-like** object that supports getEntriesForRange(seqId,start,end) -> Promise\[Array\[index entries]]
291
+ - `args.cacheSize` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** optional maximum number of CRAM records to cache. default 20,000
292
+ - `args.fetchSizeLimit` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** optional maximum number of bytes to fetch in a single getRecordsForRange call. Default 3 MiB.
293
+ - `args.checkSequenceMD5` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** default true. if false, disables verifying the MD5
294
+ checksum of the reference sequence underlying a slice. In some applications, this check can cause an inconvenient amount (many megabases) of sequences to be fetched.
257
295
 
258
296
  #### getRecordsForRange
259
297
 
260
298
  ##### Parameters
261
299
 
262
- * `seq` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** numeric ID of the reference sequence
263
- * `start` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** start of the range of interest. 1-based closed coordinates.
264
- * `end` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** end of the range of interest. 1-based closed coordinates.
265
- * `opts` (optional, default `{}`)
300
+ - `seq` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** numeric ID of the reference sequence
301
+ - `start` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** start of the range of interest. 1-based closed coordinates.
302
+ - `end` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)** end of the range of interest. 1-based closed coordinates.
303
+ - `opts` (optional, default `{}`)
266
304
 
267
305
  #### hasDataForReferenceSequence
268
306
 
269
307
  ##### Parameters
270
308
 
271
- * `seqId` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
309
+ - `seqId` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
272
310
 
273
311
  Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)** true if the CRAM file contains data for the given
274
312
  reference sequence numerical ID
@@ -279,25 +317,25 @@ reference sequence numerical ID
279
317
 
280
318
  ##### Table of Contents
281
319
 
282
- * [constructor](#constructor)
283
- * [Parameters](#parameters)
284
- * [containerCount](#containercount)
320
+ - [constructor](#constructor)
321
+ - [Parameters](#parameters)
322
+ - [containerCount](#containercount)
285
323
 
286
324
  #### constructor
287
325
 
288
326
  ##### Parameters
289
327
 
290
- * `args` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
328
+ - `args` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
291
329
 
292
- * `args.filehandle` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** a filehandle that implements the stat() and
293
- read() methods of the Node filehandle API <https://nodejs.org/api/fs.html#fs_class_filehandle>
294
- * `args.path` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** path to the cram file
295
- * `args.url` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** url for the cram file. also supports file:// urls for local files
296
- * `args.seqFetch` **[function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)?** a function with signature
297
- `(seqId, startCoordinate, endCoordinate)` that returns a promise for a string of sequence bases
298
- * `args.cacheSize` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** optional maximum number of CRAM records to cache. default 20,000
299
- * `args.checkSequenceMD5` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** default true. if false, disables verifying the MD5
300
- checksum of the reference sequence underlying a slice. In some applications, this check can cause an inconvenient amount (many megabases) of sequences to be fetched.
330
+ - `args.filehandle` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** a filehandle that implements the stat() and
331
+ read() methods of the Node filehandle API <https://nodejs.org/api/fs.html#fs_class_filehandle>
332
+ - `args.path` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** path to the cram file
333
+ - `args.url` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)?** url for the cram file. also supports file:// urls for local files
334
+ - `args.seqFetch` **[function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function)?** a function with signature
335
+ `(seqId, startCoordinate, endCoordinate)` that returns a promise for a string of sequence bases
336
+ - `args.cacheSize` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)?** optional maximum number of CRAM records to cache. default 20,000
337
+ - `args.checkSequenceMD5` **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** default true. if false, disables verifying the MD5
338
+ checksum of the reference sequence underlying a slice. In some applications, this check can cause an inconvenient amount (many megabases) of sequences to be fetched.
301
339
 
302
340
  #### containerCount
303
341
 
@@ -307,28 +345,28 @@ reference sequence numerical ID
307
345
 
308
346
  ##### Table of Contents
309
347
 
310
- * [constructor](#constructor)
311
- * [Parameters](#parameters)
312
- * [hasDataForReferenceSequence](#hasdataforreferencesequence)
313
- * [Parameters](#parameters-1)
314
- * [getEntriesForRange](#getentriesforrange)
315
- * [Parameters](#parameters-2)
348
+ - [constructor](#constructor)
349
+ - [Parameters](#parameters)
350
+ - [hasDataForReferenceSequence](#hasdataforreferencesequence)
351
+ - [Parameters](#parameters-1)
352
+ - [getEntriesForRange](#getentriesforrange)
353
+ - [Parameters](#parameters-2)
316
354
 
317
355
  #### constructor
318
356
 
319
357
  ##### Parameters
320
358
 
321
- * `args` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
359
+ - `args` **[object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)**
322
360
 
323
- * `args.path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?**
324
- * `args.url` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?**
325
- * `args.filehandle` **FileHandle?**
361
+ - `args.path` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?**
362
+ - `args.url` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)?**
363
+ - `args.filehandle` **FileHandle?**
326
364
 
327
365
  #### hasDataForReferenceSequence
328
366
 
329
367
  ##### Parameters
330
368
 
331
- * `seqId` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
369
+ - `seqId` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
332
370
 
333
371
  Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)** true if the index contains entries for
334
372
  the given reference sequence ID, false otherwise
@@ -339,9 +377,9 @@ fetch index entries for the given range
339
377
 
340
378
  ##### Parameters
341
379
 
342
- * `seqId` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
343
- * `queryStart` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
344
- * `queryEnd` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
380
+ - `seqId` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
381
+ - `queryStart` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
382
+ - `queryEnd` **[number](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number)**
345
383
 
346
384
  Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)** promise for
347
385
  an array of objects of the form
package/dist/craiIndex.js CHANGED
@@ -41,11 +41,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  var abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
43
43
  var quick_lru_1 = __importDefault(require("quick-lru"));
44
- var es6_promisify_1 = require("es6-promisify");
45
- var zlib_1 = __importDefault(require("zlib"));
44
+ var unzip_1 = require("./unzip");
46
45
  var io_1 = require("./io");
47
46
  var errors_1 = require("./errors");
48
- var gunzip = (0, es6_promisify_1.promisify)(zlib_1.default.gunzip);
49
47
  var BAI_MAGIC = 21578050; // BAI\1
50
48
  var Slice = /** @class */ (function () {
51
49
  function Slice(args) {
@@ -102,7 +100,7 @@ var CraiIndex = /** @class */ (function () {
102
100
  return this.readFile()
103
101
  .then(function (data) {
104
102
  if (data[0] === 31 && data[1] === 139) {
105
- return gunzip(data);
103
+ return (0, unzip_1.unzip)(data);
106
104
  }
107
105
  return data;
108
106
  })
@@ -1 +1 @@
1
- {"version":3,"file":"craiIndex.js","sourceRoot":"","sources":["../src/craiIndex.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"craiIndex.js","sourceRoot":"","sources":["../src/craiIndex.js"],"names":[],"mappings":"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"}