@apollo/federation-internals 2.4.3 → 2.4.4

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 (123) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/package.json +1 -1
  3. package/dist/Subgraph.d.ts +0 -1
  4. package/dist/Subgraph.d.ts.map +0 -1
  5. package/dist/Subgraph.js +0 -2
  6. package/dist/Subgraph.js.map +0 -1
  7. package/dist/argumentCompositionStrategies.d.ts +0 -34
  8. package/dist/argumentCompositionStrategies.d.ts.map +0 -1
  9. package/dist/argumentCompositionStrategies.js +0 -35
  10. package/dist/argumentCompositionStrategies.js.map +0 -1
  11. package/dist/buildSchema.d.ts +0 -10
  12. package/dist/buildSchema.d.ts.map +0 -1
  13. package/dist/buildSchema.js +0 -362
  14. package/dist/buildSchema.js.map +0 -1
  15. package/dist/coreSpec.d.ts +0 -127
  16. package/dist/coreSpec.d.ts.map +0 -1
  17. package/dist/coreSpec.js +0 -590
  18. package/dist/coreSpec.js.map +0 -1
  19. package/dist/debug.d.ts +0 -15
  20. package/dist/debug.d.ts.map +0 -1
  21. package/dist/debug.js +0 -122
  22. package/dist/debug.js.map +0 -1
  23. package/dist/definitions.d.ts +0 -663
  24. package/dist/definitions.d.ts.map +0 -1
  25. package/dist/definitions.js +0 -2841
  26. package/dist/definitions.js.map +0 -1
  27. package/dist/directiveAndTypeSpecification.d.ts +0 -67
  28. package/dist/directiveAndTypeSpecification.d.ts.map +0 -1
  29. package/dist/directiveAndTypeSpecification.js +0 -271
  30. package/dist/directiveAndTypeSpecification.js.map +0 -1
  31. package/dist/error.d.ts +0 -128
  32. package/dist/error.d.ts.map +0 -1
  33. package/dist/error.js +0 -315
  34. package/dist/error.js.map +0 -1
  35. package/dist/extractSubgraphsFromSupergraph.d.ts +0 -8
  36. package/dist/extractSubgraphsFromSupergraph.d.ts.map +0 -1
  37. package/dist/extractSubgraphsFromSupergraph.js +0 -576
  38. package/dist/extractSubgraphsFromSupergraph.js.map +0 -1
  39. package/dist/federation.d.ts +0 -175
  40. package/dist/federation.d.ts.map +0 -1
  41. package/dist/federation.js +0 -1414
  42. package/dist/federation.js.map +0 -1
  43. package/dist/federationSpec.d.ts +0 -25
  44. package/dist/federationSpec.d.ts.map +0 -1
  45. package/dist/federationSpec.js +0 -125
  46. package/dist/federationSpec.js.map +0 -1
  47. package/dist/genErrorCodeDoc.d.ts +0 -2
  48. package/dist/genErrorCodeDoc.d.ts.map +0 -1
  49. package/dist/genErrorCodeDoc.js +0 -61
  50. package/dist/genErrorCodeDoc.js.map +0 -1
  51. package/dist/graphQLJSSchemaToAST.d.ts +0 -8
  52. package/dist/graphQLJSSchemaToAST.d.ts.map +0 -1
  53. package/dist/graphQLJSSchemaToAST.js +0 -96
  54. package/dist/graphQLJSSchemaToAST.js.map +0 -1
  55. package/dist/inaccessibleSpec.d.ts +0 -18
  56. package/dist/inaccessibleSpec.d.ts.map +0 -1
  57. package/dist/inaccessibleSpec.js +0 -655
  58. package/dist/inaccessibleSpec.js.map +0 -1
  59. package/dist/index.d.ts +0 -24
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/index.js +0 -42
  62. package/dist/index.js.map +0 -1
  63. package/dist/introspection.d.ts +0 -6
  64. package/dist/introspection.d.ts.map +0 -1
  65. package/dist/introspection.js +0 -96
  66. package/dist/introspection.js.map +0 -1
  67. package/dist/joinSpec.d.ts +0 -51
  68. package/dist/joinSpec.d.ts.map +0 -1
  69. package/dist/joinSpec.js +0 -160
  70. package/dist/joinSpec.js.map +0 -1
  71. package/dist/knownCoreFeatures.d.ts +0 -5
  72. package/dist/knownCoreFeatures.d.ts.map +0 -1
  73. package/dist/knownCoreFeatures.js +0 -20
  74. package/dist/knownCoreFeatures.js.map +0 -1
  75. package/dist/operations.d.ts +0 -415
  76. package/dist/operations.d.ts.map +0 -1
  77. package/dist/operations.js +0 -2040
  78. package/dist/operations.js.map +0 -1
  79. package/dist/precompute.d.ts +0 -3
  80. package/dist/precompute.d.ts.map +0 -1
  81. package/dist/precompute.js +0 -54
  82. package/dist/precompute.js.map +0 -1
  83. package/dist/print.d.ts +0 -28
  84. package/dist/print.d.ts.map +0 -1
  85. package/dist/print.js +0 -299
  86. package/dist/print.js.map +0 -1
  87. package/dist/schemaUpgrader.d.ts +0 -121
  88. package/dist/schemaUpgrader.d.ts.map +0 -1
  89. package/dist/schemaUpgrader.js +0 -570
  90. package/dist/schemaUpgrader.js.map +0 -1
  91. package/dist/suggestions.d.ts +0 -3
  92. package/dist/suggestions.d.ts.map +0 -1
  93. package/dist/suggestions.js +0 -44
  94. package/dist/suggestions.js.map +0 -1
  95. package/dist/supergraphs.d.ts +0 -10
  96. package/dist/supergraphs.d.ts.map +0 -1
  97. package/dist/supergraphs.js +0 -76
  98. package/dist/supergraphs.js.map +0 -1
  99. package/dist/tagSpec.d.ts +0 -19
  100. package/dist/tagSpec.d.ts.map +0 -1
  101. package/dist/tagSpec.js +0 -66
  102. package/dist/tagSpec.js.map +0 -1
  103. package/dist/types.d.ts +0 -9
  104. package/dist/types.d.ts.map +0 -1
  105. package/dist/types.js +0 -64
  106. package/dist/types.js.map +0 -1
  107. package/dist/utils.d.ts +0 -64
  108. package/dist/utils.d.ts.map +0 -1
  109. package/dist/utils.js +0 -326
  110. package/dist/utils.js.map +0 -1
  111. package/dist/validate.d.ts +0 -4
  112. package/dist/validate.d.ts.map +0 -1
  113. package/dist/validate.js +0 -239
  114. package/dist/validate.js.map +0 -1
  115. package/dist/validation/KnownTypeNamesInFederationRule.d.ts +0 -4
  116. package/dist/validation/KnownTypeNamesInFederationRule.d.ts.map +0 -1
  117. package/dist/validation/KnownTypeNamesInFederationRule.js +0 -41
  118. package/dist/validation/KnownTypeNamesInFederationRule.js.map +0 -1
  119. package/dist/values.d.ts +0 -23
  120. package/dist/values.d.ts.map +0 -1
  121. package/dist/values.js +0 -580
  122. package/dist/values.js.map +0 -1
  123. package/tsconfig.tsbuildinfo +0 -1
@@ -1,576 +0,0 @@
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.extractSubgraphsFromSupergraph = exports.extractSubgraphsNamesAndUrlsFromSupergraph = void 0;
7
- const definitions_1 = require("./definitions");
8
- const federation_1 = require("./federation");
9
- const coreSpec_1 = require("./coreSpec");
10
- const federation_2 = require("./federation");
11
- const utils_1 = require("./utils");
12
- const supergraphs_1 = require("./supergraphs");
13
- const buildSchema_1 = require("./buildSchema");
14
- const types_1 = require("./types");
15
- const print_1 = require("./print");
16
- const operations_1 = require("./operations");
17
- const fs_1 = __importDefault(require("fs"));
18
- const path_1 = __importDefault(require("path"));
19
- const utils_2 = require("./utils");
20
- const _1 = require(".");
21
- function filteredTypes(supergraph, joinSpec, coreSpec) {
22
- return supergraph.types().filter(t => !joinSpec.isSpecType(t) && !coreSpec.isSpecType(t));
23
- }
24
- function extractSubgraphsNamesAndUrlsFromSupergraph(supergraph) {
25
- const [_, joinSpec] = (0, supergraphs_1.validateSupergraph)(supergraph);
26
- const [subgraphs] = collectEmptySubgraphs(supergraph, joinSpec);
27
- return subgraphs.values().map(subgraph => { return { name: subgraph.name, url: subgraph.url }; });
28
- }
29
- exports.extractSubgraphsNamesAndUrlsFromSupergraph = extractSubgraphsNamesAndUrlsFromSupergraph;
30
- function collectEmptySubgraphs(supergraph, joinSpec) {
31
- const subgraphs = new federation_2.Subgraphs();
32
- const graphDirective = joinSpec.graphDirective(supergraph);
33
- const graphEnum = joinSpec.graphEnum(supergraph);
34
- const graphEnumNameToSubgraphName = new Map();
35
- for (const value of graphEnum.values) {
36
- const graphApplications = value.appliedDirectivesOf(graphDirective);
37
- if (!graphApplications.length) {
38
- throw new Error(`Value ${value} of join__Graph enum has no @join__graph directive`);
39
- }
40
- const info = graphApplications[0].arguments();
41
- const subgraph = new federation_2.Subgraph(info.name, info.url, (0, federation_1.newEmptyFederation2Schema)());
42
- subgraphs.add(subgraph);
43
- graphEnumNameToSubgraphName.set(value.name, info.name);
44
- }
45
- return [subgraphs, graphEnumNameToSubgraphName];
46
- }
47
- class SubgraphExtractionError {
48
- constructor(originalError, subgraph) {
49
- this.originalError = originalError;
50
- this.subgraph = subgraph;
51
- }
52
- }
53
- function collectFieldReachableTypesForSubgraph(supergraph, subgraphName, addReachableType, fieldInfoInSubgraph, typeInfoInSubgraph) {
54
- const seenTypes = new Set();
55
- const stack = supergraph.schemaDefinition.roots().map((root) => root.type);
56
- for (const type of supergraph.types()) {
57
- const { isEntityWithKeyInSubgraph, typesInFederationDirectives } = typeInfoInSubgraph(type, subgraphName);
58
- if (isEntityWithKeyInSubgraph) {
59
- stack.push(type);
60
- }
61
- typesInFederationDirectives.forEach((t) => stack.push(t));
62
- }
63
- while (stack.length > 0) {
64
- const type = stack.pop();
65
- addReachableType(type);
66
- if (seenTypes.has(type.name)) {
67
- continue;
68
- }
69
- seenTypes.add(type.name);
70
- switch (type.kind) {
71
- case 'InterfaceType':
72
- type.allImplementations().forEach((t) => stack.push(t));
73
- case 'ObjectType':
74
- type.interfaces().forEach((t) => stack.push(t));
75
- for (const field of type.fields()) {
76
- const { isInSubgraph, typesInFederationDirectives } = fieldInfoInSubgraph(field, subgraphName);
77
- if (isInSubgraph) {
78
- field.arguments().forEach((arg) => stack.push((0, definitions_1.baseType)(arg.type)));
79
- stack.push((0, definitions_1.baseType)(field.type));
80
- typesInFederationDirectives.forEach((t) => stack.push(t));
81
- }
82
- }
83
- break;
84
- case 'InputObjectType':
85
- for (const field of type.fields()) {
86
- const { isInSubgraph, typesInFederationDirectives } = fieldInfoInSubgraph(field, subgraphName);
87
- if (isInSubgraph) {
88
- stack.push((0, definitions_1.baseType)(field.type));
89
- typesInFederationDirectives.forEach((t) => stack.push(t));
90
- }
91
- }
92
- break;
93
- case 'UnionType':
94
- type.members().forEach((m) => stack.push(m.type));
95
- break;
96
- }
97
- }
98
- for (const directive of supergraph.directives()) {
99
- if (!directive.hasExecutableLocations()) {
100
- continue;
101
- }
102
- directive.arguments().forEach((arg) => stack.push((0, definitions_1.baseType)(arg.type)));
103
- }
104
- }
105
- function collectFieldReachableTypesForAllSubgraphs(supergraph, allSubgraphs, fieldInfoInSubgraph, typeInfoInSubgraph) {
106
- const reachableTypesBySubgraphs = new Map();
107
- for (const subgraphName of allSubgraphs) {
108
- const reachableTypes = new Set();
109
- collectFieldReachableTypesForSubgraph(supergraph, subgraphName, (t) => reachableTypes.add(t.name), fieldInfoInSubgraph, typeInfoInSubgraph);
110
- reachableTypesBySubgraphs.set(subgraphName, reachableTypes);
111
- }
112
- return reachableTypesBySubgraphs;
113
- }
114
- function typesUsedInFederationDirective(fieldSet, parentType) {
115
- if (!fieldSet) {
116
- return [];
117
- }
118
- const usedTypes = [];
119
- (0, operations_1.parseSelectionSet)({
120
- parentType,
121
- source: fieldSet,
122
- fieldAccessor: (type, fieldName) => {
123
- const field = type.field(fieldName);
124
- if (field) {
125
- usedTypes.push((0, definitions_1.baseType)(field.type));
126
- }
127
- return field;
128
- },
129
- validate: false,
130
- });
131
- return usedTypes;
132
- }
133
- function extractSubgraphsFromSupergraph(supergraph) {
134
- const [coreFeatures, joinSpec] = (0, supergraphs_1.validateSupergraph)(supergraph);
135
- const isFed1 = joinSpec.version.equals(new coreSpec_1.FeatureVersion(0, 1));
136
- try {
137
- const [subgraphs, graphEnumNameToSubgraphName] = collectEmptySubgraphs(supergraph, joinSpec);
138
- const typeDirective = joinSpec.typeDirective(supergraph);
139
- const implementsDirective = joinSpec.implementsDirective(supergraph);
140
- const ownerDirective = joinSpec.ownerDirective(supergraph);
141
- const fieldDirective = joinSpec.fieldDirective(supergraph);
142
- const unionMemberDirective = joinSpec.unionMemberDirective(supergraph);
143
- const enumValueDirective = joinSpec.enumValueDirective(supergraph);
144
- const getSubgraph = (application) => {
145
- const graph = application.arguments().graph;
146
- return graph ? graphEnumNameToSubgraphName.get(graph) : undefined;
147
- };
148
- let includeTypeInSubgraph = () => true;
149
- if (isFed1) {
150
- const reachableTypesBySubgraph = collectFieldReachableTypesForAllSubgraphs(supergraph, subgraphs.names(), (f, name) => {
151
- const fieldApplications = f.appliedDirectivesOf(fieldDirective);
152
- if (fieldApplications.length) {
153
- const application = fieldApplications.find((application) => getSubgraph(application) === name);
154
- if (application) {
155
- const args = application.arguments();
156
- const typesInFederationDirectives = typesUsedInFederationDirective(args.provides, (0, definitions_1.baseType)(f.type))
157
- .concat(typesUsedInFederationDirective(args.requires, f.parent));
158
- return { isInSubgraph: true, typesInFederationDirectives };
159
- }
160
- else {
161
- return { isInSubgraph: false, typesInFederationDirectives: [] };
162
- }
163
- }
164
- else {
165
- const ownerApplications = ownerDirective ? f.parent.appliedDirectivesOf(ownerDirective) : [];
166
- return { isInSubgraph: !ownerApplications.length || getSubgraph(ownerApplications[0]) == name, typesInFederationDirectives: [] };
167
- }
168
- }, (t, name) => {
169
- const typeApplications = t.appliedDirectivesOf(typeDirective);
170
- const application = typeApplications.find((application) => (application.arguments().key && (getSubgraph(application) === name)));
171
- if (application) {
172
- const typesInFederationDirectives = typesUsedInFederationDirective(application.arguments().key, t);
173
- return { isEntityWithKeyInSubgraph: true, typesInFederationDirectives };
174
- }
175
- else {
176
- return { isEntityWithKeyInSubgraph: false, typesInFederationDirectives: [] };
177
- }
178
- });
179
- includeTypeInSubgraph = (t, name) => { var _a, _b; return (_b = (_a = reachableTypesBySubgraph.get(name)) === null || _a === void 0 ? void 0 : _a.has(t.name)) !== null && _b !== void 0 ? _b : false; };
180
- }
181
- for (const type of filteredTypes(supergraph, joinSpec, coreFeatures.coreDefinition)) {
182
- const typeApplications = type.appliedDirectivesOf(typeDirective);
183
- if (!typeApplications.length) {
184
- subgraphs
185
- .values()
186
- .filter((sg) => includeTypeInSubgraph(type, sg.name))
187
- .map(sg => sg.schema).forEach(schema => schema.addType((0, definitions_1.newNamedType)(type.kind, type.name)));
188
- }
189
- else {
190
- for (const application of typeApplications) {
191
- const args = application.arguments();
192
- const subgraphName = getSubgraph(application);
193
- const schema = subgraphs.get(subgraphName).schema;
194
- let subgraphType = schema.type(type.name);
195
- if (!subgraphType) {
196
- const kind = args.isInterfaceObject ? 'ObjectType' : type.kind;
197
- subgraphType = schema.addType((0, definitions_1.newNamedType)(kind, type.name));
198
- if (args.isInterfaceObject) {
199
- subgraphType.applyDirective('interfaceObject');
200
- }
201
- }
202
- if (args.key) {
203
- const { resolvable } = args;
204
- const directive = subgraphType.applyDirective('key', { 'fields': args.key, resolvable });
205
- if (args.extension) {
206
- directive.setOfExtension(subgraphType.newExtension());
207
- }
208
- }
209
- }
210
- }
211
- }
212
- for (const type of filteredTypes(supergraph, joinSpec, coreFeatures.coreDefinition)) {
213
- switch (type.kind) {
214
- case 'ObjectType':
215
- case 'InterfaceType':
216
- const addedInterfaces = [];
217
- const implementsApplications = implementsDirective ? type.appliedDirectivesOf(implementsDirective) : [];
218
- for (const application of implementsApplications) {
219
- const args = application.arguments();
220
- const subgraph = subgraphs.get(graphEnumNameToSubgraphName.get(args.graph));
221
- const schema = subgraph.schema;
222
- schema.type(type.name).addImplementedInterface(args.interface);
223
- addedInterfaces.push(args.interface);
224
- }
225
- for (const implementations of type.interfaceImplementations()) {
226
- const name = implementations.interface.name;
227
- if (!addedInterfaces.includes(name)) {
228
- for (const subgraph of subgraphs) {
229
- const subgraphType = subgraph.schema.type(type.name);
230
- const subgraphItf = subgraph.schema.type(name);
231
- if (subgraphType && subgraphItf) {
232
- subgraphType.addImplementedInterface(name);
233
- }
234
- }
235
- }
236
- }
237
- case 'InputObjectType':
238
- for (const field of type.fields()) {
239
- const fieldApplications = field.appliedDirectivesOf(fieldDirective);
240
- if (!fieldApplications.length) {
241
- const ownerApplications = ownerDirective ? type.appliedDirectivesOf(ownerDirective) : [];
242
- if (!ownerApplications.length) {
243
- const fieldBaseType = (0, definitions_1.baseType)(field.type);
244
- const isShareable = (0, definitions_1.isObjectType)(type) && subgraphs.values().filter((s) => s.schema.type(type.name)).length > 1;
245
- for (const subgraph of subgraphs) {
246
- if (subgraph.schema.type(fieldBaseType.name)) {
247
- const subgraphField = addSubgraphField(field, subgraph);
248
- if (subgraphField && isShareable) {
249
- subgraphField.applyDirective(subgraph.metadata().shareableDirective());
250
- }
251
- }
252
- }
253
- }
254
- else {
255
- (0, utils_1.assert)(ownerApplications.length == 1, () => `Found multiple join__owner directives on type ${type}`);
256
- const subgraph = subgraphs.get(graphEnumNameToSubgraphName.get(ownerApplications[0].arguments().graph));
257
- const subgraphField = addSubgraphField(field, subgraph);
258
- (0, utils_1.assert)(subgraphField, () => `Found join__owner directive on ${type} but no corresponding join__type`);
259
- }
260
- }
261
- else {
262
- const isShareable = (0, definitions_1.isObjectType)(type)
263
- && fieldApplications.filter((application) => {
264
- const args = application.arguments();
265
- return !args.external && !args.usedOverridden;
266
- }).length > 1;
267
- for (const application of fieldApplications) {
268
- const args = application.arguments();
269
- if (!args.graph) {
270
- continue;
271
- }
272
- const subgraph = subgraphs.get(graphEnumNameToSubgraphName.get(args.graph));
273
- const subgraphField = addSubgraphField(field, subgraph, args.type);
274
- if (!subgraphField) {
275
- (0, utils_1.assert)(!includeTypeInSubgraph(type, subgraph.name), () => `Found join__field directive for graph ${subgraph.name} on field ${field.coordinate} but no corresponding join__type on ${type}`);
276
- continue;
277
- }
278
- if (args.requires) {
279
- subgraphField.applyDirective(subgraph.metadata().requiresDirective(), { 'fields': args.requires });
280
- }
281
- if (args.provides) {
282
- subgraphField.applyDirective(subgraph.metadata().providesDirective(), { 'fields': args.provides });
283
- }
284
- if (args.external) {
285
- subgraphField.applyDirective(subgraph.metadata().externalDirective());
286
- }
287
- if (args.usedOverridden) {
288
- subgraphField.applyDirective(subgraph.metadata().externalDirective(), { 'reason': '[overridden]' });
289
- }
290
- if (args.override) {
291
- subgraphField.applyDirective(subgraph.metadata().overrideDirective(), { 'from': args.override });
292
- }
293
- if (isShareable && !args.external && !args.usedOverridden) {
294
- subgraphField.applyDirective(subgraph.metadata().shareableDirective());
295
- }
296
- }
297
- }
298
- }
299
- break;
300
- case 'EnumType':
301
- for (const subgraph of subgraphs) {
302
- const subgraphEnum = subgraph.schema.type(type.name);
303
- if (!subgraphEnum) {
304
- continue;
305
- }
306
- (0, utils_1.assert)((0, definitions_1.isEnumType)(subgraphEnum), () => `${subgraphEnum} should be an enum but found a ${subgraphEnum.kind}`);
307
- for (const value of type.values) {
308
- const addValue = !enumValueDirective
309
- || value.appliedDirectivesOf(enumValueDirective).some((d) => graphEnumNameToSubgraphName.get(d.arguments().graph) === subgraph.name);
310
- if (addValue) {
311
- subgraphEnum.addValue(value.name);
312
- }
313
- }
314
- }
315
- break;
316
- case 'UnionType':
317
- for (const subgraph of subgraphs) {
318
- const subgraphUnion = subgraph.schema.type(type.name);
319
- if (!subgraphUnion) {
320
- continue;
321
- }
322
- (0, utils_1.assert)((0, definitions_1.isUnionType)(subgraphUnion), () => `${subgraphUnion} should be an enum but found a ${subgraphUnion.kind}`);
323
- let membersInSubgraph;
324
- if (unionMemberDirective) {
325
- membersInSubgraph = type
326
- .appliedDirectivesOf(unionMemberDirective)
327
- .filter((d) => graphEnumNameToSubgraphName.get(d.arguments().graph) === subgraph.name)
328
- .map((d) => d.arguments().member);
329
- }
330
- else {
331
- membersInSubgraph = type.types().map((t) => t.name);
332
- }
333
- for (const memberTypeName of membersInSubgraph) {
334
- const subgraphType = subgraph.schema.type(memberTypeName);
335
- if (subgraphType) {
336
- subgraphUnion.addType(subgraphType);
337
- }
338
- }
339
- }
340
- break;
341
- }
342
- }
343
- const allExecutableDirectives = supergraph.directives().filter((def) => def.hasExecutableLocations());
344
- for (const subgraph of subgraphs) {
345
- if (isFed1) {
346
- addExternalFields(subgraph, supergraph, isFed1);
347
- }
348
- (0, federation_1.removeInactiveProvidesAndRequires)(subgraph.schema);
349
- for (const type of subgraph.schema.types()) {
350
- switch (type.kind) {
351
- case 'ObjectType':
352
- case 'InterfaceType':
353
- case 'InputObjectType':
354
- if (!type.hasFields()) {
355
- type.removeRecursive();
356
- }
357
- break;
358
- case 'UnionType':
359
- if (type.membersCount() === 0) {
360
- type.removeRecursive();
361
- }
362
- break;
363
- }
364
- }
365
- for (const definition of allExecutableDirectives) {
366
- (0, definitions_1.copyDirectiveDefinitionToSchema)({
367
- definition,
368
- schema: subgraph.schema,
369
- copyDirectiveApplicationsInArguments: false,
370
- locationFilter: (loc) => (0, definitions_1.isExecutableDirectiveLocation)(loc),
371
- });
372
- }
373
- }
374
- if (isFed1) {
375
- for (const subgraph of subgraphs) {
376
- for (const itf of subgraph.schema.interfaceTypes()) {
377
- const implementations = itf.possibleRuntimeTypes();
378
- for (const field of itf.fields()) {
379
- if (!implementations.every(implem => implem.field(field.name))) {
380
- field.remove();
381
- }
382
- }
383
- if (!itf.hasFields()) {
384
- itf.remove();
385
- }
386
- }
387
- }
388
- }
389
- for (const subgraph of subgraphs) {
390
- try {
391
- subgraph.validate();
392
- }
393
- catch (e) {
394
- throw new SubgraphExtractionError(e, subgraph);
395
- }
396
- }
397
- return subgraphs;
398
- }
399
- catch (e) {
400
- let error = e;
401
- let subgraph = undefined;
402
- if (e instanceof SubgraphExtractionError) {
403
- error = e.originalError;
404
- subgraph = e.subgraph;
405
- }
406
- const impacted = subgraph ? `subgraph "${subgraph.name}"` : 'subgraphs';
407
- if (isFed1) {
408
- const msg = `Error extracting ${impacted} from the supergraph: this might be due to errors in subgraphs that were mistakenly ignored by federation 0.x versions but are rejected by federation 2.\n`
409
- + 'Please try composing your subgraphs with federation 2: this should help precisely pinpoint the problems and, once fixed, generate a correct federation 2 supergraph';
410
- throw new Error(`${msg}.\n\nDetails:\n${errorToString(error)}`);
411
- }
412
- else {
413
- const msg = `Unexpected error extracting ${impacted} from the supergraph: this is either a bug, or the supergraph has been corrupted`;
414
- const dumpMsg = subgraph ? '\n\n' + maybeDumpSubgraphSchema(subgraph) : '';
415
- throw new Error(`${msg}.\n\nDetails:\n${errorToString(error)}${dumpMsg}`);
416
- }
417
- }
418
- }
419
- exports.extractSubgraphsFromSupergraph = extractSubgraphsFromSupergraph;
420
- const DEBUG_SUBGRAPHS_ENV_VARIABLE_NAME = 'APOLLO_FEDERATION_DEBUG_SUBGRAPHS';
421
- function maybeDumpSubgraphSchema(subgraph) {
422
- const shouldDump = !!(0, utils_2.validateStringContainsBoolean)(process.env[DEBUG_SUBGRAPHS_ENV_VARIABLE_NAME]);
423
- if (!shouldDump) {
424
- return `Re-run with environment variable '${DEBUG_SUBGRAPHS_ENV_VARIABLE_NAME}' set to 'true' to extract the invalid subgraph`;
425
- }
426
- try {
427
- const filename = `extracted-subgraph-${subgraph.name}-${Date.now()}.graphql`;
428
- const file = path_1.default.resolve(filename);
429
- if (fs_1.default.existsSync(file)) {
430
- throw new Error(`candidate file ${filename} already existed`);
431
- }
432
- fs_1.default.writeFileSync(file, (0, print_1.printSchema)(subgraph.schema));
433
- return `The (invalid) extracted subgraph has been written in: ${file}.`;
434
- }
435
- catch (e2) {
436
- return `Was not able to print generated subgraph for "${subgraph.name}" because: ${errorToString(e2)}`;
437
- }
438
- }
439
- function errorToString(e) {
440
- const causes = (0, _1.errorCauses)(e);
441
- return causes ? (0, _1.printErrors)(causes) : String(e);
442
- }
443
- function addSubgraphField(supergraphField, subgraph, encodedType) {
444
- if (supergraphField instanceof definitions_1.FieldDefinition) {
445
- return addSubgraphObjectOrInterfaceField(supergraphField, subgraph, encodedType);
446
- }
447
- else {
448
- return addSubgraphInputField(supergraphField, subgraph, encodedType);
449
- }
450
- }
451
- function addSubgraphObjectOrInterfaceField(supergraphField, subgraph, encodedType) {
452
- const subgraphType = subgraph.schema.type(supergraphField.parent.name);
453
- if (subgraphType) {
454
- const copiedType = encodedType
455
- ? decodeType(encodedType, subgraph.schema, subgraph.name)
456
- : copyType(supergraphField.type, subgraph.schema, subgraph.name);
457
- const field = subgraphType.addField(supergraphField.name, copiedType);
458
- for (const arg of supergraphField.arguments()) {
459
- field.addArgument(arg.name, copyType(arg.type, subgraph.schema, subgraph.name), arg.defaultValue);
460
- }
461
- return field;
462
- }
463
- else {
464
- return undefined;
465
- }
466
- }
467
- function addSubgraphInputField(supergraphField, subgraph, encodedType) {
468
- const subgraphType = subgraph.schema.type(supergraphField.parent.name);
469
- if (subgraphType) {
470
- const copiedType = encodedType
471
- ? decodeType(encodedType, subgraph.schema, subgraph.name)
472
- : copyType(supergraphField.type, subgraph.schema, subgraph.name);
473
- const field = subgraphType.addField(supergraphField.name, copiedType);
474
- field.defaultValue = supergraphField.defaultValue;
475
- return field;
476
- }
477
- else {
478
- return undefined;
479
- }
480
- }
481
- function decodeType(encodedType, subgraph, subgraphName) {
482
- try {
483
- return (0, buildSchema_1.builtTypeReference)(encodedType, subgraph);
484
- }
485
- catch (e) {
486
- (0, utils_1.assert)(false, () => `Cannot parse type "${encodedType}" in subgraph ${subgraphName}: ${e}`);
487
- }
488
- }
489
- function copyType(type, subgraph, subgraphName) {
490
- switch (type.kind) {
491
- case 'ListType':
492
- return new definitions_1.ListType(copyType(type.ofType, subgraph, subgraphName));
493
- case 'NonNullType':
494
- return new definitions_1.NonNullType(copyType(type.ofType, subgraph, subgraphName));
495
- default:
496
- const subgraphType = subgraph.type(type.name);
497
- (0, utils_1.assert)(subgraphType, () => `Cannot find type "${type.name}" in subgraph "${subgraphName}"`);
498
- return subgraphType;
499
- }
500
- }
501
- function addExternalFields(subgraph, supergraph, isFed1) {
502
- const metadata = subgraph.metadata();
503
- for (const type of subgraph.schema.types()) {
504
- if (!(0, definitions_1.isObjectType)(type) && !(0, definitions_1.isInterfaceType)(type)) {
505
- continue;
506
- }
507
- for (const keyApplication of type.appliedDirectivesOf(metadata.keyDirective())) {
508
- const forceNonExternal = isFed1 || !!keyApplication.ofExtension();
509
- addExternalFieldsFromDirectiveFieldSet(subgraph, type, keyApplication, supergraph, forceNonExternal);
510
- }
511
- for (const field of type.fields()) {
512
- for (const requiresApplication of field.appliedDirectivesOf(metadata.requiresDirective())) {
513
- addExternalFieldsFromDirectiveFieldSet(subgraph, type, requiresApplication, supergraph);
514
- }
515
- const fieldBaseType = (0, definitions_1.baseType)(field.type);
516
- for (const providesApplication of field.appliedDirectivesOf(metadata.providesDirective())) {
517
- (0, utils_1.assert)((0, definitions_1.isObjectType)(fieldBaseType) || (0, definitions_1.isInterfaceType)(fieldBaseType), () => `Found @provides on field ${field.coordinate} whose type ${field.type} (${fieldBaseType.kind}) is not an object or interface `);
518
- addExternalFieldsFromDirectiveFieldSet(subgraph, fieldBaseType, providesApplication, supergraph);
519
- }
520
- }
521
- addExternalFieldsFromInterface(metadata, type);
522
- }
523
- }
524
- function addExternalFieldsFromDirectiveFieldSet(subgraph, parentType, directive, supergraph, forceNonExternal = false) {
525
- const external = subgraph.metadata().externalDirective();
526
- const fieldAccessor = function (type, fieldName) {
527
- const field = type.field(fieldName);
528
- if (field) {
529
- if (forceNonExternal && field.hasAppliedDirective(external)) {
530
- field.appliedDirectivesOf(external).forEach(d => d.remove());
531
- }
532
- return field;
533
- }
534
- (0, utils_1.assert)(!(0, definitions_1.isUnionType)(type), () => `Shouldn't select field ${fieldName} from union type ${type}`);
535
- const supergraphType = supergraph.type(type.name);
536
- const supergraphField = supergraphType.field(fieldName);
537
- (0, utils_1.assert)(supergraphField, () => `No field named ${fieldName} found on type ${type.name} in the supergraph`);
538
- const created = addSubgraphObjectOrInterfaceField(supergraphField, subgraph);
539
- if (!forceNonExternal) {
540
- created.applyDirective(external);
541
- }
542
- return created;
543
- };
544
- try {
545
- (0, federation_1.parseFieldSetArgument)({ parentType, directive, fieldAccessor, validate: false });
546
- }
547
- catch (e) {
548
- }
549
- }
550
- function addExternalFieldsFromInterface(metadata, type) {
551
- for (const itf of type.interfaces()) {
552
- for (const field of itf.fields()) {
553
- const typeField = type.field(field.name);
554
- if (!typeField) {
555
- copyFieldAsExternal(metadata, field, type);
556
- }
557
- else if (typeField.hasAppliedDirective(metadata.externalDirective())) {
558
- maybeUpdateFieldForInterface(typeField, field);
559
- }
560
- }
561
- }
562
- }
563
- function copyFieldAsExternal(metadata, field, type) {
564
- const newField = type.addField(field.name, field.type);
565
- for (const arg of field.arguments()) {
566
- newField.addArgument(arg.name, arg.type, arg.defaultValue);
567
- }
568
- newField.applyDirective(metadata.externalDirective());
569
- }
570
- function maybeUpdateFieldForInterface(toModify, itfField) {
571
- if (!(0, types_1.isSubtype)(itfField.type, toModify.type)) {
572
- (0, utils_1.assert)((0, types_1.isSubtype)(toModify.type, itfField.type), () => `For ${toModify.coordinate}, expected ${itfField.type} and ${toModify.type} to be in a subtyping relationship`);
573
- toModify.type = itfField.type;
574
- }
575
- }
576
- //# sourceMappingURL=extractSubgraphsFromSupergraph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extractSubgraphsFromSupergraph.js","sourceRoot":"","sources":["../src/extractSubgraphsFromSupergraph.ts"],"names":[],"mappings":"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"}