UNPKG

mobx-keystone-mindreframer

Version:

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

48 lines (43 loc) 1.23 kB
import { failure } from "../utils" import type { AnyStandardType, AnyType } from "./schemas" import { isLateTypeChecker, LateTypeChecker, TypeChecker } from "./TypeChecker" const registeredStandardTypes = new Map<any, AnyStandardType>() /** * @ignore */ export function registerStandardType(value: any, typeChecker: AnyStandardType) { registeredStandardTypes.set(value, typeChecker) } /** * @ignore */ export function resolveTypeChecker(v: AnyType | TypeChecker | LateTypeChecker): TypeChecker { let next: TypeChecker | LateTypeChecker = v as any while (true) { if (next instanceof TypeChecker) { return next } else if (isLateTypeChecker(next)) { next = next() } else { const tc = registeredStandardTypes.get(v) if (tc) { return tc as any } throw failure("type checker could not be resolved") } } } /** * @ignore */ export function resolveStandardType(v: AnyType | TypeChecker | LateTypeChecker): AnyStandardType { if (v instanceof TypeChecker || isLateTypeChecker(v)) { return v as any } else { const tc = registeredStandardTypes.get(v) if (tc) { return tc } throw failure("standard type could not be resolved") } }