@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.
Files changed (268) hide show
  1. package/dist/craiIndex.js +70 -87
  2. package/dist/craiIndex.js.map +1 -1
  3. package/dist/cram-bundle.js +1 -1
  4. package/dist/cramFile/codecs/_base.d.ts +1 -1
  5. package/dist/cramFile/codecs/beta.d.ts +2 -2
  6. package/dist/cramFile/codecs/beta.js +1 -1
  7. package/dist/cramFile/codecs/beta.js.map +1 -1
  8. package/dist/cramFile/codecs/byteArrayLength.d.ts +2 -2
  9. package/dist/cramFile/codecs/byteArrayStop.d.ts +4 -4
  10. package/dist/cramFile/codecs/byteArrayStop.js +1 -1
  11. package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
  12. package/dist/cramFile/codecs/external.d.ts +1 -1
  13. package/dist/cramFile/codecs/external.js +1 -1
  14. package/dist/cramFile/codecs/external.js.map +1 -1
  15. package/dist/cramFile/codecs/gamma.d.ts +1 -1
  16. package/dist/cramFile/codecs/gamma.js +1 -1
  17. package/dist/cramFile/codecs/gamma.js.map +1 -1
  18. package/dist/cramFile/codecs/getBits.d.ts +1 -1
  19. package/dist/cramFile/codecs/getBits.js.map +1 -1
  20. package/dist/cramFile/codecs/huffman.d.ts +1 -1
  21. package/dist/cramFile/codecs/huffman.js +1 -1
  22. package/dist/cramFile/codecs/huffman.js.map +1 -1
  23. package/dist/cramFile/codecs/index.d.ts +1 -1
  24. package/dist/cramFile/codecs/index.js +5 -5
  25. package/dist/cramFile/codecs/index.js.map +1 -1
  26. package/dist/cramFile/codecs/subexp.d.ts +2 -2
  27. package/dist/cramFile/codecs/subexp.js +1 -1
  28. package/dist/cramFile/codecs/subexp.js.map +1 -1
  29. package/dist/cramFile/container/compressionScheme.d.ts +2 -2
  30. package/dist/cramFile/container/compressionScheme.js +1 -1
  31. package/dist/cramFile/container/compressionScheme.js.map +1 -1
  32. package/dist/cramFile/container/index.d.ts +1 -2
  33. package/dist/cramFile/container/index.js +62 -79
  34. package/dist/cramFile/container/index.js.map +1 -1
  35. package/dist/cramFile/file.d.ts +9 -13
  36. package/dist/cramFile/file.js +218 -247
  37. package/dist/cramFile/file.js.map +1 -1
  38. package/dist/cramFile/record.js +2 -2
  39. package/dist/cramFile/record.js.map +1 -1
  40. package/dist/cramFile/sectionParsers.d.ts +16 -16
  41. package/dist/cramFile/sectionParsers.js +12 -9
  42. package/dist/cramFile/sectionParsers.js.map +1 -1
  43. package/dist/cramFile/slice/decodeRecord.d.ts +3 -3
  44. package/dist/cramFile/slice/decodeRecord.js +11 -11
  45. package/dist/cramFile/slice/decodeRecord.js.map +1 -1
  46. package/dist/cramFile/slice/index.d.ts +2 -2
  47. package/dist/cramFile/slice/index.js +241 -262
  48. package/dist/cramFile/slice/index.js.map +1 -1
  49. package/dist/cramFile/util.d.ts +4 -2
  50. package/dist/cramFile/util.js +29 -6
  51. package/dist/cramFile/util.js.map +1 -1
  52. package/dist/htscodecs/arith_gen.d.ts +9 -17
  53. package/dist/htscodecs/arith_gen.js +32 -272
  54. package/dist/htscodecs/arith_gen.js.map +1 -1
  55. package/dist/htscodecs/fqzcomp.d.ts +1 -2
  56. package/dist/htscodecs/fqzcomp.js +2 -421
  57. package/dist/htscodecs/fqzcomp.js.map +1 -1
  58. package/dist/htscodecs/index.d.ts +5 -5
  59. package/dist/htscodecs/index.js +10 -10
  60. package/dist/htscodecs/index.js.map +1 -1
  61. package/dist/htscodecs/iostream.d.ts +2 -1
  62. package/dist/htscodecs/iostream.js +3 -2
  63. package/dist/htscodecs/iostream.js.map +1 -1
  64. package/dist/htscodecs/rans.d.ts +1 -2
  65. package/dist/htscodecs/rans.js +3 -270
  66. package/dist/htscodecs/rans.js.map +1 -1
  67. package/dist/htscodecs/rans4x16.d.ts +0 -1
  68. package/dist/htscodecs/rans4x16.js +6 -497
  69. package/dist/htscodecs/rans4x16.js.map +1 -1
  70. package/dist/htscodecs/tok3.js +17 -1
  71. package/dist/htscodecs/tok3.js.map +1 -1
  72. package/dist/index.d.ts +1 -1
  73. package/dist/index.js +2 -2
  74. package/dist/index.js.map +1 -1
  75. package/dist/indexedCramFile.d.ts +4 -4
  76. package/dist/indexedCramFile.js +97 -108
  77. package/dist/indexedCramFile.js.map +1 -1
  78. package/dist/io/index.d.ts +2 -2
  79. package/dist/io/index.js +6 -6
  80. package/dist/io/index.js.map +1 -1
  81. package/dist/rans/constants.d.ts +1 -1
  82. package/dist/rans/constants.js +1 -1
  83. package/dist/rans/constants.js.map +1 -1
  84. package/dist/rans/d04.js.map +1 -1
  85. package/dist/rans/decoding.js.map +1 -1
  86. package/dist/rans/frequencies.js.map +1 -1
  87. package/dist/rans/index.js +5 -5
  88. package/dist/rans/index.js.map +1 -1
  89. package/dist/unzip.d.ts +1 -1
  90. package/dist/unzip.js +5 -3
  91. package/dist/unzip.js.map +1 -1
  92. package/esm/craiIndex.js +10 -12
  93. package/esm/craiIndex.js.map +1 -1
  94. package/esm/cramFile/codecs/_base.d.ts +1 -1
  95. package/esm/cramFile/codecs/beta.d.ts +2 -2
  96. package/esm/cramFile/codecs/beta.js +1 -1
  97. package/esm/cramFile/codecs/beta.js.map +1 -1
  98. package/esm/cramFile/codecs/byteArrayLength.d.ts +2 -2
  99. package/esm/cramFile/codecs/byteArrayStop.d.ts +4 -4
  100. package/esm/cramFile/codecs/byteArrayStop.js +1 -1
  101. package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
  102. package/esm/cramFile/codecs/external.d.ts +1 -1
  103. package/esm/cramFile/codecs/external.js +1 -1
  104. package/esm/cramFile/codecs/external.js.map +1 -1
  105. package/esm/cramFile/codecs/gamma.d.ts +1 -1
  106. package/esm/cramFile/codecs/gamma.js +1 -1
  107. package/esm/cramFile/codecs/gamma.js.map +1 -1
  108. package/esm/cramFile/codecs/getBits.d.ts +1 -1
  109. package/esm/cramFile/codecs/getBits.js.map +1 -1
  110. package/esm/cramFile/codecs/huffman.d.ts +1 -1
  111. package/esm/cramFile/codecs/huffman.js +1 -1
  112. package/esm/cramFile/codecs/huffman.js.map +1 -1
  113. package/esm/cramFile/codecs/index.d.ts +1 -1
  114. package/esm/cramFile/codecs/index.js +5 -5
  115. package/esm/cramFile/codecs/index.js.map +1 -1
  116. package/esm/cramFile/codecs/subexp.d.ts +2 -2
  117. package/esm/cramFile/codecs/subexp.js +1 -1
  118. package/esm/cramFile/codecs/subexp.js.map +1 -1
  119. package/esm/cramFile/container/compressionScheme.d.ts +2 -2
  120. package/esm/cramFile/container/compressionScheme.js +1 -1
  121. package/esm/cramFile/container/compressionScheme.js.map +1 -1
  122. package/esm/cramFile/container/index.d.ts +1 -2
  123. package/esm/cramFile/container/index.js +4 -7
  124. package/esm/cramFile/container/index.js.map +1 -1
  125. package/esm/cramFile/file.d.ts +9 -13
  126. package/esm/cramFile/file.js +47 -52
  127. package/esm/cramFile/file.js.map +1 -1
  128. package/esm/cramFile/record.js +2 -2
  129. package/esm/cramFile/record.js.map +1 -1
  130. package/esm/cramFile/sectionParsers.d.ts +16 -16
  131. package/esm/cramFile/sectionParsers.js +7 -7
  132. package/esm/cramFile/sectionParsers.js.map +1 -1
  133. package/esm/cramFile/slice/decodeRecord.d.ts +3 -3
  134. package/esm/cramFile/slice/decodeRecord.js +11 -11
  135. package/esm/cramFile/slice/decodeRecord.js.map +1 -1
  136. package/esm/cramFile/slice/index.d.ts +2 -2
  137. package/esm/cramFile/slice/index.js +7 -6
  138. package/esm/cramFile/slice/index.js.map +1 -1
  139. package/esm/cramFile/util.d.ts +4 -2
  140. package/esm/cramFile/util.js +19 -2
  141. package/esm/cramFile/util.js.map +1 -1
  142. package/esm/htscodecs/arith_gen.d.ts +9 -17
  143. package/esm/htscodecs/arith_gen.js +32 -272
  144. package/esm/htscodecs/arith_gen.js.map +1 -1
  145. package/esm/htscodecs/fqzcomp.d.ts +1 -2
  146. package/esm/htscodecs/fqzcomp.js +2 -421
  147. package/esm/htscodecs/fqzcomp.js.map +1 -1
  148. package/esm/htscodecs/index.d.ts +5 -5
  149. package/esm/htscodecs/index.js +10 -10
  150. package/esm/htscodecs/index.js.map +1 -1
  151. package/esm/htscodecs/iostream.d.ts +2 -1
  152. package/esm/htscodecs/iostream.js +3 -2
  153. package/esm/htscodecs/iostream.js.map +1 -1
  154. package/esm/htscodecs/rans.d.ts +1 -2
  155. package/esm/htscodecs/rans.js +3 -270
  156. package/esm/htscodecs/rans.js.map +1 -1
  157. package/esm/htscodecs/rans4x16.d.ts +0 -1
  158. package/esm/htscodecs/rans4x16.js +6 -497
  159. package/esm/htscodecs/rans4x16.js.map +1 -1
  160. package/esm/htscodecs/tok3.js +17 -1
  161. package/esm/htscodecs/tok3.js.map +1 -1
  162. package/esm/index.d.ts +1 -1
  163. package/esm/index.js +1 -1
  164. package/esm/index.js.map +1 -1
  165. package/esm/indexedCramFile.d.ts +4 -4
  166. package/esm/indexedCramFile.js +10 -10
  167. package/esm/indexedCramFile.js.map +1 -1
  168. package/esm/io/index.d.ts +2 -2
  169. package/esm/io/index.js +1 -1
  170. package/esm/io/index.js.map +1 -1
  171. package/esm/rans/constants.d.ts +1 -1
  172. package/esm/rans/constants.js +1 -1
  173. package/esm/rans/constants.js.map +1 -1
  174. package/esm/rans/d04.js.map +1 -1
  175. package/esm/rans/decoding.js.map +1 -1
  176. package/esm/rans/frequencies.js.map +1 -1
  177. package/esm/rans/index.js +5 -5
  178. package/esm/rans/index.js.map +1 -1
  179. package/esm/unzip.d.ts +1 -1
  180. package/esm/unzip.js +4 -1
  181. package/esm/unzip.js.map +1 -1
  182. package/package.json +7 -9
  183. package/src/craiIndex.ts +17 -16
  184. package/src/cramFile/codecs/_base.ts +1 -1
  185. package/src/cramFile/codecs/beta.ts +3 -3
  186. package/src/cramFile/codecs/byteArrayLength.ts +1 -1
  187. package/src/cramFile/codecs/byteArrayStop.ts +3 -4
  188. package/src/cramFile/codecs/external.ts +3 -3
  189. package/src/cramFile/codecs/gamma.ts +2 -2
  190. package/src/cramFile/codecs/getBits.ts +1 -1
  191. package/src/cramFile/codecs/huffman.ts +2 -3
  192. package/src/cramFile/codecs/index.ts +7 -8
  193. package/src/cramFile/codecs/subexp.ts +3 -3
  194. package/src/cramFile/container/compressionScheme.ts +3 -3
  195. package/src/cramFile/container/index.ts +7 -10
  196. package/src/cramFile/file.ts +71 -77
  197. package/src/cramFile/record.ts +3 -3
  198. package/src/cramFile/sectionParsers.ts +27 -22
  199. package/src/cramFile/slice/decodeRecord.ts +17 -17
  200. package/src/cramFile/slice/index.ts +8 -9
  201. package/src/cramFile/util.ts +24 -5
  202. package/src/htscodecs/arith_gen.js +33 -296
  203. package/src/htscodecs/fqzcomp.js +2 -476
  204. package/src/htscodecs/index.js +9 -11
  205. package/src/htscodecs/iostream.js +3 -2
  206. package/src/htscodecs/rans.js +3 -315
  207. package/src/htscodecs/rans4x16.js +6 -557
  208. package/src/htscodecs/tok3.js +18 -1
  209. package/src/index.ts +1 -1
  210. package/src/indexedCramFile.ts +6 -5
  211. package/src/io/index.ts +5 -4
  212. package/src/rans/constants.ts +1 -1
  213. package/src/rans/d04.ts +0 -1
  214. package/src/rans/decoding.ts +0 -1
  215. package/src/rans/frequencies.ts +0 -1
  216. package/src/rans/index.ts +5 -7
  217. package/src/unzip.ts +5 -1
  218. package/dist/cramFile/filehandle.d.ts +0 -1
  219. package/dist/cramFile/filehandle.js +0 -3
  220. package/dist/cramFile/filehandle.js.map +0 -1
  221. package/dist/htscodecs/main_arith_gen.d.ts +0 -1
  222. package/dist/htscodecs/main_arith_gen.js +0 -86
  223. package/dist/htscodecs/main_arith_gen.js.map +0 -1
  224. package/dist/htscodecs/main_fqzcomp.d.ts +0 -1
  225. package/dist/htscodecs/main_fqzcomp.js +0 -112
  226. package/dist/htscodecs/main_fqzcomp.js.map +0 -1
  227. package/dist/htscodecs/main_rans.d.ts +0 -1
  228. package/dist/htscodecs/main_rans.js +0 -83
  229. package/dist/htscodecs/main_rans.js.map +0 -1
  230. package/dist/htscodecs/main_rans4x16.d.ts +0 -1
  231. package/dist/htscodecs/main_rans4x16.js +0 -82
  232. package/dist/htscodecs/main_rans4x16.js.map +0 -1
  233. package/dist/htscodecs/main_tok3.d.ts +0 -1
  234. package/dist/htscodecs/main_tok3.js +0 -84
  235. package/dist/htscodecs/main_tok3.js.map +0 -1
  236. package/dist/unzip-pako.d.ts +0 -2
  237. package/dist/unzip-pako.js +0 -9
  238. package/dist/unzip-pako.js.map +0 -1
  239. package/esm/cramFile/filehandle.d.ts +0 -1
  240. package/esm/cramFile/filehandle.js +0 -2
  241. package/esm/cramFile/filehandle.js.map +0 -1
  242. package/esm/htscodecs/main_arith_gen.d.ts +0 -1
  243. package/esm/htscodecs/main_arith_gen.js +0 -86
  244. package/esm/htscodecs/main_arith_gen.js.map +0 -1
  245. package/esm/htscodecs/main_fqzcomp.d.ts +0 -1
  246. package/esm/htscodecs/main_fqzcomp.js +0 -112
  247. package/esm/htscodecs/main_fqzcomp.js.map +0 -1
  248. package/esm/htscodecs/main_rans.d.ts +0 -1
  249. package/esm/htscodecs/main_rans.js +0 -83
  250. package/esm/htscodecs/main_rans.js.map +0 -1
  251. package/esm/htscodecs/main_rans4x16.d.ts +0 -1
  252. package/esm/htscodecs/main_rans4x16.js +0 -82
  253. package/esm/htscodecs/main_rans4x16.js.map +0 -1
  254. package/esm/htscodecs/main_tok3.d.ts +0 -1
  255. package/esm/htscodecs/main_tok3.js +0 -84
  256. package/esm/htscodecs/main_tok3.js.map +0 -1
  257. package/esm/unzip-pako.d.ts +0 -2
  258. package/esm/unzip-pako.js +0 -6
  259. package/esm/unzip-pako.js.map +0 -1
  260. package/src/cramFile/filehandle.ts +0 -1
  261. package/src/htscodecs/Makefile +0 -142
  262. package/src/htscodecs/README.md +0 -64
  263. package/src/htscodecs/main_arith_gen.js +0 -96
  264. package/src/htscodecs/main_fqzcomp.js +0 -113
  265. package/src/htscodecs/main_rans.js +0 -88
  266. package/src/htscodecs/main_rans4x16.js +0 -87
  267. package/src/htscodecs/main_tok3.js +0 -86
  268. 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: (buffer: Buffer, _startOffset = 0) => {
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 = buffer.subarray(offset, offset + 4).toString()
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 = b
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: Buffer, _startOffset = 0) => {
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: Buffer, offset: number) => {
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(buffer: Buffer, stringStart: number, stringEnd: number) {
119
- const str = buffer.toString('utf8', stringStart, stringEnd)
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: Buffer, offset: number) => {
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: Buffer, offset: number) => {
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: Buffer, offset: number) => {
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: Buffer, offset: number) => {
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: Buffer, offset: number) => cramEncodingSub(buffer, offset),
426
+ parser: (buffer: Uint8Array, offset: number) =>
427
+ cramEncodingSub(buffer, offset),
423
428
  }
424
429
  }
425
430
 
426
431
  function cramEncodingSub(
427
- buffer: 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: Buffer, offset: number) => {
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: Buffer, offset: number) => {
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: Buffer, offset: number) => {
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: Buffer, offset: number) => {
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: Buffer, offset: number) => {
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 { Cursors, DataTypeMapping } from '../codecs/_base'
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 += 1) {
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 += 1) {
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 += 1) {
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 += 1) {
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 += 1) {
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 += 1) {
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 += 1) {
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 += 1) {
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 += 1) {
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 += 1) {
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 += 1) {
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 { parseItem, sequenceMD5, tinyMemoize } from '../util'
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 CramRecord from '../record'
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 { CramBufferOverrunError } from '../codecs/getBits'
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
@@ -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: Buffer, initialOffset: number) {
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) | buffer.readUInt16LE(offset + 1)
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: Buffer,
146
- parser: (buffer: Buffer, offset: number) => { offset: number; value: T },
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
+ }