@gmod/cram 1.6.4 → 1.7.1

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 +9 -0
  2. package/dist/craiIndex.d.ts +19 -12
  3. package/dist/craiIndex.js +63 -123
  4. package/dist/craiIndex.js.map +1 -1
  5. package/dist/cram-bundle.js +2 -17
  6. package/dist/cram-bundle.js.LICENSE.txt +17 -0
  7. package/dist/cramFile/codecs/_base.d.ts +26 -5
  8. package/dist/cramFile/codecs/_base.js +3 -39
  9. package/dist/cramFile/codecs/_base.js.map +1 -1
  10. package/dist/cramFile/codecs/beta.d.ts +7 -3
  11. package/dist/cramFile/codecs/beta.js +13 -31
  12. package/dist/cramFile/codecs/beta.js.map +1 -1
  13. package/dist/cramFile/codecs/byteArrayLength.d.ts +13 -7
  14. package/dist/cramFile/codecs/byteArrayLength.js +22 -41
  15. package/dist/cramFile/codecs/byteArrayLength.js.map +1 -1
  16. package/dist/cramFile/codecs/byteArrayStop.d.ts +9 -5
  17. package/dist/cramFile/codecs/byteArrayStop.js +25 -46
  18. package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
  19. package/dist/cramFile/codecs/dataSeriesTypes.d.ts +4 -0
  20. package/dist/cramFile/codecs/dataSeriesTypes.js +3 -0
  21. package/dist/cramFile/codecs/dataSeriesTypes.js.map +1 -0
  22. package/dist/cramFile/codecs/external.d.ts +10 -6
  23. package/dist/cramFile/codecs/external.js +26 -44
  24. package/dist/cramFile/codecs/external.js.map +1 -1
  25. package/dist/cramFile/codecs/gamma.d.ts +7 -3
  26. package/dist/cramFile/codecs/gamma.js +16 -34
  27. package/dist/cramFile/codecs/gamma.js.map +1 -1
  28. package/dist/cramFile/codecs/getBits.d.ts +7 -0
  29. package/dist/cramFile/codecs/getBits.js +26 -0
  30. package/dist/cramFile/codecs/getBits.js.map +1 -0
  31. package/dist/cramFile/codecs/huffman.d.ts +17 -13
  32. package/dist/cramFile/codecs/huffman.js +76 -85
  33. package/dist/cramFile/codecs/huffman.js.map +1 -1
  34. package/dist/cramFile/codecs/index.d.ts +4 -2
  35. package/dist/cramFile/codecs/index.js +12 -13
  36. package/dist/cramFile/codecs/index.js.map +1 -1
  37. package/dist/cramFile/codecs/subexp.d.ts +7 -3
  38. package/dist/cramFile/codecs/subexp.js +19 -36
  39. package/dist/cramFile/codecs/subexp.js.map +1 -1
  40. package/dist/cramFile/constants.d.ts +35 -35
  41. package/dist/cramFile/constants.js +1 -1
  42. package/dist/cramFile/constants.js.map +1 -1
  43. package/dist/cramFile/container/compressionScheme.d.ts +57 -11
  44. package/dist/cramFile/container/compressionScheme.js +37 -32
  45. package/dist/cramFile/container/compressionScheme.js.map +1 -1
  46. package/dist/cramFile/container/index.d.ts +23 -9
  47. package/dist/cramFile/container/index.js +74 -144
  48. package/dist/cramFile/container/index.js.map +1 -1
  49. package/dist/cramFile/encoding.d.ts +78 -0
  50. package/dist/cramFile/encoding.js +3 -0
  51. package/dist/cramFile/encoding.js.map +1 -0
  52. package/dist/cramFile/file.d.ts +91 -41
  53. package/dist/cramFile/file.js +234 -368
  54. package/dist/cramFile/file.js.map +1 -1
  55. package/dist/cramFile/filehandle.d.ts +2 -0
  56. package/dist/cramFile/filehandle.js +3 -0
  57. package/dist/cramFile/filehandle.js.map +1 -0
  58. package/dist/cramFile/index.d.ts +2 -1
  59. package/dist/cramFile/index.js +4 -1
  60. package/dist/cramFile/index.js.map +1 -1
  61. package/dist/cramFile/record.d.ts +61 -17
  62. package/dist/cramFile/record.js +153 -77
  63. package/dist/cramFile/record.js.map +1 -1
  64. package/dist/cramFile/sectionParsers.d.ts +99 -8
  65. package/dist/cramFile/sectionParsers.js +70 -80
  66. package/dist/cramFile/sectionParsers.js.map +1 -1
  67. package/dist/cramFile/slice/decodeRecord.d.ts +30 -2
  68. package/dist/cramFile/slice/decodeRecord.js +148 -118
  69. package/dist/cramFile/slice/decodeRecord.js.map +1 -1
  70. package/dist/cramFile/slice/index.d.ts +21 -14
  71. package/dist/cramFile/slice/index.js +286 -381
  72. package/dist/cramFile/slice/index.js.map +1 -1
  73. package/dist/cramFile/util.d.ts +11 -5
  74. package/dist/cramFile/util.js +19 -97
  75. package/dist/cramFile/util.js.map +1 -1
  76. package/dist/errors.d.ts +5 -10
  77. package/dist/errors.js +11 -62
  78. package/dist/errors.js.map +1 -1
  79. package/dist/index.d.ts +4 -4
  80. package/dist/index.js +28 -4
  81. package/dist/index.js.map +1 -1
  82. package/dist/indexedCramFile.d.ts +37 -12
  83. package/dist/indexedCramFile.js +114 -154
  84. package/dist/indexedCramFile.js.map +1 -1
  85. package/dist/io/index.d.ts +5 -5
  86. package/dist/io/index.js +9 -9
  87. package/dist/io/index.js.map +1 -1
  88. package/dist/rans/constants.js +3 -3
  89. package/dist/rans/constants.js.map +1 -1
  90. package/dist/rans/d04.js +15 -15
  91. package/dist/rans/d04.js.map +1 -1
  92. package/dist/rans/d14.js +21 -21
  93. package/dist/rans/d14.js.map +1 -1
  94. package/dist/rans/decoding.js +27 -30
  95. package/dist/rans/decoding.js.map +1 -1
  96. package/dist/rans/frequencies.js +11 -11
  97. package/dist/rans/frequencies.js.map +1 -1
  98. package/dist/rans/index.js +46 -49
  99. package/dist/rans/index.js.map +1 -1
  100. package/dist/sam.d.ts +8 -1
  101. package/dist/sam.js +7 -7
  102. package/dist/sam.js.map +1 -1
  103. package/dist/typescript.d.ts +3 -0
  104. package/dist/typescript.js +11 -0
  105. package/dist/typescript.js.map +1 -0
  106. package/dist/unzip-pako.js +1 -1
  107. package/dist/unzip-pako.js.map +1 -1
  108. package/dist/unzip.js +1 -1
  109. package/dist/unzip.js.map +1 -1
  110. package/errors.js +11 -62
  111. package/esm/craiIndex.d.ts +19 -12
  112. package/esm/craiIndex.js +7 -23
  113. package/esm/craiIndex.js.map +1 -1
  114. package/esm/cramFile/codecs/_base.d.ts +26 -5
  115. package/esm/cramFile/codecs/_base.js +1 -35
  116. package/esm/cramFile/codecs/_base.js.map +1 -1
  117. package/esm/cramFile/codecs/beta.d.ts +7 -3
  118. package/esm/cramFile/codecs/beta.js +4 -3
  119. package/esm/cramFile/codecs/beta.js.map +1 -1
  120. package/esm/cramFile/codecs/byteArrayLength.d.ts +13 -7
  121. package/esm/cramFile/codecs/byteArrayLength.js +1 -1
  122. package/esm/cramFile/codecs/byteArrayLength.js.map +1 -1
  123. package/esm/cramFile/codecs/byteArrayStop.d.ts +9 -5
  124. package/esm/cramFile/codecs/byteArrayStop.js +7 -9
  125. package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
  126. package/esm/cramFile/codecs/dataSeriesTypes.d.ts +4 -0
  127. package/esm/cramFile/codecs/dataSeriesTypes.js +2 -0
  128. package/esm/cramFile/codecs/dataSeriesTypes.js.map +1 -0
  129. package/esm/cramFile/codecs/external.d.ts +10 -6
  130. package/esm/cramFile/codecs/external.js +4 -3
  131. package/esm/cramFile/codecs/external.js.map +1 -1
  132. package/esm/cramFile/codecs/gamma.d.ts +7 -3
  133. package/esm/cramFile/codecs/gamma.js +5 -4
  134. package/esm/cramFile/codecs/gamma.js.map +1 -1
  135. package/esm/cramFile/codecs/getBits.d.ts +7 -0
  136. package/esm/cramFile/codecs/getBits.js +21 -0
  137. package/esm/cramFile/codecs/getBits.js.map +1 -0
  138. package/esm/cramFile/codecs/huffman.d.ts +17 -13
  139. package/esm/cramFile/codecs/huffman.js +22 -9
  140. package/esm/cramFile/codecs/huffman.js.map +1 -1
  141. package/esm/cramFile/codecs/index.d.ts +4 -2
  142. package/esm/cramFile/codecs/index.js +1 -1
  143. package/esm/cramFile/codecs/index.js.map +1 -1
  144. package/esm/cramFile/codecs/subexp.d.ts +7 -3
  145. package/esm/cramFile/codecs/subexp.js +7 -5
  146. package/esm/cramFile/codecs/subexp.js.map +1 -1
  147. package/esm/cramFile/constants.d.ts +35 -35
  148. package/esm/cramFile/constants.js.map +1 -1
  149. package/esm/cramFile/container/compressionScheme.d.ts +57 -11
  150. package/esm/cramFile/container/compressionScheme.js +15 -8
  151. package/esm/cramFile/container/compressionScheme.js.map +1 -1
  152. package/esm/cramFile/container/index.d.ts +23 -9
  153. package/esm/cramFile/container/index.js +11 -9
  154. package/esm/cramFile/container/index.js.map +1 -1
  155. package/esm/cramFile/encoding.d.ts +78 -0
  156. package/esm/cramFile/encoding.js +2 -0
  157. package/esm/cramFile/encoding.js.map +1 -0
  158. package/esm/cramFile/file.d.ts +91 -41
  159. package/esm/cramFile/file.js +59 -47
  160. package/esm/cramFile/file.js.map +1 -1
  161. package/esm/cramFile/filehandle.d.ts +2 -0
  162. package/esm/cramFile/filehandle.js +2 -0
  163. package/esm/cramFile/filehandle.js.map +1 -0
  164. package/esm/cramFile/index.d.ts +2 -1
  165. package/esm/cramFile/index.js +1 -0
  166. package/esm/cramFile/index.js.map +1 -1
  167. package/esm/cramFile/record.d.ts +61 -17
  168. package/esm/cramFile/record.js +83 -5
  169. package/esm/cramFile/record.js.map +1 -1
  170. package/esm/cramFile/sectionParsers.d.ts +99 -8
  171. package/esm/cramFile/sectionParsers.js +7 -17
  172. package/esm/cramFile/sectionParsers.js.map +1 -1
  173. package/esm/cramFile/slice/decodeRecord.d.ts +30 -2
  174. package/esm/cramFile/slice/decodeRecord.js +102 -70
  175. package/esm/cramFile/slice/decodeRecord.js.map +1 -1
  176. package/esm/cramFile/slice/index.d.ts +21 -14
  177. package/esm/cramFile/slice/index.js +77 -38
  178. package/esm/cramFile/slice/index.js.map +1 -1
  179. package/esm/cramFile/util.d.ts +11 -5
  180. package/esm/cramFile/util.js +11 -82
  181. package/esm/cramFile/util.js.map +1 -1
  182. package/esm/errors.d.ts +5 -10
  183. package/esm/errors.js +0 -5
  184. package/esm/errors.js.map +1 -1
  185. package/esm/index.d.ts +4 -4
  186. package/esm/index.js +2 -2
  187. package/esm/index.js.map +1 -1
  188. package/esm/indexedCramFile.d.ts +37 -12
  189. package/esm/indexedCramFile.js +19 -8
  190. package/esm/indexedCramFile.js.map +1 -1
  191. package/esm/io/index.d.ts +5 -5
  192. package/esm/io/index.js +3 -3
  193. package/esm/io/index.js.map +1 -1
  194. package/esm/sam.d.ts +8 -1
  195. package/esm/sam.js.map +1 -1
  196. package/esm/typescript.d.ts +3 -0
  197. package/esm/typescript.js +7 -0
  198. package/esm/typescript.js.map +1 -0
  199. package/package.json +18 -11
  200. package/src/{craiIndex.js → craiIndex.ts} +36 -30
  201. package/src/cramFile/codecs/_base.ts +45 -0
  202. package/src/cramFile/codecs/beta.ts +34 -0
  203. package/src/cramFile/codecs/{byteArrayLength.js → byteArrayLength.ts} +27 -5
  204. package/src/cramFile/codecs/{byteArrayStop.js → byteArrayStop.ts} +25 -12
  205. package/src/cramFile/codecs/dataSeriesTypes.ts +39 -0
  206. package/src/cramFile/codecs/{external.js → external.ts} +28 -12
  207. package/src/cramFile/codecs/gamma.ts +42 -0
  208. package/src/cramFile/codecs/getBits.ts +28 -0
  209. package/src/cramFile/codecs/{huffman.js → huffman.ts} +48 -15
  210. package/src/cramFile/codecs/{index.js → index.ts} +9 -3
  211. package/src/cramFile/codecs/subexp.ts +45 -0
  212. package/src/cramFile/{constants.js → constants.ts} +0 -0
  213. package/src/cramFile/container/{compressionScheme.js → compressionScheme.ts} +50 -18
  214. package/src/cramFile/container/{index.js → index.ts} +13 -13
  215. package/src/cramFile/encoding.ts +98 -0
  216. package/src/cramFile/{file.js → file.ts} +136 -62
  217. package/src/cramFile/filehandle.ts +3 -0
  218. package/src/cramFile/{index.js → index.ts} +1 -0
  219. package/src/cramFile/{record.js → record.ts} +185 -14
  220. package/src/cramFile/{sectionParsers.js → sectionParsers.ts} +148 -20
  221. package/src/cramFile/slice/{decodeRecord.js → decodeRecord.ts} +158 -105
  222. package/src/cramFile/slice/{index.js → index.ts} +138 -63
  223. package/src/cramFile/{util.js → util.ts} +28 -17
  224. package/src/{errors.js → errors.ts} +0 -5
  225. package/src/index.ts +5 -0
  226. package/src/{indexedCramFile.js → indexedCramFile.ts} +79 -19
  227. package/src/io/{index.js → index.ts} +10 -5
  228. package/src/{sam.js → sam.ts} +7 -2
  229. package/src/typescript.ts +17 -0
  230. package/src/typings/binary-parser.d.ts +44 -0
  231. package/src/typings/bzip2.d.ts +7 -0
  232. package/src/typings/htscodecs.d.ts +6 -0
  233. package/dist/io/bufferCache.d.ts +0 -12
  234. package/dist/io/bufferCache.js +0 -112
  235. package/dist/io/bufferCache.js.map +0 -1
  236. package/dist/io/localFile.d.ts +0 -10
  237. package/dist/io/localFile.js +0 -108
  238. package/dist/io/localFile.js.map +0 -1
  239. package/dist/io/remoteFile.d.ts +0 -16
  240. package/dist/io/remoteFile.js +0 -143
  241. package/dist/io/remoteFile.js.map +0 -1
  242. package/esm/io/bufferCache.d.ts +0 -12
  243. package/esm/io/bufferCache.js +0 -54
  244. package/esm/io/bufferCache.js.map +0 -1
  245. package/esm/io/localFile.d.ts +0 -10
  246. package/esm/io/localFile.js +0 -31
  247. package/esm/io/localFile.js.map +0 -1
  248. package/esm/io/remoteFile.d.ts +0 -16
  249. package/esm/io/remoteFile.js +0 -64
  250. package/esm/io/remoteFile.js.map +0 -1
  251. package/src/cramFile/codecs/_base.js +0 -49
  252. package/src/cramFile/codecs/beta.js +0 -23
  253. package/src/cramFile/codecs/gamma.js +0 -30
  254. package/src/cramFile/codecs/subexp.js +0 -32
  255. package/src/index.js +0 -5
  256. package/src/io/bufferCache.js +0 -66
  257. package/src/io/localFile.js +0 -35
  258. package/src/io/remoteFile.js +0 -71
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # v1.7.1
2
+
3
+ - Re-export CramRecord class for typescript
4
+
5
+ # v1.7.0
6
+
7
+ - Typescript entire codebase, big thanks to @0xorial for taking on this effort!
8
+ - Update to use webpack 5 for UMD build
9
+
1
10
  # v1.6.4
2
11
 
3
12
  - Fix off by one in returning features from getRecordsFromRange
@@ -1,4 +1,15 @@
1
+ import { CramFileSource } from './cramFile/file';
2
+ export declare type Slice = {
3
+ start: number;
4
+ span: number;
5
+ containerStart: number;
6
+ sliceStart: number;
7
+ sliceBytes: number;
8
+ };
9
+ declare type ParsedIndex = Record<string, Slice[]>;
1
10
  export default class CraiIndex {
11
+ private _parseCache;
12
+ private filehandle;
2
13
  /**
3
14
  *
4
15
  * @param {object} args
@@ -6,21 +17,17 @@ export default class CraiIndex {
6
17
  * @param {string} [args.url]
7
18
  * @param {FileHandle} [args.filehandle]
8
19
  */
9
- constructor(args: {
10
- path?: string | undefined;
11
- url?: string | undefined;
12
- filehandle?: any;
13
- });
14
- _parseCache: AbortablePromiseCache<any, any>;
15
- readFile: any;
16
- parseIndex(): any;
17
- getIndex(opts?: {}): Promise<any>;
20
+ constructor(args: CramFileSource);
21
+ parseIndex(): Promise<ParsedIndex>;
22
+ getIndex(opts?: {
23
+ signal?: AbortSignal;
24
+ }): Promise<ParsedIndex>;
18
25
  /**
19
26
  * @param {number} seqId
20
27
  * @returns {Promise} true if the index contains entries for
21
28
  * the given reference sequence ID, false otherwise
22
29
  */
23
- hasDataForReferenceSequence(seqId: number): Promise<any>;
30
+ hasDataForReferenceSequence(seqId: number): Promise<boolean>;
24
31
  /**
25
32
  * fetch index entries for the given range
26
33
  *
@@ -32,6 +39,6 @@ export default class CraiIndex {
32
39
  * an array of objects of the form
33
40
  * `{start, span, containerStart, sliceStart, sliceBytes }`
34
41
  */
35
- getEntriesForRange(seqId: number, queryStart: number, queryEnd: number): Promise<any>;
42
+ getEntriesForRange(seqId: number, queryStart: number, queryEnd: number): Promise<Slice[]>;
36
43
  }
37
- import AbortablePromiseCache from "abortable-promise-cache";
44
+ export {};
package/dist/craiIndex.js CHANGED
@@ -8,77 +8,33 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
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
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
13
  };
41
14
  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");
47
- var BAI_MAGIC = 21578050; // BAI\1
48
- var Slice = /** @class */ (function () {
49
- function Slice(args) {
50
- Object.assign(this, args);
51
- }
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
- }());
15
+ const abortable_promise_cache_1 = __importDefault(require("abortable-promise-cache"));
16
+ const quick_lru_1 = __importDefault(require("quick-lru"));
17
+ const unzip_1 = require("./unzip");
18
+ const io_1 = require("./io");
19
+ const errors_1 = require("./errors");
20
+ const BAI_MAGIC = 21578050; // BAI\1
57
21
  function addRecordToIndex(index, record) {
58
- if (record.some(function (el) { return el === undefined; })) {
22
+ if (record.some(el => el === undefined)) {
59
23
  throw new errors_1.CramMalformedError('invalid .crai index file');
60
24
  }
61
- var seqId = record[0], start = record[1], span = record[2], containerStart = record[3], sliceStart = record[4], sliceBytes = record[5];
25
+ const [seqId, start, span, containerStart, sliceStart, sliceBytes] = record;
62
26
  if (!index[seqId]) {
63
27
  index[seqId] = [];
64
28
  }
65
- index[seqId].push(new Slice({
66
- start: start,
67
- span: span,
68
- containerStart: containerStart,
69
- sliceStart: sliceStart,
70
- sliceBytes: sliceBytes,
71
- }));
29
+ index[seqId].push({
30
+ start,
31
+ span,
32
+ containerStart,
33
+ sliceStart,
34
+ sliceBytes,
35
+ });
72
36
  }
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.
37
+ class CraiIndex {
82
38
  /**
83
39
  *
84
40
  * @param {object} args
@@ -86,25 +42,24 @@ var CraiIndex = /** @class */ (function () {
86
42
  * @param {string} [args.url]
87
43
  * @param {FileHandle} [args.filehandle]
88
44
  */
89
- function CraiIndex(args) {
90
- var _this = this;
91
- var filehandle = (0, io_1.open)(args.url, args.path, args.filehandle);
45
+ constructor(args) {
46
+ this.filehandle = (0, io_1.open)(args.url, args.path, args.filehandle);
92
47
  this._parseCache = new abortable_promise_cache_1.default({
93
48
  cache: new quick_lru_1.default({ maxSize: 1 }),
94
- fill: function (data, signal) { return _this.parseIndex({ signal: signal }); },
49
+ fill: (data, signal) => this.parseIndex(),
95
50
  });
96
- this.readFile = filehandle.readFile.bind(filehandle);
97
51
  }
98
- CraiIndex.prototype.parseIndex = function () {
99
- var index = {};
100
- return this.readFile()
101
- .then(function (data) {
52
+ parseIndex() {
53
+ const index = {};
54
+ return this.filehandle
55
+ .readFile()
56
+ .then(data => {
102
57
  if (data[0] === 31 && data[1] === 139) {
103
58
  return (0, unzip_1.unzip)(data);
104
59
  }
105
60
  return data;
106
61
  })
107
- .then(function (uncompressedBuffer) {
62
+ .then(uncompressedBuffer => {
108
63
  if (uncompressedBuffer.length > 4 &&
109
64
  uncompressedBuffer.readUInt32LE(0) === BAI_MAGIC) {
110
65
  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');
@@ -113,10 +68,10 @@ var CraiIndex = /** @class */ (function () {
113
68
  // supposed to be only digits and whitespace characters
114
69
  // this is written in a deliberately low-level fashion for performance,
115
70
  // 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];
71
+ let currentRecord = [];
72
+ let currentString = '';
73
+ for (let i = 0; i < uncompressedBuffer.length; i += 1) {
74
+ const charCode = uncompressedBuffer[i];
120
75
  if ((charCode >= 48 && charCode <= 57) /* 0-9 */ ||
121
76
  (!currentString && charCode === 45) /* leading - */) {
122
77
  currentString += String.fromCharCode(charCode);
@@ -145,32 +100,25 @@ var CraiIndex = /** @class */ (function () {
145
100
  addRecordToIndex(index, currentRecord);
146
101
  }
147
102
  // 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; });
103
+ Object.entries(index).forEach(([seqId, ent]) => {
104
+ index[seqId] = ent.sort((a, b) => a.start - b.start || a.span - b.span);
151
105
  });
152
106
  return index;
153
107
  });
154
- };
155
- CraiIndex.prototype.getIndex = function (opts) {
156
- if (opts === void 0) { opts = {}; }
108
+ }
109
+ getIndex(opts = {}) {
157
110
  return this._parseCache.get('index', null, opts.signal);
158
- };
111
+ }
159
112
  /**
160
113
  * @param {number} seqId
161
114
  * @returns {Promise} true if the index contains entries for
162
115
  * the given reference sequence ID, false otherwise
163
116
  */
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
- });
117
+ hasDataForReferenceSequence(seqId) {
118
+ return __awaiter(this, void 0, void 0, function* () {
119
+ return !!(yield this.getIndex())[seqId];
172
120
  });
173
- };
121
+ }
174
122
  /**
175
123
  * fetch index entries for the given range
176
124
  *
@@ -182,40 +130,32 @@ var CraiIndex = /** @class */ (function () {
182
130
  * an array of objects of the form
183
131
  * `{start, span, containerStart, sliceStart, sliceBytes }`
184
132
  */
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];
133
+ getEntriesForRange(seqId, queryStart, queryEnd) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ const seqEntries = (yield this.getIndex())[seqId];
136
+ if (!seqEntries) {
137
+ return [];
138
+ }
139
+ const compare = (entry) => {
140
+ const entryStart = entry.start;
141
+ const entryEnd = entry.start + entry.span;
142
+ if (entryStart > queryEnd) {
143
+ return -1;
144
+ } // entry is ahead of query
145
+ if (entryEnd <= queryStart) {
146
+ return 1;
147
+ } // entry is behind query
148
+ return 0; // entry overlaps query
149
+ };
150
+ const bins = [];
151
+ for (let i = 0; i < seqEntries.length; i += 1) {
152
+ if (compare(seqEntries[i]) === 0) {
153
+ bins.push(seqEntries[i]);
214
154
  }
215
- });
155
+ }
156
+ return bins;
216
157
  });
217
- };
218
- return CraiIndex;
219
- }());
158
+ }
159
+ }
220
160
  exports.default = CraiIndex;
221
161
  //# sourceMappingURL=craiIndex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"craiIndex.js","sourceRoot":"","sources":["../src/craiIndex.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"craiIndex.js","sourceRoot":"","sources":["../src/craiIndex.ts"],"names":[],"mappings":"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"}