diff --git a/src/__tests__/fixtures/schemas/merge-directives/schema.graphql b/src/__tests__/fixtures/schemas/merge-directives/schema.graphql new file mode 100644 index 00000000..01450f41 --- /dev/null +++ b/src/__tests__/fixtures/schemas/merge-directives/schema.graphql @@ -0,0 +1,20 @@ +type Query { + getUser(id: ID!): User! @canonical + internalUser(id: ID!): User! @hidden + legacyUser(id: ID!): User! @renamed +} + +type User @canonical { + id: ID! + name: String! @canonical + email: String! @hidden + oldField: String @renamed +} + +type Post @hidden { + id: ID! +} + +type Comment @renamed { + id: ID! +} diff --git a/src/__tests__/schema.test.ts b/src/__tests__/schema.test.ts index deae80fe..5f7d58c3 100644 --- a/src/__tests__/schema.test.ts +++ b/src/__tests__/schema.test.ts @@ -153,6 +153,18 @@ describe('schema', () => { `); }); + it('should accept merged-API directives on OBJECT and FIELD_DEFINITION', () => { + const api = new Api( + given.appSyncConfig({ + schema: [ + 'src/__tests__/fixtures/schemas/merge-directives/schema.graphql', + ], + }), + plugin, + ); + expect(() => api.compileSchema()).not.toThrow(); + }); + it('should return single files schemas as-is', () => { const api = new Api(given.appSyncConfig(), plugin); const schema = new Schema(api, [ diff --git a/src/resources/Schema.ts b/src/resources/Schema.ts index e4a24ebe..2dbb88ec 100644 --- a/src/resources/Schema.ts +++ b/src/resources/Schema.ts @@ -18,9 +18,9 @@ directive @aws_cognito_user_pools( cognito_groups: [String] ) on FIELD_DEFINITION | OBJECT directive @aws_subscribe(mutations: [String]) on FIELD_DEFINITION -directive @canonical on OBJECT -directive @hidden on OBJECT -directive @renamed on OBJECT +directive @canonical on OBJECT | FIELD_DEFINITION +directive @hidden on OBJECT | FIELD_DEFINITION +directive @renamed on OBJECT | FIELD_DEFINITION scalar AWSDate scalar AWSTime scalar AWSDateTime