## Before <img width="920" alt="before" src="https://github.com/user-attachments/assets/4809556f-0459-4f56-a716-b969a943d492"> ## After <img width="920" alt="after" src="https://github.com/user-attachments/assets/504186b2-d002-482d-bc3e-2dda45c314b1">
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
|
|
|
|
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
|
import { ObjectMetadataMap } from 'src/engine/metadata-modules/utils/generate-object-metadata-map.util';
|
|
import {
|
|
deduceRelationDirection,
|
|
RelationDirection,
|
|
} from 'src/engine/utils/deduce-relation-direction.util';
|
|
|
|
export const getRelationObjectMetadata = (
|
|
fieldMetadata: FieldMetadataInterface,
|
|
objectMetadataMap: ObjectMetadataMap,
|
|
) => {
|
|
const relationMetadata = getRelationMetadata(fieldMetadata);
|
|
|
|
const relationDirection = deduceRelationDirection(
|
|
fieldMetadata,
|
|
relationMetadata,
|
|
);
|
|
|
|
const referencedObjectMetadata =
|
|
relationDirection === RelationDirection.TO
|
|
? objectMetadataMap[relationMetadata.fromObjectMetadataId]
|
|
: objectMetadataMap[relationMetadata.toObjectMetadataId];
|
|
|
|
if (!referencedObjectMetadata) {
|
|
throw new Error(
|
|
`Referenced object metadata not found for relation ${relationMetadata.id}`,
|
|
);
|
|
}
|
|
|
|
return referencedObjectMetadata;
|
|
};
|
|
|
|
export const getRelationMetadata = (
|
|
fieldMetadata: FieldMetadataInterface,
|
|
): RelationMetadataEntity => {
|
|
const relationMetadata =
|
|
fieldMetadata.fromRelationMetadata ?? fieldMetadata.toRelationMetadata;
|
|
|
|
if (!relationMetadata) {
|
|
throw new Error(
|
|
`Relation metadata not found for field ${fieldMetadata.name}`,
|
|
);
|
|
}
|
|
|
|
return relationMetadata;
|
|
};
|