@apollo/gateway 0.27.1 → 0.28.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,7 +4,19 @@
4
4
 
5
5
  > The changes noted within this `vNEXT` section have not been released yet. New PRs and commits which introduce changes should include an entry in this `vNEXT` section as part of their development. When a release is being prepared, a new header will be (manually) created below and the appropriate changes within that release will be moved into the new section.
6
6
 
7
- - _Nothing yet! Stay tuned!_
7
+ - Take subtypes into account when matching type conditions to extract representations. [PR #804](https://github.com/apollographql/federation/pull/804)
8
+
9
+ ## v0.28.3
10
+
11
+ - Fix plan querying a subgraph with an interface it doesn't know due to directives [PR #805](https://github.com/apollographql/federation/pull/805) [Issue #801](https://github.com/apollographql/federation/issues/801)
12
+
13
+ ## v0.28.0
14
+
15
+ - Expand the range of supported `node` versions in the package's `engines` specifier to include the now-tested Node.js `16`. [PR #713](https://github.com/apollographql/federation/pull/713)
16
+
17
+ ## v0.27.1
18
+
19
+ - Update version of `@apollo/query-planner` which was uninstallable due to a missing dependency. Related PR: [PR #709](https://github.com/apollographql/federation/pull/709)
8
20
 
9
21
  ## v0.27.0
10
22
 
@@ -17,7 +29,7 @@
17
29
 
18
30
  ## v0.26.2
19
31
 
20
- - Avoid _small_ potential performamce concern/observation introduced in v0.21.0 which unnecessarily `JSON.stringify`'d the same object twice during requests to upstream subgraphs. [PR #673](https://github.com/apollographql/federation/pull/673)
32
+ - Avoid _small_ potential performance concern/observation introduced in v0.21.0 which unnecessarily `JSON.stringify`'d the same object twice during requests to upstream subgraphs. [PR #673](https://github.com/apollographql/federation/pull/673)
21
33
  - Allow passing a function to the `introspectionHeaders` field when constructing an `ApolloGateway` instance. This allows for producing dynamic introspection headers per request. [PR #607](https://github.com/apollographql/federation/pull/607)
22
34
  - Will no longer calculate the automated persisted query (APQ) hash when `apq` is not set to `true` on the `RemoteGraphQLDataSource`. [PR #672](https://github.com/apollographql/federation/pull/672)
23
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"executeQueryPlan.d.ts","sourceRoot":"","sources":["../src/executeQueryPlan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAKL,oBAAoB,EAErB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAGL,SAAS,EAKV,MAAM,uBAAuB,CAAC;AAI/B,oBAAY,UAAU,GAAG;IACvB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAC1C,CAAC;AAYF,wBAAsB,gBAAgB,CAAC,QAAQ,EAC7C,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAC/C,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CAsDjC;AA6YD,eAAO,MAAM,oCAAoC,EAAE,oBAAoB,CACrE,GAAG,EACH,GAAG,CAYJ,CAAC"}
1
+ {"version":3,"file":"executeQueryPlan.d.ts","sourceRoot":"","sources":["../src/executeQueryPlan.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAKL,oBAAoB,EAIrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAGL,SAAS,EAKV,MAAM,uBAAuB,CAAC;AAI/B,oBAAY,UAAU,GAAG;IACvB,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAC1C,CAAC;AAYF,wBAAsB,gBAAgB,CAAC,QAAQ,EAC7C,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAC/C,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CA0DjC;AA+aD,eAAO,MAAM,oCAAoC,EAAE,oBAAoB,CACrE,GAAG,EACH,GAAG,CAYJ,CAAC"}
@@ -9,6 +9,7 @@ const query_planner_1 = require("@apollo/query-planner");
9
9
  const deepMerge_1 = require("./utilities/deepMerge");
10
10
  const array_1 = require("./utilities/array");
11
11
  async function executeQueryPlan(queryPlan, serviceMap, requestContext, operationContext) {
12
+ var _a;
12
13
  const errors = [];
13
14
  const context = {
14
15
  queryPlan,
@@ -26,7 +27,7 @@ async function executeQueryPlan(queryPlan, serviceMap, requestContext, operation
26
27
  }
27
28
  }
28
29
  try {
29
- ({ data } = await graphql_1.execute({
30
+ const executionResult = await graphql_1.execute({
30
31
  schema: operationContext.schema,
31
32
  document: {
32
33
  kind: graphql_1.Kind.DOCUMENT,
@@ -38,7 +39,11 @@ async function executeQueryPlan(queryPlan, serviceMap, requestContext, operation
38
39
  rootValue: data,
39
40
  variableValues: requestContext.request.variables,
40
41
  fieldResolver: exports.defaultFieldResolverWithAliasSupport,
41
- }));
42
+ });
43
+ data = executionResult.data;
44
+ if ((_a = executionResult.errors) === null || _a === void 0 ? void 0 : _a.length) {
45
+ errors.push(...executionResult.errors);
46
+ }
42
47
  }
43
48
  catch (error) {
44
49
  return { errors: [error] };
@@ -125,7 +130,7 @@ async function executeFetch(context, fetch, results, _path, traceNode) {
125
130
  const representations = [];
126
131
  const representationToEntity = [];
127
132
  entities.forEach((entity, index) => {
128
- const representation = executeSelectionSet(entity, requires);
133
+ const representation = executeSelectionSet(context.operationContext, entity, requires);
129
134
  if (representation && representation[graphql_1.TypeNameMetaFieldDef.name]) {
130
135
  representations.push(representation);
131
136
  representationToEntity.push(index);
@@ -212,7 +217,7 @@ async function executeFetch(context, fetch, results, _path, traceNode) {
212
217
  return response.data;
213
218
  }
214
219
  }
215
- function executeSelectionSet(source, selections) {
220
+ function executeSelectionSet(operationContext, source, selections) {
216
221
  if (source === null) {
217
222
  return null;
218
223
  }
@@ -226,10 +231,12 @@ function executeSelectionSet(source, selections) {
226
231
  throw new Error(`Field "${responseName}" was not found in response.`);
227
232
  }
228
233
  if (Array.isArray(source[responseName])) {
229
- result[responseName] = source[responseName].map((value) => selections ? executeSelectionSet(value, selections) : value);
234
+ result[responseName] = source[responseName].map((value) => selections
235
+ ? executeSelectionSet(operationContext, value, selections)
236
+ : value);
230
237
  }
231
238
  else if (selections) {
232
- result[responseName] = executeSelectionSet(source[responseName], selections);
239
+ result[responseName] = executeSelectionSet(operationContext, source[responseName], selections);
233
240
  }
234
241
  else {
235
242
  result[responseName] = source[responseName];
@@ -241,14 +248,31 @@ function executeSelectionSet(source, selections) {
241
248
  const typename = source && source['__typename'];
242
249
  if (!typename)
243
250
  continue;
244
- if (typename === selection.typeCondition) {
245
- deepMerge_1.deepMerge(result, executeSelectionSet(source, selection.selections));
251
+ if (doesTypeConditionMatch(operationContext.schema, selection.typeCondition, typename)) {
252
+ deepMerge_1.deepMerge(result, executeSelectionSet(operationContext, source, selection.selections));
246
253
  }
247
254
  break;
248
255
  }
249
256
  }
250
257
  return result;
251
258
  }
259
+ function doesTypeConditionMatch(schema, typeCondition, typename) {
260
+ if (typeCondition === typename) {
261
+ return true;
262
+ }
263
+ const type = schema.getType(typename);
264
+ if (!type) {
265
+ return false;
266
+ }
267
+ const conditionalType = schema.getType(typeCondition);
268
+ if (!conditionalType) {
269
+ return false;
270
+ }
271
+ if (graphql_1.isAbstractType(conditionalType)) {
272
+ return schema.isSubType(conditionalType, type);
273
+ }
274
+ return false;
275
+ }
252
276
  function flattenResultsAtPath(value, path) {
253
277
  if (path.length === 0)
254
278
  return value;
@@ -1 +1 @@
1
- {"version":3,"file":"executeQueryPlan.js","sourceRoot":"","sources":["../src/executeQueryPlan.ts"],"names":[],"mappings":";;;AAIA,yDAA4C;AAC5C,qCAOiB;AACjB,yEAA0D;AAC1D,mDAAoE;AAGpE,yDAQ+B;AAC/B,qDAAkD;AAClD,6CAAyD;AAgBlD,KAAK,UAAU,gBAAgB,CACpC,SAAoB,EACpB,UAAsB,EACtB,cAA+C,EAC/C,gBAAkC;IAElC,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,MAAM,OAAO,GAA+B;QAC1C,SAAS;QACT,gBAAgB;QAChB,UAAU;QACV,cAAc;QACd,MAAM;KACP,CAAC;IAEF,IAAI,IAAI,GAAiC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE7D,MAAM,aAAa,GAAG,CAAC,CAAC,CACtB,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,aAAa,CAC/D,CAAC;IAEF,IAAI,SAAS,CAAC,IAAI,EAAE;QAClB,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,OAAO,EACP,SAAS,CAAC,IAAI,EACd,IAAK,EACL,EAAE,EACF,aAAa,CACd,CAAC;QACF,IAAI,aAAa,EAAE;YACjB,cAAc,CAAC,OAAQ,CAAC,cAAc,GAAG,SAAS,CAAC;SACpD;KACF;IAMD,IAAI;QACF,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAO,CAAC;YACxB,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,QAAQ,EAAE;gBACR,IAAI,EAAE,cAAI,CAAC,QAAQ;gBACnB,WAAW,EAAE;oBACX,gBAAgB,CAAC,SAAS;oBAC1B,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;iBAC7C;aACF;YACD,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;YAEhD,aAAa,EAAE,4CAAoC;SACpD,CAAC,CAAC,CAAC;KACL;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;KAC5B;IAED,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC;AA3DD,4CA2DC;AAMD,KAAK,UAAU,WAAW,CACxB,OAAmC,EACnC,IAAc,EACd,OAAgC,EAChC,IAAkB,EAClB,aAAsB;IAEtB,IAAI,CAAC,OAAO,EAAE;QAOZ,OAAO,IAAI,iCAAK,CAAC,aAAa,EAAE,CAAC;KAClC;IAED,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,UAAU,CAAC,CAAC;YACf,MAAM,SAAS,GAAG,IAAI,iCAAK,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;YACzD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;gBAClC,MAAM,cAAc,GAAG,MAAM,WAAW,CACtC,OAAO,EACP,SAAS,EACT,OAAO,EACP,IAAI,EACJ,aAAa,CACd,CAAC;gBACF,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,cAAe,CAAC,CAAC;aACvC;YACD,OAAO,IAAI,iCAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;SACzD;QACD,KAAK,UAAU,CAAC,CAAC;YACf,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAC,SAAS,EAAC,EAAE,CAC/B,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,CAC9D,CACF,CAAC;YACF,OAAO,IAAI,iCAAK,CAAC,aAAa,CAAC;gBAC7B,QAAQ,EAAE,IAAI,iCAAK,CAAC,aAAa,CAAC,YAAY,CAAC;oBAC7C,KAAK,EAAE,eAAe;iBACvB,CAAC;aACH,CAAC,CAAC;SACJ;QACD,KAAK,SAAS,CAAC,CAAC;YACd,OAAO,IAAI,iCAAK,CAAC,aAAa,CAAC;gBAC7B,OAAO,EAAE,IAAI,iCAAK,CAAC,aAAa,CAAC,WAAW,CAAC;oBAC3C,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CACzB,EAAE,CAAC,EAAE,CACH,IAAI,iCAAK,CAAC,aAAa,CAAC,mBAAmB,CACzC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3D,CACJ;oBACD,IAAI,EAAE,MAAM,WAAW,CACrB,OAAO,EACP,IAAI,CAAC,IAAI,EACT,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EACxC,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EACvB,aAAa,CACd;iBACF,CAAC;aACH,CAAC,CAAC;SACJ;QACD,KAAK,OAAO,CAAC,CAAC;YACZ,MAAM,SAAS,GAAG,IAAI,iCAAK,CAAC,aAAa,CAAC,SAAS,CAAC;gBAClD,WAAW,EAAE,IAAI,CAAC,WAAW;aAE9B,CAAC,CAAC;YACH,IAAI;gBACF,MAAM,YAAY,CAChB,OAAO,EACP,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CACjC,CAAC;aACH;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC5B;YACD,OAAO,IAAI,iCAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;SACtD;KACF;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,OAAmC,EACnC,KAAgB,EAChB,OAAqD,EACrD,KAAmB,EACnB,SAA+C;IAE/C,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,IAAI,OAAO,CAAC;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;KAC3E;IAED,IAAI,QAAqB,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAE1B,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,4BAAoB,CAAC,CAAC;KACjD;SAAM;QACL,QAAQ,GAAG,CAAC,OAAO,CAAC,CAAC;KACtB;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO;IAEhC,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,cAAc,EAAE;QACxB,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,cAAc,EAAE;YAC/C,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;YACnE,IACE,iBAAiB;gBACjB,OAAO,iBAAiB,CAAC,YAAY,CAAC,KAAK,WAAW,EACtD;gBACA,SAAS,CAAC,YAAY,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;aAC3D;SACF;KACF;IAED,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;QACnB,MAAM,uBAAuB,GAAG,MAAM,aAAa,CACjD,OAAO,EACP,KAAK,CAAC,SAAS,EACf,SAAS,CACV,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE;YAC7B,qBAAS,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;SAC5C;KACF;SAAM;QACL,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEhC,MAAM,eAAe,GAAgB,EAAE,CAAC;QACxC,MAAM,sBAAsB,GAAa,EAAE,CAAC;QAE5C,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACjC,MAAM,cAAc,GAAG,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC7D,IAAI,cAAc,IAAI,cAAc,CAAC,8BAAoB,CAAC,IAAI,CAAC,EAAE;gBAC/D,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACrC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpC;QACH,CAAC,CAAC,CAAC;QAIH,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAEvC,IAAI,iBAAiB,IAAI,SAAS,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACnE;QAED,MAAM,uBAAuB,GAAG,MAAM,aAAa,CACjD,OAAO,EACP,KAAK,CAAC,SAAS,EACf,EAAE,GAAG,SAAS,EAAE,eAAe,EAAE,CAClC,CAAC;QAEF,IAAI,CAAC,uBAAuB,EAAE;YAC5B,OAAO;SACR;QAED,IACE,CAAC,CACC,uBAAuB,CAAC,SAAS;YACjC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CACjD,EACD;YACA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SACzE;QAED,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,SAAS,CAAC;QAE3D,IAAI,gBAAgB,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,EAAE;YACtD,MAAM,IAAI,KAAK,CACb,wCAAwC,eAAe,CAAC,MAAM,WAAW,CAC1E,CAAC;SACH;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,qBAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;SACrE;KACF;IAED,KAAK,UAAU,aAAa,CAC1B,OAAmC,EACnC,MAAc,EACd,SAA8B;;QAI9B,IAAI,IAAS,CAAC;QAKd,IAAI,SAAS,EAAE;YACb,IAAI,GAAG;gBACL,OAAO,EAAE,IAAI,2BAAO,CAAC,EAAE,iCAAiC,EAAE,MAAM,EAAE,CAAC;aACpE,CAAC;YACF,IACE,OAAO,CAAC,cAAc,CAAC,OAAO;gBAC9B,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,EAC1C;gBACA,SAAS,CAAC,cAAc,GAAG,qBAAqB,CAC9C,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAC3D,CAAC;aACH;YACD,SAAS,CAAC,QAAQ,GAAG,oBAAoB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;SACvD;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;YACrC,OAAO,EAAE;gBACP,KAAK,EAAE,MAAM;gBACb,SAAS;gBACT,IAAI;aACL;YACD,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO;SACxC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,EAAE;YACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CACzC,sBAAsB,CACpB,KAAK,EACL,KAAK,CAAC,WAAW,EACjB,MAAM,EACN,SAAS,CACV,CACF,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;SAChC;QAID,IAAI,SAAS,EAAE;YACb,SAAS,CAAC,YAAY,GAAG,oBAAoB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAE1D,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE;gBACnD,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;gBAE7C,IAAI,WAA+B,CAAC;gBACpC,IAAI,kBAAkB,GAAG,KAAK,CAAC;gBAC/B,IAAI;oBAGF,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;iBAClD;gBAAC,OAAO,GAAG,EAAE;oBACZ,MAAM,CAAC,KAAK,CACV,kDAAkD,KAAK,CAAC,WAAW,KAAK,GAAG,EAAE,CAC9E,CAAC;oBACF,kBAAkB,GAAG,IAAI,CAAC;iBAC3B;gBAED,IAAI,WAAW,EAAE;oBACf,IAAI;wBACF,MAAM,KAAK,GAAG,iCAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBACxC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;qBACzB;oBAAC,OAAO,GAAG,EAAE;wBACZ,MAAM,CAAC,KAAK,CACV,oDAAoD,KAAK,CAAC,WAAW,KAAK,GAAG,EAAE,CAChF,CAAC;wBACF,kBAAkB,GAAG,IAAI,CAAC;qBAC3B;iBACF;gBACD,IAAI,SAAS,CAAC,KAAK,EAAE;oBAKnB,MAAM,YAAY,GAChB,2CAA8B,CAC5B,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,SAAS,CAC7C,CAAC;oBACJ,MAAA,MAAA,SAAS,CAAC,KAAK,CAAC,IAAI,0CAAE,KAAK,0CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC7C,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC;oBAClC,CAAC,CAAC,CAAC;iBACJ;gBACD,SAAS,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;aACnD;SACF;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;AACH,CAAC;AAOD,SAAS,mBAAmB,CAC1B,MAAkC,EAClC,UAAoC;IAKpC,IAAI,MAAM,KAAK,IAAI,EAAE;QACnB,OAAO,IAAI,CAAC;KACb;IAED,MAAM,MAAM,GAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAExD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QAClC,QAAQ,SAAS,CAAC,IAAI,EAAE;YACtB,KAAK,cAAI,CAAC,KAAK;gBACb,MAAM,YAAY,GAAG,+BAAe,CAAC,SAA+B,CAAC,CAAC;gBACtE,MAAM,UAAU,GAAI,SAAgC,CAAC,UAAU,CAAC;gBAEhE,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,WAAW,EAAE;oBAC/C,MAAM,IAAI,KAAK,CAAC,UAAU,YAAY,8BAA8B,CAAC,CAAC;iBACvE;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE;oBACvC,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAC7D,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAC5D,CAAC;iBACH;qBAAM,IAAI,UAAU,EAAE;oBACrB,MAAM,CAAC,YAAY,CAAC,GAAG,mBAAmB,CACxC,MAAM,CAAC,YAAY,CAAC,EACpB,UAAU,CACX,CAAC;iBACH;qBAAM;oBACL,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;iBAC7C;gBACD,MAAM;YACR,KAAK,cAAI,CAAC,eAAe;gBACvB,IAAI,CAAC,SAAS,CAAC,aAAa;oBAAE,SAAS;gBAEvC,MAAM,QAAQ,GAAG,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ;oBAAE,SAAS;gBAExB,IAAI,QAAQ,KAAK,SAAS,CAAC,aAAa,EAAE;oBACxC,qBAAS,CACP,MAAM,EACN,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAClD,CAAC;iBACH;gBACD,MAAM;SACT;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAU,EAAE,IAAkB;IAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAExD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,GAAG,EAAE;QACnB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;KAC7E;SAAM;QACL,OAAO,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;KACnD;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,aAAoC,EACpC,WAAmB,EACnB,KAAa,EACb,SAA+B;IAE/B,IAAI,EACF,OAAO,EACP,UAAU,EACV,IAAI,GACL,GAAG,aAAa,CAAA;IAEjB,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,+CAA+C,WAAW,GAAG,CAAC;KACzE;IACD,UAAU,GAAG;QACX,IAAI,EAAE,0BAA0B;QAGhC,WAAW;QACX,KAAK;QACL,SAAS;QACT,GAAG,UAAU;KACd,CAAC;IACF,OAAO,IAAI,sBAAY,CACrB,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,EACT,IAAI,EACJ,aAAsB,EACtB,UAAU,CACX,CAAC;AACJ,CAAC;AAEM,MAAM,oCAAoC,GAG7C,UAAS,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI;IAE3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;QAG9D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YAClC,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;SACzD;QACD,OAAO,QAAQ,CAAC;KACjB;AACH,CAAC,CAAC;AAdW,QAAA,oCAAoC,wCAc/C;AAgBF,SAAS,qBAAqB,CAAC,MAAwB;IACrD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC;AAGD,SAAS,oBAAoB,CAAC,IAAU;IACtC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC;IAC1B,MAAM,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IAClC,OAAO,IAAI,kCAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnC,OAAO,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,IAAI;QACtC,KAAK,EAAE,MAAM,GAAG,GAAG;KACpB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"executeQueryPlan.js","sourceRoot":"","sources":["../src/executeQueryPlan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/gateway",
3
- "version": "0.27.1",
3
+ "version": "0.28.3",
4
4
  "description": "Apollo Gateway",
5
5
  "author": "Apollo <opensource@apollographql.com>",
6
6
  "main": "dist/index.js",
@@ -18,23 +18,23 @@
18
18
  "apollo"
19
19
  ],
20
20
  "engines": {
21
- "node": ">=12.13.0 <15.0"
21
+ "node": ">=12.13.0 <17.0"
22
22
  },
23
23
  "license": "MIT",
24
24
  "publishConfig": {
25
25
  "access": "public"
26
26
  },
27
27
  "dependencies": {
28
- "@apollo/federation": "^0.23.2",
29
- "@apollo/query-planner": "^0.1.4",
28
+ "@apollo/federation": "^0.25.1",
29
+ "@apollo/query-planner": "^0.2.1",
30
30
  "@types/node-fetch": "2.5.10",
31
- "apollo-graphql": "^0.9.2",
32
- "apollo-reporting-protobuf": "^0.6.0",
33
- "apollo-server-caching": "^0.6.0",
31
+ "apollo-graphql": "^0.9.3",
32
+ "apollo-reporting-protobuf": "^0.8.0",
33
+ "apollo-server-caching": "^0.7.0",
34
34
  "apollo-server-core": "^2.23.0",
35
35
  "apollo-server-env": "^3.0.0",
36
36
  "apollo-server-errors": "^2.5.0",
37
- "apollo-server-types": "^0.7.0",
37
+ "apollo-server-types": "^0.9.0",
38
38
  "loglevel": "^1.6.1",
39
39
  "make-fetch-happen": "^8.0.0",
40
40
  "pretty-format": "^26.0.0"
@@ -42,5 +42,5 @@
42
42
  "peerDependencies": {
43
43
  "graphql": "^14.5.0 || ^15.0.0"
44
44
  },
45
- "gitHead": "db6e39181877a9fa7e890c26adaceedb0c212107"
45
+ "gitHead": "4482d9c6631dbe0ecbd47d4b4120463567133055"
46
46
  }
@@ -1118,4 +1118,64 @@ describe('executeQueryPlan', () => {
1118
1118
  }
1119
1119
  `);
1120
1120
  });
1121
+
1122
+ it(`can execute queries with @include on inline fragment with extension field`, async () => {
1123
+ const operationString = `#graphql
1124
+ query {
1125
+ topProducts(first: 5) {
1126
+ ... on Book @include(if: true) {
1127
+ price
1128
+ inStock
1129
+ }
1130
+ ... on Furniture {
1131
+ price
1132
+ inStock
1133
+ }
1134
+ }
1135
+ }
1136
+ `;
1137
+
1138
+ const operationDocument = gql(operationString);
1139
+
1140
+ const operationContext = buildOperationContext({
1141
+ schema,
1142
+ operationDocument,
1143
+ });
1144
+
1145
+ const queryPlan = queryPlanner.buildQueryPlan(operationContext);
1146
+
1147
+ const response = await executeQueryPlan(
1148
+ queryPlan,
1149
+ serviceMap,
1150
+ buildRequestContext(),
1151
+ operationContext,
1152
+ );
1153
+
1154
+ expect(response.data).toMatchInlineSnapshot(`
1155
+ Object {
1156
+ "topProducts": Array [
1157
+ Object {
1158
+ "inStock": true,
1159
+ "price": "899",
1160
+ },
1161
+ Object {
1162
+ "inStock": false,
1163
+ "price": "1299",
1164
+ },
1165
+ Object {
1166
+ "inStock": true,
1167
+ "price": "54",
1168
+ },
1169
+ Object {
1170
+ "inStock": true,
1171
+ "price": "39",
1172
+ },
1173
+ Object {
1174
+ "inStock": false,
1175
+ "price": "29",
1176
+ },
1177
+ ],
1178
+ }
1179
+ `);
1180
+ });
1121
1181
  });
@@ -10,7 +10,7 @@ import { createHttpLink } from 'apollo-link-http';
10
10
  import fetch from 'node-fetch';
11
11
  import { ApolloGateway } from '../..';
12
12
  import { Plugin, Config, Refs } from 'pretty-format';
13
- import { Report } from 'apollo-reporting-protobuf';
13
+ import { Report, Trace } from 'apollo-reporting-protobuf';
14
14
  import { fixtures } from 'apollo-federation-integration-testsuite';
15
15
 
16
16
  // TODO: We should fix this another way, but for now adding this
@@ -18,7 +18,7 @@ import { fixtures } from 'apollo-federation-integration-testsuite';
18
18
  // due to us not dependeing on `dom` (or `webworker`) types.
19
19
  declare global {
20
20
  interface WindowOrWorkerGlobalScope {
21
- fetch: typeof import('apollo-server-env')['fetch']
21
+ fetch: typeof import('apollo-server-env')['fetch'];
22
22
  }
23
23
  }
24
24
 
@@ -130,9 +130,11 @@ describe('reporting', () => {
130
130
  key: 'service:foo:bar',
131
131
  graphVariant: 'current',
132
132
  },
133
- plugins: [ApolloServerPluginUsageReporting({
134
- sendReportsImmediately: true,
135
- })],
133
+ plugins: [
134
+ ApolloServerPluginUsageReporting({
135
+ sendReportsImmediately: true,
136
+ }),
137
+ ],
136
138
  });
137
139
  ({ url: gatewayUrl } = await gatewayServer.listen({ port: 0 }));
138
140
  });
@@ -206,7 +208,7 @@ describe('reporting', () => {
206
208
  const statsReportKey = '# -\n{me{name{first last}}topProducts{name}}';
207
209
  expect(Object.keys(report.tracesPerQuery)).toStrictEqual([statsReportKey]);
208
210
  expect(report.tracesPerQuery[statsReportKey]!.trace!.length).toBe(1);
209
- const trace = report.tracesPerQuery[statsReportKey]!.trace![0]!;
211
+ const trace = report.tracesPerQuery[statsReportKey]!.trace![0]! as Trace;
210
212
  // In the gateway, the root trace is just an empty node (unless there are errors).
211
213
  expect(trace.root!.child).toStrictEqual([]);
212
214
  // The query plan has (among other things) a fetch against 'accounts' and a
@@ -230,7 +232,10 @@ describe('reporting', () => {
230
232
 
231
233
  expect(report).toMatchInlineSnapshot(`
232
234
  Object {
233
- "endTime": null,
235
+ "endTime": Object {
236
+ "nanos": 123000000,
237
+ "seconds": "1562203363",
238
+ },
234
239
  "header": "<HEADER>",
235
240
  "tracesPerQuery": Object {
236
241
  "# -
@@ -0,0 +1,568 @@
1
+ import gql from 'graphql-tag';
2
+ import { execute } from '../execution-utils';
3
+
4
+ import {
5
+ astSerializer,
6
+ queryPlanSerializer,
7
+ } from 'apollo-federation-integration-testsuite';
8
+
9
+ expect.addSnapshotSerializer(astSerializer);
10
+ expect.addSnapshotSerializer(queryPlanSerializer);
11
+
12
+ describe('scope', () => {
13
+ it("doesn't wrap inline fragments with the supertype when @include is used", async () => {
14
+ const query = `#graphql
15
+ query GetProducts {
16
+ topProducts {
17
+ name
18
+ ... on Shoe @include(if: true) {
19
+ rating
20
+ }
21
+ ... on Car {
22
+ rating
23
+ }
24
+ }
25
+ }
26
+ `;
27
+
28
+ const { queryPlan, errors } = await execute({ query }, [
29
+ {
30
+ name: 'products',
31
+ typeDefs: gql`
32
+ extend type Query {
33
+ topProducts: [Product]
34
+ }
35
+
36
+ interface Product {
37
+ name: String
38
+ }
39
+
40
+ type Shoe implements Product @key(fields: "upc") {
41
+ upc: String
42
+ name: String
43
+ }
44
+
45
+ type Car implements Product @key(fields: "upc") {
46
+ upc: String
47
+ name: String
48
+ }
49
+ `,
50
+ },
51
+ {
52
+ name: 'reviews',
53
+ typeDefs: gql`
54
+ extend type Shoe @key(fields: "upc") {
55
+ upc: String @external
56
+ rating: Int
57
+ }
58
+
59
+ extend type Car @key(fields: "upc") {
60
+ upc: String @external
61
+ rating: Int
62
+ }
63
+ `,
64
+ },
65
+ ]);
66
+
67
+ expect(errors).toBeUndefined();
68
+ expect(queryPlan).toMatchInlineSnapshot(`
69
+ QueryPlan {
70
+ Sequence {
71
+ Fetch(service: "products") {
72
+ {
73
+ topProducts {
74
+ __typename
75
+ ... on Car {
76
+ name
77
+ __typename
78
+ upc
79
+ }
80
+ ... on Shoe {
81
+ name
82
+ }
83
+ ... on Shoe @include(if: true) {
84
+ __typename
85
+ upc
86
+ }
87
+ }
88
+ }
89
+ },
90
+ Flatten(path: "topProducts.@") {
91
+ Fetch(service: "reviews") {
92
+ {
93
+ ... on Shoe {
94
+ __typename
95
+ upc
96
+ }
97
+ ... on Car {
98
+ __typename
99
+ upc
100
+ }
101
+ } =>
102
+ {
103
+ ... on Shoe @include(if: true) {
104
+ rating
105
+ }
106
+ ... on Car {
107
+ rating
108
+ }
109
+ }
110
+ },
111
+ },
112
+ },
113
+ }
114
+ `);
115
+ });
116
+
117
+ it("doesn't merge conditions on the same type when one has a @include", async () => {
118
+ const query = `#graphql
119
+ query GetProducts {
120
+ topProducts {
121
+ name
122
+ ... on Shoe {
123
+ reviewsCount
124
+ }
125
+ ... on Shoe @include(if: true) {
126
+ rating
127
+ }
128
+ ... on Car {
129
+ rating
130
+ }
131
+ }
132
+ }
133
+ `;
134
+
135
+ const { queryPlan, errors } = await execute({ query }, [
136
+ {
137
+ name: 'products',
138
+ typeDefs: gql`
139
+ extend type Query {
140
+ topProducts: [Product]
141
+ }
142
+
143
+ interface Product {
144
+ name: String
145
+ }
146
+
147
+ type Shoe implements Product @key(fields: "upc") {
148
+ upc: String
149
+ name: String
150
+ }
151
+
152
+ type Car implements Product @key(fields: "upc") {
153
+ upc: String
154
+ name: String
155
+ }
156
+ `,
157
+ },
158
+ {
159
+ name: 'reviews',
160
+ typeDefs: gql`
161
+ extend type Shoe @key(fields: "upc") {
162
+ upc: String @external
163
+ rating: Int
164
+ reviewsCount: Int
165
+ }
166
+
167
+ extend type Car @key(fields: "upc") {
168
+ upc: String @external
169
+ rating: Int
170
+ }
171
+ `,
172
+ },
173
+ ]);
174
+
175
+ expect(errors).toBeUndefined();
176
+ expect(queryPlan).toMatchInlineSnapshot(`
177
+ QueryPlan {
178
+ Sequence {
179
+ Fetch(service: "products") {
180
+ {
181
+ topProducts {
182
+ __typename
183
+ ... on Car {
184
+ name
185
+ __typename
186
+ upc
187
+ }
188
+ ... on Shoe {
189
+ name
190
+ __typename
191
+ upc
192
+ }
193
+ ... on Shoe @include(if: true) {
194
+ __typename
195
+ upc
196
+ }
197
+ }
198
+ }
199
+ },
200
+ Flatten(path: "topProducts.@") {
201
+ Fetch(service: "reviews") {
202
+ {
203
+ ... on Shoe {
204
+ __typename
205
+ upc
206
+ }
207
+ ... on Shoe {
208
+ __typename
209
+ upc
210
+ }
211
+ ... on Car {
212
+ __typename
213
+ upc
214
+ }
215
+ } =>
216
+ {
217
+ ... on Shoe {
218
+ reviewsCount
219
+ }
220
+ ... on Shoe @include(if: true) {
221
+ rating
222
+ }
223
+ ... on Car {
224
+ rating
225
+ }
226
+ }
227
+ },
228
+ },
229
+ },
230
+ }
231
+ `);
232
+ });
233
+
234
+ it("doesn't merge conditions on the same type when one has a @include even for the same selected field", async () => {
235
+ const query = `#graphql
236
+ query GetProducts {
237
+ topProducts {
238
+ name
239
+ ... on Shoe {
240
+ rating
241
+ }
242
+ ... on Shoe @include(if: true) {
243
+ rating
244
+ }
245
+ ... on Car {
246
+ rating
247
+ }
248
+ }
249
+ }
250
+ `;
251
+
252
+ const { queryPlan, errors } = await execute({ query }, [
253
+ {
254
+ name: 'products',
255
+ typeDefs: gql`
256
+ extend type Query {
257
+ topProducts: [Product]
258
+ }
259
+
260
+ interface Product {
261
+ name: String
262
+ }
263
+
264
+ type Shoe implements Product @key(fields: "upc") {
265
+ upc: String
266
+ name: String
267
+ }
268
+
269
+ type Car implements Product @key(fields: "upc") {
270
+ upc: String
271
+ name: String
272
+ }
273
+ `,
274
+ },
275
+ {
276
+ name: 'reviews',
277
+ typeDefs: gql`
278
+ extend type Shoe @key(fields: "upc") {
279
+ upc: String @external
280
+ rating: Int
281
+ reviewsCount: Int
282
+ }
283
+
284
+ extend type Car @key(fields: "upc") {
285
+ upc: String @external
286
+ rating: Int
287
+ }
288
+ `,
289
+ },
290
+ ]);
291
+
292
+ expect(errors).toBeUndefined();
293
+ expect(queryPlan).toMatchInlineSnapshot(`
294
+ QueryPlan {
295
+ Sequence {
296
+ Fetch(service: "products") {
297
+ {
298
+ topProducts {
299
+ __typename
300
+ ... on Car {
301
+ name
302
+ __typename
303
+ upc
304
+ }
305
+ ... on Shoe {
306
+ name
307
+ __typename
308
+ upc
309
+ }
310
+ ... on Shoe @include(if: true) {
311
+ __typename
312
+ upc
313
+ }
314
+ }
315
+ }
316
+ },
317
+ Flatten(path: "topProducts.@") {
318
+ Fetch(service: "reviews") {
319
+ {
320
+ ... on Shoe {
321
+ __typename
322
+ upc
323
+ }
324
+ ... on Shoe {
325
+ __typename
326
+ upc
327
+ }
328
+ ... on Car {
329
+ __typename
330
+ upc
331
+ }
332
+ } =>
333
+ {
334
+ ... on Shoe {
335
+ rating
336
+ }
337
+ ... on Shoe @include(if: true) {
338
+ rating
339
+ }
340
+ ... on Car {
341
+ rating
342
+ }
343
+ }
344
+ },
345
+ },
346
+ },
347
+ }
348
+ `);
349
+ });
350
+
351
+ it("merges nested conditions when possible", async () => {
352
+ const query = `#graphql
353
+ query GetProducts {
354
+ topProducts {
355
+ name
356
+ ... on Shoe @include(if: true) {
357
+ ... on Shoe {
358
+ rating
359
+ }
360
+ }
361
+ ... on Car {
362
+ rating
363
+ }
364
+ }
365
+ }
366
+ `;
367
+
368
+ const { queryPlan, errors } = await execute({ query }, [
369
+ {
370
+ name: 'products',
371
+ typeDefs: gql`
372
+ extend type Query {
373
+ topProducts: [Product]
374
+ }
375
+
376
+ interface Product {
377
+ name: String
378
+ }
379
+
380
+ type Shoe implements Product @key(fields: "upc") {
381
+ upc: String
382
+ name: String
383
+ }
384
+
385
+ type Car implements Product @key(fields: "upc") {
386
+ upc: String
387
+ name: String
388
+ }
389
+ `,
390
+ },
391
+ {
392
+ name: 'reviews',
393
+ typeDefs: gql`
394
+ extend type Shoe @key(fields: "upc") {
395
+ upc: String @external
396
+ rating: Int
397
+ }
398
+
399
+ extend type Car @key(fields: "upc") {
400
+ upc: String @external
401
+ rating: Int
402
+ }
403
+ `,
404
+ },
405
+ ]);
406
+
407
+ expect(errors).toBeUndefined();
408
+ expect(queryPlan).toMatchInlineSnapshot(`
409
+ QueryPlan {
410
+ Sequence {
411
+ Fetch(service: "products") {
412
+ {
413
+ topProducts {
414
+ __typename
415
+ ... on Car {
416
+ name
417
+ __typename
418
+ upc
419
+ }
420
+ ... on Shoe {
421
+ name
422
+ }
423
+ ... on Shoe @include(if: true) {
424
+ __typename
425
+ upc
426
+ }
427
+ }
428
+ }
429
+ },
430
+ Flatten(path: "topProducts.@") {
431
+ Fetch(service: "reviews") {
432
+ {
433
+ ... on Shoe {
434
+ __typename
435
+ upc
436
+ }
437
+ ... on Car {
438
+ __typename
439
+ upc
440
+ }
441
+ } =>
442
+ {
443
+ ... on Shoe @include(if: true) {
444
+ rating
445
+ }
446
+ ... on Car {
447
+ rating
448
+ }
449
+ }
450
+ },
451
+ },
452
+ },
453
+ }
454
+ `);
455
+ });
456
+
457
+ it("doesn't merge nested conditions when both have directives", async () => {
458
+ const query = `#graphql
459
+ query GetProducts {
460
+ topProducts {
461
+ name
462
+ ... on Shoe @include(if: true) {
463
+ ... on Shoe @skip(if: true) {
464
+ rating
465
+ }
466
+ }
467
+ ... on Car {
468
+ rating
469
+ }
470
+ }
471
+ }
472
+ `;
473
+
474
+ const { queryPlan, errors } = await execute({ query }, [
475
+ {
476
+ name: 'products',
477
+ typeDefs: gql`
478
+ extend type Query {
479
+ topProducts: [Product]
480
+ }
481
+
482
+ interface Product {
483
+ name: String
484
+ }
485
+
486
+ type Shoe implements Product @key(fields: "upc") {
487
+ upc: String
488
+ name: String
489
+ }
490
+
491
+ type Car implements Product @key(fields: "upc") {
492
+ upc: String
493
+ name: String
494
+ }
495
+ `,
496
+ },
497
+ {
498
+ name: 'reviews',
499
+ typeDefs: gql`
500
+ extend type Shoe @key(fields: "upc") {
501
+ upc: String @external
502
+ rating: Int
503
+ }
504
+
505
+ extend type Car @key(fields: "upc") {
506
+ upc: String @external
507
+ rating: Int
508
+ }
509
+ `,
510
+ },
511
+ ]);
512
+
513
+ expect(errors).toBeUndefined();
514
+ expect(queryPlan).toMatchInlineSnapshot(`
515
+ QueryPlan {
516
+ Sequence {
517
+ Fetch(service: "products") {
518
+ {
519
+ topProducts {
520
+ __typename
521
+ ... on Car {
522
+ name
523
+ __typename
524
+ upc
525
+ }
526
+ ... on Shoe {
527
+ name
528
+ }
529
+ ... on Shoe @include(if: true) {
530
+ ... on Shoe @skip(if: true) {
531
+ __typename
532
+ upc
533
+ }
534
+ }
535
+ }
536
+ }
537
+ },
538
+ Flatten(path: "topProducts.@") {
539
+ Fetch(service: "reviews") {
540
+ {
541
+ ... on Shoe {
542
+ ... on Shoe {
543
+ __typename
544
+ upc
545
+ }
546
+ }
547
+ ... on Car {
548
+ __typename
549
+ upc
550
+ }
551
+ } =>
552
+ {
553
+ ... on Shoe @include(if: true) {
554
+ ... on Shoe @skip(if: true) {
555
+ rating
556
+ }
557
+ }
558
+ ... on Car {
559
+ rating
560
+ }
561
+ }
562
+ },
563
+ },
564
+ },
565
+ }
566
+ `);
567
+ });
568
+ });
@@ -10,6 +10,8 @@ import {
10
10
  TypeNameMetaFieldDef,
11
11
  GraphQLFieldResolver,
12
12
  GraphQLFormattedError,
13
+ isAbstractType,
14
+ GraphQLSchema,
13
15
  } from 'graphql';
14
16
  import { Trace, google } from 'apollo-reporting-protobuf';
15
17
  import { defaultRootOperationNameLookup } from '@apollo/federation';
@@ -81,7 +83,7 @@ export async function executeQueryPlan<TContext>(
81
83
  // the original query.
82
84
  // It is also used to allow execution of introspection queries though.
83
85
  try {
84
- ({ data } = await execute({
86
+ const executionResult = await execute({
85
87
  schema: operationContext.schema,
86
88
  document: {
87
89
  kind: Kind.DOCUMENT,
@@ -94,7 +96,11 @@ export async function executeQueryPlan<TContext>(
94
96
  variableValues: requestContext.request.variables,
95
97
  // See also `wrapSchemaWithAliasResolver` in `gateway-js/src/index.ts`.
96
98
  fieldResolver: defaultFieldResolverWithAliasSupport,
97
- }));
99
+ });
100
+ data = executionResult.data;
101
+ if (executionResult.errors?.length) {
102
+ errors.push(...executionResult.errors)
103
+ }
98
104
  } catch (error) {
99
105
  return { errors: [error] };
100
106
  }
@@ -243,7 +249,11 @@ async function executeFetch<TContext>(
243
249
  const representationToEntity: number[] = [];
244
250
 
245
251
  entities.forEach((entity, index) => {
246
- const representation = executeSelectionSet(entity, requires);
252
+ const representation = executeSelectionSet(
253
+ context.operationContext,
254
+ entity,
255
+ requires,
256
+ );
247
257
  if (representation && representation[TypeNameMetaFieldDef.name]) {
248
258
  representations.push(representation);
249
259
  representationToEntity.push(index);
@@ -397,6 +407,7 @@ async function executeFetch<TContext>(
397
407
  * @param selectionSet
398
408
  */
399
409
  function executeSelectionSet(
410
+ operationContext: OperationContext,
400
411
  source: Record<string, any> | null,
401
412
  selections: QueryPlanSelectionNode[],
402
413
  ): Record<string, any> | null {
@@ -420,10 +431,13 @@ function executeSelectionSet(
420
431
  }
421
432
  if (Array.isArray(source[responseName])) {
422
433
  result[responseName] = source[responseName].map((value: any) =>
423
- selections ? executeSelectionSet(value, selections) : value,
434
+ selections
435
+ ? executeSelectionSet(operationContext, value, selections)
436
+ : value,
424
437
  );
425
438
  } else if (selections) {
426
439
  result[responseName] = executeSelectionSet(
440
+ operationContext,
427
441
  source[responseName],
428
442
  selections,
429
443
  );
@@ -437,10 +451,10 @@ function executeSelectionSet(
437
451
  const typename = source && source['__typename'];
438
452
  if (!typename) continue;
439
453
 
440
- if (typename === selection.typeCondition) {
454
+ if (doesTypeConditionMatch(operationContext.schema, selection.typeCondition, typename)) {
441
455
  deepMerge(
442
456
  result,
443
- executeSelectionSet(source, selection.selections),
457
+ executeSelectionSet(operationContext, source, selection.selections),
444
458
  );
445
459
  }
446
460
  break;
@@ -450,6 +464,32 @@ function executeSelectionSet(
450
464
  return result;
451
465
  }
452
466
 
467
+ function doesTypeConditionMatch(
468
+ schema: GraphQLSchema,
469
+ typeCondition: string,
470
+ typename: string,
471
+ ): boolean {
472
+ if (typeCondition === typename) {
473
+ return true;
474
+ }
475
+
476
+ const type = schema.getType(typename);
477
+ if (!type) {
478
+ return false;
479
+ }
480
+
481
+ const conditionalType = schema.getType(typeCondition);
482
+ if (!conditionalType) {
483
+ return false;
484
+ }
485
+
486
+ if (isAbstractType(conditionalType)) {
487
+ return schema.isSubType(conditionalType, type);
488
+ }
489
+
490
+ return false;
491
+ }
492
+
453
493
  function flattenResultsAtPath(value: any, path: ResponsePath): any {
454
494
  if (path.length === 0) return value;
455
495
  if (value === undefined || value === null) return value;