Gebruik van composable directives
Laat een directive het gedrag van een andere directive aanpassen.
Deze functionaliteit maakt het mogelijk om een directive te gebruiken in situaties waar dat anders niet mogelijk zou zijn vanwege een type-mismatch (d.w.z. wanneer een directive niet op een veld kan worden toegepast, omdat de invoer verschilt van de uitvoer van het veld).
Zo geeft het veld capabilities [String] terug (een array van strings), terwijl directive @strUpperCase String verwacht. Het uitvoeren van de volgende query geeft dan ook een fout vanwege de type-mismatch:
query {
user(by: {id: 1}) {
capabilities @strUpperCase
}
}Met composable directives kunnen we directive @underEachArrayItem gebruiken (die itereert over een array van elementen en zijn geneste directive op elk element toepast) om de situatie voor te bereiden voordat @strUpperCase wordt uitgevoerd, zodat het een enkel element (van het type String) ontvangt.
De bovenstaande query kan als volgt worden uitgevoerd:
query {
user(by: {id: 1}) {
capabilities
@underEachArrayItem
@strUpperCase
}
}Meta-directives
Elke meta-directive kan meerdere directives tegelijk beïnvloeden (of "nesten"). Welke directives worden beïnvloed, wordt aangegeven via het argument affectDirectivesUnderPos, dat een array van positieve gehele getallen ontvangt, waarbij elk getal de relatieve positie van de betreffende directive aangeeft.
Standaard heeft het argument affectDirectivesUnderPos de standaardwaarde [1], wat betekent dat het de directive die er direct naast staat, beïnvloedt.
In het onderstaande voorbeeld hebben we:
@underEachArrayItemis de meta-directive@strTranslateis genest onder@underEachArrayItem(impliciete standaardwaardeaffectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}In het onderstaande voorbeeld hebben we in plaats daarvan:
@strTranslateen@strUpperCasezijn genest onder@underEachArrayItem(zoals aangegeven door de relatieve posities[1, 2]in het argumentaffectDirectivesUnderPos)
{
someField
@underEachArrayItem(affectDirectivesUnderPos: [1, 2])
@strTranslate
@strUpperCase
}Meta-directives kunnen ook worden genest binnen andere meta-directives.
In het onderstaande voorbeeld hebben we:
@underEachArrayItemis de bovenste meta-directive@underJSONObjectPropertyis genest onder@underEachArrayItem@strUpperCaseis genest onder@underJSONObjectProperty
query UppercaseEntriesInsideObject {
entries: _echo(value: [
{
text: "Hello my friends"
},
{
text: "How do you like this software so far?"
}
])
@underEachArrayItem
@underJSONObjectProperty(by: { key: "text" })
@strUpperCase
}Configuratie
Om composable directives in het GraphQL-schema in of uit te schakelen, ga je naar de module "Composable Directives" op de pagina Instellingen en vink je het selectievakje Enable composable directives? aan of uit:

Om composable directives op een specifiek endpoint in of uit te schakelen, selecteer je de gewenste optie in het blok "Composable Directives" van de bijbehorende Schema Configuration:
