@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
63 lines (62 loc) • 2.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSubType = getSubType;
exports.getUnionSubTypes = getUnionSubTypes;
exports.getPropertyType = getPropertyType;
exports.getDefaultValue = getDefaultValue;
exports.getEnumerationValues = getEnumerationValues;
exports.resolveLateType = resolveLateType;
const mobx_state_tree_1 = require("mobx-state-tree");
function getSubType(type) {
let t;
if ((0, mobx_state_tree_1.isOptionalType)(type)) {
t = type._subtype || type.type;
}
else if ((0, mobx_state_tree_1.isArrayType)(type) || (0, mobx_state_tree_1.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;
}
function getUnionSubTypes(unionType) {
if (!(0, mobx_state_tree_1.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;
}
function getPropertyType(type, propertyName) {
return type.properties[propertyName];
}
function getDefaultValue(type) {
if (!(0, mobx_state_tree_1.isOptionalType)(type)) {
throw new TypeError('type must be an optional type');
}
return type._defaultValue || type.defaultValue;
}
function getEnumerationValues(type) {
const subtypes = getUnionSubTypes(type);
return subtypes.map(t => t.value);
}
function resolveLateType(maybeLate) {
if (!(0, mobx_state_tree_1.isUnionType)(maybeLate) &&
!(0, mobx_state_tree_1.isArrayType)(maybeLate) &&
(0, mobx_state_tree_1.isLateType)(maybeLate)) {
return maybeLate.getSubType();
}
return maybeLate;
}