@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
276 lines (261 loc) • 4.5 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",
name: "u1-name"
},
{
id: "u2",
name: "u2-name"
},
{
id: "u3",
name: "u3-name"
}
];
var a = testkit.createSubgraph("a", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@requires", "@external"]
)
type User @key(fields: "id") {
id: ID!
name: String! @external
aName: String! @requires(fields: "name")
}
type Query {
userInA: User
}
`
),
resolvers: {
Query: {
userInA() {
return users[0];
}
},
User: {
__resolveReference(key) {
const user = users.find((u) => u.id === key.id);
if (!user) {
return null;
}
if ("name" in key) {
return {
id: user.id,
name: user.name
};
}
return {
id: user.id
};
},
aName(user) {
return `a__${user.name}`;
},
name() {
return "NEVER";
}
}
}
});
var b = testkit.createSubgraph("b", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@override"]
)
type User @key(fields: "id") {
id: ID!
name: String! @override(from: "c")
}
type Query {
userInB: User
}
`
),
resolvers: {
Query: {
userInB() {
return users[1];
}
},
User: {
__resolveReference(key) {
const user = users.find((u) => u.id === key.id);
if (!user) {
return null;
}
return {
id: user.id,
name: user.name
};
}
}
}
});
var c = testkit.createSubgraph("c", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@requires", "@external"]
)
type User @key(fields: "id") {
id: ID!
name: String! @external
cName: String! @requires(fields: "name")
}
type Query {
userInC: User
}
`
),
resolvers: {
Query: {
userInC() {
return users[2];
}
},
User: {
__resolveReference(key) {
const user = users.find((u) => u.id === key.id);
if (!user) {
return null;
}
if ("name" in key) {
return {
id: user.id,
name: user.name
};
}
return {
id: user.id
};
},
name() {
return "NEVER";
},
cName(user) {
return `c__${user.name}`;
}
}
}
});
var test = [
testkit.createTest(
/* GraphQL */
`
{
userInA {
id
name
aName
cName
}
userInB {
id
name
aName
cName
}
userInC {
id
name
aName
cName
}
}
`,
{
data: {
userInA: {
id: "u1",
name: "u1-name",
aName: "a__u1-name",
cName: "c__u1-name"
},
userInB: {
id: "u2",
name: "u2-name",
aName: "a__u2-name",
cName: "c__u2-name"
},
userInC: {
id: "u3",
name: "u3-name",
aName: "a__u3-name",
cName: "c__u3-name"
}
}
}
),
testkit.createTest(
/* GraphQL */
`
query {
userInC {
cName
}
}
`,
{
data: {
userInC: {
cName: "c__u3-name"
}
}
}
),
testkit.createTest(
/* GraphQL */
`
query {
userInA {
cName
}
}
`,
{
data: {
userInA: {
cName: "c__u1-name"
}
}
}
),
testkit.createTest(
/* GraphQL */
`
query {
userInA {
aName
}
}
`,
{
data: {
userInA: {
aName: "a__u1-name"
}
}
}
)
];
var index = testkit.serve("override-with-requires", [a, b, c], test);
exports.default = index;