facebook/relay · error

Expected key_arg to have been previously validated.

Error message

Expected key_arg to have been previously validated.

What it means

Unwrap guard in extract_values_from_handle_field_directive_helper: key_arg must already be a string literal because the @handle_field @connection arguments were validated earlier by the validate_connections validation step. Firing means the directive reached transform code without that validation pass, e.g. an externally injected or malformed @handle_field directive lacking a literal key.

Source

Thrown at compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs:221

    handle_field_directive: &Directive,
    hanlder_arg_name: ArgumentName,
    default_handler: Option<StringKey>,
    default_filters: Option<Vec<StringKey>>,
) -> HandleFieldDirectiveValues {
    let HandleFieldDirectiveArgs {
        handler_arg,
        filters_arg,
        key_arg,
        dynamic_key_arg,
        handle_args_arg,
    } = extract_handle_field_directive_args_helper(handle_field_directive, hanlder_arg_name);

    // We expect these values to be available since they should've been
    // validated first as part of validate_connections validation step.
    let key = match key_arg {
        Some((_, value)) => value
            .get_string_literal()
            .expect("Expected key_arg to have been previously validated."),
        None => "".intern(),
    };
    let handle= match handler_arg {
         Some((_, value)) => value.get_string_literal().expect("Expected handler_arg to have been previously validated."),
         None => default_handler.expect("Expected handler_arg to have been previously validated or a default to have been provided."),
     };
    let filters = match filters_arg {
        Some((_, value)) => match value {
            ConstantValue::List(list_val) => Some(
                list_val
                    .iter()
                    .map(|val| {
                        val.get_string_literal()
                            .expect("Expected filters_arg to have been previously validated.")
                    })
                    .collect::<Vec<_>>(),
            ),
            ConstantValue::Null() => None,

View on GitHub (pinned to 668b1b85e0)

Solutions

  1. Ensure validate_connections runs before handle_fields transforms in the compiler pipeline
  2. Verify @handle_field directives are only introduced internally with literal string keys
  3. Add a pre-check for string literal keys and emit a proper diagnostic instead of panicking
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at compiler/crates/relay-transforms/src/handle_fields/handle_field_util.rs:221 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/e8c9c1a750bbbfff. Report an issue: GitHub.