@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
305 lines (287 loc) • 5.41 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 users = [
{
id: "u1",
name: "u1-name",
address: "a1"
},
{
id: "u2",
name: "u2-name",
address: "a2"
}
];
const addresses = [
{
__typename: "HomeAddress",
id: "a1",
city: "a1-city",
country: "a1-country"
},
{
__typename: "WorkAddress",
id: "a2",
city: "a2-city",
country: "a2-country"
}
];
var a = createSubgraph("a", {
typeDefs: (
/* GraphQL */
`
extend schema
type Query {
a: User
}
interface Address {
id: ID!
}
type HomeAddress implements Address {
id: ID!
city: String
}
type WorkAddress implements Address {
id: ID!
city: String
}
type User {
id: ID!
name: String!
address: Address
city: String
country: String
}
`
),
resolvers: {
Query: {
a() {
const user = users[0];
return {
id: user.id,
name: user.name
};
}
},
User: {
__resolveReference(key) {
const user = users.find((user2) => user2.id === key.id);
if (!user) {
return null;
}
if (key.address?.id) {
return {
id: user.id,
name: user.name,
address: {
id: user.address
}
};
}
return {
id: user.id,
name: user.name
};
},
city(user) {
return addresses.find((address) => address.id === user.address.id)?.city;
},
country(user) {
return addresses.find((address) => address.id === user?.address?.id)?.country;
}
},
HomeAddress: {
__resolveReference(key) {
return addresses.find((address) => address.id === key.id);
}
},
WorkAddress: {
__resolveReference(key) {
return addresses.find((address) => address.id === key.id);
}
}
}
});
var b = createSubgraph("b", {
typeDefs: (
/* GraphQL */
`
extend schema
type Query {
b: User
}
interface Address {
id: ID!
}
type HomeAddress implements Address {
id: ID!
city: String
}
type WorkAddress implements Address {
id: ID!
city: String
}
type SecondAddress implements Address {
id: ID!
city: String
}
type User {
id: ID!
name: String!
address: Address
}
`
),
resolvers: {
Query: {
b() {
const user = users[1];
return {
id: user.id,
name: user.name,
address: user.address
};
}
},
User: {
__resolveReference(key) {
const user = users.find((user2) => user2.id === key.id);
if (!user) {
return null;
}
return {
id: user.id,
name: user.name,
address: user.address
};
},
address(user) {
return addresses.find((address) => address.id === user.address);
}
},
HomeAddress: {
__resolveReference(key) {
return addresses.find((address) => address.id === key.id);
}
},
WorkAddress: {
__resolveReference(key) {
return addresses.find((address) => address.id === key.id);
}
}
}
});
var test = [
createTest(
/* GraphQL */
`
query {
a {
city
}
}
`,
{
data: {
a: {
city: "a1-city"
}
}
}
),
createTest(
/* GraphQL */
`
query {
b {
city
}
}
`,
{
data: {
b: {
city: "a2-city"
}
}
}
),
createTest(
/* GraphQL */
`
query {
a {
country
}
}
`,
{
data: {
a: {
country: null
}
}
}
),
createTest(
/* GraphQL */
`
query {
a {
address {
__typename
id
}
}
}
`,
{
data: {
a: {
address: {
__typename: "HomeAddress",
id: "a1"
}
}
}
}
),
createTest(
/* GraphQL */
`
query {
b {
address {
__typename
id
}
}
}
`,
{
data: {
b: {
address: {
__typename: "WorkAddress",
id: "a2"
}
}
}
}
)
];
var index = serve("requires-interface", [a, b], test);
export { index as default };