facebook/relay · error

Expected handler_arg to have been previously validated.

Error message

Expected handler_arg to have been previously validated.

What it means

Unwrap guard in extract_values_from_handle_field_directive_helper: handler_arg (the handler name on @handle_field) must be a string literal, guaranteed by the earlier validate_connections validation pass. Firing indicates the handler argument is missing or non-literal because the directive skipped validation.

Source

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

) -> 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,
            _ => unreachable!("Expected filters_arg to have been previously validated.",),
        },
        None => default_filters,
    };

View on GitHub (pinned to 668b1b85e0)

Solutions

  1. Run validate_connections before this extraction step
  2. Ensure hander_arg_name lookup matches the directive argument actually set
  3. Provide a default_handler fallback when the argument is absent
Defensive patterns

Strategy: validation

When it happens

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