molstar
Version:
A comprehensive macromolecular library.
71 lines • 3.22 kB
JavaScript
/**
* Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.getG3dDataBlock = exports.getG3dHeader = void 0;
var tslib_1 = require("tslib");
var decode_1 = require("../../mol-io/common/msgpack/decode");
var mol_task_1 = require("../../mol-task");
var zip_1 = require("../../mol-util/zip/zip");
var HEADER_SIZE = 64000;
function getG3dHeader(ctx, urlOrData) {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var data, last, header;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, getRawData(ctx, urlOrData, { offset: 0, size: HEADER_SIZE })];
case 1:
data = _a.sent();
last = data.length - 1;
for (; last >= 0; last--) {
if (data[last] !== 0)
break;
}
header = (0, decode_1.decodeMsgPack)(data.slice(0, last + 1));
return [2 /*return*/, header];
}
});
});
}
exports.getG3dHeader = getG3dHeader;
function getG3dDataBlock(ctx, header, urlOrData, resolution) {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var data, unzipped;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
if (!header.offsets[resolution])
throw new Error("Resolution " + resolution + " not available.");
return [4 /*yield*/, getRawData(ctx, urlOrData, header.offsets[resolution])];
case 1:
data = _a.sent();
return [4 /*yield*/, ctx.runTask(mol_task_1.Task.create('Unzip', function (ctx) { return (0, zip_1.inflate)(ctx, data); }))];
case 2:
unzipped = _a.sent();
return [2 /*return*/, {
header: header,
resolution: resolution,
data: (0, decode_1.decodeMsgPack)(unzipped)
}];
}
});
});
}
exports.getG3dDataBlock = getG3dDataBlock;
function getRawData(ctx, urlOrData, range) {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
if (!(typeof urlOrData === 'string')) return [3 /*break*/, 2];
return [4 /*yield*/, ctx.runTask(ctx.fetch({ url: urlOrData, headers: [['Range', "bytes=" + range.offset + "-" + (range.offset + range.size - 1)]], type: 'binary' }))];
case 1: return [2 /*return*/, _a.sent()];
case 2: return [2 /*return*/, urlOrData.slice(range.offset, range.offset + range.size)];
}
});
});
}
//# sourceMappingURL=data.js.map
;