@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
338 lines (318 loc) • 6.98 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$1 = [
{
id: "1",
pid: "p1",
categoryId: "c1",
price: 100
},
{
id: "2",
pid: "p2",
categoryId: "c2",
price: 200
}
];
const categories = [
{
id: "c1",
tag: "t1",
mainProduct: "1"
},
{
id: "c2",
tag: "t2",
mainProduct: "2"
}
];
var link = createSubgraph("link", {
typeDefs: (
/* GraphQL */
`
extend schema
type Product {
id: String!
pid: String!
}
`
),
resolvers: {
Product: {
__resolveReference(key) {
if ("pid" in key) {
return products$1.find(
(product) => product.id === key.id && product.pid === key.pid
);
}
return products$1.find((product) => product.id === key.id);
}
}
}
});
var list = createSubgraph("list", {
typeDefs: (
/* GraphQL */
`
extend schema
type ProductList {
products: [Product!]!
first: Product
selected: Product
}
type Product {
id: String!
pid: String
}
`
),
resolvers: {
ProductList: {
__resolveReference(key) {
const prods = products$1.filter(
(p) => key.products.some((k) => k.id === p.id && k.pid === p.pid)
);
return {
products: prods,
first: prods[0],
selected: prods[1]
};
}
},
Product: {
__resolveReference(key) {
return products$1.find(
(product) => product.id === key.id && product.pid === key.pid
);
}
}
}
});
var price = createSubgraph("price", {
typeDefs: (
/* GraphQL */
`
extend schema
type ProductList
{
products: [Product!]!
first: Product
selected: Product
}
type Product {
id: String!
price: Price
pid: String
category: Category
}
type Category {
id: String!
tag: String
}
type Price {
price: Float!
}
`
),
resolvers: {
Product: {
__resolveReference(key) {
return products$1.find((p) => {
if (p.id === key.id && p.pid === key.pid) {
const cat = categories.find((c) => c.id === p.categoryId);
if (cat && cat.id === key.category.id && cat.tag === key.category.tag) {
return true;
}
}
return false;
});
},
price(product) {
return {
price: product.price
};
},
category(product) {
return categories.find((c) => c.id === product.categoryId);
}
},
Category: {
__resolveReference(key) {
return categories.find((c) => c.id === key.id);
}
},
ProductList: {
__resolveReference(key) {
const prods = products$1.filter(
(p) => key.products.some((k) => {
if (p.id === k.id && p.pid === k.pid) {
const cat = categories.find((c) => c.id === p.categoryId);
if (cat && cat.id === k.category.id && cat.tag === k.category.tag) {
return true;
}
}
return false;
})
);
return {
products: prods,
first: prods[0],
selected: products$1.find((p) => p.id === key.selected.id)
};
}
}
}
});
var products = createSubgraph("products", {
typeDefs: (
/* GraphQL */
`
extend schema
type Query {
topProducts: ProductList!
}
type ProductList {
products: [Product!]!
}
type Product {
id: String!
category: Category
}
type Category {
mainProduct: Product!
id: String!
tag: String
}
`
),
resolvers: {
Query: {
topProducts() {
return {
products: products$1
};
}
},
ProductList: {
__resolveReference(key) {
return {
products: products$1.filter(
(p) => key.products.some((k) => k.id === p.id)
)
};
}
},
Product: {
__resolveReference(key) {
return products$1.find((product) => product.id === key.id);
},
category(product) {
return categories.find((c) => c.id === product.categoryId);
}
},
Category: {
__resolveReference(key) {
return categories.find((c) => c.id === key.id);
},
mainProduct(category) {
return products$1.find((p) => p.id === category.mainProduct);
}
}
}
});
var test = [
createTest(
/* GraphQL */
`
query {
topProducts {
products {
id
pid
price {
price
}
category {
mainProduct {
id
}
id
tag
}
}
selected {
id
}
first {
id
}
}
}
`,
{
data: {
topProducts: {
products: [
{
id: "1",
pid: "p1",
price: {
price: 100
},
category: {
mainProduct: {
id: "1"
},
id: "c1",
tag: "t1"
}
},
{
id: "2",
pid: "p2",
price: {
price: 200
},
category: {
mainProduct: {
id: "2"
},
id: "c2",
tag: "t2"
}
}
],
selected: {
id: "2"
},
first: {
id: "1"
}
}
}
}
)
];
var index = serve(
"complex-entity-call",
[link, list, price, products],
test
);
export { index as default };