import { AnyEntity } from "../entity/any-entity.type"; import { META } from "../symbols"; import { CommonField } from "./field-names/common-field.type"; import { EntityField } from "./field-names/entity-field.type"; import { PrimaryField } from "./field-names/primary-field.type"; import { RelationField } from "./field-names/relation-field.type"; import { RelationFieldToMany } from "./field-names/relation-field-to-many.type"; import { RelationFieldToOne } from "./field-names/relation-field-to-one.type"; export class FieldDiscriminator { static isPrimaryField( entity: Entity, field: EntityField, ): field is PrimaryField { return entity[META].primary == field; } static isCommonField( entity: Entity, field: EntityField, ): field is CommonField { return ( !this.isPrimaryField(entity, field) && !this.isRelationField(entity, field) ); } static isRelationField( entity: Entity, field: EntityField, ): field is RelationField { return !!entity[META].fields[field].relation; } static isRelationFieldToOne( entity: Entity, field: EntityField, ): field is RelationFieldToOne { return ( this.isRelationField(entity, field) && !this.isRelationFieldToMany(entity, field) ); } static isRelationFieldToMany( entity: Entity, field: EntityField, ): field is RelationFieldToMany { return ( this.isRelationField(entity, field) && !!entity[META].fields[field].relation!.multi ); } }