directive @core(feature: String!) repeatable on SCHEMA directive @join__owner(graph: join__Graph!) on OBJECT directive @join__type( graph: join__Graph! key: String! resolvable: Boolean = true ) repeatable on OBJECT | INTERFACE directive @join__field( graph: join__Graph requires: String provides: String ) on FIELD_DEFINITION directive @join__graph(name: String!, url: String!) on ENUM_VALUE enum join__Graph { PRODUCTS @join__graph(name: "products", url: "http://example.com/products") USERS @join__graph(name: "users", url: "http://example.com/users") } type Product @join__type(graph: PRODUCTS, key: "id") { id: ID! name: String @join__field(graph: PRODUCTS) reviews: [Review] @join__field(graph: PRODUCTS) } type Review @join__type(graph: PRODUCTS, key: "id") { author: User @join__field(graph: PRODUCTS, provides: "name") content: String @join__field(graph: PRODUCTS) id: ID! } type User @join__type(graph: PRODUCTS, key: "id") @join__type(graph: USERS, key: "id") { email: String @join__field(graph: USERS) id: ID! name: String @join__field(graph: USERS) } type Query { product(id: ID!): Product @join__field(graph: PRODUCTS) user(id: ID!): User @join__field(graph: USERS) }