diff --git a/compiler/crates/graphql-ir/Cargo.toml b/compiler/crates/graphql-ir/Cargo.toml index 6f7088217c9cd..ebd71f39f1eaf 100644 --- a/compiler/crates/graphql-ir/Cargo.toml +++ b/compiler/crates/graphql-ir/Cargo.toml @@ -23,7 +23,6 @@ common = { path = "../common" } errors = { path = "../errors" } fnv = "1.0" graphql-syntax = { path = "../graphql-syntax" } -indexmap = { version = "1.7.0", features = ["rayon", "serde-1"] } intern = { path = "../intern" } lazy_static = "1.0" once_cell = "1.8" diff --git a/compiler/crates/graphql-ir/src/errors.rs b/compiler/crates/graphql-ir/src/errors.rs index e7ffa7f8a9e1c..5f3ca33c64194 100644 --- a/compiler/crates/graphql-ir/src/errors.rs +++ b/compiler/crates/graphql-ir/src/errors.rs @@ -564,9 +564,6 @@ pub enum ValidationMessage { #[error("Subscription '{subscription_name}' must have a single selection")] GenerateSubscriptionNameSingleSelectionItem { subscription_name: StringKey }, - #[error("The root of subscription '{subscription_name}' must be a simple selection.")] - GenerateSubscriptionNameSimpleSelection { subscription_name: StringKey }, - #[error( "Live query expects 'polling_interval' or 'config_id' as an argument to @live_query to for root field {query_name}" )] diff --git a/compiler/crates/relay-transforms/Cargo.toml b/compiler/crates/relay-transforms/Cargo.toml index e494e891eb446..49cfcc612a482 100644 --- a/compiler/crates/relay-transforms/Cargo.toml +++ b/compiler/crates/relay-transforms/Cargo.toml @@ -122,3 +122,7 @@ fixture-tests = { path = "../fixture-tests" } graphql-cli = { path = "../graphql-cli" } graphql-test-helpers = { path = "../graphql-test-helpers" } relay-test-schema = { path = "../relay-test-schema" } + +[features] +default = ["fb_only"] +fb_only = [] diff --git a/compiler/crates/relay-transforms/src/apply_transforms.rs b/compiler/crates/relay-transforms/src/apply_transforms.rs index a88fec02de884..440dc0794383d 100644 --- a/compiler/crates/relay-transforms/src/apply_transforms.rs +++ b/compiler/crates/relay-transforms/src/apply_transforms.rs @@ -235,17 +235,42 @@ fn apply_operation_transforms( ) })?; - // TODO(T67052528): execute FB-specific transforms only if config options is provided - program = log_event.time("generate_subscription_name_metadata", || { - generate_subscription_name_metadata(&program) + program = + apply_internal_fb_operation_transforms(project_config, &program, Arc::clone(&perf_logger))?; + + log_event.complete(); + + Ok(Arc::new(program)) +} + +#[cfg(feature = "fb_only")] +fn apply_internal_fb_operation_transforms( + project_config: &ProjectConfig, + program: &Program, + perf_logger: Arc, +) -> DiagnosticsResult { + let log_event = perf_logger.create_event("apply_internal_fb_operation_transforms"); + log_event.string("project", project_config.name.to_string()); + + let mut next_program = log_event.time("generate_subscription_name_metadata", || { + generate_subscription_name_metadata(program) })?; - program = log_event.time("generate_live_query_metadata", || { - generate_live_query_metadata(&program) + next_program = log_event.time("generate_live_query_metadata", || { + generate_live_query_metadata(&next_program) })?; log_event.complete(); - Ok(Arc::new(program)) + Ok(next_program) +} + +#[cfg(not(feature = "fb_only"))] +fn apply_internal_fb_operation_transforms( + _project_config: &ProjectConfig, + program: &Program, + _perf_logger: Arc, +) -> DiagnosticsResult { + Ok(program.clone()) } /// After the operation transforms, this applies further transforms that only diff --git a/compiler/crates/relay-transforms/src/generate_subscription_name_metadata.rs b/compiler/crates/relay-transforms/src/generate_subscription_name_metadata.rs index 8e307ba034b52..f3375f2cbec2e 100644 --- a/compiler/crates/relay-transforms/src/generate_subscription_name_metadata.rs +++ b/compiler/crates/relay-transforms/src/generate_subscription_name_metadata.rs @@ -9,15 +9,16 @@ use crate::INTERNAL_METADATA_DIRECTIVE; use common::{Diagnostic, DiagnosticsResult, WithLocation}; use graphql_ir::{ Argument, ConstantValue, Directive, OperationDefinition, Program, Selection, Transformed, - Transformer, ValidationMessage, Value, + Transformer, Value, }; use graphql_syntax::OperationKind; use intern::string_key::{Intern, StringKey}; use lazy_static::lazy_static; use schema::Schema; +use thiserror::Error; lazy_static! { - static ref SUBSCRITION_NAME_METADATA_KEY: StringKey = "subscriptionName".intern(); + static ref SUBSCRIPTION_NAME_METADATA_KEY: StringKey = "subscriptionName".intern(); } pub fn generate_subscription_name_metadata(program: &Program) -> DiagnosticsResult { @@ -77,7 +78,7 @@ impl<'s> Transformer for GenerateSubscriptionNameMetadata<'s> { arguments: vec![Argument { name: WithLocation::new( operation.name.location, - *SUBSCRITION_NAME_METADATA_KEY, + *SUBSCRIPTION_NAME_METADATA_KEY, ), value: WithLocation::new( operation.name.location, @@ -108,3 +109,9 @@ impl<'s> Transformer for GenerateSubscriptionNameMetadata<'s> { } } } + +#[derive(Debug, Error)] +pub enum ValidationMessage { + #[error("The root of subscription '{subscription_name}' must be a simple selection.")] + GenerateSubscriptionNameSimpleSelection { subscription_name: StringKey }, +}