UNPKG

@graphql-hive/federation-gateway-audit

Version:
360 lines (348 loc) 6.18 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", username: "u1-username", age: 11 }, { id: "u2", name: "u2-name", username: "u2-username", age: 22 } ]; var a = createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"]) type Query { users: [NodeWithName!]! } interface NodeWithName @key(fields: "id") { id: ID! name: String } type User implements NodeWithName @key(fields: "id") { id: ID! name: String age: Int } ` ), resolvers: { NodeWithName: { __resolveReference(key) { const node = users.find((u) => u.id === key.id); if (!node) { return null; } return { __typename: "User", id: node.id, name: node.name, age: node.age }; } }, User: { __resolveReference(key) { const user = users.find((u) => u.id === key.id); if (!user) { return null; } return { __typename: "User", id: user.id, name: user.name, age: user.age }; } }, Query: { users() { return users.map((u) => ({ __typename: "User", id: u.id, name: u.name, age: u.age })); } } } }); var b = createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@interfaceObject", "@external", "@requires"] ) type Query { anotherUsers: [NodeWithName] } type NodeWithName @key(fields: "id") @interfaceObject { id: ID! name: String @external username: String @requires(fields: "name") } ` ), resolvers: { NodeWithName: { __resolveReference(key) { const node = users.find((u) => u.id === key.id); if (!node) { return null; } return { __typename: "User", id: node.id, name: "name" in key ? key.name : void 0 }; }, username(node) { const user = users.find((u) => u.id === node.id); if (!user) { return null; } if (!node.name) { throw new Error("Requires field 'name' not provided"); } return user.username; } }, Query: { anotherUsers() { return users.map((u) => ({ __typename: "User", id: u.id, username: u.username })); } } } }); var test = [ createTest( /* GraphQL */ ` query { anotherUsers { id name username } } `, { data: { anotherUsers: [ { id: "u1", name: "u1-name", username: "u1-username" }, { id: "u2", name: "u2-name", username: "u2-username" } ] } } ), createTest( /* GraphQL */ ` query { users { id name username } } `, { data: { users: [ { id: "u1", name: "u1-name", username: "u1-username" }, { id: "u2", name: "u2-name", username: "u2-username" } ] } } ), createTest( /* GraphQL */ ` query { anotherUsers { ... on User { age } } } `, { data: { anotherUsers: [ { age: 11 }, { age: 22 } ] } } ), createTest( /* GraphQL */ ` query { users { ... on User { age } } } `, { data: { users: [ { age: 11 }, { age: 22 } ] } } ), createTest( /* GraphQL */ ` query { anotherUsers { ... on User { age id name username } id name } } `, { data: { anotherUsers: [ { age: 11, id: "u1", name: "u1-name", username: "u1-username" }, { age: 22, id: "u2", name: "u2-name", username: "u2-username" } ] } } ), createTest( /* GraphQL */ ` query { users { ... on User { age id name username } id name } } `, { data: { users: [ { age: 11, id: "u1", name: "u1-name", username: "u1-username" }, { age: 22, id: "u2", name: "u2-name", username: "u2-username" } ] } } ), createTest( /* GraphQL */ ` query { users { ... on User { age id name username } id name } } `, { data: { users: [ { age: 11, id: "u1", name: "u1-name", username: "u1-username" }, { age: 22, id: "u2", name: "u2-name", username: "u2-username" } ] } } ) ]; var index = serve("interface-object-with-requires", [a, b], test); export { index as default };