@apollo/gateway 2.4.4 → 2.4.6

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 (176) hide show
  1. package/dist/__generated__/graphqlTypes.d.ts +178 -0
  2. package/dist/__generated__/graphqlTypes.d.ts.map +1 -0
  3. package/dist/__generated__/graphqlTypes.js +31 -0
  4. package/dist/__generated__/graphqlTypes.js.map +1 -0
  5. package/dist/config.d.ts +138 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +60 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/dataRewrites.d.ts +5 -0
  10. package/dist/dataRewrites.d.ts.map +1 -0
  11. package/dist/dataRewrites.js +103 -0
  12. package/dist/dataRewrites.js.map +1 -0
  13. package/dist/datasources/LocalGraphQLDataSource.d.ts +10 -0
  14. package/dist/datasources/LocalGraphQLDataSource.d.ts.map +1 -0
  15. package/dist/datasources/LocalGraphQLDataSource.js +31 -0
  16. package/dist/datasources/LocalGraphQLDataSource.js.map +1 -0
  17. package/dist/datasources/RemoteGraphQLDataSource.d.ts +24 -0
  18. package/dist/datasources/RemoteGraphQLDataSource.d.ts.map +1 -0
  19. package/dist/datasources/RemoteGraphQLDataSource.js +180 -0
  20. package/dist/datasources/RemoteGraphQLDataSource.js.map +1 -0
  21. package/dist/datasources/index.d.ts +4 -0
  22. package/dist/datasources/index.d.ts.map +1 -0
  23. package/dist/datasources/index.js +8 -0
  24. package/dist/datasources/index.js.map +1 -0
  25. package/dist/datasources/parseCacheControlHeader.d.ts +2 -0
  26. package/dist/datasources/parseCacheControlHeader.d.ts.map +1 -0
  27. package/dist/datasources/parseCacheControlHeader.js +16 -0
  28. package/dist/datasources/parseCacheControlHeader.js.map +1 -0
  29. package/dist/datasources/types.d.ts +23 -0
  30. package/dist/datasources/types.d.ts.map +1 -0
  31. package/dist/datasources/types.js +10 -0
  32. package/dist/datasources/types.js.map +1 -0
  33. package/dist/executeQueryPlan.d.ts +15 -0
  34. package/dist/executeQueryPlan.d.ts.map +1 -0
  35. package/dist/executeQueryPlan.js +539 -0
  36. package/dist/executeQueryPlan.js.map +1 -0
  37. package/dist/index.d.ts +113 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +590 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/logger.d.ts +3 -0
  42. package/dist/logger.d.ts.map +1 -0
  43. package/dist/logger.js +15 -0
  44. package/dist/logger.js.map +1 -0
  45. package/dist/operationContext.d.ts +17 -0
  46. package/dist/operationContext.d.ts.map +1 -0
  47. package/dist/operationContext.js +38 -0
  48. package/dist/operationContext.js.map +1 -0
  49. package/dist/resultShaping.d.ts +12 -0
  50. package/dist/resultShaping.d.ts.map +1 -0
  51. package/dist/resultShaping.js +229 -0
  52. package/dist/resultShaping.js.map +1 -0
  53. package/dist/schema-helper/addExtensions.d.ts +3 -0
  54. package/dist/schema-helper/addExtensions.d.ts.map +1 -0
  55. package/dist/schema-helper/addExtensions.js +23 -0
  56. package/dist/schema-helper/addExtensions.js.map +1 -0
  57. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts +31 -0
  58. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts.map +1 -0
  59. package/dist/supergraphManagers/IntrospectAndCompose/index.js +112 -0
  60. package/dist/supergraphManagers/IntrospectAndCompose/index.js.map +1 -0
  61. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts +12 -0
  62. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts.map +1 -0
  63. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js +57 -0
  64. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js.map +1 -0
  65. package/dist/supergraphManagers/LegacyFetcher/index.d.ts +33 -0
  66. package/dist/supergraphManagers/LegacyFetcher/index.d.ts.map +1 -0
  67. package/dist/supergraphManagers/LegacyFetcher/index.js +149 -0
  68. package/dist/supergraphManagers/LegacyFetcher/index.js.map +1 -0
  69. package/dist/supergraphManagers/LocalCompose/index.d.ts +19 -0
  70. package/dist/supergraphManagers/LocalCompose/index.d.ts.map +1 -0
  71. package/dist/supergraphManagers/LocalCompose/index.js +55 -0
  72. package/dist/supergraphManagers/LocalCompose/index.js.map +1 -0
  73. package/dist/supergraphManagers/UplinkSupergraphManager/index.d.ts +63 -0
  74. package/dist/supergraphManagers/UplinkSupergraphManager/index.d.ts.map +1 -0
  75. package/dist/supergraphManagers/UplinkSupergraphManager/index.js +210 -0
  76. package/dist/supergraphManagers/UplinkSupergraphManager/index.js.map +1 -0
  77. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.d.ts +30 -0
  78. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.d.ts.map +1 -0
  79. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.js +145 -0
  80. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.js.map +1 -0
  81. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.d.ts +14 -0
  82. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.d.ts.map +1 -0
  83. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.js +85 -0
  84. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.js.map +1 -0
  85. package/dist/supergraphManagers/index.d.ts +6 -0
  86. package/dist/supergraphManagers/index.d.ts.map +1 -0
  87. package/dist/supergraphManagers/index.js +27 -0
  88. package/dist/supergraphManagers/index.js.map +1 -0
  89. package/dist/typings/graphql.d.ts +11 -0
  90. package/dist/typings/graphql.d.ts.map +1 -0
  91. package/dist/typings/graphql.js +3 -0
  92. package/dist/typings/graphql.js.map +1 -0
  93. package/dist/utilities/array.d.ts +5 -0
  94. package/dist/utilities/array.d.ts.map +1 -0
  95. package/dist/utilities/array.js +46 -0
  96. package/dist/utilities/array.js.map +1 -0
  97. package/dist/utilities/assert.d.ts +2 -0
  98. package/dist/utilities/assert.d.ts.map +1 -0
  99. package/dist/utilities/assert.js +10 -0
  100. package/dist/utilities/assert.js.map +1 -0
  101. package/dist/utilities/deepMerge.d.ts +2 -0
  102. package/dist/utilities/deepMerge.d.ts.map +1 -0
  103. package/dist/utilities/deepMerge.js +34 -0
  104. package/dist/utilities/deepMerge.js.map +1 -0
  105. package/dist/utilities/graphql.d.ts +5 -0
  106. package/dist/utilities/graphql.d.ts.map +1 -0
  107. package/dist/utilities/graphql.js +28 -0
  108. package/dist/utilities/graphql.js.map +1 -0
  109. package/dist/utilities/opentelemetry.d.ts +10 -0
  110. package/dist/utilities/opentelemetry.d.ts.map +1 -0
  111. package/dist/utilities/opentelemetry.js +19 -0
  112. package/dist/utilities/opentelemetry.js.map +1 -0
  113. package/dist/utilities/predicates.d.ts +2 -0
  114. package/dist/utilities/predicates.d.ts.map +1 -0
  115. package/dist/utilities/predicates.js +11 -0
  116. package/dist/utilities/predicates.js.map +1 -0
  117. package/package.json +4 -4
  118. package/src/__generated__/graphqlTypes.ts +33 -2
  119. package/src/__mocks__/tsconfig.json +0 -7
  120. package/src/__tests__/.gitkeep +0 -0
  121. package/src/__tests__/CucumberREADME.md +0 -96
  122. package/src/__tests__/build-query-plan.feature +0 -1471
  123. package/src/__tests__/buildQueryPlan.test.ts +0 -1225
  124. package/src/__tests__/executeQueryPlan.conditions.test.ts +0 -1488
  125. package/src/__tests__/executeQueryPlan.introspection.test.ts +0 -140
  126. package/src/__tests__/executeQueryPlan.test.ts +0 -6140
  127. package/src/__tests__/execution-utils.ts +0 -124
  128. package/src/__tests__/gateway/__snapshots__/opentelemetry.test.ts.snap +0 -195
  129. package/src/__tests__/gateway/buildService.test.ts +0 -249
  130. package/src/__tests__/gateway/endToEnd.test.ts +0 -486
  131. package/src/__tests__/gateway/executor.test.ts +0 -96
  132. package/src/__tests__/gateway/extensions.test.ts +0 -37
  133. package/src/__tests__/gateway/lifecycle-hooks.test.ts +0 -239
  134. package/src/__tests__/gateway/opentelemetry.test.ts +0 -123
  135. package/src/__tests__/gateway/queryPlanCache.test.ts +0 -231
  136. package/src/__tests__/gateway/queryPlannerConfig.test.ts +0 -101
  137. package/src/__tests__/gateway/reporting.test.ts +0 -616
  138. package/src/__tests__/gateway/supergraphSdl.test.ts +0 -396
  139. package/src/__tests__/gateway/testUtils.ts +0 -89
  140. package/src/__tests__/integration/abstract-types.test.ts +0 -1861
  141. package/src/__tests__/integration/aliases.test.ts +0 -180
  142. package/src/__tests__/integration/boolean.test.ts +0 -279
  143. package/src/__tests__/integration/complex-key.test.ts +0 -197
  144. package/src/__tests__/integration/configuration.test.ts +0 -404
  145. package/src/__tests__/integration/custom-directives.test.ts +0 -174
  146. package/src/__tests__/integration/execution-style.test.ts +0 -35
  147. package/src/__tests__/integration/fragments.test.ts +0 -237
  148. package/src/__tests__/integration/list-key.test.ts +0 -128
  149. package/src/__tests__/integration/logger.test.ts +0 -122
  150. package/src/__tests__/integration/managed.test.ts +0 -319
  151. package/src/__tests__/integration/merge-arrays.test.ts +0 -34
  152. package/src/__tests__/integration/multiple-key.test.ts +0 -327
  153. package/src/__tests__/integration/mutations.test.ts +0 -287
  154. package/src/__tests__/integration/networkRequests.test.ts +0 -542
  155. package/src/__tests__/integration/nockMocks.ts +0 -157
  156. package/src/__tests__/integration/provides.test.ts +0 -77
  157. package/src/__tests__/integration/requires.test.ts +0 -359
  158. package/src/__tests__/integration/scope.test.ts +0 -557
  159. package/src/__tests__/integration/single-service.test.ts +0 -119
  160. package/src/__tests__/integration/unions.test.ts +0 -79
  161. package/src/__tests__/integration/value-types.test.ts +0 -382
  162. package/src/__tests__/integration/variables.test.ts +0 -120
  163. package/src/__tests__/nockAssertions.ts +0 -20
  164. package/src/__tests__/queryPlanCucumber.test.ts +0 -55
  165. package/src/__tests__/resultShaping.test.ts +0 -605
  166. package/src/__tests__/testSetup.ts +0 -1
  167. package/src/__tests__/tsconfig.json +0 -8
  168. package/src/core/__tests__/core.test.ts +0 -412
  169. package/src/datasources/__tests__/LocalGraphQLDataSource.test.ts +0 -51
  170. package/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +0 -574
  171. package/src/schema-helper/__tests__/addExtensions.test.ts +0 -70
  172. package/src/supergraphManagers/IntrospectAndCompose/__tests__/IntrospectAndCompose.test.ts +0 -364
  173. package/src/supergraphManagers/IntrospectAndCompose/__tests__/loadServicesFromRemoteEndpoint.test.ts +0 -40
  174. package/src/supergraphManagers/UplinkSupergraphManager/__tests__/UplinkSupergraphManager.test.ts +0 -65
  175. package/src/supergraphManagers/UplinkSupergraphManager/__tests__/loadSupergraphSdlFromStorage.test.ts +0 -511
  176. package/src/utilities/__tests__/deepMerge.test.ts +0 -77
@@ -1,77 +0,0 @@
1
- import { execute, overrideResolversInService } from '../execution-utils';
2
- import { fixtures } from 'apollo-federation-integration-testsuite';
3
-
4
- it('does not have to go to another service when field is given', async () => {
5
- const query = `#graphql
6
- query GetReviewers {
7
- topReviews {
8
- author {
9
- username
10
- }
11
- }
12
- }
13
- `;
14
-
15
- const { data, queryPlan } = await execute( {
16
- query,
17
- });
18
-
19
- expect(data).toEqual({
20
- topReviews: [
21
- { author: { username: '@ada' } },
22
- { author: { username: '@ada' } },
23
- { author: { username: '@complete' } },
24
- { author: { username: '@complete' } },
25
- { author: { username: '@complete' } },
26
- ],
27
- });
28
-
29
- expect(queryPlan).not.toCallService('accounts');
30
- expect(queryPlan).toCallService('reviews');
31
- });
32
-
33
- it('does not load fields provided even when going to other service', async () => {
34
- const [accounts, ...restFixtures] = fixtures;
35
-
36
- const username = jest.fn();
37
- const localAccounts = overrideResolversInService(accounts, {
38
- User: {
39
- username,
40
- },
41
- });
42
-
43
- const query = `#graphql
44
- query GetReviewers {
45
- topReviews {
46
- author {
47
- username
48
- name {
49
- first
50
- last
51
- }
52
- }
53
- }
54
- }
55
- `;
56
-
57
- const { data, queryPlan } = await execute(
58
- {
59
- query,
60
- },
61
- [localAccounts, ...restFixtures],
62
- );
63
-
64
- expect(data).toEqual({
65
- topReviews: [
66
- { author: { username: '@ada', name: { first: 'Ada', last: 'Lovelace' } } },
67
- { author: { username: '@ada', name: { first: 'Ada', last: 'Lovelace' } } },
68
- { author: { username: '@complete', name: { first: 'Alan', last: 'Turing' } } },
69
- { author: { username: '@complete', name: { first: 'Alan', last: 'Turing' } } },
70
- { author: { username: '@complete', name: { first: 'Alan', last: 'Turing' } } },
71
- ],
72
- });
73
-
74
- expect(username).not.toHaveBeenCalled();
75
- expect(queryPlan).toCallService('accounts');
76
- expect(queryPlan).toCallService('reviews');
77
- });
@@ -1,359 +0,0 @@
1
- import gql from 'graphql-tag';
2
- import { execute } from '../execution-utils';
3
- import { astSerializer, queryPlanSerializer } from 'apollo-federation-integration-testsuite';
4
-
5
- expect.addSnapshotSerializer(astSerializer);
6
- expect.addSnapshotSerializer(queryPlanSerializer);
7
- it('supports passing additional fields defined by a requires', async () => {
8
- const query = `#graphql
9
- query GetReviwedBookNames {
10
- me {
11
- reviews {
12
- product {
13
- ... on Book {
14
- name
15
- }
16
- }
17
- }
18
- }
19
- }
20
- `;
21
-
22
- const { data, queryPlan } = await execute({
23
- query,
24
- });
25
-
26
- expect(data).toEqual({
27
- me: {
28
- reviews: [
29
- { product: {} },
30
- { product: {} },
31
- {
32
- product: {
33
- name: 'Design Patterns (1995)',
34
- },
35
- },
36
- ],
37
- },
38
- });
39
-
40
- expect(queryPlan).toCallService('accounts');
41
- expect(queryPlan).toCallService('reviews');
42
- expect(queryPlan).toCallService('product');
43
- expect(queryPlan).toCallService('books');
44
- });
45
-
46
- const serviceA = {
47
- name: 'a',
48
- typeDefs: gql`
49
- type Query {
50
- user: User
51
- }
52
-
53
- type User @key(fields: "id") {
54
- id: ID!
55
- preferences: Preferences
56
- }
57
-
58
- type Preferences {
59
- favorites: Things
60
- }
61
-
62
- type Things {
63
- color: String
64
- animal: String
65
- }
66
- `,
67
- resolvers: {
68
- Query: {
69
- user() {
70
- return {
71
- id: '1',
72
- preferences: {
73
- favorites: { color: 'limegreen', animal: 'platypus' },
74
- },
75
- };
76
- },
77
- },
78
- },
79
- };
80
-
81
- const serviceB = {
82
- name: 'b',
83
- typeDefs: gql`
84
- extend type User @key(fields: "id") {
85
- id: ID! @external
86
- preferences: Preferences @external
87
- favoriteColor: String
88
- @requires(fields: "preferences { favorites { color } }")
89
- favoriteAnimal: String
90
- @requires(fields: "preferences { favorites { animal } }")
91
- }
92
-
93
- extend type Preferences {
94
- favorites: Things @external
95
- }
96
-
97
- extend type Things {
98
- color: String @external
99
- animal: String @external
100
- }
101
- `,
102
- resolvers: {
103
- User: {
104
- favoriteColor(user: any) {
105
- return user.preferences.favorites.color;
106
- },
107
- favoriteAnimal(user: any) {
108
- return user.preferences.favorites.animal;
109
- },
110
- },
111
- },
112
- };
113
-
114
- it('collapses nested requires', async () => {
115
- const query = `#graphql
116
- query UserFavorites {
117
- user {
118
- favoriteColor
119
- favoriteAnimal
120
- }
121
- }
122
- `;
123
-
124
- const { data, errors, queryPlan } = await execute(
125
- {
126
- query,
127
- },
128
- [serviceA, serviceB],
129
- );
130
-
131
- expect(errors).toEqual(undefined);
132
-
133
- expect(queryPlan).toMatchInlineSnapshot(`
134
- QueryPlan {
135
- Sequence {
136
- Fetch(service: "a") {
137
- {
138
- user {
139
- __typename
140
- id
141
- preferences {
142
- favorites {
143
- animal
144
- color
145
- }
146
- }
147
- }
148
- }
149
- },
150
- Flatten(path: "user") {
151
- Fetch(service: "b") {
152
- {
153
- ... on User {
154
- __typename
155
- id
156
- preferences {
157
- favorites {
158
- animal
159
- color
160
- }
161
- }
162
- }
163
- } =>
164
- {
165
- ... on User {
166
- favoriteColor
167
- favoriteAnimal
168
- }
169
- }
170
- },
171
- },
172
- },
173
- }
174
- `);
175
-
176
- expect(data).toEqual({
177
- user: {
178
- favoriteAnimal: 'platypus',
179
- favoriteColor: 'limegreen',
180
- },
181
- });
182
-
183
- expect(queryPlan).toCallService('a');
184
- expect(queryPlan).toCallService('b');
185
- });
186
-
187
- it('collapses nested requires with user-defined fragments', async () => {
188
- const query = `#graphql
189
- query UserFavorites {
190
- user {
191
- favoriteAnimal
192
- ...favoriteColor
193
- }
194
- }
195
-
196
- fragment favoriteColor on User {
197
- preferences {
198
- favorites {
199
- color
200
- }
201
- }
202
- }
203
- `;
204
-
205
- const { data, errors, queryPlan } = await execute(
206
- {
207
- query,
208
- },
209
- [serviceA, serviceB],
210
- );
211
-
212
- expect(errors).toEqual(undefined);
213
-
214
- expect(queryPlan).toMatchInlineSnapshot(`
215
- QueryPlan {
216
- Sequence {
217
- Fetch(service: "a") {
218
- {
219
- user {
220
- __typename
221
- preferences {
222
- favorites {
223
- color
224
- animal
225
- }
226
- }
227
- id
228
- }
229
- }
230
- },
231
- Flatten(path: "user") {
232
- Fetch(service: "b") {
233
- {
234
- ... on User {
235
- __typename
236
- id
237
- preferences {
238
- favorites {
239
- animal
240
- }
241
- }
242
- }
243
- } =>
244
- {
245
- ... on User {
246
- favoriteAnimal
247
- }
248
- }
249
- },
250
- },
251
- },
252
- }
253
- `);
254
-
255
- expect(data).toEqual({
256
- user: {
257
- favoriteAnimal: 'platypus',
258
- preferences: {
259
- favorites: {
260
- color: 'limegreen',
261
- },
262
- },
263
- },
264
- });
265
-
266
- expect(queryPlan).toCallService('a');
267
- expect(queryPlan).toCallService('b');
268
- });
269
-
270
- it('passes null values correctly', async () => {
271
- const serviceA = {
272
- name: 'a',
273
- typeDefs: gql`
274
- type Query {
275
- user: User
276
- }
277
-
278
- type User @key(fields: "id") {
279
- id: ID!
280
- favorite: Color
281
- dislikes: [Color]
282
- }
283
-
284
- type Color {
285
- name: String!
286
- }
287
- `,
288
- resolvers: {
289
- Query: {
290
- user() {
291
- return {
292
- id: '1',
293
- favorite: null,
294
- dislikes: [null],
295
- };
296
- },
297
- },
298
- },
299
- };
300
-
301
- const serviceB = {
302
- name: 'b',
303
- typeDefs: gql`
304
- extend type User @key(fields: "id") {
305
- id: ID! @external
306
- favorite: Color @external
307
- dislikes: [Color] @external
308
- favoriteColor: String @requires(fields: "favorite { name }")
309
- dislikedColors: String @requires(fields: "dislikes { name }")
310
- }
311
-
312
- extend type Color {
313
- name: String! @external
314
- }
315
- `,
316
- resolvers: {
317
- User: {
318
- favoriteColor(user: any) {
319
- if (user.favorite !== null) {
320
- throw Error(
321
- 'Favorite color should be null. Instead, got: ' +
322
- JSON.stringify(user.favorite),
323
- );
324
- }
325
- return 'unknown';
326
- },
327
- dislikedColors(user: any) {
328
- const color = user.dislikes[0];
329
- if (color !== null) {
330
- throw Error(
331
- 'Disliked colors should be null. Instead, got: ' +
332
- JSON.stringify(user.dislikes),
333
- );
334
- }
335
- return 'unknown';
336
- },
337
- },
338
- },
339
- };
340
-
341
- const query = `#graphql
342
- query UserFavorites {
343
- user {
344
- favoriteColor
345
- dislikedColors
346
- }
347
- }
348
- `;
349
-
350
- const { data, errors } = await execute({ query }, [serviceA, serviceB]);
351
-
352
- expect(errors).toEqual(undefined);
353
- expect(data).toEqual({
354
- user: {
355
- favoriteColor: 'unknown',
356
- dislikedColors: 'unknown',
357
- },
358
- });
359
- });