facebook/relay · error

Fragment spreads in updatable queries should have TypeCondit

Error message

Fragment spreads in updatable queries should have TypeConditionInfo

What it means

Type-generation invariant in make_prop (relay-typegen visit.rs): a fragment spread inside an @updatable query must carry TypeConditionInfo on its assignable directive data so typegen knows the spread's type condition. Firing means an updatable fragment spread was constructed without that metadata, breaking generation of updatable query typings.

Source

Thrown at compiler/crates/relay-typegen/src/visit.rs:2031

                    } else {
                        match typegen_context.project_config.typegen_config.language {
                            TypegenLanguage::Flow | TypegenLanguage::JavaScript => {
                                AST::RawType(intern!("null | void"))
                            }
                            TypegenLanguage::TypeScript => {
                                AST::RawType(intern!("null | undefined"))
                            }
                        }
                    }
                } else {
                    let setter_parameter = AST::Union(
                                  SortedASTList::new(
                                  just_fragments
                                      .iter()
                                      .map(|fragment_spread| {
                                          let type_condition_info =  fragment_spread
                                              .type_condition_info
                                              .expect("Fragment spreads in updatable queries should have TypeConditionInfo");
                                          let (key, value) = match type_condition_info {
                                              TypeConditionInfo::Abstract => (format!("__is{}", fragment_spread.fragment_name).intern(), AST::String),
                                              TypeConditionInfo::Concrete { concrete_type } => ("__typename".intern(), AST::StringLiteral(StringLiteral(concrete_type))),
                                          };
                                          let fragment_spread_or_concrete_type_marker = Prop::KeyValuePair(KeyValuePairProp {
                                              key,
                                              value,
                                              read_only: true,
                                              optional: false,
                                          });
                                          let assignable_fragment_spread_ref = Prop::KeyValuePair(KeyValuePairProp {
                                              key: *KEY_FRAGMENT_SPREADS,
                                              value: AST::FragmentReference(
                                                  SortedStringKeyList::new(vec![fragment_spread.fragment_name.0]),
                                              ),
                                              read_only: true,
                                              optional: false,
                                          });

View on GitHub (pinned to 668b1b85e0)

Solutions

  1. Ensure fragment spreads in updatable queries get the assignable directive with TypeConditionInfo data during transforms
  2. Check the transform that creates @updatable spreads attaches the type condition payload
  3. Validate spread metadata before invoking typegen and emit a diagnostic
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at compiler/crates/relay-typegen/src/visit.rs:2031 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of facebook/relay@668b1b85e0 (2026-09-02). Data as JSON: /api/errors/6f063db3a7184b5f. Report an issue: GitHub.