@apollo/gateway 0.300.0-alpha.2 → 2.0.0-alpha.2

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.
Files changed (198) hide show
  1. package/LICENSE +95 -0
  2. package/README.md +1 -1
  3. package/dist/__generated__/graphqlTypes.d.ts +130 -0
  4. package/dist/__generated__/graphqlTypes.d.ts.map +1 -0
  5. package/dist/__generated__/graphqlTypes.js +25 -0
  6. package/dist/__generated__/graphqlTypes.js.map +1 -0
  7. package/dist/config.d.ts +104 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +47 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/datasources/LocalGraphQLDataSource.d.ts +3 -3
  12. package/dist/datasources/LocalGraphQLDataSource.d.ts.map +1 -1
  13. package/dist/datasources/LocalGraphQLDataSource.js +5 -5
  14. package/dist/datasources/LocalGraphQLDataSource.js.map +1 -1
  15. package/dist/datasources/RemoteGraphQLDataSource.d.ts +6 -4
  16. package/dist/datasources/RemoteGraphQLDataSource.d.ts.map +1 -1
  17. package/dist/datasources/RemoteGraphQLDataSource.js +60 -17
  18. package/dist/datasources/RemoteGraphQLDataSource.js.map +1 -1
  19. package/dist/datasources/index.d.ts +1 -1
  20. package/dist/datasources/index.d.ts.map +1 -1
  21. package/dist/datasources/index.js +1 -0
  22. package/dist/datasources/index.js.map +1 -1
  23. package/dist/datasources/parseCacheControlHeader.d.ts +2 -0
  24. package/dist/datasources/parseCacheControlHeader.d.ts.map +1 -0
  25. package/dist/datasources/parseCacheControlHeader.js +16 -0
  26. package/dist/datasources/parseCacheControlHeader.js.map +1 -0
  27. package/dist/datasources/types.d.ts +16 -1
  28. package/dist/datasources/types.d.ts.map +1 -1
  29. package/dist/datasources/types.js +7 -0
  30. package/dist/datasources/types.js.map +1 -1
  31. package/dist/executeQueryPlan.d.ts +2 -1
  32. package/dist/executeQueryPlan.d.ts.map +1 -1
  33. package/dist/executeQueryPlan.js +199 -112
  34. package/dist/executeQueryPlan.js.map +1 -1
  35. package/dist/index.d.ts +62 -80
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +543 -234
  38. package/dist/index.js.map +1 -1
  39. package/dist/loadServicesFromRemoteEndpoint.d.ts +9 -9
  40. package/dist/loadServicesFromRemoteEndpoint.d.ts.map +1 -1
  41. package/dist/loadServicesFromRemoteEndpoint.js +13 -8
  42. package/dist/loadServicesFromRemoteEndpoint.js.map +1 -1
  43. package/dist/loadSupergraphSdlFromStorage.d.ts +13 -0
  44. package/dist/loadSupergraphSdlFromStorage.d.ts.map +1 -0
  45. package/dist/loadSupergraphSdlFromStorage.js +101 -0
  46. package/dist/loadSupergraphSdlFromStorage.js.map +1 -0
  47. package/dist/operationContext.d.ts +17 -0
  48. package/dist/operationContext.d.ts.map +1 -0
  49. package/dist/operationContext.js +42 -0
  50. package/dist/operationContext.js.map +1 -0
  51. package/dist/outOfBandReporter.d.ts +15 -0
  52. package/dist/outOfBandReporter.d.ts.map +1 -0
  53. package/dist/outOfBandReporter.js +88 -0
  54. package/dist/outOfBandReporter.js.map +1 -0
  55. package/dist/utilities/array.d.ts +1 -2
  56. package/dist/utilities/array.d.ts.map +1 -1
  57. package/dist/utilities/array.js +7 -14
  58. package/dist/utilities/array.js.map +1 -1
  59. package/dist/utilities/assert.d.ts +2 -0
  60. package/dist/utilities/assert.d.ts.map +1 -0
  61. package/dist/utilities/assert.js +10 -0
  62. package/dist/utilities/assert.js.map +1 -0
  63. package/dist/utilities/cleanErrorOfInaccessibleNames.d.ts +3 -0
  64. package/dist/utilities/cleanErrorOfInaccessibleNames.d.ts.map +1 -0
  65. package/dist/utilities/cleanErrorOfInaccessibleNames.js +27 -0
  66. package/dist/utilities/cleanErrorOfInaccessibleNames.js.map +1 -0
  67. package/dist/utilities/deepMerge.js +2 -2
  68. package/dist/utilities/deepMerge.js.map +1 -1
  69. package/dist/utilities/graphql.d.ts +1 -4
  70. package/dist/utilities/graphql.d.ts.map +1 -1
  71. package/dist/utilities/graphql.js +3 -36
  72. package/dist/utilities/graphql.js.map +1 -1
  73. package/dist/utilities/opentelemetry.d.ts +10 -0
  74. package/dist/utilities/opentelemetry.d.ts.map +1 -0
  75. package/dist/utilities/opentelemetry.js +19 -0
  76. package/dist/utilities/opentelemetry.js.map +1 -0
  77. package/package.json +30 -21
  78. package/src/__generated__/graphqlTypes.ts +140 -0
  79. package/src/__mocks__/apollo-server-env.ts +56 -0
  80. package/src/__mocks__/make-fetch-happen-fetcher.ts +55 -0
  81. package/src/__mocks__/tsconfig.json +7 -0
  82. package/src/__tests__/build-query-plan.feature +40 -311
  83. package/src/__tests__/buildQueryPlan.test.ts +246 -426
  84. package/src/__tests__/executeQueryPlan.test.ts +1691 -194
  85. package/src/__tests__/execution-utils.ts +33 -26
  86. package/src/__tests__/gateway/__snapshots__/opentelemetry.test.ts.snap +195 -0
  87. package/src/__tests__/gateway/buildService.test.ts +16 -19
  88. package/src/__tests__/gateway/composedSdl.test.ts +44 -0
  89. package/src/__tests__/gateway/endToEnd.test.ts +166 -0
  90. package/src/__tests__/gateway/executor.test.ts +49 -43
  91. package/src/__tests__/gateway/lifecycle-hooks.test.ts +58 -29
  92. package/src/__tests__/gateway/opentelemetry.test.ts +123 -0
  93. package/src/__tests__/gateway/queryPlanCache.test.ts +19 -20
  94. package/src/__tests__/gateway/reporting.test.ts +76 -55
  95. package/src/__tests__/integration/abstract-types.test.ts +1086 -22
  96. package/src/__tests__/integration/aliases.test.ts +5 -6
  97. package/src/__tests__/integration/boolean.test.ts +40 -38
  98. package/src/__tests__/integration/complex-key.test.ts +41 -56
  99. package/src/__tests__/integration/configuration.test.ts +321 -0
  100. package/src/__tests__/integration/custom-directives.test.ts +61 -46
  101. package/src/__tests__/integration/fragments.test.ts +8 -2
  102. package/src/__tests__/integration/list-key.test.ts +2 -2
  103. package/src/__tests__/integration/logger.test.ts +2 -2
  104. package/src/__tests__/integration/multiple-key.test.ts +11 -12
  105. package/src/__tests__/integration/mutations.test.ts +8 -5
  106. package/src/__tests__/integration/networkRequests.test.ts +447 -289
  107. package/src/__tests__/integration/nockMocks.ts +95 -66
  108. package/src/__tests__/integration/provides.test.ts +9 -6
  109. package/src/__tests__/integration/requires.test.ts +17 -15
  110. package/src/__tests__/integration/scope.test.ts +557 -0
  111. package/src/__tests__/integration/unions.test.ts +1 -1
  112. package/src/__tests__/integration/value-types.test.ts +35 -32
  113. package/src/__tests__/integration/variables.test.ts +8 -2
  114. package/src/__tests__/loadServicesFromRemoteEndpoint.test.ts +6 -2
  115. package/src/__tests__/loadSupergraphSdlFromStorage.test.ts +694 -0
  116. package/src/__tests__/queryPlanCucumber.test.ts +11 -61
  117. package/src/__tests__/testSetup.ts +1 -4
  118. package/src/__tests__/tsconfig.json +2 -1
  119. package/src/config.ts +225 -0
  120. package/src/core/__tests__/core.test.ts +412 -0
  121. package/src/datasources/LocalGraphQLDataSource.ts +9 -10
  122. package/src/datasources/RemoteGraphQLDataSource.ts +117 -43
  123. package/src/datasources/__tests__/LocalGraphQLDataSource.test.ts +11 -4
  124. package/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +148 -79
  125. package/src/datasources/__tests__/tsconfig.json +4 -2
  126. package/src/datasources/index.ts +1 -1
  127. package/src/datasources/parseCacheControlHeader.ts +43 -0
  128. package/src/datasources/types.ts +47 -2
  129. package/src/executeQueryPlan.ts +264 -153
  130. package/src/index.ts +925 -480
  131. package/src/loadServicesFromRemoteEndpoint.ts +24 -17
  132. package/src/loadSupergraphSdlFromStorage.ts +140 -0
  133. package/src/make-fetch-happen.d.ts +2 -2
  134. package/src/operationContext.ts +70 -0
  135. package/src/outOfBandReporter.ts +128 -0
  136. package/src/utilities/__tests__/cleanErrorOfInaccessibleElements.test.ts +104 -0
  137. package/src/utilities/__tests__/tsconfig.json +8 -0
  138. package/src/utilities/array.ts +6 -28
  139. package/src/utilities/assert.ts +14 -0
  140. package/src/utilities/cleanErrorOfInaccessibleNames.ts +29 -0
  141. package/src/utilities/graphql.ts +0 -64
  142. package/src/utilities/opentelemetry.ts +13 -0
  143. package/CHANGELOG.md +0 -226
  144. package/LICENSE.md +0 -20
  145. package/dist/FieldSet.d.ts +0 -18
  146. package/dist/FieldSet.d.ts.map +0 -1
  147. package/dist/FieldSet.js +0 -96
  148. package/dist/FieldSet.js.map +0 -1
  149. package/dist/QueryPlan.d.ts +0 -41
  150. package/dist/QueryPlan.d.ts.map +0 -1
  151. package/dist/QueryPlan.js +0 -15
  152. package/dist/QueryPlan.js.map +0 -1
  153. package/dist/buildQueryPlan.d.ts +0 -44
  154. package/dist/buildQueryPlan.d.ts.map +0 -1
  155. package/dist/buildQueryPlan.js +0 -670
  156. package/dist/buildQueryPlan.js.map +0 -1
  157. package/dist/loadServicesFromStorage.d.ts +0 -21
  158. package/dist/loadServicesFromStorage.d.ts.map +0 -1
  159. package/dist/loadServicesFromStorage.js +0 -64
  160. package/dist/loadServicesFromStorage.js.map +0 -1
  161. package/dist/snapshotSerializers/astSerializer.d.ts +0 -3
  162. package/dist/snapshotSerializers/astSerializer.d.ts.map +0 -1
  163. package/dist/snapshotSerializers/astSerializer.js +0 -14
  164. package/dist/snapshotSerializers/astSerializer.js.map +0 -1
  165. package/dist/snapshotSerializers/index.d.ts +0 -13
  166. package/dist/snapshotSerializers/index.d.ts.map +0 -1
  167. package/dist/snapshotSerializers/index.js +0 -15
  168. package/dist/snapshotSerializers/index.js.map +0 -1
  169. package/dist/snapshotSerializers/queryPlanSerializer.d.ts +0 -3
  170. package/dist/snapshotSerializers/queryPlanSerializer.d.ts.map +0 -1
  171. package/dist/snapshotSerializers/queryPlanSerializer.js +0 -78
  172. package/dist/snapshotSerializers/queryPlanSerializer.js.map +0 -1
  173. package/dist/snapshotSerializers/selectionSetSerializer.d.ts +0 -3
  174. package/dist/snapshotSerializers/selectionSetSerializer.d.ts.map +0 -1
  175. package/dist/snapshotSerializers/selectionSetSerializer.js +0 -12
  176. package/dist/snapshotSerializers/selectionSetSerializer.js.map +0 -1
  177. package/dist/snapshotSerializers/typeSerializer.d.ts +0 -3
  178. package/dist/snapshotSerializers/typeSerializer.d.ts.map +0 -1
  179. package/dist/snapshotSerializers/typeSerializer.js +0 -12
  180. package/dist/snapshotSerializers/typeSerializer.js.map +0 -1
  181. package/dist/utilities/MultiMap.d.ts +0 -4
  182. package/dist/utilities/MultiMap.d.ts.map +0 -1
  183. package/dist/utilities/MultiMap.js +0 -17
  184. package/dist/utilities/MultiMap.js.map +0 -1
  185. package/src/FieldSet.ts +0 -169
  186. package/src/QueryPlan.ts +0 -57
  187. package/src/__tests__/matchers/toCallService.ts +0 -105
  188. package/src/__tests__/matchers/toHaveBeenCalledBefore.ts +0 -40
  189. package/src/__tests__/matchers/toHaveFetched.ts +0 -81
  190. package/src/__tests__/matchers/toMatchAST.ts +0 -64
  191. package/src/buildQueryPlan.ts +0 -1190
  192. package/src/loadServicesFromStorage.ts +0 -170
  193. package/src/snapshotSerializers/astSerializer.ts +0 -21
  194. package/src/snapshotSerializers/index.ts +0 -21
  195. package/src/snapshotSerializers/queryPlanSerializer.ts +0 -144
  196. package/src/snapshotSerializers/selectionSetSerializer.ts +0 -13
  197. package/src/snapshotSerializers/typeSerializer.ts +0 -11
  198. package/src/utilities/MultiMap.ts +0 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanErrorOfInaccessibleNames.js","sourceRoot":"","sources":["../../src/utilities/cleanErrorOfInaccessibleNames.ts"],"names":[],"mappings":";;;AAEA,SAAgB,6BAA6B,CAC3C,MAAqB,EACrB,KAAmB;IAGnB,MAAM,iBAAiB,GAAG,uDAAuD,CAAC;IAClF,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,KAAa,EAAE,EAAE;QACzE,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,sBAAsB,CAAC;SAC/B;aAAM;YACL,MAAM,KAAK,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC;SAC/C;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,6BAA6B,CAAC;IAChD,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAa,EAAE,EAAE;QAEjE,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,eAAe;YAAE,OAAO,KAAK,CAAC;QACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAClE,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AA1BD,sEA0BC"}
@@ -8,7 +8,7 @@ function deepMerge(target, source) {
8
8
  for (const key of Object.keys(source)) {
9
9
  if (source[key] === undefined || key === '__proto__')
10
10
  continue;
11
- if (target[key] && predicates_1.isObject(source[key])) {
11
+ if (target[key] && (0, predicates_1.isObject)(source[key])) {
12
12
  deepMerge(target[key], source[key]);
13
13
  }
14
14
  else if (Array.isArray(source[key]) &&
@@ -16,7 +16,7 @@ function deepMerge(target, source) {
16
16
  source[key].length === target[key].length) {
17
17
  let i = 0;
18
18
  for (; i < source[key].length; i++) {
19
- if (predicates_1.isObject(target[key][i]) && predicates_1.isObject(source[key][i])) {
19
+ if ((0, predicates_1.isObject)(target[key][i]) && (0, predicates_1.isObject)(source[key][i])) {
20
20
  deepMerge(target[key][i], source[key][i]);
21
21
  }
22
22
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"deepMerge.js","sourceRoot":"","sources":["../../src/utilities/deepMerge.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAExC,SAAgB,SAAS,CAAC,MAAW,EAAE,MAAW;IAChD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAE3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACrC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW;YAAE,SAAS;QAE/D,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,qBAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;YACxC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;SACrC;aAAM,IACL,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EACzC;YACA,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,qBAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,qBAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACxD,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3C;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;aACF;SACF;aAAM;YACL,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3B;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA3BD,8BA2BC"}
1
+ {"version":3,"file":"deepMerge.js","sourceRoot":"","sources":["../../src/utilities/deepMerge.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AAExC,SAAgB,SAAS,CAAC,MAAW,EAAE,MAAW;IAChD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAE3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACrC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,KAAK,WAAW;YAAE,SAAS;QAE/D,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,IAAA,qBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;YACxC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;SACrC;aAAM,IACL,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EACzC;YACA,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,IAAA,qBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAA,qBAAQ,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBACxD,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3C;qBAAM;oBACL,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjC;aACF;SACF;aAAM;YACL,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SAC3B;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA3BD,8BA2BC"}
@@ -1,8 +1,5 @@
1
- import { ASTNode, FieldNode, GraphQLCompositeType, GraphQLField, GraphQLNullableType, GraphQLSchema, ListTypeNode, NamedTypeNode, SelectionNode } from 'graphql';
2
- export declare function getFieldDef(schema: GraphQLSchema, parentType: GraphQLCompositeType, fieldName: string): GraphQLField<any, any> | undefined;
1
+ import { ASTNode, FieldNode, GraphQLNullableType, ListTypeNode, NamedTypeNode } from 'graphql';
3
2
  export declare function getResponseName(node: FieldNode): string;
4
3
  export declare function allNodesAreOfSameKind<T extends ASTNode>(firstNode: T, remainingNodes: ASTNode[]): remainingNodes is T[];
5
4
  export declare function astFromType(type: GraphQLNullableType): NamedTypeNode | ListTypeNode;
6
- export declare function printWithReducedWhitespace(ast: ASTNode): string;
7
- export declare function parseSelections(source: string): ReadonlyArray<SelectionNode>;
8
5
  //# sourceMappingURL=graphql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/utilities/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,SAAS,EACT,oBAAoB,EACpB,YAAY,EAEZ,mBAAmB,EAEnB,aAAa,EAMb,YAAY,EACZ,aAAa,EAKb,aAAa,EAId,MAAM,SAAS,CAAC;AAOjB,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,MAAM,GAChB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,SAAS,CA6BpC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEvD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,OAAO,EACrD,SAAS,EAAE,CAAC,EACZ,cAAc,EAAE,OAAO,EAAE,GACxB,cAAc,IAAI,CAAC,EAAE,CAEvB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,mBAAmB,GACxB,aAAa,GAAG,YAAY,CAAC;AAchC,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAI/D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,CAG5E"}
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/utilities/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,SAAS,EACT,mBAAmB,EAKnB,YAAY,EACZ,aAAa,EAEd,MAAM,SAAS,CAAC;AAEjB,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEvD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,OAAO,EACrD,SAAS,EAAE,CAAC,EACZ,cAAc,EAAE,OAAO,EAAE,GACxB,cAAc,IAAI,CAAC,EAAE,CAEvB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,mBAAmB,GACxB,aAAa,GAAG,YAAY,CAAC"}
@@ -1,29 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseSelections = exports.printWithReducedWhitespace = exports.astFromType = exports.allNodesAreOfSameKind = exports.getResponseName = exports.getFieldDef = void 0;
3
+ exports.astFromType = exports.allNodesAreOfSameKind = exports.getResponseName = void 0;
4
4
  const graphql_1 = require("graphql");
5
- function getFieldDef(schema, parentType, fieldName) {
6
- if (fieldName === graphql_1.SchemaMetaFieldDef.name &&
7
- schema.getQueryType() === parentType) {
8
- return graphql_1.SchemaMetaFieldDef;
9
- }
10
- if (fieldName === graphql_1.TypeMetaFieldDef.name &&
11
- schema.getQueryType() === parentType) {
12
- return graphql_1.TypeMetaFieldDef;
13
- }
14
- if (fieldName === graphql_1.TypeNameMetaFieldDef.name &&
15
- (parentType instanceof graphql_1.GraphQLObjectType ||
16
- parentType instanceof graphql_1.GraphQLInterfaceType ||
17
- parentType instanceof graphql_1.GraphQLUnionType)) {
18
- return graphql_1.TypeNameMetaFieldDef;
19
- }
20
- if (parentType instanceof graphql_1.GraphQLObjectType ||
21
- parentType instanceof graphql_1.GraphQLInterfaceType) {
22
- return parentType.getFields()[fieldName];
23
- }
24
- return undefined;
25
- }
26
- exports.getFieldDef = getFieldDef;
27
5
  function getResponseName(node) {
28
6
  return node.alias ? node.alias.value : node.name.value;
29
7
  }
@@ -33,10 +11,10 @@ function allNodesAreOfSameKind(firstNode, remainingNodes) {
33
11
  }
34
12
  exports.allNodesAreOfSameKind = allNodesAreOfSameKind;
35
13
  function astFromType(type) {
36
- if (graphql_1.isListType(type)) {
14
+ if ((0, graphql_1.isListType)(type)) {
37
15
  return { kind: graphql_1.Kind.LIST_TYPE, type: astFromType(type.ofType) };
38
16
  }
39
- else if (graphql_1.isNonNullType(type)) {
17
+ else if ((0, graphql_1.isNonNullType)(type)) {
40
18
  return { kind: graphql_1.Kind.NON_NULL_TYPE, type: astFromType(type.ofType) };
41
19
  }
42
20
  else {
@@ -47,15 +25,4 @@ function astFromType(type) {
47
25
  }
48
26
  }
49
27
  exports.astFromType = astFromType;
50
- function printWithReducedWhitespace(ast) {
51
- return graphql_1.print(ast)
52
- .replace(/\s+/g, ' ')
53
- .trim();
54
- }
55
- exports.printWithReducedWhitespace = printWithReducedWhitespace;
56
- function parseSelections(source) {
57
- return graphql_1.parse(`query { ${source} }`)
58
- .definitions[0].selectionSet.selections;
59
- }
60
- exports.parseSelections = parseSelections;
61
28
  //# sourceMappingURL=graphql.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/utilities/graphql.ts"],"names":[],"mappings":";;;AAAA,qCAwBiB;AAOjB,SAAgB,WAAW,CACzB,MAAqB,EACrB,UAAgC,EAChC,SAAiB;IAEjB,IACE,SAAS,KAAK,4BAAkB,CAAC,IAAI;QACrC,MAAM,CAAC,YAAY,EAAE,KAAK,UAAU,EACpC;QACA,OAAO,4BAAkB,CAAC;KAC3B;IACD,IACE,SAAS,KAAK,0BAAgB,CAAC,IAAI;QACnC,MAAM,CAAC,YAAY,EAAE,KAAK,UAAU,EACpC;QACA,OAAO,0BAAgB,CAAC;KACzB;IACD,IACE,SAAS,KAAK,8BAAoB,CAAC,IAAI;QACvC,CAAC,UAAU,YAAY,2BAAiB;YACtC,UAAU,YAAY,8BAAoB;YAC1C,UAAU,YAAY,0BAAgB,CAAC,EACzC;QACA,OAAO,8BAAoB,CAAC;KAC7B;IACD,IACE,UAAU,YAAY,2BAAiB;QACvC,UAAU,YAAY,8BAAoB,EAC1C;QACA,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;KAC1C;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAjCD,kCAiCC;AAED,SAAgB,eAAe,CAAC,IAAe;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,CAAC;AAFD,0CAEC;AAED,SAAgB,qBAAqB,CACnC,SAAY,EACZ,cAAyB;IAEzB,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AALD,sDAKC;AAKD,SAAgB,WAAW,CAAC,IAAiB;IAC3C,IAAI,oBAAU,CAAC,IAAI,CAAC,EAAE;QACpB,OAAO,EAAE,IAAI,EAAE,cAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KACjE;SAAM,IAAI,uBAAa,CAAC,IAAI,CAAC,EAAE;QAC9B,OAAO,EAAE,IAAI,EAAE,cAAI,CAAC,aAAa,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KACrE;SAAM;QACL,OAAO;YACL,IAAI,EAAE,cAAI,CAAC,UAAU;YACrB,IAAI,EAAE,EAAE,IAAI,EAAE,cAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;SAC5C,CAAC;KACH;AACH,CAAC;AAXD,kCAWC;AAED,SAAgB,0BAA0B,CAAC,GAAY;IACrD,OAAO,eAAK,CAAC,GAAG,CAAC;SACd,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAJD,gEAIC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAQ,eAAK,CAAC,WAAW,MAAM,IAAI,CAAC;SACjC,WAAW,CAAC,CAAC,CAA6B,CAAC,YAAY,CAAC,UAAU,CAAC;AACxE,CAAC;AAHD,0CAGC"}
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/utilities/graphql.ts"],"names":[],"mappings":";;;AAAA,qCAWiB;AAEjB,SAAgB,eAAe,CAAC,IAAe;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACzD,CAAC;AAFD,0CAEC;AAED,SAAgB,qBAAqB,CACnC,SAAY,EACZ,cAAyB;IAEzB,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC;AALD,sDAKC;AAKD,SAAgB,WAAW,CAAC,IAAiB;IAC3C,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE;QACpB,OAAO,EAAE,IAAI,EAAE,cAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KACjE;SAAM,IAAI,IAAA,uBAAa,EAAC,IAAI,CAAC,EAAE;QAC9B,OAAO,EAAE,IAAI,EAAE,cAAI,CAAC,aAAa,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KACrE;SAAM;QACL,OAAO;YACL,IAAI,EAAE,cAAI,CAAC,UAAU;YACrB,IAAI,EAAE,EAAE,IAAI,EAAE,cAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;SAC5C,CAAC;KACH;AACH,CAAC;AAXD,kCAWC"}
@@ -0,0 +1,10 @@
1
+ export declare enum OpenTelemetrySpanNames {
2
+ REQUEST = "gateway.request",
3
+ PLAN = "gateway.plan",
4
+ FETCH = "gateway.fetch",
5
+ POST_PROCESSING = "gateway.postprocessing",
6
+ EXECUTE = "gateway.execute",
7
+ VALIDATE = "gateway.validate"
8
+ }
9
+ export declare const tracer: import("@opentelemetry/api").Tracer;
10
+ //# sourceMappingURL=opentelemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry.d.ts","sourceRoot":"","sources":["../../src/utilities/opentelemetry.ts"],"names":[],"mappings":"AAEA,oBAAY,sBAAsB;IAChC,OAAO,oBAAoB;IAC3B,IAAI,iBAAiB;IACrB,KAAK,kBAAkB;IACvB,eAAe,2BAA2B;IAC1C,OAAO,oBAAoB;IAC3B,QAAQ,qBAAqB;CAC9B;AAGD,eAAO,MAAM,MAAM,qCAAsD,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.tracer = exports.OpenTelemetrySpanNames = void 0;
7
+ const api_1 = __importDefault(require("@opentelemetry/api"));
8
+ var OpenTelemetrySpanNames;
9
+ (function (OpenTelemetrySpanNames) {
10
+ OpenTelemetrySpanNames["REQUEST"] = "gateway.request";
11
+ OpenTelemetrySpanNames["PLAN"] = "gateway.plan";
12
+ OpenTelemetrySpanNames["FETCH"] = "gateway.fetch";
13
+ OpenTelemetrySpanNames["POST_PROCESSING"] = "gateway.postprocessing";
14
+ OpenTelemetrySpanNames["EXECUTE"] = "gateway.execute";
15
+ OpenTelemetrySpanNames["VALIDATE"] = "gateway.validate";
16
+ })(OpenTelemetrySpanNames = exports.OpenTelemetrySpanNames || (exports.OpenTelemetrySpanNames = {}));
17
+ const { name, version } = require('../../package.json');
18
+ exports.tracer = api_1.default.trace.getTracer(`${name}/${version}`);
19
+ //# sourceMappingURL=opentelemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry.js","sourceRoot":"","sources":["../../src/utilities/opentelemetry.ts"],"names":[],"mappings":";;;;;;AAAA,6DAA+C;AAE/C,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,qDAA2B,CAAA;IAC3B,+CAAqB,CAAA;IACrB,iDAAuB,CAAA;IACvB,oEAA0C,CAAA;IAC1C,qDAA2B,CAAA;IAC3B,uDAA6B,CAAA;AAC/B,CAAC,EAPW,sBAAsB,GAAtB,8BAAsB,KAAtB,8BAAsB,QAOjC;AAED,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC3C,QAAA,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,40 +1,49 @@
1
1
  {
2
2
  "name": "@apollo/gateway",
3
- "version": "0.300.0-alpha.2",
3
+ "version": "2.0.0-alpha.2",
4
4
  "description": "Apollo Gateway",
5
- "author": "Apollo <opensource@apollographql.com>",
5
+ "author": "Apollo <packages@apollographql.com>",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/apollographql/federation.git",
11
+ "directory": "gateway-js/"
12
+ },
8
13
  "keywords": [
9
- "GraphQL",
10
- "Apollo",
11
- "Server",
12
- "Javascript"
14
+ "graphql",
15
+ "federation",
16
+ "gateway",
17
+ "server",
18
+ "apollo"
13
19
  ],
14
20
  "engines": {
15
- "node": ">=12.0 <15.0"
21
+ "node": ">=12.13.0 <17.0"
16
22
  },
17
- "license": "MIT",
23
+ "license": "SEE LICENSE IN ./LICENSE",
18
24
  "publishConfig": {
19
25
  "access": "public"
20
26
  },
21
27
  "dependencies": {
22
- "@apollo/federation": "^0.300.0-alpha.2",
23
- "@types/node-fetch": "2.5.4",
24
- "apollo-engine-reporting-protobuf": "^0.5.2",
25
- "apollo-env": "^0.6.1",
26
- "apollo-graphql": "^0.5.0",
27
- "apollo-server-caching": "^0.300.0-alpha.2",
28
- "apollo-server-core": "^3.0.0-alpha.2",
29
- "apollo-server-env": "^3.0.0-alpha.2",
30
- "apollo-server-errors": "^3.0.0-alpha.2",
31
- "apollo-server-types": "^0.300.0-alpha.2",
28
+ "@apollo/composition": "^2.0.0-alpha.2",
29
+ "@apollo/core-schema": "^0.2.0",
30
+ "@apollo/query-planner": "^2.0.0-alpha.2",
31
+ "@opentelemetry/api": "^1.0.1",
32
+ "@types/node-fetch": "2.5.12",
33
+ "apollo-graphql": "^0.9.5",
34
+ "apollo-reporting-protobuf": "^0.8.0 || ^3.0.0",
35
+ "apollo-server-caching": "^0.7.0 || ^3.0.0",
36
+ "apollo-server-core": "^2.23.0 || ^3.0.0",
37
+ "apollo-server-env": "^3.0.0 || ^4.0.0",
38
+ "apollo-server-errors": "^2.5.0 || ^3.0.0",
39
+ "apollo-server-types": "^0.9.0 || ^3.0.0",
40
+ "apollo-utilities": "^1.3.0",
32
41
  "loglevel": "^1.6.1",
33
42
  "make-fetch-happen": "^8.0.0",
34
- "pretty-format": "^26.0.0"
43
+ "pretty-format": "^27.0.0"
35
44
  },
36
45
  "peerDependencies": {
37
- "graphql": "^15.0.0"
46
+ "graphql": "^15.7.0"
38
47
  },
39
- "gitHead": "6f3711b589dca8079264969263266cd7b6010ed3"
48
+ "gitHead": "9265ba09ec5620b931861a44603d7d5f7d4688f2"
40
49
  }
@@ -0,0 +1,140 @@
1
+ export type Maybe<T> = T | null;
2
+ export type InputMaybe<T> = Maybe<T>;
3
+ export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
4
+ export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
5
+ export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
6
+ /** All built-in and custom scalars, mapped to their actual values */
7
+ export type Scalars = {
8
+ ID: string;
9
+ String: string;
10
+ Boolean: boolean;
11
+ Int: number;
12
+ Float: number;
13
+ /** ISO 8601, extended format with nanoseconds, Zulu (or '[+-]seconds' for times relative to now) */
14
+ Timestamp: any;
15
+ };
16
+
17
+ export type ApiMonitoringReport = {
18
+ endedAt: Scalars['Timestamp'];
19
+ error: Error;
20
+ request: Request;
21
+ response?: InputMaybe<Response>;
22
+ startedAt: Scalars['Timestamp'];
23
+ /** Tags can include things like version and package name */
24
+ tags?: InputMaybe<Array<Scalars['String']>>;
25
+ };
26
+
27
+ export type Error = {
28
+ code: ErrorCode;
29
+ message?: InputMaybe<Scalars['String']>;
30
+ };
31
+
32
+ export enum ErrorCode {
33
+ ConnectionFailed = 'CONNECTION_FAILED',
34
+ InvalidBody = 'INVALID_BODY',
35
+ Other = 'OTHER',
36
+ Timeout = 'TIMEOUT',
37
+ UnexpectedResponse = 'UNEXPECTED_RESPONSE'
38
+ }
39
+
40
+ export type FetchError = {
41
+ __typename?: 'FetchError';
42
+ code: FetchErrorCode;
43
+ message: Scalars['String'];
44
+ };
45
+
46
+ export enum FetchErrorCode {
47
+ /** This token does not have access to fetch the schema for this ref. Do not retry. */
48
+ AccessDenied = 'ACCESS_DENIED',
49
+ /** This token provided is not a valid graph token. Do not retry */
50
+ AuthenticationFailed = 'AUTHENTICATION_FAILED',
51
+ /** An internal server error occurred. Please retry with some backoff */
52
+ RetryLater = 'RETRY_LATER',
53
+ /** The graphRef passed is not a valid ref or no configuration for that ref is found. Do not retry */
54
+ UnknownRef = 'UNKNOWN_REF'
55
+ }
56
+
57
+ export type HttpHeader = {
58
+ name: Scalars['String'];
59
+ value?: InputMaybe<Scalars['String']>;
60
+ };
61
+
62
+ export type Message = {
63
+ __typename?: 'Message';
64
+ body: Scalars['String'];
65
+ level: MessageLevel;
66
+ };
67
+
68
+ export enum MessageLevel {
69
+ Error = 'ERROR',
70
+ Info = 'INFO',
71
+ Warn = 'WARN'
72
+ }
73
+
74
+ export type Mutation = {
75
+ __typename?: 'Mutation';
76
+ reportError: Scalars['Boolean'];
77
+ };
78
+
79
+
80
+ export type MutationReportErrorArgs = {
81
+ report?: InputMaybe<ApiMonitoringReport>;
82
+ };
83
+
84
+ export type Query = {
85
+ __typename?: 'Query';
86
+ _empty?: Maybe<Scalars['String']>;
87
+ /** Fetch the configuration for a router. If a valid configuration is available, it will be readable as cSDL. */
88
+ routerConfig: RouterConfigResponse;
89
+ };
90
+
91
+
92
+ export type QueryRouterConfigArgs = {
93
+ apiKey: Scalars['String'];
94
+ ifAfterId?: InputMaybe<Scalars['ID']>;
95
+ ref: Scalars['String'];
96
+ };
97
+
98
+ export type Request = {
99
+ body?: InputMaybe<Scalars['String']>;
100
+ headers?: InputMaybe<Array<HttpHeader>>;
101
+ url: Scalars['String'];
102
+ };
103
+
104
+ export type Response = {
105
+ body?: InputMaybe<Scalars['String']>;
106
+ headers?: InputMaybe<Array<HttpHeader>>;
107
+ httpStatusCode: Scalars['Int'];
108
+ };
109
+
110
+ export type RouterConfigResponse = FetchError | RouterConfigResult | Unchanged;
111
+
112
+ export type RouterConfigResult = {
113
+ __typename?: 'RouterConfigResult';
114
+ id: Scalars['ID'];
115
+ /** Messages that should be reported back to the operators of this router, eg through logs and/or monitoring. */
116
+ messages: Array<Message>;
117
+ /** The configuration as core schema */
118
+ supergraphSDL: Scalars['String'];
119
+ };
120
+
121
+ export type Unchanged = {
122
+ __typename?: 'Unchanged';
123
+ id: Scalars['ID'];
124
+ };
125
+
126
+ export type SupergraphSdlQueryVariables = Exact<{
127
+ apiKey: Scalars['String'];
128
+ ref: Scalars['String'];
129
+ ifAfterId?: InputMaybe<Scalars['ID']>;
130
+ }>;
131
+
132
+
133
+ export type SupergraphSdlQuery = { __typename?: 'Query', routerConfig: { __typename: 'FetchError', code: FetchErrorCode, message: string } | { __typename: 'RouterConfigResult', id: string, supergraphSdl: string } | { __typename: 'Unchanged' } };
134
+
135
+ export type OobReportMutationVariables = Exact<{
136
+ input?: InputMaybe<ApiMonitoringReport>;
137
+ }>;
138
+
139
+
140
+ export type OobReportMutation = { __typename?: 'Mutation', reportError: boolean };
@@ -0,0 +1,56 @@
1
+ import {
2
+ fetch,
3
+ Request,
4
+ Response,
5
+ Body,
6
+ BodyInit,
7
+ Headers,
8
+ HeadersInit,
9
+ URL,
10
+ URLSearchParams,
11
+ } from 'apollo-server-env';
12
+ interface FetchMock extends jest.MockedFunction<typeof fetch> {
13
+ mockResponseOnce(data?: any, headers?: HeadersInit, status?: number): this;
14
+ mockJSONResponseOnce(data?: object, headers?: HeadersInit): this;
15
+ }
16
+
17
+ const mockFetch = jest.fn(fetch) as unknown as FetchMock;
18
+
19
+ mockFetch.mockResponseOnce = (
20
+ data?: BodyInit,
21
+ headers?: Headers,
22
+ status: number = 200,
23
+ ) => {
24
+ return mockFetch.mockImplementationOnce(async () => {
25
+ return new Response(data, {
26
+ status,
27
+ headers,
28
+ });
29
+ });
30
+ };
31
+
32
+ mockFetch.mockJSONResponseOnce = (
33
+ data = {},
34
+ headers?: Headers,
35
+ status?: number,
36
+ ) => {
37
+ return mockFetch.mockResponseOnce(
38
+ JSON.stringify(data),
39
+ Object.assign({ 'Content-Type': 'application/json' }, headers),
40
+ status,
41
+ );
42
+ };
43
+
44
+ const env = {
45
+ fetch: mockFetch,
46
+ Request,
47
+ Response,
48
+ Body,
49
+ Headers,
50
+ URL,
51
+ URLSearchParams,
52
+ };
53
+
54
+ jest.doMock('apollo-server-env', () => env);
55
+
56
+ export = env;
@@ -0,0 +1,55 @@
1
+ /// <reference path="../make-fetch-happen.d.ts" />
2
+ // This explicit reference shouldn't be needed because the project references
3
+ // the main project, which includes these type declarations. For some reason,
4
+ // VS Code doesn't pick that up though.
5
+ // (This may be related to https://github.com/microsoft/TypeScript/issues/36708.)
6
+
7
+ import {
8
+ fetch,
9
+ Response,
10
+ BodyInit,
11
+ Headers,
12
+ HeadersInit
13
+ } from 'apollo-server-env';
14
+
15
+ import fetcher from 'make-fetch-happen';
16
+
17
+ interface MakeFetchHappenMock extends jest.MockedFunction<typeof fetch> {
18
+ mockResponseOnce(data?: any, headers?: HeadersInit, status?: number): this;
19
+ mockJSONResponseOnce(data?: object, headers?: HeadersInit): this;
20
+ }
21
+
22
+ const mockMakeFetchHappen = jest.fn(fetcher) as unknown as MakeFetchHappenMock;
23
+
24
+ mockMakeFetchHappen.mockResponseOnce = (
25
+ data?: BodyInit,
26
+ headers?: Headers,
27
+ status: number = 200,
28
+ ) => {
29
+ return mockMakeFetchHappen.mockImplementationOnce(async () => {
30
+ return new Response(data, {
31
+ status,
32
+ headers,
33
+ });
34
+ });
35
+ };
36
+
37
+ mockMakeFetchHappen.mockJSONResponseOnce = (
38
+ data = {},
39
+ headers?: Headers,
40
+ status?: number,
41
+ ) => {
42
+ return mockMakeFetchHappen.mockResponseOnce(
43
+ JSON.stringify(data),
44
+ Object.assign({ 'Content-Type': 'application/json' }, headers),
45
+ status,
46
+ );
47
+ };
48
+
49
+ const makeFetchMock = {
50
+ makeFetchHappenFetcher: mockMakeFetchHappen,
51
+ };
52
+
53
+ jest.doMock('make-fetch-happen', () => makeFetchMock);
54
+
55
+ export = makeFetchMock;
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "../../tsconfig.test",
3
+ "references": [
4
+ { "path": "../../" },
5
+ { "path": "../../../federation-integration-testsuite-js" },
6
+ ]
7
+ }