import { type EntityTarget, type ObjectLiteral } from 'typeorm'; import { type WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface'; import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { TwentyORMException, TwentyORMExceptionCode, } from 'src/engine/twenty-orm/exceptions/twenty-orm.exception'; export const getObjectMetadataFromEntityTarget = ( entityTarget: EntityTarget, internalContext: WorkspaceInternalContext, ): FlatObjectMetadata => { if (typeof entityTarget !== 'string') { throw new TwentyORMException( 'Entity target must be a string', TwentyORMExceptionCode.MALFORMED_METADATA, ); } const objectMetadataName = entityTarget; const objectMetadataId = internalContext.objectIdByNameSingular[objectMetadataName]; if (!objectMetadataId) { throw new TwentyORMException( `Object metadata for object "${objectMetadataName}" is missing ` + `in workspace "${internalContext.workspaceId}" ` + `with object metadata collection length: ${ Object.keys(internalContext.objectIdByNameSingular).length }`, TwentyORMExceptionCode.MALFORMED_METADATA, ); } const objectMetadata = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: objectMetadataId, flatEntityMaps: internalContext.flatObjectMetadataMaps, }); if (!objectMetadata) { throw new TwentyORMException( `Object metadata for object "${objectMetadataName}" (id: ${objectMetadataId}) is missing`, TwentyORMExceptionCode.MALFORMED_METADATA, ); } return objectMetadata; };