@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.
Files changed (255) 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 +1 -1
  59. package/dist/cramFile/index.js +1 -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 +3 -3
  80. package/dist/index.js +3 -3
  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 +8 -24
  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 +1 -1
  165. package/esm/cramFile/index.js.map +1 -1
  166. package/esm/cramFile/record.d.ts +61 -17
  167. package/esm/cramFile/record.js +83 -5
  168. package/esm/cramFile/record.js.map +1 -1
  169. package/esm/cramFile/sectionParsers.d.ts +99 -8
  170. package/esm/cramFile/sectionParsers.js +7 -17
  171. package/esm/cramFile/sectionParsers.js.map +1 -1
  172. package/esm/cramFile/slice/decodeRecord.d.ts +30 -2
  173. package/esm/cramFile/slice/decodeRecord.js +102 -70
  174. package/esm/cramFile/slice/decodeRecord.js.map +1 -1
  175. package/esm/cramFile/slice/index.d.ts +21 -14
  176. package/esm/cramFile/slice/index.js +77 -38
  177. package/esm/cramFile/slice/index.js.map +1 -1
  178. package/esm/cramFile/util.d.ts +11 -5
  179. package/esm/cramFile/util.js +11 -82
  180. package/esm/cramFile/util.js.map +1 -1
  181. package/esm/errors.d.ts +5 -10
  182. package/esm/errors.js +0 -5
  183. package/esm/errors.js.map +1 -1
  184. package/esm/index.d.ts +3 -3
  185. package/esm/index.js.map +1 -1
  186. package/esm/indexedCramFile.d.ts +37 -12
  187. package/esm/indexedCramFile.js +19 -8
  188. package/esm/indexedCramFile.js.map +1 -1
  189. package/esm/io/index.d.ts +5 -5
  190. package/esm/io/index.js +3 -3
  191. package/esm/io/index.js.map +1 -1
  192. package/esm/sam.d.ts +8 -1
  193. package/esm/sam.js.map +1 -1
  194. package/esm/typescript.d.ts +3 -0
  195. package/esm/typescript.js +7 -0
  196. package/esm/typescript.js.map +1 -0
  197. package/package.json +18 -11
  198. package/src/{craiIndex.js → craiIndex.ts} +37 -31
  199. package/src/cramFile/codecs/_base.ts +45 -0
  200. package/src/cramFile/codecs/beta.ts +34 -0
  201. package/src/cramFile/codecs/{byteArrayLength.js → byteArrayLength.ts} +27 -5
  202. package/src/cramFile/codecs/{byteArrayStop.js → byteArrayStop.ts} +25 -12
  203. package/src/cramFile/codecs/dataSeriesTypes.ts +39 -0
  204. package/src/cramFile/codecs/{external.js → external.ts} +28 -12
  205. package/src/cramFile/codecs/gamma.ts +42 -0
  206. package/src/cramFile/codecs/getBits.ts +28 -0
  207. package/src/cramFile/codecs/{huffman.js → huffman.ts} +48 -15
  208. package/src/cramFile/codecs/{index.js → index.ts} +9 -3
  209. package/src/cramFile/codecs/subexp.ts +45 -0
  210. package/src/cramFile/{constants.js → constants.ts} +0 -0
  211. package/src/cramFile/container/{compressionScheme.js → compressionScheme.ts} +50 -18
  212. package/src/cramFile/container/{index.js → index.ts} +13 -13
  213. package/src/cramFile/encoding.ts +98 -0
  214. package/src/cramFile/{file.js → file.ts} +136 -62
  215. package/src/cramFile/filehandle.ts +3 -0
  216. package/src/cramFile/{index.js → index.ts} +0 -0
  217. package/src/cramFile/{record.js → record.ts} +185 -14
  218. package/src/cramFile/{sectionParsers.js → sectionParsers.ts} +148 -20
  219. package/src/cramFile/slice/{decodeRecord.js → decodeRecord.ts} +158 -105
  220. package/src/cramFile/slice/{index.js → index.ts} +138 -63
  221. package/src/cramFile/{util.js → util.ts} +28 -17
  222. package/src/{errors.js → errors.ts} +0 -5
  223. package/src/{index.js → index.ts} +0 -0
  224. package/src/{indexedCramFile.js → indexedCramFile.ts} +79 -19
  225. package/src/io/{index.js → index.ts} +10 -5
  226. package/src/{sam.js → sam.ts} +7 -2
  227. package/src/typescript.ts +17 -0
  228. package/src/typings/binary-parser.d.ts +44 -0
  229. package/src/typings/bzip2.d.ts +7 -0
  230. package/src/typings/htscodecs.d.ts +6 -0
  231. package/dist/io/bufferCache.d.ts +0 -12
  232. package/dist/io/bufferCache.js +0 -112
  233. package/dist/io/bufferCache.js.map +0 -1
  234. package/dist/io/localFile.d.ts +0 -10
  235. package/dist/io/localFile.js +0 -108
  236. package/dist/io/localFile.js.map +0 -1
  237. package/dist/io/remoteFile.d.ts +0 -16
  238. package/dist/io/remoteFile.js +0 -143
  239. package/dist/io/remoteFile.js.map +0 -1
  240. package/esm/io/bufferCache.d.ts +0 -12
  241. package/esm/io/bufferCache.js +0 -54
  242. package/esm/io/bufferCache.js.map +0 -1
  243. package/esm/io/localFile.d.ts +0 -10
  244. package/esm/io/localFile.js +0 -31
  245. package/esm/io/localFile.js.map +0 -1
  246. package/esm/io/remoteFile.d.ts +0 -16
  247. package/esm/io/remoteFile.js +0 -64
  248. package/esm/io/remoteFile.js.map +0 -1
  249. package/src/cramFile/codecs/_base.js +0 -49
  250. package/src/cramFile/codecs/beta.js +0 -23
  251. package/src/cramFile/codecs/gamma.js +0 -30
  252. package/src/cramFile/codecs/subexp.js +0 -32
  253. package/src/io/bufferCache.js +0 -66
  254. package/src/io/localFile.js +0 -35
  255. package/src/io/remoteFile.js +0 -71
@@ -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":"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"}
@@ -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
- }
@@ -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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"}
@@ -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
- }
@@ -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
@@ -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"}
@@ -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";
@@ -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
@@ -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
- }
@@ -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
- }
@@ -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
- }
@@ -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
- }