@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/dist/io/remoteFile.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
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 cross_fetch_1 = __importDefault(require("cross-fetch"));
|
|
43
|
-
var bufferCache_1 = __importDefault(require("./bufferCache"));
|
|
44
|
-
var RemoteFile = /** @class */ (function () {
|
|
45
|
-
function RemoteFile(source) {
|
|
46
|
-
var _this = this;
|
|
47
|
-
this.position = 0;
|
|
48
|
-
this.url = source;
|
|
49
|
-
this.cache = new bufferCache_1.default({
|
|
50
|
-
fetch: function (start, length) { return _this._fetch(start, length); },
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
RemoteFile.prototype._fetch = function (position, length) {
|
|
54
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
55
|
-
var headers, response, nodeBuffer, _a, _b, sizeMatch;
|
|
56
|
-
return __generator(this, function (_c) {
|
|
57
|
-
switch (_c.label) {
|
|
58
|
-
case 0:
|
|
59
|
-
headers = {};
|
|
60
|
-
if (length < Infinity) {
|
|
61
|
-
headers.range = "bytes=".concat(position, "-").concat(position + length);
|
|
62
|
-
}
|
|
63
|
-
else if (length === Infinity && position !== 0) {
|
|
64
|
-
headers.range = "bytes=".concat(position, "-");
|
|
65
|
-
}
|
|
66
|
-
return [4 /*yield*/, (0, cross_fetch_1.default)(this.url, {
|
|
67
|
-
method: 'GET',
|
|
68
|
-
headers: headers,
|
|
69
|
-
redirect: 'follow',
|
|
70
|
-
mode: 'cors',
|
|
71
|
-
})];
|
|
72
|
-
case 1:
|
|
73
|
-
response = _c.sent();
|
|
74
|
-
if (!((response.status === 200 && position === 0) ||
|
|
75
|
-
response.status === 206)) return [3 /*break*/, 3];
|
|
76
|
-
_b = (_a = Buffer).from;
|
|
77
|
-
return [4 /*yield*/, response.arrayBuffer()];
|
|
78
|
-
case 2:
|
|
79
|
-
nodeBuffer = _b.apply(_a, [_c.sent()]);
|
|
80
|
-
sizeMatch = /\/(\d+)$/.exec(response.headers.get('content-range'));
|
|
81
|
-
if (sizeMatch[1]) {
|
|
82
|
-
this._stat = { size: parseInt(sizeMatch[1], 10) };
|
|
83
|
-
}
|
|
84
|
-
return [2 /*return*/, nodeBuffer];
|
|
85
|
-
case 3: throw new Error("HTTP ".concat(response.status, " fetching ").concat(this.url));
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
};
|
|
90
|
-
RemoteFile.prototype.read = function (buffer, offset, length, position) {
|
|
91
|
-
if (offset === void 0) { offset = 0; }
|
|
92
|
-
if (length === void 0) { length = Infinity; }
|
|
93
|
-
if (position === void 0) { position = 0; }
|
|
94
|
-
var readPosition = position;
|
|
95
|
-
if (readPosition === null) {
|
|
96
|
-
readPosition = this.position;
|
|
97
|
-
this.position += length;
|
|
98
|
-
}
|
|
99
|
-
return this.cache.get(buffer, offset, length, position);
|
|
100
|
-
};
|
|
101
|
-
RemoteFile.prototype.readFile = function () {
|
|
102
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
103
|
-
var response, _a, _b;
|
|
104
|
-
return __generator(this, function (_c) {
|
|
105
|
-
switch (_c.label) {
|
|
106
|
-
case 0: return [4 /*yield*/, (0, cross_fetch_1.default)(this.url, {
|
|
107
|
-
method: 'GET',
|
|
108
|
-
redirect: 'follow',
|
|
109
|
-
mode: 'cors',
|
|
110
|
-
})];
|
|
111
|
-
case 1:
|
|
112
|
-
response = _c.sent();
|
|
113
|
-
_b = (_a = Buffer).from;
|
|
114
|
-
return [4 /*yield*/, response.arrayBuffer()];
|
|
115
|
-
case 2: return [2 /*return*/, _b.apply(_a, [_c.sent()])];
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
};
|
|
120
|
-
RemoteFile.prototype.stat = function () {
|
|
121
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
122
|
-
var buf;
|
|
123
|
-
return __generator(this, function (_a) {
|
|
124
|
-
switch (_a.label) {
|
|
125
|
-
case 0:
|
|
126
|
-
if (!!this._stat) return [3 /*break*/, 2];
|
|
127
|
-
buf = Buffer.allocUnsafe(10);
|
|
128
|
-
return [4 /*yield*/, this.read(buf, 0, 10, 0)];
|
|
129
|
-
case 1:
|
|
130
|
-
_a.sent();
|
|
131
|
-
if (!this._stat) {
|
|
132
|
-
throw new Error("unable to determine size of file at ".concat(this.url));
|
|
133
|
-
}
|
|
134
|
-
_a.label = 2;
|
|
135
|
-
case 2: return [2 /*return*/, this._stat];
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
};
|
|
140
|
-
return RemoteFile;
|
|
141
|
-
}());
|
|
142
|
-
exports.default = RemoteFile;
|
|
143
|
-
//# sourceMappingURL=remoteFile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../../src/io/remoteFile.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAA+B;AAC/B,8DAAuC;AAEvC;IACE,oBAAY,MAAM;QAAlB,iBAMC;QALC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAA;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAW,CAAC;YAC3B,KAAK,EAAE,UAAC,KAAK,EAAE,MAAM,IAAK,OAAA,KAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAA1B,CAA0B;SACrD,CAAC,CAAA;IACJ,CAAC;IAEK,2BAAM,GAAZ,UAAa,QAAQ,EAAE,MAAM;;;;;;wBACrB,OAAO,GAAG,EAAE,CAAA;wBAClB,IAAI,MAAM,GAAG,QAAQ,EAAE;4BACrB,OAAO,CAAC,KAAK,GAAG,gBAAS,QAAQ,cAAI,QAAQ,GAAG,MAAM,CAAE,CAAA;yBACzD;6BAAM,IAAI,MAAM,KAAK,QAAQ,IAAI,QAAQ,KAAK,CAAC,EAAE;4BAChD,OAAO,CAAC,KAAK,GAAG,gBAAS,QAAQ,MAAG,CAAA;yBACrC;wBACgB,qBAAM,IAAA,qBAAK,EAAC,IAAI,CAAC,GAAG,EAAE;gCACrC,MAAM,EAAE,KAAK;gCACb,OAAO,SAAA;gCACP,QAAQ,EAAE,QAAQ;gCAClB,IAAI,EAAE,MAAM;6BACb,CAAC,EAAA;;wBALI,QAAQ,GAAG,SAKf;6BAEA,CAAA,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,KAAK,CAAC,CAAC;4BAC3C,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAA,EADvB,wBACuB;wBAEJ,KAAA,CAAA,KAAA,MAAM,CAAA,CAAC,IAAI,CAAA;wBAAC,qBAAM,QAAQ,CAAC,WAAW,EAAE,EAAA;;wBAArD,UAAU,GAAG,cAAY,SAA4B,EAAC;wBAGtD,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAA;wBACxE,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;4BAChB,IAAI,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;yBAClD;wBAED,sBAAO,UAAU,EAAA;4BAEnB,MAAM,IAAI,KAAK,CAAC,eAAQ,QAAQ,CAAC,MAAM,uBAAa,IAAI,CAAC,GAAG,CAAE,CAAC,CAAA;;;;KAChE;IAED,yBAAI,GAAJ,UAAK,MAAM,EAAE,MAAU,EAAE,MAAiB,EAAE,QAAY;QAA3C,uBAAA,EAAA,UAAU;QAAE,uBAAA,EAAA,iBAAiB;QAAE,yBAAA,EAAA,YAAY;QACtD,IAAI,YAAY,GAAG,QAAQ,CAAA;QAC3B,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC5B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAA;SACxB;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IACzD,CAAC;IAEK,6BAAQ,GAAd;;;;;4BACmB,qBAAM,IAAA,qBAAK,EAAC,IAAI,CAAC,GAAG,EAAE;4BACrC,MAAM,EAAE,KAAK;4BACb,QAAQ,EAAE,QAAQ;4BAClB,IAAI,EAAE,MAAM;yBACb,CAAC,EAAA;;wBAJI,QAAQ,GAAG,SAIf;wBACK,KAAA,CAAA,KAAA,MAAM,CAAA,CAAC,IAAI,CAAA;wBAAC,qBAAM,QAAQ,CAAC,WAAW,EAAE,EAAA;4BAA/C,sBAAO,cAAY,SAA4B,EAAC,EAAA;;;;KACjD;IAEK,yBAAI,GAAV;;;;;;6BACM,CAAC,IAAI,CAAC,KAAK,EAAX,wBAAW;wBACP,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;wBAClC,qBAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAA;;wBAA9B,SAA8B,CAAA;wBAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;4BACf,MAAM,IAAI,KAAK,CAAC,8CAAuC,IAAI,CAAC,GAAG,CAAE,CAAC,CAAA;yBACnE;;4BAEH,sBAAO,IAAI,CAAC,KAAK,EAAA;;;;KAClB;IACH,iBAAC;AAAD,CAAC,AAnED,IAmEC"}
|
package/esm/io/bufferCache.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export default class BufferCache {
|
|
2
|
-
constructor({ fetch, size, chunkSize }: {
|
|
3
|
-
fetch: any;
|
|
4
|
-
size?: number | undefined;
|
|
5
|
-
chunkSize?: number | undefined;
|
|
6
|
-
});
|
|
7
|
-
fetch: any;
|
|
8
|
-
chunkSize: number;
|
|
9
|
-
lruCache: any;
|
|
10
|
-
get(outputBuffer: any, offset: any, length: any, position: any): Promise<void>;
|
|
11
|
-
_getChunk(chunkNumber: any): any;
|
|
12
|
-
}
|
package/esm/io/bufferCache.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import LRU from 'quick-lru';
|
|
2
|
-
export default class BufferCache {
|
|
3
|
-
constructor({ fetch, size = 10000000, chunkSize = 32768 }) {
|
|
4
|
-
if (!fetch) {
|
|
5
|
-
throw new Error('fetch function required');
|
|
6
|
-
}
|
|
7
|
-
this.fetch = fetch;
|
|
8
|
-
this.chunkSize = chunkSize;
|
|
9
|
-
this.lruCache = new LRU({ maxSize: Math.floor(size / chunkSize) });
|
|
10
|
-
}
|
|
11
|
-
async get(outputBuffer, offset, length, position) {
|
|
12
|
-
if (outputBuffer.length < offset + length) {
|
|
13
|
-
throw new Error('output buffer not big enough for request');
|
|
14
|
-
}
|
|
15
|
-
// calculate the list of chunks involved in this fetch
|
|
16
|
-
const firstChunk = Math.floor(position / this.chunkSize);
|
|
17
|
-
const lastChunk = Math.floor((position + length) / this.chunkSize);
|
|
18
|
-
// fetch them all as necessary
|
|
19
|
-
const fetches = new Array(lastChunk - firstChunk + 1);
|
|
20
|
-
for (let chunk = firstChunk; chunk <= lastChunk; chunk += 1) {
|
|
21
|
-
fetches[chunk - firstChunk] = this._getChunk(chunk).then(data => ({
|
|
22
|
-
data,
|
|
23
|
-
chunkNumber: chunk,
|
|
24
|
-
}));
|
|
25
|
-
}
|
|
26
|
-
// stitch together the response buffer using them
|
|
27
|
-
const chunks = await Promise.all(fetches);
|
|
28
|
-
const chunksOffset = position - chunks[0].chunkNumber * this.chunkSize;
|
|
29
|
-
chunks.forEach(({ data, chunkNumber }) => {
|
|
30
|
-
const chunkPositionStart = chunkNumber * this.chunkSize;
|
|
31
|
-
let copyStart = 0;
|
|
32
|
-
let copyEnd = this.chunkSize;
|
|
33
|
-
let copyOffset = offset + (chunkNumber - firstChunk) * this.chunkSize - chunksOffset;
|
|
34
|
-
if (chunkNumber === firstChunk) {
|
|
35
|
-
copyOffset = offset;
|
|
36
|
-
copyStart = chunksOffset;
|
|
37
|
-
}
|
|
38
|
-
if (chunkNumber === lastChunk) {
|
|
39
|
-
copyEnd = position + length - chunkPositionStart;
|
|
40
|
-
}
|
|
41
|
-
data.copy(outputBuffer, copyOffset, copyStart, copyEnd);
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
_getChunk(chunkNumber) {
|
|
45
|
-
const cachedPromise = this.lruCache.get(chunkNumber);
|
|
46
|
-
if (cachedPromise) {
|
|
47
|
-
return cachedPromise;
|
|
48
|
-
}
|
|
49
|
-
const freshPromise = this.fetch(chunkNumber * this.chunkSize, this.chunkSize);
|
|
50
|
-
this.lruCache.set(chunkNumber, freshPromise);
|
|
51
|
-
return freshPromise;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=bufferCache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bufferCache.js","sourceRoot":"","sources":["../../src/io/bufferCache.js"],"names":[],"mappings":"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"}
|
package/esm/io/localFile.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export default class LocalFile {
|
|
2
|
-
constructor(source: any);
|
|
3
|
-
position: number;
|
|
4
|
-
filename: any;
|
|
5
|
-
fd: any;
|
|
6
|
-
read(buffer: any, offset: number | undefined, length: any, position: any): Promise<any>;
|
|
7
|
-
readFile(): Promise<any>;
|
|
8
|
-
stat(): Promise<any>;
|
|
9
|
-
_stat: any;
|
|
10
|
-
}
|
package/esm/io/localFile.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { promisify } from 'es6-promisify';
|
|
2
|
-
import fs from 'fs';
|
|
3
|
-
const fsOpen = fs && promisify(fs.open);
|
|
4
|
-
const fsRead = fs && promisify(fs.read);
|
|
5
|
-
const fsFStat = fs && promisify(fs.fstat);
|
|
6
|
-
const fsReadFile = fs && promisify(fs.readFile);
|
|
7
|
-
export default class LocalFile {
|
|
8
|
-
constructor(source) {
|
|
9
|
-
this.position = 0;
|
|
10
|
-
this.filename = source;
|
|
11
|
-
this.fd = fsOpen(this.filename, 'r');
|
|
12
|
-
}
|
|
13
|
-
async read(buffer, offset = 0, length, position) {
|
|
14
|
-
let readPosition = position;
|
|
15
|
-
if (readPosition === null) {
|
|
16
|
-
readPosition = this.position;
|
|
17
|
-
this.position += length;
|
|
18
|
-
}
|
|
19
|
-
return fsRead(await this.fd, buffer, offset, length, position);
|
|
20
|
-
}
|
|
21
|
-
async readFile() {
|
|
22
|
-
return fsReadFile(await this.fd);
|
|
23
|
-
}
|
|
24
|
-
async stat() {
|
|
25
|
-
if (!this._stat) {
|
|
26
|
-
this._stat = await fsFStat(await this.fd);
|
|
27
|
-
}
|
|
28
|
-
return this._stat;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=localFile.js.map
|
package/esm/io/localFile.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"localFile.js","sourceRoot":"","sources":["../../src/io/localFile.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,MAAM,MAAM,GAAG,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;AACvC,MAAM,MAAM,GAAG,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;AACvC,MAAM,OAAO,GAAG,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;AACzC,MAAM,UAAU,GAAG,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;AAE/C,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,YAAY,MAAM;QAChB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAA;QACtB,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ;QAC7C,IAAI,YAAY,GAAG,QAAQ,CAAA;QAC3B,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC5B,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAA;SACxB;QACD,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAA;SAC1C;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
|
package/esm/io/remoteFile.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export default class RemoteFile {
|
|
2
|
-
constructor(source: any);
|
|
3
|
-
position: number;
|
|
4
|
-
url: any;
|
|
5
|
-
cache: BufferCache;
|
|
6
|
-
_fetch(position: any, length: any): Promise<Buffer>;
|
|
7
|
-
_stat: {
|
|
8
|
-
size: number;
|
|
9
|
-
} | undefined;
|
|
10
|
-
read(buffer: any, offset?: number, length?: number, position?: number): Promise<void>;
|
|
11
|
-
readFile(): Promise<Buffer>;
|
|
12
|
-
stat(): Promise<{
|
|
13
|
-
size: number;
|
|
14
|
-
}>;
|
|
15
|
-
}
|
|
16
|
-
import BufferCache from "./bufferCache";
|
package/esm/io/remoteFile.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import fetch from 'cross-fetch';
|
|
2
|
-
import BufferCache from './bufferCache';
|
|
3
|
-
export default class RemoteFile {
|
|
4
|
-
constructor(source) {
|
|
5
|
-
this.position = 0;
|
|
6
|
-
this.url = source;
|
|
7
|
-
this.cache = new BufferCache({
|
|
8
|
-
fetch: (start, length) => this._fetch(start, length),
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
async _fetch(position, length) {
|
|
12
|
-
const headers = {};
|
|
13
|
-
if (length < Infinity) {
|
|
14
|
-
headers.range = `bytes=${position}-${position + length}`;
|
|
15
|
-
}
|
|
16
|
-
else if (length === Infinity && position !== 0) {
|
|
17
|
-
headers.range = `bytes=${position}-`;
|
|
18
|
-
}
|
|
19
|
-
const response = await fetch(this.url, {
|
|
20
|
-
method: 'GET',
|
|
21
|
-
headers,
|
|
22
|
-
redirect: 'follow',
|
|
23
|
-
mode: 'cors',
|
|
24
|
-
});
|
|
25
|
-
if ((response.status === 200 && position === 0) ||
|
|
26
|
-
response.status === 206) {
|
|
27
|
-
const nodeBuffer = Buffer.from(await response.arrayBuffer());
|
|
28
|
-
// try to parse out the size of the remote file
|
|
29
|
-
const sizeMatch = /\/(\d+)$/.exec(response.headers.get('content-range'));
|
|
30
|
-
if (sizeMatch[1]) {
|
|
31
|
-
this._stat = { size: parseInt(sizeMatch[1], 10) };
|
|
32
|
-
}
|
|
33
|
-
return nodeBuffer;
|
|
34
|
-
}
|
|
35
|
-
throw new Error(`HTTP ${response.status} fetching ${this.url}`);
|
|
36
|
-
}
|
|
37
|
-
read(buffer, offset = 0, length = Infinity, position = 0) {
|
|
38
|
-
let readPosition = position;
|
|
39
|
-
if (readPosition === null) {
|
|
40
|
-
readPosition = this.position;
|
|
41
|
-
this.position += length;
|
|
42
|
-
}
|
|
43
|
-
return this.cache.get(buffer, offset, length, position);
|
|
44
|
-
}
|
|
45
|
-
async readFile() {
|
|
46
|
-
const response = await fetch(this.url, {
|
|
47
|
-
method: 'GET',
|
|
48
|
-
redirect: 'follow',
|
|
49
|
-
mode: 'cors',
|
|
50
|
-
});
|
|
51
|
-
return Buffer.from(await response.arrayBuffer());
|
|
52
|
-
}
|
|
53
|
-
async stat() {
|
|
54
|
-
if (!this._stat) {
|
|
55
|
-
const buf = Buffer.allocUnsafe(10);
|
|
56
|
-
await this.read(buf, 0, 10, 0);
|
|
57
|
-
if (!this._stat) {
|
|
58
|
-
throw new Error(`unable to determine size of file at ${this.url}`);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return this._stat;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=remoteFile.js.map
|
package/esm/io/remoteFile.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remoteFile.js","sourceRoot":"","sources":["../../src/io/remoteFile.js"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { CramBufferOverrunError } from '../../errors'
|
|
2
|
-
|
|
3
|
-
const validDataTypes = {
|
|
4
|
-
int: true,
|
|
5
|
-
byte: true,
|
|
6
|
-
long: true,
|
|
7
|
-
byteArray: true,
|
|
8
|
-
byteArrayBlock: true,
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// codec base class
|
|
12
|
-
export default class CramCodec {
|
|
13
|
-
constructor(parameters = {}, dataType) {
|
|
14
|
-
this.parameters = parameters
|
|
15
|
-
this.dataType = dataType
|
|
16
|
-
if (!dataType) {
|
|
17
|
-
throw new TypeError('must provide a data type to codec constructor')
|
|
18
|
-
}
|
|
19
|
-
if (!validDataTypes[dataType]) {
|
|
20
|
-
throw new TypeError(`invalid data type ${dataType}`)
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// decode(slice, coreDataBlock, blocksByContentId, cursors) {
|
|
25
|
-
// }
|
|
26
|
-
|
|
27
|
-
_getBits(data, cursor, numBits) {
|
|
28
|
-
let val = 0
|
|
29
|
-
if (
|
|
30
|
-
cursor.bytePosition + (7 - cursor.bitPosition + numBits) / 8 >
|
|
31
|
-
data.length
|
|
32
|
-
) {
|
|
33
|
-
throw new CramBufferOverrunError(
|
|
34
|
-
'read error during decoding. the file seems to be truncated.',
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
for (let dlen = numBits; dlen; dlen -= 1) {
|
|
38
|
-
// get the next `dlen` bits in the input, put them in val
|
|
39
|
-
val <<= 1
|
|
40
|
-
val |= (data[cursor.bytePosition] >> cursor.bitPosition) & 1
|
|
41
|
-
cursor.bitPosition -= 1
|
|
42
|
-
if (cursor.bitPosition < 0) {
|
|
43
|
-
cursor.bytePosition += 1
|
|
44
|
-
}
|
|
45
|
-
cursor.bitPosition &= 7
|
|
46
|
-
}
|
|
47
|
-
return val
|
|
48
|
-
}
|
|
49
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { CramUnimplementedError } from '../../errors'
|
|
2
|
-
import CramCodec from './_base'
|
|
3
|
-
|
|
4
|
-
export default class BetaCodec extends CramCodec {
|
|
5
|
-
constructor(parameters = {}, dataType) {
|
|
6
|
-
super(parameters, dataType)
|
|
7
|
-
if (this.dataType !== 'int') {
|
|
8
|
-
throw new CramUnimplementedError(
|
|
9
|
-
`${this.dataType} decoding not yet implemented by BETA codec`,
|
|
10
|
-
)
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
decode(slice, coreDataBlock, blocksByContentId, cursors) {
|
|
15
|
-
const data =
|
|
16
|
-
this._getBits(
|
|
17
|
-
coreDataBlock.content,
|
|
18
|
-
cursors.coreBlock,
|
|
19
|
-
this.parameters.length,
|
|
20
|
-
) - this.parameters.offset
|
|
21
|
-
return data
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { CramUnimplementedError } from '../../errors'
|
|
2
|
-
import CramCodec from './_base'
|
|
3
|
-
|
|
4
|
-
export default class GammaCodec extends CramCodec {
|
|
5
|
-
constructor(parameters = {}, dataType) {
|
|
6
|
-
super(parameters, dataType)
|
|
7
|
-
if (this.dataType !== 'int') {
|
|
8
|
-
throw new CramUnimplementedError(
|
|
9
|
-
`${this.dataType} decoding not yet implemented by GAMMA codec`,
|
|
10
|
-
)
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
decode(slice, coreDataBlock, blocksByContentId, cursors) {
|
|
15
|
-
let length = 1
|
|
16
|
-
|
|
17
|
-
while (this._getBits(coreDataBlock.content, cursors.coreBlock, 1) === 0) {
|
|
18
|
-
length += 1
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const readBits = this._getBits(
|
|
22
|
-
coreDataBlock.content,
|
|
23
|
-
cursors.coreBlock,
|
|
24
|
-
length - 1,
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
const value = readBits | (1 << (length - 1))
|
|
28
|
-
return value - this.parameters.offset
|
|
29
|
-
}
|
|
30
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { CramUnimplementedError } from '../../errors'
|
|
2
|
-
import CramCodec from './_base'
|
|
3
|
-
|
|
4
|
-
export default class SubexpCodec extends CramCodec {
|
|
5
|
-
constructor(parameters = {}, dataType) {
|
|
6
|
-
super(parameters, dataType)
|
|
7
|
-
if (this.dataType !== 'int') {
|
|
8
|
-
throw new CramUnimplementedError(
|
|
9
|
-
`${this.dataType} decoding not yet implemented by SUBEXP codec`,
|
|
10
|
-
)
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
decode(slice, coreDataBlock, blocksByContentId, cursors) {
|
|
15
|
-
let numLeadingOnes = 0
|
|
16
|
-
while (this._getBits(coreDataBlock.content, cursors.coreBlock, 1)) {
|
|
17
|
-
numLeadingOnes += 1
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
let b
|
|
21
|
-
let n
|
|
22
|
-
if (numLeadingOnes === 0) {
|
|
23
|
-
b = this.parameters.K
|
|
24
|
-
n = this._getBits(coreDataBlock.content, cursors.coreBlock, b)
|
|
25
|
-
} else {
|
|
26
|
-
b = numLeadingOnes + this.parameters.K - 1
|
|
27
|
-
n = (1 << b) | this._getBits(coreDataBlock.content, cursors.coreBlock, b)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
return n - this.parameters.offset
|
|
31
|
-
}
|
|
32
|
-
}
|
package/src/io/bufferCache.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import LRU from 'quick-lru'
|
|
2
|
-
|
|
3
|
-
export default class BufferCache {
|
|
4
|
-
constructor({ fetch, size = 10000000, chunkSize = 32768 }) {
|
|
5
|
-
if (!fetch) {
|
|
6
|
-
throw new Error('fetch function required')
|
|
7
|
-
}
|
|
8
|
-
this.fetch = fetch
|
|
9
|
-
this.chunkSize = chunkSize
|
|
10
|
-
this.lruCache = new LRU({ maxSize: Math.floor(size / chunkSize) })
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
async get(outputBuffer, offset, length, position) {
|
|
14
|
-
if (outputBuffer.length < offset + length) {
|
|
15
|
-
throw new Error('output buffer not big enough for request')
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// calculate the list of chunks involved in this fetch
|
|
19
|
-
const firstChunk = Math.floor(position / this.chunkSize)
|
|
20
|
-
const lastChunk = Math.floor((position + length) / this.chunkSize)
|
|
21
|
-
|
|
22
|
-
// fetch them all as necessary
|
|
23
|
-
const fetches = new Array(lastChunk - firstChunk + 1)
|
|
24
|
-
for (let chunk = firstChunk; chunk <= lastChunk; chunk += 1) {
|
|
25
|
-
fetches[chunk - firstChunk] = this._getChunk(chunk).then(data => ({
|
|
26
|
-
data,
|
|
27
|
-
chunkNumber: chunk,
|
|
28
|
-
}))
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// stitch together the response buffer using them
|
|
32
|
-
const chunks = await Promise.all(fetches)
|
|
33
|
-
const chunksOffset = position - chunks[0].chunkNumber * this.chunkSize
|
|
34
|
-
chunks.forEach(({ data, chunkNumber }) => {
|
|
35
|
-
const chunkPositionStart = chunkNumber * this.chunkSize
|
|
36
|
-
let copyStart = 0
|
|
37
|
-
let copyEnd = this.chunkSize
|
|
38
|
-
let copyOffset =
|
|
39
|
-
offset + (chunkNumber - firstChunk) * this.chunkSize - chunksOffset
|
|
40
|
-
|
|
41
|
-
if (chunkNumber === firstChunk) {
|
|
42
|
-
copyOffset = offset
|
|
43
|
-
copyStart = chunksOffset
|
|
44
|
-
}
|
|
45
|
-
if (chunkNumber === lastChunk) {
|
|
46
|
-
copyEnd = position + length - chunkPositionStart
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
data.copy(outputBuffer, copyOffset, copyStart, copyEnd)
|
|
50
|
-
})
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
_getChunk(chunkNumber) {
|
|
54
|
-
const cachedPromise = this.lruCache.get(chunkNumber)
|
|
55
|
-
if (cachedPromise) {
|
|
56
|
-
return cachedPromise
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const freshPromise = this.fetch(
|
|
60
|
-
chunkNumber * this.chunkSize,
|
|
61
|
-
this.chunkSize,
|
|
62
|
-
)
|
|
63
|
-
this.lruCache.set(chunkNumber, freshPromise)
|
|
64
|
-
return freshPromise
|
|
65
|
-
}
|
|
66
|
-
}
|
package/src/io/localFile.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { promisify } from 'es6-promisify'
|
|
2
|
-
import fs from 'fs'
|
|
3
|
-
|
|
4
|
-
const fsOpen = fs && promisify(fs.open)
|
|
5
|
-
const fsRead = fs && promisify(fs.read)
|
|
6
|
-
const fsFStat = fs && promisify(fs.fstat)
|
|
7
|
-
const fsReadFile = fs && promisify(fs.readFile)
|
|
8
|
-
|
|
9
|
-
export default class LocalFile {
|
|
10
|
-
constructor(source) {
|
|
11
|
-
this.position = 0
|
|
12
|
-
this.filename = source
|
|
13
|
-
this.fd = fsOpen(this.filename, 'r')
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async read(buffer, offset = 0, length, position) {
|
|
17
|
-
let readPosition = position
|
|
18
|
-
if (readPosition === null) {
|
|
19
|
-
readPosition = this.position
|
|
20
|
-
this.position += length
|
|
21
|
-
}
|
|
22
|
-
return fsRead(await this.fd, buffer, offset, length, position)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async readFile() {
|
|
26
|
-
return fsReadFile(await this.fd)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async stat() {
|
|
30
|
-
if (!this._stat) {
|
|
31
|
-
this._stat = await fsFStat(await this.fd)
|
|
32
|
-
}
|
|
33
|
-
return this._stat
|
|
34
|
-
}
|
|
35
|
-
}
|
package/src/io/remoteFile.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import fetch from 'cross-fetch'
|
|
2
|
-
import BufferCache from './bufferCache'
|
|
3
|
-
|
|
4
|
-
export default class RemoteFile {
|
|
5
|
-
constructor(source) {
|
|
6
|
-
this.position = 0
|
|
7
|
-
this.url = source
|
|
8
|
-
this.cache = new BufferCache({
|
|
9
|
-
fetch: (start, length) => this._fetch(start, length),
|
|
10
|
-
})
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
async _fetch(position, length) {
|
|
14
|
-
const headers = {}
|
|
15
|
-
if (length < Infinity) {
|
|
16
|
-
headers.range = `bytes=${position}-${position + length}`
|
|
17
|
-
} else if (length === Infinity && position !== 0) {
|
|
18
|
-
headers.range = `bytes=${position}-`
|
|
19
|
-
}
|
|
20
|
-
const response = await fetch(this.url, {
|
|
21
|
-
method: 'GET',
|
|
22
|
-
headers,
|
|
23
|
-
redirect: 'follow',
|
|
24
|
-
mode: 'cors',
|
|
25
|
-
})
|
|
26
|
-
if (
|
|
27
|
-
(response.status === 200 && position === 0) ||
|
|
28
|
-
response.status === 206
|
|
29
|
-
) {
|
|
30
|
-
const nodeBuffer = Buffer.from(await response.arrayBuffer())
|
|
31
|
-
|
|
32
|
-
// try to parse out the size of the remote file
|
|
33
|
-
const sizeMatch = /\/(\d+)$/.exec(response.headers.get('content-range'))
|
|
34
|
-
if (sizeMatch[1]) {
|
|
35
|
-
this._stat = { size: parseInt(sizeMatch[1], 10) }
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return nodeBuffer
|
|
39
|
-
}
|
|
40
|
-
throw new Error(`HTTP ${response.status} fetching ${this.url}`)
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
read(buffer, offset = 0, length = Infinity, position = 0) {
|
|
44
|
-
let readPosition = position
|
|
45
|
-
if (readPosition === null) {
|
|
46
|
-
readPosition = this.position
|
|
47
|
-
this.position += length
|
|
48
|
-
}
|
|
49
|
-
return this.cache.get(buffer, offset, length, position)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async readFile() {
|
|
53
|
-
const response = await fetch(this.url, {
|
|
54
|
-
method: 'GET',
|
|
55
|
-
redirect: 'follow',
|
|
56
|
-
mode: 'cors',
|
|
57
|
-
})
|
|
58
|
-
return Buffer.from(await response.arrayBuffer())
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async stat() {
|
|
62
|
-
if (!this._stat) {
|
|
63
|
-
const buf = Buffer.allocUnsafe(10)
|
|
64
|
-
await this.read(buf, 0, 10, 0)
|
|
65
|
-
if (!this._stat) {
|
|
66
|
-
throw new Error(`unable to determine size of file at ${this.url}`)
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return this._stat
|
|
70
|
-
}
|
|
71
|
-
}
|