UNPKG

@theguild/federation-composition

Version:

Open Source Composition library for Apollo Federation

37 lines (36 loc) 1.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OverrideSourceHasOverrideRule = void 0; const graphql_1 = require("graphql"); function OverrideSourceHasOverrideRule(context) { return { ObjectTypeField(objectTypeState, fieldState) { if (fieldState.override === null) { return; } const graphsWithOverride = Array.from(fieldState.byGraph).filter(onlyWithOverride); if (graphsWithOverride.length === 1) { return; } for (let i = 0; i < graphsWithOverride.length; i++) { const [graph, fieldStateInGraph] = graphsWithOverride[i]; const overrideValue = fieldStateInGraph.override.toUpperCase(); const graphFromOverride = fieldState.byGraph.get(overrideValue); const anotherGraphId = graphFromOverride && graphFromOverride.override !== null ? overrideValue : graphsWithOverride[i + 1] ? graphsWithOverride[i + 1][0] : graphsWithOverride[0][0]; context.reportError(new graphql_1.GraphQLError(`Field "${objectTypeState.name}.${fieldState.name}" on subgraph "${context.graphIdToName(graph)}" is also marked with directive @override in subgraph "${context.graphIdToName(anotherGraphId)}". Only one @override directive is allowed per field.`, { extensions: { code: 'OVERRIDE_SOURCE_HAS_OVERRIDE', }, })); } }, }; } exports.OverrideSourceHasOverrideRule = OverrideSourceHasOverrideRule; function onlyWithOverride(entry) { return entry[1].override !== null; }