@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
@@ -1,290 +1,176 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
-
5
- var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
6
-
7
- var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
8
-
9
- var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
10
-
11
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
12
-
13
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
14
-
15
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
16
-
17
- var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
18
-
19
- var _context7;
20
-
21
- var _require = require('../../errors'),
22
- CramMalformedError = _require.CramMalformedError;
23
-
24
- var _require2 = require('../util'),
25
- itf8Size = _require2.itf8Size,
26
- parseItem = _require2.parseItem,
27
- tinyMemoize = _require2.tinyMemoize;
28
-
29
- var CramSlice = require('../slice');
30
-
31
- var CramContainerCompressionScheme = require('./compressionScheme');
32
-
33
- var CramContainer =
34
- /*#__PURE__*/
35
- function () {
36
- function CramContainer(cramFile, position) {
37
- (0, _classCallCheck2.default)(this, CramContainer);
38
- // cram file this container comes from
39
- this.file = cramFile; // position of this container in the file
40
-
41
- this.filePosition = position; // console.log(`container: ${this.filePosition}`)
42
- } // memoize
43
-
44
-
45
- (0, _createClass2.default)(CramContainer, [{
46
- key: "getHeader",
47
- value: function getHeader() {
48
- return this._readContainerHeader(this.filePosition);
49
- } // memoize
50
-
51
- }, {
52
- key: "getCompressionHeaderBlock",
53
- value: function () {
54
- var _getCompressionHeaderBlock = (0, _asyncToGenerator2.default)(
55
- /*#__PURE__*/
56
- _regenerator.default.mark(function _callee() {
57
- var containerHeader, sectionParsers, block, content;
58
- return _regenerator.default.wrap(function _callee$(_context) {
59
- while (1) {
60
- switch (_context.prev = _context.next) {
61
- case 0:
62
- _context.next = 2;
63
- return this.getHeader();
64
-
65
- case 2:
66
- containerHeader = _context.sent;
67
-
68
- if (containerHeader.numRecords) {
69
- _context.next = 5;
70
- break;
71
- }
72
-
73
- return _context.abrupt("return", null);
74
-
75
- case 5:
76
- _context.next = 7;
77
- return this.file.getSectionParsers();
78
-
79
- case 7:
80
- sectionParsers = _context.sent;
81
- _context.next = 10;
82
- return this.getFirstBlock();
83
-
84
- case 10:
85
- block = _context.sent;
86
-
87
- if (!(block.contentType !== 'COMPRESSION_HEADER')) {
88
- _context.next = 13;
89
- break;
90
- }
91
-
92
- throw new CramMalformedError("invalid content type ".concat(block.contentType, " in what is supposed to be the compression header block"));
93
-
94
- case 13:
95
- content = parseItem(block.content, sectionParsers.cramCompressionHeader.parser, 0, block.contentPosition);
96
- block.content = content;
97
- return _context.abrupt("return", block);
98
-
99
- case 16:
100
- case "end":
101
- return _context.stop();
102
- }
103
- }
104
- }, _callee, this);
105
- }));
106
-
107
- function getCompressionHeaderBlock() {
108
- return _getCompressionHeaderBlock.apply(this, arguments);
109
- }
110
-
111
- return getCompressionHeaderBlock;
112
- }()
113
- }, {
114
- key: "getFirstBlock",
115
- value: function () {
116
- var _getFirstBlock = (0, _asyncToGenerator2.default)(
117
- /*#__PURE__*/
118
- _regenerator.default.mark(function _callee2() {
119
- var containerHeader;
120
- return _regenerator.default.wrap(function _callee2$(_context2) {
121
- while (1) {
122
- switch (_context2.prev = _context2.next) {
123
- case 0:
124
- _context2.next = 2;
125
- return this.getHeader();
126
-
127
- case 2:
128
- containerHeader = _context2.sent;
129
- return _context2.abrupt("return", this.file.readBlock(containerHeader._endPosition));
130
-
131
- case 4:
132
- case "end":
133
- return _context2.stop();
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
134
32
  }
135
- }
136
- }, _callee2, this);
137
- }));
138
-
139
- function getFirstBlock() {
140
- return _getFirstBlock.apply(this, arguments);
141
- }
142
-
143
- return getFirstBlock;
144
- }() // parses the compression header data into a CramContainerCompressionScheme object
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ var errors_1 = require("../../errors");
43
+ var util_1 = require("../util");
44
+ var slice_1 = __importDefault(require("../slice"));
45
+ var compressionScheme_1 = __importDefault(require("./compressionScheme"));
46
+ var CramContainer = /** @class */ (function () {
47
+ function CramContainer(cramFile, position) {
48
+ // cram file this container comes from
49
+ this.file = cramFile;
50
+ // position of this container in the file
51
+ this.filePosition = position;
52
+ // console.log(`container: ${this.filePosition}`)
53
+ }
145
54
  // memoize
146
-
147
- }, {
148
- key: "getCompressionScheme",
149
- value: function () {
150
- var _getCompressionScheme = (0, _asyncToGenerator2.default)(
151
- /*#__PURE__*/
152
- _regenerator.default.mark(function _callee3() {
153
- var header;
154
- return _regenerator.default.wrap(function _callee3$(_context3) {
155
- while (1) {
156
- switch (_context3.prev = _context3.next) {
157
- case 0:
158
- _context3.next = 2;
159
- return this.getCompressionHeaderBlock();
160
-
161
- case 2:
162
- header = _context3.sent;
163
-
164
- if (header) {
165
- _context3.next = 5;
166
- break;
55
+ CramContainer.prototype.getHeader = function () {
56
+ return this._readContainerHeader(this.filePosition);
57
+ };
58
+ // memoize
59
+ CramContainer.prototype.getCompressionHeaderBlock = function () {
60
+ return __awaiter(this, void 0, void 0, function () {
61
+ var containerHeader, sectionParsers, block, content;
62
+ return __generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0: return [4 /*yield*/, this.getHeader()
65
+ // if there are no records in the container, there will be no compression header
66
+ ];
67
+ case 1:
68
+ containerHeader = _a.sent();
69
+ // if there are no records in the container, there will be no compression header
70
+ if (!containerHeader.numRecords) {
71
+ return [2 /*return*/, null];
72
+ }
73
+ return [4 /*yield*/, this.file.getSectionParsers()];
74
+ case 2:
75
+ sectionParsers = _a.sent();
76
+ return [4 /*yield*/, this.getFirstBlock()];
77
+ case 3:
78
+ block = _a.sent();
79
+ if (block.contentType !== 'COMPRESSION_HEADER') {
80
+ throw new errors_1.CramMalformedError("invalid content type ".concat(block.contentType, " in what is supposed to be the compression header block"));
81
+ }
82
+ content = (0, util_1.parseItem)(block.content, sectionParsers.cramCompressionHeader.parser, 0, block.contentPosition);
83
+ block.content = content;
84
+ return [2 /*return*/, block];
167
85
  }
168
-
169
- return _context3.abrupt("return", undefined);
170
-
171
- case 5:
172
- return _context3.abrupt("return", new CramContainerCompressionScheme(header.content));
173
-
174
- case 6:
175
- case "end":
176
- return _context3.stop();
177
- }
178
- }
179
- }, _callee3, this);
180
- }));
181
-
182
- function getCompressionScheme() {
183
- return _getCompressionScheme.apply(this, arguments);
184
- }
185
-
186
- return getCompressionScheme;
187
- }()
188
- }, {
189
- key: "getSlice",
190
- value: function getSlice(slicePosition, sliceSize) {
191
- // note: slicePosition is relative to the end of the container header
192
- // TODO: perhaps we should cache slices?
193
- return new CramSlice(this, slicePosition, sliceSize);
194
- }
195
- }, {
196
- key: "_readContainerHeader",
197
- value: function () {
198
- var _readContainerHeader2 = (0, _asyncToGenerator2.default)(
199
- /*#__PURE__*/
200
- _regenerator.default.mark(function _callee4(position) {
201
- var sectionParsers, cramContainerHeader1, cramContainerHeader2, _ref, fileSize, bytes1, header1, numLandmarksSize, _context4, _context5, bytes2, header2, completeHeader;
202
-
203
- return _regenerator.default.wrap(function _callee4$(_context6) {
204
- while (1) {
205
- switch (_context6.prev = _context6.next) {
206
- case 0:
207
- _context6.next = 2;
208
- return this.file.getSectionParsers();
209
-
210
- case 2:
211
- sectionParsers = _context6.sent;
212
- cramContainerHeader1 = sectionParsers.cramContainerHeader1, cramContainerHeader2 = sectionParsers.cramContainerHeader2;
213
- _context6.next = 6;
214
- return this.file.stat();
215
-
216
- case 6:
217
- _ref = _context6.sent;
218
- fileSize = _ref.size;
219
-
220
- if (!(position >= fileSize)) {
221
- _context6.next = 10;
222
- break;
86
+ });
87
+ });
88
+ };
89
+ CramContainer.prototype.getFirstBlock = function () {
90
+ return __awaiter(this, void 0, void 0, function () {
91
+ var containerHeader;
92
+ return __generator(this, function (_a) {
93
+ switch (_a.label) {
94
+ case 0: return [4 /*yield*/, this.getHeader()];
95
+ case 1:
96
+ containerHeader = _a.sent();
97
+ return [2 /*return*/, this.file.readBlock(containerHeader._endPosition)];
223
98
  }
224
-
225
- return _context6.abrupt("return", undefined);
226
-
227
- case 10:
228
- // parse the container header. do it in 2 pieces because you cannot tell
229
- // how much to buffer until you read numLandmarks
230
- bytes1 = Buffer.allocUnsafe(cramContainerHeader1.maxLength);
231
- _context6.next = 13;
232
- return this.file.read(bytes1, 0, cramContainerHeader1.maxLength, position);
233
-
234
- case 13:
235
- header1 = parseItem(bytes1, cramContainerHeader1.parser);
236
- numLandmarksSize = itf8Size(header1.numLandmarks);
237
-
238
- if (!(position + header1.length >= fileSize)) {
239
- _context6.next = 18;
240
- break;
99
+ });
100
+ });
101
+ };
102
+ // parses the compression header data into a CramContainerCompressionScheme object
103
+ // memoize
104
+ CramContainer.prototype.getCompressionScheme = function () {
105
+ return __awaiter(this, void 0, void 0, function () {
106
+ var header;
107
+ return __generator(this, function (_a) {
108
+ switch (_a.label) {
109
+ case 0: return [4 /*yield*/, this.getCompressionHeaderBlock()];
110
+ case 1:
111
+ header = _a.sent();
112
+ if (!header) {
113
+ return [2 /*return*/, undefined];
114
+ }
115
+ return [2 /*return*/, new compressionScheme_1.default(header.content)];
241
116
  }
242
-
243
- console.warn((0, _concat.default)(_context4 = (0, _concat.default)(_context5 = "".concat(this.file, ": container header at ")).call(_context5, position, " indicates that the container has length ")).call(_context4, header1.length, ", which extends beyond the length of the file. Skipping this container."));
244
- return _context6.abrupt("return", undefined);
245
-
246
- case 18:
247
- bytes2 = Buffer.allocUnsafe(cramContainerHeader2.maxLength(header1.numLandmarks));
248
- _context6.next = 21;
249
- return this.file.read(bytes2, 0, cramContainerHeader2.maxLength(header1.numLandmarks), position + header1._size - numLandmarksSize);
250
-
251
- case 21:
252
- header2 = parseItem(bytes2, cramContainerHeader2.parser);
253
-
254
- if (!(this.file.validateChecksums && header2.crc32 !== undefined)) {
255
- _context6.next = 25;
256
- break;
117
+ });
118
+ });
119
+ };
120
+ CramContainer.prototype.getSlice = function (slicePosition, sliceSize) {
121
+ // note: slicePosition is relative to the end of the container header
122
+ // TODO: perhaps we should cache slices?
123
+ return new slice_1.default(this, slicePosition, sliceSize);
124
+ };
125
+ CramContainer.prototype._readContainerHeader = function (position) {
126
+ return __awaiter(this, void 0, void 0, function () {
127
+ var sectionParsers, cramContainerHeader1, cramContainerHeader2, fileSize, bytes1, header1, numLandmarksSize, bytes2, header2, completeHeader;
128
+ return __generator(this, function (_a) {
129
+ switch (_a.label) {
130
+ case 0: return [4 /*yield*/, this.file.getSectionParsers()];
131
+ case 1:
132
+ sectionParsers = _a.sent();
133
+ cramContainerHeader1 = sectionParsers.cramContainerHeader1, cramContainerHeader2 = sectionParsers.cramContainerHeader2;
134
+ return [4 /*yield*/, this.file.stat()];
135
+ case 2:
136
+ fileSize = (_a.sent()).size;
137
+ if (position >= fileSize) {
138
+ return [2 /*return*/, undefined];
139
+ }
140
+ bytes1 = Buffer.allocUnsafe(cramContainerHeader1.maxLength);
141
+ return [4 /*yield*/, this.file.read(bytes1, 0, cramContainerHeader1.maxLength, position)];
142
+ case 3:
143
+ _a.sent();
144
+ header1 = (0, util_1.parseItem)(bytes1, cramContainerHeader1.parser);
145
+ numLandmarksSize = (0, util_1.itf8Size)(header1.numLandmarks);
146
+ if (position + header1.length >= fileSize) {
147
+ console.warn("".concat(this.file, ": container header at ").concat(position, " indicates that the container has length ").concat(header1.length, ", which extends beyond the length of the file. Skipping this container."));
148
+ return [2 /*return*/, undefined];
149
+ }
150
+ bytes2 = Buffer.allocUnsafe(cramContainerHeader2.maxLength(header1.numLandmarks));
151
+ return [4 /*yield*/, this.file.read(bytes2, 0, cramContainerHeader2.maxLength(header1.numLandmarks), position + header1._size - numLandmarksSize)];
152
+ case 4:
153
+ _a.sent();
154
+ header2 = (0, util_1.parseItem)(bytes2, cramContainerHeader2.parser);
155
+ if (!(this.file.validateChecksums && header2.crc32 !== undefined)) return [3 /*break*/, 6];
156
+ return [4 /*yield*/, this.file.checkCrc32(position, header1._size + header2._size - numLandmarksSize - 4, header2.crc32, "container header beginning at position ".concat(position))];
157
+ case 5:
158
+ _a.sent();
159
+ _a.label = 6;
160
+ case 6:
161
+ completeHeader = Object.assign(header1, header2, {
162
+ _size: header1._size + header2._size - numLandmarksSize,
163
+ _endPosition: header1._size + header2._size - numLandmarksSize + position,
164
+ });
165
+ return [2 /*return*/, completeHeader];
257
166
  }
258
-
259
- _context6.next = 25;
260
- return this.file.checkCrc32(position, header1._size + header2._size - numLandmarksSize - 4, header2.crc32, "container header beginning at position ".concat(position));
261
-
262
- case 25:
263
- completeHeader = (0, _assign.default)(header1, header2, {
264
- _size: header1._size + header2._size - numLandmarksSize,
265
- _endPosition: header1._size + header2._size - numLandmarksSize + position
266
- });
267
- return _context6.abrupt("return", completeHeader);
268
-
269
- case 27:
270
- case "end":
271
- return _context6.stop();
272
- }
273
- }
274
- }, _callee4, this);
275
- }));
276
-
277
- function _readContainerHeader(_x) {
278
- return _readContainerHeader2.apply(this, arguments);
279
- }
280
-
281
- return _readContainerHeader;
282
- }()
283
- }]);
284
- return CramContainer;
285
- }();
286
-
287
- (0, _forEach.default)(_context7 = 'getHeader getCompressionHeaderBlock getCompressionScheme'.split(' ')).call(_context7, function (method) {
288
- return tinyMemoize(CramContainer, method);
289
- });
290
- module.exports = CramContainer;
167
+ });
168
+ });
169
+ };
170
+ return CramContainer;
171
+ }());
172
+ exports.default = CramContainer;
173
+ 'getHeader getCompressionHeaderBlock getCompressionScheme'
174
+ .split(' ')
175
+ .forEach(function (method) { return (0, util_1.tinyMemoize)(CramContainer, method); });
176
+ //# 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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"}
@@ -0,0 +1,63 @@
1
+ export default class CramFile {
2
+ /**
3
+ * @param {object} args
4
+ * @param {object} [args.filehandle] - a filehandle that implements the stat() and
5
+ * read() methods of the Node filehandle API https://nodejs.org/api/fs.html#fs_class_filehandle
6
+ * @param {object} [args.path] - path to the cram file
7
+ * @param {object} [args.url] - url for the cram file. also supports file:// urls for local files
8
+ * @param {function} [args.seqFetch] - a function with signature
9
+ * `(seqId, startCoordinate, endCoordinate)` that returns a promise for a string of sequence bases
10
+ * @param {number} [args.cacheSize] optional maximum number of CRAM records to cache. default 20,000
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
+ filehandle?: object | undefined;
16
+ path?: object | undefined;
17
+ url?: object | undefined;
18
+ seqFetch?: Function | undefined;
19
+ cacheSize?: number | undefined;
20
+ checkSequenceMD5?: boolean | undefined;
21
+ });
22
+ file: any;
23
+ validateChecksums: boolean;
24
+ fetchReferenceSequenceCallback: Function | undefined;
25
+ options: {
26
+ checkSequenceMD5: boolean;
27
+ cacheSize: number;
28
+ };
29
+ featureCache: any;
30
+ toString(): any;
31
+ read(buffer: any, offset: any, length: any, position: any): any;
32
+ stat(): any;
33
+ getDefinition(): Promise<any>;
34
+ getSamHeader(): Promise<any[]>;
35
+ header: any;
36
+ getHeaderText(): Promise<any>;
37
+ getSectionParsers(): Promise<{
38
+ cramFileDefinition: {
39
+ parser: any;
40
+ maxLength: number;
41
+ };
42
+ cramBlockHeader: {
43
+ parser: any;
44
+ maxLength: number;
45
+ };
46
+ cramBlockCrc32: {
47
+ parser: any;
48
+ maxLength: number;
49
+ };
50
+ }>;
51
+ getContainerById(containerNumber: any): Promise<CramContainer | undefined>;
52
+ checkCrc32(position: any, length: any, recordedCrc32: any, description: any): Promise<void>;
53
+ /**
54
+ * @returns {Promise[number]} the number of containers in the file
55
+ */
56
+ containerCount(): any;
57
+ getContainerAtPosition(position: any): CramContainer;
58
+ readBlockHeader(position: any): Promise<any>;
59
+ _parseSection(section: any, position: any, size: any, preReadBuffer: any): Promise<any>;
60
+ _uncompress(compressionMethod: any, inputBuffer: any, outputBuffer: any): void;
61
+ readBlock(position: any): Promise<any>;
62
+ }
63
+ import CramContainer from "./container";