@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
235 lines (221 loc) • 3.52 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 products = [
{
__typename: "Bread",
id: "p1",
name: "Bread"
}
];
var a = createSubgraph("a", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@interfaceObject"]
)
interface Node @key(fields: "id") {
id: ID!
}
type Product @key(fields: "id", resolvable: false) @interfaceObject {
id: ID!
}
type Query {
a: Node
product: Product!
}
`
),
resolvers: {
Query: {
a() {
return { __typename: "Node", id: "n1" };
},
product() {
return { __typename: "Product", id: products[0].id };
}
},
Node: {
__resolveReference() {
throw new Error("Not resolvable as it is an interface object");
}
}
}
});
var b = createSubgraph("b", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@interfaceObject"]
)
type Node @key(fields: "id", resolvable: false) @interfaceObject {
id: ID!
field: String
}
interface Product @key(fields: "id") {
id: ID!
}
type Bread implements Product @key(fields: "id") {
id: ID!
name: String!
}
type Query {
b: Node
}
`
),
resolvers: {
Query: {
b() {
return { __typename: "Node", id: "n1" };
}
},
Node: {
__resolveReference() {
throw new Error("Not resolvable");
},
field() {
return "foo";
}
},
Product: {
__resolveReference(key) {
return products.find((p) => p.id === key.id);
}
},
Bread: {
__resolveReference(key) {
return products.find((p) => p.id === key.id);
}
}
}
});
var test = [
createTest(
/* GraphQL */
`
query {
b {
id
field
}
}
`,
{
data: {
b: {
id: "n1",
field: "foo"
}
}
}
),
createTest(
/* GraphQL */
`
query {
a {
field
}
}
`,
{
data: null,
errors: true
}
),
createTest(
/* GraphQL */
`
query {
b {
id
}
}
`,
{
data: {
b: {
id: "n1"
}
}
}
),
createTest(
/* GraphQL */
`
query {
a {
id
}
}
`,
{
data: {
a: null
},
errors: true
}
),
createTest(
/* GraphQL */
`
query {
product {
id
}
}
`,
{
data: {
product: {
id: "p1"
}
}
}
),
createTest(
/* GraphQL */
`
query {
product {
id
name
}
}
`,
{
errors: true
}
),
createTest(
/* GraphQL */
`
query {
product {
... on Bread {
id
}
}
}
`,
{
data: {
product: {
id: "p1"
}
}
}
)
];
var index = serve("non-resolvable-interface-object", [a, b], test);
export { index as default };