@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
55 lines (54 loc) • 1.63 kB
JavaScript
import { isArrayType, isLateType, isMapType, isOptionalType, isUnionType, } from '@jbrowse/mobx-state-tree';
export function getSubType(type) {
let t;
if (isOptionalType(type)) {
t = type._subtype || type.type;
}
else if (isArrayType(type) || isMapType(type)) {
t = type._subtype || type._subType || type.subType;
}
else if (typeof type.getSubType === 'function') {
return type.getSubType();
}
else {
throw new TypeError('unsupported mst type');
}
if (!t) {
throw new Error('failed to get subtype');
}
return t;
}
export function getUnionSubTypes(unionType) {
if (!isUnionType(unionType)) {
throw new TypeError('not an MST union type');
}
const t = unionType._types ||
unionType.types ||
getSubType(unionType)._types ||
getSubType(unionType).types;
if (!t) {
throw new Error('failed to extract subtypes from mst union');
}
return t;
}
export function getPropertyType(type, propertyName) {
return type.properties[propertyName];
}
export function getDefaultValue(type) {
if (!isOptionalType(type)) {
throw new TypeError('type must be an optional type');
}
return type._defaultValue || type.defaultValue;
}
export function getEnumerationValues(type) {
const subtypes = getUnionSubTypes(type);
return subtypes.map(t => t.value);
}
export function resolveLateType(maybeLate) {
if (!isUnionType(maybeLate) &&
!isArrayType(maybeLate) &&
isLateType(maybeLate)) {
return maybeLate.getSubType();
}
return maybeLate;
}