@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
package/dist/craiIndex.js CHANGED
@@ -1,252 +1,176 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
-
5
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
6
-
7
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
8
-
9
- var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
10
-
11
- var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
12
-
13
- var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
14
-
15
- var _parseInt = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/number/parse-int"));
16
-
17
- var _bind = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/bind"));
18
-
19
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
20
-
21
- var _some = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/some"));
22
-
23
- var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
24
-
25
- var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/assign"));
26
-
27
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/classCallCheck"));
28
-
29
- var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/createClass"));
30
-
31
- var AbortablePromiseCache = require('abortable-promise-cache').default;
32
-
33
- var QuickLRU = require('quick-lru');
34
-
35
- var _require = require('es6-promisify'),
36
- promisify = _require.promisify;
37
-
38
- var zlib = require('zlib');
39
-
40
- var gunzip = promisify(zlib.gunzip);
41
-
42
- var _require2 = require('./io'),
43
- open = _require2.open;
44
-
45
- var _require3 = require('./errors'),
46
- CramMalformedError = _require3.CramMalformedError;
47
-
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;
32
+ }
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 abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
43
+ var quick_lru_1 = __importDefault(require("quick-lru"));
44
+ var unzip_1 = require("./unzip");
45
+ var io_1 = require("./io");
46
+ var errors_1 = require("./errors");
48
47
  var BAI_MAGIC = 21578050; // BAI\1
49
-
50
- var Slice =
51
- /*#__PURE__*/
52
- function () {
53
- function Slice(args) {
54
- (0, _classCallCheck2.default)(this, Slice);
55
- (0, _assign.default)(this, args);
56
- }
57
-
58
- (0, _createClass2.default)(Slice, [{
59
- key: "toString",
60
- value: function toString() {
61
- var _context, _context2, _context3, _context4;
62
-
63
- return (0, _concat.default)(_context = (0, _concat.default)(_context2 = (0, _concat.default)(_context3 = (0, _concat.default)(_context4 = "".concat(this.start, ":")).call(_context4, this.span, ":")).call(_context3, this.containerStart, ":")).call(_context2, this.sliceStart, ":")).call(_context, this.sliceBytes);
48
+ var Slice = /** @class */ (function () {
49
+ function Slice(args) {
50
+ Object.assign(this, args);
64
51
  }
65
- }]);
66
- return Slice;
67
- }();
68
-
52
+ Slice.prototype.toString = function () {
53
+ return "".concat(this.start, ":").concat(this.span, ":").concat(this.containerStart, ":").concat(this.sliceStart, ":").concat(this.sliceBytes);
54
+ };
55
+ return Slice;
56
+ }());
69
57
  function addRecordToIndex(index, record) {
70
- if ((0, _some.default)(record).call(record, function (el) {
71
- return el === undefined;
72
- })) {
73
- throw new CramMalformedError('invalid .crai index file');
74
- }
75
-
76
- var _record = (0, _slicedToArray2.default)(record, 6),
77
- seqId = _record[0],
78
- start = _record[1],
79
- span = _record[2],
80
- containerStart = _record[3],
81
- sliceStart = _record[4],
82
- sliceBytes = _record[5];
83
-
84
- if (!index[seqId]) index[seqId] = [];
85
- index[seqId].push(new Slice({
86
- start: start,
87
- span: span,
88
- containerStart: containerStart,
89
- sliceStart: sliceStart,
90
- sliceBytes: sliceBytes
91
- }));
58
+ if (record.some(function (el) { return el === undefined; })) {
59
+ throw new errors_1.CramMalformedError('invalid .crai index file');
60
+ }
61
+ var seqId = record[0], start = record[1], span = record[2], containerStart = record[3], sliceStart = record[4], sliceBytes = record[5];
62
+ if (!index[seqId]) {
63
+ index[seqId] = [];
64
+ }
65
+ index[seqId].push(new Slice({
66
+ start: start,
67
+ span: span,
68
+ containerStart: containerStart,
69
+ sliceStart: sliceStart,
70
+ sliceBytes: sliceBytes,
71
+ }));
92
72
  }
93
-
94
- var CraiIndex =
95
- /*#__PURE__*/
96
- function () {
97
- // A CRAM index (.crai) is a gzipped tab delimited file containing the following columns:
98
- // 1. Sequence id
99
- // 2. Alignment start
100
- // 3. Alignment span
101
- // 4. Container start byte position in the file
102
- // 5. Slice start byte position in the container data (‘blocks’)
103
- // 6. Slice size in bytes
104
- // Each line represents a slice in the CRAM file. Please note that all slices must be listed in index file.
105
-
106
- /**
107
- *
108
- * @param {object} args
109
- * @param {string} [args.path]
110
- * @param {string} [args.url]
111
- * @param {FileHandle} [args.filehandle]
112
- */
113
- function CraiIndex(args) {
114
- var _this = this,
115
- _context5;
116
-
117
- (0, _classCallCheck2.default)(this, CraiIndex);
118
- var filehandle = open(args.url, args.path, args.filehandle);
119
- this._parseCache = new AbortablePromiseCache({
120
- cache: new QuickLRU({
121
- maxSize: 1
122
- }),
123
- fill: function fill(data, signal) {
124
- return _this.parseIndex({
125
- signal: signal
73
+ var CraiIndex = /** @class */ (function () {
74
+ // A CRAM index (.crai) is a gzipped tab delimited file containing the following columns:
75
+ // 1. Sequence id
76
+ // 2. Alignment start
77
+ // 3. Alignment span
78
+ // 4. Container start byte position in the file
79
+ // 5. Slice start byte position in the container data (‘blocks’)
80
+ // 6. Slice size in bytes
81
+ // Each line represents a slice in the CRAM file. Please note that all slices must be listed in index file.
82
+ /**
83
+ *
84
+ * @param {object} args
85
+ * @param {string} [args.path]
86
+ * @param {string} [args.url]
87
+ * @param {FileHandle} [args.filehandle]
88
+ */
89
+ function CraiIndex(args) {
90
+ var _this = this;
91
+ var filehandle = (0, io_1.open)(args.url, args.path, args.filehandle);
92
+ this._parseCache = new abortable_promise_cache_1.default({
93
+ cache: new quick_lru_1.default({ maxSize: 1 }),
94
+ fill: function (data, signal) { return _this.parseIndex({ signal: signal }); },
126
95
  });
127
- }
128
- });
129
- this.readFile = (0, _bind.default)(_context5 = filehandle.readFile).call(_context5, filehandle);
130
- }
131
-
132
- (0, _createClass2.default)(CraiIndex, [{
133
- key: "parseIndex",
134
- value: function parseIndex() {
135
- var index = {};
136
- return this.readFile().then(function (data) {
137
- if (data[0] === 31 && data[1] === 139) return gunzip(data);
138
- return data;
139
- }).then(function (uncompressedBuffer) {
140
- var _context6;
141
-
142
- if (uncompressedBuffer.length > 4 && uncompressedBuffer.readUInt32LE(0) === BAI_MAGIC) {
143
- throw new CramMalformedError('invalid .crai index file. note: file appears to be a .bai index. this is technically legal but please open a github issue if you need support');
144
- } // interpret the text as regular ascii, since it is
145
- // supposed to be only digits and whitespace characters
146
- // this is written in a deliberately low-level fashion for performance,
147
- // because some .crai files can be pretty large.
148
-
149
-
150
- var currentRecord = [];
151
- var currentString = '';
152
-
153
- for (var i = 0; i < uncompressedBuffer.length; i += 1) {
154
- var charCode = uncompressedBuffer[i];
155
-
156
- if (charCode >= 48 && charCode <= 57 ||
157
- /* 0-9 */
158
- !currentString && charCode === 45
159
- /* leading - */
160
- ) {
161
- currentString += String.fromCharCode(charCode);
162
- } else if (charCode === 9
163
- /* \t */
164
- ) {
165
- currentRecord.push((0, _parseInt.default)(currentString, 10));
166
- currentString = '';
167
- } else if (charCode === 10
168
- /* \n */
169
- ) {
170
- currentRecord.push((0, _parseInt.default)(currentString, 10));
171
- currentString = '';
172
- addRecordToIndex(index, currentRecord);
173
- currentRecord = [];
174
- } else if (charCode !== 13
175
- /* \r */
176
- && charCode !== 32
177
- /* space */
178
- ) {
179
- // if there are other characters in the file besides
180
- // space and \r, something is wrong.
181
- throw new CramMalformedError('invalid .crai index file');
96
+ this.readFile = filehandle.readFile.bind(filehandle);
97
+ }
98
+ CraiIndex.prototype.parseIndex = function () {
99
+ var index = {};
100
+ return this.readFile()
101
+ .then(function (data) {
102
+ if (data[0] === 31 && data[1] === 139) {
103
+ return (0, unzip_1.unzip)(data);
104
+ }
105
+ return data;
106
+ })
107
+ .then(function (uncompressedBuffer) {
108
+ if (uncompressedBuffer.length > 4 &&
109
+ uncompressedBuffer.readUInt32LE(0) === BAI_MAGIC) {
110
+ throw new errors_1.CramMalformedError('invalid .crai index file. note: file appears to be a .bai index. this is technically legal but please open a github issue if you need support');
111
+ }
112
+ // interpret the text as regular ascii, since it is
113
+ // supposed to be only digits and whitespace characters
114
+ // this is written in a deliberately low-level fashion for performance,
115
+ // because some .crai files can be pretty large.
116
+ var currentRecord = [];
117
+ var currentString = '';
118
+ for (var i = 0; i < uncompressedBuffer.length; i += 1) {
119
+ var charCode = uncompressedBuffer[i];
120
+ if ((charCode >= 48 && charCode <= 57) /* 0-9 */ ||
121
+ (!currentString && charCode === 45) /* leading - */) {
122
+ currentString += String.fromCharCode(charCode);
123
+ }
124
+ else if (charCode === 9 /* \t */) {
125
+ currentRecord.push(Number.parseInt(currentString, 10));
126
+ currentString = '';
127
+ }
128
+ else if (charCode === 10 /* \n */) {
129
+ currentRecord.push(Number.parseInt(currentString, 10));
130
+ currentString = '';
131
+ addRecordToIndex(index, currentRecord);
132
+ currentRecord = [];
133
+ }
134
+ else if (charCode !== 13 /* \r */ && charCode !== 32 /* space */) {
135
+ // if there are other characters in the file besides
136
+ // space and \r, something is wrong.
137
+ throw new errors_1.CramMalformedError('invalid .crai index file');
138
+ }
139
+ }
140
+ // if the file ends without a \n, we need to flush our buffers
141
+ if (currentString) {
142
+ currentRecord.push(Number.parseInt(currentString, 10));
182
143
  }
183
- } // if the file ends without a \n, we need to flush our buffers
184
-
185
-
186
- if (currentString) {
187
- currentRecord.push((0, _parseInt.default)(currentString, 10));
188
- }
189
-
190
- if (currentRecord.length === 6) {
191
- addRecordToIndex(index, currentRecord);
192
- } // sort each of them by start
193
-
194
-
195
- (0, _forEach.default)(_context6 = (0, _entries.default)(index)).call(_context6, function (_ref) {
196
- var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
197
- seqId = _ref2[0],
198
- ent = _ref2[1];
199
-
200
- index[seqId] = (0, _sort.default)(ent).call(ent, function (a, b) {
201
- return a.start - b.start || a.span - b.span;
202
- });
144
+ if (currentRecord.length === 6) {
145
+ addRecordToIndex(index, currentRecord);
146
+ }
147
+ // sort each of them by start
148
+ Object.entries(index).forEach(function (_a) {
149
+ var seqId = _a[0], ent = _a[1];
150
+ index[seqId] = ent.sort(function (a, b) { return a.start - b.start || a.span - b.span; });
151
+ });
152
+ return index;
203
153
  });
204
- return index;
205
- });
206
- }
207
- }, {
208
- key: "getIndex",
209
- value: function getIndex() {
210
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
211
- return this._parseCache.get('index', null, opts.signal);
212
- }
154
+ };
155
+ CraiIndex.prototype.getIndex = function (opts) {
156
+ if (opts === void 0) { opts = {}; }
157
+ return this._parseCache.get('index', null, opts.signal);
158
+ };
213
159
  /**
214
160
  * @param {number} seqId
215
161
  * @returns {Promise} true if the index contains entries for
216
162
  * the given reference sequence ID, false otherwise
217
163
  */
218
-
219
- }, {
220
- key: "hasDataForReferenceSequence",
221
- value: function () {
222
- var _hasDataForReferenceSequence = (0, _asyncToGenerator2.default)(
223
- /*#__PURE__*/
224
- _regenerator.default.mark(function _callee(seqId) {
225
- return _regenerator.default.wrap(function _callee$(_context7) {
226
- while (1) {
227
- switch (_context7.prev = _context7.next) {
228
- case 0:
229
- _context7.next = 2;
230
- return this.getIndex();
231
-
232
- case 2:
233
- _context7.t0 = seqId;
234
- return _context7.abrupt("return", !!_context7.sent[_context7.t0]);
235
-
236
- case 4:
237
- case "end":
238
- return _context7.stop();
239
- }
240
- }
241
- }, _callee, this);
242
- }));
243
-
244
- function hasDataForReferenceSequence(_x) {
245
- return _hasDataForReferenceSequence.apply(this, arguments);
246
- }
247
-
248
- return hasDataForReferenceSequence;
249
- }()
164
+ CraiIndex.prototype.hasDataForReferenceSequence = function (seqId) {
165
+ return __awaiter(this, void 0, void 0, function () {
166
+ return __generator(this, function (_a) {
167
+ switch (_a.label) {
168
+ case 0: return [4 /*yield*/, this.getIndex()];
169
+ case 1: return [2 /*return*/, !!(_a.sent())[seqId]];
170
+ }
171
+ });
172
+ });
173
+ };
250
174
  /**
251
175
  * fetch index entries for the given range
252
176
  *
@@ -258,69 +182,40 @@ function () {
258
182
  * an array of objects of the form
259
183
  * `{start, span, containerStart, sliceStart, sliceBytes }`
260
184
  */
261
-
262
- }, {
263
- key: "getEntriesForRange",
264
- value: function () {
265
- var _getEntriesForRange = (0, _asyncToGenerator2.default)(
266
- /*#__PURE__*/
267
- _regenerator.default.mark(function _callee2(seqId, queryStart, queryEnd) {
268
- var seqEntries, compare, bins, i;
269
- return _regenerator.default.wrap(function _callee2$(_context8) {
270
- while (1) {
271
- switch (_context8.prev = _context8.next) {
272
- case 0:
273
- _context8.next = 2;
274
- return this.getIndex();
275
-
276
- case 2:
277
- _context8.t0 = seqId;
278
- seqEntries = _context8.sent[_context8.t0];
279
-
280
- if (seqEntries) {
281
- _context8.next = 6;
282
- break;
185
+ CraiIndex.prototype.getEntriesForRange = function (seqId, queryStart, queryEnd) {
186
+ return __awaiter(this, void 0, void 0, function () {
187
+ var seqEntries, compare, bins, i;
188
+ return __generator(this, function (_a) {
189
+ switch (_a.label) {
190
+ case 0: return [4 /*yield*/, this.getIndex()];
191
+ case 1:
192
+ seqEntries = (_a.sent())[seqId];
193
+ if (!seqEntries) {
194
+ return [2 /*return*/, []];
195
+ }
196
+ compare = function (entry) {
197
+ var entryStart = entry.start;
198
+ var entryEnd = entry.start + entry.span;
199
+ if (entryStart >= queryEnd) {
200
+ return -1;
201
+ } // entry is ahead of query
202
+ if (entryEnd <= queryStart) {
203
+ return 1;
204
+ } // entry is behind query
205
+ return 0; // entry overlaps query
206
+ };
207
+ bins = [];
208
+ for (i = 0; i < seqEntries.length; i += 1) {
209
+ if (compare(seqEntries[i]) === 0) {
210
+ bins.push(seqEntries[i]);
211
+ }
212
+ }
213
+ return [2 /*return*/, bins];
283
214
  }
284
-
285
- return _context8.abrupt("return", []);
286
-
287
- case 6:
288
- compare = function compare(entry) {
289
- var entryStart = entry.start;
290
- var entryEnd = entry.start + entry.span;
291
- if (entryStart >= queryEnd) return -1; // entry is ahead of query
292
-
293
- if (entryEnd <= queryStart) return 1; // entry is behind query
294
-
295
- return 0; // entry overlaps query
296
- };
297
-
298
- bins = [];
299
-
300
- for (i = 0; i < seqEntries.length; i += 1) {
301
- if (compare(seqEntries[i]) === 0) {
302
- bins.push(seqEntries[i]);
303
- }
304
- }
305
-
306
- return _context8.abrupt("return", bins);
307
-
308
- case 10:
309
- case "end":
310
- return _context8.stop();
311
- }
312
- }
313
- }, _callee2, this);
314
- }));
315
-
316
- function getEntriesForRange(_x2, _x3, _x4) {
317
- return _getEntriesForRange.apply(this, arguments);
318
- }
319
-
320
- return getEntriesForRange;
321
- }()
322
- }]);
323
- return CraiIndex;
324
- }();
325
-
326
- module.exports = CraiIndex;
215
+ });
216
+ });
217
+ };
218
+ return CraiIndex;
219
+ }());
220
+ exports.default = CraiIndex;
221
+ //# sourceMappingURL=craiIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craiIndex.js","sourceRoot":"","sources":["../src/craiIndex.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oFAA2D;AAC3D,wDAAgC;AAChC,iCAA+B;AAC/B,2BAA2B;AAC3B,mCAA6C;AAE7C,IAAM,SAAS,GAAG,QAAQ,CAAA,CAAC,QAAQ;AAEnC;IACE,eAAY,IAAI;QACd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,wBAAQ,GAAR;QACE,OAAO,UAAG,IAAI,CAAC,KAAK,cAAI,IAAI,CAAC,IAAI,cAAI,IAAI,CAAC,cAAc,cAAI,IAAI,CAAC,UAAU,cAAI,IAAI,CAAC,UAAU,CAAE,CAAA;IAClG,CAAC;IACH,YAAC;AAAD,CAAC,AARD,IAQC;AAED,SAAS,gBAAgB,CAAC,KAAK,EAAE,MAAM;IACrC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,KAAK,SAAS,EAAhB,CAAgB,CAAC,EAAE;QACvC,MAAM,IAAI,2BAAkB,CAAC,0BAA0B,CAAC,CAAA;KACzD;IAEM,IAAA,KAAK,GAAyD,MAAM,GAA/D,EAAE,KAAK,GAAkD,MAAM,GAAxD,EAAE,IAAI,GAA4C,MAAM,GAAlD,EAAE,cAAc,GAA4B,MAAM,GAAlC,EAAE,UAAU,GAAgB,MAAM,GAAtB,EAAE,UAAU,GAAI,MAAM,GAAV,CAAU;IAE3E,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACjB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;KAClB;IAED,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CACf,IAAI,KAAK,CAAC;QACR,KAAK,OAAA;QACL,IAAI,MAAA;QACJ,cAAc,gBAAA;QACd,UAAU,YAAA;QACV,UAAU,YAAA;KACX,CAAC,CACH,CAAA;AACH,CAAC;AAED;IACE,yFAAyF;IACzF,iBAAiB;IACjB,qBAAqB;IACrB,oBAAoB;IACpB,+CAA+C;IAC/C,gEAAgE;IAChE,yBAAyB;IACzB,2GAA2G;IAE3G;;;;;;OAMG;IACH,mBAAY,IAAI;QAAhB,iBAOC;QANC,IAAM,UAAU,GAAG,IAAA,SAAI,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7D,IAAI,CAAC,WAAW,GAAG,IAAI,iCAAqB,CAAC;YAC3C,KAAK,EAAE,IAAI,mBAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACnC,IAAI,EAAE,UAAC,IAAI,EAAE,MAAM,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,EAAE,MAAM,QAAA,EAAE,CAAC,EAA3B,CAA2B;SACpD,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtD,CAAC;IAED,8BAAU,GAAV;QACE,IAAM,KAAK,GAAG,EAAE,CAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,EAAE;aACnB,IAAI,CAAC,UAAA,IAAI;YACR,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBACrC,OAAO,IAAA,aAAK,EAAC,IAAI,CAAC,CAAA;aACnB;YACD,OAAO,IAAI,CAAA;QACb,CAAC,CAAC;aACD,IAAI,CAAC,UAAA,kBAAkB;YACtB,IACE,kBAAkB,CAAC,MAAM,GAAG,CAAC;gBAC7B,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,SAAS,EAChD;gBACA,MAAM,IAAI,2BAAkB,CAC1B,+IAA+I,CAChJ,CAAA;aACF;YACD,mDAAmD;YACnD,uDAAuD;YACvD,uEAAuE;YACvE,gDAAgD;YAChD,IAAI,aAAa,GAAG,EAAE,CAAA;YACtB,IAAI,aAAa,GAAG,EAAE,CAAA;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;gBACrD,IAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;gBACtC,IACE,CAAC,QAAQ,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC,SAAS;oBAC5C,CAAC,CAAC,aAAa,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC,eAAe,EACnD;oBACA,aAAa,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;iBAC/C;qBAAM,IAAI,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE;oBAClC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAA;oBACtD,aAAa,GAAG,EAAE,CAAA;iBACnB;qBAAM,IAAI,QAAQ,KAAK,EAAE,CAAC,QAAQ,EAAE;oBACnC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAA;oBACtD,aAAa,GAAG,EAAE,CAAA;oBAClB,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;oBACtC,aAAa,GAAG,EAAE,CAAA;iBACnB;qBAAM,IAAI,QAAQ,KAAK,EAAE,CAAC,QAAQ,IAAI,QAAQ,KAAK,EAAE,CAAC,WAAW,EAAE;oBAClE,oDAAoD;oBACpD,oCAAoC;oBACpC,MAAM,IAAI,2BAAkB,CAAC,0BAA0B,CAAC,CAAA;iBACzD;aACF;YAED,8DAA8D;YAC9D,IAAI,aAAa,EAAE;gBACjB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAA;aACvD;YACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;aACvC;YAED,6BAA6B;YAC7B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,EAAY;oBAAX,KAAK,QAAA,EAAE,GAAG,QAAA;gBACxC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CACrB,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAApC,CAAoC,CAC/C,CAAA;YACH,CAAC,CAAC,CAAA;YACF,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACN,CAAC;IAED,4BAAQ,GAAR,UAAS,IAAS;QAAT,qBAAA,EAAA,SAAS;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACzD,CAAC;IAED;;;;OAIG;IACG,+CAA2B,GAAjC,UAAkC,KAAK;;;;4BAC3B,qBAAM,IAAI,CAAC,QAAQ,EAAE,EAAA;4BAA/B,sBAAO,CAAC,CAAC,CAAC,SAAqB,CAAC,CAAC,KAAK,CAAC,EAAA;;;;KACxC;IAED;;;;;;;;;;OAUG;IACG,sCAAkB,GAAxB,UAAyB,KAAK,EAAE,UAAU,EAAE,QAAQ;;;;;4BAC9B,qBAAM,IAAI,CAAC,QAAQ,EAAE,EAAA;;wBAAnC,UAAU,GAAG,CAAC,SAAqB,CAAC,CAAC,KAAK,CAAC;wBACjD,IAAI,CAAC,UAAU,EAAE;4BACf,sBAAO,EAAE,EAAA;yBACV;wBAEK,OAAO,GAAG,UAAA,KAAK;4BACnB,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAA;4BAC9B,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;4BACzC,IAAI,UAAU,IAAI,QAAQ,EAAE;gCAC1B,OAAO,CAAC,CAAC,CAAA;6BACV,CAAC,0BAA0B;4BAC5B,IAAI,QAAQ,IAAI,UAAU,EAAE;gCAC1B,OAAO,CAAC,CAAA;6BACT,CAAC,wBAAwB;4BAC1B,OAAO,CAAC,CAAA,CAAC,uBAAuB;wBAClC,CAAC,CAAA;wBACK,IAAI,GAAG,EAAE,CAAA;wBACf,KAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;4BAC7C,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;gCAChC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;6BACzB;yBACF;wBACD,sBAAO,IAAI,EAAA;;;;KACZ;IACH,gBAAC;AAAD,CAAC,AA3ID,IA2IC"}