@gmod/cram 1.6.3 → 1.7.0
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 +1 -1
- package/dist/cramFile/index.js +1 -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 +3 -3
- package/dist/index.js +3 -3
- 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 +8 -24
- 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 +1 -1
- 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 +3 -3
- 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} +37 -31
- 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} +0 -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.js → index.ts} +0 -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/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.0
|
|
2
|
+
|
|
3
|
+
- Typescript entire codebase, big thanks to @0xorial for taking on this effort!
|
|
4
|
+
- Update to use webpack 5 for UMD build
|
|
5
|
+
|
|
6
|
+
# v1.6.4
|
|
7
|
+
|
|
8
|
+
- Fix off by one in returning features from getRecordsFromRange
|
|
9
|
+
|
|
1
10
|
# v1.6.3
|
|
2
11
|
|
|
3
12
|
- Optimize CRAM parsing slightly (15% improvement on many short reads). This removes support for big endian machines
|
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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"}
|