Skip to content

Commit 4abfe52

Browse files
Restrict generation of extended auxiliary types for apollo federation introspection
1 parent 7888830 commit 4abfe52

1 file changed

Lines changed: 26 additions & 12 deletions

File tree

graphql/schema/gqlschema.go

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: © 2017-2025 Istari Digital, Inc.
2+
* SPDX-FileCopyrightText: © 2017-2026 Istari Digital, Inc.
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

@@ -1006,49 +1006,63 @@ func completeSchema(
10061006
providesTypeMap := providesFieldsMap[key]
10071007

10081008
// Common types to both Interface and Object.
1009-
addReferenceType(sch, defn, providesTypeMap)
1009+
// Don't generate reference types for @extends types in Apollo service query
1010+
if !(apolloServiceQuery && hasExtends(defn)) {
1011+
addReferenceType(sch, defn, providesTypeMap)
1012+
}
10101013

1011-
if params.generateUpdateMutation {
1014+
// Don't generate mutation input types for @extends types in Apollo service query
1015+
if params.generateUpdateMutation && !(apolloServiceQuery && hasExtends(defn)) {
10121016
addPatchType(sch, defn, providesTypeMap)
10131017
addUpdateType(sch, defn)
10141018
addUpdatePayloadType(sch, defn, providesTypeMap)
10151019
}
10161020

1017-
if params.generateDeleteMutation {
1021+
if params.generateDeleteMutation && !(apolloServiceQuery && hasExtends(defn)) {
10181022
addDeletePayloadType(sch, defn, providesTypeMap)
10191023
}
10201024

10211025
switch defn.Kind {
10221026
case ast.Interface:
10231027
// addInputType doesn't make sense as interface is like an abstract class and we can't
10241028
// create objects of its type.
1025-
if params.generateUpdateMutation {
1029+
// Don't generate mutations for @extends types in Apollo service query
1030+
if params.generateUpdateMutation && !(apolloServiceQuery && hasExtends(defn)) {
10261031
addUpdateMutation(sch, defn)
10271032
}
1028-
if params.generateDeleteMutation {
1033+
if params.generateDeleteMutation && !(apolloServiceQuery && hasExtends(defn)) {
10291034
addDeleteMutation(sch, defn)
10301035
}
10311036

10321037
case ast.Object:
10331038
// types and inputs needed for mutations
1034-
if params.generateAddMutation {
1039+
// Don't generate add input types for @extends types in Apollo service query
1040+
if params.generateAddMutation && !(apolloServiceQuery && hasExtends(defn)) {
10351041
addInputType(sch, defn, providesTypeMap)
10361042
addAddPayloadType(sch, defn, providesTypeMap)
10371043
}
1038-
addMutations(sch, defn, params)
1044+
if !(apolloServiceQuery && hasExtends(defn)) {
1045+
addMutations(sch, defn, params)
1046+
}
10391047
}
10401048

10411049
// types and inputs needed for query and search
1042-
addFilterType(sch, defn, providesTypeMap)
1043-
addTypeOrderable(sch, defn, providesTypeMap)
1050+
// Don't generate filter/orderable/hasFilter types for @extends types in Apollo service query
1051+
// to avoid conflicts when composing federated schemas
1052+
if !(apolloServiceQuery && hasExtends(defn)) {
1053+
addFilterType(sch, defn, providesTypeMap)
1054+
addTypeOrderable(sch, defn, providesTypeMap)
1055+
addTypeHasFilter(sch, defn, providesTypeMap)
1056+
}
10441057
addFieldFilters(sch, defn, providesTypeMap, apolloServiceQuery)
1045-
addAggregationResultType(sch, defn, providesTypeMap)
1058+
if !(apolloServiceQuery && hasExtends(defn)) {
1059+
addAggregationResultType(sch, defn, providesTypeMap)
1060+
}
10461061
// Don't expose queries for the @extends type to the gateway
10471062
// as it is resolved through `_entities` resolver.
10481063
if !(apolloServiceQuery && hasExtends(defn)) {
10491064
addQueries(sch, defn, providesTypeMap, params)
10501065
}
1051-
addTypeHasFilter(sch, defn, providesTypeMap)
10521066
// We need to call this at last as aggregateFields
10531067
// should not be part of HasFilter or UpdatePayloadType etc.
10541068
addAggregateFields(sch, defn, apolloServiceQuery)

0 commit comments

Comments
 (0)