Files
twenty/packages/twenty-server/src/engine/metadata-modules/utils/generate-object-metadata-maps.util.ts
Weiko 24dbabcad7 Improve object metadata maps size (#8635)
## Context
The object metadata map is becoming quite large and its structure could
be simplified.
We are removing byNameSingular/byNamePlural keys, the former can be
retrieved through a new helper and the latter is not used in the code
base currently.
2024-11-21 11:49:19 +01:00

37 lines
1.3 KiB
TypeScript

import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
import { FieldMetadataMap } from 'src/engine/metadata-modules/types/field-metadata-map';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
export const generateObjectMetadataMaps = (
objectMetadataCollection: ObjectMetadataInterface[],
): ObjectMetadataMaps => {
const objectMetadataMaps: ObjectMetadataMaps = {
byId: {},
idByNameSingular: {},
};
for (const objectMetadata of objectMetadataCollection) {
const fieldsByIdMap: FieldMetadataMap = {};
const fieldsByNameMap: FieldMetadataMap = {};
for (const fieldMetadata of objectMetadata.fields) {
fieldsByNameMap[fieldMetadata.name] = fieldMetadata;
fieldsByIdMap[fieldMetadata.id] = fieldMetadata;
}
const processedObjectMetadata: ObjectMetadataItemWithFieldMaps = {
...objectMetadata,
fieldsById: fieldsByIdMap,
fieldsByName: fieldsByNameMap,
};
objectMetadataMaps.byId[objectMetadata.id] = processedObjectMetadata;
objectMetadataMaps.idByNameSingular[objectMetadata.nameSingular] =
objectMetadata.id;
}
return objectMetadataMaps;
};