Skip to content

Commit 60ababc

Browse files
committed
fix(schema-first): merge duplicate query interface
1 parent e696886 commit 60ababc

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

packages/apollo/tests/e2e/generated-definitions.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,4 +339,23 @@ describe('Generated Definitions', () => {
339339
afterEach(async () => {
340340
await app.close();
341341
});
342+
343+
it('should generate for a federated graph with partial query definition', async () => {
344+
const outputFile = generatedDefinitions(
345+
'federation-partial-query.test-definitions.ts',
346+
);
347+
const factory = new GraphQLFederationDefinitionsFactory();
348+
await factory.generate({
349+
typePaths: [generatedDefinitions('federation-partial-query.graphql')],
350+
path: outputFile,
351+
outputAs: 'interface',
352+
});
353+
354+
expect(
355+
await readFile(
356+
generatedDefinitions('federation-partial-query.fixture.ts'),
357+
'utf8',
358+
),
359+
).toBe(await readFile(outputFile, 'utf8'));
360+
});
342361
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
/*
3+
* -------------------------------------------------------
4+
* THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
5+
* -------------------------------------------------------
6+
*/
7+
8+
/* tslint:disable */
9+
/* eslint-disable */
10+
11+
export interface IQuery {
12+
foo(): Nullable<boolean> | Promise<Nullable<boolean>>;
13+
}
14+
15+
type Nullable<T> = T | null;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
extend type Query {
2+
foo: Boolean
3+
}

packages/graphql/lib/federation/graphql-federation-definitions.factory.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { gql } from 'graphql-tag';
33
import { DefinitionsGeneratorOptions } from '../graphql-ast.explorer';
44
import { GraphQLDefinitionsFactory } from '../graphql-definitions.factory';
55
import { extend } from '../utils';
6+
import { mergeTypeDefs } from '@graphql-tools/merge';
67

78
export class GraphQLFederationDefinitionsFactory extends GraphQLDefinitionsFactory {
89
protected async exploreAndEmit(
@@ -35,9 +36,17 @@ export class GraphQLFederationDefinitionsFactory extends GraphQLDefinitionsFacto
3536
resolvers: {},
3637
},
3738
]);
39+
40+
const mergedDefinition = mergeTypeDefs([printSubgraphSchema(schema)], {
41+
useSchemaDefinition: false,
42+
throwOnConflict: true,
43+
commentDescriptions: true,
44+
reverseDirectives: true,
45+
});
46+
3847
const tsFile = await this.gqlAstExplorer.explore(
3948
gql`
40-
${printSubgraphSchema(schema)}
49+
${mergedDefinition}
4150
`,
4251
path,
4352
outputAs,

0 commit comments

Comments
 (0)