UNPKG

@graphql-hive/federation-gateway-audit

Version:
348 lines (329 loc) 6.35 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 common = { __typename: "Common", label: "common label" }; const onlyA = { __typename: "OnlyA", a: "only a" }; const onlyB = { __typename: "OnlyB", b: "only b" }; const container = { id: "container-1" }; const aActions = [common, onlyA]; const bActions = [common, onlyB]; const sharedActions = [common]; var a = createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@shareable"] ) type Query { rootA: Container shared: Container @shareable } type Container @key(fields: "id") { id: ID! wrapper: Wrapper @shareable } type Wrapper @shareable { actions: [Action!]! @shareable } union Action = Common | OnlyA type Common @shareable { label: String } type OnlyA { a: String } ` ), resolvers: { Query: { rootA: () => ({ ...container, actions: aActions }), shared: () => ({ ...container, actions: sharedActions }) }, Container: { __resolveReference(key) { if (key.id !== container.id) { return null; } return { ...container, actions: aActions }; }, wrapper(parent) { return { actions: parent.actions ?? aActions }; } }, Action: { __resolveType(value) { return value.__typename; } } } }); var b = createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@shareable"] ) type Query { rootB: Container shared: Container @shareable } type Container @key(fields: "id") { id: ID! wrapper: Wrapper @shareable bWrapper: Wrapper } type Wrapper @shareable { actions: [Action!]! @shareable } union Action = Common | OnlyB type Common @shareable { label: String } type OnlyB { b: String } ` ), resolvers: { Query: { rootB: () => ({ ...container, actions: bActions }), shared: () => ({ ...container, actions: sharedActions }) }, Container: { __resolveReference(key) { if (key.id !== container.id) { return null; } return { ...container, actions: bActions }; }, wrapper(parent) { return { actions: parent.actions ?? bActions }; }, bWrapper() { return { actions: bActions }; } }, Action: { __resolveType(value) { return value.__typename; } } } }); var test = [ createTest( /* GraphQL */ ` query { rootA { wrapper { actions { __typename ... on Common { label } ... on OnlyA { a } ... on OnlyB { b } } } } } `, { data: { rootA: { wrapper: { actions: [ { __typename: common.__typename, label: common.label }, { __typename: onlyA.__typename, a: null } ] } } } } ), createTest( /* GraphQL */ ` query { rootB { wrapper { actions { __typename ... on Common { label } ... on OnlyA { a } ... on OnlyB { b } } } } } `, { data: { rootB: { wrapper: { actions: [ { __typename: common.__typename, label: common.label }, { __typename: onlyB.__typename, b: null } ] } } } } ), createTest( /* GraphQL */ ` query { rootA { wrapper { actions { __typename ... on OnlyB { b } } } } } `, { data: { rootA: { wrapper: { actions: [ { __typename: common.__typename }, { __typename: onlyA.__typename } ] } } } } ), createTest( /* GraphQL */ ` query { shared { wrapper { actions { __typename ... on Common { label } ... on OnlyA { a } ... on OnlyB { b } } } } } `, { data: { shared: { wrapper: { actions: [ { __typename: common.__typename, label: common.label } ] } } } } ), createTest( /* GraphQL */ ` query { rootA { bWrapper { actions { __typename ... on Common { label } ... on OnlyA { a } ... on OnlyB { b } } } } } `, { data: { rootA: { bWrapper: { actions: [ { __typename: common.__typename, label: common.label }, { __typename: onlyB.__typename, b: onlyB.b } ] } } } } ) ]; var index = serve("partial-union-complex", [a, b], test); export { index as default };