@gmod/cram 1.5.9 → 1.6.2

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 (258) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +182 -172
  3. package/dist/craiIndex.d.ts +37 -0
  4. package/dist/craiIndex.js +196 -301
  5. package/dist/craiIndex.js.map +1 -0
  6. package/dist/cram-bundle.js +6 -15
  7. package/dist/cramFile/codecs/_base.d.ts +6 -0
  8. package/dist/cramFile/codecs/_base.js +44 -53
  9. package/dist/cramFile/codecs/_base.js.map +1 -0
  10. package/dist/cramFile/codecs/beta.d.ts +4 -0
  11. package/dist/cramFile/codecs/beta.js +38 -48
  12. package/dist/cramFile/codecs/beta.js.map +1 -0
  13. package/dist/cramFile/codecs/byteArrayLength.d.ts +8 -0
  14. package/dist/cramFile/codecs/byteArrayLength.js +58 -78
  15. package/dist/cramFile/codecs/byteArrayLength.js.map +1 -0
  16. package/dist/cramFile/codecs/byteArrayStop.d.ts +6 -0
  17. package/dist/cramFile/codecs/byteArrayStop.js +62 -76
  18. package/dist/cramFile/codecs/byteArrayStop.js.map +1 -0
  19. package/dist/cramFile/codecs/external.d.ts +7 -0
  20. package/dist/cramFile/codecs/external.js +63 -81
  21. package/dist/cramFile/codecs/external.js.map +1 -0
  22. package/dist/cramFile/codecs/gamma.d.ts +4 -0
  23. package/dist/cramFile/codecs/gamma.js +43 -56
  24. package/dist/cramFile/codecs/gamma.js.map +1 -0
  25. package/dist/cramFile/codecs/huffman.d.ts +17 -0
  26. package/dist/cramFile/codecs/huffman.js +126 -199
  27. package/dist/cramFile/codecs/huffman.js.map +1 -0
  28. package/dist/cramFile/codecs/index.d.ts +2 -0
  29. package/dist/cramFile/codecs/index.js +31 -38
  30. package/dist/cramFile/codecs/index.js.map +1 -0
  31. package/dist/cramFile/codecs/subexp.d.ts +4 -0
  32. package/dist/cramFile/codecs/subexp.js +51 -64
  33. package/dist/cramFile/codecs/subexp.js.map +1 -0
  34. package/dist/cramFile/constants.d.ts +36 -0
  35. package/dist/cramFile/constants.js +52 -50
  36. package/dist/cramFile/constants.js.map +1 -0
  37. package/dist/cramFile/container/compressionScheme.d.ts +23 -0
  38. package/dist/cramFile/container/compressionScheme.js +115 -153
  39. package/dist/cramFile/container/compressionScheme.js.map +1 -0
  40. package/dist/cramFile/container/index.d.ts +13 -0
  41. package/dist/cramFile/container/index.js +169 -283
  42. package/dist/cramFile/container/index.js.map +1 -0
  43. package/dist/cramFile/file.d.ts +63 -0
  44. package/dist/cramFile/file.js +440 -766
  45. package/dist/cramFile/file.js.map +1 -0
  46. package/dist/cramFile/index.d.ts +2 -0
  47. package/dist/cramFile/index.js +7 -4
  48. package/dist/cramFile/index.js.map +1 -0
  49. package/dist/cramFile/record.d.ts +79 -0
  50. package/dist/cramFile/record.js +253 -308
  51. package/dist/cramFile/record.js.map +1 -0
  52. package/dist/cramFile/sectionParsers.d.ts +18 -0
  53. package/dist/cramFile/sectionParsers.js +324 -362
  54. package/dist/cramFile/sectionParsers.js.map +1 -0
  55. package/dist/cramFile/slice/decodeRecord.d.ts +2 -0
  56. package/dist/cramFile/slice/decodeRecord.js +278 -298
  57. package/dist/cramFile/slice/decodeRecord.js.map +1 -0
  58. package/dist/cramFile/slice/index.d.ts +20 -0
  59. package/dist/cramFile/slice/index.js +488 -789
  60. package/dist/cramFile/slice/index.js.map +1 -0
  61. package/dist/cramFile/util.d.ts +5 -0
  62. package/dist/cramFile/util.js +158 -144
  63. package/dist/cramFile/util.js.map +1 -0
  64. package/dist/errors.d.ts +23 -0
  65. package/dist/errors.js +66 -103
  66. package/dist/errors.js.map +1 -0
  67. package/dist/index.d.ts +4 -0
  68. package/dist/index.js +12 -12
  69. package/dist/index.js.map +1 -0
  70. package/dist/indexedCramFile.d.ts +39 -0
  71. package/dist/indexedCramFile.js +213 -315
  72. package/dist/indexedCramFile.js.map +1 -0
  73. package/dist/io/bufferCache.d.ts +12 -0
  74. package/dist/io/bufferCache.js +108 -128
  75. package/dist/io/bufferCache.js.map +1 -0
  76. package/dist/io/index.d.ts +5 -0
  77. package/dist/io/index.js +29 -27
  78. package/dist/io/index.js.map +1 -0
  79. package/dist/io/localFile.d.ts +10 -0
  80. package/dist/io/localFile.js +105 -162
  81. package/dist/io/localFile.js.map +1 -0
  82. package/dist/io/remoteFile.d.ts +16 -0
  83. package/dist/io/remoteFile.js +137 -206
  84. package/dist/io/remoteFile.js.map +1 -0
  85. package/dist/rans/constants.d.ts +3 -0
  86. package/dist/rans/constants.js +6 -6
  87. package/dist/rans/constants.js.map +1 -0
  88. package/dist/rans/d04.d.ts +1 -0
  89. package/dist/rans/d04.js +70 -99
  90. package/dist/rans/d04.js.map +1 -0
  91. package/dist/rans/d14.d.ts +1 -0
  92. package/dist/rans/d14.js +55 -93
  93. package/dist/rans/d14.js.map +1 -0
  94. package/dist/rans/decoding.d.ts +30 -0
  95. package/dist/rans/decoding.js +112 -159
  96. package/dist/rans/decoding.js.map +1 -0
  97. package/dist/rans/frequencies.d.ts +2 -0
  98. package/dist/rans/frequencies.js +110 -119
  99. package/dist/rans/frequencies.js.map +1 -0
  100. package/dist/rans/index.d.ts +1 -0
  101. package/dist/rans/index.js +111 -174
  102. package/dist/rans/index.js.map +1 -0
  103. package/dist/sam.d.ts +1 -0
  104. package/dist/sam.js +16 -41
  105. package/dist/sam.js.map +1 -0
  106. package/dist/unzip-pako.d.ts +2 -0
  107. package/dist/unzip-pako.js +9 -0
  108. package/dist/unzip-pako.js.map +1 -0
  109. package/dist/unzip.d.ts +2 -0
  110. package/dist/unzip.js +6 -0
  111. package/dist/unzip.js.map +1 -0
  112. package/errors.js +66 -103
  113. package/esm/craiIndex.d.ts +37 -0
  114. package/esm/craiIndex.js +158 -0
  115. package/esm/craiIndex.js.map +1 -0
  116. package/esm/cramFile/codecs/_base.d.ts +6 -0
  117. package/esm/cramFile/codecs/_base.js +42 -0
  118. package/esm/cramFile/codecs/_base.js.map +1 -0
  119. package/esm/cramFile/codecs/beta.d.ts +4 -0
  120. package/esm/cramFile/codecs/beta.js +15 -0
  121. package/esm/cramFile/codecs/beta.js.map +1 -0
  122. package/esm/cramFile/codecs/byteArrayLength.d.ts +8 -0
  123. package/esm/cramFile/codecs/byteArrayLength.js +35 -0
  124. package/esm/cramFile/codecs/byteArrayLength.js.map +1 -0
  125. package/esm/cramFile/codecs/byteArrayStop.d.ts +6 -0
  126. package/esm/cramFile/codecs/byteArrayStop.js +40 -0
  127. package/esm/cramFile/codecs/byteArrayStop.js.map +1 -0
  128. package/esm/cramFile/codecs/external.d.ts +7 -0
  129. package/esm/cramFile/codecs/external.js +40 -0
  130. package/esm/cramFile/codecs/external.js.map +1 -0
  131. package/esm/cramFile/codecs/gamma.d.ts +4 -0
  132. package/esm/cramFile/codecs/gamma.js +20 -0
  133. package/esm/cramFile/codecs/gamma.js.map +1 -0
  134. package/esm/cramFile/codecs/huffman.d.ts +17 -0
  135. package/esm/cramFile/codecs/huffman.js +107 -0
  136. package/esm/cramFile/codecs/huffman.js.map +1 -0
  137. package/esm/cramFile/codecs/index.d.ts +2 -0
  138. package/esm/cramFile/codecs/index.js +30 -0
  139. package/esm/cramFile/codecs/index.js.map +1 -0
  140. package/esm/cramFile/codecs/subexp.d.ts +4 -0
  141. package/esm/cramFile/codecs/subexp.js +28 -0
  142. package/esm/cramFile/codecs/subexp.js.map +1 -0
  143. package/esm/cramFile/constants.d.ts +36 -0
  144. package/esm/cramFile/constants.js +51 -0
  145. package/esm/cramFile/constants.js.map +1 -0
  146. package/esm/cramFile/container/compressionScheme.d.ts +23 -0
  147. package/esm/cramFile/container/compressionScheme.js +123 -0
  148. package/esm/cramFile/container/compressionScheme.js.map +1 -0
  149. package/esm/cramFile/container/index.d.ts +13 -0
  150. package/esm/cramFile/container/index.js +84 -0
  151. package/esm/cramFile/container/index.js.map +1 -0
  152. package/esm/cramFile/file.d.ts +63 -0
  153. package/esm/cramFile/file.js +281 -0
  154. package/esm/cramFile/file.js.map +1 -0
  155. package/esm/cramFile/index.d.ts +2 -0
  156. package/esm/cramFile/index.js +3 -0
  157. package/esm/cramFile/index.js.map +1 -0
  158. package/esm/cramFile/record.d.ts +79 -0
  159. package/esm/cramFile/record.js +297 -0
  160. package/esm/cramFile/record.js.map +1 -0
  161. package/esm/cramFile/sectionParsers.d.ts +18 -0
  162. package/esm/cramFile/sectionParsers.js +347 -0
  163. package/esm/cramFile/sectionParsers.js.map +1 -0
  164. package/esm/cramFile/slice/decodeRecord.d.ts +2 -0
  165. package/esm/cramFile/slice/decodeRecord.js +299 -0
  166. package/esm/cramFile/slice/decodeRecord.js.map +1 -0
  167. package/esm/cramFile/slice/index.d.ts +20 -0
  168. package/esm/cramFile/slice/index.js +364 -0
  169. package/esm/cramFile/slice/index.js.map +1 -0
  170. package/esm/cramFile/util.d.ts +5 -0
  171. package/esm/cramFile/util.js +161 -0
  172. package/esm/cramFile/util.js.map +1 -0
  173. package/esm/errors.d.ts +23 -0
  174. package/esm/errors.js +24 -0
  175. package/esm/errors.js.map +1 -0
  176. package/esm/index.d.ts +4 -0
  177. package/esm/index.js +5 -0
  178. package/esm/index.js.map +1 -0
  179. package/esm/indexedCramFile.d.ts +39 -0
  180. package/esm/indexedCramFile.js +155 -0
  181. package/esm/indexedCramFile.js.map +1 -0
  182. package/esm/io/bufferCache.d.ts +12 -0
  183. package/esm/io/bufferCache.js +54 -0
  184. package/esm/io/bufferCache.js.map +1 -0
  185. package/esm/io/index.d.ts +5 -0
  186. package/esm/io/index.js +24 -0
  187. package/esm/io/index.js.map +1 -0
  188. package/esm/io/localFile.d.ts +10 -0
  189. package/esm/io/localFile.js +31 -0
  190. package/esm/io/localFile.js.map +1 -0
  191. package/esm/io/remoteFile.d.ts +16 -0
  192. package/esm/io/remoteFile.js +64 -0
  193. package/esm/io/remoteFile.js.map +1 -0
  194. package/esm/rans/constants.d.ts +3 -0
  195. package/esm/rans/constants.js +5 -0
  196. package/esm/rans/constants.js.map +1 -0
  197. package/esm/rans/d04.d.ts +1 -0
  198. package/esm/rans/d04.js +67 -0
  199. package/esm/rans/d04.js.map +1 -0
  200. package/esm/rans/d14.d.ts +1 -0
  201. package/esm/rans/d14.js +52 -0
  202. package/esm/rans/d14.js.map +1 -0
  203. package/esm/rans/decoding.d.ts +30 -0
  204. package/esm/rans/decoding.js +118 -0
  205. package/esm/rans/decoding.js.map +1 -0
  206. package/esm/rans/frequencies.d.ts +2 -0
  207. package/esm/rans/frequencies.js +110 -0
  208. package/esm/rans/frequencies.js.map +1 -0
  209. package/esm/rans/index.d.ts +1 -0
  210. package/esm/rans/index.js +195 -0
  211. package/esm/rans/index.js.map +1 -0
  212. package/esm/sam.d.ts +1 -0
  213. package/esm/sam.js +16 -0
  214. package/esm/sam.js.map +1 -0
  215. package/esm/unzip-pako.d.ts +2 -0
  216. package/esm/unzip-pako.js +5 -0
  217. package/esm/unzip-pako.js.map +1 -0
  218. package/esm/unzip.d.ts +2 -0
  219. package/esm/unzip.js +3 -0
  220. package/esm/unzip.js.map +1 -0
  221. package/package.json +38 -35
  222. package/src/craiIndex.js +180 -0
  223. package/src/cramFile/codecs/_base.js +49 -0
  224. package/src/cramFile/codecs/beta.js +23 -0
  225. package/src/cramFile/codecs/byteArrayLength.js +55 -0
  226. package/src/cramFile/codecs/byteArrayStop.js +50 -0
  227. package/src/cramFile/codecs/external.js +54 -0
  228. package/src/cramFile/codecs/gamma.js +30 -0
  229. package/src/cramFile/codecs/huffman.js +137 -0
  230. package/src/cramFile/codecs/index.js +38 -0
  231. package/src/cramFile/codecs/subexp.js +32 -0
  232. package/src/cramFile/constants.js +55 -0
  233. package/src/cramFile/container/compressionScheme.js +144 -0
  234. package/src/cramFile/container/index.js +119 -0
  235. package/src/cramFile/file.js +347 -0
  236. package/src/cramFile/index.js +3 -0
  237. package/src/cramFile/record.js +337 -0
  238. package/src/cramFile/sectionParsers.js +379 -0
  239. package/src/cramFile/slice/decodeRecord.js +362 -0
  240. package/src/cramFile/slice/index.js +497 -0
  241. package/src/cramFile/util.js +169 -0
  242. package/src/errors.js +22 -0
  243. package/src/index.js +5 -0
  244. package/src/indexedCramFile.js +191 -0
  245. package/src/io/bufferCache.js +66 -0
  246. package/src/io/index.js +26 -0
  247. package/src/io/localFile.js +35 -0
  248. package/src/io/remoteFile.js +71 -0
  249. package/src/rans/README.md +1 -0
  250. package/src/rans/constants.js +5 -0
  251. package/src/rans/d04.js +83 -0
  252. package/src/rans/d14.js +59 -0
  253. package/src/rans/decoding.js +141 -0
  254. package/src/rans/frequencies.js +121 -0
  255. package/src/rans/index.js +249 -0
  256. package/src/sam.js +15 -0
  257. package/src/unzip-pako.ts +5 -0
  258. package/src/unzip.ts +2 -0
@@ -0,0 +1,4 @@
1
+ export default class GammaCodec extends CramCodec {
2
+ decode(slice: any, coreDataBlock: any, blocksByContentId: any, cursors: any): number;
3
+ }
4
+ import CramCodec from "./_base";
@@ -0,0 +1,20 @@
1
+ import { CramUnimplementedError } from '../../errors';
2
+ import CramCodec from './_base';
3
+ export default class GammaCodec extends CramCodec {
4
+ constructor(parameters = {}, dataType) {
5
+ super(parameters, dataType);
6
+ if (this.dataType !== 'int') {
7
+ throw new CramUnimplementedError(`${this.dataType} decoding not yet implemented by GAMMA codec`);
8
+ }
9
+ }
10
+ decode(slice, coreDataBlock, blocksByContentId, cursors) {
11
+ let length = 1;
12
+ while (this._getBits(coreDataBlock.content, cursors.coreBlock, 1) === 0) {
13
+ length += 1;
14
+ }
15
+ const readBits = this._getBits(coreDataBlock.content, cursors.coreBlock, length - 1);
16
+ const value = readBits | (1 << (length - 1));
17
+ return value - this.parameters.offset;
18
+ }
19
+ }
20
+ //# sourceMappingURL=gamma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gamma.js","sourceRoot":"","sources":["../../../src/cramFile/codecs/gamma.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,SAAS,MAAM,SAAS,CAAA;AAE/B,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,SAAS;IAC/C,YAAY,UAAU,GAAG,EAAE,EAAE,QAAQ;QACnC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC3B,MAAM,IAAI,sBAAsB,CAC9B,GAAG,IAAI,CAAC,QAAQ,8CAA8C,CAC/D,CAAA;SACF;IACH,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,OAAO;QACrD,IAAI,MAAM,GAAG,CAAC,CAAA;QAEd,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,IAAI,CAAC,CAAA;SACZ;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAC5B,aAAa,CAAC,OAAO,EACrB,OAAO,CAAC,SAAS,EACjB,MAAM,GAAG,CAAC,CACX,CAAA;QAED,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAO,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;IACvC,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ export default class HuffmanIntCodec extends CramCodec {
2
+ _decode(slice: any, coreDataBlock: any, coreCursor: any): any;
3
+ buildCodeBook(): void;
4
+ codeBook: {} | undefined;
5
+ buildCodes(): void;
6
+ codes: {} | undefined;
7
+ buildCaches(): void;
8
+ sortedCodes: any[] | undefined;
9
+ sortedByValue: any[] | undefined;
10
+ sortedValuesByBitCode: any[] | undefined;
11
+ sortedBitCodes: any[] | undefined;
12
+ sortedBitLengthsByBitCode: any[] | undefined;
13
+ bitCodeToValue: any[] | undefined;
14
+ decode(slice: any, coreDataBlock: any, blocksByContentId: any, cursors: any): any;
15
+ _decodeZeroLengthCode(): any;
16
+ }
17
+ import CramCodec from "./_base";
@@ -0,0 +1,107 @@
1
+ import { CramMalformedError } from '../../errors';
2
+ import CramCodec from './_base';
3
+ function numberOfSetBits(ii) {
4
+ let i = (ii - (ii >> 1)) & 0x55555555;
5
+ i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
6
+ return (((i + (i >> 4)) & 0x0f0f0f0f) * 0x01010101) >> 24;
7
+ }
8
+ export default class HuffmanIntCodec extends CramCodec {
9
+ constructor(parameters = {}, dataType) {
10
+ super(parameters, dataType);
11
+ if (!['byte', 'int'].includes(this.dataType)) {
12
+ throw new TypeError(`${this.dataType} decoding not yet implemented by HUFFMAN_INT codec`);
13
+ }
14
+ this.buildCodeBook();
15
+ this.buildCodes();
16
+ this.buildCaches();
17
+ // if this is a degenerate zero-length huffman code, special-case the decoding
18
+ if (this.sortedCodes[0].bitLength === 0) {
19
+ this._decode = this._decodeZeroLengthCode;
20
+ }
21
+ }
22
+ buildCodeBook() {
23
+ // parse the parameters together into a `codes` data structure
24
+ let codes = new Array(this.parameters.numCodes);
25
+ for (let i = 0; i < this.parameters.numCodes; i += 1) {
26
+ codes[i] = {
27
+ symbol: this.parameters.symbols[i],
28
+ bitLength: this.parameters.bitLengths[i],
29
+ };
30
+ }
31
+ // sort the codes by bit length and symbol value
32
+ codes = codes.sort((a, b) => a.bitLength - b.bitLength || a.symbol - b.symbol);
33
+ this.codeBook = {};
34
+ codes.forEach(code => {
35
+ if (!this.codeBook[code.bitLength]) {
36
+ this.codeBook[code.bitLength] = [];
37
+ }
38
+ this.codeBook[code.bitLength].push(code.symbol);
39
+ });
40
+ }
41
+ buildCodes() {
42
+ this.codes = {}; /* new TreeMap<Integer, HuffmanBitCode>(); */
43
+ let codeLength = 0;
44
+ let codeValue = -1;
45
+ Object.entries(this.codeBook).forEach(([bitLength, symbols]) => {
46
+ bitLength = parseInt(bitLength, 10);
47
+ symbols.forEach(symbol => {
48
+ const code = { bitLength, value: symbol };
49
+ codeValue += 1;
50
+ const delta = bitLength - codeLength; // new length?
51
+ codeValue <<= delta; // pad with 0's
52
+ code.bitCode = codeValue; // calculated: huffman code
53
+ codeLength += delta; // adjust current code length
54
+ if (numberOfSetBits(codeValue) > bitLength) {
55
+ throw new CramMalformedError('Symbol out of range');
56
+ }
57
+ this.codes[symbol] = code;
58
+ });
59
+ });
60
+ }
61
+ buildCaches() {
62
+ this.sortedCodes = Object.values(this.codes).sort((a, b) => a.bitLength - b.bitLength || a.bitCode - b.bitCode);
63
+ // this.sortedValues = this.parameters.values.sort((a,b) => a-b)
64
+ this.sortedByValue = Object.values(this.codes).sort((a, b) => a.value - b.value);
65
+ this.sortedValuesByBitCode = this.sortedCodes.map(c => c.value);
66
+ this.sortedBitCodes = this.sortedCodes.map(c => c.bitCode);
67
+ this.sortedBitLengthsByBitCode = this.sortedCodes.map(c => c.bitLength);
68
+ const maxBitCode = Math.max(...this.sortedBitCodes);
69
+ this.bitCodeToValue = new Array(maxBitCode + 1).fill(-1);
70
+ for (let i = 0; i < this.sortedBitCodes.length; i += 1) {
71
+ this.bitCodeToValue[this.sortedCodes[i].bitCode] = i;
72
+ }
73
+ }
74
+ decode(slice, coreDataBlock, blocksByContentId, cursors) {
75
+ return this._decode(slice, coreDataBlock, cursors.coreBlock);
76
+ }
77
+ // _decodeNull() {
78
+ // return -1
79
+ // }
80
+ // the special case for zero-length codes
81
+ _decodeZeroLengthCode() {
82
+ return this.sortedCodes[0].value;
83
+ }
84
+ _decode(slice, coreDataBlock, coreCursor) {
85
+ const input = coreDataBlock.content;
86
+ let prevLen = 0;
87
+ let bits = 0;
88
+ for (let i = 0; i < this.sortedCodes.length; i += 1) {
89
+ const length = this.sortedCodes[i].bitLength;
90
+ bits <<= length - prevLen;
91
+ bits |= this._getBits(input, coreCursor, length - prevLen);
92
+ prevLen = length;
93
+ {
94
+ const index = this.bitCodeToValue[bits];
95
+ if (index > -1 && this.sortedBitLengthsByBitCode[index] === length) {
96
+ return this.sortedValuesByBitCode[index];
97
+ }
98
+ for (let j = i; this.sortedCodes[j + 1].bitLength === length &&
99
+ j < this.sortedCodes.length; j += 1) {
100
+ i += 1;
101
+ }
102
+ }
103
+ }
104
+ throw new CramMalformedError('Huffman symbol not found.');
105
+ }
106
+ }
107
+ //# sourceMappingURL=huffman.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"huffman.js","sourceRoot":"","sources":["../../../src/cramFile/codecs/huffman.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export function getCodecClassWithId(id: any): any;
2
+ export function instantiateCodec(encodingData: any, dataType: any): any;
@@ -0,0 +1,30 @@
1
+ import { CramUnimplementedError } from '../../errors';
2
+ import HuffmanIntCodec from './huffman';
3
+ import ExternalCodec from './external';
4
+ import ByteArrayStopCodec from './byteArrayStop';
5
+ import ByteArrayLengthCodec from './byteArrayLength';
6
+ import BetaCodec from './beta';
7
+ import GammaCodec from './gamma';
8
+ import SubexpCodec from './subexp';
9
+ const codecClasses = {
10
+ 1: ExternalCodec,
11
+ // 2: GolombCodec,
12
+ 3: HuffmanIntCodec,
13
+ 4: ByteArrayLengthCodec,
14
+ 5: ByteArrayStopCodec,
15
+ 6: BetaCodec,
16
+ 7: SubexpCodec,
17
+ // 8: GolombRiceCodec,
18
+ 9: GammaCodec,
19
+ };
20
+ export function getCodecClassWithId(id) {
21
+ return codecClasses[id];
22
+ }
23
+ export function instantiateCodec(encodingData, dataType) {
24
+ const CodecClass = getCodecClassWithId(dataType === 'ignore' ? 0 : encodingData.codecId);
25
+ if (!CodecClass) {
26
+ throw new CramUnimplementedError(`no codec implemented for codec ID ${encodingData.codecId}`);
27
+ }
28
+ return new CodecClass(encodingData.parameters, dataType, instantiateCodec);
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cramFile/codecs/index.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAErD,OAAO,eAAe,MAAM,WAAW,CAAA;AACvC,OAAO,aAAa,MAAM,YAAY,CAAA;AACtC,OAAO,kBAAkB,MAAM,iBAAiB,CAAA;AAChD,OAAO,oBAAoB,MAAM,mBAAmB,CAAA;AACpD,OAAO,SAAS,MAAM,QAAQ,CAAA;AAC9B,OAAO,UAAU,MAAM,SAAS,CAAA;AAChC,OAAO,WAAW,MAAM,UAAU,CAAA;AAElC,MAAM,YAAY,GAAG;IACnB,CAAC,EAAE,aAAa;IAChB,kBAAkB;IAClB,CAAC,EAAE,eAAe;IAClB,CAAC,EAAE,oBAAoB;IACvB,CAAC,EAAE,kBAAkB;IACrB,CAAC,EAAE,SAAS;IACZ,CAAC,EAAE,WAAW;IACd,sBAAsB;IACtB,CAAC,EAAE,UAAU;CACd,CAAA;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAE;IACpC,OAAO,YAAY,CAAC,EAAE,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAY,EAAE,QAAQ;IACrD,MAAM,UAAU,GAAG,mBAAmB,CACpC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CACjD,CAAA;IACD,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,sBAAsB,CAC9B,qCAAqC,YAAY,CAAC,OAAO,EAAE,CAC5D,CAAA;KACF;IAED,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAC5E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export default class SubexpCodec extends CramCodec {
2
+ decode(slice: any, coreDataBlock: any, blocksByContentId: any, cursors: any): number;
3
+ }
4
+ import CramCodec from "./_base";
@@ -0,0 +1,28 @@
1
+ import { CramUnimplementedError } from '../../errors';
2
+ import CramCodec from './_base';
3
+ export default class SubexpCodec extends CramCodec {
4
+ constructor(parameters = {}, dataType) {
5
+ super(parameters, dataType);
6
+ if (this.dataType !== 'int') {
7
+ throw new CramUnimplementedError(`${this.dataType} decoding not yet implemented by SUBEXP codec`);
8
+ }
9
+ }
10
+ decode(slice, coreDataBlock, blocksByContentId, cursors) {
11
+ let numLeadingOnes = 0;
12
+ while (this._getBits(coreDataBlock.content, cursors.coreBlock, 1)) {
13
+ numLeadingOnes += 1;
14
+ }
15
+ let b;
16
+ let n;
17
+ if (numLeadingOnes === 0) {
18
+ b = this.parameters.K;
19
+ n = this._getBits(coreDataBlock.content, cursors.coreBlock, b);
20
+ }
21
+ else {
22
+ b = numLeadingOnes + this.parameters.K - 1;
23
+ n = (1 << b) | this._getBits(coreDataBlock.content, cursors.coreBlock, b);
24
+ }
25
+ return n - this.parameters.offset;
26
+ }
27
+ }
28
+ //# sourceMappingURL=subexp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subexp.js","sourceRoot":"","sources":["../../../src/cramFile/codecs/subexp.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,SAAS,MAAM,SAAS,CAAA;AAE/B,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAChD,YAAY,UAAU,GAAG,EAAE,EAAE,QAAQ;QACnC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC3B,MAAM,IAAI,sBAAsB,CAC9B,GAAG,IAAI,CAAC,QAAQ,+CAA+C,CAChE,CAAA;SACF;IACH,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,OAAO;QACrD,IAAI,cAAc,GAAG,CAAC,CAAA;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE;YACjE,cAAc,IAAI,CAAC,CAAA;SACpB;QAED,IAAI,CAAC,CAAA;QACL,IAAI,CAAC,CAAA;QACL,IAAI,cAAc,KAAK,CAAC,EAAE;YACxB,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;YACrB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;SAC/D;aAAM;YACL,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAA;YAC1C,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;SAC1E;QAED,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;IACnC,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ export default Constants;
2
+ declare namespace Constants {
3
+ const CRAM_FLAG_PRESERVE_QUAL_SCORES: number;
4
+ const CRAM_FLAG_DETACHED: number;
5
+ const CRAM_FLAG_MATE_DOWNSTREAM: number;
6
+ const CRAM_FLAG_NO_SEQ: number;
7
+ const CRAM_FLAG_MASK: number;
8
+ const CRAM_M_REVERSE: number;
9
+ const CRAM_M_UNMAP: number;
10
+ const BAM_FPAIRED: number;
11
+ const BAM_FPROPER_PAIR: number;
12
+ const BAM_FUNMAP: number;
13
+ const BAM_FMUNMAP: number;
14
+ const BAM_FREVERSE: number;
15
+ const BAM_FMREVERSE: number;
16
+ const BAM_FREAD1: number;
17
+ const BAM_FREAD2: number;
18
+ const BAM_FSECONDARY: number;
19
+ const BAM_FQCFAIL: number;
20
+ const BAM_FDUP: number;
21
+ const BAM_FSUPPLEMENTARY: number;
22
+ const BAM_CMATCH: number;
23
+ const BAM_CINS: number;
24
+ const BAM_CDEL: number;
25
+ const BAM_CREF_SKIP: number;
26
+ const BAM_CSOFT_CLIP: number;
27
+ const BAM_CHARD_CLIP: number;
28
+ const BAM_CPAD: number;
29
+ const BAM_CEQUAL: number;
30
+ const BAM_CDIFF: number;
31
+ const BAM_CBACK: number;
32
+ const BAM_CIGAR_STR: string;
33
+ const BAM_CIGAR_SHIFT: number;
34
+ const BAM_CIGAR_MASK: number;
35
+ const BAM_CIGAR_TYPE: number;
36
+ }
@@ -0,0 +1,51 @@
1
+ const Constants = {
2
+ CRAM_FLAG_PRESERVE_QUAL_SCORES: 1 << 0,
3
+ CRAM_FLAG_DETACHED: 1 << 1,
4
+ CRAM_FLAG_MATE_DOWNSTREAM: 1 << 2,
5
+ CRAM_FLAG_NO_SEQ: 1 << 3,
6
+ CRAM_FLAG_MASK: (1 << 4) - 1,
7
+ // mate read is reversed
8
+ CRAM_M_REVERSE: 1,
9
+ // mated read is unmapped
10
+ CRAM_M_UNMAP: 2,
11
+ // the read is paired in sequencing, no matter whether it is mapped in a pair
12
+ BAM_FPAIRED: 1,
13
+ // the read is mapped in a proper pair
14
+ BAM_FPROPER_PAIR: 2,
15
+ // the read itself is unmapped; conflictive with BAM_FPROPER_PAIR
16
+ BAM_FUNMAP: 4,
17
+ // the mate is unmapped
18
+ BAM_FMUNMAP: 8,
19
+ // the read is mapped to the reverse strand
20
+ BAM_FREVERSE: 16,
21
+ // the mate is mapped to the reverse strand
22
+ BAM_FMREVERSE: 32,
23
+ // this is read1
24
+ BAM_FREAD1: 64,
25
+ // this is read2
26
+ BAM_FREAD2: 128,
27
+ // not primary alignment
28
+ BAM_FSECONDARY: 256,
29
+ // QC failure
30
+ BAM_FQCFAIL: 512,
31
+ // optical or PCR duplicate
32
+ BAM_FDUP: 1024,
33
+ // supplementary alignment
34
+ BAM_FSUPPLEMENTARY: 2048,
35
+ BAM_CMATCH: 0,
36
+ BAM_CINS: 1,
37
+ BAM_CDEL: 2,
38
+ BAM_CREF_SKIP: 3,
39
+ BAM_CSOFT_CLIP: 4,
40
+ BAM_CHARD_CLIP: 5,
41
+ BAM_CPAD: 6,
42
+ BAM_CEQUAL: 7,
43
+ BAM_CDIFF: 8,
44
+ BAM_CBACK: 9,
45
+ BAM_CIGAR_STR: 'MIDNSHP:XB',
46
+ BAM_CIGAR_SHIFT: 4,
47
+ BAM_CIGAR_MASK: 0xf,
48
+ BAM_CIGAR_TYPE: 0x3c1a7,
49
+ };
50
+ export default Constants;
51
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/cramFile/constants.js"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG;IAChB,8BAA8B,EAAE,CAAC,IAAI,CAAC;IACtC,kBAAkB,EAAE,CAAC,IAAI,CAAC;IAC1B,yBAAyB,EAAE,CAAC,IAAI,CAAC;IACjC,gBAAgB,EAAE,CAAC,IAAI,CAAC;IACxB,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;IAE5B,wBAAwB;IACxB,cAAc,EAAE,CAAC;IACjB,yBAAyB;IACzB,YAAY,EAAE,CAAC;IAEf,8EAA8E;IAC9E,WAAW,EAAE,CAAC;IACd,uCAAuC;IACvC,gBAAgB,EAAE,CAAC;IACnB,kEAAkE;IAClE,UAAU,EAAE,CAAC;IACb,wBAAwB;IACxB,WAAW,EAAE,CAAC;IACd,4CAA4C;IAC5C,YAAY,EAAE,EAAE;IAChB,4CAA4C;IAC5C,aAAa,EAAE,EAAE;IACjB,iBAAiB;IACjB,UAAU,EAAE,EAAE;IACd,iBAAiB;IACjB,UAAU,EAAE,GAAG;IACf,yBAAyB;IACzB,cAAc,EAAE,GAAG;IACnB,cAAc;IACd,WAAW,EAAE,GAAG;IAChB,4BAA4B;IAC5B,QAAQ,EAAE,IAAI;IACd,2BAA2B;IAC3B,kBAAkB,EAAE,IAAI;IAExB,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,aAAa,EAAE,CAAC;IAChB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC;IACjB,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;IAEZ,aAAa,EAAE,YAAY;IAC3B,eAAe,EAAE,CAAC;IAClB,cAAc,EAAE,GAAG;IACnB,cAAc,EAAE,OAAO;CACxB,CAAA;AAED,eAAe,SAAS,CAAA"}
@@ -0,0 +1,23 @@
1
+ export default class CramContainerCompressionScheme {
2
+ constructor(content: any);
3
+ readNamesIncluded: any;
4
+ APdelta: any;
5
+ referenceRequired: boolean;
6
+ tagIdsDictionary: any;
7
+ substitutionMatrix: any[];
8
+ dataSeriesCodecCache: {};
9
+ tagCodecCache: {};
10
+ /**
11
+ * @param {string} tagName three-character tag name
12
+ * @private
13
+ */
14
+ private getCodecForTag;
15
+ /**
16
+ *
17
+ * @param {number} tagListId ID of the tag list to fetch from the tag dictionary
18
+ * @private
19
+ */
20
+ private getTagNames;
21
+ getCodecForDataSeries(dataSeriesName: any): any;
22
+ toJSON(): {};
23
+ }
@@ -0,0 +1,123 @@
1
+ import { CramMalformedError } from '../../errors';
2
+ import { instantiateCodec } from '../codecs';
3
+ // the hardcoded data type to be decoded for each core
4
+ // data field
5
+ const dataSeriesTypes = {
6
+ BF: 'int',
7
+ CF: 'int',
8
+ RI: 'int',
9
+ RL: 'int',
10
+ AP: 'int',
11
+ RG: 'int',
12
+ MF: 'int',
13
+ NS: 'int',
14
+ NP: 'int',
15
+ TS: 'int',
16
+ NF: 'int',
17
+ TC: 'byte',
18
+ TN: 'int',
19
+ FN: 'int',
20
+ FC: 'byte',
21
+ FP: 'int',
22
+ BS: 'byte',
23
+ IN: 'byteArray',
24
+ SC: 'byteArray',
25
+ DL: 'int',
26
+ BA: 'byte',
27
+ BB: 'byteArray',
28
+ RS: 'int',
29
+ PD: 'int',
30
+ HC: 'int',
31
+ MQ: 'int',
32
+ RN: 'byteArray',
33
+ QS: 'byte',
34
+ QQ: 'byteArray',
35
+ TL: 'int',
36
+ TM: 'ignore',
37
+ TV: 'ignore',
38
+ };
39
+ function parseSubstitutionMatrix(byteArray) {
40
+ const matrix = new Array(5);
41
+ for (let i = 0; i < 5; i += 1) {
42
+ matrix[i] = new Array(4);
43
+ }
44
+ matrix[0][(byteArray[0] >> 6) & 3] = 'C';
45
+ matrix[0][(byteArray[0] >> 4) & 3] = 'G';
46
+ matrix[0][(byteArray[0] >> 2) & 3] = 'T';
47
+ matrix[0][(byteArray[0] >> 0) & 3] = 'N';
48
+ matrix[1][(byteArray[1] >> 6) & 3] = 'A';
49
+ matrix[1][(byteArray[1] >> 4) & 3] = 'G';
50
+ matrix[1][(byteArray[1] >> 2) & 3] = 'T';
51
+ matrix[1][(byteArray[1] >> 0) & 3] = 'N';
52
+ matrix[2][(byteArray[2] >> 6) & 3] = 'A';
53
+ matrix[2][(byteArray[2] >> 4) & 3] = 'C';
54
+ matrix[2][(byteArray[2] >> 2) & 3] = 'T';
55
+ matrix[2][(byteArray[2] >> 0) & 3] = 'N';
56
+ matrix[3][(byteArray[3] >> 6) & 3] = 'A';
57
+ matrix[3][(byteArray[3] >> 4) & 3] = 'C';
58
+ matrix[3][(byteArray[3] >> 2) & 3] = 'G';
59
+ matrix[3][(byteArray[3] >> 0) & 3] = 'N';
60
+ matrix[4][(byteArray[4] >> 6) & 3] = 'A';
61
+ matrix[4][(byteArray[4] >> 4) & 3] = 'C';
62
+ matrix[4][(byteArray[4] >> 2) & 3] = 'G';
63
+ matrix[4][(byteArray[4] >> 0) & 3] = 'T';
64
+ return matrix;
65
+ }
66
+ export default class CramContainerCompressionScheme {
67
+ constructor(content) {
68
+ Object.assign(this, content);
69
+ // interpret some of the preservation map tags for convenient use
70
+ this.readNamesIncluded = content.preservation.RN;
71
+ this.APdelta = content.preservation.AP;
72
+ this.referenceRequired = !!content.preservation.RR;
73
+ this.tagIdsDictionary = content.preservation.TD;
74
+ this.substitutionMatrix = parseSubstitutionMatrix(content.preservation.SM);
75
+ this.dataSeriesCodecCache = {};
76
+ this.tagCodecCache = {};
77
+ }
78
+ /**
79
+ * @param {string} tagName three-character tag name
80
+ * @private
81
+ */
82
+ getCodecForTag(tagName) {
83
+ if (!this.tagCodecCache[tagName]) {
84
+ const encodingData = this.tagEncoding[tagName];
85
+ if (encodingData) {
86
+ this.tagCodecCache[tagName] = instantiateCodec(encodingData, 'byteArray');
87
+ }
88
+ }
89
+ return this.tagCodecCache[tagName];
90
+ }
91
+ /**
92
+ *
93
+ * @param {number} tagListId ID of the tag list to fetch from the tag dictionary
94
+ * @private
95
+ */
96
+ getTagNames(tagListId) {
97
+ return this.tagIdsDictionary[tagListId];
98
+ }
99
+ getCodecForDataSeries(dataSeriesName) {
100
+ if (!this.dataSeriesCodecCache[dataSeriesName]) {
101
+ const encodingData = this.dataSeriesEncoding[dataSeriesName];
102
+ if (encodingData) {
103
+ const dataType = dataSeriesTypes[dataSeriesName];
104
+ if (!dataType) {
105
+ throw new CramMalformedError(`data series name ${dataSeriesName} not defined in file compression header`);
106
+ }
107
+ this.dataSeriesCodecCache[dataSeriesName] = instantiateCodec(encodingData, dataType);
108
+ }
109
+ }
110
+ return this.dataSeriesCodecCache[dataSeriesName];
111
+ }
112
+ toJSON() {
113
+ const data = {};
114
+ Object.keys(this).forEach(k => {
115
+ if (/Cache$/.test(k)) {
116
+ return;
117
+ }
118
+ data[k] = this[k];
119
+ });
120
+ return data;
121
+ }
122
+ }
123
+ //# sourceMappingURL=compressionScheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compressionScheme.js","sourceRoot":"","sources":["../../../src/cramFile/container/compressionScheme.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE5C,sDAAsD;AACtD,aAAa;AACb,MAAM,eAAe,GAAG;IACtB,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,KAAK;IACT,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;CACb,CAAA;AAED,SAAS,uBAAuB,CAAC,SAAS;IACxC,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QAC7B,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAA;KACzB;IAED,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAExC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAExC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IAExC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACxC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,G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"}
@@ -0,0 +1,13 @@
1
+ export default class CramContainer {
2
+ constructor(cramFile: any, position: any);
3
+ file: any;
4
+ filePosition: any;
5
+ getHeader(): Promise<any>;
6
+ getCompressionHeaderBlock(): Promise<any>;
7
+ getFirstBlock(): Promise<any>;
8
+ getCompressionScheme(): Promise<CramContainerCompressionScheme | undefined>;
9
+ getSlice(slicePosition: any, sliceSize: any): CramSlice;
10
+ _readContainerHeader(position: any): Promise<any>;
11
+ }
12
+ import CramContainerCompressionScheme from "./compressionScheme";
13
+ import CramSlice from "../slice";
@@ -0,0 +1,84 @@
1
+ import { CramMalformedError } from '../../errors';
2
+ import { itf8Size, parseItem, tinyMemoize } from '../util';
3
+ import CramSlice from '../slice';
4
+ import CramContainerCompressionScheme from './compressionScheme';
5
+ export default class CramContainer {
6
+ constructor(cramFile, position) {
7
+ // cram file this container comes from
8
+ this.file = cramFile;
9
+ // position of this container in the file
10
+ this.filePosition = position;
11
+ // console.log(`container: ${this.filePosition}`)
12
+ }
13
+ // memoize
14
+ getHeader() {
15
+ return this._readContainerHeader(this.filePosition);
16
+ }
17
+ // memoize
18
+ async getCompressionHeaderBlock() {
19
+ const containerHeader = await this.getHeader();
20
+ // if there are no records in the container, there will be no compression header
21
+ if (!containerHeader.numRecords) {
22
+ return null;
23
+ }
24
+ const sectionParsers = await this.file.getSectionParsers();
25
+ const block = await this.getFirstBlock();
26
+ if (block.contentType !== 'COMPRESSION_HEADER') {
27
+ throw new CramMalformedError(`invalid content type ${block.contentType} in what is supposed to be the compression header block`);
28
+ }
29
+ const content = parseItem(block.content, sectionParsers.cramCompressionHeader.parser, 0, block.contentPosition);
30
+ block.content = content;
31
+ return block;
32
+ }
33
+ async getFirstBlock() {
34
+ const containerHeader = await this.getHeader();
35
+ return this.file.readBlock(containerHeader._endPosition);
36
+ }
37
+ // parses the compression header data into a CramContainerCompressionScheme object
38
+ // memoize
39
+ async getCompressionScheme() {
40
+ const header = await this.getCompressionHeaderBlock();
41
+ if (!header) {
42
+ return undefined;
43
+ }
44
+ return new CramContainerCompressionScheme(header.content);
45
+ }
46
+ getSlice(slicePosition, sliceSize) {
47
+ // note: slicePosition is relative to the end of the container header
48
+ // TODO: perhaps we should cache slices?
49
+ return new CramSlice(this, slicePosition, sliceSize);
50
+ }
51
+ async _readContainerHeader(position) {
52
+ const sectionParsers = await this.file.getSectionParsers();
53
+ const { cramContainerHeader1, cramContainerHeader2 } = sectionParsers;
54
+ const { size: fileSize } = await this.file.stat();
55
+ if (position >= fileSize) {
56
+ return undefined;
57
+ }
58
+ // parse the container header. do it in 2 pieces because you cannot tell
59
+ // how much to buffer until you read numLandmarks
60
+ const bytes1 = Buffer.allocUnsafe(cramContainerHeader1.maxLength);
61
+ await this.file.read(bytes1, 0, cramContainerHeader1.maxLength, position);
62
+ const header1 = parseItem(bytes1, cramContainerHeader1.parser);
63
+ const numLandmarksSize = itf8Size(header1.numLandmarks);
64
+ if (position + header1.length >= fileSize) {
65
+ console.warn(`${this.file}: container header at ${position} indicates that the container has length ${header1.length}, which extends beyond the length of the file. Skipping this container.`);
66
+ return undefined;
67
+ }
68
+ const bytes2 = Buffer.allocUnsafe(cramContainerHeader2.maxLength(header1.numLandmarks));
69
+ await this.file.read(bytes2, 0, cramContainerHeader2.maxLength(header1.numLandmarks), position + header1._size - numLandmarksSize);
70
+ const header2 = parseItem(bytes2, cramContainerHeader2.parser);
71
+ if (this.file.validateChecksums && header2.crc32 !== undefined) {
72
+ await this.file.checkCrc32(position, header1._size + header2._size - numLandmarksSize - 4, header2.crc32, `container header beginning at position ${position}`);
73
+ }
74
+ const completeHeader = Object.assign(header1, header2, {
75
+ _size: header1._size + header2._size - numLandmarksSize,
76
+ _endPosition: header1._size + header2._size - numLandmarksSize + position,
77
+ });
78
+ return completeHeader;
79
+ }
80
+ }
81
+ 'getHeader getCompressionHeaderBlock getCompressionScheme'
82
+ .split(' ')
83
+ .forEach(method => tinyMemoize(CramContainer, method));
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cramFile/container/index.js"],"names":[],"mappings":"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"}