@apollo/federation-internals 2.0.0-alpha.2 → 2.0.0-alpha.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.
Files changed (42) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/dist/debug.d.ts.map +1 -1
  3. package/dist/debug.js +2 -18
  4. package/dist/debug.js.map +1 -1
  5. package/dist/definitions.d.ts +11 -0
  6. package/dist/definitions.d.ts.map +1 -1
  7. package/dist/definitions.js +54 -0
  8. package/dist/definitions.js.map +1 -1
  9. package/dist/error.d.ts +87 -3
  10. package/dist/error.d.ts.map +1 -1
  11. package/dist/error.js +143 -5
  12. package/dist/error.js.map +1 -1
  13. package/dist/extractSubgraphsFromSupergraph.d.ts.map +1 -1
  14. package/dist/extractSubgraphsFromSupergraph.js +40 -3
  15. package/dist/extractSubgraphsFromSupergraph.js.map +1 -1
  16. package/dist/federation.d.ts +4 -1
  17. package/dist/federation.d.ts.map +1 -1
  18. package/dist/federation.js +192 -53
  19. package/dist/federation.js.map +1 -1
  20. package/dist/genErrorCodeDoc.d.ts +2 -0
  21. package/dist/genErrorCodeDoc.d.ts.map +1 -0
  22. package/dist/genErrorCodeDoc.js +55 -0
  23. package/dist/genErrorCodeDoc.js.map +1 -0
  24. package/dist/tagSpec.js +3 -1
  25. package/dist/tagSpec.js.map +1 -1
  26. package/dist/utils.d.ts +1 -0
  27. package/dist/utils.d.ts.map +1 -1
  28. package/dist/utils.js +19 -1
  29. package/dist/utils.js.map +1 -1
  30. package/package.json +3 -3
  31. package/src/__tests__/extractSubgraphsFromSupergraph.test.ts +432 -0
  32. package/src/__tests__/subgraphValidation.test.ts +452 -0
  33. package/src/debug.ts +2 -19
  34. package/src/definitions.ts +98 -0
  35. package/src/error.ts +334 -7
  36. package/src/extractSubgraphsFromSupergraph.ts +49 -4
  37. package/src/federation.ts +229 -85
  38. package/src/genErrorCodeDoc.ts +69 -0
  39. package/src/tagSpec.ts +4 -4
  40. package/src/utils.ts +27 -0
  41. package/tsconfig.test.tsbuildinfo +1 -1
  42. package/tsconfig.tsbuildinfo +1 -1
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/federation-internals",
3
- "version": "2.0.0-alpha.2",
3
+ "version": "2.0.0-alpha.3",
4
4
  "description": "Apollo Federation internal utilities",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -34,7 +34,7 @@
34
34
  "graphql": "^15.7.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@types/js-levenshtein": "1.1.0"
37
+ "@types/js-levenshtein": "1.1.1"
38
38
  },
39
- "gitHead": "9265ba09ec5620b931861a44603d7d5f7d4688f2"
39
+ "gitHead": "a8e0485664fafc7d9e3537f77c8907832f48d25b"
40
40
  }
@@ -0,0 +1,432 @@
1
+ import { buildSupergraphSchema, extractSubgraphsFromSupergraph } from "..";
2
+
3
+
4
+ test('handles types having no fields referenced by other objects in a subgraph correctly', () => {
5
+ /*
6
+ * The following supergraph has been generated on version-0.x from:
7
+ * - ServiceA:
8
+ * type Query {
9
+ * q: A
10
+ * }
11
+ *
12
+ * type A {
13
+ * a: B
14
+ * }
15
+ *
16
+ * type B {
17
+ * b: C @provides(fields: "c")
18
+ * }
19
+ *
20
+ * type C {
21
+ * c: String
22
+ * }
23
+ * - ServiceB:
24
+ * type C {
25
+ * c: String
26
+ * }
27
+ * - ServiceC:
28
+ * type D {
29
+ * d: String
30
+ * }
31
+ *
32
+ * The general idea being that all types are "value types" so ends with no 'join__type' in the supergraph (so
33
+ * `extractSubgraphsFromSupergraph` will have to initially assume that all types are in all subgraphs), but
34
+ * due to the `@provides`, `B.b` has a `join__field`, which makes it be only in "ServiceA". As as result,
35
+ * type `B` will end up empty in both "ServiceB" and "ServiceC" and will need to be removed, which has to
36
+ * trickle to removing type `A` too (since it's only field mentions `B`). This later part wasn't always done
37
+ * correctly, resulting in errors being throws and it is what this test checks.
38
+ */
39
+ const supergraph = `
40
+ schema
41
+ @core(feature: "https://specs.apollo.dev/core/v0.2"),
42
+ @core(feature: "https://specs.apollo.dev/join/v0.1", for: EXECUTION)
43
+ {
44
+ query: Query
45
+ }
46
+
47
+ directive @core(as: String, feature: String!, for: core__Purpose) repeatable on SCHEMA
48
+
49
+ directive @join__field(graph: join__Graph, provides: join__FieldSet, requires: join__FieldSet) on FIELD_DEFINITION
50
+
51
+ directive @join__graph(name: String!, url: String!) on ENUM_VALUE
52
+
53
+ directive @join__owner(graph: join__Graph!) on INTERFACE | OBJECT
54
+
55
+ directive @join__type(graph: join__Graph!, key: join__FieldSet) repeatable on INTERFACE | OBJECT
56
+
57
+ type A {
58
+ a: B
59
+ }
60
+
61
+ type B {
62
+ b: C @join__field(graph: SERVICEA, provides: \"c\")
63
+ }
64
+
65
+ type C {
66
+ c: String
67
+ }
68
+
69
+ type D {
70
+ d: String
71
+ }
72
+
73
+ type Query {
74
+ q: A
75
+ }
76
+
77
+ enum core__Purpose {
78
+ """
79
+ \`EXECUTION\` features provide metadata necessary to for operation execution.
80
+ """
81
+ EXECUTION
82
+
83
+ """
84
+ \`SECURITY\` features provide metadata necessary to securely resolve fields.
85
+ """
86
+ SECURITY
87
+ }
88
+
89
+ scalar join__FieldSet
90
+
91
+ enum join__Graph {
92
+ SERVICEA @join__graph(name: "serviceA" url: "")
93
+ SERVICEB @join__graph(name: "serviceB" url: "")
94
+ SERVICEC @join__graph(name: "serviceC" url: "")
95
+ }
96
+ `;
97
+
98
+ const schema = buildSupergraphSchema(supergraph)[0];
99
+ const subgraphs = extractSubgraphsFromSupergraph(schema);
100
+ expect(subgraphs.size()).toBe(3);
101
+
102
+ const [a, b, c] = subgraphs.values().map((s) => s.schema);
103
+ expect(a.type('A')).toBeDefined();
104
+ expect(a.type('B')).toBeDefined();
105
+
106
+ expect(b.type('A')).toBeUndefined();
107
+ expect(b.type('B')).toBeUndefined();
108
+
109
+ expect(c.type('A')).toBeUndefined();
110
+ expect(c.type('B')).toBeUndefined();
111
+ })
112
+
113
+ test('handles types having no fields referenced by other interfaces in a subgraph correctly', () => {
114
+ /*
115
+ *
116
+ * The following supergraph has been generated on version-0.x from:
117
+ * - ServiceA:
118
+ * type Query {
119
+ * q: A
120
+ * }
121
+ *
122
+ * interface A {
123
+ * a: B
124
+ * }
125
+ *
126
+ * type B {
127
+ * b: C @provides(fields: "c")
128
+ * }
129
+ *
130
+ * type C {
131
+ * c: String
132
+ * }
133
+ * - ServiceB:
134
+ * type C {
135
+ * c: String
136
+ * }
137
+ * - ServiceC:
138
+ * type D {
139
+ * d: String
140
+ * }
141
+ *
142
+ * This tests is almost identical to the 'handles types having no fields referenced by other objects in a subgraph correctly'
143
+ * one, except that the reference to the type being removed is in an interface, to make double-sure this case is
144
+ * handled as well.
145
+ */
146
+ const supergraph = `
147
+ schema
148
+ @core(feature: "https://specs.apollo.dev/core/v0.2"),
149
+ @core(feature: "https://specs.apollo.dev/join/v0.1", for: EXECUTION)
150
+ {
151
+ query: Query
152
+ }
153
+
154
+ directive @core(as: String, feature: String!, for: core__Purpose) repeatable on SCHEMA
155
+
156
+ directive @join__field(graph: join__Graph, provides: join__FieldSet, requires: join__FieldSet) on FIELD_DEFINITION
157
+
158
+ directive @join__graph(name: String!, url: String!) on ENUM_VALUE
159
+
160
+ directive @join__owner(graph: join__Graph!) on INTERFACE | OBJECT
161
+
162
+ directive @join__type(graph: join__Graph!, key: join__FieldSet) repeatable on INTERFACE | OBJECT
163
+
164
+ interface A {
165
+ a: B
166
+ }
167
+
168
+ type B {
169
+ b: C @join__field(graph: SERVICEA, provides: "c")
170
+ }
171
+
172
+ type C {
173
+ c: String
174
+ }
175
+
176
+ type D {
177
+ d: String
178
+ }
179
+
180
+ type Query {
181
+ q: A
182
+ }
183
+
184
+ enum core__Purpose {
185
+ """
186
+ \`EXECUTION\` features provide metadata necessary to for operation execution.
187
+ """
188
+ EXECUTION
189
+
190
+ """
191
+ \`SECURITY\` features provide metadata necessary to securely resolve fields.
192
+ """
193
+ SECURITY
194
+ }
195
+
196
+ scalar join__FieldSet
197
+
198
+ enum join__Graph {
199
+ SERVICEA @join__graph(name: "serviceA" url: "")
200
+ SERVICEB @join__graph(name: "serviceB" url: "")
201
+ SERVICEC @join__graph(name: "serviceC" url: "")
202
+ }
203
+ `;
204
+
205
+ const schema = buildSupergraphSchema(supergraph)[0];
206
+ const subgraphs = extractSubgraphsFromSupergraph(schema);
207
+ expect(subgraphs.size()).toBe(3);
208
+
209
+ const [a, b, c] = subgraphs.values().map((s) => s.schema);
210
+ expect(a.type('A')).toBeDefined();
211
+ expect(a.type('B')).toBeDefined();
212
+
213
+ expect(b.type('A')).toBeUndefined();
214
+ expect(b.type('B')).toBeUndefined();
215
+
216
+ expect(c.type('A')).toBeUndefined();
217
+ expect(c.type('B')).toBeUndefined();
218
+ })
219
+
220
+ test('handles types having no fields referenced by other unions in a subgraph correctly', () => {
221
+ /*
222
+ *
223
+ * The following supergraph has been generated on version-0.x from:
224
+ * - ServiceA:
225
+ * type Query {
226
+ * q: A
227
+ * }
228
+ *
229
+ * union A = B | C
230
+ *
231
+ * type B {
232
+ * b: D @provides(fields: "d")
233
+ * }
234
+ *
235
+ * type C {
236
+ * c: D @provides(fields: "d")
237
+ * }
238
+ *
239
+ * type D {
240
+ * d: String
241
+ * }
242
+ * - ServiceB:
243
+ * type D {
244
+ * d: String
245
+ * }
246
+ *
247
+ * This tests is similar identical to 'handles types having no fields referenced by other objects in a subgraph correctly'
248
+ * but the reference to the type being removed is a union, one that should be fully removed.
249
+ */
250
+ const supergraph = `
251
+ schema
252
+ @core(feature: "https://specs.apollo.dev/core/v0.2"),
253
+ @core(feature: "https://specs.apollo.dev/join/v0.1", for: EXECUTION)
254
+ {
255
+ query: Query
256
+ }
257
+
258
+ directive @core(as: String, feature: String!, for: core__Purpose) repeatable on SCHEMA
259
+
260
+ directive @join__field(graph: join__Graph, provides: join__FieldSet, requires: join__FieldSet) on FIELD_DEFINITION
261
+
262
+ directive @join__graph(name: String!, url: String!) on ENUM_VALUE
263
+
264
+ directive @join__owner(graph: join__Graph!) on INTERFACE | OBJECT
265
+
266
+ directive @join__type(graph: join__Graph!, key: join__FieldSet) repeatable on INTERFACE | OBJECT
267
+
268
+ union A = B | C
269
+
270
+ type B {
271
+ b: D @join__field(graph: SERVICEA, provides: "d")
272
+ }
273
+
274
+ type C {
275
+ c: D @join__field(graph: SERVICEA, provides: "d")
276
+ }
277
+
278
+ type D {
279
+ d: String
280
+ }
281
+
282
+ type Query {
283
+ q: A
284
+ }
285
+
286
+ enum core__Purpose {
287
+ """
288
+ \`EXECUTION\` features provide metadata necessary to for operation execution.
289
+ """
290
+ EXECUTION
291
+
292
+ """
293
+ \`SECURITY\` features provide metadata necessary to securely resolve fields.
294
+ """
295
+ SECURITY
296
+ }
297
+
298
+ scalar join__FieldSet
299
+
300
+ enum join__Graph {
301
+ SERVICEA @join__graph(name: "serviceA" url: "")
302
+ SERVICEB @join__graph(name: "serviceB" url: "")
303
+ }
304
+ `;
305
+
306
+ const schema = buildSupergraphSchema(supergraph)[0];
307
+ const subgraphs = extractSubgraphsFromSupergraph(schema);
308
+ expect(subgraphs.size()).toBe(2);
309
+
310
+ const [a, b] = subgraphs.values().map((s) => s.schema);
311
+ expect(a.type('A')).toBeDefined();
312
+ expect(a.type('B')).toBeDefined();
313
+ expect(a.type('C')).toBeDefined();
314
+ expect(a.type('D')).toBeDefined();
315
+
316
+ expect(b.type('A')).toBeUndefined();
317
+ expect(b.type('B')).toBeUndefined();
318
+ expect(b.type('C')).toBeUndefined();
319
+ expect(a.type('D')).toBeDefined();
320
+ })
321
+
322
+ test('handles types having only some of their fields removed in a subgraph correctly', () => {
323
+ /*
324
+ * The following supergraph has been generated on version-0.x from:
325
+ * - ServiceA:
326
+ * type Query {
327
+ * q: A
328
+ * }
329
+ *
330
+ * type A {
331
+ * a: B
332
+ * }
333
+ *
334
+ * type B {
335
+ * b: C @provides(fields: "c")
336
+ * c: Int
337
+ * }
338
+ *
339
+ * type C {
340
+ * c: String
341
+ * }
342
+ * - ServiceB:
343
+ * type C {
344
+ * c: String
345
+ * }
346
+ * - ServiceC:
347
+ * type D {
348
+ * d: String
349
+ * }
350
+ *
351
+ * This tests is similar identical to 'handles types having no fields referenced by other objects in a subgraph correctly'
352
+ * but where no all of B type fields are "removed" and so the type should be preserved. So it's a "negative" version of
353
+ * that prior test of sorts.
354
+ */
355
+ const supergraph = `
356
+ schema
357
+ @core(feature: "https://specs.apollo.dev/core/v0.2"),
358
+ @core(feature: "https://specs.apollo.dev/join/v0.1", for: EXECUTION)
359
+ {
360
+ query: Query
361
+ }
362
+
363
+ directive @core(as: String, feature: String!, for: core__Purpose) repeatable on SCHEMA
364
+
365
+ directive @join__field(graph: join__Graph, provides: join__FieldSet, requires: join__FieldSet) on FIELD_DEFINITION
366
+
367
+ directive @join__graph(name: String!, url: String!) on ENUM_VALUE
368
+
369
+ directive @join__owner(graph: join__Graph!) on INTERFACE | OBJECT
370
+
371
+ directive @join__type(graph: join__Graph!, key: join__FieldSet) repeatable on INTERFACE | OBJECT
372
+
373
+ type A {
374
+ a: B
375
+ }
376
+
377
+ type B {
378
+ b: C @join__field(graph: SERVICEA, provides: "c")
379
+ c: Int
380
+ }
381
+
382
+ type C {
383
+ c: String
384
+ }
385
+
386
+ type D {
387
+ d: String
388
+ }
389
+
390
+ type Query {
391
+ q: A
392
+ }
393
+
394
+ enum core__Purpose {
395
+ """
396
+ \`EXECUTION\` features provide metadata necessary to for operation execution.
397
+ """
398
+ EXECUTION
399
+
400
+ """
401
+ \`SECURITY\` features provide metadata necessary to securely resolve fields.
402
+ """
403
+ SECURITY
404
+ }
405
+
406
+ scalar join__FieldSet
407
+
408
+ enum join__Graph {
409
+ SERVICEA @join__graph(name: "serviceA" url: "")
410
+ SERVICEB @join__graph(name: "serviceB" url: "")
411
+ SERVICEC @join__graph(name: "serviceC" url: "")
412
+ }
413
+ `;
414
+
415
+ const schema = buildSupergraphSchema(supergraph)[0];
416
+ const subgraphs = extractSubgraphsFromSupergraph(schema);
417
+ expect(subgraphs.size()).toBe(3);
418
+
419
+ const [a, b, c] = subgraphs.values().map((s) => s.schema);
420
+ expect(a.type('A')).toBeDefined();
421
+ expect(a.type('B')).toBeDefined();
422
+
423
+ // Do note that the fact that A and B are extracted in subgraph 'c' and 'd' is, in a way, "wrong" since
424
+ // those subgraphs didn't had those type originally, but nothing in the supergraph allows to make that
425
+ // decision so this simply assert the actuall code behaviour.
426
+
427
+ expect(b.type('A')).toBeDefined();
428
+ expect(b.type('B')).toBeDefined();
429
+
430
+ expect(c.type('A')).toBeDefined();
431
+ expect(c.type('B')).toBeDefined();
432
+ })