@apollo/federation-internals 2.1.4 → 2.2.1
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.
- package/CHANGELOG.md +11 -0
- package/dist/buildSchema.d.ts.map +1 -1
- package/dist/buildSchema.js +7 -0
- package/dist/buildSchema.js.map +1 -1
- package/dist/coreSpec.d.ts.map +1 -1
- package/dist/coreSpec.js +1 -1
- package/dist/coreSpec.js.map +1 -1
- package/dist/error.d.ts +1 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +2 -0
- package/dist/error.js.map +1 -1
- package/dist/extractSubgraphsFromSupergraph.d.ts.map +1 -1
- package/dist/extractSubgraphsFromSupergraph.js +16 -2
- package/dist/extractSubgraphsFromSupergraph.js.map +1 -1
- package/dist/federation.d.ts +13 -1
- package/dist/federation.d.ts.map +1 -1
- package/dist/federation.js +100 -39
- package/dist/federation.js.map +1 -1
- package/dist/federationSpec.d.ts +24 -16
- package/dist/federationSpec.d.ts.map +1 -1
- package/dist/federationSpec.js +94 -68
- package/dist/federationSpec.js.map +1 -1
- package/dist/introspection.d.ts +1 -0
- package/dist/introspection.d.ts.map +1 -1
- package/dist/introspection.js +11 -1
- package/dist/introspection.js.map +1 -1
- package/dist/operations.d.ts +1 -0
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +21 -2
- package/dist/operations.js.map +1 -1
- package/dist/schemaUpgrader.d.ts +7 -1
- package/dist/schemaUpgrader.d.ts.map +1 -1
- package/dist/schemaUpgrader.js +23 -3
- package/dist/schemaUpgrader.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +13 -1
- package/dist/utils.js.map +1 -1
- package/dist/validate.js +4 -1
- package/dist/validate.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/extractSubgraphsFromSupergraph.test.ts +64 -1
- package/src/__tests__/schemaUpgrader.test.ts +3 -3
- package/src/__tests__/subgraphValidation.test.ts +59 -2
- package/src/buildSchema.ts +9 -0
- package/src/coreSpec.ts +3 -5
- package/src/error.ts +7 -0
- package/src/extractSubgraphsFromSupergraph.ts +17 -2
- package/src/federation.ts +150 -56
- package/src/federationSpec.ts +102 -75
- package/src/introspection.ts +10 -0
- package/src/operations.ts +28 -3
- package/src/schemaUpgrader.ts +24 -2
- package/src/utils.ts +15 -0
- package/src/validate.ts +9 -2
- package/tsconfig.test.tsbuildinfo +1 -1
- package/tsconfig.tsbuildinfo +1 -1
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":";;;AAAA,+CAiBuB;AACvB,qCAAiF;AACjF,qCAAuD;AACvD,
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.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.1
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "Apollo Federation internal utilities",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"author": "Apollo <packages@apollographql.com>",
|
|
21
21
|
"license": "SEE LICENSE IN ./LICENSE",
|
|
22
22
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
23
|
+
"node": ">=14.15.0"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"chalk": "^4.1.0",
|
|
@@ -32,5 +32,5 @@
|
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"graphql": "^16.5.0"
|
|
34
34
|
},
|
|
35
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "03597ced86dc4c2e6fca59ee48b40fd885ad213a"
|
|
36
36
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildSupergraphSchema, extractSubgraphsFromSupergraph } from "..";
|
|
1
|
+
import { buildSupergraphSchema, extractSubgraphsFromSupergraph, InputObjectType } from "..";
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
test('handles types having no fields referenced by other objects in a subgraph correctly', () => {
|
|
@@ -534,6 +534,69 @@ test('handles unions types having no members in a subgraph correctly', () => {
|
|
|
534
534
|
expect(a.type('D')).toBeDefined();
|
|
535
535
|
})
|
|
536
536
|
|
|
537
|
+
test('preserves default values of input object fields', () => {
|
|
538
|
+
const supergraph = `
|
|
539
|
+
schema
|
|
540
|
+
@link(url: "https://specs.apollo.dev/link/v1.0")
|
|
541
|
+
@link(url: "https://specs.apollo.dev/join/v0.2", for: EXECUTION)
|
|
542
|
+
{
|
|
543
|
+
query: Query
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
directive @join__field(graph: join__Graph!, requires: join__FieldSet, provides: join__FieldSet, type: String, external: Boolean, override: String, usedOverridden: Boolean) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION
|
|
547
|
+
|
|
548
|
+
directive @join__graph(name: String!, url: String!) on ENUM_VALUE
|
|
549
|
+
|
|
550
|
+
directive @join__implements(graph: join__Graph!, interface: String!) repeatable on OBJECT | INTERFACE
|
|
551
|
+
|
|
552
|
+
directive @join__type(graph: join__Graph!, key: join__FieldSet, extension: Boolean! = false, resolvable: Boolean! = true) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR
|
|
553
|
+
|
|
554
|
+
directive @link(url: String, as: String, for: link__Purpose, import: [link__Import]) repeatable on SCHEMA
|
|
555
|
+
|
|
556
|
+
input Input
|
|
557
|
+
@join__type(graph: SERVICE)
|
|
558
|
+
{
|
|
559
|
+
a: Int! = 1234
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
scalar join__FieldSet
|
|
563
|
+
|
|
564
|
+
enum join__Graph {
|
|
565
|
+
SERVICE @join__graph(name: "service", url: "")
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
scalar link__Import
|
|
569
|
+
|
|
570
|
+
enum link__Purpose {
|
|
571
|
+
"""
|
|
572
|
+
\`SECURITY\` features provide metadata necessary to securely resolve fields.
|
|
573
|
+
"""
|
|
574
|
+
SECURITY
|
|
575
|
+
|
|
576
|
+
"""
|
|
577
|
+
\`EXECUTION\` features provide metadata necessary for operation execution.
|
|
578
|
+
"""
|
|
579
|
+
EXECUTION
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
type Query
|
|
583
|
+
@join__type(graph: SERVICE)
|
|
584
|
+
{
|
|
585
|
+
field(input: Input!): String
|
|
586
|
+
}
|
|
587
|
+
`;
|
|
588
|
+
|
|
589
|
+
const schema = buildSupergraphSchema(supergraph)[0];
|
|
590
|
+
const subgraphs = extractSubgraphsFromSupergraph(schema);
|
|
591
|
+
|
|
592
|
+
const subgraph = subgraphs.get('service')
|
|
593
|
+
const inputType = subgraph?.schema.type('Input') as InputObjectType | undefined
|
|
594
|
+
const inputFieldA = inputType?.field('a')
|
|
595
|
+
|
|
596
|
+
expect(inputFieldA?.defaultValue).toBe(1234)
|
|
597
|
+
})
|
|
598
|
+
|
|
599
|
+
|
|
537
600
|
test('throw meaningful error for invalid federation directive fieldSet', () => {
|
|
538
601
|
const supergraph = `
|
|
539
602
|
schema
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FEDERATION2_LINK_WITH_FULL_IMPORTS } from '..';
|
|
2
2
|
import { ObjectType } from '../definitions';
|
|
3
3
|
import { buildSubgraph, Subgraphs } from '../federation';
|
|
4
4
|
import { UpgradeChangeID, UpgradeResult, upgradeSubgraphsIfNecessary } from '../schemaUpgrader';
|
|
@@ -92,7 +92,7 @@ test('upgrade complex schema', () => {
|
|
|
92
92
|
|
|
93
93
|
expect(res.subgraphs?.get('s1')?.toString()).toMatchString(`
|
|
94
94
|
schema
|
|
95
|
-
${
|
|
95
|
+
${FEDERATION2_LINK_WITH_FULL_IMPORTS}
|
|
96
96
|
{
|
|
97
97
|
query: Query
|
|
98
98
|
}
|
|
@@ -148,7 +148,7 @@ test('update federation directive non-string arguments', () => {
|
|
|
148
148
|
|
|
149
149
|
expect(res.subgraphs?.get('s')?.toString()).toMatchString(`
|
|
150
150
|
schema
|
|
151
|
-
${
|
|
151
|
+
${FEDERATION2_LINK_WITH_FULL_IMPORTS}
|
|
152
152
|
{
|
|
153
153
|
query: Query
|
|
154
154
|
}
|
|
@@ -674,8 +674,6 @@ describe('@core/@link handling', () => {
|
|
|
674
674
|
|
|
675
675
|
directive @federation__override(from: String!) on FIELD_DEFINITION
|
|
676
676
|
|
|
677
|
-
directive @federation__composeDirective(name: String) repeatable on SCHEMA
|
|
678
|
-
|
|
679
677
|
type T
|
|
680
678
|
@key(fields: "k")
|
|
681
679
|
{
|
|
@@ -1126,3 +1124,62 @@ describe('federation 1 schema', () => {
|
|
|
1126
1124
|
]]);
|
|
1127
1125
|
});
|
|
1128
1126
|
})
|
|
1127
|
+
|
|
1128
|
+
describe('@shareable', () => {
|
|
1129
|
+
it('can only be applied to fields of object types', () => {
|
|
1130
|
+
const doc = gql`
|
|
1131
|
+
interface I {
|
|
1132
|
+
a: Int @shareable
|
|
1133
|
+
}
|
|
1134
|
+
`;
|
|
1135
|
+
|
|
1136
|
+
expect(buildForErrors(doc)).toStrictEqual([[
|
|
1137
|
+
'INVALID_SHAREABLE_USAGE',
|
|
1138
|
+
'[S] Invalid use of @shareable on field "I.a": only object type fields can be marked with @shareable'
|
|
1139
|
+
]]);
|
|
1140
|
+
});
|
|
1141
|
+
|
|
1142
|
+
it('rejects duplicate @shareable on the same definition declaration', () => {
|
|
1143
|
+
const doc = gql`
|
|
1144
|
+
type E @shareable @key(fields: "id") @shareable {
|
|
1145
|
+
id: ID!
|
|
1146
|
+
a: Int
|
|
1147
|
+
}
|
|
1148
|
+
`;
|
|
1149
|
+
|
|
1150
|
+
expect(buildForErrors(doc)).toStrictEqual([[
|
|
1151
|
+
'INVALID_SHAREABLE_USAGE',
|
|
1152
|
+
'[S] Invalid duplicate application of @shareable on the same type declaration of "E": @shareable is only repeatable on types so it can be used simultaneously on a type definition and its extensions, but it should not be duplicated on the same definition/extension declaration'
|
|
1153
|
+
]]);
|
|
1154
|
+
});
|
|
1155
|
+
|
|
1156
|
+
it('rejects duplicate @shareable on the same extension declaration', () => {
|
|
1157
|
+
const doc = gql`
|
|
1158
|
+
type E @shareable {
|
|
1159
|
+
id: ID!
|
|
1160
|
+
a: Int
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
extend type E @shareable @shareable {
|
|
1164
|
+
b: Int
|
|
1165
|
+
}
|
|
1166
|
+
`;
|
|
1167
|
+
expect(buildForErrors(doc)).toStrictEqual([[
|
|
1168
|
+
'INVALID_SHAREABLE_USAGE',
|
|
1169
|
+
'[S] Invalid duplicate application of @shareable on the same type declaration of "E": @shareable is only repeatable on types so it can be used simultaneously on a type definition and its extensions, but it should not be duplicated on the same definition/extension declaration'
|
|
1170
|
+
]]);
|
|
1171
|
+
});
|
|
1172
|
+
|
|
1173
|
+
it('rejects duplicate @shareable on a field', () => {
|
|
1174
|
+
const doc = gql`
|
|
1175
|
+
type E {
|
|
1176
|
+
a: Int @shareable @shareable
|
|
1177
|
+
}
|
|
1178
|
+
`;
|
|
1179
|
+
|
|
1180
|
+
expect(buildForErrors(doc)).toStrictEqual([[
|
|
1181
|
+
'INVALID_SHAREABLE_USAGE',
|
|
1182
|
+
'[S] Invalid duplicate application of @shareable on field "E.a": @shareable is only repeatable on types so it can be used simultaneously on a type definition and its extensions, but it should not be duplicated on the same definition/extension declaration'
|
|
1183
|
+
]]);
|
|
1184
|
+
});
|
|
1185
|
+
});
|
package/src/buildSchema.ts
CHANGED
|
@@ -55,6 +55,7 @@ import {
|
|
|
55
55
|
NamedSchemaElement,
|
|
56
56
|
} from "./definitions";
|
|
57
57
|
import { ERRORS, errorCauses, withModifiedErrorNodes } from "./error";
|
|
58
|
+
import { introspectionTypeNames } from "./introspection";
|
|
58
59
|
|
|
59
60
|
function buildValue(value?: ValueNode): any {
|
|
60
61
|
return value ? valueFromASTUntyped(value) : undefined;
|
|
@@ -210,6 +211,10 @@ function buildNamedTypeAndDirectivesShallow(documentNode: DocumentNode, schema:
|
|
|
210
211
|
case 'UnionTypeDefinition':
|
|
211
212
|
case 'EnumTypeDefinition':
|
|
212
213
|
case 'InputObjectTypeDefinition':
|
|
214
|
+
// Like graphql-js, we just silently ignore definitions for introspection types
|
|
215
|
+
if (introspectionTypeNames.includes(definitionNode.name.value)) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
213
218
|
typeDefinitions.push(definitionNode);
|
|
214
219
|
let type = schema.type(definitionNode.name.value);
|
|
215
220
|
// Note that the type may already exists due to an extension having been processed first, but we know we
|
|
@@ -240,6 +245,10 @@ function buildNamedTypeAndDirectivesShallow(documentNode: DocumentNode, schema:
|
|
|
240
245
|
case 'UnionTypeExtension':
|
|
241
246
|
case 'EnumTypeExtension':
|
|
242
247
|
case 'InputObjectTypeExtension':
|
|
248
|
+
// Like graphql-js, we just silently ignore definitions for introspection types
|
|
249
|
+
if (introspectionTypeNames.includes(definitionNode.name.value)) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
243
252
|
typeExtensions.push(definitionNode);
|
|
244
253
|
const existing = schema.type(definitionNode.name.value);
|
|
245
254
|
// In theory, graphQL does not let you have an extension without a corresponding definition. However,
|
package/src/coreSpec.ts
CHANGED
|
@@ -507,18 +507,16 @@ export class FeatureDefinitions<T extends FeatureDefinition = FeatureDefinition>
|
|
|
507
507
|
return this;
|
|
508
508
|
}
|
|
509
509
|
this._definitions.push(definition);
|
|
510
|
-
// We sort by decreased versions
|
|
511
|
-
// recent versions first).
|
|
510
|
+
// We sort by decreased versions sa it feels somewhat natural anyway to have more recent versions first.
|
|
512
511
|
this._definitions.sort((def1, def2) => -def1.version.compareTo(def2.version));
|
|
513
512
|
return this;
|
|
514
513
|
}
|
|
515
514
|
|
|
516
515
|
/**
|
|
517
|
-
* Returns the
|
|
518
|
-
* known version can satisfy this version.
|
|
516
|
+
* Returns the definition corresponding to the requested version if known.
|
|
519
517
|
*/
|
|
520
518
|
find(requested: FeatureVersion): T | undefined {
|
|
521
|
-
return this._definitions.find(def => def.version.
|
|
519
|
+
return this._definitions.find((def) => def.version.equals(requested));
|
|
522
520
|
}
|
|
523
521
|
|
|
524
522
|
versions(): FeatureVersion[] {
|
package/src/error.ts
CHANGED
|
@@ -405,6 +405,12 @@ const INVALID_FIELD_SHARING = makeCodeDefinition(
|
|
|
405
405
|
'A field that is non-shareable in at least one subgraph is resolved by multiple subgraphs.'
|
|
406
406
|
);
|
|
407
407
|
|
|
408
|
+
const INVALID_SHAREABLE_USAGE = makeCodeDefinition(
|
|
409
|
+
'INVALID_SHAREABLE_USAGE',
|
|
410
|
+
'The `@shareable` federation directive is used in an invalid way.',
|
|
411
|
+
{ addedIn: '2.1.2' },
|
|
412
|
+
);
|
|
413
|
+
|
|
408
414
|
const INVALID_LINK_DIRECTIVE_USAGE = makeCodeDefinition(
|
|
409
415
|
'INVALID_LINK_DIRECTIVE_USAGE',
|
|
410
416
|
'An application of the @link directive is invalid/does not respect the specification.'
|
|
@@ -581,6 +587,7 @@ export const ERRORS = {
|
|
|
581
587
|
EXTERNAL_MISSING_ON_BASE,
|
|
582
588
|
INTERFACE_FIELD_IMPLEM_TYPE_MISMATCH,
|
|
583
589
|
INVALID_FIELD_SHARING,
|
|
590
|
+
INVALID_SHAREABLE_USAGE,
|
|
584
591
|
INVALID_LINK_DIRECTIVE_USAGE,
|
|
585
592
|
INVALID_LINK_IDENTIFIER,
|
|
586
593
|
LINK_IMPORT_NAME_MISMATCH,
|
|
@@ -329,9 +329,13 @@ export function extractSubgraphsFromSupergraph(supergraph: Schema): Subgraphs {
|
|
|
329
329
|
const ownerApplications = ownerDirective ? type.appliedDirectivesOf(ownerDirective) : [];
|
|
330
330
|
if (!ownerApplications.length) {
|
|
331
331
|
const fieldBaseType = baseType(field.type!);
|
|
332
|
+
const isShareable = isObjectType(type) && subgraphs.values().filter((s) => s.schema.type(type.name)).length > 1;
|
|
332
333
|
for (const subgraph of subgraphs) {
|
|
333
334
|
if (subgraph.schema.type(fieldBaseType.name)) {
|
|
334
|
-
addSubgraphField(field, subgraph);
|
|
335
|
+
const subgraphField = addSubgraphField(field, subgraph);
|
|
336
|
+
if (subgraphField && isShareable) {
|
|
337
|
+
subgraphField.applyDirective(subgraph.metadata().shareableDirective());
|
|
338
|
+
}
|
|
335
339
|
}
|
|
336
340
|
}
|
|
337
341
|
} else {
|
|
@@ -341,6 +345,12 @@ export function extractSubgraphsFromSupergraph(supergraph: Schema): Subgraphs {
|
|
|
341
345
|
assert(subgraphField, () => `Found join__owner directive on ${type} but no corresponding join__type`);
|
|
342
346
|
}
|
|
343
347
|
} else {
|
|
348
|
+
const isShareable = isObjectType(type)
|
|
349
|
+
&& (fieldApplications as Directive<any, { external?: boolean, usedOverridden?: boolean }>[]).filter((application) => {
|
|
350
|
+
const args = application.arguments();
|
|
351
|
+
return !args.external && !args.usedOverridden;
|
|
352
|
+
}).length > 1;
|
|
353
|
+
|
|
344
354
|
for (const application of fieldApplications) {
|
|
345
355
|
const args = application.arguments();
|
|
346
356
|
const subgraph = subgraphs.get(graphEnumNameToSubgraphName.get(args.graph)!)!;
|
|
@@ -368,6 +378,9 @@ export function extractSubgraphsFromSupergraph(supergraph: Schema): Subgraphs {
|
|
|
368
378
|
if (args.override) {
|
|
369
379
|
subgraphField.applyDirective(subgraph.metadata().overrideDirective(), {'from': args.override});
|
|
370
380
|
}
|
|
381
|
+
if (isShareable && !args.external && !args.usedOverridden) {
|
|
382
|
+
subgraphField.applyDirective(subgraph.metadata().shareableDirective());
|
|
383
|
+
}
|
|
371
384
|
}
|
|
372
385
|
}
|
|
373
386
|
}
|
|
@@ -595,7 +608,9 @@ function addSubgraphInputField(
|
|
|
595
608
|
const copiedType = encodedType
|
|
596
609
|
? decodeType(encodedType, subgraph.schema, subgraph.name)
|
|
597
610
|
: copyType(supergraphField.type!, subgraph.schema, subgraph.name);
|
|
598
|
-
|
|
611
|
+
const field = (subgraphType as InputObjectType).addField(supergraphField.name, copiedType);
|
|
612
|
+
field.defaultValue = supergraphField.defaultValue
|
|
613
|
+
return field
|
|
599
614
|
} else {
|
|
600
615
|
return undefined;
|
|
601
616
|
}
|