UNPKG

@graphql-hive/federation-gateway-audit

Version:
82 lines (66 loc) 1.53 kB
import { createSubgraph } from "../../subgraph.js"; import { bazs, entities, quxs } from "./data.js"; export default createSubgraph("a", { typeDefs: /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.5" import: ["@key", "@shareable"] ) type Query @shareable { a: Entity } type Entity @key(fields: "id") { id: ID! data: Foo } interface Foo { foo: String! } interface Bar implements Foo { foo: String! bar: String! } type Baz implements Foo & Bar @shareable { foo: String! bar: String! baz: String! } type Qux implements Foo & Bar @shareable { foo: String! bar: String! qux: String! } `, resolvers: { Query: { a() { return entities[1]; }, }, Entity: { __resolveReference(key: { id: string }) { const entity = entities.find((e) => e.id === key.id); if (!entity) { return null; } return entity; }, data(entity: { id: string; data: string }) { const data = entities.find((e) => e.id === entity.id)?.data; if (!data) { return null; } const baz = bazs.find((b) => b.id === data); if (baz) { return baz; } const qux = quxs.find((q) => q.id === data); if (qux) { return qux; } throw new Error("Invalid data"); }, }, }, });