UNPKG

molstar

Version:

A comprehensive macromolecular library.

66 lines 2.91 kB
/** * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { __awaiter, __generator } from "tslib"; import { decodeMsgPack } from '../../mol-io/common/msgpack/decode'; import { Task } from '../../mol-task'; import { inflate } from '../../mol-util/zip/zip'; var HEADER_SIZE = 64000; export function getG3dHeader(ctx, urlOrData) { return __awaiter(this, void 0, void 0, function () { var data, last, header; return __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 = decodeMsgPack(data.slice(0, last + 1)); return [2 /*return*/, header]; } }); }); } export function getG3dDataBlock(ctx, header, urlOrData, resolution) { return __awaiter(this, void 0, void 0, function () { var data, unzipped; return __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(Task.create('Unzip', function (ctx) { return inflate(ctx, data); }))]; case 2: unzipped = _a.sent(); return [2 /*return*/, { header: header, resolution: resolution, data: decodeMsgPack(unzipped) }]; } }); }); } function getRawData(ctx, urlOrData, range) { return __awaiter(this, void 0, void 0, function () { return __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