UNPKG

@graphql-hive/federation-gateway-audit

Version:
225 lines (211 loc) 4.43 kB
'use strict'; var testkit = require('./testkit-CAf-AsDy.cjs'); require('@apollo/composition'); require('graphql'); require('fets'); require('@apollo/subgraph'); require('graphql-yoga'); const data = { a: { "1": { id: "1", pId: "a.1.pId", name: "a.1", compositeId: { one: "a.1.compositeId.one", two: "a.1.compositeId.two", three: "a.1.compositeId.three" } }, "2": { id: "2", pId: "a.2.pId", name: "a.2", compositeId: { one: "a.2.compositeId.one", two: "a.2.compositeId.two", three: "a.2.compositeId.three" } } }, b: { "100": { id: "100", a: ["1"] }, "200": { id: "200", a: ["1", "2"] } } }; var a = testkit.createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link(url: "https://specs.apollo.dev/federation/v2.5", import: ["@key"]) type A @key(fields: "id", resolvable: true) @key(fields: "pId", resolvable: false) @key(fields: "compositeId { one two }", resolvable: false) @key(fields: "id compositeId { two three }", resolvable: false) { id: ID! pId: ID! compositeId: CompositeID! name: String! } type CompositeID { one: ID! two: ID! three: ID! } ` ), resolvers: { A: { __resolveReference: (reference) => { const obj = data.a[reference.id]; if (!obj) { return null; } return { __typename: "A", id: obj.id, pId: obj.pId, compositeId: obj.compositeId, name: obj.name }; } } } }); var b = testkit.createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.5" import: ["@key", "@requires", "@external"] ) type Query { b: B } type B @key(fields: "id") { id: ID! a: [A!]! } type A @key(fields: "compositeId { one two }", resolvable: false) @key(fields: "id compositeId { two three }", resolvable: true) @key(fields: "pId", resolvable: false) @key(fields: "id", resolvable: false) { id: ID! pId: ID! compositeId: CompositeID! name: String! @external nameInB: String! @requires(fields: "name") } type CompositeID { one: ID! two: ID! three: ID! } ` ), resolvers: { Query: { b: () => { return { __typename: "B", id: data.b["100"].id, a: data.b["100"].a }; } }, B: { __resolveReference: (reference) => { const obj = data.b[reference.id]; if (!obj) { return null; } return { __typename: "B", id: obj.id, a: obj.a }; }, a: ({ a }) => { return a.map((id) => { const obj = data.a[id]; if (!obj) { return null; } return { __typename: "A", id: obj.id, pId: obj.pId, compositeId: obj.compositeId }; }); } }, A: { __resolveReference: (reference) => { const obj = data.a[reference.id]; if (!obj) { return null; } if (reference.name) { return { __typename: "A", id: obj.id, pId: obj.pId, compositeId: obj.compositeId, name: reference.name }; } return { __typename: "A", id: obj.id, pId: obj.pId, compositeId: obj.compositeId }; }, nameInB: ({ name }) => { if (!name) { throw new Error("A.name was not provided"); } return `b.a.nameInB ${name}`; } } } }); var test = [ testkit.createTest( /* GraphQL */ ` query { b { id a { id name nameInB } } } `, { data: { b: { id: "100", a: [ { id: "1", name: "a.1", nameInB: "b.a.nameInB a.1" } ] } } } ) ]; var index = testkit.serve("keys-mashup", [a, b], test); exports.default = index;