@graphql-hive/federation-gateway-audit
Version:
Audit tool for Apollo Federation Gateway
228 lines (211 loc) • 3.99 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';
var author = createSubgraph("b", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"])
type Query {
author: Author
}
type Author @key(fields: "id") {
id: ID!
name: String
}
extend type Video @key(fields: "id") {
id: ID!
authorName: String
}
`
),
resolvers: {
Query: {
author() {
return { id: "1", name: `name for 1` };
}
},
Author: {
__resolveReference(ref) {
return { id: ref.id, name: `name for ${ref.id}` };
}
},
Video: {
authorName() {
return "John Doe";
}
}
}
});
var media = createSubgraph("a", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(url: "https://specs.apollo.dev/federation/v2.3", import: ["@key"])
type Query {
media: Media
}
interface Media @key(fields: "id") {
id: ID!
title: String
}
type Video implements Media @key(fields: "id") {
id: ID!
title: String
duration: Int
}
type Article implements Media @key(fields: "id") {
id: ID!
title: String
wordCount: Int
}
`
),
resolvers: {
Query: {
media() {
return {
id: "1",
title: "title for 1",
duration: 100
};
}
},
Media: {
__resolveType() {
return "Video";
}
},
Video: {
__resolveReference(ref) {
return {
id: ref.id,
title: `title for ${ref.id}`,
duration: 100 * Number(ref.id)
};
}
},
Article: {
__resolveReference(ref) {
return {
id: ref.id,
title: `title for ${ref.id}`,
wordCount: 900 * Number(ref.id)
};
}
}
}
});
var playlist = createSubgraph("c", {
typeDefs: (
/* GraphQL */
`
extend schema
@link(
url: "https://specs.apollo.dev/federation/v2.3"
import: ["@key", "@interfaceObject"]
)
type Query {
playlist: Playlist
}
type Playlist @key(fields: "id") {
id: ID!
name: String
media: Media
}
type Media @key(fields: "id") @interfaceObject {
id: ID!
}
`
),
resolvers: {
Query: {
playlist() {
return { id: "1", name: "name for 1", media: { id: "1" } };
}
},
Playlist: {
__resolveReference(ref) {
return {
id: ref.id,
name: `name for ${ref.id}`,
media: { id: ref.id }
};
}
},
Media: {
__resolveReference(ref) {
return {
id: ref.id
};
}
}
}
});
var test = [
createTest(
/* GraphQL */
`
query {
media {
id
title
... on Video {
duration
authorName
}
... on Article {
wordCount
}
}
author {
id
name
}
playlist {
id
name
media {
id
... on Video {
duration
}
}
}
}
`,
{
data: {
media: {
id: "1",
title: "title for 1",
duration: 100,
authorName: "John Doe"
},
author: {
id: "1",
name: "name for 1"
},
playlist: {
id: "1",
name: "name for 1",
media: {
id: "1",
duration: 100
}
}
}
}
)
];
var index = serve(
"interface-object-indirect-extension",
[author, media, playlist],
test
);
export { index as default };