in compiler/crates/graphql-ir/src/transform.rs [61:89]
fn default_transform_fragment(
&mut self,
fragment: &FragmentDefinition,
) -> Transformed<FragmentDefinition> {
let selections = self.transform_selections(&fragment.selections);
let directives = self.transform_directives(&fragment.directives);
let variable_definitions =
self.transform_variable_definitions(&fragment.variable_definitions);
// Special-case for empty selections
if let TransformedValue::Replace(selections) = &selections {
if !Self::RETAIN_EMPTY_SELECTION_SETS && selections.is_empty() {
return Transformed::Delete;
}
}
if selections.should_keep()
&& directives.should_keep()
&& variable_definitions.should_keep()
{
return Transformed::Keep;
}
Transformed::Replace(FragmentDefinition {
directives: directives.replace_or_else(|| fragment.directives.clone()),
selections: selections.replace_or_else(|| fragment.selections.clone()),
..fragment.clone()
})
}