import { CompassComponent, CompassComponentMetricSourcesConnection, CompassComponentType, CompassRelationship, CompassRelationshipConnection, Component, EventSource, Relationship, } from '@atlassian/forge-graphql-types'; import { transformEnumGqlFields } from './transformFields'; function transformRelationships( relationships: Array, ): Array { return relationships.map((r) => ({ type: r.type, nodeId: r.endNode.id, })) as unknown as Array; } export default function transformGqlComponent( component: CompassComponent, ): Component { const { id, typeId, name, type, description, slug, ownerId, fields, labels, links, relationships, changeMetadata, dataManager, eventSources, externalAliases, metricSources, customFields, } = component; return { id, name, typeId, type: type as CompassComponentType, description, slug, ownerId, fields: transformEnumGqlFields(fields), ...(customFields ? { customFields } : {}), labels: (labels || []).map((label) => label.name), links, relationships: transformRelationships( ((relationships as CompassRelationshipConnection) || {}).nodes || [], ), changeMetadata, dataManager, eventSources: eventSources as Array, externalAliases, metricSources: metricSources ? (metricSources as CompassComponentMetricSourcesConnection).nodes : [], }; }