UNPKG

molstar

Version:

A comprehensive macromolecular library.

658 lines (657 loc) 33.1 kB
"use strict"; /** * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LazyVolume = exports.ParseJson = exports.ImportJson = exports.ImportString = exports.ParseDx = exports.ParseDsn6 = exports.ParseCcp4 = exports.ParsePly = exports.ParseTop = exports.ParsePrmtop = exports.ParsePsf = exports.ParseCube = exports.ParseCif = exports.ParseBlob = exports.ReadFile = exports.RawData = exports.DownloadBlob = exports.Download = void 0; var tslib_1 = require("tslib"); var CCP4 = tslib_1.__importStar(require("../../mol-io/reader/ccp4/parser")); var cif_1 = require("../../mol-io/reader/cif"); var DSN6 = tslib_1.__importStar(require("../../mol-io/reader/dsn6/parser")); var PLY = tslib_1.__importStar(require("../../mol-io/reader/ply/parser")); var parser_1 = require("../../mol-io/reader/psf/parser"); var mol_state_1 = require("../../mol-state"); var mol_task_1 = require("../../mol-task"); var data_source_1 = require("../../mol-util/data-source"); var param_definition_1 = require("../../mol-util/param-definition"); var objects_1 = require("../objects"); var assets_1 = require("../../mol-util/assets"); var parser_2 = require("../../mol-io/reader/cube/parser"); var parser_3 = require("../../mol-io/reader/dx/parser"); var names_1 = require("../../mol-util/color/names"); var type_helpers_1 = require("../../mol-util/type-helpers"); var parser_4 = require("../../mol-io/reader/prmtop/parser"); var parser_5 = require("../../mol-io/reader/top/parser"); var Download = objects_1.PluginStateTransform.BuiltIn({ name: 'download', display: { name: 'Download', description: 'Download string or binary data from the specified URL' }, from: [objects_1.PluginStateObject.Root], to: [objects_1.PluginStateObject.Data.String, objects_1.PluginStateObject.Data.Binary], params: { url: param_definition_1.ParamDefinition.Url('https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif', { description: 'Resource URL. Must be the same domain or support CORS.' }), label: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Text('')), isBinary: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Boolean(false, { description: 'If true, download data as binary (string otherwise)' })) } })({ apply: function (_a, plugin) { var _this = this; var p = _a.params, cache = _a.cache; return mol_task_1.Task.create('Download', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var url, asset; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: url = assets_1.Asset.getUrlAsset(plugin.managers.asset, p.url); return [4 /*yield*/, plugin.managers.asset.resolve(url, p.isBinary ? 'binary' : 'string').runInContext(ctx)]; case 1: asset = _a.sent(); cache.asset = asset; return [2 /*return*/, p.isBinary ? new objects_1.PluginStateObject.Data.Binary(asset.data, { label: p.label ? p.label : url.url }) : new objects_1.PluginStateObject.Data.String(asset.data, { label: p.label ? p.label : url.url })]; } }); }); }); }, dispose: function (_a) { var _b; var cache = _a.cache; (_b = cache === null || cache === void 0 ? void 0 : cache.asset) === null || _b === void 0 ? void 0 : _b.dispose(); }, update: function (_a) { var oldParams = _a.oldParams, newParams = _a.newParams, b = _a.b; if (oldParams.url !== newParams.url || oldParams.isBinary !== newParams.isBinary) return mol_state_1.StateTransformer.UpdateResult.Recreate; if (oldParams.label !== newParams.label) { b.label = newParams.label || ((typeof newParams.url === 'string') ? newParams.url : newParams.url.url); return mol_state_1.StateTransformer.UpdateResult.Updated; } return mol_state_1.StateTransformer.UpdateResult.Unchanged; } }); exports.Download = Download; var DownloadBlob = objects_1.PluginStateTransform.BuiltIn({ name: 'download-blob', display: { name: 'Download Blob', description: 'Download multiple string or binary data from the specified URLs.' }, from: objects_1.PluginStateObject.Root, to: objects_1.PluginStateObject.Data.Blob, params: { sources: param_definition_1.ParamDefinition.ObjectList({ id: param_definition_1.ParamDefinition.Text('', { label: 'Unique ID' }), url: param_definition_1.ParamDefinition.Url('https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif', { description: 'Resource URL. Must be the same domain or support CORS.' }), isBinary: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Boolean(false, { description: 'If true, download data as binary (string otherwise)' })), canFail: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Boolean(false, { description: 'Indicate whether the download can fail and not be included in the blob as a result.' })) }, function (e) { return "".concat(e.id, ": ").concat(e.url); }), maxConcurrency: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Numeric(4, { min: 1, max: 12, step: 1 }, { description: 'The maximum number of concurrent downloads.' })) } })({ apply: function (_a, plugin) { var _this = this; var params = _a.params, cache = _a.cache; return mol_task_1.Task.create('Download Blob', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var entries, data, assets, i, r, src; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: entries = []; return [4 /*yield*/, (0, data_source_1.ajaxGetMany)(ctx, plugin.managers.asset, params.sources, params.maxConcurrency || 4)]; case 1: data = _a.sent(); assets = []; for (i = 0; i < data.length; i++) { r = data[i], src = params.sources[i]; if (r.kind === 'error') plugin.log.warn("Download ".concat(r.id, " (").concat(src.url, ") failed: ").concat(r.error)); else { assets.push(r.result); entries.push(src.isBinary ? { id: r.id, kind: 'binary', data: r.result.data } : { id: r.id, kind: 'string', data: r.result.data }); } } cache.assets = assets; return [2 /*return*/, new objects_1.PluginStateObject.Data.Blob(entries, { label: 'Data Blob', description: "".concat(entries.length, " ").concat(entries.length === 1 ? 'entry' : 'entries') })]; } }); }); }); }, dispose: function (_a, plugin) { var cache = _a.cache; var assets = cache === null || cache === void 0 ? void 0 : cache.assets; if (!assets) return; for (var _b = 0, assets_2 = assets; _b < assets_2.length; _b++) { var a = assets_2[_b]; a.dispose(); } } // TODO: ?? // update({ oldParams, newParams, b }) { // return 0 as any; // // if (oldParams.url !== newParams.url || oldParams.isBinary !== newParams.isBinary) return StateTransformer.UpdateResult.Recreate; // // if (oldParams.label !== newParams.label) { // // (b.label as string) = newParams.label || newParams.url; // // return StateTransformer.UpdateResult.Updated; // // } // // return StateTransformer.UpdateResult.Unchanged; // } }); exports.DownloadBlob = DownloadBlob; var RawData = objects_1.PluginStateTransform.BuiltIn({ name: 'raw-data', display: { name: 'Raw Data', description: 'Raw data supplied by value.' }, from: [objects_1.PluginStateObject.Root], to: [objects_1.PluginStateObject.Data.String, objects_1.PluginStateObject.Data.Binary], params: { data: param_definition_1.ParamDefinition.Value('', { isHidden: true }), label: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Text('')) } })({ apply: function (_a) { var _this = this; var p = _a.params; return mol_task_1.Task.create('Raw Data', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { if (typeof p.data === 'string') { return [2 /*return*/, new objects_1.PluginStateObject.Data.String(p.data, { label: p.label ? p.label : 'String' })]; } else if (Array.isArray(p.data)) { return [2 /*return*/, new objects_1.PluginStateObject.Data.Binary(new Uint8Array(p.data), { label: p.label ? p.label : 'Binary' })]; } else if (p.data instanceof ArrayBuffer) { return [2 /*return*/, new objects_1.PluginStateObject.Data.Binary(new Uint8Array(p.data), { label: p.label ? p.label : 'Binary' })]; } else if (p.data instanceof Uint8Array) { return [2 /*return*/, new objects_1.PluginStateObject.Data.Binary(p.data, { label: p.label ? p.label : 'Binary' })]; } else { (0, type_helpers_1.assertUnreachable)(p.data); } return [2 /*return*/]; }); }); }); }, update: function (_a) { var oldParams = _a.oldParams, newParams = _a.newParams, b = _a.b; if (oldParams.data !== newParams.data) return mol_state_1.StateTransformer.UpdateResult.Recreate; if (oldParams.label !== newParams.label) { b.label = newParams.label || b.label; return mol_state_1.StateTransformer.UpdateResult.Updated; } return mol_state_1.StateTransformer.UpdateResult.Unchanged; }, customSerialization: { toJSON: function (p) { if (typeof p.data === 'string' || Array.isArray(p.data)) { return p; } else if (p.data instanceof ArrayBuffer) { var v = new Uint8Array(p.data); var data = new Array(v.length); for (var i = 0, _i = v.length; i < _i; i++) data[i] = v[i]; return { data: data, label: p.label }; } else if (p.data instanceof Uint8Array) { var data = new Array(p.data.length); for (var i = 0, _i = p.data.length; i < _i; i++) data[i] = p.data[i]; return { data: data, label: p.label }; } }, fromJSON: function (data) { return data; } } }); exports.RawData = RawData; var ReadFile = objects_1.PluginStateTransform.BuiltIn({ name: 'read-file', display: { name: 'Read File', description: 'Read string or binary data from the specified file' }, from: objects_1.PluginStateObject.Root, to: [objects_1.PluginStateObject.Data.String, objects_1.PluginStateObject.Data.Binary], params: { file: param_definition_1.ParamDefinition.File(), label: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Text('')), isBinary: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Boolean(false, { description: 'If true, open file as as binary (string otherwise)' })) } })({ apply: function (_a, plugin) { var _this = this; var p = _a.params, cache = _a.cache; return mol_task_1.Task.create('Open File', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var asset, o; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (p.file === null) { plugin.log.error('No file(s) selected'); return [2 /*return*/, mol_state_1.StateObject.Null]; } return [4 /*yield*/, plugin.managers.asset.resolve(p.file, p.isBinary ? 'binary' : 'string').runInContext(ctx)]; case 1: asset = _a.sent(); cache.asset = asset; o = p.isBinary ? new objects_1.PluginStateObject.Data.Binary(asset.data, { label: p.label ? p.label : p.file.name }) : new objects_1.PluginStateObject.Data.String(asset.data, { label: p.label ? p.label : p.file.name }); return [2 /*return*/, o]; } }); }); }); }, dispose: function (_a) { var _b; var cache = _a.cache; (_b = cache === null || cache === void 0 ? void 0 : cache.asset) === null || _b === void 0 ? void 0 : _b.dispose(); }, update: function (_a) { var _b; var oldParams = _a.oldParams, newParams = _a.newParams, b = _a.b; if (oldParams.label !== newParams.label) { b.label = newParams.label || ((_b = oldParams.file) === null || _b === void 0 ? void 0 : _b.name) || ''; return mol_state_1.StateTransformer.UpdateResult.Updated; } return mol_state_1.StateTransformer.UpdateResult.Unchanged; }, isSerializable: function () { return ({ isSerializable: false, reason: 'Cannot serialize user loaded files.' }); } }); exports.ReadFile = ReadFile; var ParseBlob = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-blob', display: { name: 'Parse Blob', description: 'Parse multiple data enties' }, from: objects_1.PluginStateObject.Data.Blob, to: objects_1.PluginStateObject.Format.Blob, params: { formats: param_definition_1.ParamDefinition.ObjectList({ id: param_definition_1.ParamDefinition.Text('', { label: 'Unique ID' }), format: param_definition_1.ParamDefinition.Select('cif', [['cif', 'cif']]) }, function (e) { return "".concat(e.id, ": ").concat(e.format); }) } })({ apply: function (_a, plugin) { var _this = this; var a = _a.a, params = _a.params; return mol_task_1.Task.create('Parse Blob', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var map, _a, _b, f, entries, _c, _d, e, parsed; return tslib_1.__generator(this, function (_e) { switch (_e.label) { case 0: map = new Map(); for (_a = 0, _b = params.formats; _a < _b.length; _a++) { f = _b[_a]; map.set(f.id, f.format); } entries = []; _c = 0, _d = a.data; _e.label = 1; case 1: if (!(_c < _d.length)) return [3 /*break*/, 4]; e = _d[_c]; if (!map.has(e.id)) return [3 /*break*/, 3]; return [4 /*yield*/, (e.kind === 'string' ? cif_1.CIF.parse(e.data) : cif_1.CIF.parseBinary(e.data)).runInContext(ctx)]; case 2: parsed = _e.sent(); if (parsed.isError) throw new Error("".concat(e.id, ": ").concat(parsed.message)); entries.push({ id: e.id, kind: 'cif', data: parsed.result }); _e.label = 3; case 3: _c++; return [3 /*break*/, 1]; case 4: return [2 /*return*/, new objects_1.PluginStateObject.Format.Blob(entries, { label: 'Format Blob', description: "".concat(entries.length, " ").concat(entries.length === 1 ? 'entry' : 'entries') })]; } }); }); }); }, // TODO: ?? // update({ oldParams, newParams, b }) { // return 0 as any; // // if (oldParams.url !== newParams.url || oldParams.isBinary !== newParams.isBinary) return StateTransformer.UpdateResult.Recreate; // // if (oldParams.label !== newParams.label) { // // (b.label as string) = newParams.label || newParams.url; // // return StateTransformer.UpdateResult.Updated; // // } // // return StateTransformer.UpdateResult.Unchanged; // } }); exports.ParseBlob = ParseBlob; var ParseCif = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-cif', display: { name: 'Parse CIF', description: 'Parse CIF from String or Binary data' }, from: [objects_1.PluginStateObject.Data.String, objects_1.PluginStateObject.Data.Binary], to: objects_1.PluginStateObject.Format.Cif })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse CIF', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (objects_1.PluginStateObject.Data.String.is(a) ? cif_1.CIF.parse(a.data) : cif_1.CIF.parseBinary(a.data)).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Cif(parsed.result)]; } }); }); }); } }); exports.ParseCif = ParseCif; var ParseCube = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-cube', display: { name: 'Parse Cube', description: 'Parse Cube from String data' }, from: objects_1.PluginStateObject.Data.String, to: objects_1.PluginStateObject.Format.Cube })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse Cube', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, parser_2.parseCube)(a.data, a.label).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Cube(parsed.result)]; } }); }); }); } }); exports.ParseCube = ParseCube; var ParsePsf = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-psf', display: { name: 'Parse PSF', description: 'Parse PSF from String data' }, from: [objects_1.PluginStateObject.Data.String], to: objects_1.PluginStateObject.Format.Psf })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse PSF', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, parser_1.parsePsf)(a.data).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Psf(parsed.result)]; } }); }); }); } }); exports.ParsePsf = ParsePsf; var ParsePrmtop = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-prmtop', display: { name: 'Parse PRMTOP', description: 'Parse PRMTOP from String data' }, from: [objects_1.PluginStateObject.Data.String], to: objects_1.PluginStateObject.Format.Prmtop })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse PRMTOP', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, parser_4.parsePrmtop)(a.data).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Prmtop(parsed.result)]; } }); }); }); } }); exports.ParsePrmtop = ParsePrmtop; var ParseTop = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-top', display: { name: 'Parse TOP', description: 'Parse TOP from String data' }, from: [objects_1.PluginStateObject.Data.String], to: objects_1.PluginStateObject.Format.Top })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse TOP', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, parser_5.parseTop)(a.data).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Top(parsed.result)]; } }); }); }); } }); exports.ParseTop = ParseTop; var ParsePly = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-ply', display: { name: 'Parse PLY', description: 'Parse PLY from String data' }, from: [objects_1.PluginStateObject.Data.String], to: objects_1.PluginStateObject.Format.Ply })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse PLY', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, PLY.parsePly(a.data).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Ply(parsed.result, { label: parsed.result.comments[0] || 'PLY Data' })]; } }); }); }); } }); exports.ParsePly = ParsePly; var ParseCcp4 = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-ccp4', display: { name: 'Parse CCP4/MRC/MAP', description: 'Parse CCP4/MRC/MAP from Binary data' }, from: [objects_1.PluginStateObject.Data.Binary], to: objects_1.PluginStateObject.Format.Ccp4 })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse CCP4/MRC/MAP', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, CCP4.parse(a.data, a.label).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Ccp4(parsed.result)]; } }); }); }); } }); exports.ParseCcp4 = ParseCcp4; var ParseDsn6 = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-dsn6', display: { name: 'Parse DSN6/BRIX', description: 'Parse CCP4/BRIX from Binary data' }, from: [objects_1.PluginStateObject.Data.Binary], to: objects_1.PluginStateObject.Format.Dsn6 })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse DSN6/BRIX', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, DSN6.parse(a.data, a.label).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Dsn6(parsed.result)]; } }); }); }); } }); exports.ParseDsn6 = ParseDsn6; var ParseDx = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-dx', display: { name: 'Parse DX', description: 'Parse DX from Binary/String data' }, from: [objects_1.PluginStateObject.Data.Binary, objects_1.PluginStateObject.Data.String], to: objects_1.PluginStateObject.Format.Dx })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse DX', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var parsed; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (0, parser_3.parseDx)(a.data, a.label).runInContext(ctx)]; case 1: parsed = _a.sent(); if (parsed.isError) throw new Error(parsed.message); return [2 /*return*/, new objects_1.PluginStateObject.Format.Dx(parsed.result)]; } }); }); }); } }); exports.ParseDx = ParseDx; var ImportString = objects_1.PluginStateTransform.BuiltIn({ name: 'import-string', display: { name: 'Import String', description: 'Import given data as a string' }, from: objects_1.PluginStateObject.Root, to: objects_1.PluginStateObject.Data.String, params: { data: param_definition_1.ParamDefinition.Value(''), label: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Text('')), } })({ apply: function (_a) { var _b = _a.params, data = _b.data, label = _b.label; return new objects_1.PluginStateObject.Data.String(data, { label: label || '' }); }, update: function (_a) { var oldParams = _a.oldParams, newParams = _a.newParams, b = _a.b; if (oldParams.data !== newParams.data) return mol_state_1.StateTransformer.UpdateResult.Recreate; if (oldParams.label !== newParams.label) { b.label = newParams.label || ''; return mol_state_1.StateTransformer.UpdateResult.Updated; } return mol_state_1.StateTransformer.UpdateResult.Unchanged; }, isSerializable: function () { return ({ isSerializable: false, reason: 'Cannot serialize user imported strings.' }); } }); exports.ImportString = ImportString; var ImportJson = objects_1.PluginStateTransform.BuiltIn({ name: 'import-json', display: { name: 'Import JSON', description: 'Import given data as a JSON' }, from: objects_1.PluginStateObject.Root, to: objects_1.PluginStateObject.Format.Json, params: { data: param_definition_1.ParamDefinition.Value({}), label: param_definition_1.ParamDefinition.Optional(param_definition_1.ParamDefinition.Text('')), } })({ apply: function (_a) { var _b = _a.params, data = _b.data, label = _b.label; return new objects_1.PluginStateObject.Format.Json(data, { label: label || '' }); }, update: function (_a) { var oldParams = _a.oldParams, newParams = _a.newParams, b = _a.b; if (oldParams.data !== newParams.data) return mol_state_1.StateTransformer.UpdateResult.Recreate; if (oldParams.label !== newParams.label) { b.label = newParams.label || ''; return mol_state_1.StateTransformer.UpdateResult.Updated; } return mol_state_1.StateTransformer.UpdateResult.Unchanged; }, isSerializable: function () { return ({ isSerializable: false, reason: 'Cannot serialize user imported JSON.' }); } }); exports.ImportJson = ImportJson; var ParseJson = objects_1.PluginStateTransform.BuiltIn({ name: 'parse-json', display: { name: 'Parse JSON', description: 'Parse JSON from String data' }, from: [objects_1.PluginStateObject.Data.String], to: objects_1.PluginStateObject.Format.Json })({ apply: function (_a) { var _this = this; var a = _a.a; return mol_task_1.Task.create('Parse JSON', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var json; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, (new Response(a.data)).json()]; case 1: json = _a.sent(); return [2 /*return*/, new objects_1.PluginStateObject.Format.Json(json)]; } }); }); }); } }); exports.ParseJson = ParseJson; var LazyVolume = objects_1.PluginStateTransform.BuiltIn({ name: 'lazy-volume', display: { name: 'Lazy Volume', description: 'A placeholder for lazy loaded volume representation' }, from: objects_1.PluginStateObject.Root, to: objects_1.PluginStateObject.Volume.Lazy, params: { url: param_definition_1.ParamDefinition.Url(''), isBinary: param_definition_1.ParamDefinition.Boolean(false), format: param_definition_1.ParamDefinition.Text('ccp4'), entryId: param_definition_1.ParamDefinition.Value('', { isHidden: true }), isovalues: param_definition_1.ParamDefinition.ObjectList({ type: param_definition_1.ParamDefinition.Text('relative'), value: param_definition_1.ParamDefinition.Numeric(0), color: param_definition_1.ParamDefinition.Color(names_1.ColorNames.black), alpha: param_definition_1.ParamDefinition.Numeric(1, { min: 0, max: 1, step: 0.01 }), volumeIndex: param_definition_1.ParamDefinition.Numeric(0), }, function (e) { return "".concat(e.type, " ").concat(e.value); }) } })({ apply: function (_a) { var _this = this; var a = _a.a, params = _a.params; return mol_task_1.Task.create('Lazy Volume', function (ctx) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var entryId; return tslib_1.__generator(this, function (_a) { entryId = Array.isArray(params.entryId) ? params.entryId.join(', ') : params.entryId; return [2 /*return*/, new objects_1.PluginStateObject.Volume.Lazy(params, { label: "".concat(entryId || params.url), description: 'Lazy Volume' })]; }); }); }); } }); exports.LazyVolume = LazyVolume;