Skip to content

Commit

Permalink
add disable_resolver_reader_ast feature flag
Browse files Browse the repository at this point in the history
Reviewed By: DataDataDataViz

Differential Revision: D54307293

fbshipit-source-id: a77bc5234ac4c23726a9442a655d4f8338e9cd87
  • Loading branch information
voideanvalue authored and facebook-github-bot committed Mar 4, 2024
1 parent 14314f9 commit 57230b4
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 1 deletion.
5 changes: 5 additions & 0 deletions compiler/crates/common/src/feature_flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,11 @@ pub struct FeatureFlags {
/// any existing examples.
#[serde(default)]
pub allow_required_in_mutation_response: FeatureFlag,

/// Mirror of `enable_resolver_normalization_ast`
/// excludes resolver metadata from reader ast
#[serde(default)]
pub disable_resolver_reader_ast: bool,
}

#[derive(Debug, Deserialize, Clone, Serialize, Default)]
Expand Down
35 changes: 34 additions & 1 deletion compiler/crates/relay-codegen/src/build_ast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -939,6 +939,14 @@ impl<'schema, 'builder, 'config> CodegenBuilder<'schema, 'builder, 'config> {

fn build_scalar_field_and_handles(&mut self, field: &ScalarField) -> Vec<Primitive> {
if let Some(resolver_metadata) = RelayResolverMetadata::find(&field.directives) {
if self.variant == CodegenVariant::Reader
&& self
.project_config
.feature_flags
.disable_resolver_reader_ast
{
return vec![self.build_scalar_field(field)];
}
return vec![self.build_scalar_backed_resolver_field(field, resolver_metadata)];
}
match self.variant {
Expand Down Expand Up @@ -1221,7 +1229,29 @@ impl<'schema, 'builder, 'config> CodegenBuilder<'schema, 'builder, 'config> {
{
let resolver_primitive = match self.variant {
CodegenVariant::Reader => {
self.build_reader_relay_resolver(resolver_metadata, Some(primitive))
if self
.project_config
.feature_flags
.disable_resolver_reader_ast
{
let scalar_field = ScalarField {
alias: resolver_metadata.field_alias.map(WithLocation::generated),
definition: WithLocation::generated(resolver_metadata.field_id),
arguments: resolver_metadata.field_arguments.clone(),
directives: frag_spread
.directives
.iter()
.filter(|directive| {
directive.name.item
!= RequiredMetadataDirective::directive_name()
})
.cloned()
.collect(),
};
self.build_scalar_field(&scalar_field)
} else {
self.build_reader_relay_resolver(resolver_metadata, Some(primitive))
}
}
// We expect all RelayResolver fragment spreads to be inlined into inline fragment spreads when generating Normalization ASTs.
CodegenVariant::Normalization => panic!(
Expand Down Expand Up @@ -1717,6 +1747,9 @@ impl<'schema, 'builder, 'config> CodegenBuilder<'schema, 'builder, 'config> {
}))
}
ClientEdgeMetadataDirective::ClientObject { type_name, location, is_model_live, has_model_instance_field, .. } => {
if self.project_config.feature_flags.disable_resolver_reader_ast {
return selections_item;
}
let concrete_type = match type_name {
Some(type_name) => Primitive::String(type_name.0),
None => Primitive::Null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ pub async fn transform_fixture(fixture: &Fixture<'_>) -> Result<String, String>
enable_strict_custom_scalars: false,
allow_required_in_mutation_response: FeatureFlag::Disabled,
allow_resolvers_in_mutation_response: FeatureFlag::Disabled,
disable_resolver_reader_ast: false,
};

let default_project_config = ProjectConfig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ pub async fn transform_fixture(fixture: &Fixture<'_>) -> Result<String, String>
enable_strict_custom_scalars: false,
allow_required_in_mutation_response: FeatureFlag::Disabled,
allow_resolvers_in_mutation_response: FeatureFlag::Disabled,
disable_resolver_reader_ast: false,
};

let default_schema_config = SchemaConfig::default();
Expand Down

0 comments on commit 57230b4

Please sign in to comment.