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
- Ensure validate_connections runs before handle_fields transforms in the compiler pipeline
- Verify @handle_field directives are only introduced internally with literal string keys
- 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.