import { EntityManagerExportExpansions } from "../../core/entity-manager-export-expansions.type"; import { EntityManagerExportExpansionsEmpty } from "../../core/entity-manager-export-expansions-empty.type"; import { CommonField } from "../../field/field-names/common-field.type"; import { PrimaryField } from "../../field/field-names/primary-field.type"; import { RelationField } from "../../field/field-names/relation-field.type"; import { RelationFieldToMany } from "../../field/field-names/relation-field-to-many.type"; import { RelationFieldToOne } from "../../field/field-names/relation-field-to-one.type"; import { PrimaryKey } from "../../field/field-values/primary-key.type"; import { AbstractSerializer } from "../../serializer/abstract.serializer"; import { NestedSerializerMap } from "../../serializer/serializer-map/nested-serializer-map.type"; import { NestedSerializerMapEmpty } from "../../serializer/serializer-map/nested-serializer-map-empty.type"; import { SerializerType } from "../../serializer/serializer-type.interface"; import { AnyEntity } from "../any-entity.type"; import { EntityFromRelationFieldValue } from "../entity-from-relation-field-value.type"; export type EntityDataExported< Entity extends AnyEntity, Serializers extends NestedSerializerMap = NestedSerializerMapEmpty, Expansions extends EntityManagerExportExpansions = EntityManagerExportExpansionsEmpty, > = { [Field in | CommonField | PrimaryField]: Serializers[Field] extends SerializerType< AbstractSerializer > ? Value : Entity[Field]; } & { [Field in RelationField]: Expansions[Field] extends | true | EntityManagerExportExpansions< EntityFromRelationFieldValue > ? Field extends RelationFieldToOne ? EntityDataExported< EntityFromRelationFieldValue, NestedSerializerMapUniformed< EntityFromRelationFieldValue, Serializers[Field] >, RelationExpansionsUniformed< EntityFromRelationFieldValue, Expansions[Field] > > : Field extends RelationFieldToMany ? EntityDataExported< EntityFromRelationFieldValue, NestedSerializerMapUniformed< EntityFromRelationFieldValue, Serializers[Field] >, RelationExpansionsUniformed< EntityFromRelationFieldValue, Expansions[Field] > >[] : never : Field extends RelationFieldToOne ? PrimaryKey : Field extends RelationFieldToMany ? PrimaryKey[] : never; }; type NestedSerializerMapUniformed< Entity extends AnyEntity, Value, > = Value extends NestedSerializerMap ? Value : NestedSerializerMapEmpty; type RelationExpansionsUniformed< Entity extends AnyEntity, Value, > = Value extends EntityManagerExportExpansions ? Value : EntityManagerExportExpansionsEmpty;