UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

55 lines (54 loc) 1.63 kB
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; }