@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
348 lines (329 loc) • 6.35 kB
JavaScript
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 };