UNPKG

mobx-keystone

Version:

A MobX powered state management solution based on data trees with first class support for TypeScript, snapshots, patches and much more

64 lines (56 loc) 1.46 kB
import type { ModelClass } from "../modelShared/BaseModelShared" import { failure } from "../utils" import type { AnyDataModel } from "./BaseDataModel" import { BaseDataModel } from "./BaseDataModel" /** * Checks if an object is a data model instance. * * @param model * @returns */ export function isDataModel(model: unknown): model is AnyDataModel { return model instanceof BaseDataModel } /** * @internal * * Asserts something is actually a data model. * * @param model * @param argName */ export function assertIsDataModel( model: unknown, argName: string, customErrMsg = "must be a data model instance" ): asserts model is AnyDataModel { if (!isDataModel(model)) { throw failure(`${argName} ${customErrMsg}`) } } /** * @internal */ export function isDataModelClass(modelClass: unknown): modelClass is ModelClass<AnyDataModel> { if (typeof modelClass !== "function") { return false } if (modelClass !== BaseDataModel && !(modelClass.prototype instanceof BaseDataModel)) { return false } return true } /** * @internal */ export function assertIsDataModelClass( modelClass: unknown, argName: string ): asserts modelClass is ModelClass<AnyDataModel> { if (typeof modelClass !== "function") { throw failure(`${argName} must be a class`) } if (modelClass !== BaseDataModel && !(modelClass.prototype instanceof BaseDataModel)) { throw failure(`${argName} must extend DataModel`) } }