@gmod/cram 3.0.7 → 4.0.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/dist/craiIndex.js +70 -87
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +1 -1
- package/dist/cramFile/codecs/_base.d.ts +1 -1
- package/dist/cramFile/codecs/beta.d.ts +2 -2
- package/dist/cramFile/codecs/beta.js +1 -1
- package/dist/cramFile/codecs/beta.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/dist/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/dist/cramFile/codecs/byteArrayStop.js +1 -1
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/dist/cramFile/codecs/external.d.ts +1 -1
- package/dist/cramFile/codecs/external.js +1 -1
- package/dist/cramFile/codecs/external.js.map +1 -1
- package/dist/cramFile/codecs/gamma.d.ts +1 -1
- package/dist/cramFile/codecs/gamma.js +1 -1
- package/dist/cramFile/codecs/gamma.js.map +1 -1
- package/dist/cramFile/codecs/getBits.d.ts +1 -1
- package/dist/cramFile/codecs/getBits.js.map +1 -1
- package/dist/cramFile/codecs/huffman.d.ts +1 -1
- package/dist/cramFile/codecs/huffman.js +1 -1
- package/dist/cramFile/codecs/huffman.js.map +1 -1
- package/dist/cramFile/codecs/index.d.ts +1 -1
- package/dist/cramFile/codecs/index.js +5 -5
- package/dist/cramFile/codecs/index.js.map +1 -1
- package/dist/cramFile/codecs/subexp.d.ts +2 -2
- package/dist/cramFile/codecs/subexp.js +1 -1
- package/dist/cramFile/codecs/subexp.js.map +1 -1
- package/dist/cramFile/container/compressionScheme.d.ts +2 -2
- package/dist/cramFile/container/compressionScheme.js +1 -1
- package/dist/cramFile/container/compressionScheme.js.map +1 -1
- package/dist/cramFile/container/index.d.ts +1 -2
- package/dist/cramFile/container/index.js +62 -79
- package/dist/cramFile/container/index.js.map +1 -1
- package/dist/cramFile/file.d.ts +9 -13
- package/dist/cramFile/file.js +218 -247
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/record.js +2 -2
- package/dist/cramFile/record.js.map +1 -1
- package/dist/cramFile/sectionParsers.d.ts +16 -16
- package/dist/cramFile/sectionParsers.js +12 -9
- package/dist/cramFile/sectionParsers.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.d.ts +3 -3
- package/dist/cramFile/slice/decodeRecord.js +11 -11
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +2 -2
- package/dist/cramFile/slice/index.js +241 -262
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.d.ts +4 -2
- package/dist/cramFile/util.js +29 -6
- package/dist/cramFile/util.js.map +1 -1
- package/dist/htscodecs/arith_gen.d.ts +9 -17
- package/dist/htscodecs/arith_gen.js +32 -272
- package/dist/htscodecs/arith_gen.js.map +1 -1
- package/dist/htscodecs/fqzcomp.d.ts +1 -2
- package/dist/htscodecs/fqzcomp.js +2 -421
- package/dist/htscodecs/fqzcomp.js.map +1 -1
- package/dist/htscodecs/index.d.ts +5 -5
- package/dist/htscodecs/index.js +10 -10
- package/dist/htscodecs/index.js.map +1 -1
- package/dist/htscodecs/iostream.d.ts +2 -1
- package/dist/htscodecs/iostream.js +3 -2
- package/dist/htscodecs/iostream.js.map +1 -1
- package/dist/htscodecs/rans.d.ts +1 -2
- package/dist/htscodecs/rans.js +3 -270
- package/dist/htscodecs/rans.js.map +1 -1
- package/dist/htscodecs/rans4x16.d.ts +0 -1
- package/dist/htscodecs/rans4x16.js +6 -497
- package/dist/htscodecs/rans4x16.js.map +1 -1
- package/dist/htscodecs/tok3.js +17 -1
- package/dist/htscodecs/tok3.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/indexedCramFile.d.ts +4 -4
- package/dist/indexedCramFile.js +97 -108
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/io/index.d.ts +2 -2
- package/dist/io/index.js +6 -6
- package/dist/io/index.js.map +1 -1
- package/dist/rans/constants.d.ts +1 -1
- package/dist/rans/constants.js +1 -1
- package/dist/rans/constants.js.map +1 -1
- package/dist/rans/d04.js.map +1 -1
- package/dist/rans/decoding.js.map +1 -1
- package/dist/rans/frequencies.js.map +1 -1
- package/dist/rans/index.js +5 -5
- package/dist/rans/index.js.map +1 -1
- package/dist/unzip.d.ts +1 -1
- package/dist/unzip.js +5 -3
- package/dist/unzip.js.map +1 -1
- package/esm/craiIndex.js +10 -12
- package/esm/craiIndex.js.map +1 -1
- package/esm/cramFile/codecs/_base.d.ts +1 -1
- package/esm/cramFile/codecs/beta.d.ts +2 -2
- package/esm/cramFile/codecs/beta.js +1 -1
- package/esm/cramFile/codecs/beta.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayLength.d.ts +2 -2
- package/esm/cramFile/codecs/byteArrayStop.d.ts +4 -4
- package/esm/cramFile/codecs/byteArrayStop.js +1 -1
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/esm/cramFile/codecs/external.d.ts +1 -1
- package/esm/cramFile/codecs/external.js +1 -1
- package/esm/cramFile/codecs/external.js.map +1 -1
- package/esm/cramFile/codecs/gamma.d.ts +1 -1
- package/esm/cramFile/codecs/gamma.js +1 -1
- package/esm/cramFile/codecs/gamma.js.map +1 -1
- package/esm/cramFile/codecs/getBits.d.ts +1 -1
- package/esm/cramFile/codecs/getBits.js.map +1 -1
- package/esm/cramFile/codecs/huffman.d.ts +1 -1
- package/esm/cramFile/codecs/huffman.js +1 -1
- package/esm/cramFile/codecs/huffman.js.map +1 -1
- package/esm/cramFile/codecs/index.d.ts +1 -1
- package/esm/cramFile/codecs/index.js +5 -5
- package/esm/cramFile/codecs/index.js.map +1 -1
- package/esm/cramFile/codecs/subexp.d.ts +2 -2
- package/esm/cramFile/codecs/subexp.js +1 -1
- package/esm/cramFile/codecs/subexp.js.map +1 -1
- package/esm/cramFile/container/compressionScheme.d.ts +2 -2
- package/esm/cramFile/container/compressionScheme.js +1 -1
- package/esm/cramFile/container/compressionScheme.js.map +1 -1
- package/esm/cramFile/container/index.d.ts +1 -2
- package/esm/cramFile/container/index.js +4 -7
- package/esm/cramFile/container/index.js.map +1 -1
- package/esm/cramFile/file.d.ts +9 -13
- package/esm/cramFile/file.js +47 -52
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/record.js +2 -2
- package/esm/cramFile/record.js.map +1 -1
- package/esm/cramFile/sectionParsers.d.ts +16 -16
- package/esm/cramFile/sectionParsers.js +7 -7
- package/esm/cramFile/sectionParsers.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.d.ts +3 -3
- package/esm/cramFile/slice/decodeRecord.js +11 -11
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +2 -2
- package/esm/cramFile/slice/index.js +7 -6
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.d.ts +4 -2
- package/esm/cramFile/util.js +19 -2
- package/esm/cramFile/util.js.map +1 -1
- package/esm/htscodecs/arith_gen.d.ts +9 -17
- package/esm/htscodecs/arith_gen.js +32 -272
- package/esm/htscodecs/arith_gen.js.map +1 -1
- package/esm/htscodecs/fqzcomp.d.ts +1 -2
- package/esm/htscodecs/fqzcomp.js +2 -421
- package/esm/htscodecs/fqzcomp.js.map +1 -1
- package/esm/htscodecs/index.d.ts +5 -5
- package/esm/htscodecs/index.js +10 -10
- package/esm/htscodecs/index.js.map +1 -1
- package/esm/htscodecs/iostream.d.ts +2 -1
- package/esm/htscodecs/iostream.js +3 -2
- package/esm/htscodecs/iostream.js.map +1 -1
- package/esm/htscodecs/rans.d.ts +1 -2
- package/esm/htscodecs/rans.js +3 -270
- package/esm/htscodecs/rans.js.map +1 -1
- package/esm/htscodecs/rans4x16.d.ts +0 -1
- package/esm/htscodecs/rans4x16.js +6 -497
- package/esm/htscodecs/rans4x16.js.map +1 -1
- package/esm/htscodecs/tok3.js +17 -1
- package/esm/htscodecs/tok3.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/index.js.map +1 -1
- package/esm/indexedCramFile.d.ts +4 -4
- package/esm/indexedCramFile.js +10 -10
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/io/index.d.ts +2 -2
- package/esm/io/index.js +1 -1
- package/esm/io/index.js.map +1 -1
- package/esm/rans/constants.d.ts +1 -1
- package/esm/rans/constants.js +1 -1
- package/esm/rans/constants.js.map +1 -1
- package/esm/rans/d04.js.map +1 -1
- package/esm/rans/decoding.js.map +1 -1
- package/esm/rans/frequencies.js.map +1 -1
- package/esm/rans/index.js +5 -5
- package/esm/rans/index.js.map +1 -1
- package/esm/unzip.d.ts +1 -1
- package/esm/unzip.js +4 -1
- package/esm/unzip.js.map +1 -1
- package/package.json +7 -9
- package/src/craiIndex.ts +17 -16
- package/src/cramFile/codecs/_base.ts +1 -1
- package/src/cramFile/codecs/beta.ts +3 -3
- package/src/cramFile/codecs/byteArrayLength.ts +1 -1
- package/src/cramFile/codecs/byteArrayStop.ts +3 -4
- package/src/cramFile/codecs/external.ts +3 -3
- package/src/cramFile/codecs/gamma.ts +2 -2
- package/src/cramFile/codecs/getBits.ts +1 -1
- package/src/cramFile/codecs/huffman.ts +2 -3
- package/src/cramFile/codecs/index.ts +7 -8
- package/src/cramFile/codecs/subexp.ts +3 -3
- package/src/cramFile/container/compressionScheme.ts +3 -3
- package/src/cramFile/container/index.ts +7 -10
- package/src/cramFile/file.ts +71 -77
- package/src/cramFile/record.ts +3 -3
- package/src/cramFile/sectionParsers.ts +27 -22
- package/src/cramFile/slice/decodeRecord.ts +17 -17
- package/src/cramFile/slice/index.ts +8 -9
- package/src/cramFile/util.ts +24 -5
- package/src/htscodecs/arith_gen.js +33 -296
- package/src/htscodecs/fqzcomp.js +2 -476
- package/src/htscodecs/index.js +9 -11
- package/src/htscodecs/iostream.js +3 -2
- package/src/htscodecs/rans.js +3 -315
- package/src/htscodecs/rans4x16.js +6 -557
- package/src/htscodecs/tok3.js +18 -1
- package/src/index.ts +1 -1
- package/src/indexedCramFile.ts +6 -5
- package/src/io/index.ts +5 -4
- package/src/rans/constants.ts +1 -1
- package/src/rans/d04.ts +0 -1
- package/src/rans/decoding.ts +0 -1
- package/src/rans/frequencies.ts +0 -1
- package/src/rans/index.ts +5 -7
- package/src/unzip.ts +5 -1
- package/dist/cramFile/filehandle.d.ts +0 -1
- package/dist/cramFile/filehandle.js +0 -3
- package/dist/cramFile/filehandle.js.map +0 -1
- package/dist/htscodecs/main_arith_gen.d.ts +0 -1
- package/dist/htscodecs/main_arith_gen.js +0 -86
- package/dist/htscodecs/main_arith_gen.js.map +0 -1
- package/dist/htscodecs/main_fqzcomp.d.ts +0 -1
- package/dist/htscodecs/main_fqzcomp.js +0 -112
- package/dist/htscodecs/main_fqzcomp.js.map +0 -1
- package/dist/htscodecs/main_rans.d.ts +0 -1
- package/dist/htscodecs/main_rans.js +0 -83
- package/dist/htscodecs/main_rans.js.map +0 -1
- package/dist/htscodecs/main_rans4x16.d.ts +0 -1
- package/dist/htscodecs/main_rans4x16.js +0 -82
- package/dist/htscodecs/main_rans4x16.js.map +0 -1
- package/dist/htscodecs/main_tok3.d.ts +0 -1
- package/dist/htscodecs/main_tok3.js +0 -84
- package/dist/htscodecs/main_tok3.js.map +0 -1
- package/dist/unzip-pako.d.ts +0 -2
- package/dist/unzip-pako.js +0 -9
- package/dist/unzip-pako.js.map +0 -1
- package/esm/cramFile/filehandle.d.ts +0 -1
- package/esm/cramFile/filehandle.js +0 -2
- package/esm/cramFile/filehandle.js.map +0 -1
- package/esm/htscodecs/main_arith_gen.d.ts +0 -1
- package/esm/htscodecs/main_arith_gen.js +0 -86
- package/esm/htscodecs/main_arith_gen.js.map +0 -1
- package/esm/htscodecs/main_fqzcomp.d.ts +0 -1
- package/esm/htscodecs/main_fqzcomp.js +0 -112
- package/esm/htscodecs/main_fqzcomp.js.map +0 -1
- package/esm/htscodecs/main_rans.d.ts +0 -1
- package/esm/htscodecs/main_rans.js +0 -83
- package/esm/htscodecs/main_rans.js.map +0 -1
- package/esm/htscodecs/main_rans4x16.d.ts +0 -1
- package/esm/htscodecs/main_rans4x16.js +0 -82
- package/esm/htscodecs/main_rans4x16.js.map +0 -1
- package/esm/htscodecs/main_tok3.d.ts +0 -1
- package/esm/htscodecs/main_tok3.js +0 -84
- package/esm/htscodecs/main_tok3.js.map +0 -1
- package/esm/unzip-pako.d.ts +0 -2
- package/esm/unzip-pako.js +0 -6
- package/esm/unzip-pako.js.map +0 -1
- package/src/cramFile/filehandle.ts +0 -1
- package/src/htscodecs/Makefile +0 -142
- package/src/htscodecs/README.md +0 -64
- package/src/htscodecs/main_arith_gen.js +0 -96
- package/src/htscodecs/main_fqzcomp.js +0 -113
- package/src/htscodecs/main_rans.js +0 -88
- package/src/htscodecs/main_rans4x16.js +0 -87
- package/src/htscodecs/main_tok3.js +0 -86
- package/src/unzip-pako.ts +0 -6
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import { TupleOf } from '../typescript'
|
|
2
|
-
import { parseItf8, parseLtf8 } from './util'
|
|
3
2
|
import { DataSeriesEncodingMap } from './codecs/dataSeriesTypes'
|
|
4
3
|
import { CramEncoding } from './encoding'
|
|
4
|
+
import { parseItf8, parseLtf8 } from './util'
|
|
5
5
|
|
|
6
6
|
export function cramFileDefinition() {
|
|
7
7
|
return {
|
|
8
|
-
parser: (
|
|
9
|
-
const b = buffer
|
|
8
|
+
parser: (b: Uint8Array, _startOffset = 0) => {
|
|
10
9
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length)
|
|
10
|
+
const decoder = new TextDecoder('utf8')
|
|
11
11
|
let offset = 0
|
|
12
|
-
const magic =
|
|
12
|
+
const magic = decoder.decode(b.subarray(offset, offset + 4))
|
|
13
13
|
offset += 4
|
|
14
14
|
const majorVersion = dataView.getUint8(offset)
|
|
15
15
|
offset += 1
|
|
16
16
|
const minorVersion = dataView.getUint8(offset)
|
|
17
17
|
offset += 1
|
|
18
|
-
const fileId =
|
|
19
|
-
.subarray(offset, offset + 20)
|
|
20
|
-
.toString()
|
|
18
|
+
const fileId = decoder
|
|
19
|
+
.decode(b.subarray(offset, offset + 20))
|
|
21
20
|
.replaceAll('\0', '')
|
|
22
21
|
offset += 20
|
|
23
22
|
return {
|
|
@@ -34,7 +33,7 @@ export function cramFileDefinition() {
|
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
35
|
export function cramBlockHeader() {
|
|
37
|
-
const parser = (buffer:
|
|
36
|
+
const parser = (buffer: Uint8Array, _startOffset = 0) => {
|
|
38
37
|
const b = buffer
|
|
39
38
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length)
|
|
40
39
|
let offset = 0
|
|
@@ -97,7 +96,7 @@ export function cramBlockHeader() {
|
|
|
97
96
|
|
|
98
97
|
export function cramBlockCrc32() {
|
|
99
98
|
return {
|
|
100
|
-
parser: (buffer:
|
|
99
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
101
100
|
const b = buffer
|
|
102
101
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length)
|
|
103
102
|
const crc32 = dataView.getUint32(offset, true)
|
|
@@ -115,8 +114,13 @@ export function cramBlockCrc32() {
|
|
|
115
114
|
|
|
116
115
|
export type CramTagDictionary = string[][]
|
|
117
116
|
|
|
118
|
-
function makeTagSet(
|
|
119
|
-
|
|
117
|
+
function makeTagSet(
|
|
118
|
+
buffer: Uint8Array,
|
|
119
|
+
stringStart: number,
|
|
120
|
+
stringEnd: number,
|
|
121
|
+
) {
|
|
122
|
+
const decoder = new TextDecoder('utf8')
|
|
123
|
+
const str = decoder.decode(buffer.subarray(stringStart, stringEnd))
|
|
120
124
|
const tags = []
|
|
121
125
|
for (let i = 0; i < str.length; i += 3) {
|
|
122
126
|
tags.push(str.slice(i, i + 3))
|
|
@@ -126,7 +130,7 @@ function makeTagSet(buffer: Buffer, stringStart: number, stringEnd: number) {
|
|
|
126
130
|
|
|
127
131
|
export function cramTagDictionary() {
|
|
128
132
|
return {
|
|
129
|
-
parser: (buffer:
|
|
133
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
130
134
|
const [size, newOffset1] = parseItf8(buffer, offset)
|
|
131
135
|
offset += newOffset1
|
|
132
136
|
const subbuf = buffer.subarray(offset, offset + size)
|
|
@@ -169,7 +173,7 @@ export interface CramPreservationMap {
|
|
|
169
173
|
|
|
170
174
|
export function cramPreservationMap() {
|
|
171
175
|
return {
|
|
172
|
-
parser: (buffer:
|
|
176
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
173
177
|
const b = buffer
|
|
174
178
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length)
|
|
175
179
|
const [mapSize, newOffset1] = parseItf8(buffer, offset)
|
|
@@ -284,7 +288,7 @@ function cramUnmappedSliceHeader(majorVersion: number) {
|
|
|
284
288
|
maxLength += 5 * 2
|
|
285
289
|
maxLength += 16
|
|
286
290
|
|
|
287
|
-
const parser = (buffer:
|
|
291
|
+
const parser = (buffer: Uint8Array, offset: number) => {
|
|
288
292
|
const [numRecords, newOffset1] = parseItf8(buffer, offset)
|
|
289
293
|
offset += newOffset1
|
|
290
294
|
let recordCounter = 0
|
|
@@ -348,7 +352,7 @@ function cramMappedSliceHeader(majorVersion: number) {
|
|
|
348
352
|
maxLength += 16 // MD5
|
|
349
353
|
|
|
350
354
|
return {
|
|
351
|
-
parser: (buffer:
|
|
355
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
352
356
|
// L0
|
|
353
357
|
const [refSeqId, newOffset1] = parseItf8(buffer, offset)
|
|
354
358
|
offset += newOffset1
|
|
@@ -419,12 +423,13 @@ function cramMappedSliceHeader(majorVersion: number) {
|
|
|
419
423
|
|
|
420
424
|
function cramEncoding() {
|
|
421
425
|
return {
|
|
422
|
-
parser: (buffer:
|
|
426
|
+
parser: (buffer: Uint8Array, offset: number) =>
|
|
427
|
+
cramEncodingSub(buffer, offset),
|
|
423
428
|
}
|
|
424
429
|
}
|
|
425
430
|
|
|
426
431
|
function cramEncodingSub(
|
|
427
|
-
buffer:
|
|
432
|
+
buffer: Uint8Array,
|
|
428
433
|
offset: number,
|
|
429
434
|
): { value: Value; offset: number } {
|
|
430
435
|
const b = buffer
|
|
@@ -542,7 +547,7 @@ function cramEncodingSub(
|
|
|
542
547
|
|
|
543
548
|
function cramDataSeriesEncodingMap() {
|
|
544
549
|
return {
|
|
545
|
-
parser: (buffer:
|
|
550
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
546
551
|
const [mapSize, newOffset1] = parseItf8(buffer, offset)
|
|
547
552
|
offset += newOffset1
|
|
548
553
|
const [mapCount, newOffset2] = parseItf8(buffer, offset)
|
|
@@ -572,7 +577,7 @@ function cramDataSeriesEncodingMap() {
|
|
|
572
577
|
|
|
573
578
|
function cramTagEncodingMap() {
|
|
574
579
|
return {
|
|
575
|
-
parser: (buffer:
|
|
580
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
576
581
|
const [mapSize, newOffset1] = parseItf8(buffer, offset)
|
|
577
582
|
offset += newOffset1
|
|
578
583
|
const [mapCount, newOffset2] = parseItf8(buffer, offset)
|
|
@@ -604,7 +609,7 @@ function cramTagEncodingMap() {
|
|
|
604
609
|
|
|
605
610
|
function cramCompressionHeader() {
|
|
606
611
|
return {
|
|
607
|
-
parser: (buffer:
|
|
612
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
608
613
|
// TODO: if we want to support CRAM v1, we will need to refactor
|
|
609
614
|
// compression header into 2 parts to parse the landmarks, like the
|
|
610
615
|
// container header
|
|
@@ -644,7 +649,7 @@ function cramContainerHeader1(majorVersion: number) {
|
|
|
644
649
|
maxLength += 5 + 5
|
|
645
650
|
return {
|
|
646
651
|
maxLength,
|
|
647
|
-
parser: (buffer:
|
|
652
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
648
653
|
const b = buffer
|
|
649
654
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length)
|
|
650
655
|
// byte size of the container data (blocks)
|
|
@@ -704,7 +709,7 @@ function cramContainerHeader1(majorVersion: number) {
|
|
|
704
709
|
|
|
705
710
|
function cramContainerHeader2(majorVersion: number) {
|
|
706
711
|
return {
|
|
707
|
-
parser: (buffer:
|
|
712
|
+
parser: (buffer: Uint8Array, offset: number) => {
|
|
708
713
|
const b = buffer
|
|
709
714
|
const dataView = new DataView(b.buffer, b.byteOffset, b.length)
|
|
710
715
|
const [numLandmarks, newOffset1] = parseItf8(buffer, offset)
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { CramMalformedError } from '../../errors'
|
|
2
|
+
import { Cursors, DataTypeMapping } from '../codecs/_base'
|
|
3
|
+
import { DataSeriesEncodingKey } from '../codecs/dataSeriesTypes'
|
|
4
|
+
import CramContainerCompressionScheme, {
|
|
5
|
+
DataSeriesTypes,
|
|
6
|
+
} from '../container/compressionScheme'
|
|
2
7
|
import {
|
|
3
8
|
BamFlagsDecoder,
|
|
4
9
|
CramFlagsDecoder,
|
|
@@ -6,13 +11,8 @@ import {
|
|
|
6
11
|
ReadFeature,
|
|
7
12
|
} from '../record'
|
|
8
13
|
import CramSlice, { SliceHeader } from './index'
|
|
9
|
-
import { isMappedSliceHeader } from '../sectionParsers'
|
|
10
|
-
import CramContainerCompressionScheme, {
|
|
11
|
-
DataSeriesTypes,
|
|
12
|
-
} from '../container/compressionScheme'
|
|
13
14
|
import { CramFileBlock } from '../file'
|
|
14
|
-
import {
|
|
15
|
-
import { DataSeriesEncodingKey } from '../codecs/dataSeriesTypes'
|
|
15
|
+
import { isMappedSliceHeader } from '../sectionParsers'
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* given a Buffer, read a string up to the first null character
|
|
@@ -42,37 +42,37 @@ function parseTagValueArray(buffer: Uint8Array) {
|
|
|
42
42
|
|
|
43
43
|
if (arrayType === 'c') {
|
|
44
44
|
const arr = new Int8Array(buffer.buffer)
|
|
45
|
-
for (let i = 0; i < length; i
|
|
45
|
+
for (let i = 0; i < length; i++) {
|
|
46
46
|
array[i] = arr[i]!
|
|
47
47
|
}
|
|
48
48
|
} else if (arrayType === 'C') {
|
|
49
49
|
const arr = new Uint8Array(buffer.buffer)
|
|
50
|
-
for (let i = 0; i < length; i
|
|
50
|
+
for (let i = 0; i < length; i++) {
|
|
51
51
|
array[i] = arr[i]!
|
|
52
52
|
}
|
|
53
53
|
} else if (arrayType === 's') {
|
|
54
54
|
const arr = new Int16Array(buffer.buffer)
|
|
55
|
-
for (let i = 0; i < length; i
|
|
55
|
+
for (let i = 0; i < length; i++) {
|
|
56
56
|
array[i] = arr[i]!
|
|
57
57
|
}
|
|
58
58
|
} else if (arrayType === 'S') {
|
|
59
59
|
const arr = new Uint16Array(buffer.buffer)
|
|
60
|
-
for (let i = 0; i < length; i
|
|
60
|
+
for (let i = 0; i < length; i++) {
|
|
61
61
|
array[i] = arr[i]!
|
|
62
62
|
}
|
|
63
63
|
} else if (arrayType === 'i') {
|
|
64
64
|
const arr = new Int32Array(buffer.buffer)
|
|
65
|
-
for (let i = 0; i < length; i
|
|
65
|
+
for (let i = 0; i < length; i++) {
|
|
66
66
|
array[i] = arr[i]!
|
|
67
67
|
}
|
|
68
68
|
} else if (arrayType === 'I') {
|
|
69
69
|
const arr = new Uint32Array(buffer.buffer)
|
|
70
|
-
for (let i = 0; i < length; i
|
|
70
|
+
for (let i = 0; i < length; i++) {
|
|
71
71
|
array[i] = arr[i]!
|
|
72
72
|
}
|
|
73
73
|
} else if (arrayType === 'f') {
|
|
74
74
|
const arr = new Float32Array(buffer.buffer)
|
|
75
|
-
for (let i = 0; i < length; i
|
|
75
|
+
for (let i = 0; i < length; i++) {
|
|
76
76
|
array[i] = arr[i]!
|
|
77
77
|
}
|
|
78
78
|
} else {
|
|
@@ -158,7 +158,7 @@ function decodeReadFeatures(
|
|
|
158
158
|
return data
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
for (let i = 0; i < readFeatureCount; i
|
|
161
|
+
for (let i = 0; i < readFeatureCount; i++) {
|
|
162
162
|
const code = String.fromCharCode(decodeDataSeries('FC'))
|
|
163
163
|
|
|
164
164
|
const readPosDelta = decodeDataSeries('FP')
|
|
@@ -315,7 +315,7 @@ export default function decodeRecord(
|
|
|
315
315
|
// TN = tag names
|
|
316
316
|
const TN = compressionScheme.getTagNames(TLindex)!
|
|
317
317
|
const ntags = TN.length
|
|
318
|
-
for (let i = 0; i < ntags; i
|
|
318
|
+
for (let i = 0; i < ntags; i++) {
|
|
319
319
|
const tagId = TN[i]!
|
|
320
320
|
const tagName = tagId.slice(0, 2)
|
|
321
321
|
const tagType = tagId.slice(2, 3)
|
|
@@ -381,14 +381,14 @@ export default function decodeRecord(
|
|
|
381
381
|
qualityScores = null
|
|
382
382
|
} else {
|
|
383
383
|
const bases = new Array(readLength) as number[]
|
|
384
|
-
for (let i = 0; i < bases.length; i
|
|
384
|
+
for (let i = 0; i < bases.length; i++) {
|
|
385
385
|
bases[i] = decodeDataSeries('BA')
|
|
386
386
|
}
|
|
387
387
|
readBases = String.fromCharCode(...bases)
|
|
388
388
|
|
|
389
389
|
if (CramFlagsDecoder.isPreservingQualityScores(cramFlags)) {
|
|
390
390
|
qualityScores = new Array(readLength)
|
|
391
|
-
for (let i = 0; i < bases.length; i
|
|
391
|
+
for (let i = 0; i < bases.length; i++) {
|
|
392
392
|
qualityScores[i] = decodeDataSeries('QS')
|
|
393
393
|
}
|
|
394
394
|
}
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { CramArgumentError, CramMalformedError } from '../../errors'
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { Cursors, DataTypeMapping } from '../codecs/_base'
|
|
3
|
+
import { CramBufferOverrunError } from '../codecs/getBits'
|
|
4
4
|
import Constants from '../constants'
|
|
5
5
|
import decodeRecord, { DataSeriesDecoder } from './decodeRecord'
|
|
6
|
-
import
|
|
6
|
+
import { DataSeriesEncodingKey } from '../codecs/dataSeriesTypes'
|
|
7
7
|
import CramContainer from '../container'
|
|
8
|
+
import { DataSeriesTypes } from '../container/compressionScheme'
|
|
8
9
|
import CramFile, { CramFileBlock } from '../file'
|
|
10
|
+
import CramRecord from '../record'
|
|
9
11
|
import {
|
|
10
|
-
getSectionParsers,
|
|
11
|
-
isMappedSliceHeader,
|
|
12
12
|
MappedSliceHeader,
|
|
13
13
|
UnmappedSliceHeader,
|
|
14
|
+
getSectionParsers,
|
|
15
|
+
isMappedSliceHeader,
|
|
14
16
|
} from '../sectionParsers'
|
|
15
|
-
import {
|
|
16
|
-
import { Cursors, DataTypeMapping } from '../codecs/_base'
|
|
17
|
-
import { DataSeriesEncodingKey } from '../codecs/dataSeriesTypes'
|
|
18
|
-
import { DataSeriesTypes } from '../container/compressionScheme'
|
|
17
|
+
import { parseItem, sequenceMD5, tinyMemoize } from '../util'
|
|
19
18
|
|
|
20
19
|
export type SliceHeader = CramFileBlock & {
|
|
21
20
|
parsedContent: MappedSliceHeader | UnmappedSliceHeader
|
package/src/cramFile/util.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import md5 from 'md5'
|
|
2
1
|
import Long from 'long'
|
|
2
|
+
import md5 from 'md5'
|
|
3
|
+
|
|
3
4
|
import { CramBufferOverrunError } from './codecs/getBits'
|
|
4
5
|
|
|
5
6
|
export function itf8Size(v: number) {
|
|
@@ -60,7 +61,8 @@ export function parseItf8(buffer: Uint8Array, initialOffset: number) {
|
|
|
60
61
|
return [result, offset - initialOffset] as const
|
|
61
62
|
}
|
|
62
63
|
|
|
63
|
-
export function parseLtf8(buffer:
|
|
64
|
+
export function parseLtf8(buffer: Uint8Array, initialOffset: number) {
|
|
65
|
+
const dataView = new DataView(buffer.buffer)
|
|
64
66
|
let offset = initialOffset
|
|
65
67
|
const countFlags = buffer[offset]!
|
|
66
68
|
let n: number | Long
|
|
@@ -76,7 +78,7 @@ export function parseLtf8(buffer: Buffer, initialOffset: number) {
|
|
|
76
78
|
(buffer[offset + 1]! << 8) |
|
|
77
79
|
buffer[offset + 2]!) &
|
|
78
80
|
0x1fffff
|
|
79
|
-
n = ((countFlags & 63) << 16) |
|
|
81
|
+
n = ((countFlags & 63) << 16) | dataView.getUint16(offset + 1, true)
|
|
80
82
|
offset += 3
|
|
81
83
|
} else if (countFlags < 0xf0) {
|
|
82
84
|
n =
|
|
@@ -142,8 +144,8 @@ export function parseLtf8(buffer: Buffer, initialOffset: number) {
|
|
|
142
144
|
}
|
|
143
145
|
|
|
144
146
|
export function parseItem<T>(
|
|
145
|
-
buffer:
|
|
146
|
-
parser: (buffer:
|
|
147
|
+
buffer: Uint8Array,
|
|
148
|
+
parser: (buffer: Uint8Array, offset: number) => { offset: number; value: T },
|
|
147
149
|
startBufferPosition = 0,
|
|
148
150
|
startFilePosition = 0,
|
|
149
151
|
) {
|
|
@@ -177,3 +179,20 @@ export function tinyMemoize(_class: any, methodName: any) {
|
|
|
177
179
|
export function sequenceMD5(seq: string) {
|
|
178
180
|
return md5(seq.toUpperCase().replaceAll(/[^\u0021-\u007e]/g, ''))
|
|
179
181
|
}
|
|
182
|
+
|
|
183
|
+
export function sum(array: Uint8Array[]) {
|
|
184
|
+
let sum = 0
|
|
185
|
+
for (const entry of array) {
|
|
186
|
+
sum += entry.length
|
|
187
|
+
}
|
|
188
|
+
return sum
|
|
189
|
+
}
|
|
190
|
+
export function concatUint8Array(args: Uint8Array[]) {
|
|
191
|
+
const mergedArray = new Uint8Array(sum(args))
|
|
192
|
+
let offset = 0
|
|
193
|
+
for (const entry of args) {
|
|
194
|
+
mergedArray.set(entry, offset)
|
|
195
|
+
offset += entry.length
|
|
196
|
+
}
|
|
197
|
+
return mergedArray
|
|
198
|
+
}
|