@gmod/cram 3.0.4 → 3.0.5
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/dist/craiIndex.d.ts +3 -5
- package/dist/craiIndex.js +28 -30
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +1 -1
- package/dist/cramFile/codecs/byteArrayLength.js +3 -6
- package/dist/cramFile/codecs/byteArrayLength.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayStop.d.ts +0 -1
- package/dist/cramFile/codecs/byteArrayStop.js +0 -6
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/dist/cramFile/codecs/external.js +0 -1
- package/dist/cramFile/codecs/external.js.map +1 -1
- package/dist/cramFile/codecs/getBits.js.map +1 -1
- package/dist/cramFile/codecs/huffman.js +1 -2
- package/dist/cramFile/codecs/huffman.js.map +1 -1
- package/dist/cramFile/container/compressionScheme.d.ts +1 -1
- package/dist/cramFile/container/compressionScheme.js +12 -4
- package/dist/cramFile/container/compressionScheme.js.map +1 -1
- package/dist/cramFile/container/index.js +3 -1
- package/dist/cramFile/container/index.js.map +1 -1
- package/dist/cramFile/file.d.ts +1 -1
- package/dist/cramFile/file.js +9 -10
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/record.js +1 -7
- package/dist/cramFile/record.js.map +1 -1
- package/dist/cramFile/sectionParsers.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.js +6 -11
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +3 -2
- package/dist/cramFile/slice/index.js +10 -16
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.js.map +1 -1
- package/dist/indexedCramFile.js +0 -3
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/rans/d04.js +1 -1
- package/dist/rans/d04.js.map +1 -1
- package/dist/rans/d14.js +1 -1
- package/dist/rans/d14.js.map +1 -1
- package/dist/rans/decoding.js +1 -1
- package/dist/rans/decoding.js.map +1 -1
- package/dist/rans/frequencies.js +1 -1
- package/dist/rans/frequencies.js.map +1 -1
- package/dist/rans/index.js +1 -1
- package/dist/rans/index.js.map +1 -1
- package/esm/craiIndex.d.ts +3 -5
- package/esm/craiIndex.js +63 -64
- package/esm/craiIndex.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayLength.js +3 -6
- package/esm/cramFile/codecs/byteArrayLength.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayStop.d.ts +0 -1
- package/esm/cramFile/codecs/byteArrayStop.js +0 -6
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/esm/cramFile/codecs/external.js +0 -1
- package/esm/cramFile/codecs/external.js.map +1 -1
- package/esm/cramFile/codecs/getBits.js.map +1 -1
- package/esm/cramFile/codecs/huffman.js +1 -2
- package/esm/cramFile/codecs/huffman.js.map +1 -1
- package/esm/cramFile/container/compressionScheme.d.ts +1 -1
- package/esm/cramFile/container/compressionScheme.js +12 -4
- package/esm/cramFile/container/compressionScheme.js.map +1 -1
- package/esm/cramFile/container/index.js +3 -1
- package/esm/cramFile/container/index.js.map +1 -1
- package/esm/cramFile/file.d.ts +1 -1
- package/esm/cramFile/file.js +9 -10
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/record.js +1 -7
- package/esm/cramFile/record.js.map +1 -1
- package/esm/cramFile/sectionParsers.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.js +6 -8
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +3 -2
- package/esm/cramFile/slice/index.js +10 -16
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.js.map +1 -1
- package/esm/indexedCramFile.js +0 -3
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/rans/d04.js +1 -1
- package/esm/rans/d04.js.map +1 -1
- package/esm/rans/d14.js +1 -1
- package/esm/rans/d14.js.map +1 -1
- package/esm/rans/decoding.js +1 -1
- package/esm/rans/decoding.js.map +1 -1
- package/esm/rans/frequencies.js +1 -1
- package/esm/rans/frequencies.js.map +1 -1
- package/esm/rans/index.js +1 -1
- package/esm/rans/index.js.map +1 -1
- package/package.json +9 -9
- package/src/craiIndex.ts +82 -81
- package/src/cramFile/codecs/byteArrayLength.ts +3 -8
- package/src/cramFile/codecs/byteArrayStop.ts +0 -12
- package/src/cramFile/codecs/external.ts +1 -2
- package/src/cramFile/codecs/getBits.ts +1 -1
- package/src/cramFile/codecs/huffman.ts +11 -12
- package/src/cramFile/container/compressionScheme.ts +38 -31
- package/src/cramFile/container/index.ts +3 -1
- package/src/cramFile/file.ts +9 -10
- package/src/cramFile/record.ts +3 -10
- package/src/cramFile/sectionParsers.ts +4 -4
- package/src/cramFile/slice/decodeRecord.ts +22 -32
- package/src/cramFile/slice/index.ts +16 -25
- package/src/cramFile/util.ts +36 -35
- package/src/indexedCramFile.ts +1 -4
- package/src/rans/d04.ts +1 -1
- package/src/rans/d14.ts +1 -1
- package/src/rans/decoding.ts +1 -1
- package/src/rans/frequencies.ts +1 -1
- package/src/rans/index.ts +1 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import Long from 'long'
|
|
2
1
|
import { CramMalformedError } from '../../errors'
|
|
3
2
|
import {
|
|
4
3
|
BamFlagsDecoder,
|
|
@@ -22,7 +21,7 @@ import { DataSeriesEncodingKey } from '../codecs/dataSeriesTypes'
|
|
|
22
21
|
function readNullTerminatedString(buffer: Uint8Array) {
|
|
23
22
|
let r = ''
|
|
24
23
|
for (let i = 0; i < buffer.length && buffer[i] !== 0; i++) {
|
|
25
|
-
r += String.fromCharCode(buffer[i])
|
|
24
|
+
r += String.fromCharCode(buffer[i]!)
|
|
26
25
|
}
|
|
27
26
|
return r
|
|
28
27
|
}
|
|
@@ -31,9 +30,9 @@ function readNullTerminatedString(buffer: Uint8Array) {
|
|
|
31
30
|
* parse a BAM tag's array value from a binary buffer
|
|
32
31
|
* @private
|
|
33
32
|
*/
|
|
34
|
-
function parseTagValueArray(buffer:
|
|
35
|
-
const arrayType = String.fromCharCode(buffer[0])
|
|
36
|
-
const length = Int32Array.from(buffer.slice(1))[0]
|
|
33
|
+
function parseTagValueArray(buffer: Uint8Array) {
|
|
34
|
+
const arrayType = String.fromCharCode(buffer[0]!)
|
|
35
|
+
const length = Int32Array.from(buffer.slice(1))[0]!
|
|
37
36
|
|
|
38
37
|
const array: number[] = new Array(length)
|
|
39
38
|
buffer = buffer.slice(5)
|
|
@@ -41,37 +40,37 @@ function parseTagValueArray(buffer: Buffer) {
|
|
|
41
40
|
if (arrayType === 'c') {
|
|
42
41
|
const arr = new Int8Array(buffer.buffer)
|
|
43
42
|
for (let i = 0; i < length; i += 1) {
|
|
44
|
-
array[i] = arr[i]
|
|
43
|
+
array[i] = arr[i]!
|
|
45
44
|
}
|
|
46
45
|
} else if (arrayType === 'C') {
|
|
47
46
|
const arr = new Uint8Array(buffer.buffer)
|
|
48
47
|
for (let i = 0; i < length; i += 1) {
|
|
49
|
-
array[i] = arr[i]
|
|
48
|
+
array[i] = arr[i]!
|
|
50
49
|
}
|
|
51
50
|
} else if (arrayType === 's') {
|
|
52
51
|
const arr = new Int16Array(buffer.buffer)
|
|
53
52
|
for (let i = 0; i < length; i += 1) {
|
|
54
|
-
array[i] = arr[i]
|
|
53
|
+
array[i] = arr[i]!
|
|
55
54
|
}
|
|
56
55
|
} else if (arrayType === 'S') {
|
|
57
56
|
const arr = new Uint16Array(buffer.buffer)
|
|
58
57
|
for (let i = 0; i < length; i += 1) {
|
|
59
|
-
array[i] = arr[i]
|
|
58
|
+
array[i] = arr[i]!
|
|
60
59
|
}
|
|
61
60
|
} else if (arrayType === 'i') {
|
|
62
61
|
const arr = new Int32Array(buffer.buffer)
|
|
63
62
|
for (let i = 0; i < length; i += 1) {
|
|
64
|
-
array[i] = arr[i]
|
|
63
|
+
array[i] = arr[i]!
|
|
65
64
|
}
|
|
66
65
|
} else if (arrayType === 'I') {
|
|
67
66
|
const arr = new Uint32Array(buffer.buffer)
|
|
68
67
|
for (let i = 0; i < length; i += 1) {
|
|
69
|
-
array[i] = arr[i]
|
|
68
|
+
array[i] = arr[i]!
|
|
70
69
|
}
|
|
71
70
|
} else if (arrayType === 'f') {
|
|
72
71
|
const arr = new Float32Array(buffer.buffer)
|
|
73
72
|
for (let i = 0; i < length; i += 1) {
|
|
74
|
-
array[i] = arr[i]
|
|
73
|
+
array[i] = arr[i]!
|
|
75
74
|
}
|
|
76
75
|
} else {
|
|
77
76
|
throw new Error(`unknown type: ${arrayType}`)
|
|
@@ -80,15 +79,15 @@ function parseTagValueArray(buffer: Buffer) {
|
|
|
80
79
|
return array
|
|
81
80
|
}
|
|
82
81
|
|
|
83
|
-
function parseTagData(tagType: string, buffer:
|
|
82
|
+
function parseTagData(tagType: string, buffer: Uint8Array) {
|
|
84
83
|
if (tagType === 'Z') {
|
|
85
84
|
return readNullTerminatedString(buffer)
|
|
86
85
|
}
|
|
87
86
|
if (tagType === 'A') {
|
|
88
|
-
return String.fromCharCode(buffer[0])
|
|
87
|
+
return String.fromCharCode(buffer[0]!)
|
|
89
88
|
}
|
|
90
89
|
if (tagType === 'I') {
|
|
91
|
-
return
|
|
90
|
+
return new Uint32Array(buffer.buffer)[0]
|
|
92
91
|
}
|
|
93
92
|
if (tagType === 'i') {
|
|
94
93
|
return new Int32Array(buffer.buffer)[0]
|
|
@@ -103,7 +102,7 @@ function parseTagData(tagType: string, buffer: any) {
|
|
|
103
102
|
return new Int8Array(buffer.buffer)[0]
|
|
104
103
|
}
|
|
105
104
|
if (tagType === 'C') {
|
|
106
|
-
return buffer[0]
|
|
105
|
+
return buffer[0]!
|
|
107
106
|
}
|
|
108
107
|
if (tagType === 'f') {
|
|
109
108
|
return new Float32Array(buffer.buffer)[0]
|
|
@@ -311,27 +310,18 @@ export default function decodeRecord(
|
|
|
311
310
|
|
|
312
311
|
const tags: Record<string, any> = {}
|
|
313
312
|
// TN = tag names
|
|
314
|
-
const TN = compressionScheme.getTagNames(TLindex)
|
|
313
|
+
const TN = compressionScheme.getTagNames(TLindex)!
|
|
315
314
|
const ntags = TN.length
|
|
316
|
-
|
|
317
315
|
for (let i = 0; i < ntags; i += 1) {
|
|
318
|
-
const tagId = TN[i]
|
|
316
|
+
const tagId = TN[i]!
|
|
319
317
|
const tagName = tagId.slice(0, 2)
|
|
320
318
|
const tagType = tagId.slice(2, 3)
|
|
321
319
|
|
|
322
|
-
const
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
)
|
|
327
|
-
}
|
|
328
|
-
const tagData = tagCodec.decode(
|
|
329
|
-
slice,
|
|
330
|
-
coreDataBlock,
|
|
331
|
-
blocksByContentId,
|
|
332
|
-
cursors,
|
|
333
|
-
)
|
|
334
|
-
tags[tagName] = parseTagData(tagType, tagData)
|
|
320
|
+
const tagData = compressionScheme
|
|
321
|
+
.getCodecForTag(tagId)
|
|
322
|
+
.decode(slice, coreDataBlock, blocksByContentId, cursors)
|
|
323
|
+
tags[tagName] =
|
|
324
|
+
typeof tagData === 'number' ? tagData : parseTagData(tagType, tagData)
|
|
335
325
|
}
|
|
336
326
|
|
|
337
327
|
let readFeatures: ReadFeature[] | undefined
|
|
@@ -90,9 +90,10 @@ function calculateIntraSliceMatePairTemplateLength(
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
|
-
* @private establishes a mate-pair relationship between two records in the
|
|
94
|
-
* CRAM compresses mate-pair relationships between records in the
|
|
95
|
-
* just one record having the index in the slice of its
|
|
93
|
+
* @private establishes a mate-pair relationship between two records in the
|
|
94
|
+
* same slice. CRAM compresses mate-pair relationships between records in the
|
|
95
|
+
* same slice down into just one record having the index in the slice of its
|
|
96
|
+
* mate
|
|
96
97
|
*/
|
|
97
98
|
function associateIntraSliceMate(
|
|
98
99
|
allRecords: CramRecord[],
|
|
@@ -100,12 +101,6 @@ function associateIntraSliceMate(
|
|
|
100
101
|
thisRecord: CramRecord,
|
|
101
102
|
mateRecord: CramRecord,
|
|
102
103
|
) {
|
|
103
|
-
if (!mateRecord) {
|
|
104
|
-
throw new CramMalformedError(
|
|
105
|
-
'could not resolve intra-slice mate pairs, file seems truncated or malformed',
|
|
106
|
-
)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
104
|
const complicatedMultiSegment = !!(
|
|
110
105
|
mateRecord.mate ||
|
|
111
106
|
(mateRecord.mateRecordNumber !== undefined &&
|
|
@@ -186,7 +181,7 @@ export default class CramSlice {
|
|
|
186
181
|
constructor(
|
|
187
182
|
public container: CramContainer,
|
|
188
183
|
public containerPosition: number,
|
|
189
|
-
|
|
184
|
+
public sliceSize: number,
|
|
190
185
|
) {
|
|
191
186
|
this.file = container.file
|
|
192
187
|
}
|
|
@@ -242,7 +237,7 @@ export default class CramSlice {
|
|
|
242
237
|
throw new Error('block undefined')
|
|
243
238
|
}
|
|
244
239
|
blocks[i] = block
|
|
245
|
-
blockPosition = blocks[i]
|
|
240
|
+
blockPosition = blocks[i]!._endPosition
|
|
246
241
|
}
|
|
247
242
|
|
|
248
243
|
return blocks
|
|
@@ -251,8 +246,7 @@ export default class CramSlice {
|
|
|
251
246
|
// no memoize
|
|
252
247
|
async getCoreDataBlock() {
|
|
253
248
|
const blocks = await this.getBlocks()
|
|
254
|
-
|
|
255
|
-
return blocks[0]
|
|
249
|
+
return blocks[0]!
|
|
256
250
|
}
|
|
257
251
|
|
|
258
252
|
// memoize
|
|
@@ -357,10 +351,6 @@ export default class CramSlice {
|
|
|
357
351
|
}
|
|
358
352
|
|
|
359
353
|
const sliceHeader = await this.getHeader()
|
|
360
|
-
if (sliceHeader === undefined) {
|
|
361
|
-
throw new Error('slice header undefined')
|
|
362
|
-
}
|
|
363
|
-
|
|
364
354
|
const blocksByContentId = await this._getBlocksContentIdIndex()
|
|
365
355
|
|
|
366
356
|
// check MD5 of reference if available
|
|
@@ -429,7 +419,9 @@ export default class CramSlice {
|
|
|
429
419
|
)
|
|
430
420
|
return decoded
|
|
431
421
|
}
|
|
432
|
-
|
|
422
|
+
const records: CramRecord[] = new Array(
|
|
423
|
+
sliceHeader.parsedContent.numRecords,
|
|
424
|
+
)
|
|
433
425
|
for (let i = 0; i < records.length; i += 1) {
|
|
434
426
|
try {
|
|
435
427
|
const init = decodeRecord(
|
|
@@ -456,7 +448,6 @@ export default class CramSlice {
|
|
|
456
448
|
console.warn(
|
|
457
449
|
'read attempted beyond end of buffer, file seems truncated.',
|
|
458
450
|
)
|
|
459
|
-
records = records.filter(r => !!r)
|
|
460
451
|
break
|
|
461
452
|
} else {
|
|
462
453
|
throw e
|
|
@@ -467,13 +458,13 @@ export default class CramSlice {
|
|
|
467
458
|
// interpret `recordsToNextFragment` attributes to make standard `mate`
|
|
468
459
|
// objects Resolve mate pair cross-references between records in this slice
|
|
469
460
|
for (let i = 0; i < records.length; i += 1) {
|
|
470
|
-
const { mateRecordNumber } = records[i]
|
|
461
|
+
const { mateRecordNumber } = records[i]!
|
|
471
462
|
if (mateRecordNumber !== undefined && mateRecordNumber >= 0) {
|
|
472
463
|
associateIntraSliceMate(
|
|
473
464
|
records,
|
|
474
465
|
i,
|
|
475
|
-
records[i]
|
|
476
|
-
records[mateRecordNumber]
|
|
466
|
+
records[i]!,
|
|
467
|
+
records[mateRecordNumber]!,
|
|
477
468
|
)
|
|
478
469
|
}
|
|
479
470
|
}
|
|
@@ -580,6 +571,6 @@ export default class CramSlice {
|
|
|
580
571
|
}
|
|
581
572
|
|
|
582
573
|
// memoize several methods in the class for performance
|
|
583
|
-
'getHeader getBlocks _getBlocksContentIdIndex'
|
|
584
|
-
|
|
585
|
-
|
|
574
|
+
'getHeader getBlocks _getBlocksContentIdIndex'.split(' ').forEach(method => {
|
|
575
|
+
tinyMemoize(CramSlice, method)
|
|
576
|
+
})
|
package/src/cramFile/util.ts
CHANGED
|
@@ -20,34 +20,34 @@ export function itf8Size(v: number) {
|
|
|
20
20
|
|
|
21
21
|
export function parseItf8(buffer: Uint8Array, initialOffset: number) {
|
|
22
22
|
let offset = initialOffset
|
|
23
|
-
const countFlags = buffer[offset]
|
|
23
|
+
const countFlags = buffer[offset]!
|
|
24
24
|
let result: number
|
|
25
25
|
if (countFlags < 0x80) {
|
|
26
26
|
result = countFlags
|
|
27
27
|
offset = offset + 1
|
|
28
28
|
} else if (countFlags < 0xc0) {
|
|
29
|
-
result = ((countFlags << 8) | buffer[offset + 1]) & 0x3fff
|
|
29
|
+
result = ((countFlags << 8) | buffer[offset + 1]!) & 0x3fff
|
|
30
30
|
offset = offset + 2
|
|
31
31
|
} else if (countFlags < 0xe0) {
|
|
32
32
|
result =
|
|
33
|
-
((countFlags << 16) | (buffer[offset + 1] << 8) | buffer[offset + 2]) &
|
|
33
|
+
((countFlags << 16) | (buffer[offset + 1]! << 8) | buffer[offset + 2]!) &
|
|
34
34
|
0x1fffff
|
|
35
35
|
offset = offset + 3
|
|
36
36
|
} else if (countFlags < 0xf0) {
|
|
37
37
|
result =
|
|
38
38
|
((countFlags << 24) |
|
|
39
|
-
(buffer[offset + 1] << 16) |
|
|
40
|
-
(buffer[offset + 2] << 8) |
|
|
41
|
-
buffer[offset + 3]) &
|
|
39
|
+
(buffer[offset + 1]! << 16) |
|
|
40
|
+
(buffer[offset + 2]! << 8) |
|
|
41
|
+
buffer[offset + 3]!) &
|
|
42
42
|
0x0fffffff
|
|
43
43
|
offset = offset + 4
|
|
44
44
|
} else {
|
|
45
45
|
result =
|
|
46
46
|
((countFlags & 0x0f) << 28) |
|
|
47
|
-
(buffer[offset + 1] << 20) |
|
|
48
|
-
(buffer[offset + 2] << 12) |
|
|
49
|
-
(buffer[offset + 3] << 4) |
|
|
50
|
-
(buffer[offset + 4] & 0x0f)
|
|
47
|
+
(buffer[offset + 1]! << 20) |
|
|
48
|
+
(buffer[offset + 2]! << 12) |
|
|
49
|
+
(buffer[offset + 3]! << 4) |
|
|
50
|
+
(buffer[offset + 4]! & 0x0f)
|
|
51
51
|
// x=((0xff & 0x0f)<<28) | (0xff<<20) | (0xff<<12) | (0xff<<4) | (0x0f & 0x0f);
|
|
52
52
|
// TODO *val_p = uv < 0x80000000UL ? uv : -((int32_t) (0xffffffffUL - uv)) - 1;
|
|
53
53
|
offset = offset + 5
|
|
@@ -62,56 +62,56 @@ export function parseItf8(buffer: Uint8Array, initialOffset: number) {
|
|
|
62
62
|
|
|
63
63
|
export function parseLtf8(buffer: Buffer, initialOffset: number) {
|
|
64
64
|
let offset = initialOffset
|
|
65
|
-
const countFlags = buffer[offset]
|
|
65
|
+
const countFlags = buffer[offset]!
|
|
66
66
|
let n: number | Long
|
|
67
67
|
if (countFlags < 0x80) {
|
|
68
68
|
n = countFlags
|
|
69
69
|
offset += 1
|
|
70
70
|
} else if (countFlags < 0xc0) {
|
|
71
|
-
n = ((buffer[offset] << 8) | buffer[offset + 1]) & 0x3fff
|
|
71
|
+
n = ((buffer[offset]! << 8) | buffer[offset + 1]!) & 0x3fff
|
|
72
72
|
offset += 2
|
|
73
73
|
} else if (countFlags < 0xe0) {
|
|
74
74
|
n =
|
|
75
|
-
((buffer[offset] << 16) |
|
|
76
|
-
(buffer[offset + 1] << 8) |
|
|
77
|
-
buffer[offset + 2]) &
|
|
75
|
+
((buffer[offset]! << 16) |
|
|
76
|
+
(buffer[offset + 1]! << 8) |
|
|
77
|
+
buffer[offset + 2]!) &
|
|
78
78
|
0x1fffff
|
|
79
79
|
n = ((countFlags & 63) << 16) | buffer.readUInt16LE(offset + 1)
|
|
80
80
|
offset += 3
|
|
81
81
|
} else if (countFlags < 0xf0) {
|
|
82
82
|
n =
|
|
83
|
-
((buffer[offset] << 24) |
|
|
84
|
-
(buffer[offset + 1] << 16) |
|
|
85
|
-
(buffer[offset + 2] << 8) |
|
|
86
|
-
buffer[offset + 3]) &
|
|
83
|
+
((buffer[offset]! << 24) |
|
|
84
|
+
(buffer[offset + 1]! << 16) |
|
|
85
|
+
(buffer[offset + 2]! << 8) |
|
|
86
|
+
buffer[offset + 3]!) &
|
|
87
87
|
0x0fffffff
|
|
88
88
|
offset += 4
|
|
89
89
|
} else if (countFlags < 0xf8) {
|
|
90
90
|
n =
|
|
91
|
-
((buffer[offset] & 15) * 2 ** 32 + (buffer[offset + 1] << 24)) |
|
|
92
|
-
((buffer[offset + 2] << 16) |
|
|
93
|
-
(buffer[offset + 3] << 8) |
|
|
94
|
-
buffer[offset + 4])
|
|
91
|
+
((buffer[offset]! & 15) * 2 ** 32 + (buffer[offset + 1]! << 24)) |
|
|
92
|
+
((buffer[offset + 2]! << 16) |
|
|
93
|
+
(buffer[offset + 3]! << 8) |
|
|
94
|
+
buffer[offset + 4]!)
|
|
95
95
|
// TODO *val_p = uv < 0x80000000UL ? uv : -((int32_t) (0xffffffffUL - uv)) - 1;
|
|
96
96
|
offset += 5
|
|
97
97
|
} else if (countFlags < 0xfc) {
|
|
98
98
|
n =
|
|
99
|
-
((((buffer[offset] & 7) << 8) | buffer[offset + 1]) * 2 ** 32 +
|
|
100
|
-
(buffer[offset + 2] << 24)) |
|
|
101
|
-
((buffer[offset + 3] << 16) |
|
|
102
|
-
(buffer[offset + 4] << 8) |
|
|
103
|
-
buffer[offset + 5])
|
|
99
|
+
((((buffer[offset]! & 7) << 8) | buffer[offset + 1]!) * 2 ** 32 +
|
|
100
|
+
(buffer[offset + 2]! << 24)) |
|
|
101
|
+
((buffer[offset + 3]! << 16) |
|
|
102
|
+
(buffer[offset + 4]! << 8) |
|
|
103
|
+
buffer[offset + 5]!)
|
|
104
104
|
offset += 6
|
|
105
105
|
} else if (countFlags < 0xfe) {
|
|
106
106
|
n =
|
|
107
|
-
((((buffer[offset] & 3) << 16) |
|
|
108
|
-
(buffer[offset + 1] << 8) |
|
|
109
|
-
buffer[offset + 2]) *
|
|
107
|
+
((((buffer[offset]! & 3) << 16) |
|
|
108
|
+
(buffer[offset + 1]! << 8) |
|
|
109
|
+
buffer[offset + 2]!) *
|
|
110
110
|
2 ** 32 +
|
|
111
|
-
(buffer[offset + 3] << 24)) |
|
|
112
|
-
((buffer[offset + 4] << 16) |
|
|
113
|
-
(buffer[offset + 5] << 8) |
|
|
114
|
-
buffer[offset + 6])
|
|
111
|
+
(buffer[offset + 3]! << 24)) |
|
|
112
|
+
((buffer[offset + 4]! << 16) |
|
|
113
|
+
(buffer[offset + 5]! << 8) |
|
|
114
|
+
buffer[offset + 6]!)
|
|
115
115
|
offset += 7
|
|
116
116
|
} else if (countFlags < 0xff) {
|
|
117
117
|
n = Long.fromBytesBE(
|
|
@@ -167,6 +167,7 @@ export function tinyMemoize(_class: any, methodName: any) {
|
|
|
167
167
|
const res = method.call(this)
|
|
168
168
|
this[memoAttrName] = res
|
|
169
169
|
Promise.resolve(res).catch(() => {
|
|
170
|
+
|
|
170
171
|
delete this[memoAttrName]
|
|
171
172
|
})
|
|
172
173
|
}
|
package/src/indexedCramFile.ts
CHANGED
|
@@ -63,9 +63,6 @@ export default class IndexedCramFile {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
this.index = args.index
|
|
66
|
-
if (!this.index.getEntriesForRange) {
|
|
67
|
-
throw new Error('invalid arguments: not an index')
|
|
68
|
-
}
|
|
69
66
|
}
|
|
70
67
|
|
|
71
68
|
/**
|
|
@@ -163,7 +160,7 @@ export default class IndexedCramFile {
|
|
|
163
160
|
.sort((a, b) => a.toString().localeCompare(b.toString()))
|
|
164
161
|
.filter(
|
|
165
162
|
(item, pos, ary) =>
|
|
166
|
-
!pos || item.toString() !== ary[pos - 1]
|
|
163
|
+
!pos || item.toString() !== ary[pos - 1]!.toString(),
|
|
167
164
|
)
|
|
168
165
|
|
|
169
166
|
const mateRecordPromises = []
|
package/src/rans/d04.ts
CHANGED
package/src/rans/d14.ts
CHANGED
package/src/rans/decoding.ts
CHANGED
package/src/rans/frequencies.ts
CHANGED
package/src/rans/index.ts
CHANGED