diff --git a/packages/apollo-federation/CHANGELOG.md b/packages/apollo-federation/CHANGELOG.md index be5f084abb3..5dcce0a720f 100644 --- a/packages/apollo-federation/CHANGELOG.md +++ b/packages/apollo-federation/CHANGELOG.md @@ -2,6 +2,8 @@ ### vNEXT +* Allow specified directives during validation (@deprecated) [#2823](https://github.com/apollographql/apollo-server/pull/2823) + # v0.6.1 * Normalize SDL in a normalization step before validation [#2771](https://github.com/apollographql/apollo-server/pull/2771) diff --git a/packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts b/packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts index 222d5e9caaf..3811694310e 100644 --- a/packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts +++ b/packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts @@ -51,6 +51,37 @@ describe('keyFieldsMissingExternal', () => { expect(warnings).toHaveLength(0); }); + it('has no warnings with @deprecated directive usage', () => { + const serviceA = { + typeDefs: gql` + extend type Car @key(fields: "model { name kit { upc } } year") { + model: Model! @external + year: String! @external + color: String! @deprecated(reason: "Use colors instead") + colors: Color! + } + + extend type Model { + name: String! @external + kit: Kit @external + } + + extend type Kit { + upc: String! @external + } + + enum Color { + Red + Blue + } + `, + name: 'serviceA', + }; + + const warnings = validateKeyFieldsMissingExternal(serviceA); + expect(warnings).toHaveLength(0); + }); + it("warns when a @key argument doesn't reference an @external field", () => { const serviceA = { typeDefs: gql` diff --git a/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts b/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts index 18fd77698a3..58b868d3e82 100644 --- a/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts +++ b/packages/apollo-federation/src/composition/validate/preComposition/keyFieldsMissingExternal.ts @@ -5,6 +5,7 @@ import { parse, GraphQLSchema, GraphQLError, + specifiedDirectives, } from 'graphql'; import { buildSchemaFromSDL } from 'apollo-graphql'; import { isNotNullOrUndefined } from 'apollo-env'; @@ -58,7 +59,7 @@ export const keyFieldsMissingExternal = ({ // this allows us to build a partial schema let schema = new GraphQLSchema({ query: undefined, - directives: federationDirectives, + directives: [...specifiedDirectives, ...federationDirectives], }); try { schema = buildSchemaFromSDL(typeDefs, schema);