mobx-keystone
Version:
A MobX powered state management solution based on data trees with first class support for TypeScript, snapshots, patches and much more
35 lines (32 loc) • 1.13 kB
text/typescript
import type { ModelClass } from "../modelShared/BaseModelShared"
import { modelMetadataSymbol } from "../modelShared/modelSymbols"
import type { AnyType } from "../types/schemas"
import { failure } from "../utils"
import type { AnyDataModel } from "./BaseDataModel"
import { isDataModel, isDataModelClass } from "./utils"
/**
* Associated data model metadata.
*/
export interface DataModelMetadata {
/**
* Associated data type for runtime checking (if any).
*/
dataType?: AnyType
}
/**
* Returns the associated metadata for a data model instance or class.
*
* @param modelClassOrInstance Data model class or instance.
* @returns The associated metadata.
*/
export function getDataModelMetadata(
modelClassOrInstance: AnyDataModel | ModelClass<AnyDataModel>
): DataModelMetadata {
if (isDataModel(modelClassOrInstance)) {
return (modelClassOrInstance as any).constructor[modelMetadataSymbol]
} else if (isDataModelClass(modelClassOrInstance)) {
return (modelClassOrInstance as any)[modelMetadataSymbol]
} else {
throw failure(`modelClassOrInstance must be a model class or instance`)
}
}