@apollo/gateway 2.4.5 → 2.4.7

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 (67) hide show
  1. package/dist/__generated__/graphqlTypes.d.ts +19 -1
  2. package/dist/__generated__/graphqlTypes.d.ts.map +1 -1
  3. package/dist/__generated__/graphqlTypes.js +1 -0
  4. package/dist/__generated__/graphqlTypes.js.map +1 -1
  5. package/dist/executeQueryPlan.js +1 -1
  6. package/dist/executeQueryPlan.js.map +1 -1
  7. package/package.json +4 -4
  8. package/src/__generated__/graphqlTypes.ts +33 -2
  9. package/src/executeQueryPlan.ts +1 -1
  10. package/src/__mocks__/tsconfig.json +0 -7
  11. package/src/__tests__/.gitkeep +0 -0
  12. package/src/__tests__/CucumberREADME.md +0 -96
  13. package/src/__tests__/build-query-plan.feature +0 -1471
  14. package/src/__tests__/buildQueryPlan.test.ts +0 -1225
  15. package/src/__tests__/executeQueryPlan.conditions.test.ts +0 -1488
  16. package/src/__tests__/executeQueryPlan.introspection.test.ts +0 -140
  17. package/src/__tests__/executeQueryPlan.test.ts +0 -6140
  18. package/src/__tests__/execution-utils.ts +0 -124
  19. package/src/__tests__/gateway/__snapshots__/opentelemetry.test.ts.snap +0 -195
  20. package/src/__tests__/gateway/buildService.test.ts +0 -249
  21. package/src/__tests__/gateway/endToEnd.test.ts +0 -486
  22. package/src/__tests__/gateway/executor.test.ts +0 -96
  23. package/src/__tests__/gateway/extensions.test.ts +0 -37
  24. package/src/__tests__/gateway/lifecycle-hooks.test.ts +0 -239
  25. package/src/__tests__/gateway/opentelemetry.test.ts +0 -123
  26. package/src/__tests__/gateway/queryPlanCache.test.ts +0 -231
  27. package/src/__tests__/gateway/queryPlannerConfig.test.ts +0 -101
  28. package/src/__tests__/gateway/reporting.test.ts +0 -616
  29. package/src/__tests__/gateway/supergraphSdl.test.ts +0 -396
  30. package/src/__tests__/gateway/testUtils.ts +0 -89
  31. package/src/__tests__/integration/abstract-types.test.ts +0 -1861
  32. package/src/__tests__/integration/aliases.test.ts +0 -180
  33. package/src/__tests__/integration/boolean.test.ts +0 -279
  34. package/src/__tests__/integration/complex-key.test.ts +0 -197
  35. package/src/__tests__/integration/configuration.test.ts +0 -404
  36. package/src/__tests__/integration/custom-directives.test.ts +0 -174
  37. package/src/__tests__/integration/execution-style.test.ts +0 -35
  38. package/src/__tests__/integration/fragments.test.ts +0 -237
  39. package/src/__tests__/integration/list-key.test.ts +0 -128
  40. package/src/__tests__/integration/logger.test.ts +0 -122
  41. package/src/__tests__/integration/managed.test.ts +0 -319
  42. package/src/__tests__/integration/merge-arrays.test.ts +0 -34
  43. package/src/__tests__/integration/multiple-key.test.ts +0 -327
  44. package/src/__tests__/integration/mutations.test.ts +0 -287
  45. package/src/__tests__/integration/networkRequests.test.ts +0 -542
  46. package/src/__tests__/integration/nockMocks.ts +0 -157
  47. package/src/__tests__/integration/provides.test.ts +0 -77
  48. package/src/__tests__/integration/requires.test.ts +0 -359
  49. package/src/__tests__/integration/scope.test.ts +0 -557
  50. package/src/__tests__/integration/single-service.test.ts +0 -119
  51. package/src/__tests__/integration/unions.test.ts +0 -79
  52. package/src/__tests__/integration/value-types.test.ts +0 -382
  53. package/src/__tests__/integration/variables.test.ts +0 -120
  54. package/src/__tests__/nockAssertions.ts +0 -20
  55. package/src/__tests__/queryPlanCucumber.test.ts +0 -55
  56. package/src/__tests__/resultShaping.test.ts +0 -605
  57. package/src/__tests__/testSetup.ts +0 -1
  58. package/src/__tests__/tsconfig.json +0 -8
  59. package/src/core/__tests__/core.test.ts +0 -412
  60. package/src/datasources/__tests__/LocalGraphQLDataSource.test.ts +0 -51
  61. package/src/datasources/__tests__/RemoteGraphQLDataSource.test.ts +0 -574
  62. package/src/schema-helper/__tests__/addExtensions.test.ts +0 -70
  63. package/src/supergraphManagers/IntrospectAndCompose/__tests__/IntrospectAndCompose.test.ts +0 -364
  64. package/src/supergraphManagers/IntrospectAndCompose/__tests__/loadServicesFromRemoteEndpoint.test.ts +0 -40
  65. package/src/supergraphManagers/UplinkSupergraphManager/__tests__/UplinkSupergraphManager.test.ts +0 -65
  66. package/src/supergraphManagers/UplinkSupergraphManager/__tests__/loadSupergraphSdlFromStorage.test.ts +0 -511
  67. 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
- });