UNPKG

@graphql-hive/federation-gateway-audit

Version:
506 lines (493 loc) 10.2 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", name: "u1-name" } ]; var a = createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@shareable"] ) type User { id: ID @shareable } type Query { users: [User!]! } ` ), resolvers: { Query: { users() { return users.map((u) => ({ __typename: "User", id: u.id })); } } } }); function accounts() { return [ ...users.map((user) => ({ __typename: "User", ...user })), { __typename: "Admin", id: "a1", name: "a1-name" } ]; } var b = createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@shareable", "@key"] ) union Account = User | Admin type User @key(fields: "id") { id: ID! name: String similarAccounts: [Account!]! } type Admin { id: ID name: String @shareable similarAccounts: [Account!]! } type Query { accounts: [Account!]! } ` ), resolvers: { Query: { accounts }, User: { __resolveReference(key) { return users.find((user) => user.id === key.id); }, similarAccounts: accounts }, Admin: { similarAccounts: accounts } } }); var test = [ createTest( /* GraphQL */ ` { users { id name } accounts { ... on User { id name } ... on Admin { id name } } } `, { data: { users: [ { id: "u1", name: "u1-name" } ], accounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] } } ), createTest( /* GraphQL */ ` query NestedInternalAlias { users { id name } accounts { ... on User { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } ... on Admin { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } } } `, { data: { users: [ { id: "u1", name: "u1-name" } ], accounts: [ { id: "u1", name: "u1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] }, { id: "a1", name: "a1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] } ] } } ), createTest( /* GraphQL */ ` query DeeplyNestedInternalAlias { users { id name } accounts { ... on User { id name similarAccounts { ... on User { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } ... on Admin { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } } } ... on Admin { id name similarAccounts { ... on User { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } ... on Admin { id name similarAccounts { ... on User { id name } ... on Admin { id name } } } } } } } `, { data: { users: [ { id: "u1", name: "u1-name" } ], accounts: [ { id: "u1", name: "u1-name", similarAccounts: [ { id: "u1", name: "u1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] }, { id: "a1", name: "a1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] } ] }, { id: "a1", name: "a1-name", similarAccounts: [ { id: "u1", name: "u1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] }, { id: "a1", name: "a1-name", similarAccounts: [ { id: "u1", name: "u1-name" }, { id: "a1", name: "a1-name" } ] } ] } ] } } ), createTest( /* GraphQL */ ` query DeeplyNested { accounts { ... on User { name similarAccounts { ... on User { name similarAccounts { ... on User { name } ... on Admin { name } } } ... on Admin { name similarAccounts { ... on User { name } ... on Admin { name } } } } } ... on Admin { name similarAccounts { ... on User { name similarAccounts { ... on User { name } ... on Admin { name } } } ... on Admin { name similarAccounts { ... on User { name } ... on Admin { name } } } } } } } `, { data: { accounts: [ { name: "u1-name", similarAccounts: [ { name: "u1-name", similarAccounts: [ { name: "u1-name" }, { name: "a1-name" } ] }, { name: "a1-name", similarAccounts: [ { name: "u1-name" }, { name: "a1-name" } ] } ] }, { name: "a1-name", similarAccounts: [ { name: "u1-name", similarAccounts: [ { name: "u1-name" }, { name: "a1-name" } ] }, { name: "a1-name", similarAccounts: [ { name: "u1-name" }, { name: "a1-name" } ] } ] } ] } } ) ]; var index = serve("child-type-mismatch", [a, b], test); export { index as default };