UNPKG

@graphql-hive/federation-gateway-audit

Version:
260 lines (248 loc) 4.33 kB
import { c as createSubgraph, a as createTest, s as serve } from './testkit-BtZjdl4n.js'; import '@apollo/composition'; import 'graphql'; import 'fets'; import '@apollo/subgraph'; import 'graphql-yoga'; const users = [ { id: "u1", age: 11, friends: ["u2"] }, { id: "u2", age: 22, friends: ["u1"] } ]; var friends = createSubgraph("friends", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@inaccessible", "@shareable"] ) type Query { usersInFriends: [User!]! } type User @key(fields: "id") { id: ID friends(type: FriendType = FAMILY @inaccessible): [User!]! type: FriendType } enum FriendType { FAMILY @inaccessible FRIEND } ` ), resolvers: { Query: { usersInFriends() { return users.map((u) => ({ id: u.id, friends: u.friends })); } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, friends: user.friends }; }, friends(user) { return user.friends.map((id) => { const friend = users.find((u) => u.id === id); if (!friend) { return null; } return { id: friend.id, friends: friend.friends }; }); }, type() { return "FAMILY"; } } } }); var age = createSubgraph("age", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@inaccessible", "@shareable"] ) type Query { usersInAge: [User!]! @shareable } type User @key(fields: "id") { id: ID age: Int } ` ), resolvers: { Query: { usersInAge() { return users.map((u) => ({ id: u.id, age: u.age })); } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, age: user.age }; } } } }); var test = [ createTest( /* GraphQL */ ` query { usersInAge { id friends { id } } } `, { data: { usersInAge: [ { id: "u1", friends: [ { id: "u2" } ] }, { id: "u2", friends: [ { id: "u1" } ] } ] } } ), createTest( /* GraphQL */ ` query { usersInFriends { id friends { id } } } `, { data: { usersInFriends: [ { id: "u1", friends: [ { id: "u2" } ] }, { id: "u2", friends: [ { id: "u1" } ] } ] } } ), createTest( /* GraphQL */ ` query { usersInFriends { id friends(type: FRIEND) { id } } } `, { errors: true } ), createTest( /* GraphQL */ ` query { usersInFriends { id friends { id type } } } `, { data: { usersInFriends: [ { id: "u1", friends: [ { id: "u2", type: null } ] }, { id: "u2", friends: [ { id: "u1", type: null } ] } ] } } ) ]; var index = serve("simple-inaccessible", [friends, age], test); export { index as default };