Usando diretivas compostas
Faça uma diretiva modificar o comportamento de outra diretiva.
Essa funcionalidade permite usar uma diretiva quando, de outra forma, não seria possível utilizá-la devido a uma incompatibilidade de tipo (ou seja, quando uma diretiva não pode ser aplicada ao campo porque possui uma entrada diferente da saída do campo).
Por exemplo, o campo capabilities retorna [String] (um array de strings), e a diretiva @strUpperCase recebe String. Portanto, a execução da seguinte query retorna um erro devido à incompatibilidade de tipo:
query {
user(by: {id: 1}) {
capabilities @strUpperCase
}
}Com as diretivas compostas, podemos empregar a diretiva @underEachArrayItem (que itera sobre um array de elementos e aplica sua diretiva aninhada a cada um deles) para preparar o terreno antes que @strUpperCase seja executada, fazendo-a receber um único elemento (do tipo String).
A query acima pode ser satisfeita da seguinte forma:
query {
user(by: {id: 1}) {
capabilities
@underEachArrayItem
@strUpperCase
}
}Meta-diretivas
Cada meta-diretiva pode afetar (ou "aninhar") múltiplas diretivas ao mesmo tempo. As diretivas afetadas são indicadas pelo argumento affectDirectivesUnderPos, que recebe um array de inteiros positivos, cada um definindo a posição relativa da diretiva afetada.
Por padrão, o argumento affectDirectivesUnderPos tem o valor padrão [1], o que significa que afetará a diretiva imediatamente ao lado.
No exemplo abaixo, temos:
@underEachArrayItemé a meta-diretiva@strTranslateestá aninhada sob@underEachArrayItem(valor padrão implícitoaffectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}No exemplo abaixo, temos em vez disso:
@strTranslatee@strUpperCaseestão aninhadas sob@underEachArrayItem(conforme indicado pelas posições relativas[1, 2]no argumentoaffectDirectivesUnderPos)
{
someField
@underEachArrayItem(affectDirectivesUnderPos: [1, 2])
@strTranslate
@strUpperCase
}Meta-diretivas também podem ser aninhadas dentro de outras meta-diretivas.
No exemplo abaixo, temos:
@underEachArrayItemé a meta-diretiva mais externa@underJSONObjectPropertyestá aninhada sob@underEachArrayItem@strUpperCaseestá aninhada sob@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
}Configuração
Para habilitar ou desabilitar as diretivas compostas no schema GraphQL, acesse o módulo "Composable Directives" na página de Configurações e marque/desmarque a caixa de seleção Enable composable directives?:

Para habilitar ou desabilitar as diretivas compostas em um endpoint específico, selecione a opção desejada no bloco "Composable Directives" da Schema Configuration correspondente:
