@theguild/federation-composition
Version:
Open Source Composition library for Apollo Federation
58 lines (51 loc) • 1.76 kB
JavaScript
import { satisfiesVersionRange } from '../utils/version.js';
export const sdl = (version) => {
const joinField = `
directive @join__field(
graph: join__Graph
requires: join__FieldSet
provides: join__FieldSet
type: String
external: Boolean
override: String
usedOverridden: Boolean
${satisfiesVersionRange(version, '>= v2.7') ? 'overrideLabel: String' : ''}
${satisfiesVersionRange(version, '>= v2.8') ? 'contextArguments: [join__ContextArgument!]' : ''}
) repeatable on FIELD_DEFINITION | INPUT_FIELD_DEFINITION
`;
const joinContextArgument = satisfiesVersionRange(version, '>= v2.8')
? `
input join__ContextArgument {
name: String!
type: String!
context: String!
selection: join__FieldValue!
}
`
: '';
const joinFieldValue = satisfiesVersionRange(version, '>= v2.8')
? `
scalar join__FieldValue
`
: '';
return `
directive @join__enumValue(graph: join__Graph!) repeatable on ENUM_VALUE
directive @join__graph(name: String!, url: String!) on ENUM_VALUE
${joinField}
${joinContextArgument}
directive @join__implements(
graph: join__Graph!
interface: String!
) repeatable on OBJECT | INTERFACE
directive @join__type(
graph: join__Graph!
key: join__FieldSet
extension: Boolean! = false
resolvable: Boolean! = true
isInterfaceObject: Boolean! = false
) repeatable on OBJECT | INTERFACE | UNION | ENUM | INPUT_OBJECT | SCALAR
directive @join__unionMember(graph: join__Graph!, member: String!) repeatable on UNION
scalar join__FieldSet
${joinFieldValue}
`;
};