@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,39 @@
1
+ export default class IndexedCramFile {
2
+ /**
3
+ *
4
+ * @param {object} args
5
+ * @param {CramFile} args.cram
6
+ * @param {Index-like} args.index object that supports getEntriesForRange(seqId,start,end) -> Promise[Array[index entries]]
7
+ * @param {number} [args.cacheSize] optional maximum number of CRAM records to cache. default 20,000
8
+ * @param {number} [args.fetchSizeLimit] optional maximum number of bytes to fetch in a single getRecordsForRange call. Default 3 MiB.
9
+ * @param {boolean} [args.checkSequenceMD5] - default true. if false, disables verifying the MD5
10
+ * checksum of the reference sequence underlying a slice. In some applications, this check can cause an inconvenient amount (many megabases) of sequences to be fetched.
11
+ */
12
+ constructor(args: {
13
+ cram: CramFile;
14
+ });
15
+ cram: CramFile;
16
+ index: any;
17
+ fetchSizeLimit: any;
18
+ /**
19
+ *
20
+ * @param {number} seq numeric ID of the reference sequence
21
+ * @param {number} start start of the range of interest. 1-based closed coordinates.
22
+ * @param {number} end end of the range of interest. 1-based closed coordinates.
23
+ * @returns {Promise[Array[CramRecord]]}
24
+ */
25
+ getRecordsForRange(seq: number, start: number, end: number, opts?: {}): Promise<any>[any[][CramRecord]];
26
+ getRecordsInSlice({ containerStart, sliceStart, sliceBytes }: {
27
+ containerStart: any;
28
+ sliceStart: any;
29
+ sliceBytes: any;
30
+ }, filterFunction: any): Promise<any>;
31
+ /**
32
+ *
33
+ * @param {number} seqId
34
+ * @returns {Promise} true if the CRAM file contains data for the given
35
+ * reference sequence numerical ID
36
+ */
37
+ hasDataForReferenceSequence(seqId: number): Promise<any>;
38
+ }
39
+ import CramFile from "./cramFile";
@@ -0,0 +1,155 @@
1
+ import { CramUnimplementedError, CramSizeLimitError } from './errors';
2
+ import CramFile from './cramFile';
3
+ export default class IndexedCramFile {
4
+ /**
5
+ *
6
+ * @param {object} args
7
+ * @param {CramFile} args.cram
8
+ * @param {Index-like} args.index object that supports getEntriesForRange(seqId,start,end) -> Promise[Array[index entries]]
9
+ * @param {number} [args.cacheSize] optional maximum number of CRAM records to cache. default 20,000
10
+ * @param {number} [args.fetchSizeLimit] optional maximum number of bytes to fetch in a single getRecordsForRange call. Default 3 MiB.
11
+ * @param {boolean} [args.checkSequenceMD5] - default true. if false, disables verifying the MD5
12
+ * checksum of the reference sequence underlying a slice. In some applications, this check can cause an inconvenient amount (many megabases) of sequences to be fetched.
13
+ */
14
+ constructor(args) {
15
+ // { cram, index, seqFetch /* fasta, fastaIndex */ }) {
16
+ if (args.cram) {
17
+ this.cram = args.cram;
18
+ }
19
+ else {
20
+ this.cram = new CramFile({
21
+ url: args.cramUrl,
22
+ path: args.cramPath,
23
+ filehandle: args.cramFilehandle,
24
+ seqFetch: args.seqFetch,
25
+ checkSequenceMD5: args.checkSequenceMD5,
26
+ cacheSize: args.cacheSize,
27
+ });
28
+ }
29
+ if (!(this.cram instanceof CramFile)) {
30
+ throw new Error('invalid arguments: no cramfile');
31
+ }
32
+ this.index = args.index;
33
+ if (!this.index.getEntriesForRange) {
34
+ throw new Error('invalid arguments: not an index');
35
+ }
36
+ this.fetchSizeLimit = args.fetchSizeLimit || 3000000;
37
+ }
38
+ /**
39
+ *
40
+ * @param {number} seq numeric ID of the reference sequence
41
+ * @param {number} start start of the range of interest. 1-based closed coordinates.
42
+ * @param {number} end end of the range of interest. 1-based closed coordinates.
43
+ * @returns {Promise[Array[CramRecord]]}
44
+ */
45
+ async getRecordsForRange(seq, start, end, opts = {}) {
46
+ opts.viewAsPairs = opts.viewAsPairs || false;
47
+ opts.pairAcrossChr = opts.pairAcrossChr || false;
48
+ opts.maxInsertSize = opts.maxInsertSize || 200000;
49
+ if (typeof seq === 'string') {
50
+ // TODO: support string reference sequence names somehow
51
+ throw new CramUnimplementedError('string sequence names not yet supported');
52
+ }
53
+ const seqId = seq;
54
+ const slices = await this.index.getEntriesForRange(seqId, start, end);
55
+ const totalSize = slices.map(s => s.sliceBytes).reduce((a, b) => a + b, 0);
56
+ if (totalSize > this.fetchSizeLimit) {
57
+ throw new CramSizeLimitError(`data size of ${totalSize.toLocaleString()} bytes exceeded fetch size limit of ${this.fetchSizeLimit.toLocaleString()} bytes`);
58
+ }
59
+ // TODO: do we need to merge or de-duplicate the blocks?
60
+ // fetch all the slices and parse the feature data
61
+ const filter = feature => feature.sequenceId === seq &&
62
+ feature.alignmentStart <= end &&
63
+ feature.alignmentStart + feature.lengthOnRef - 1 >= start;
64
+ const sliceResults = await Promise.all(slices.map(slice => this.getRecordsInSlice(slice, filter)));
65
+ let ret = Array.prototype.concat(...sliceResults);
66
+ if (opts.viewAsPairs) {
67
+ const readNames = {};
68
+ const readIds = {};
69
+ for (let i = 0; i < ret.length; i += 1) {
70
+ const name = ret[i].readName;
71
+ const id = ret[i].uniqueId;
72
+ if (!readNames[name]) {
73
+ readNames[name] = 0;
74
+ }
75
+ readNames[name] += 1;
76
+ readIds[id] = 1;
77
+ }
78
+ const unmatedPairs = {};
79
+ Object.entries(readNames).forEach(([k, v]) => {
80
+ if (v === 1) {
81
+ unmatedPairs[k] = true;
82
+ }
83
+ });
84
+ const matePromises = [];
85
+ for (let i = 0; i < ret.length; i += 1) {
86
+ const name = ret[i].readName;
87
+ if (unmatedPairs[name] &&
88
+ ret[i].mate &&
89
+ (ret[i].mate.sequenceId === seqId || opts.pairAcrossChr) &&
90
+ Math.abs(ret[i].alignmentStart - ret[i].mate.alignmentStart) <
91
+ opts.maxInsertSize) {
92
+ const mateSlices = this.index.getEntriesForRange(ret[i].mate.sequenceId, ret[i].mate.alignmentStart, ret[i].mate.alignmentStart + 1);
93
+ matePromises.push(mateSlices);
94
+ }
95
+ }
96
+ const mateBlocks = await Promise.all(matePromises);
97
+ let mateChunks = [];
98
+ for (let i = 0; i < mateBlocks.length; i += 1) {
99
+ mateChunks.push(...mateBlocks[i]);
100
+ }
101
+ // filter out duplicates
102
+ mateChunks = mateChunks
103
+ .sort((a, b) => a.toString().localeCompare(b.toString()))
104
+ .filter((item, pos, ary) => !pos || item.toString() !== ary[pos - 1].toString());
105
+ const mateRecordPromises = [];
106
+ const mateFeatPromises = [];
107
+ const mateTotalSize = mateChunks
108
+ .map(s => s.sliceBytes)
109
+ .reduce((a, b) => a + b, 0);
110
+ if (mateTotalSize > this.fetchSizeLimit) {
111
+ throw new Error(`mate data size of ${mateTotalSize.toLocaleString()} bytes exceeded fetch size limit of ${this.fetchSizeLimit.toLocaleString()} bytes`);
112
+ }
113
+ mateChunks.forEach(c => {
114
+ let recordPromise = this.cram.featureCache.get(c.toString());
115
+ if (!recordPromise) {
116
+ recordPromise = this.getRecordsInSlice(c, () => true);
117
+ this.cram.featureCache.set(c.toString(), recordPromise);
118
+ }
119
+ mateRecordPromises.push(recordPromise);
120
+ const featPromise = recordPromise.then(feats => {
121
+ const mateRecs = [];
122
+ for (let i = 0; i < feats.length; i += 1) {
123
+ const feature = feats[i];
124
+ if (unmatedPairs[feature.readName] && !readIds[feature.uniqueId]) {
125
+ mateRecs.push(feature);
126
+ }
127
+ }
128
+ return mateRecs;
129
+ });
130
+ mateFeatPromises.push(featPromise);
131
+ });
132
+ const newMateFeats = await Promise.all(mateFeatPromises);
133
+ if (newMateFeats.length) {
134
+ const newMates = newMateFeats.reduce((result, current) => result.concat(current));
135
+ ret = ret.concat(newMates);
136
+ }
137
+ }
138
+ return ret;
139
+ }
140
+ getRecordsInSlice({ containerStart, sliceStart, sliceBytes }, filterFunction) {
141
+ const container = this.cram.getContainerAtPosition(containerStart);
142
+ const slice = container.getSlice(sliceStart, sliceBytes);
143
+ return slice.getRecords(filterFunction);
144
+ }
145
+ /**
146
+ *
147
+ * @param {number} seqId
148
+ * @returns {Promise} true if the CRAM file contains data for the given
149
+ * reference sequence numerical ID
150
+ */
151
+ hasDataForReferenceSequence(seqId) {
152
+ return this.index.hasDataForReferenceSequence(seqId);
153
+ }
154
+ }
155
+ //# sourceMappingURL=indexedCramFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedCramFile.js","sourceRoot":"","sources":["../src/indexedCramFile.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export default class BufferCache {
2
+ constructor({ fetch, size, chunkSize }: {
3
+ fetch: any;
4
+ size?: number | undefined;
5
+ chunkSize?: number | undefined;
6
+ });
7
+ fetch: any;
8
+ chunkSize: number;
9
+ lruCache: any;
10
+ get(outputBuffer: any, offset: any, length: any, position: any): Promise<void>;
11
+ _getChunk(chunkNumber: any): any;
12
+ }
@@ -0,0 +1,54 @@
1
+ import LRU from 'quick-lru';
2
+ export default class BufferCache {
3
+ constructor({ fetch, size = 10000000, chunkSize = 32768 }) {
4
+ if (!fetch) {
5
+ throw new Error('fetch function required');
6
+ }
7
+ this.fetch = fetch;
8
+ this.chunkSize = chunkSize;
9
+ this.lruCache = new LRU({ maxSize: Math.floor(size / chunkSize) });
10
+ }
11
+ async get(outputBuffer, offset, length, position) {
12
+ if (outputBuffer.length < offset + length) {
13
+ throw new Error('output buffer not big enough for request');
14
+ }
15
+ // calculate the list of chunks involved in this fetch
16
+ const firstChunk = Math.floor(position / this.chunkSize);
17
+ const lastChunk = Math.floor((position + length) / this.chunkSize);
18
+ // fetch them all as necessary
19
+ const fetches = new Array(lastChunk - firstChunk + 1);
20
+ for (let chunk = firstChunk; chunk <= lastChunk; chunk += 1) {
21
+ fetches[chunk - firstChunk] = this._getChunk(chunk).then(data => ({
22
+ data,
23
+ chunkNumber: chunk,
24
+ }));
25
+ }
26
+ // stitch together the response buffer using them
27
+ const chunks = await Promise.all(fetches);
28
+ const chunksOffset = position - chunks[0].chunkNumber * this.chunkSize;
29
+ chunks.forEach(({ data, chunkNumber }) => {
30
+ const chunkPositionStart = chunkNumber * this.chunkSize;
31
+ let copyStart = 0;
32
+ let copyEnd = this.chunkSize;
33
+ let copyOffset = offset + (chunkNumber - firstChunk) * this.chunkSize - chunksOffset;
34
+ if (chunkNumber === firstChunk) {
35
+ copyOffset = offset;
36
+ copyStart = chunksOffset;
37
+ }
38
+ if (chunkNumber === lastChunk) {
39
+ copyEnd = position + length - chunkPositionStart;
40
+ }
41
+ data.copy(outputBuffer, copyOffset, copyStart, copyEnd);
42
+ });
43
+ }
44
+ _getChunk(chunkNumber) {
45
+ const cachedPromise = this.lruCache.get(chunkNumber);
46
+ if (cachedPromise) {
47
+ return cachedPromise;
48
+ }
49
+ const freshPromise = this.fetch(chunkNumber * this.chunkSize, this.chunkSize);
50
+ this.lruCache.set(chunkNumber, freshPromise);
51
+ return freshPromise;
52
+ }
53
+ }
54
+ //# sourceMappingURL=bufferCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferCache.js","sourceRoot":"","sources":["../../src/io/bufferCache.js"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,WAAW,CAAA;AAE3B,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B,YAAY,EAAE,KAAK,EAAE,IAAI,GAAG,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE;QACvD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;SAC3C;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ;QAC9C,IAAI,YAAY,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;SAC5D;QAED,sDAAsD;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;QAElE,8BAA8B;QAC9B,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC,CAAA;QACrD,KAAK,IAAI,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,CAAC,EAAE;YAC3D,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChE,IAAI;gBACJ,WAAW,EAAE,KAAK;aACnB,CAAC,CAAC,CAAA;SACJ;QAED,iDAAiD;QACjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAA;QACtE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;YACvC,MAAM,kBAAkB,GAAG,WAAW,GAAG,IAAI,CAAC,SAAS,CAAA;YACvD,IAAI,SAAS,GAAG,CAAC,CAAA;YACjB,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAA;YAC5B,IAAI,UAAU,GACZ,MAAM,GAAG,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,YAAY,CAAA;YAErE,IAAI,WAAW,KAAK,UAAU,EAAE;gBAC9B,UAAU,GAAG,MAAM,CAAA;gBACnB,SAAS,GAAG,YAAY,CAAA;aACzB;YACD,IAAI,WAAW,KAAK,SAAS,EAAE;gBAC7B,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,kBAAkB,CAAA;aACjD;YAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS,CAAC,WAAW;QACnB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACpD,IAAI,aAAa,EAAE;YACjB,OAAO,aAAa,CAAA;SACrB;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAC7B,WAAW,GAAG,IAAI,CAAC,SAAS,EAC5B,IAAI,CAAC,SAAS,CACf,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QAC5C,OAAO,YAAY,CAAA;IACrB,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import LocalFile from "./localFile";
2
+ import RemoteFile from "./remoteFile";
3
+ export function fromUrl(source: any): RemoteFile | LocalFile;
4
+ export function open(maybeUrl: any, maybePath: any, maybeFilehandle: any): any;
5
+ export { LocalFile, RemoteFile };
@@ -0,0 +1,24 @@
1
+ import url from 'url';
2
+ import RemoteFile from './remoteFile';
3
+ import LocalFile from './localFile';
4
+ function fromUrl(source) {
5
+ const { protocol, pathname } = url.parse(source);
6
+ if (protocol === 'file:') {
7
+ return new LocalFile(unescape(pathname));
8
+ }
9
+ return new RemoteFile(source);
10
+ }
11
+ function open(maybeUrl, maybePath, maybeFilehandle) {
12
+ if (maybeFilehandle) {
13
+ return maybeFilehandle;
14
+ }
15
+ if (maybeUrl) {
16
+ return fromUrl(maybeUrl);
17
+ }
18
+ if (maybePath) {
19
+ return new LocalFile(maybePath);
20
+ }
21
+ throw new Error('no url, path, or filehandle provided, cannot open');
22
+ }
23
+ export { LocalFile, RemoteFile, fromUrl, open };
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/io/index.js"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,SAAS,MAAM,aAAa,CAAA;AAEnC,SAAS,OAAO,CAAC,MAAM;IACrB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAChD,IAAI,QAAQ,KAAK,OAAO,EAAE;QACxB,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;KACzC;IACD,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,eAAe;IAChD,IAAI,eAAe,EAAE;QACnB,OAAO,eAAe,CAAA;KACvB;IACD,IAAI,QAAQ,EAAE;QACZ,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAA;KACzB;IACD,IAAI,SAAS,EAAE;QACb,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,CAAA;KAChC;IACD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;AACtE,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA"}
@@ -0,0 +1,10 @@
1
+ export default class LocalFile {
2
+ constructor(source: any);
3
+ position: number;
4
+ filename: any;
5
+ fd: any;
6
+ read(buffer: any, offset: number | undefined, length: any, position: any): Promise<any>;
7
+ readFile(): Promise<any>;
8
+ stat(): Promise<any>;
9
+ _stat: any;
10
+ }
@@ -0,0 +1,31 @@
1
+ import { promisify } from 'es6-promisify';
2
+ import fs from 'fs';
3
+ const fsOpen = fs && promisify(fs.open);
4
+ const fsRead = fs && promisify(fs.read);
5
+ const fsFStat = fs && promisify(fs.fstat);
6
+ const fsReadFile = fs && promisify(fs.readFile);
7
+ export default class LocalFile {
8
+ constructor(source) {
9
+ this.position = 0;
10
+ this.filename = source;
11
+ this.fd = fsOpen(this.filename, 'r');
12
+ }
13
+ async read(buffer, offset = 0, length, position) {
14
+ let readPosition = position;
15
+ if (readPosition === null) {
16
+ readPosition = this.position;
17
+ this.position += length;
18
+ }
19
+ return fsRead(await this.fd, buffer, offset, length, position);
20
+ }
21
+ async readFile() {
22
+ return fsReadFile(await this.fd);
23
+ }
24
+ async stat() {
25
+ if (!this._stat) {
26
+ this._stat = await fsFStat(await this.fd);
27
+ }
28
+ return this._stat;
29
+ }
30
+ }
31
+ //# sourceMappingURL=localFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localFile.js","sourceRoot":"","sources":["../../src/io/localFile.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,MAAM,MAAM,GAAG,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;AACvC,MAAM,MAAM,GAAG,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;AACvC,MAAM,OAAO,GAAG,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;AACzC,MAAM,UAAU,GAAG,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;AAE/C,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,YAAY,MAAM;QAChB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;QACtB,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ;QAC7C,IAAI,YAAY,GAAG,QAAQ,CAAA;QAC3B,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC5B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAA;SACxB;QACD,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAA;SAC1C;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ export default class RemoteFile {
2
+ constructor(source: any);
3
+ position: number;
4
+ url: any;
5
+ cache: BufferCache;
6
+ _fetch(position: any, length: any): Promise<Buffer>;
7
+ _stat: {
8
+ size: number;
9
+ } | undefined;
10
+ read(buffer: any, offset?: number, length?: number, position?: number): Promise<void>;
11
+ readFile(): Promise<Buffer>;
12
+ stat(): Promise<{
13
+ size: number;
14
+ }>;
15
+ }
16
+ import BufferCache from "./bufferCache";
@@ -0,0 +1,64 @@
1
+ import fetch from 'cross-fetch';
2
+ import BufferCache from './bufferCache';
3
+ export default class RemoteFile {
4
+ constructor(source) {
5
+ this.position = 0;
6
+ this.url = source;
7
+ this.cache = new BufferCache({
8
+ fetch: (start, length) => this._fetch(start, length),
9
+ });
10
+ }
11
+ async _fetch(position, length) {
12
+ const headers = {};
13
+ if (length < Infinity) {
14
+ headers.range = `bytes=${position}-${position + length}`;
15
+ }
16
+ else if (length === Infinity && position !== 0) {
17
+ headers.range = `bytes=${position}-`;
18
+ }
19
+ const response = await fetch(this.url, {
20
+ method: 'GET',
21
+ headers,
22
+ redirect: 'follow',
23
+ mode: 'cors',
24
+ });
25
+ if ((response.status === 200 && position === 0) ||
26
+ response.status === 206) {
27
+ const nodeBuffer = Buffer.from(await response.arrayBuffer());
28
+ // try to parse out the size of the remote file
29
+ const sizeMatch = /\/(\d+)$/.exec(response.headers.get('content-range'));
30
+ if (sizeMatch[1]) {
31
+ this._stat = { size: parseInt(sizeMatch[1], 10) };
32
+ }
33
+ return nodeBuffer;
34
+ }
35
+ throw new Error(`HTTP ${response.status} fetching ${this.url}`);
36
+ }
37
+ read(buffer, offset = 0, length = Infinity, position = 0) {
38
+ let readPosition = position;
39
+ if (readPosition === null) {
40
+ readPosition = this.position;
41
+ this.position += length;
42
+ }
43
+ return this.cache.get(buffer, offset, length, position);
44
+ }
45
+ async readFile() {
46
+ const response = await fetch(this.url, {
47
+ method: 'GET',
48
+ redirect: 'follow',
49
+ mode: 'cors',
50
+ });
51
+ return Buffer.from(await response.arrayBuffer());
52
+ }
53
+ async stat() {
54
+ if (!this._stat) {
55
+ const buf = Buffer.allocUnsafe(10);
56
+ await this.read(buf, 0, 10, 0);
57
+ if (!this._stat) {
58
+ throw new Error(`unable to determine size of file at ${this.url}`);
59
+ }
60
+ }
61
+ return this._stat;
62
+ }
63
+ }
64
+ //# sourceMappingURL=remoteFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../../src/io/remoteFile.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export const TF_SHIFT: 12;
2
+ export const TOTFREQ: number;
3
+ export const RANS_BYTE_L: number;
@@ -0,0 +1,5 @@
1
+ const TF_SHIFT = 12;
2
+ const TOTFREQ = 1 << TF_SHIFT;
3
+ const RANS_BYTE_L = 1 << 23;
4
+ export { TF_SHIFT, TOTFREQ, RANS_BYTE_L };
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/rans/constants.js"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,EAAE,CAAA;AACnB,MAAM,OAAO,GAAG,CAAC,IAAI,QAAQ,CAAA;AAC7B,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,CAAA;AAE3B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1 @@
1
+ export default function uncompress(input: any, D: any, syms: any, out: any): void;
@@ -0,0 +1,67 @@
1
+ import { CramMalformedError } from '../errors';
2
+ import { TF_SHIFT } from './constants';
3
+ import Decoding from './decoding';
4
+ export default function uncompress(
5
+ /* ByteBuffer */ input,
6
+ /* Decoding.AriDecoder */ D,
7
+ /* Decoding.Symbol[] */ syms,
8
+ /* ByteBuffer */ out) {
9
+ let rans0 = input.getInt();
10
+ let rans1 = input.getInt();
11
+ let rans2 = input.getInt();
12
+ let rans3 = input.getInt();
13
+ const /* int */ outputSize = out.remaining();
14
+ const /* int */ outputEnd = outputSize & ~3;
15
+ for (let i = 0; i < outputEnd; i += 4) {
16
+ const /* byte */ c0 = D.R[Decoding.get(rans0, TF_SHIFT)];
17
+ const /* byte */ c1 = D.R[Decoding.get(rans1, TF_SHIFT)];
18
+ const /* byte */ c2 = D.R[Decoding.get(rans2, TF_SHIFT)];
19
+ const /* byte */ c3 = D.R[Decoding.get(rans3, TF_SHIFT)];
20
+ out.putAt(i, c0);
21
+ out.putAt(i + 1, c1);
22
+ out.putAt(i + 2, c2);
23
+ out.putAt(i + 3, c3);
24
+ rans0 = Decoding.advanceSymbolStep(rans0, syms[0xff & c0], TF_SHIFT);
25
+ rans1 = Decoding.advanceSymbolStep(rans1, syms[0xff & c1], TF_SHIFT);
26
+ rans2 = Decoding.advanceSymbolStep(rans2, syms[0xff & c2], TF_SHIFT);
27
+ rans3 = Decoding.advanceSymbolStep(rans3, syms[0xff & c3], TF_SHIFT);
28
+ rans0 = Decoding.renormalize(rans0, input);
29
+ rans1 = Decoding.renormalize(rans1, input);
30
+ rans2 = Decoding.renormalize(rans2, input);
31
+ rans3 = Decoding.renormalize(rans3, input);
32
+ }
33
+ out.setPosition(outputEnd);
34
+ let /* byte */ c;
35
+ switch (outputSize & 3) {
36
+ case 0:
37
+ break;
38
+ case 1:
39
+ c = D.R[Decoding.get(rans0, TF_SHIFT)];
40
+ Decoding.advanceSymbol(rans0, input, syms[0xff & c], TF_SHIFT);
41
+ out.put(c);
42
+ break;
43
+ case 2:
44
+ c = D.R[Decoding.get(rans0, TF_SHIFT)];
45
+ Decoding.advanceSymbol(rans0, input, syms[0xff & c], TF_SHIFT);
46
+ out.put(c);
47
+ c = D.R[Decoding.get(rans1, TF_SHIFT)];
48
+ Decoding.advanceSymbol(rans1, input, syms[0xff & c], TF_SHIFT);
49
+ out.put(c);
50
+ break;
51
+ case 3:
52
+ c = D.R[Decoding.get(rans0, TF_SHIFT)];
53
+ Decoding.advanceSymbol(rans0, input, syms[0xff & c], TF_SHIFT);
54
+ out.put(c);
55
+ c = D.R[Decoding.get(rans1, TF_SHIFT)];
56
+ Decoding.advanceSymbol(rans1, input, syms[0xff & c], TF_SHIFT);
57
+ out.put(c);
58
+ c = D.R[Decoding.get(rans2, TF_SHIFT)];
59
+ Decoding.advanceSymbol(rans2, input, syms[0xff & c], TF_SHIFT);
60
+ out.put(c);
61
+ break;
62
+ default:
63
+ throw new CramMalformedError('invalid output size encountered during rANS decoding');
64
+ }
65
+ out.setPosition(0);
66
+ }
67
+ //# sourceMappingURL=d04.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d04.js","sourceRoot":"","sources":["../../src/rans/d04.js"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export default function uncompress(input: any, output: any, D: any, syms: any): void;
@@ -0,0 +1,52 @@
1
+ import { TF_SHIFT } from './constants';
2
+ import Decoding from './decoding';
3
+ export default function uncompress(
4
+ /* ByteBuffer */ input,
5
+ /* ByteBuffer */ output,
6
+ /* Decoding.AriDecoder[] */ D,
7
+ /* Decoding.Symbol[][] */ syms) {
8
+ const /* int */ outputSize = output.remaining();
9
+ let rans0 = input.getInt();
10
+ let rans1 = input.getInt();
11
+ let rans2 = input.getInt();
12
+ let rans7 = input.getInt();
13
+ const /* int */ isz4 = outputSize >> 2;
14
+ let /* int */ i0 = 0;
15
+ let /* int */ i1 = isz4;
16
+ let /* int */ i2 = 2 * isz4;
17
+ let /* int */ i7 = 3 * isz4;
18
+ let /* int */ l0 = 0;
19
+ let /* int */ l1 = 0;
20
+ let /* int */ l2 = 0;
21
+ let /* int */ l7 = 0;
22
+ for (; i0 < isz4; i0 += 1, i1 += 1, i2 += 1, i7 += 1) {
23
+ const /* int */ c0 = 0xff & D[l0].R[Decoding.get(rans0, TF_SHIFT)];
24
+ const /* int */ c1 = 0xff & D[l1].R[Decoding.get(rans1, TF_SHIFT)];
25
+ const /* int */ c2 = 0xff & D[l2].R[Decoding.get(rans2, TF_SHIFT)];
26
+ const /* int */ c7 = 0xff & D[l7].R[Decoding.get(rans7, TF_SHIFT)];
27
+ output.putAt(i0, c0);
28
+ output.putAt(i1, c1);
29
+ output.putAt(i2, c2);
30
+ output.putAt(i7, c7);
31
+ rans0 = Decoding.advanceSymbolStep(rans0, syms[l0][c0], TF_SHIFT);
32
+ rans1 = Decoding.advanceSymbolStep(rans1, syms[l1][c1], TF_SHIFT);
33
+ rans2 = Decoding.advanceSymbolStep(rans2, syms[l2][c2], TF_SHIFT);
34
+ rans7 = Decoding.advanceSymbolStep(rans7, syms[l7][c7], TF_SHIFT);
35
+ rans0 = Decoding.renormalize(rans0, input);
36
+ rans1 = Decoding.renormalize(rans1, input);
37
+ rans2 = Decoding.renormalize(rans2, input);
38
+ rans7 = Decoding.renormalize(rans7, input);
39
+ l0 = c0;
40
+ l1 = c1;
41
+ l2 = c2;
42
+ l7 = c7;
43
+ }
44
+ // Remainder
45
+ for (; i7 < outputSize; i7 += 1) {
46
+ const /* int */ c7 = 0xff & D[l7].R[Decoding.get(rans7, TF_SHIFT)];
47
+ output.putAt(i7, c7);
48
+ rans7 = Decoding.advanceSymbol(rans7, input, syms[l7][c7], TF_SHIFT);
49
+ l7 = c7;
50
+ }
51
+ }
52
+ //# sourceMappingURL=d14.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d14.js","sourceRoot":"","sources":["../../src/rans/d14.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export default Decode;
2
+ declare namespace Decode {
3
+ export { FC };
4
+ export { AriDecoder };
5
+ export { Symbol };
6
+ export { symbolInit };
7
+ export { advanceStep };
8
+ export { advanceSymbolStep };
9
+ export { get };
10
+ export { advanceSymbol };
11
+ export { renormalize };
12
+ }
13
+ declare class FC {
14
+ F: any;
15
+ C: any;
16
+ }
17
+ declare class AriDecoder {
18
+ fc: any[];
19
+ R: any;
20
+ }
21
+ declare class Symbol {
22
+ start: any;
23
+ freq: any;
24
+ }
25
+ declare function symbolInit(sym: any, start: any, freq: any): void;
26
+ declare function advanceStep(r: any, start: any, freq: any, scaleBits: any): number;
27
+ declare function advanceSymbolStep(r: any, sym: any, scaleBits: any): number;
28
+ declare function get(r: any, scaleBits: any): number;
29
+ declare function advanceSymbol(r: any, pptr: any, sym: any, scaleBits: any): any;
30
+ declare function renormalize(r: any, pptr: any): any;