@gmod/cram 1.6.3 → 1.7.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 +9 -0
- package/dist/craiIndex.d.ts +19 -12
- package/dist/craiIndex.js +63 -123
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +2 -17
- package/dist/cram-bundle.js.LICENSE.txt +17 -0
- package/dist/cramFile/codecs/_base.d.ts +26 -5
- package/dist/cramFile/codecs/_base.js +3 -39
- package/dist/cramFile/codecs/_base.js.map +1 -1
- package/dist/cramFile/codecs/beta.d.ts +7 -3
- package/dist/cramFile/codecs/beta.js +13 -31
- package/dist/cramFile/codecs/beta.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayLength.d.ts +13 -7
- package/dist/cramFile/codecs/byteArrayLength.js +22 -41
- package/dist/cramFile/codecs/byteArrayLength.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayStop.d.ts +9 -5
- package/dist/cramFile/codecs/byteArrayStop.js +25 -46
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/dist/cramFile/codecs/dataSeriesTypes.d.ts +4 -0
- package/dist/cramFile/codecs/dataSeriesTypes.js +3 -0
- package/dist/cramFile/codecs/dataSeriesTypes.js.map +1 -0
- package/dist/cramFile/codecs/external.d.ts +10 -6
- package/dist/cramFile/codecs/external.js +26 -44
- package/dist/cramFile/codecs/external.js.map +1 -1
- package/dist/cramFile/codecs/gamma.d.ts +7 -3
- package/dist/cramFile/codecs/gamma.js +16 -34
- package/dist/cramFile/codecs/gamma.js.map +1 -1
- package/dist/cramFile/codecs/getBits.d.ts +7 -0
- package/dist/cramFile/codecs/getBits.js +26 -0
- package/dist/cramFile/codecs/getBits.js.map +1 -0
- package/dist/cramFile/codecs/huffman.d.ts +17 -13
- package/dist/cramFile/codecs/huffman.js +76 -85
- package/dist/cramFile/codecs/huffman.js.map +1 -1
- package/dist/cramFile/codecs/index.d.ts +4 -2
- package/dist/cramFile/codecs/index.js +12 -13
- package/dist/cramFile/codecs/index.js.map +1 -1
- package/dist/cramFile/codecs/subexp.d.ts +7 -3
- package/dist/cramFile/codecs/subexp.js +19 -36
- package/dist/cramFile/codecs/subexp.js.map +1 -1
- package/dist/cramFile/constants.d.ts +35 -35
- package/dist/cramFile/constants.js +1 -1
- package/dist/cramFile/constants.js.map +1 -1
- package/dist/cramFile/container/compressionScheme.d.ts +57 -11
- package/dist/cramFile/container/compressionScheme.js +37 -32
- package/dist/cramFile/container/compressionScheme.js.map +1 -1
- package/dist/cramFile/container/index.d.ts +23 -9
- package/dist/cramFile/container/index.js +74 -144
- package/dist/cramFile/container/index.js.map +1 -1
- package/dist/cramFile/encoding.d.ts +78 -0
- package/dist/cramFile/encoding.js +3 -0
- package/dist/cramFile/encoding.js.map +1 -0
- package/dist/cramFile/file.d.ts +91 -41
- package/dist/cramFile/file.js +234 -368
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/filehandle.d.ts +2 -0
- package/dist/cramFile/filehandle.js +3 -0
- package/dist/cramFile/filehandle.js.map +1 -0
- package/dist/cramFile/index.d.ts +1 -1
- package/dist/cramFile/index.js +1 -1
- package/dist/cramFile/index.js.map +1 -1
- package/dist/cramFile/record.d.ts +61 -17
- package/dist/cramFile/record.js +153 -77
- package/dist/cramFile/record.js.map +1 -1
- package/dist/cramFile/sectionParsers.d.ts +99 -8
- package/dist/cramFile/sectionParsers.js +70 -80
- package/dist/cramFile/sectionParsers.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.d.ts +30 -2
- package/dist/cramFile/slice/decodeRecord.js +148 -118
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +21 -14
- package/dist/cramFile/slice/index.js +286 -381
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.d.ts +11 -5
- package/dist/cramFile/util.js +19 -97
- package/dist/cramFile/util.js.map +1 -1
- package/dist/errors.d.ts +5 -10
- package/dist/errors.js +11 -62
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/indexedCramFile.d.ts +37 -12
- package/dist/indexedCramFile.js +114 -154
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/io/index.d.ts +5 -5
- package/dist/io/index.js +9 -9
- package/dist/io/index.js.map +1 -1
- package/dist/rans/constants.js +3 -3
- package/dist/rans/constants.js.map +1 -1
- package/dist/rans/d04.js +15 -15
- package/dist/rans/d04.js.map +1 -1
- package/dist/rans/d14.js +21 -21
- package/dist/rans/d14.js.map +1 -1
- package/dist/rans/decoding.js +27 -30
- package/dist/rans/decoding.js.map +1 -1
- package/dist/rans/frequencies.js +11 -11
- package/dist/rans/frequencies.js.map +1 -1
- package/dist/rans/index.js +46 -49
- package/dist/rans/index.js.map +1 -1
- package/dist/sam.d.ts +8 -1
- package/dist/sam.js +7 -7
- package/dist/sam.js.map +1 -1
- package/dist/typescript.d.ts +3 -0
- package/dist/typescript.js +11 -0
- package/dist/typescript.js.map +1 -0
- package/dist/unzip-pako.js +1 -1
- package/dist/unzip-pako.js.map +1 -1
- package/dist/unzip.js +1 -1
- package/dist/unzip.js.map +1 -1
- package/errors.js +11 -62
- package/esm/craiIndex.d.ts +19 -12
- package/esm/craiIndex.js +8 -24
- package/esm/craiIndex.js.map +1 -1
- package/esm/cramFile/codecs/_base.d.ts +26 -5
- package/esm/cramFile/codecs/_base.js +1 -35
- package/esm/cramFile/codecs/_base.js.map +1 -1
- package/esm/cramFile/codecs/beta.d.ts +7 -3
- package/esm/cramFile/codecs/beta.js +4 -3
- package/esm/cramFile/codecs/beta.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayLength.d.ts +13 -7
- package/esm/cramFile/codecs/byteArrayLength.js +1 -1
- package/esm/cramFile/codecs/byteArrayLength.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayStop.d.ts +9 -5
- package/esm/cramFile/codecs/byteArrayStop.js +7 -9
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/esm/cramFile/codecs/dataSeriesTypes.d.ts +4 -0
- package/esm/cramFile/codecs/dataSeriesTypes.js +2 -0
- package/esm/cramFile/codecs/dataSeriesTypes.js.map +1 -0
- package/esm/cramFile/codecs/external.d.ts +10 -6
- package/esm/cramFile/codecs/external.js +4 -3
- package/esm/cramFile/codecs/external.js.map +1 -1
- package/esm/cramFile/codecs/gamma.d.ts +7 -3
- package/esm/cramFile/codecs/gamma.js +5 -4
- package/esm/cramFile/codecs/gamma.js.map +1 -1
- package/esm/cramFile/codecs/getBits.d.ts +7 -0
- package/esm/cramFile/codecs/getBits.js +21 -0
- package/esm/cramFile/codecs/getBits.js.map +1 -0
- package/esm/cramFile/codecs/huffman.d.ts +17 -13
- package/esm/cramFile/codecs/huffman.js +22 -9
- package/esm/cramFile/codecs/huffman.js.map +1 -1
- package/esm/cramFile/codecs/index.d.ts +4 -2
- package/esm/cramFile/codecs/index.js +1 -1
- package/esm/cramFile/codecs/index.js.map +1 -1
- package/esm/cramFile/codecs/subexp.d.ts +7 -3
- package/esm/cramFile/codecs/subexp.js +7 -5
- package/esm/cramFile/codecs/subexp.js.map +1 -1
- package/esm/cramFile/constants.d.ts +35 -35
- package/esm/cramFile/constants.js.map +1 -1
- package/esm/cramFile/container/compressionScheme.d.ts +57 -11
- package/esm/cramFile/container/compressionScheme.js +15 -8
- package/esm/cramFile/container/compressionScheme.js.map +1 -1
- package/esm/cramFile/container/index.d.ts +23 -9
- package/esm/cramFile/container/index.js +11 -9
- package/esm/cramFile/container/index.js.map +1 -1
- package/esm/cramFile/encoding.d.ts +78 -0
- package/esm/cramFile/encoding.js +2 -0
- package/esm/cramFile/encoding.js.map +1 -0
- package/esm/cramFile/file.d.ts +91 -41
- package/esm/cramFile/file.js +59 -47
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/filehandle.d.ts +2 -0
- package/esm/cramFile/filehandle.js +2 -0
- package/esm/cramFile/filehandle.js.map +1 -0
- package/esm/cramFile/index.d.ts +1 -1
- package/esm/cramFile/index.js.map +1 -1
- package/esm/cramFile/record.d.ts +61 -17
- package/esm/cramFile/record.js +83 -5
- package/esm/cramFile/record.js.map +1 -1
- package/esm/cramFile/sectionParsers.d.ts +99 -8
- package/esm/cramFile/sectionParsers.js +7 -17
- package/esm/cramFile/sectionParsers.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.d.ts +30 -2
- package/esm/cramFile/slice/decodeRecord.js +102 -70
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +21 -14
- package/esm/cramFile/slice/index.js +77 -38
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.d.ts +11 -5
- package/esm/cramFile/util.js +11 -82
- package/esm/cramFile/util.js.map +1 -1
- package/esm/errors.d.ts +5 -10
- package/esm/errors.js +0 -5
- package/esm/errors.js.map +1 -1
- package/esm/index.d.ts +3 -3
- package/esm/index.js.map +1 -1
- package/esm/indexedCramFile.d.ts +37 -12
- package/esm/indexedCramFile.js +19 -8
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/io/index.d.ts +5 -5
- package/esm/io/index.js +3 -3
- package/esm/io/index.js.map +1 -1
- package/esm/sam.d.ts +8 -1
- package/esm/sam.js.map +1 -1
- package/esm/typescript.d.ts +3 -0
- package/esm/typescript.js +7 -0
- package/esm/typescript.js.map +1 -0
- package/package.json +18 -11
- package/src/{craiIndex.js → craiIndex.ts} +37 -31
- package/src/cramFile/codecs/_base.ts +45 -0
- package/src/cramFile/codecs/beta.ts +34 -0
- package/src/cramFile/codecs/{byteArrayLength.js → byteArrayLength.ts} +27 -5
- package/src/cramFile/codecs/{byteArrayStop.js → byteArrayStop.ts} +25 -12
- package/src/cramFile/codecs/dataSeriesTypes.ts +39 -0
- package/src/cramFile/codecs/{external.js → external.ts} +28 -12
- package/src/cramFile/codecs/gamma.ts +42 -0
- package/src/cramFile/codecs/getBits.ts +28 -0
- package/src/cramFile/codecs/{huffman.js → huffman.ts} +48 -15
- package/src/cramFile/codecs/{index.js → index.ts} +9 -3
- package/src/cramFile/codecs/subexp.ts +45 -0
- package/src/cramFile/{constants.js → constants.ts} +0 -0
- package/src/cramFile/container/{compressionScheme.js → compressionScheme.ts} +50 -18
- package/src/cramFile/container/{index.js → index.ts} +13 -13
- package/src/cramFile/encoding.ts +98 -0
- package/src/cramFile/{file.js → file.ts} +136 -62
- package/src/cramFile/filehandle.ts +3 -0
- package/src/cramFile/{index.js → index.ts} +0 -0
- package/src/cramFile/{record.js → record.ts} +185 -14
- package/src/cramFile/{sectionParsers.js → sectionParsers.ts} +148 -20
- package/src/cramFile/slice/{decodeRecord.js → decodeRecord.ts} +158 -105
- package/src/cramFile/slice/{index.js → index.ts} +138 -63
- package/src/cramFile/{util.js → util.ts} +28 -17
- package/src/{errors.js → errors.ts} +0 -5
- package/src/{index.js → index.ts} +0 -0
- package/src/{indexedCramFile.js → indexedCramFile.ts} +79 -19
- package/src/io/{index.js → index.ts} +10 -5
- package/src/{sam.js → sam.ts} +7 -2
- package/src/typescript.ts +17 -0
- package/src/typings/binary-parser.d.ts +44 -0
- package/src/typings/bzip2.d.ts +7 -0
- package/src/typings/htscodecs.d.ts +6 -0
- package/dist/io/bufferCache.d.ts +0 -12
- package/dist/io/bufferCache.js +0 -112
- package/dist/io/bufferCache.js.map +0 -1
- package/dist/io/localFile.d.ts +0 -10
- package/dist/io/localFile.js +0 -108
- package/dist/io/localFile.js.map +0 -1
- package/dist/io/remoteFile.d.ts +0 -16
- package/dist/io/remoteFile.js +0 -143
- package/dist/io/remoteFile.js.map +0 -1
- package/esm/io/bufferCache.d.ts +0 -12
- package/esm/io/bufferCache.js +0 -54
- package/esm/io/bufferCache.js.map +0 -1
- package/esm/io/localFile.d.ts +0 -10
- package/esm/io/localFile.js +0 -31
- package/esm/io/localFile.js.map +0 -1
- package/esm/io/remoteFile.d.ts +0 -16
- package/esm/io/remoteFile.js +0 -64
- package/esm/io/remoteFile.js.map +0 -1
- package/src/cramFile/codecs/_base.js +0 -49
- package/src/cramFile/codecs/beta.js +0 -23
- package/src/cramFile/codecs/gamma.js +0 -30
- package/src/cramFile/codecs/subexp.js +0 -32
- package/src/io/bufferCache.js +0 -66
- package/src/io/localFile.js +0 -35
- package/src/io/remoteFile.js +0 -71
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { Parser } from '@gmod/binary-parser'
|
|
2
|
+
import { TupleOf } from '../typescript'
|
|
3
|
+
import { ParsedItem } from './util'
|
|
4
|
+
import { DataSeriesEncodingMap } from './codecs/dataSeriesTypes'
|
|
5
|
+
import { CramEncoding } from './encoding'
|
|
2
6
|
|
|
3
7
|
const singleItf8 = new Parser().itf8()
|
|
4
8
|
|
|
@@ -72,10 +76,12 @@ const cramBlockCrc32 = {
|
|
|
72
76
|
// 'GAMMA', // 9
|
|
73
77
|
// ]
|
|
74
78
|
|
|
79
|
+
export type CramTagDictionary = string[][]
|
|
80
|
+
|
|
75
81
|
const cramTagDictionary = new Parser().itf8('size').buffer('ents', {
|
|
76
82
|
length: 'size',
|
|
77
83
|
formatter: /* istanbul ignore next */ buffer => {
|
|
78
|
-
function makeTagSet(stringStart, stringEnd) {
|
|
84
|
+
function makeTagSet(stringStart: number, stringEnd: number) {
|
|
79
85
|
const str = buffer.toString('utf8', stringStart, stringEnd)
|
|
80
86
|
const tags = []
|
|
81
87
|
for (let i = 0; i < str.length; i += 3) {
|
|
@@ -83,6 +89,7 @@ const cramTagDictionary = new Parser().itf8('size').buffer('ents', {
|
|
|
83
89
|
}
|
|
84
90
|
return tags
|
|
85
91
|
}
|
|
92
|
+
|
|
86
93
|
/* eslint-disable */
|
|
87
94
|
var tagSets = []
|
|
88
95
|
var stringStart = 0
|
|
@@ -106,6 +113,17 @@ const parseByteAsBool = new Parser().uint8(null, {
|
|
|
106
113
|
formatter: /* istanbul ignore next */ val => !!val,
|
|
107
114
|
})
|
|
108
115
|
|
|
116
|
+
export type CramPreservationMap = {
|
|
117
|
+
MI: boolean
|
|
118
|
+
UI: boolean
|
|
119
|
+
PI: boolean
|
|
120
|
+
RN: boolean
|
|
121
|
+
AP: boolean
|
|
122
|
+
RR: boolean
|
|
123
|
+
SM: [number, number, number, number, number]
|
|
124
|
+
TD: CramTagDictionary
|
|
125
|
+
}
|
|
126
|
+
|
|
109
127
|
const cramPreservationMap = new Parser()
|
|
110
128
|
.itf8('mapSize')
|
|
111
129
|
.itf8('mapCount')
|
|
@@ -136,8 +154,8 @@ const cramPreservationMap = new Parser()
|
|
|
136
154
|
})
|
|
137
155
|
|
|
138
156
|
/* istanbul ignore next */
|
|
139
|
-
function formatMap(data) {
|
|
140
|
-
const map = {}
|
|
157
|
+
function formatMap<T>(data: { ents: { key: string; value: T }[] }) {
|
|
158
|
+
const map: { [x: string]: T } = {}
|
|
141
159
|
for (let i = 0; i < data.ents.length; i += 1) {
|
|
142
160
|
const { key, value } = data.ents[i]
|
|
143
161
|
if (map[key]) {
|
|
@@ -154,11 +172,39 @@ const unversionedParsers = {
|
|
|
154
172
|
cramBlockCrc32,
|
|
155
173
|
}
|
|
156
174
|
|
|
175
|
+
export type MappedSliceHeader = {
|
|
176
|
+
refSeqId: number
|
|
177
|
+
refSeqStart: number
|
|
178
|
+
refSeqSpan: number
|
|
179
|
+
numRecords: number
|
|
180
|
+
recordCounter: number
|
|
181
|
+
numBlocks: number
|
|
182
|
+
numContentIds: number
|
|
183
|
+
contentIds: number[]
|
|
184
|
+
refBaseBlockId: number
|
|
185
|
+
md5: TupleOf<number, 16>
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export type UnmappedSliceHeader = {
|
|
189
|
+
numRecords: number
|
|
190
|
+
recordCounter: number
|
|
191
|
+
numBlocks: number
|
|
192
|
+
numContentIds: number
|
|
193
|
+
contentIds: number[]
|
|
194
|
+
md5: TupleOf<number, 16>
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export function isMappedSliceHeader(
|
|
198
|
+
header: MappedSliceHeader | UnmappedSliceHeader,
|
|
199
|
+
): header is MappedSliceHeader {
|
|
200
|
+
return typeof (header as any).refSeqId === 'number'
|
|
201
|
+
}
|
|
202
|
+
|
|
157
203
|
// each of these is a function of the major and minor version
|
|
158
204
|
const versionedParsers = {
|
|
159
205
|
// assemble a section parser for the unmapped slice header, with slight
|
|
160
206
|
// variations depending on the major version of the cram file
|
|
161
|
-
cramUnmappedSliceHeader(majorVersion) {
|
|
207
|
+
cramUnmappedSliceHeader(majorVersion: number) {
|
|
162
208
|
let maxLength = 0
|
|
163
209
|
let parser = new Parser().itf8('numRecords')
|
|
164
210
|
maxLength += 5
|
|
@@ -187,14 +233,15 @@ const versionedParsers = {
|
|
|
187
233
|
maxLength += 16
|
|
188
234
|
}
|
|
189
235
|
|
|
190
|
-
const maxLengthFunc = numContentIds =>
|
|
236
|
+
const maxLengthFunc = (numContentIds: number) =>
|
|
237
|
+
maxLength + numContentIds * 5
|
|
191
238
|
|
|
192
239
|
return { parser, maxLength: maxLengthFunc } // : p, maxLength: numContentIds => 5 + 9 + 5 * 2 + 5 * numContentIds + 16 }
|
|
193
240
|
},
|
|
194
241
|
|
|
195
242
|
// assembles a section parser for the unmapped slice header, with slight
|
|
196
243
|
// variations depending on the major version of the cram file
|
|
197
|
-
cramMappedSliceHeader(majorVersion) {
|
|
244
|
+
cramMappedSliceHeader(majorVersion: number) {
|
|
198
245
|
let parser = new Parser()
|
|
199
246
|
.itf8('refSeqId')
|
|
200
247
|
.itf8('refSeqStart')
|
|
@@ -226,12 +273,13 @@ const versionedParsers = {
|
|
|
226
273
|
maxLength += 16
|
|
227
274
|
}
|
|
228
275
|
|
|
229
|
-
const maxLengthFunc = numContentIds =>
|
|
276
|
+
const maxLengthFunc = (numContentIds: number) =>
|
|
277
|
+
maxLength + numContentIds * 5
|
|
230
278
|
|
|
231
279
|
return { parser, maxLength: maxLengthFunc }
|
|
232
280
|
},
|
|
233
281
|
|
|
234
|
-
cramEncoding(majorVersion) {
|
|
282
|
+
cramEncoding(majorVersion: number) {
|
|
235
283
|
const parser = new Parser()
|
|
236
284
|
.namely('cramEncoding')
|
|
237
285
|
.itf8('codecId')
|
|
@@ -252,9 +300,7 @@ const versionedParsers = {
|
|
|
252
300
|
.nest('lengthsEncoding', { type: 'cramEncoding' })
|
|
253
301
|
.nest('valuesEncoding', { type: 'cramEncoding' }),
|
|
254
302
|
// BYTE_ARRAY_STOP is a little different for CRAM v1
|
|
255
|
-
5: new Parser()
|
|
256
|
-
.uint8('stopByte')
|
|
257
|
-
[majorVersion > 1 ? 'itf8' : 'int']('blockContentId'),
|
|
303
|
+
5: new Parser().uint8('stopByte').itf8('blockContentId'),
|
|
258
304
|
6: new Parser().itf8('offset').itf8('length'), // BETA
|
|
259
305
|
7: new Parser().itf8('offset').itf8('K'), // SUBEXP
|
|
260
306
|
8: new Parser().itf8('offset').itf8('log2m'), // GOLOMB_RICE
|
|
@@ -265,7 +311,7 @@ const versionedParsers = {
|
|
|
265
311
|
return { parser }
|
|
266
312
|
},
|
|
267
313
|
|
|
268
|
-
cramDataSeriesEncodingMap(majorVersion) {
|
|
314
|
+
cramDataSeriesEncodingMap(majorVersion: number) {
|
|
269
315
|
return new Parser()
|
|
270
316
|
.itf8('mapSize')
|
|
271
317
|
.itf8('mapCount')
|
|
@@ -277,7 +323,7 @@ const versionedParsers = {
|
|
|
277
323
|
})
|
|
278
324
|
},
|
|
279
325
|
|
|
280
|
-
cramTagEncodingMap(majorVersion) {
|
|
326
|
+
cramTagEncodingMap(majorVersion: number) {
|
|
281
327
|
return new Parser()
|
|
282
328
|
.itf8('mapSize')
|
|
283
329
|
.itf8('mapCount')
|
|
@@ -295,7 +341,7 @@ const versionedParsers = {
|
|
|
295
341
|
})
|
|
296
342
|
},
|
|
297
343
|
|
|
298
|
-
cramCompressionHeader(majorVersion) {
|
|
344
|
+
cramCompressionHeader(majorVersion: number) {
|
|
299
345
|
let parser = new Parser()
|
|
300
346
|
// TODO: if we want to support CRAM v1, we will need to refactor
|
|
301
347
|
// compression header into 2 parts to parse the landmarks,
|
|
@@ -316,7 +362,7 @@ const versionedParsers = {
|
|
|
316
362
|
return { parser }
|
|
317
363
|
},
|
|
318
364
|
|
|
319
|
-
cramContainerHeader1(majorVersion) {
|
|
365
|
+
cramContainerHeader1(majorVersion: number) {
|
|
320
366
|
let parser = new Parser()
|
|
321
367
|
.int32('length') // byte size of the container data (blocks)
|
|
322
368
|
.itf8('refSeqId') // reference sequence identifier, -1 for unmapped reads, -2 for multiple reference sequences
|
|
@@ -345,7 +391,7 @@ const versionedParsers = {
|
|
|
345
391
|
return { parser, maxLength }
|
|
346
392
|
},
|
|
347
393
|
|
|
348
|
-
cramContainerHeader2(majorVersion) {
|
|
394
|
+
cramContainerHeader2(majorVersion: number) {
|
|
349
395
|
let parser = new Parser()
|
|
350
396
|
.itf8('numLandmarks') // the number of blocks
|
|
351
397
|
// Each integer value of this array is a byte offset
|
|
@@ -363,15 +409,97 @@ const versionedParsers = {
|
|
|
363
409
|
}
|
|
364
410
|
return {
|
|
365
411
|
parser,
|
|
366
|
-
maxLength: numLandmarks => 5 + numLandmarks * 5 + crcLength,
|
|
412
|
+
maxLength: (numLandmarks: number) => 5 + numLandmarks * 5 + crcLength,
|
|
367
413
|
}
|
|
368
414
|
},
|
|
369
415
|
}
|
|
370
416
|
|
|
371
|
-
|
|
372
|
-
|
|
417
|
+
export type CompressionMethod =
|
|
418
|
+
| 'raw'
|
|
419
|
+
| 'gzip'
|
|
420
|
+
| 'bzip2'
|
|
421
|
+
| 'lzma'
|
|
422
|
+
| 'rans'
|
|
423
|
+
| 'rans4x16'
|
|
424
|
+
| 'arith'
|
|
425
|
+
| 'fqzcomp'
|
|
426
|
+
| 'tok3'
|
|
427
|
+
|
|
428
|
+
export type BlockHeader = {
|
|
429
|
+
compressionMethod: CompressionMethod
|
|
430
|
+
contentType:
|
|
431
|
+
| 'FILE_HEADER'
|
|
432
|
+
| 'COMPRESSION_HEADER'
|
|
433
|
+
| 'MAPPED_SLICE_HEADER'
|
|
434
|
+
| 'UNMAPPED_SLICE_HEADER' // < only used in cram v1
|
|
435
|
+
| 'EXTERNAL_DATA'
|
|
436
|
+
| 'CORE_DATA'
|
|
437
|
+
contentId: number
|
|
438
|
+
compressedSize: number
|
|
439
|
+
uncompressedSize: number
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
export type CramCompressionHeader = ParsedItem<{
|
|
443
|
+
preservation: CramPreservationMap
|
|
444
|
+
dataSeriesEncoding: DataSeriesEncodingMap
|
|
445
|
+
tagEncoding: Record<string, CramEncoding>
|
|
446
|
+
}>
|
|
447
|
+
|
|
448
|
+
function getSectionParsers(majorVersion: number): {
|
|
449
|
+
cramFileDefinition: {
|
|
450
|
+
parser: Parser<{
|
|
451
|
+
magic: string
|
|
452
|
+
majorVersion: number
|
|
453
|
+
minorVersion: number
|
|
454
|
+
fileId: string
|
|
455
|
+
}>
|
|
456
|
+
maxLength: number
|
|
457
|
+
}
|
|
458
|
+
cramContainerHeader1: {
|
|
459
|
+
parser: Parser<{
|
|
460
|
+
length: number
|
|
461
|
+
refSeqId: number
|
|
462
|
+
refSeqStart: number
|
|
463
|
+
alignmentSpan: number
|
|
464
|
+
numRecords: number
|
|
465
|
+
recordCounter: number
|
|
466
|
+
numBases: number
|
|
467
|
+
numBlocks: number
|
|
468
|
+
numLandmarks: number
|
|
469
|
+
}>
|
|
470
|
+
maxLength: number
|
|
471
|
+
}
|
|
472
|
+
cramContainerHeader2: {
|
|
473
|
+
parser: Parser<{
|
|
474
|
+
numLandmarks: number
|
|
475
|
+
landmarks: number[]
|
|
476
|
+
crc32: number
|
|
477
|
+
}>
|
|
478
|
+
maxLength: (x: number) => number
|
|
479
|
+
}
|
|
480
|
+
cramBlockHeader: {
|
|
481
|
+
parser: Parser<BlockHeader>
|
|
482
|
+
maxLength: number
|
|
483
|
+
}
|
|
484
|
+
cramBlockCrc32: {
|
|
485
|
+
parser: Parser<{ crc32: number }>
|
|
486
|
+
maxLength: number
|
|
487
|
+
}
|
|
488
|
+
cramCompressionHeader: {
|
|
489
|
+
parser: Parser<CramCompressionHeader>
|
|
490
|
+
}
|
|
491
|
+
cramMappedSliceHeader: {
|
|
492
|
+
parser: Parser<MappedSliceHeader>
|
|
493
|
+
maxLength: (numContentIds: number) => number
|
|
494
|
+
}
|
|
495
|
+
cramUnmappedSliceHeader: {
|
|
496
|
+
parser: Parser<UnmappedSliceHeader>
|
|
497
|
+
maxLength: (numContentIds: number) => number
|
|
498
|
+
}
|
|
499
|
+
} {
|
|
500
|
+
const parsers: any = Object.assign({}, unversionedParsers)
|
|
373
501
|
Object.keys(versionedParsers).forEach(parserName => {
|
|
374
|
-
parsers[parserName] = versionedParsers[parserName](majorVersion)
|
|
502
|
+
parsers[parserName] = (versionedParsers as any)[parserName](majorVersion)
|
|
375
503
|
})
|
|
376
504
|
return parsers
|
|
377
505
|
}
|