import type { UnknownFieldSetModelChildren } from '../utils'; import type { FieldArrayModel } from './array'; import type { IModel } from './base'; import type { BasicModel } from './basic'; import type { FieldModel } from './field'; import type { FormModel } from './form'; import type { ModelRef } from './ref'; import type { FieldSetModel } from './set'; export const FORM_ID = Symbol('form'); export const MODEL_ID = Symbol('model'); export const FIELD_ID = Symbol('field'); export const REF_ID = Symbol('ref'); export const FIELD_ARRAY_ID = Symbol('field-array'); export const SET_ID = Symbol('set'); export function isModel(maybeModel: any): maybeModel is BasicModel { return Boolean(maybeModel?.[MODEL_ID]); } export function isFieldModel(maybeModel: any): maybeModel is FieldModel { return !!(maybeModel && maybeModel[FIELD_ID]); } export function isModelRef, M extends IModel>( maybeModelRef: any ): maybeModelRef is ModelRef { return !!(maybeModelRef && maybeModelRef[REF_ID]); } export function isFieldArrayModel< Item, Child extends IModel = IModel >(maybeModel: any): maybeModel is FieldArrayModel { return !!(maybeModel && maybeModel[FIELD_ARRAY_ID]); } export function isFieldSetModel( maybeModel: any ): maybeModel is FieldSetModel { return !!(maybeModel && maybeModel[SET_ID]); } export function isFormModel( maybeModel: any ): maybeModel is FormModel { return !!(maybeModel && maybeModel[FORM_ID]); } export function typeOfModel(model: any) { if (isFieldModel(model)) { return 'FieldModel'; } if (isFieldArrayModel(model)) { return 'FieldArrayModel'; } if (isFieldSetModel(model)) { return 'FieldSetModel'; } if (isFormModel(model)) { return 'FormModel'; } if (isModelRef(model)) { return 'ModelRef'; } if (isModel(model)) { return 'BasicModel'; } return 'unknown'; }