UNPKG

@graphql-hive/federation-gateway-audit

Version:
229 lines (216 loc) 3.48 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", type: "REGULAR" }, { id: "u2", type: "ANONYMOUS" } ]; var a = createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@shareable"] ) type Query { users: [User] } type User @key(fields: "id") { id: ID type: UserType @shareable } enum UserType { REGULAR } ` ), resolvers: { Query: { users() { return users; } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, type: user.type }; } } } }); var b = createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@inaccessible", "@shareable"] ) type Query { usersByType(type: UserType!): [User!] usersB: [User!] } extend type User @key(fields: "id") { id: ID type: UserType @shareable } enum UserType { ANONYMOUS @inaccessible REGULAR } ` ), resolvers: { Query: { usersByType(_, { type }) { return users.filter((u) => u.type === type); }, usersB() { return users; } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { id: user.id, type: user.type }; } } } }); var test = [ createTest( /* GraphQL */ ` query { users { id } } `, { data: { users: [ { id: "u1" }, { id: "u2" } ] } } ), createTest( /* GraphQL */ ` query { users { id type } } `, { errors: true, data: { users: [ { id: "u1", type: "REGULAR" }, { id: "u2", type: null } ] } } ), createTest( /* GraphQL */ ` query { usersB { id type } } `, { data: { usersB: [ { id: "u1", type: "REGULAR" }, { id: "u2", type: null } ] } } ), createTest( /* GraphQL */ ` query { usersByType(type: REGULAR) { id type } } `, { data: { usersByType: [ { id: "u1", type: "REGULAR" } ] } } ), createTest( /* GraphQL */ ` query { usersByType(type: ANONYMOUS) { id type } } `, { errors: true, data: null } ) ]; var index = serve("enum-intersection", [a, b], test); export { index as default };