UNPKG

@graphql-hive/federation-gateway-audit

Version:
239 lines (227 loc) 4.69 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 products = [ { id: "p1", price: 699.99 } ]; var a = createSubgraph("a", { typeDefs: ( /* GraphQL */ ` extend schema @link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"]) type Query { product: Product } type Product @key(fields: "id") { id: ID! price: Float! } ` ), resolvers: { Query: { product() { return { id: products[0].id, price: products[0].price }; } }, Product: { __resolveReference(key) { const product = products.find((product2) => product2.id === key.id); if (!product) { return null; } return { id: product.id, price: product.price }; } } } }); var b = createSubgraph("b", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@external", "@requires"] ) type Product @key(fields: "id") { id: ID! price: Float! @external isExpensive: Boolean! @requires(fields: "price") } ` ), resolvers: { Product: { __resolveReference(key) { const product = products.find((product2) => product2.id === key.id); if (!product) { return null; } if ("price" in key) { return { id: product.id, price: key.price }; } return { id: product.id }; }, isExpensive(product) { if (!product.price) { throw new Error("Price is missing"); } return product.price > 500; } } } }); var c = createSubgraph("c", { typeDefs: ( /* GraphQL */ ` extend schema @link( url: "https://specs.apollo.dev/federation/v2.3" import: ["@key", "@external", "@requires"] ) type Product @key(fields: "id") { id: ID! isExpensive: Boolean! @external include: Boolean! @requires(fields: "isExpensive") skip: Boolean! @requires(fields: "isExpensive") neverCalledInclude: Boolean! @requires(fields: "isExpensive") neverCalledSkip: Boolean! @requires(fields: "isExpensive") } ` ), resolvers: { Product: { __resolveReference(key) { const product = products.find((product2) => product2.id === key.id); if (!product) { return null; } if ("isExpensive" in key) { return { id: product.id, isExpensive: key.isExpensive }; } return { id: product.id }; }, include(product) { if (typeof product.isExpensive !== "boolean") { throw new Error("isExpensive is missing"); } return true; }, neverCalledInclude() { throw new Error("neverCalledInclude should not be called"); }, skip(product) { if (typeof product.isExpensive !== "boolean") { throw new Error("isExpensive is missing"); } return true; }, neverCalledSkip() { throw new Error("neverCalledSkip should not be called"); } } } }); var test = [ createTest( /* GraphQL */ ` query ($bool: Boolean = false) { product { price neverCalledInclude @include(if: $bool) } } `, { data: { product: { price: 699.99 } } } ), createTest( /* GraphQL */ ` query ($bool: Boolean = true) { product { price neverCalledSkip @skip(if: $bool) } } `, { data: { product: { price: 699.99 } } } ), createTest( /* GraphQL */ ` query ($bool: Boolean = true) { product { price include @include(if: $bool) } } `, { data: { product: { price: 699.99, include: true } } } ), createTest( /* GraphQL */ ` query ($bool: Boolean = false) { product { price skip @skip(if: $bool) } } `, { data: { product: { price: 699.99, skip: true } } } ) ]; var index = serve("include-skip", [a, b, c], test); export { index as default };