@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
262 lines (249 loc) • 4.36 kB
JavaScript
'use strict';
var testkit = require('./testkit-CAf-AsDy.cjs');
require('@apollo/composition');
require('graphql');
require('fets');
require('@apollo/subgraph');
require('graphql-yoga');
const users = [
{
id: "u1",
age: 11,
friends: ["u2"]
},
{
id: "u2",
age: 22,
friends: ["u1"]
}
];
var friends = testkit.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 = testkit.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 = [
testkit.createTest(
/* GraphQL */
`
query {
usersInAge {
id
friends {
id
}
}
}
`,
{
data: {
usersInAge: [
{
id: "u1",
friends: [
{
id: "u2"
}
]
},
{
id: "u2",
friends: [
{
id: "u1"
}
]
}
]
}
}
),
testkit.createTest(
/* GraphQL */
`
query {
usersInFriends {
id
friends {
id
}
}
}
`,
{
data: {
usersInFriends: [
{
id: "u1",
friends: [
{
id: "u2"
}
]
},
{
id: "u2",
friends: [
{
id: "u1"
}
]
}
]
}
}
),
testkit.createTest(
/* GraphQL */
`
query {
usersInFriends {
id
friends(type: FRIEND) {
id
}
}
}
`,
{
errors: true
}
),
testkit.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 = testkit.serve("simple-inaccessible", [friends, age], test);
exports.default = index;