@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
169 lines (168 loc) • 6.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.UNSUPPORTED = exports.UNKNOWN = void 0;
exports.getTrackAssemblyNames = getTrackAssemblyNames;
exports.getConfAssemblyNames = getConfAssemblyNames;
exports.getRpcSessionId = getRpcSessionId;
exports.getParentRenderProps = getParentRenderProps;
exports.getBlob = getBlob;
exports.getBlobMap = getBlobMap;
exports.setBlobMap = setBlobMap;
exports.storeBlobLocation = storeBlobLocation;
exports.makeIndex = makeIndex;
exports.makeIndexType = makeIndexType;
exports.getFileName = getFileName;
exports.guessAdapter = guessAdapter;
exports.guessTrackType = guessTrackType;
exports.generateUnsupportedTrackConf = generateUnsupportedTrackConf;
exports.generateUnknownTrackConf = generateUnknownTrackConf;
exports.getTrackName = getTrackName;
const mobx_state_tree_1 = require("mobx-state-tree");
const index_1 = require("./index");
const configuration_1 = require("../configuration");
function getTrackAssemblyNames(track) {
return getConfAssemblyNames(track.configuration);
}
function getConfAssemblyNames(conf) {
const trackAssemblyNames = (0, configuration_1.readConfObject)(conf, 'assemblyNames');
if (!trackAssemblyNames) {
const parent = (0, mobx_state_tree_1.getParent)(conf);
if ('sequence' in parent) {
return [(0, configuration_1.readConfObject)(parent, 'name')];
}
else {
throw new Error('unknown assembly names');
}
}
return trackAssemblyNames;
}
function getRpcSessionId(thisNode) {
let highestRpcSessionId;
for (let node = thisNode; !(0, mobx_state_tree_1.isRoot)(node); node = (0, mobx_state_tree_1.getParent)(node)) {
if ('rpcSessionId' in node) {
highestRpcSessionId = node.rpcSessionId;
}
}
if (!highestRpcSessionId) {
throw new Error('getRpcSessionId failed, no parent node in the state tree has an `rpcSessionId` attribute');
}
return highestRpcSessionId;
}
function getParentRenderProps(node) {
for (let currentNode = (0, mobx_state_tree_1.getParent)(node); !(0, mobx_state_tree_1.isRoot)(currentNode); currentNode = (0, mobx_state_tree_1.getParent)(currentNode)) {
if ('renderProps' in currentNode) {
return currentNode.renderProps();
}
}
return {};
}
exports.UNKNOWN = 'UNKNOWN';
exports.UNSUPPORTED = 'UNSUPPORTED';
let blobMap = {};
function getBlob(id) {
return blobMap[id];
}
function getBlobMap() {
return blobMap;
}
function setBlobMap(map) {
blobMap = map;
}
let counter = 0;
function storeBlobLocation(location) {
if ('blob' in location) {
const blobId = `b${+Date.now()}-${counter++}`;
blobMap[blobId] = location.blob;
return { name: location.blob.name, blobId, locationType: 'BlobLocation' };
}
return location;
}
function makeIndex(location, suffix) {
if ('uri' in location) {
return {
uri: location.uri + suffix,
locationType: 'UriLocation',
};
}
else if ('localPath' in location) {
return {
localPath: location.localPath + suffix,
locationType: 'LocalPathLocation',
};
}
else {
return location;
}
}
function makeIndexType(name, typeA, typeB) {
return (name === null || name === void 0 ? void 0 : name.toUpperCase().endsWith(typeA)) ? typeA : typeB;
}
function getFileName(track) {
const uri = 'uri' in track ? track.uri : undefined;
const localPath = 'localPath' in track ? track.localPath : undefined;
const blob = 'blobId' in track ? track : undefined;
return ((blob === null || blob === void 0 ? void 0 : blob.name) ||
(uri === null || uri === void 0 ? void 0 : uri.slice(uri.lastIndexOf('/') + 1)) ||
(localPath === null || localPath === void 0 ? void 0 : localPath.slice(localPath.replace(/\\/g, '/').lastIndexOf('/') + 1)) ||
'');
}
function guessAdapter(file, index, adapterHint, model) {
if (model) {
const { pluginManager } = (0, index_1.getEnv)(model);
const adapterGuesser = pluginManager.evaluateExtensionPoint('Core-guessAdapterForLocation', (_file, _index, _adapterHint) => {
return undefined;
});
const adapter = adapterGuesser(file, index, adapterHint);
if (adapter) {
return adapter;
}
}
return {
type: exports.UNKNOWN,
};
}
function guessTrackType(adapterType, model) {
if (model) {
const session = (0, index_1.getSession)(model);
const trackTypeGuesser = (0, index_1.getEnv)(session).pluginManager.evaluateExtensionPoint('Core-guessTrackTypeForLocation', (_adapterName) => {
return undefined;
});
const trackType = trackTypeGuesser(adapterType);
if (trackType) {
return trackType;
}
}
return 'FeatureTrack';
}
function generateUnsupportedTrackConf(trackName, trackUrl, categories) {
const conf = {
type: 'FeatureTrack',
name: `${trackName} (Unsupported)`,
description: `Support not yet implemented for "${trackUrl}"`,
category: categories,
trackId: '',
};
conf.trackId = (0, index_1.objectHash)(conf);
return conf;
}
function generateUnknownTrackConf(trackName, trackUrl, categories) {
const conf = {
type: 'FeatureTrack',
name: `${trackName} (Unknown)`,
description: `Could not determine track type for "${trackUrl}"`,
category: categories,
trackId: '',
};
conf.trackId = (0, index_1.objectHash)(conf);
return conf;
}
function getTrackName(conf, session) {
const trackName = (0, configuration_1.readConfObject)(conf, 'name');
if (!trackName && (0, configuration_1.readConfObject)(conf, 'type') === 'ReferenceSequenceTrack') {
const asm = session.assemblies.find(a => a.sequence === conf);
return asm
? `Reference sequence (${(0, configuration_1.readConfObject)(asm, 'displayName') || (0, configuration_1.readConfObject)(asm, 'name')})`
: 'Reference sequence';
}
return trackName;
}