From 294cb834ade19050059b9d6a36c9142ec89f8080 Mon Sep 17 00:00:00 2001 From: Jordan Eldredge Date: Fri, 12 Jul 2024 14:41:54 -0700 Subject: [PATCH] Ensure we strip alias metadata from selections within inline fragments Reviewed By: josephsavona Differential Revision: D59662483 fbshipit-source-id: dcbeb109b05d174cd13b28ffa30bcfc0ac208e99 --- ...iased_fragment_in_inline_fragment.expected | 21 ++++------------- ...t_alias_nested_in_inline_fragment.expected | 23 +++++-------------- .../src/fragment_alias_directive.rs | 11 +++++---- 3 files changed, 18 insertions(+), 37 deletions(-) diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/aliased_fragment_in_inline_fragment.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/aliased_fragment_in_inline_fragment.expected index 7b2729413353e..3c41bf64b6f90 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/aliased_fragment_in_inline_fragment.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/aliased_fragment_in_inline_fragment.expected @@ -57,22 +57,11 @@ fragment aliasedFragmentInInlineFragmentInner on User { "plural": false, "selections": [ { - "fragment": { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - } - ], - "type": "User", - "abstractKey": null - }, - "kind": "AliasedInlineFragmentSpread", - "name": "aliasedFragmentInInlineFragmentInner" + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null }, { "alias": null, diff --git a/compiler/crates/relay-compiler/tests/relay_compiler_integration/fixtures/fragment_alias_nested_in_inline_fragment.expected b/compiler/crates/relay-compiler/tests/relay_compiler_integration/fixtures/fragment_alias_nested_in_inline_fragment.expected index 1196bda709f57..f3933e4870b57 100644 --- a/compiler/crates/relay-compiler/tests/relay_compiler_integration/fixtures/fragment_alias_nested_in_inline_fragment.expected +++ b/compiler/crates/relay-compiler/tests/relay_compiler_integration/fixtures/fragment_alias_nested_in_inline_fragment.expected @@ -153,7 +153,7 @@ module.exports = ((node/*: any*/)/*: Fragment< //- __generated__/fooQuery.graphql.js /** - * SignedSource<<8480be3df692c8fedc9ff4e7bc331f0b>> + * SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -220,22 +220,11 @@ var node/*: ConcreteRequest*/ = { "plural": false, "selections": [ { - "fragment": { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - } - ], - "type": "User", - "abstractKey": null - }, - "kind": "AliasedInlineFragmentSpread", - "name": "fooInner" + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null } ], "storageKey": null diff --git a/compiler/crates/relay-transforms/src/fragment_alias_directive.rs b/compiler/crates/relay-transforms/src/fragment_alias_directive.rs index ca5cc1e18bb48..d03cbd03cbee7 100644 --- a/compiler/crates/relay-transforms/src/fragment_alias_directive.rs +++ b/compiler/crates/relay-transforms/src/fragment_alias_directive.rs @@ -86,13 +86,16 @@ impl Transformer for AliasedInlineFragmentRemovalTransform { fn transform_inline_fragment(&mut self, fragment: &InlineFragment) -> Transformed { if let Some(metadata) = FragmentAliasMetadata::find(&fragment.directives) { + let selections = self + .transform_selections(&fragment.selections) + .replace_or_else(|| fragment.selections.clone()); if metadata.wraps_spread { - if fragment.selections.len() != 1 { + if selections.len() != 1 { panic!( "Expected exactly one selection in an aliased inline fragment wrapping a spread. This is a bug in Relay." ); } - Transformed::Replace(fragment.selections[0].clone()) + Transformed::Replace(selections[0].clone()) } else { let directives = fragment .directives @@ -105,12 +108,12 @@ impl Transformer for AliasedInlineFragmentRemovalTransform { Transformed::Replace(Selection::InlineFragment(Arc::new(InlineFragment { directives, type_condition: fragment.type_condition, - selections: fragment.selections.clone(), + selections, spread_location: fragment.spread_location, }))) } } else { - Transformed::Keep + self.default_transform_inline_fragment(fragment) } } }