From 133de5a21e6da59f3f8a165c64b8e00e4c702d56 Mon Sep 17 00:00:00 2001 From: Trevor Scheer Date: Mon, 10 Jun 2019 16:07:55 -0700 Subject: [PATCH 1/4] Allow specified directives during validation The keyFieldsMissingExternal validator should permit standard directives just like we do in composition everywhere else. --- .../validate/preComposition/keyFieldsMissingExternal.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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); From f403edff2536521d8601f12f3ba16a0c29adfc41 Mon Sep 17 00:00:00 2001 From: Trevor Scheer Date: Tue, 11 Jun 2019 07:51:19 -0700 Subject: [PATCH 2/4] Add test for @deprecated usage --- .../keyFieldsMissingExternal.test.ts | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) 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..60029309e6c 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 + Blude + } + `, + 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` From 1187164fb57da7a0f2f3b04790b05ed12834bbad Mon Sep 17 00:00:00 2001 From: Trevor Scheer Date: Tue, 11 Jun 2019 07:52:30 -0700 Subject: [PATCH 3/4] Update changelog --- packages/apollo-federation/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) 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) From 93a90f5578355bf75a911201a49e1a5b728362c3 Mon Sep 17 00:00:00 2001 From: Trevor Scheer Date: Tue, 11 Jun 2019 07:53:57 -0700 Subject: [PATCH 4/4] Update packages/apollo-federation/src/composition/validate/preComposition/__tests__/keyFieldsMissingExternal.test.ts --- .../preComposition/__tests__/keyFieldsMissingExternal.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 60029309e6c..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 @@ -72,7 +72,7 @@ describe('keyFieldsMissingExternal', () => { enum Color { Red - Blude + Blue } `, name: 'serviceA',