@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
260 lines (248 loc) • 4.33 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",
age: 11,
friends: ["u2"]
},
{
id: "u2",
age: 22,
friends: ["u1"]
}
];
var friends = createSubgraph("friends", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@inaccessible", "@shareable"]
)
type Query {
usersInFriends: [User!]!
}
type User @key(fields: "id") {
id: ID
friends(type: FriendType = FAMILY @inaccessible): [User!]!
type: FriendType
}
enum FriendType {
FAMILY @inaccessible
FRIEND
}
`
),
resolvers: {
Query: {
usersInFriends() {
return users.map((u) => ({
id: u.id,
friends: u.friends
}));
}
},
User: {
__resolveReference(key) {
const user = users.find((u) => u.id === key.id);
if (!user) {
return null;
}
return {
id: user.id,
friends: user.friends
};
},
friends(user) {
return user.friends.map((id) => {
const friend = users.find((u) => u.id === id);
if (!friend) {
return null;
}
return {
id: friend.id,
friends: friend.friends
};
});
},
type() {
return "FAMILY";
}
}
}
});
var age = createSubgraph("age", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@inaccessible", "@shareable"]
)
type Query {
usersInAge: [User!]! @shareable
}
type User @key(fields: "id") {
id: ID
age: Int
}
`
),
resolvers: {
Query: {
usersInAge() {
return users.map((u) => ({
id: u.id,
age: u.age
}));
}
},
User: {
__resolveReference(key) {
const user = users.find((u) => u.id === key.id);
if (!user) {
return null;
}
return {
id: user.id,
age: user.age
};
}
}
}
});
var test = [
createTest(
/* GraphQL */
`
query {
usersInAge {
id
friends {
id
}
}
}
`,
{
data: {
usersInAge: [
{
id: "u1",
friends: [
{
id: "u2"
}
]
},
{
id: "u2",
friends: [
{
id: "u1"
}
]
}
]
}
}
),
createTest(
/* GraphQL */
`
query {
usersInFriends {
id
friends {
id
}
}
}
`,
{
data: {
usersInFriends: [
{
id: "u1",
friends: [
{
id: "u2"
}
]
},
{
id: "u2",
friends: [
{
id: "u1"
}
]
}
]
}
}
),
createTest(
/* GraphQL */
`
query {
usersInFriends {
id
friends(type: FRIEND) {
id
}
}
}
`,
{
errors: true
}
),
createTest(
/* GraphQL */
`
query {
usersInFriends {
id
friends {
id
type
}
}
}
`,
{
data: {
usersInFriends: [
{
id: "u1",
friends: [
{
id: "u2",
type: null
}
]
},
{
id: "u2",
friends: [
{
id: "u1",
type: null
}
]
}
]
}
}
)
];
var index = serve("simple-inaccessible", [friends, age], test);
export { index as default };