|
1 | 1 | /* |
2 | | - * SPDX-FileCopyrightText: © 2017-2025 Istari Digital, Inc. |
| 2 | + * SPDX-FileCopyrightText: © 2017-2026 Istari Digital, Inc. |
3 | 3 | * SPDX-License-Identifier: Apache-2.0 |
4 | 4 | */ |
5 | 5 |
|
@@ -1006,49 +1006,63 @@ func completeSchema( |
1006 | 1006 | providesTypeMap := providesFieldsMap[key] |
1007 | 1007 |
|
1008 | 1008 | // 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 | + } |
1010 | 1013 |
|
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)) { |
1012 | 1016 | addPatchType(sch, defn, providesTypeMap) |
1013 | 1017 | addUpdateType(sch, defn) |
1014 | 1018 | addUpdatePayloadType(sch, defn, providesTypeMap) |
1015 | 1019 | } |
1016 | 1020 |
|
1017 | | - if params.generateDeleteMutation { |
| 1021 | + if params.generateDeleteMutation && !(apolloServiceQuery && hasExtends(defn)) { |
1018 | 1022 | addDeletePayloadType(sch, defn, providesTypeMap) |
1019 | 1023 | } |
1020 | 1024 |
|
1021 | 1025 | switch defn.Kind { |
1022 | 1026 | case ast.Interface: |
1023 | 1027 | // addInputType doesn't make sense as interface is like an abstract class and we can't |
1024 | 1028 | // 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)) { |
1026 | 1031 | addUpdateMutation(sch, defn) |
1027 | 1032 | } |
1028 | | - if params.generateDeleteMutation { |
| 1033 | + if params.generateDeleteMutation && !(apolloServiceQuery && hasExtends(defn)) { |
1029 | 1034 | addDeleteMutation(sch, defn) |
1030 | 1035 | } |
1031 | 1036 |
|
1032 | 1037 | case ast.Object: |
1033 | 1038 | // 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)) { |
1035 | 1041 | addInputType(sch, defn, providesTypeMap) |
1036 | 1042 | addAddPayloadType(sch, defn, providesTypeMap) |
1037 | 1043 | } |
1038 | | - addMutations(sch, defn, params) |
| 1044 | + if !(apolloServiceQuery && hasExtends(defn)) { |
| 1045 | + addMutations(sch, defn, params) |
| 1046 | + } |
1039 | 1047 | } |
1040 | 1048 |
|
1041 | 1049 | // 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 | + } |
1044 | 1057 | addFieldFilters(sch, defn, providesTypeMap, apolloServiceQuery) |
1045 | | - addAggregationResultType(sch, defn, providesTypeMap) |
| 1058 | + if !(apolloServiceQuery && hasExtends(defn)) { |
| 1059 | + addAggregationResultType(sch, defn, providesTypeMap) |
| 1060 | + } |
1046 | 1061 | // Don't expose queries for the @extends type to the gateway |
1047 | 1062 | // as it is resolved through `_entities` resolver. |
1048 | 1063 | if !(apolloServiceQuery && hasExtends(defn)) { |
1049 | 1064 | addQueries(sch, defn, providesTypeMap, params) |
1050 | 1065 | } |
1051 | | - addTypeHasFilter(sch, defn, providesTypeMap) |
1052 | 1066 | // We need to call this at last as aggregateFields |
1053 | 1067 | // should not be part of HasFilter or UpdatePayloadType etc. |
1054 | 1068 | addAggregateFields(sch, defn, apolloServiceQuery) |
|
0 commit comments