Usar directivas componibles
Haz que una directiva modifique el comportamiento de otra directiva.
Esta funcionalidad permite poder usar una directiva, cuando de otra manera no podríamos utilizarla debido a un desajuste de tipos (es decir, cuando una directiva no puede aplicarse al campo, porque tiene un input que es diferente de la salida del campo).
Por ejemplo, el campo capabilities devuelve [String] (un array de strings), y la directiva @strUpperCase recibe String. Por tanto, ejecutar la siguiente consulta devuelve un error debido al desajuste de tipos:
query {
user(by: {id: 1}) {
capabilities @strUpperCase
}
}Con directivas componibles, podemos emplear la directiva @underEachArrayItem (que itera sobre un array de elementos, y aplica su directiva anidada a cada uno de ellos) para preparar el terreno antes de que se ejecute @strUpperCase, haciendo que reciba un único elemento (de tipo String).
La consulta de arriba puede satisfacerse así:
query {
user(by: {id: 1}) {
capabilities
@underEachArrayItem
@strUpperCase
}
}Meta directivas
Cada meta directiva puede afectar (o "anidar") múltiples directivas a la vez. Las directivas que se ven afectadas se indican mediante el argumento affectDirectivesUnderPos, que recibe un array de enteros positivos, definiendo cada uno de ellos la posición relativa de la directiva afectada.
Por defecto, el argumento affectDirectivesUnderPos tiene el valor por defecto [1], lo que significa que afectará a la directiva justo al lado.
En el ejemplo de abajo, tenemos:
@underEachArrayItemes la meta directiva@strTranslateestá anidada bajo@underEachArrayItem(valor por defecto implícitoaffectDirectivesUnderPos: [1])
{
someField
@underEachArrayItem
@strTranslate
}En el ejemplo de abajo, tenemos en su lugar:
@strTranslatey@strUpperCaseestán anidadas bajo@underEachArrayItem(como indican las posiciones relativas[1, 2]en el argumentoaffectDirectivesUnderPos)
{
someField
@underEachArrayItem(affectDirectivesUnderPos: [1, 2])
@strTranslate
@strUpperCase
}Las meta directivas también pueden anidarse dentro de meta directivas.
En el ejemplo de abajo, tenemos:
@underEachArrayItemes la meta directiva más externa@underJSONObjectPropertyestá anidada bajo@underEachArrayItem@strUpperCaseestá anidada bajo@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
}Configuración
Para habilitar o deshabilitar las directivas componibles en el esquema GraphQL, ve al módulo "Composable Directives" en la página de Ajustes, y marca/desmarca la casilla Enable composable directives?:

Para habilitar o deshabilitar las directivas componibles en un endpoint específico, selecciona la opción deseada en el bloque "Composable Directives" desde la correspondiente Schema Configuration:
