@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.
- package/CHANGELOG.md +9 -0
- package/dist/craiIndex.d.ts +19 -12
- package/dist/craiIndex.js +63 -123
- package/dist/craiIndex.js.map +1 -1
- package/dist/cram-bundle.js +2 -17
- package/dist/cram-bundle.js.LICENSE.txt +17 -0
- package/dist/cramFile/codecs/_base.d.ts +26 -5
- package/dist/cramFile/codecs/_base.js +3 -39
- package/dist/cramFile/codecs/_base.js.map +1 -1
- package/dist/cramFile/codecs/beta.d.ts +7 -3
- package/dist/cramFile/codecs/beta.js +13 -31
- package/dist/cramFile/codecs/beta.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayLength.d.ts +13 -7
- package/dist/cramFile/codecs/byteArrayLength.js +22 -41
- package/dist/cramFile/codecs/byteArrayLength.js.map +1 -1
- package/dist/cramFile/codecs/byteArrayStop.d.ts +9 -5
- package/dist/cramFile/codecs/byteArrayStop.js +25 -46
- package/dist/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/dist/cramFile/codecs/dataSeriesTypes.d.ts +4 -0
- package/dist/cramFile/codecs/dataSeriesTypes.js +3 -0
- package/dist/cramFile/codecs/dataSeriesTypes.js.map +1 -0
- package/dist/cramFile/codecs/external.d.ts +10 -6
- package/dist/cramFile/codecs/external.js +26 -44
- package/dist/cramFile/codecs/external.js.map +1 -1
- package/dist/cramFile/codecs/gamma.d.ts +7 -3
- package/dist/cramFile/codecs/gamma.js +16 -34
- package/dist/cramFile/codecs/gamma.js.map +1 -1
- package/dist/cramFile/codecs/getBits.d.ts +7 -0
- package/dist/cramFile/codecs/getBits.js +26 -0
- package/dist/cramFile/codecs/getBits.js.map +1 -0
- package/dist/cramFile/codecs/huffman.d.ts +17 -13
- package/dist/cramFile/codecs/huffman.js +76 -85
- package/dist/cramFile/codecs/huffman.js.map +1 -1
- package/dist/cramFile/codecs/index.d.ts +4 -2
- package/dist/cramFile/codecs/index.js +12 -13
- package/dist/cramFile/codecs/index.js.map +1 -1
- package/dist/cramFile/codecs/subexp.d.ts +7 -3
- package/dist/cramFile/codecs/subexp.js +19 -36
- package/dist/cramFile/codecs/subexp.js.map +1 -1
- package/dist/cramFile/constants.d.ts +35 -35
- package/dist/cramFile/constants.js +1 -1
- package/dist/cramFile/constants.js.map +1 -1
- package/dist/cramFile/container/compressionScheme.d.ts +57 -11
- package/dist/cramFile/container/compressionScheme.js +37 -32
- package/dist/cramFile/container/compressionScheme.js.map +1 -1
- package/dist/cramFile/container/index.d.ts +23 -9
- package/dist/cramFile/container/index.js +74 -144
- package/dist/cramFile/container/index.js.map +1 -1
- package/dist/cramFile/encoding.d.ts +78 -0
- package/dist/cramFile/encoding.js +3 -0
- package/dist/cramFile/encoding.js.map +1 -0
- package/dist/cramFile/file.d.ts +91 -41
- package/dist/cramFile/file.js +234 -368
- package/dist/cramFile/file.js.map +1 -1
- package/dist/cramFile/filehandle.d.ts +2 -0
- package/dist/cramFile/filehandle.js +3 -0
- package/dist/cramFile/filehandle.js.map +1 -0
- package/dist/cramFile/index.d.ts +2 -1
- package/dist/cramFile/index.js +4 -1
- package/dist/cramFile/index.js.map +1 -1
- package/dist/cramFile/record.d.ts +61 -17
- package/dist/cramFile/record.js +153 -77
- package/dist/cramFile/record.js.map +1 -1
- package/dist/cramFile/sectionParsers.d.ts +99 -8
- package/dist/cramFile/sectionParsers.js +70 -80
- package/dist/cramFile/sectionParsers.js.map +1 -1
- package/dist/cramFile/slice/decodeRecord.d.ts +30 -2
- package/dist/cramFile/slice/decodeRecord.js +148 -118
- package/dist/cramFile/slice/decodeRecord.js.map +1 -1
- package/dist/cramFile/slice/index.d.ts +21 -14
- package/dist/cramFile/slice/index.js +286 -381
- package/dist/cramFile/slice/index.js.map +1 -1
- package/dist/cramFile/util.d.ts +11 -5
- package/dist/cramFile/util.js +19 -97
- package/dist/cramFile/util.js.map +1 -1
- package/dist/errors.d.ts +5 -10
- package/dist/errors.js +11 -62
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +28 -4
- package/dist/index.js.map +1 -1
- package/dist/indexedCramFile.d.ts +37 -12
- package/dist/indexedCramFile.js +114 -154
- package/dist/indexedCramFile.js.map +1 -1
- package/dist/io/index.d.ts +5 -5
- package/dist/io/index.js +9 -9
- package/dist/io/index.js.map +1 -1
- package/dist/rans/constants.js +3 -3
- package/dist/rans/constants.js.map +1 -1
- package/dist/rans/d04.js +15 -15
- package/dist/rans/d04.js.map +1 -1
- package/dist/rans/d14.js +21 -21
- package/dist/rans/d14.js.map +1 -1
- package/dist/rans/decoding.js +27 -30
- package/dist/rans/decoding.js.map +1 -1
- package/dist/rans/frequencies.js +11 -11
- package/dist/rans/frequencies.js.map +1 -1
- package/dist/rans/index.js +46 -49
- package/dist/rans/index.js.map +1 -1
- package/dist/sam.d.ts +8 -1
- package/dist/sam.js +7 -7
- package/dist/sam.js.map +1 -1
- package/dist/typescript.d.ts +3 -0
- package/dist/typescript.js +11 -0
- package/dist/typescript.js.map +1 -0
- package/dist/unzip-pako.js +1 -1
- package/dist/unzip-pako.js.map +1 -1
- package/dist/unzip.js +1 -1
- package/dist/unzip.js.map +1 -1
- package/errors.js +11 -62
- package/esm/craiIndex.d.ts +19 -12
- package/esm/craiIndex.js +7 -23
- package/esm/craiIndex.js.map +1 -1
- package/esm/cramFile/codecs/_base.d.ts +26 -5
- package/esm/cramFile/codecs/_base.js +1 -35
- package/esm/cramFile/codecs/_base.js.map +1 -1
- package/esm/cramFile/codecs/beta.d.ts +7 -3
- package/esm/cramFile/codecs/beta.js +4 -3
- package/esm/cramFile/codecs/beta.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayLength.d.ts +13 -7
- package/esm/cramFile/codecs/byteArrayLength.js +1 -1
- package/esm/cramFile/codecs/byteArrayLength.js.map +1 -1
- package/esm/cramFile/codecs/byteArrayStop.d.ts +9 -5
- package/esm/cramFile/codecs/byteArrayStop.js +7 -9
- package/esm/cramFile/codecs/byteArrayStop.js.map +1 -1
- package/esm/cramFile/codecs/dataSeriesTypes.d.ts +4 -0
- package/esm/cramFile/codecs/dataSeriesTypes.js +2 -0
- package/esm/cramFile/codecs/dataSeriesTypes.js.map +1 -0
- package/esm/cramFile/codecs/external.d.ts +10 -6
- package/esm/cramFile/codecs/external.js +4 -3
- package/esm/cramFile/codecs/external.js.map +1 -1
- package/esm/cramFile/codecs/gamma.d.ts +7 -3
- package/esm/cramFile/codecs/gamma.js +5 -4
- package/esm/cramFile/codecs/gamma.js.map +1 -1
- package/esm/cramFile/codecs/getBits.d.ts +7 -0
- package/esm/cramFile/codecs/getBits.js +21 -0
- package/esm/cramFile/codecs/getBits.js.map +1 -0
- package/esm/cramFile/codecs/huffman.d.ts +17 -13
- package/esm/cramFile/codecs/huffman.js +22 -9
- package/esm/cramFile/codecs/huffman.js.map +1 -1
- package/esm/cramFile/codecs/index.d.ts +4 -2
- package/esm/cramFile/codecs/index.js +1 -1
- package/esm/cramFile/codecs/index.js.map +1 -1
- package/esm/cramFile/codecs/subexp.d.ts +7 -3
- package/esm/cramFile/codecs/subexp.js +7 -5
- package/esm/cramFile/codecs/subexp.js.map +1 -1
- package/esm/cramFile/constants.d.ts +35 -35
- package/esm/cramFile/constants.js.map +1 -1
- package/esm/cramFile/container/compressionScheme.d.ts +57 -11
- package/esm/cramFile/container/compressionScheme.js +15 -8
- package/esm/cramFile/container/compressionScheme.js.map +1 -1
- package/esm/cramFile/container/index.d.ts +23 -9
- package/esm/cramFile/container/index.js +11 -9
- package/esm/cramFile/container/index.js.map +1 -1
- package/esm/cramFile/encoding.d.ts +78 -0
- package/esm/cramFile/encoding.js +2 -0
- package/esm/cramFile/encoding.js.map +1 -0
- package/esm/cramFile/file.d.ts +91 -41
- package/esm/cramFile/file.js +59 -47
- package/esm/cramFile/file.js.map +1 -1
- package/esm/cramFile/filehandle.d.ts +2 -0
- package/esm/cramFile/filehandle.js +2 -0
- package/esm/cramFile/filehandle.js.map +1 -0
- package/esm/cramFile/index.d.ts +2 -1
- package/esm/cramFile/index.js +1 -0
- package/esm/cramFile/index.js.map +1 -1
- package/esm/cramFile/record.d.ts +61 -17
- package/esm/cramFile/record.js +83 -5
- package/esm/cramFile/record.js.map +1 -1
- package/esm/cramFile/sectionParsers.d.ts +99 -8
- package/esm/cramFile/sectionParsers.js +7 -17
- package/esm/cramFile/sectionParsers.js.map +1 -1
- package/esm/cramFile/slice/decodeRecord.d.ts +30 -2
- package/esm/cramFile/slice/decodeRecord.js +102 -70
- package/esm/cramFile/slice/decodeRecord.js.map +1 -1
- package/esm/cramFile/slice/index.d.ts +21 -14
- package/esm/cramFile/slice/index.js +77 -38
- package/esm/cramFile/slice/index.js.map +1 -1
- package/esm/cramFile/util.d.ts +11 -5
- package/esm/cramFile/util.js +11 -82
- package/esm/cramFile/util.js.map +1 -1
- package/esm/errors.d.ts +5 -10
- package/esm/errors.js +0 -5
- package/esm/errors.js.map +1 -1
- package/esm/index.d.ts +4 -4
- package/esm/index.js +2 -2
- package/esm/index.js.map +1 -1
- package/esm/indexedCramFile.d.ts +37 -12
- package/esm/indexedCramFile.js +19 -8
- package/esm/indexedCramFile.js.map +1 -1
- package/esm/io/index.d.ts +5 -5
- package/esm/io/index.js +3 -3
- package/esm/io/index.js.map +1 -1
- package/esm/sam.d.ts +8 -1
- package/esm/sam.js.map +1 -1
- package/esm/typescript.d.ts +3 -0
- package/esm/typescript.js +7 -0
- package/esm/typescript.js.map +1 -0
- package/package.json +18 -11
- package/src/{craiIndex.js → craiIndex.ts} +36 -30
- package/src/cramFile/codecs/_base.ts +45 -0
- package/src/cramFile/codecs/beta.ts +34 -0
- package/src/cramFile/codecs/{byteArrayLength.js → byteArrayLength.ts} +27 -5
- package/src/cramFile/codecs/{byteArrayStop.js → byteArrayStop.ts} +25 -12
- package/src/cramFile/codecs/dataSeriesTypes.ts +39 -0
- package/src/cramFile/codecs/{external.js → external.ts} +28 -12
- package/src/cramFile/codecs/gamma.ts +42 -0
- package/src/cramFile/codecs/getBits.ts +28 -0
- package/src/cramFile/codecs/{huffman.js → huffman.ts} +48 -15
- package/src/cramFile/codecs/{index.js → index.ts} +9 -3
- package/src/cramFile/codecs/subexp.ts +45 -0
- package/src/cramFile/{constants.js → constants.ts} +0 -0
- package/src/cramFile/container/{compressionScheme.js → compressionScheme.ts} +50 -18
- package/src/cramFile/container/{index.js → index.ts} +13 -13
- package/src/cramFile/encoding.ts +98 -0
- package/src/cramFile/{file.js → file.ts} +136 -62
- package/src/cramFile/filehandle.ts +3 -0
- package/src/cramFile/{index.js → index.ts} +1 -0
- package/src/cramFile/{record.js → record.ts} +185 -14
- package/src/cramFile/{sectionParsers.js → sectionParsers.ts} +148 -20
- package/src/cramFile/slice/{decodeRecord.js → decodeRecord.ts} +158 -105
- package/src/cramFile/slice/{index.js → index.ts} +138 -63
- package/src/cramFile/{util.js → util.ts} +28 -17
- package/src/{errors.js → errors.ts} +0 -5
- package/src/index.ts +5 -0
- package/src/{indexedCramFile.js → indexedCramFile.ts} +79 -19
- package/src/io/{index.js → index.ts} +10 -5
- package/src/{sam.js → sam.ts} +7 -2
- package/src/typescript.ts +17 -0
- package/src/typings/binary-parser.d.ts +44 -0
- package/src/typings/bzip2.d.ts +7 -0
- package/src/typings/htscodecs.d.ts +6 -0
- package/dist/io/bufferCache.d.ts +0 -12
- package/dist/io/bufferCache.js +0 -112
- package/dist/io/bufferCache.js.map +0 -1
- package/dist/io/localFile.d.ts +0 -10
- package/dist/io/localFile.js +0 -108
- package/dist/io/localFile.js.map +0 -1
- package/dist/io/remoteFile.d.ts +0 -16
- package/dist/io/remoteFile.js +0 -143
- package/dist/io/remoteFile.js.map +0 -1
- package/esm/io/bufferCache.d.ts +0 -12
- package/esm/io/bufferCache.js +0 -54
- package/esm/io/bufferCache.js.map +0 -1
- package/esm/io/localFile.d.ts +0 -10
- package/esm/io/localFile.js +0 -31
- package/esm/io/localFile.js.map +0 -1
- package/esm/io/remoteFile.d.ts +0 -16
- package/esm/io/remoteFile.js +0 -64
- package/esm/io/remoteFile.js.map +0 -1
- package/src/cramFile/codecs/_base.js +0 -49
- package/src/cramFile/codecs/beta.js +0 -23
- package/src/cramFile/codecs/gamma.js +0 -30
- package/src/cramFile/codecs/subexp.js +0 -32
- package/src/index.js +0 -5
- package/src/io/bufferCache.js +0 -66
- package/src/io/localFile.js +0 -35
- 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
|
package/dist/craiIndex.d.ts
CHANGED
|
@@ -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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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<
|
|
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<
|
|
42
|
+
getEntriesForRange(seqId: number, queryStart: number, queryEnd: number): Promise<Slice[]>;
|
|
36
43
|
}
|
|
37
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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(
|
|
22
|
+
if (record.some(el => el === undefined)) {
|
|
59
23
|
throw new errors_1.CramMalformedError('invalid .crai index file');
|
|
60
24
|
}
|
|
61
|
-
|
|
25
|
+
const [seqId, start, span, containerStart, sliceStart, sliceBytes] = record;
|
|
62
26
|
if (!index[seqId]) {
|
|
63
27
|
index[seqId] = [];
|
|
64
28
|
}
|
|
65
|
-
index[seqId].push(
|
|
66
|
-
start
|
|
67
|
-
span
|
|
68
|
-
containerStart
|
|
69
|
-
sliceStart
|
|
70
|
-
sliceBytes
|
|
71
|
-
})
|
|
29
|
+
index[seqId].push({
|
|
30
|
+
start,
|
|
31
|
+
span,
|
|
32
|
+
containerStart,
|
|
33
|
+
sliceStart,
|
|
34
|
+
sliceBytes,
|
|
35
|
+
});
|
|
72
36
|
}
|
|
73
|
-
|
|
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
|
-
|
|
90
|
-
|
|
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:
|
|
49
|
+
fill: (data, signal) => this.parseIndex(),
|
|
95
50
|
});
|
|
96
|
-
this.readFile = filehandle.readFile.bind(filehandle);
|
|
97
51
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return this.
|
|
101
|
-
.
|
|
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(
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
for (
|
|
119
|
-
|
|
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(
|
|
149
|
-
|
|
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
|
-
|
|
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
|
-
|
|
165
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
166
|
-
return
|
|
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
|
-
|
|
186
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
-
|
|
219
|
-
}());
|
|
158
|
+
}
|
|
159
|
+
}
|
|
220
160
|
exports.default = CraiIndex;
|
|
221
161
|
//# sourceMappingURL=craiIndex.js.map
|
package/dist/craiIndex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"craiIndex.js","sourceRoot":"","sources":["../src/craiIndex.
|
|
1
|
+
{"version":3,"file":"craiIndex.js","sourceRoot":"","sources":["../src/craiIndex.ts"],"names":[],"mappings":"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"}
|