From 17d9f9f05a9d31738eb53b7806e744188d00d244 Mon Sep 17 00:00:00 2001 From: Joe Savona Date: Tue, 23 May 2023 13:53:16 -0700 Subject: [PATCH] Remove Flight support in Relay Compiler Summary: Removes Flight support from Relay. Our intent is to explore switching to using Server Components at the routing/orchestration layer rather than embedded within GraphQL. Reviewed By: kassens Differential Revision: D46024763 fbshipit-source-id: 5211f41d481a6fdbd3975ba54b9f57cbf7e3e890 --- compiler/crates/common/src/feature_flags.rs | 3 - .../fixtures/argument_definitions.expected | 2 +- .../parse/fixtures/directive-generic.expected | 2 +- .../parse/fixtures/directive-include.expected | 6 +- .../tests/parse/fixtures/enum-values.expected | 2 +- .../parse/fixtures/field-arguments.expected | 2 +- .../fixme_fat_interface_on_union.expected | 2 +- .../fragment-with-arguments-syntax.expected | 6 +- .../fixtures/fragment-with-arguments.expected | 6 +- .../fragment-with-literal-arguments.expected | 2 +- ...ral-enum-arguments-into-enum-list.expected | 4 +- ...gment-with-literal-enum-arguments.expected | 4 +- ...-with-literal-enum-list-arguments.expected | 4 +- ...-with-variable-definitions-syntax.expected | 6 +- ...ragment_with_arguments_defaulting.expected | 2 +- .../fixtures/inline-untyped-fragment.expected | 2 +- .../linked-handle-field-with-filters.expected | 2 +- .../linked-handle-field-with-key.expected | 2 +- .../fixtures/linked-handle-field.expected | 2 +- .../fixtures/linked-handle-filter.expected | 2 +- .../parse/fixtures/list-of-enums.expected | 2 +- .../tests/parse/fixtures/null-values.expected | 2 +- .../fixtures/scalar-handle-field.expected | 2 +- .../parse/fixtures/simple-fragment.expected | 2 +- .../fixtures/client-fields.expected | 12 +- .../fragment_with_valid_provider.expected | 2 +- ...use_fragment_spread_with_provider.expected | 4 +- compiler/crates/relay-codegen/Cargo.toml | 2 +- .../crates/relay-codegen/src/build_ast.rs | 53 +- .../crates/relay-codegen/src/constants.rs | 4 - .../fixtures/flight-props.expected | 109 -- .../fixtures/flight-props.graphql | 19 - .../fixtures/flight.invalid.expected | 30 - .../fixtures/flight.invalid.graphql | 21 - .../tests/react_flight_codegen/mod.rs | 71 -- .../tests/react_flight_codegen_test.rs | 27 - .../src/artifact_content/content.rs | 42 - .../fixtures/flight-props-transform.expected | 1023 ----------------- .../fixtures/flight-props-transform.graphql | 79 -- ...with-and-without-module-directive.expected | 2 +- ...mponent-with-argument-definitions.expected | 240 ---- ...omponent-with-argument-definitions.graphql | 15 - ...query-with-relay-client-component.expected | 238 ---- .../query-with-relay-client-component.graphql | 14 - .../tests/compile_relay_artifacts/mod.rs | 1 - .../tests/compile_relay_artifacts_test.rs | 23 +- .../mod.rs | 1 - .../relay-schema/src/relay-extensions.graphql | 3 - .../relay-test-schema/src/testschema.graphql | 11 - .../src/testschema_with_custom_id.graphql | 11 - compiler/crates/relay-transforms/Cargo.toml | 2 +- .../relay-transforms/src/apply_transforms.rs | 7 - .../crates/relay-transforms/src/errors.rs | 23 +- .../relay-transforms/src/inline_fragments.rs | 2 - compiler/crates/relay-transforms/src/lib.rs | 10 - .../relay-transforms/src/no_inline/mod.rs | 9 +- .../relay-transforms/src/react_flight.rs | 453 -------- .../src/relay_client_component.rs | 417 ------- compiler/crates/relay-transforms/src/util.rs | 13 +- ...inline-fragment-no-type-condition.expected | 4 +- .../client-edge-inline-fragment.expected | 4 +- .../client-edge-to-client-object.expected | 2 +- .../fixtures/client-edge-variables.expected | 2 +- .../client-edge-with-required.expected | 2 +- ...lient-edge-within-non-client-edge.expected | 2 +- .../fixtures/client-edge.expected | 2 +- ...ested-client-edges-with-variables.expected | 6 +- .../fixtures/nested-client-edges.expected | 6 +- .../fixtures/nested-path-with-alias.expected | 4 +- .../fixtures/nested-path.expected | 4 +- .../fixtures/output-type.expected | 2 +- ...ent-on-all-non-node-union.invalid.expected | 22 - ...ment-on-all-non-node-union.invalid.graphql | 13 - ...ragment-on-fake-node-type.invalid.expected | 22 - ...fragment-on-fake-node-type.invalid.graphql | 13 - ...fragment-on-non-node-type.invalid.expected | 21 - .../fragment-on-non-node-type.invalid.graphql | 12 - ...nt-on-some-non-node-union.invalid.expected | 38 - ...ent-on-some-non-node-union.invalid.graphql | 20 - .../fragment-with-arguments.invalid.expected | 24 - .../fragment-with-arguments.invalid.graphql | 15 - ...h-incompatible-directives.invalid.expected | 21 - ...th-incompatible-directives.invalid.graphql | 12 - ...h-relay-client-component-on-query.expected | 47 - ...th-relay-client-component-on-query.graphql | 9 - ...-relay-client-component-on-viewer.expected | 43 - ...h-relay-client-component-on-viewer.graphql | 7 - ...gment-with-relay-client-component.expected | 47 - ...agment-with-relay-client-component.graphql | 9 - ...query-with-relay-client-component.expected | 49 - .../query-with-relay-client-component.graphql | 10 - .../tests/relay_client_component/mod.rs | 16 - .../tests/relay_client_component_test.rs | 83 -- .../fixtures/field-alias.expected | 2 +- .../fixtures/missing-fragment-name.expected | 2 +- .../multiple-relay-resolvers.expected | 4 +- .../fixtures/nested-relay-resolver.expected | 4 +- ...elay-resolver-backing-client-edge.expected | 2 +- ...lver-field-and-fragment-arguments.expected | 2 +- .../fixtures/relay-resolver-model.expected | 2 +- .../relay-resolver-named-import.expected | 2 +- .../fixtures/relay-resolver-required.expected | 2 +- ...lver-within-named-inline-fragment.expected | 2 +- .../fixtures/relay-resolver.expected | 2 +- compiler/crates/relay-typegen/src/visit.rs | 3 +- ...aw_response_and_client_components.expected | 66 -- ...raw_response_and_client_components.graphql | 14 - .../relay-typegen/tests/generate_flow/mod.rs | 1 - .../relay-typegen/tests/generate_flow_test.rs | 9 +- compiler/fixture_dirs.txt | 2 - packages/relay-runtime/index.js | 9 - .../MultiActorEnvironment.js | 11 - ...idateMutationTestFlightMutation.graphql.js | 187 --- .../__tests__/validateMutation-test.js | 102 +- .../mutations/createUpdatableProxy.js | 2 - .../mutations/validateMutation.js | 17 - .../network/RelayNetworkTypes.js | 42 - packages/relay-runtime/store/DataChecker.js | 62 - .../relay-runtime/store/OperationExecutor.js | 57 - .../store/RelayModernEnvironment.js | 21 - .../relay-runtime/store/RelayModernStore.js | 11 +- packages/relay-runtime/store/RelayReader.js | 44 - .../store/RelayReferenceMarker.js | 59 +- .../store/RelayResponseNormalizer.js | 202 ---- .../store/RelayStoreReactFlightUtils.js | 61 - .../relay-runtime/store/RelayStoreTypes.js | 55 +- .../store/__tests__/DataChecker-test.js | 314 ----- ...ironment-ExecuteMutationWithFlight-test.js | 570 --------- ...odernEnvironment-ExecuteWithFlight-test.js | 776 ------------- ...ExecuteWithFlightAndClientFragment-test.js | 255 ---- ...nt-ExecuteWithRelayClientComponent-test.js | 334 ------ .../store/__tests__/RelayReader-test.js | 231 ---- .../__tests__/RelayReferenceMarker-test.js | 278 ----- .../__tests__/RelayResponseNormalizer-test.js | 560 --------- .../DataCheckerTestFlightQuery.graphql.js | 175 --- .../DataCheckerTestInnerQuery.graphql.js | 139 --- ...ationWithFlightTest_FlightQuery.graphql.js | 178 --- ...tationWithFlightTest_InnerQuery.graphql.js | 139 --- ...hFlightTest_UpdateStoryMutation.graphql.js | 192 ---- ...ndClientFragmentTestFlightQuery.graphql.js | 175 --- ...AndClientFragmentTestInnerQuery.graphql.js | 136 --- ...st_clientFragment$normalization.graphql.js | 61 - ...ientFragmentTest_clientFragment.graphql.js | 80 -- ...xecuteWithFlightTestFlightQuery.graphql.js | 175 --- ...ExecuteWithFlightTestInnerQuery.graphql.js | 139 --- ...thRelayClientComponentTestQuery.graphql.js | 136 --- ...st_clientFragment$normalization.graphql.js | 61 - ...entComponentTest_clientFragment.graphql.js | 80 -- ...FlightComponentFieldFlightQuery.graphql.js | 175 --- ...yReferenceMarkerTestFlightQuery.graphql.js | 175 --- ...ayReferenceMarkerTestInnerQuery.graphql.js | 139 --- ...sponseNormalizerTestFlightQuery.graphql.js | 175 --- ...rmalizerTestServerOrClientQuery.graphql.js | 136 --- ...st_clientFragment$normalization.graphql.js | 61 - ...seNormalizerTest_clientFragment.graphql.js | 80 -- .../LiveResolverStore.js | 23 +- .../relay-runtime/util/NormalizationNode.js | 10 - packages/relay-runtime/util/ReaderNode.js | 9 - .../relay-runtime/util/RelayConcreteNode.js | 1 - .../relay-runtime/util/RelayFeatureFlags.js | 2 - .../RelayMockPayloadGenerator.js | 3 - 161 files changed, 95 insertions(+), 10798 deletions(-) delete mode 100644 compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight-props.expected delete mode 100644 compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight-props.graphql delete mode 100644 compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight.invalid.expected delete mode 100644 compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight.invalid.graphql delete mode 100644 compiler/crates/relay-codegen/tests/react_flight_codegen/mod.rs delete mode 100644 compiler/crates/relay-codegen/tests/react_flight_codegen_test.rs delete mode 100644 compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/flight-props-transform.expected delete mode 100644 compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/flight-props-transform.graphql delete mode 100644 compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.expected delete mode 100644 compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.graphql delete mode 100644 compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component.expected delete mode 100644 compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component.graphql delete mode 100644 compiler/crates/relay-transforms/src/react_flight.rs delete mode 100644 compiler/crates/relay-transforms/src/relay_client_component.rs delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-fake-node-type.invalid.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-fake-node-type.invalid.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-non-node-type.invalid.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-non-node-type.invalid.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-arguments.invalid.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-arguments.invalid.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-query.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-query.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/query-with-relay-client-component.expected delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/fixtures/query-with-relay-client-component.graphql delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component/mod.rs delete mode 100644 compiler/crates/relay-transforms/tests/relay_client_component_test.rs delete mode 100644 compiler/crates/relay-typegen/tests/generate_flow/fixtures/query_with_raw_response_and_client_components.expected delete mode 100644 compiler/crates/relay-typegen/tests/generate_flow/fixtures/query_with_raw_response_and_client_components.graphql delete mode 100644 packages/relay-runtime/mutations/__tests__/__generated__/validateMutationTestFlightMutation.graphql.js delete mode 100644 packages/relay-runtime/store/RelayStoreReactFlightUtils.js delete mode 100644 packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteMutationWithFlight-test.js delete mode 100644 packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithFlight-test.js delete mode 100644 packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithFlightAndClientFragment-test.js delete mode 100644 packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithRelayClientComponent-test.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/DataCheckerTestFlightQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/DataCheckerTestInnerQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightTestFlightQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightTestInnerQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$normalization.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayReferenceMarkerTestFlightQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayReferenceMarkerTestInnerQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTestFlightQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTestServerOrClientQuery.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTest_clientFragment$normalization.graphql.js delete mode 100644 packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTest_clientFragment.graphql.js diff --git a/compiler/crates/common/src/feature_flags.rs b/compiler/crates/common/src/feature_flags.rs index a8b0f02476163..adbb06c362c8d 100644 --- a/compiler/crates/common/src/feature_flags.rs +++ b/compiler/crates/common/src/feature_flags.rs @@ -20,9 +20,6 @@ use crate::Rollout; #[derive(Default, Debug, Serialize, Deserialize, Clone)] #[serde(deny_unknown_fields)] pub struct FeatureFlags { - #[serde(default)] - pub enable_flight_transform: bool, - #[serde(default)] pub enable_relay_resolver_transform: bool, diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/argument_definitions.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/argument_definitions.expected index 62bb8f4f84610..21279b3f7eb7e 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/argument_definitions.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/argument_definitions.expected @@ -87,7 +87,7 @@ fragment TestFragment on User alias: None, definition: WithLocation { location: argument_definitions.graphql:161:171, - item: FieldID(517), + item: FieldID(516), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/directive-generic.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/directive-generic.expected index 0d7771380d05f..50d2ac3b795ef 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/directive-generic.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/directive-generic.expected @@ -21,7 +21,7 @@ fragment TestFragment on User { alias: None, definition: WithLocation { location: directive-generic.graphql:34:36, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [ diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/directive-include.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/directive-include.expected index d0fe3cb666eeb..b326b93529369 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/directive-include.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/directive-include.expected @@ -47,7 +47,7 @@ fragment Foo on User { alias: None, definition: WithLocation { location: directive-include.graphql:34:36, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [], @@ -83,7 +83,7 @@ fragment Foo on User { alias: None, definition: WithLocation { location: directive-include.graphql:97:106, - item: FieldID(457), + item: FieldID(456), }, arguments: [], directives: [], @@ -161,7 +161,7 @@ fragment Foo on User { alias: None, definition: WithLocation { location: directive-include.graphql:168:170, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/enum-values.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/enum-values.expected index cf64f19a24125..63e49eb66774a 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/enum-values.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/enum-values.expected @@ -34,7 +34,7 @@ query EnumValueQuery { alias: None, definition: WithLocation { location: enum-values.graphql:34:48, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/field-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/field-arguments.expected index 3c23493bc1bcc..042ed8f55e6ae 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/field-arguments.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/field-arguments.expected @@ -92,7 +92,7 @@ query TestQuery { alias: None, definition: WithLocation { location: field-arguments.graphql:89:107, - item: FieldID(514), + item: FieldID(513), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fixme_fat_interface_on_union.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fixme_fat_interface_on_union.expected index 63f106aa66404..675a9d9c019b4 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fixme_fat_interface_on_union.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fixme_fat_interface_on_union.expected @@ -33,7 +33,7 @@ query Test { alias: None, definition: WithLocation { location: fixme_fat_interface_on_union.graphql:51:53, - item: FieldID(378), + item: FieldID(377), }, arguments: [], directives: [ diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments-syntax.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments-syntax.expected index fb574b6eba549..9f078c3d95142 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments-syntax.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments-syntax.expected @@ -92,7 +92,7 @@ fragment Foo($localId: ID!) on User { alias: None, definition: WithLocation { location: fragment-with-arguments-syntax.graphql:71:85, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { @@ -144,7 +144,7 @@ fragment Foo($localId: ID!) on User { ), definition: WithLocation { location: fragment-with-arguments-syntax.graphql:138:152, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { @@ -260,7 +260,7 @@ fragment Foo($localId: ID!) on User { alias: None, definition: WithLocation { location: fragment-with-arguments-syntax.graphql:246:248, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments.expected index 14c4d8b9d3f4e..d50fc41b71d16 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-arguments.expected @@ -104,7 +104,7 @@ fragment Foo on User @argumentDefinitions(localId: {type: "ID!"}) { alias: None, definition: WithLocation { location: fragment-with-arguments.graphql:131:145, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { @@ -156,7 +156,7 @@ fragment Foo on User @argumentDefinitions(localId: {type: "ID!"}) { ), definition: WithLocation { location: fragment-with-arguments.graphql:198:212, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { @@ -283,7 +283,7 @@ fragment Foo on User @argumentDefinitions(localId: {type: "ID!"}) { alias: None, definition: WithLocation { location: fragment-with-arguments.graphql:347:349, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-arguments.expected index 1b57d3d0417fb..f557072b41ac9 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-arguments.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-arguments.expected @@ -102,7 +102,7 @@ fragment ChildFragment on User alias: None, definition: WithLocation { location: fragment-with-literal-arguments.graphql:174:188, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments-into-enum-list.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments-into-enum-list.expected index 7d2f284a36dfc..13ac85a9176b8 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments-into-enum-list.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments-into-enum-list.expected @@ -36,7 +36,7 @@ fragment ChildFragment on User ), definition: WithLocation { location: fragment-with-literal-enum-arguments-into-enum-list.graphql:53:61, - item: FieldID(451), + item: FieldID(450), }, arguments: [ Argument { @@ -151,7 +151,7 @@ fragment ChildFragment on User alias: None, definition: WithLocation { location: fragment-with-literal-enum-arguments-into-enum-list.graphql:253:261, - item: FieldID(451), + item: FieldID(450), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments.expected index 9af9d96a925e2..f9615e71ea7b8 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-arguments.expected @@ -62,7 +62,7 @@ fragment ChildFragment on Query alias: None, definition: WithLocation { location: fragment-with-literal-enum-arguments.graphql:90:98, - item: FieldID(513), + item: FieldID(512), }, arguments: [], directives: [], @@ -177,7 +177,7 @@ fragment ChildFragment on Query alias: None, definition: WithLocation { location: fragment-with-literal-enum-arguments.graphql:292:300, - item: FieldID(513), + item: FieldID(512), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-list-arguments.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-list-arguments.expected index 96bd8a1cc84e6..68c866af92c9d 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-list-arguments.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-literal-enum-list-arguments.expected @@ -36,7 +36,7 @@ fragment ChildFragment on User ), definition: WithLocation { location: fragment-with-literal-enum-list-arguments.graphql:53:61, - item: FieldID(451), + item: FieldID(450), }, arguments: [ Argument { @@ -155,7 +155,7 @@ fragment ChildFragment on User alias: None, definition: WithLocation { location: fragment-with-literal-enum-list-arguments.graphql:255:263, - item: FieldID(451), + item: FieldID(450), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-variable-definitions-syntax.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-variable-definitions-syntax.expected index 362938db855ee..a5c24dc3e05d9 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-variable-definitions-syntax.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment-with-variable-definitions-syntax.expected @@ -104,7 +104,7 @@ fragment Foo($localId: ID!) on User { alias: None, definition: WithLocation { location: fragment-with-variable-definitions-syntax.graphql:131:145, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { @@ -156,7 +156,7 @@ fragment Foo($localId: ID!) on User { ), definition: WithLocation { location: fragment-with-variable-definitions-syntax.graphql:198:212, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { @@ -272,7 +272,7 @@ fragment Foo($localId: ID!) on User { alias: None, definition: WithLocation { location: fragment-with-variable-definitions-syntax.graphql:317:319, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment_with_arguments_defaulting.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment_with_arguments_defaulting.expected index 3d982c95e6153..7894b345388f7 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/fragment_with_arguments_defaulting.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/fragment_with_arguments_defaulting.expected @@ -180,7 +180,7 @@ fragment F2 on Query @argumentDefinitions( alias: None, definition: WithLocation { location: fragment_with_arguments_defaulting.graphql:342:352, - item: FieldID(517), + item: FieldID(516), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/inline-untyped-fragment.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/inline-untyped-fragment.expected index 049a524f5378a..46a26faf5f606 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/inline-untyped-fragment.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/inline-untyped-fragment.expected @@ -27,7 +27,7 @@ fragment InlineUntypedFragment on User { alias: None, definition: WithLocation { location: inline-untyped-fragment.graphql:53:57, - item: FieldID(466), + item: FieldID(465), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-filters.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-filters.expected index f00721eb36404..f1a882bee03c2 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-filters.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-filters.expected @@ -40,7 +40,7 @@ fragment LinkedHandleField on User { alias: None, definition: WithLocation { location: linked-handle-field-with-filters.graphql:39:46, - item: FieldID(458), + item: FieldID(457), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-key.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-key.expected index aa7747e1b29ef..f626a5b5a19b5 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-key.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field-with-key.expected @@ -24,7 +24,7 @@ fragment LinkedHandleField on User { alias: None, definition: WithLocation { location: linked-handle-field-with-key.graphql:39:46, - item: FieldID(458), + item: FieldID(457), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field.expected index 49b684ce1095b..0f80da95c70f4 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-field.expected @@ -25,7 +25,7 @@ fragment LinkedHandleField on User { alias: None, definition: WithLocation { location: linked-handle-field.graphql:39:46, - item: FieldID(458), + item: FieldID(457), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-filter.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-filter.expected index fa132d80dd3e9..eff6c62bada69 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-filter.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/linked-handle-filter.expected @@ -25,7 +25,7 @@ fragment LinkedHandleField on User { alias: None, definition: WithLocation { location: linked-handle-filter.graphql:39:46, - item: FieldID(458), + item: FieldID(457), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/list-of-enums.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/list-of-enums.expected index 280ab5ccd77bb..a284b17d9f45f 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/list-of-enums.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/list-of-enums.expected @@ -21,7 +21,7 @@ fragment TestFragment on User { alias: None, definition: WithLocation { location: list-of-enums.graphql:34:40, - item: FieldID(483), + item: FieldID(482), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/null-values.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/null-values.expected index 11a1ecdebebb3..0ebed4373d201 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/null-values.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/null-values.expected @@ -62,7 +62,7 @@ query NullValuesQuery { alias: None, definition: WithLocation { location: null-values.graphql:60:64, - item: FieldID(494), + item: FieldID(493), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/scalar-handle-field.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/scalar-handle-field.expected index cb1f792048304..bba9bfd936f2c 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/scalar-handle-field.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/scalar-handle-field.expected @@ -23,7 +23,7 @@ fragment ScalarHandleField on User { alias: None, definition: WithLocation { location: scalar-handle-field.graphql:39:43, - item: FieldID(466), + item: FieldID(465), }, arguments: [], directives: [ diff --git a/compiler/crates/graphql-ir/tests/parse/fixtures/simple-fragment.expected b/compiler/crates/graphql-ir/tests/parse/fixtures/simple-fragment.expected index 23d81172fa414..71933de1bfdde 100644 --- a/compiler/crates/graphql-ir/tests/parse/fixtures/simple-fragment.expected +++ b/compiler/crates/graphql-ir/tests/parse/fixtures/simple-fragment.expected @@ -21,7 +21,7 @@ fragment TestFragment on User { alias: None, definition: WithLocation { location: simple-fragment.graphql:34:36, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse_with_extensions/fixtures/client-fields.expected b/compiler/crates/graphql-ir/tests/parse_with_extensions/fixtures/client-fields.expected index fbd2485276e96..5f548767491a4 100644 --- a/compiler/crates/graphql-ir/tests/parse_with_extensions/fixtures/client-fields.expected +++ b/compiler/crates/graphql-ir/tests/parse_with_extensions/fixtures/client-fields.expected @@ -142,7 +142,7 @@ type Foo { alias: None, definition: WithLocation { location: client-fields.graphql:171:173, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [], @@ -151,7 +151,7 @@ type Foo { alias: None, definition: WithLocation { location: client-fields.graphql:226:238, - item: FieldID(517), + item: FieldID(516), }, arguments: [], directives: [], @@ -187,7 +187,7 @@ type Foo { alias: None, definition: WithLocation { location: client-fields.graphql:287:289, - item: FieldID(460), + item: FieldID(459), }, arguments: [], directives: [], @@ -228,7 +228,7 @@ type Foo { alias: None, definition: WithLocation { location: client-fields.graphql:367:370, - item: FieldID(518), + item: FieldID(517), }, arguments: [], directives: [], @@ -253,7 +253,7 @@ type Foo { alias: None, definition: WithLocation { location: client-fields.graphql:470:472, - item: FieldID(519), + item: FieldID(518), }, arguments: [], directives: [], @@ -286,7 +286,7 @@ type Foo { alias: None, definition: WithLocation { location: client-fields.graphql:526:528, - item: FieldID(519), + item: FieldID(518), }, arguments: [], directives: [], diff --git a/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/fragment_with_valid_provider.expected b/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/fragment_with_valid_provider.expected index 3e76a8adf8110..aa5a59338eb61 100644 --- a/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/fragment_with_valid_provider.expected +++ b/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/fragment_with_valid_provider.expected @@ -131,7 +131,7 @@ fragment TestFragment on User alias: None, definition: WithLocation { location: fragment_with_valid_provider.graphql:210:224, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { diff --git a/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/use_fragment_spread_with_provider.expected b/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/use_fragment_spread_with_provider.expected index ad9200006f839..fdd41452f9340 100644 --- a/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/use_fragment_spread_with_provider.expected +++ b/compiler/crates/graphql-ir/tests/parse_with_provider/fixtures/use_fragment_spread_with_provider.expected @@ -161,7 +161,7 @@ fragment ChildFragment2 on User alias: None, definition: WithLocation { location: use_fragment_spread_with_provider.graphql:286:300, - item: FieldID(474), + item: FieldID(473), }, arguments: [ Argument { @@ -295,7 +295,7 @@ fragment ChildFragment2 on User alias: None, definition: WithLocation { location: use_fragment_spread_with_provider.graphql:526:532, - item: FieldID(483), + item: FieldID(482), }, arguments: [], directives: [], diff --git a/compiler/crates/relay-codegen/Cargo.toml b/compiler/crates/relay-codegen/Cargo.toml index 974217cc43de4..94a8b9cdf7dec 100644 --- a/compiler/crates/relay-codegen/Cargo.toml +++ b/compiler/crates/relay-codegen/Cargo.toml @@ -1,4 +1,4 @@ -# @generated by autocargo from //relay/oss/crates/relay-codegen:[aliased_fragments_test,react_flight_codegen_test,relay-codegen,relay-codegen-client-edges,relay-codegen-client-extensions,relay-codegen-client-extensions-abstract-types,relay-codegen-connections,relay-codegen-deduped_json_codegen_test,relay-codegen-defer-stream,relay-codegen-json_codegen_test,relay_actor_change_test,request_metadata_test,required_directive_codegen_test,skip_printing_nulls_test] +# @generated by autocargo from //relay/oss/crates/relay-codegen:[aliased_fragments_test,relay-codegen,relay-codegen-client-edges,relay-codegen-client-extensions,relay-codegen-client-extensions-abstract-types,relay-codegen-connections,relay-codegen-deduped_json_codegen_test,relay-codegen-defer-stream,relay-codegen-json_codegen_test,relay_actor_change_test,request_metadata_test,required_directive_codegen_test,skip_printing_nulls_test] [package] name = "relay-codegen" version = "0.0.0" diff --git a/compiler/crates/relay-codegen/src/build_ast.rs b/compiler/crates/relay-codegen/src/build_ast.rs index ce1e4e43876c9..a93bd779375d1 100644 --- a/compiler/crates/relay-codegen/src/build_ast.rs +++ b/compiler/crates/relay-codegen/src/build_ast.rs @@ -12,13 +12,11 @@ use graphql_ir::Condition; use graphql_ir::ConditionValue; use graphql_ir::ConstantValue; use graphql_ir::Directive; -use graphql_ir::ExecutableDefinitionName; use graphql_ir::FragmentDefinition; use graphql_ir::FragmentSpread; use graphql_ir::InlineFragment; use graphql_ir::LinkedField; use graphql_ir::OperationDefinition; -use graphql_ir::OperationDefinitionName; use graphql_ir::ProvidedVariableMetadata; use graphql_ir::ScalarField; use graphql_ir::Selection; @@ -60,10 +58,7 @@ use relay_transforms::DEFER_STREAM_CONSTANTS; use relay_transforms::DIRECTIVE_SPLIT_OPERATION; use relay_transforms::INLINE_DIRECTIVE_NAME; use relay_transforms::INTERNAL_METADATA_DIRECTIVE; -use relay_transforms::REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY; use relay_transforms::RELAY_ACTOR_CHANGE_DIRECTIVE_FOR_CODEGEN; -use relay_transforms::RELAY_CLIENT_COMPONENT_MODULE_ID_ARGUMENT_NAME; -use relay_transforms::RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME; use relay_transforms::TYPE_DISCRIMINATOR_DIRECTIVE_NAME; use schema::SDLSchema; use schema::Schema; @@ -702,20 +697,13 @@ impl<'schema, 'builder, 'config> CodegenBuilder<'schema, 'builder, 'config> { let (name, alias) = self.build_field_name_and_alias(schema_field.name.item, field.alias, &field.directives); let args = self.build_arguments(&field.arguments); - let kind = match field - .directives - .named(*REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY) - { - Some(_flight_directive) => Primitive::String(CODEGEN_CONSTANTS.flight_field), - None => Primitive::String(CODEGEN_CONSTANTS.scalar_field), - }; let primitive = Primitive::Key(self.object(object! { :build_alias(alias, name), args: match args { None => Primitive::SkippableNull, Some(key) => Primitive::Key(key), }, - kind: kind, + kind: Primitive::String(CODEGEN_CONSTANTS.scalar_field), name: Primitive::String(name), storage_key: match args { None => Primitive::SkippableNull, @@ -929,14 +917,6 @@ impl<'schema, 'builder, 'config> CodegenBuilder<'schema, 'builder, 'config> { return self .build_normalization_fragment_spread(frag_spread, normalization_import_path); } - if self.variant == CodegenVariant::Normalization - && frag_spread - .directives - .named(*RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME) - .is_some() - { - return self.build_relay_client_component_fragment_spread(frag_spread); - } let args = self.build_arguments(&frag_spread.arguments); let primitive = Primitive::Key(self.object(object! { args: match args { @@ -1150,42 +1130,11 @@ impl<'schema, 'builder, 'config> CodegenBuilder<'schema, 'builder, 'config> { name: frag_spread.fragment.item.into(), }), kind: Primitive::String( - if frag_spread - .directives - .named(*RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME) - .is_some() - { - CODEGEN_CONSTANTS.client_component - } else { CODEGEN_CONSTANTS.fragment_spread - }, ), })) } - fn build_relay_client_component_fragment_spread( - &mut self, - frag_spread: &FragmentSpread, - ) -> Primitive { - let normalization_name = frag_spread - .directives - .named(*RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME) - .unwrap() - .arguments - .named(*RELAY_CLIENT_COMPONENT_MODULE_ID_ARGUMENT_NAME) - .unwrap() - .value - .item - .expect_string_literal() - .to_string() - .trim_end_matches(".graphql") - .intern(); - Primitive::Key(self.object(object! { - fragment: Primitive::GraphQLModuleDependency(GraphQLModuleDependency::Name(ExecutableDefinitionName::OperationDefinitionName(OperationDefinitionName(normalization_name)))), - kind: Primitive::String(CODEGEN_CONSTANTS.client_component), - })) - } - fn build_defer( &mut self, context: &mut ContextualMetadata, diff --git a/compiler/crates/relay-codegen/src/constants.rs b/compiler/crates/relay-codegen/src/constants.rs index 706a508d2987c..7a5ff6faf30a1 100644 --- a/compiler/crates/relay-codegen/src/constants.rs +++ b/compiler/crates/relay-codegen/src/constants.rs @@ -21,7 +21,6 @@ pub struct CodegenConstants { pub backward: StringKey, pub cache_id: StringKey, pub client_abstract_types: StringKey, - pub client_component: StringKey, pub client_edge_backing_field_key: StringKey, pub client_edge_selections_key: StringKey, pub client_edge_to_client_object: StringKey, @@ -45,7 +44,6 @@ pub struct CodegenConstants { pub field: StringKey, pub fields: StringKey, pub filters: StringKey, - pub flight_field: StringKey, pub forward: StringKey, pub fragment_name: StringKey, pub fragment_path_in_result: StringKey, @@ -131,7 +129,6 @@ lazy_static! { backward: "backward".intern(), cache_id: "cacheID".intern(), client_abstract_types: "clientAbstractTypes".intern(), - client_component: "ClientComponent".intern(), client_edge_backing_field_key: "backingField".intern(), client_edge_selections_key: "linkedField".intern(), client_edge_to_client_object: "ClientEdgeToClientObject".intern(), @@ -155,7 +152,6 @@ lazy_static! { field: "field".intern(), fields: "fields".intern(), filters: "filters".intern(), - flight_field: "FlightField".intern(), forward: "forward".intern(), fragment_name: "fragmentName".intern(), fragment_path_in_result: "fragmentPathInResult".intern(), diff --git a/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight-props.expected b/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight-props.expected deleted file mode 100644 index 904b3e9aae5cd..0000000000000 --- a/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight-props.expected +++ /dev/null @@ -1,109 +0,0 @@ -==================================== INPUT ==================================== -query FlightQuery($cond: Boolean!, $count: Int!, $id: ID!) { - node(id: $id) { - ... on Story { - id - extension_field(condition: $cond, count: $count, id: $id) - } - } -} - -# %extensions% -directive @react_flight_component(name: String!) on FIELD_DEFINITION - -extend type Story { - extension_field( - condition: Boolean! - count: Int! - id: ID! - ): ReactFlightComponent @react_flight_component(name: "ExtensionField.server") -} -==================================== OUTPUT =================================== -{ - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "cond" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Operation", - "name": "FlightQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": "extension_field", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "ExtensionField.server" - }, - { - "fields": [ - { - "kind": "Variable", - "name": "condition", - "variableName": "cond" - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null - } - ], - "storageKey": null - } - ] -} diff --git a/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight-props.graphql b/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight-props.graphql deleted file mode 100644 index 3a56bd589d195..0000000000000 --- a/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight-props.graphql +++ /dev/null @@ -1,19 +0,0 @@ -query FlightQuery($cond: Boolean!, $count: Int!, $id: ID!) { - node(id: $id) { - ... on Story { - id - extension_field(condition: $cond, count: $count, id: $id) - } - } -} - -# %extensions% -directive @react_flight_component(name: String!) on FIELD_DEFINITION - -extend type Story { - extension_field( - condition: Boolean! - count: Int! - id: ID! - ): ReactFlightComponent @react_flight_component(name: "ExtensionField.server") -} diff --git a/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight.invalid.expected b/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight.invalid.expected deleted file mode 100644 index c2b500cfa1fe0..0000000000000 --- a/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight.invalid.expected +++ /dev/null @@ -1,30 +0,0 @@ -==================================== INPUT ==================================== -# expected-to-throw - -query FlightQuery($cond: Boolean!, $count: Int!, $id: ID!) { - node(id: $id) { - ... on User { - id - extension_field(condition: $cond, count: $count, id: $id) - } - } -} - -# %extensions% -directive @react_flight_component(name: String!) on FIELD_DEFINITION - -extend type User { - extension_field( - condition: Boolean! - count: Int! - id: ID! - ): ReactFlightComponent @react_flight_component(name: "ExtensionField.server") -} -==================================== ERROR ==================================== -✖︎ Cannot query field 'extension_field', this type does not define a 'flight' field - - flight.invalid.graphql:7:7 - 6 │ id - 7 │ extension_field(condition: $cond, count: $count, id: $id) - │ ^^^^^^^^^^^^^^^ - 8 │ } diff --git a/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight.invalid.graphql b/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight.invalid.graphql deleted file mode 100644 index 535504bf25d76..0000000000000 --- a/compiler/crates/relay-codegen/tests/react_flight_codegen/fixtures/flight.invalid.graphql +++ /dev/null @@ -1,21 +0,0 @@ -# expected-to-throw - -query FlightQuery($cond: Boolean!, $count: Int!, $id: ID!) { - node(id: $id) { - ... on User { - id - extension_field(condition: $cond, count: $count, id: $id) - } - } -} - -# %extensions% -directive @react_flight_component(name: String!) on FIELD_DEFINITION - -extend type User { - extension_field( - condition: Boolean! - count: Int! - id: ID! - ): ReactFlightComponent @react_flight_component(name: "ExtensionField.server") -} diff --git a/compiler/crates/relay-codegen/tests/react_flight_codegen/mod.rs b/compiler/crates/relay-codegen/tests/react_flight_codegen/mod.rs deleted file mode 100644 index 8d994b6e3400f..0000000000000 --- a/compiler/crates/relay-codegen/tests/react_flight_codegen/mod.rs +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -use std::sync::Arc; - -use common::SourceLocationKey; -use fixture_tests::Fixture; -use graphql_ir::build; -use graphql_ir::Program; -use graphql_syntax::parse_executable; -use graphql_test_helpers::diagnostics_to_sorted_string; -use relay_codegen::print_fragment; -use relay_codegen::print_operation; -use relay_codegen::JsModuleFormat; -use relay_config::ProjectConfig; -use relay_test_schema::get_test_schema; -use relay_test_schema::get_test_schema_with_extensions; -use relay_transforms::react_flight; - -pub fn transform_fixture(fixture: &Fixture<'_>) -> Result { - let parts: Vec<_> = fixture.content.split("%extensions%").collect(); - let (base, schema) = match parts.as_slice() { - [base, extensions] => (base, get_test_schema_with_extensions(extensions)), - [base] => (base, get_test_schema()), - _ => panic!("Invalid fixture input {}", fixture.content), - }; - - let ast = parse_executable(base, SourceLocationKey::standalone(fixture.file_name)).unwrap(); - let ir = build(&schema, &ast.definitions) - .map_err(|diagnostics| diagnostics_to_sorted_string(fixture.content, &diagnostics))?; - let program = Program::from_definitions(Arc::clone(&schema), ir); - - react_flight(&program) - .map(|next_program| { - next_program - .fragments() - .map(|def| { - let mut import_statements = Default::default(); - let fragment = print_fragment( - &schema, - def, - &ProjectConfig { - js_module_format: JsModuleFormat::Haste, - ..Default::default() - }, - &mut import_statements, - ); - format!("{}{}", import_statements, fragment) - }) - .chain(next_program.operations().map(|def| { - let mut import_statements = Default::default(); - let operation = print_operation( - &schema, - def, - &ProjectConfig { - js_module_format: JsModuleFormat::Haste, - ..Default::default() - }, - &mut import_statements, - ); - format!("{}{}", import_statements, operation) - })) - .collect::>() - .join("\n\n") - }) - .map_err(|diagnostics| diagnostics_to_sorted_string(fixture.content, &diagnostics)) -} diff --git a/compiler/crates/relay-codegen/tests/react_flight_codegen_test.rs b/compiler/crates/relay-codegen/tests/react_flight_codegen_test.rs deleted file mode 100644 index cc95a836af42f..0000000000000 --- a/compiler/crates/relay-codegen/tests/react_flight_codegen_test.rs +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @generated SignedSource<<569f1efa26994d3ed3c24325d2914203>> - */ - -mod react_flight_codegen; - -use react_flight_codegen::transform_fixture; -use fixture_tests::test_fixture; - -#[test] -fn flight_invalid() { - let input = include_str!("react_flight_codegen/fixtures/flight.invalid.graphql"); - let expected = include_str!("react_flight_codegen/fixtures/flight.invalid.expected"); - test_fixture(transform_fixture, "flight.invalid.graphql", "react_flight_codegen/fixtures/flight.invalid.expected", input, expected); -} - -#[test] -fn flight_props() { - let input = include_str!("react_flight_codegen/fixtures/flight-props.graphql"); - let expected = include_str!("react_flight_codegen/fixtures/flight-props.expected"); - test_fixture(transform_fixture, "flight-props.graphql", "react_flight_codegen/fixtures/flight-props.expected", input, expected); -} diff --git a/compiler/crates/relay-compiler/src/artifact_content/content.rs b/compiler/crates/relay-compiler/src/artifact_content/content.rs index 7230ad91cae9b..31882f84b938d 100644 --- a/compiler/crates/relay-compiler/src/artifact_content/content.rs +++ b/compiler/crates/relay-compiler/src/artifact_content/content.rs @@ -21,8 +21,6 @@ use relay_codegen::QueryID; use relay_codegen::TopLevelStatement; use relay_codegen::CODEGEN_CONSTANTS; use relay_transforms::is_operation_preloadable; -use relay_transforms::ReactFlightLocalComponentsMetadata; -use relay_transforms::RelayClientComponentMetadata; use relay_transforms::RelayDataDrivenDependencyMetadata; use relay_transforms::ASSIGNABLE_DIRECTIVE; use relay_typegen::generate_fragment_type_exports_section; @@ -235,16 +233,6 @@ pub fn generate_operation( if let Some(data_driven_dependency_metadata) = data_driven_dependency_metadata { write_data_driven_dependency_annotation(&mut section, data_driven_dependency_metadata)?; } - if let Some(flight_metadata) = - ReactFlightLocalComponentsMetadata::find(&operation_fragment.directives) - { - write_react_flight_server_annotation(&mut section, flight_metadata)?; - } - let relay_client_component_metadata = - RelayClientComponentMetadata::find(&operation_fragment.directives); - if let Some(relay_client_component_metadata) = relay_client_component_metadata { - write_react_flight_client_annotation(&mut section, relay_client_component_metadata)?; - } content_sections.push(ContentSection::CommentAnnotations(section)); // -- End Metadata Annotations Section -- @@ -581,16 +569,6 @@ fn generate_read_only_fragment( { write_data_driven_dependency_annotation(&mut section, data_driven_dependency_metadata)?; } - if let Some(flight_metadata) = - ReactFlightLocalComponentsMetadata::find(&reader_fragment.directives) - { - write_react_flight_server_annotation(&mut section, flight_metadata)?; - } - let relay_client_component_metadata = - RelayClientComponentMetadata::find(&reader_fragment.directives); - if let Some(relay_client_component_metadata) = relay_client_component_metadata { - write_react_flight_client_annotation(&mut section, relay_client_component_metadata)?; - } content_sections.push(ContentSection::CommentAnnotations(section)); // -- End Metadata Annotations Section -- @@ -923,23 +901,3 @@ fn write_data_driven_dependency_annotation( } Ok(()) } - -fn write_react_flight_server_annotation( - section: &mut CommentAnnotationsSection, - flight_local_components_metadata: &ReactFlightLocalComponentsMetadata, -) -> FmtResult { - for item in &flight_local_components_metadata.components { - writeln!(section, "@ReactFlightServerDependency {}", item)?; - } - Ok(()) -} - -fn write_react_flight_client_annotation( - section: &mut CommentAnnotationsSection, - relay_client_component_metadata: &RelayClientComponentMetadata, -) -> FmtResult { - for value in &relay_client_component_metadata.split_operation_filenames { - writeln!(section, "@ReactFlightClientDependency {}", value)?; - } - Ok(()) -} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/flight-props-transform.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/flight-props-transform.expected deleted file mode 100644 index 05c017743d405..0000000000000 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/flight-props-transform.expected +++ /dev/null @@ -1,1023 +0,0 @@ -==================================== INPUT ==================================== -query flightPropsTransform_StoryQuery( - $condition: Boolean! - $count: Int! - $id: ID! -) { - node(id: $id) { - ...flightPropsTransform_story - } -} - -fragment flightPropsTransform_story on Story { - ...flightPropsTransform_storyHeader - StoryAttachments - StoryComments(condition: $condition, count: $count) - ...flightPropsTransform_storyFooter -} - -query flightPropsTransform_StoryHeaderQuery( - $id: ID! -) { - node(id: $id) { - ...flightPropsTransform_storyHeader - } -} - -fragment flightPropsTransform_storyHeader on Story { - ...flightPropsTransform_storyTitle - ...flightPropsTransform_storyAuthor -} - -query flightPropsTransform_StoryTitleQuery( - $id: ID! -) { - node(id: $id) { - ...flightPropsTransform_storyTitle - } -} - -fragment flightPropsTransform_storyTitle on Story { - StoryTitle -} - -fragment flightPropsTransform_storyAuthor on Story { - StoryAuthor -} - -fragment flightPropsTransform_storyFooter on Story { - StoryFooter -} - -query flightPropsTransform_StoryCommentsQuery( - $condition: Boolean! - $count: Int! - $id: ID! -) { - node(id: $id) { - ... on Story { - StoryComments(condition: $condition, count: $count) - } - } -} - -# %extensions% # -directive @react_flight_component(name: String!) on FIELD_DEFINITION - -extend type Story { - StoryComments( - condition: Boolean! - count: Int! - ): ReactFlightComponent @react_flight_component(name: "StoryComments.server") - - StoryTitle: ReactFlightComponent @react_flight_component(name: "StoryTitle.server") - - StoryAuthor: ReactFlightComponent @react_flight_component(name: "StoryAuthor.server") - - StoryFooter: ReactFlightComponent @react_flight_component(name: "StoryFooter.server") - - StoryAttachments: ReactFlightComponent @react_flight_component(name: "StoryAttachments.server") -} -==================================== OUTPUT =================================== -{ - "fragment": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "condition" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_StoryCommentsQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "kind": "InlineFragment", - "selections": [ - { - "alias": "StoryComments", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryComments.server" - }, - { - "fields": [ - { - "kind": "Variable", - "name": "condition", - "variableName": "condition" - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - } - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "condition" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Operation", - "name": "flightPropsTransform_StoryCommentsQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "kind": "InlineFragment", - "selections": [ - { - "alias": "StoryComments", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryComments.server" - }, - { - "fields": [ - { - "kind": "Variable", - "name": "condition", - "variableName": "condition" - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - } - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "36c624e95960b57bae298acee0fc2325", - "id": null, - "metadata": {}, - "name": "flightPropsTransform_StoryCommentsQuery", - "operationKind": "query", - "text": null - } -} - -QUERY: - -query flightPropsTransform_StoryCommentsQuery( - $condition: Boolean! - $count: Int! - $id: ID! -) @react_flight(components: ["StoryComments.server"]) { - node(id: $id) { - __typename - ... on Story { - StoryComments: flight(component: "StoryComments.server", props: {condition: $condition, count: $count}) - } - id - } -} - - -{ - "fragment": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_StoryHeaderQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "flightPropsTransform_storyHeader" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Operation", - "name": "flightPropsTransform_StoryHeaderQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "kind": "InlineFragment", - "selections": [ - { - "alias": "StoryTitle", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryTitle.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryTitle.server\",props:{})" - }, - { - "alias": "StoryAuthor", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryAuthor.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryAuthor.server\",props:{})" - } - ], - "type": "Story", - "abstractKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "1a9ce6cbc21aa0877299be1d6d47b441", - "id": null, - "metadata": {}, - "name": "flightPropsTransform_StoryHeaderQuery", - "operationKind": "query", - "text": null - } -} - -QUERY: - -query flightPropsTransform_StoryHeaderQuery( - $id: ID! -) @react_flight(components: ["StoryAuthor.server", "StoryTitle.server"]) { - node(id: $id) { - __typename - ...flightPropsTransform_storyHeader - id - } -} - -fragment flightPropsTransform_storyAuthor on Story { - StoryAuthor: flight(component: "StoryAuthor.server", props: {}) -} - -fragment flightPropsTransform_storyHeader on Story { - ...flightPropsTransform_storyTitle - ...flightPropsTransform_storyAuthor -} - -fragment flightPropsTransform_storyTitle on Story { - StoryTitle: flight(component: "StoryTitle.server", props: {}) -} - - -{ - "fragment": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "condition" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_StoryQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "flightPropsTransform_story" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "condition" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Operation", - "name": "flightPropsTransform_StoryQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "kind": "InlineFragment", - "selections": [ - { - "alias": "StoryTitle", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryTitle.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryTitle.server\",props:{})" - }, - { - "alias": "StoryAuthor", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryAuthor.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryAuthor.server\",props:{})" - }, - { - "alias": "StoryAttachments", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryAttachments.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryAttachments.server\",props:{})" - }, - { - "alias": "StoryComments", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryComments.server" - }, - { - "fields": [ - { - "kind": "Variable", - "name": "condition", - "variableName": "condition" - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - } - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - }, - { - "alias": "StoryFooter", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryFooter.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryFooter.server\",props:{})" - } - ], - "type": "Story", - "abstractKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "69a734ff296b28728d03558e1d566210", - "id": null, - "metadata": {}, - "name": "flightPropsTransform_StoryQuery", - "operationKind": "query", - "text": null - } -} - -QUERY: - -query flightPropsTransform_StoryQuery( - $condition: Boolean! - $count: Int! - $id: ID! -) @react_flight(components: ["StoryAttachments.server", "StoryAuthor.server", "StoryComments.server", "StoryFooter.server", "StoryTitle.server"]) { - node(id: $id) { - __typename - ...flightPropsTransform_story - id - } -} - -fragment flightPropsTransform_story on Story { - ...flightPropsTransform_storyHeader - StoryAttachments: flight(component: "StoryAttachments.server", props: {}) - StoryComments: flight(component: "StoryComments.server", props: {condition: $condition, count: $count}) - ...flightPropsTransform_storyFooter -} - -fragment flightPropsTransform_storyAuthor on Story { - StoryAuthor: flight(component: "StoryAuthor.server", props: {}) -} - -fragment flightPropsTransform_storyFooter on Story { - StoryFooter: flight(component: "StoryFooter.server", props: {}) -} - -fragment flightPropsTransform_storyHeader on Story { - ...flightPropsTransform_storyTitle - ...flightPropsTransform_storyAuthor -} - -fragment flightPropsTransform_storyTitle on Story { - StoryTitle: flight(component: "StoryTitle.server", props: {}) -} - - -{ - "fragment": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_StoryTitleQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "flightPropsTransform_storyTitle" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Operation", - "name": "flightPropsTransform_StoryTitleQuery", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "kind": "InlineFragment", - "selections": [ - { - "alias": "StoryTitle", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryTitle.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryTitle.server\",props:{})" - } - ], - "type": "Story", - "abstractKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "c7147649e8202d8f1b699b187fc3fd2c", - "id": null, - "metadata": {}, - "name": "flightPropsTransform_StoryTitleQuery", - "operationKind": "query", - "text": null - } -} - -QUERY: - -query flightPropsTransform_StoryTitleQuery( - $id: ID! -) @react_flight(components: ["StoryTitle.server"]) { - node(id: $id) { - __typename - ...flightPropsTransform_storyTitle - id - } -} - -fragment flightPropsTransform_storyTitle on Story { - StoryTitle: flight(component: "StoryTitle.server", props: {}) -} - - -{ - "argumentDefinitions": [ - { - "kind": "RootArgument", - "name": "condition" - }, - { - "kind": "RootArgument", - "name": "count" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_story", - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "flightPropsTransform_storyHeader" - }, - { - "alias": "StoryAttachments", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryAttachments.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryAttachments.server\",props:{})" - }, - { - "alias": "StoryComments", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryComments.server" - }, - { - "fields": [ - { - "kind": "Variable", - "name": "condition", - "variableName": "condition" - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - } - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - }, - { - "args": null, - "kind": "FragmentSpread", - "name": "flightPropsTransform_storyFooter" - } - ], - "type": "Story", - "abstractKey": null -} - -{ - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_storyAuthor", - "selections": [ - { - "alias": "StoryAuthor", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryAuthor.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryAuthor.server\",props:{})" - } - ], - "type": "Story", - "abstractKey": null -} - -{ - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_storyFooter", - "selections": [ - { - "alias": "StoryFooter", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryFooter.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryFooter.server\",props:{})" - } - ], - "type": "Story", - "abstractKey": null -} - -{ - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_storyHeader", - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "flightPropsTransform_storyTitle" - }, - { - "args": null, - "kind": "FragmentSpread", - "name": "flightPropsTransform_storyAuthor" - } - ], - "type": "Story", - "abstractKey": null -} - -{ - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "flightPropsTransform_storyTitle", - "selections": [ - { - "alias": "StoryTitle", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "StoryTitle.server" - }, - { - "fields": [], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": "flight(component:\"StoryTitle.server\",props:{})" - } - ], - "type": "Story", - "abstractKey": null -} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/flight-props-transform.graphql b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/flight-props-transform.graphql deleted file mode 100644 index c31935666683d..0000000000000 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/flight-props-transform.graphql +++ /dev/null @@ -1,79 +0,0 @@ -query flightPropsTransform_StoryQuery( - $condition: Boolean! - $count: Int! - $id: ID! -) { - node(id: $id) { - ...flightPropsTransform_story - } -} - -fragment flightPropsTransform_story on Story { - ...flightPropsTransform_storyHeader - StoryAttachments - StoryComments(condition: $condition, count: $count) - ...flightPropsTransform_storyFooter -} - -query flightPropsTransform_StoryHeaderQuery( - $id: ID! -) { - node(id: $id) { - ...flightPropsTransform_storyHeader - } -} - -fragment flightPropsTransform_storyHeader on Story { - ...flightPropsTransform_storyTitle - ...flightPropsTransform_storyAuthor -} - -query flightPropsTransform_StoryTitleQuery( - $id: ID! -) { - node(id: $id) { - ...flightPropsTransform_storyTitle - } -} - -fragment flightPropsTransform_storyTitle on Story { - StoryTitle -} - -fragment flightPropsTransform_storyAuthor on Story { - StoryAuthor -} - -fragment flightPropsTransform_storyFooter on Story { - StoryFooter -} - -query flightPropsTransform_StoryCommentsQuery( - $condition: Boolean! - $count: Int! - $id: ID! -) { - node(id: $id) { - ... on Story { - StoryComments(condition: $condition, count: $count) - } - } -} - -# %extensions% # -directive @react_flight_component(name: String!) on FIELD_DEFINITION - -extend type Story { - StoryComments( - condition: Boolean! - count: Int! - ): ReactFlightComponent @react_flight_component(name: "StoryComments.server") - - StoryTitle: ReactFlightComponent @react_flight_component(name: "StoryTitle.server") - - StoryAuthor: ReactFlightComponent @react_flight_component(name: "StoryAuthor.server") - - StoryFooter: ReactFlightComponent @react_flight_component(name: "StoryFooter.server") - - StoryAttachments: ReactFlightComponent @react_flight_component(name: "StoryAttachments.server") -} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-and-without-module-directive.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-and-without-module-directive.expected index 788e9df8a620e..4c80325bb34f5 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-and-without-module-directive.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-and-without-module-directive.expected @@ -24,7 +24,7 @@ fragment queryWithAndWithoutModuleDirective_MarkdownUserNameRenderer_name on Mar } } ==================================== ERROR ==================================== -✖︎ The 'queryWithAndWithoutModuleDirective_MarkdownUserNameRenderer_name' is transformed to use @no_inline implictly by `@module` or `@relay_client_component`, but it's also used in a regular fragment spread. It's required to explicitly add `@no_inline` to the definition of 'queryWithAndWithoutModuleDirective_MarkdownUserNameRenderer_name'. +✖︎ The 'queryWithAndWithoutModuleDirective_MarkdownUserNameRenderer_name' is transformed to use @no_inline implictly by `@module`, but it's also used in a regular fragment spread. It's required to explicitly add `@no_inline` to the definition of 'queryWithAndWithoutModuleDirective_MarkdownUserNameRenderer_name'. query-with-and-without-module-directive.graphql:15:8 14 │ without_module: nameRenderer { diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.expected deleted file mode 100644 index d189cb6244efe..0000000000000 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.expected +++ /dev/null @@ -1,240 +0,0 @@ -==================================== INPUT ==================================== -query queryWithRelayClientComponentWithArgumentDefinitions_Query($id: ID!) { - node(id: $id) { - id - ...queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment - @relay_client_component - } -} - -fragment queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment on User -@argumentDefinitions(size: {type: "[Int]", defaultValue: [32]}) { - name - profilePicture(size: $size) { - uri - } -} -==================================== OUTPUT =================================== -{ - "argumentDefinitions": [ - { - "defaultValue": [ - 32 - ], - "kind": "LocalArgument", - "name": "queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment$size" - } - ], - "kind": "SplitOperation", - "metadata": {}, - "name": "queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment$normalization", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "size", - "variableName": "queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment$size" - } - ], - "concreteType": "Image", - "kind": "LinkedField", - "name": "profilePicture", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "uri", - "storageKey": null - } - ], - "storageKey": null - } - ] -} - -{ - "fragment": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "queryWithRelayClientComponentWithArgumentDefinitions_Query", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "args": null, - "kind": "FragmentSpread", - "name": "queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } - ], - "kind": "Operation", - "name": "queryWithRelayClientComponentWithArgumentDefinitions_Query", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "args": null, - "fragment": require('queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment$normalization.graphql'), - "kind": "ClientComponent" - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "6ad82143df29774a4c9152ad549f165a", - "id": null, - "metadata": {}, - "name": "queryWithRelayClientComponentWithArgumentDefinitions_Query", - "operationKind": "query", - "text": null - } -} - -QUERY: - -query queryWithRelayClientComponentWithArgumentDefinitions_Query( - $id: ID! -) { - node(id: $id) { - __typename - id - ...queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment @relay_client_component_server(module_id: "queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment$normalization.graphql") - } -} - -fragment queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment on User { - name - profilePicture(size: [32]) { - uri - } -} - - -{ - "argumentDefinitions": [ - { - "defaultValue": [ - 32 - ], - "kind": "LocalArgument", - "name": "size" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "size", - "variableName": "size" - } - ], - "concreteType": "Image", - "kind": "LinkedField", - "name": "profilePicture", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "uri", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "User", - "abstractKey": null -} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.graphql b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.graphql deleted file mode 100644 index 0795fb9ff733a..0000000000000 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.graphql +++ /dev/null @@ -1,15 +0,0 @@ -query queryWithRelayClientComponentWithArgumentDefinitions_Query($id: ID!) { - node(id: $id) { - id - ...queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment - @relay_client_component - } -} - -fragment queryWithRelayClientComponentWithArgumentDefinitions_ClientComponentFragment on User -@argumentDefinitions(size: {type: "[Int]", defaultValue: [32]}) { - name - profilePicture(size: $size) { - uri - } -} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component.expected deleted file mode 100644 index 95b3ccbe643b4..0000000000000 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component.expected +++ /dev/null @@ -1,238 +0,0 @@ -==================================== INPUT ==================================== -query queryWithRelayClientComponent_Query($id: ID!, $size: [Int]) { - node(id: $id) { - id - ...queryWithRelayClientComponent_ClientComponentFragment - @relay_client_component - } -} - -fragment queryWithRelayClientComponent_ClientComponentFragment on User { - name - profilePicture(size: $size) { - uri - } -} -==================================== OUTPUT =================================== -{ - "kind": "SplitOperation", - "metadata": {}, - "name": "queryWithRelayClientComponent_ClientComponentFragment$normalization", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "size", - "variableName": "size" - } - ], - "concreteType": "Image", - "kind": "LinkedField", - "name": "profilePicture", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "uri", - "storageKey": null - } - ], - "storageKey": null - } - ] -} - -{ - "fragment": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "size" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "queryWithRelayClientComponent_Query", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "args": null, - "kind": "FragmentSpread", - "name": "queryWithRelayClientComponent_ClientComponentFragment" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - }, - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "size" - } - ], - "kind": "Operation", - "name": "queryWithRelayClientComponent_Query", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } - ], - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "args": null, - "fragment": require('queryWithRelayClientComponent_ClientComponentFragment$normalization.graphql'), - "kind": "ClientComponent" - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "acfdaa661773ccf675ea2c3179ce215b", - "id": null, - "metadata": {}, - "name": "queryWithRelayClientComponent_Query", - "operationKind": "query", - "text": null - } -} - -QUERY: - -query queryWithRelayClientComponent_Query( - $id: ID! - $size: [Int] -) { - node(id: $id) { - __typename - id - ...queryWithRelayClientComponent_ClientComponentFragment @relay_client_component_server(module_id: "queryWithRelayClientComponent_ClientComponentFragment$normalization.graphql") - } -} - -fragment queryWithRelayClientComponent_ClientComponentFragment on User { - name - profilePicture(size: $size) { - uri - } -} - - -{ - "argumentDefinitions": [ - { - "kind": "RootArgument", - "name": "size" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "queryWithRelayClientComponent_ClientComponentFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "size", - "variableName": "size" - } - ], - "concreteType": "Image", - "kind": "LinkedField", - "name": "profilePicture", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "uri", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "User", - "abstractKey": null -} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component.graphql b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component.graphql deleted file mode 100644 index cb300da813820..0000000000000 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/query-with-relay-client-component.graphql +++ /dev/null @@ -1,14 +0,0 @@ -query queryWithRelayClientComponent_Query($id: ID!, $size: [Int]) { - node(id: $id) { - id - ...queryWithRelayClientComponent_ClientComponentFragment - @relay_client_component - } -} - -fragment queryWithRelayClientComponent_ClientComponentFragment on User { - name - profilePicture(size: $size) { - uri - } -} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/mod.rs b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/mod.rs index 26b702b6ff470..864440253cd50 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/mod.rs +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/mod.rs @@ -101,7 +101,6 @@ pub fn transform_fixture(fixture: &Fixture<'_>) -> Result { ]; let feature_flags = FeatureFlags { - enable_flight_transform: true, hash_supported_argument: FeatureFlag::Limited { allowlist: hash_supported_argument_allowlist.into_iter().collect(), }, diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_test.rs b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_test.rs index 4a0ee82d4db97..c58dc2d637fbf 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_test.rs +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_test.rs @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<2a17651ff486f00579270758059a000e>> */ mod compile_relay_artifacts; @@ -467,13 +467,6 @@ fn fields_with_null_argument_values() { test_fixture(transform_fixture, "fields-with-null-argument-values.graphql", "compile_relay_artifacts/fixtures/fields-with-null-argument-values.expected", input, expected); } -#[test] -fn flight_props_transform() { - let input = include_str!("compile_relay_artifacts/fixtures/flight-props-transform.graphql"); - let expected = include_str!("compile_relay_artifacts/fixtures/flight-props-transform.expected"); - test_fixture(transform_fixture, "flight-props-transform.graphql", "compile_relay_artifacts/fixtures/flight-props-transform.expected", input, expected); -} - #[test] fn fragment_alias() { let input = include_str!("compile_relay_artifacts/fixtures/fragment-alias.graphql"); @@ -971,20 +964,6 @@ fn query_with_raw_response_type_directive() { test_fixture(transform_fixture, "query-with-raw-response-type-directive.graphql", "compile_relay_artifacts/fixtures/query-with-raw-response-type-directive.expected", input, expected); } -#[test] -fn query_with_relay_client_component() { - let input = include_str!("compile_relay_artifacts/fixtures/query-with-relay-client-component.graphql"); - let expected = include_str!("compile_relay_artifacts/fixtures/query-with-relay-client-component.expected"); - test_fixture(transform_fixture, "query-with-relay-client-component.graphql", "compile_relay_artifacts/fixtures/query-with-relay-client-component.expected", input, expected); -} - -#[test] -fn query_with_relay_client_component_with_argument_definitions() { - let input = include_str!("compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.graphql"); - let expected = include_str!("compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.expected"); - test_fixture(transform_fixture, "query-with-relay-client-component-with-argument-definitions.graphql", "compile_relay_artifacts/fixtures/query-with-relay-client-component-with-argument-definitions.expected", input, expected); -} - #[test] fn redundant_selection_in_inline_fragments() { let input = include_str!("compile_relay_artifacts/fixtures/redundant-selection-in-inline-fragments.graphql"); diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/mod.rs b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/mod.rs index 7a0c02d194a79..7b75d76bd97b0 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/mod.rs +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/mod.rs @@ -76,7 +76,6 @@ pub fn transform_fixture(fixture: &Fixture<'_>) -> Result { let program = Program::from_definitions(Arc::clone(&schema), ir); let feature_flags = FeatureFlags { - enable_flight_transform: true, hash_supported_argument: FeatureFlag::Disabled, no_inline: FeatureFlag::Enabled, enable_relay_resolver_transform: true, diff --git a/compiler/crates/relay-schema/src/relay-extensions.graphql b/compiler/crates/relay-schema/src/relay-extensions.graphql index 819977bb79674..04573d0319d68 100644 --- a/compiler/crates/relay-schema/src/relay-extensions.graphql +++ b/compiler/crates/relay-schema/src/relay-extensions.graphql @@ -214,9 +214,6 @@ will be prepended to its parent connection. """ directive @prependNode(connections: [ID!]!, edgeTypeName: String!) on FIELD -# RelayClientComponentTransform -directive @relay_client_component on FRAGMENT_SPREAD - # RelayResolver directive @relay_resolver( fragment_name: String! diff --git a/compiler/crates/relay-test-schema/src/testschema.graphql b/compiler/crates/relay-test-schema/src/testschema.graphql index bb46328a8ccfe..89317de0faa7c 100644 --- a/compiler/crates/relay-test-schema/src/testschema.graphql +++ b/compiler/crates/relay-test-schema/src/testschema.graphql @@ -64,16 +64,6 @@ interface MaybeNodeInterface { scalar JSON -directive @react_flight( - components: [String!]! -) on QUERY | MUTATION | SUBSCRIPTION - -scalar ReactFlightComponent - -scalar ReactFlightProps - -directive @relay_client_component_server(module_id: String!) on FRAGMENT_SPREAD - union MaybeNode = Story | FakeNode | NonNode type FakeNode { @@ -796,7 +786,6 @@ type PhotoStory implements FeedUnit & Node { type Story implements FeedUnit & Node & MaybeNodeInterface { attachments: [StoryAttachment] - flight(component: String!, props: ReactFlightProps): ReactFlightComponent # FeedUnit canViewerDelete: Boolean diff --git a/compiler/crates/relay-test-schema/src/testschema_with_custom_id.graphql b/compiler/crates/relay-test-schema/src/testschema_with_custom_id.graphql index 643e61cca2a64..553b9d585b060 100644 --- a/compiler/crates/relay-test-schema/src/testschema_with_custom_id.graphql +++ b/compiler/crates/relay-test-schema/src/testschema_with_custom_id.graphql @@ -64,16 +64,6 @@ interface MaybeNodeInterface { scalar JSON -directive @react_flight( - components: [String!]! -) on QUERY | MUTATION | SUBSCRIPTION - -scalar ReactFlightComponent - -scalar ReactFlightProps - -directive @relay_client_component_server(module_id: String!) on FRAGMENT_SPREAD - union MaybeNode = Story | FakeNode | NonNode type FakeNode { @@ -790,7 +780,6 @@ type PhotoStory implements FeedUnit & Node { type Story implements FeedUnit & Node & MaybeNodeInterface { attachments: [StoryAttachment] - flight(component: String!, props: ReactFlightProps): ReactFlightComponent # FeedUnit canViewerDelete: Boolean diff --git a/compiler/crates/relay-transforms/Cargo.toml b/compiler/crates/relay-transforms/Cargo.toml index 2e5db1cf9e2ca..b419f012506e6 100644 --- a/compiler/crates/relay-transforms/Cargo.toml +++ b/compiler/crates/relay-transforms/Cargo.toml @@ -1,4 +1,4 @@ -# @generated by autocargo from //relay/oss/crates/relay-transforms:[apply_fragment_arguments_test,assignable_directive_test,assignable_fragment_spread_test,client_edges_test,client_extensions_test,declarative_connection_test,disallow_typename_on_root_test,fragment_alias_directive_test,generate_data_driven_dependency_metadata_test,generate_live_query_metadata_test,generate_relay_resolvers_operations_for_nested_objects_test,graphql-client_extensions_abstract_types-test,graphql-defer_stream-test,graphql-disallow_non_node_id_fields-test,graphql-disallow_reserved_aliases-test,graphql-flatten-test,graphql-generate_id_field-test,graphql-generate_typename-test,graphql-inline_fragments-test,graphql-mask-test,graphql-match-local-test,graphql-match-test,graphql-node_identifier-test,graphql-refetchable_fragment_test,graphql-skip_client_extensions-test,graphql-skip_redundant_nodes-test,graphql-skip_unreachable_nodes-test,graphql-sort_selections-test,graphql-subscription_transform-test,graphql-validate_deprecated_fields_test,graphql-validate_module_names-test,graphql-validate_relay_directives-test,graphql-validate_required_arguments_test,graphql-validate_server_only_directives-test,graphql-validate_unused_variables-test,inline_data_fragment_test,provided-variable-fragment-transform-test,relay-actor-change-test,relay-client-component-test,relay-transforms,relay_resolvers_test,relay_test_operation_test,required_directive_test,skip_unused_variables_test,transform_connections_test,updatable_directive_test,updatable_fragment_spread_test,validate_connections_schema_test,validate_connections_test,validate_global_variable_names_test,validate_global_variables-test,validate_no_double_underscore_alias_test,validate_no_unselectable_selections_test,validate_static_args] +# @generated by autocargo from //relay/oss/crates/relay-transforms:[apply_fragment_arguments_test,assignable_directive_test,assignable_fragment_spread_test,client_edges_test,client_extensions_test,declarative_connection_test,disallow_typename_on_root_test,fragment_alias_directive_test,generate_data_driven_dependency_metadata_test,generate_live_query_metadata_test,generate_relay_resolvers_operations_for_nested_objects_test,graphql-client_extensions_abstract_types-test,graphql-defer_stream-test,graphql-disallow_non_node_id_fields-test,graphql-disallow_reserved_aliases-test,graphql-flatten-test,graphql-generate_id_field-test,graphql-generate_typename-test,graphql-inline_fragments-test,graphql-mask-test,graphql-match-local-test,graphql-match-test,graphql-node_identifier-test,graphql-refetchable_fragment_test,graphql-skip_client_extensions-test,graphql-skip_redundant_nodes-test,graphql-skip_unreachable_nodes-test,graphql-sort_selections-test,graphql-subscription_transform-test,graphql-validate_deprecated_fields_test,graphql-validate_module_names-test,graphql-validate_relay_directives-test,graphql-validate_required_arguments_test,graphql-validate_server_only_directives-test,graphql-validate_unused_variables-test,inline_data_fragment_test,provided-variable-fragment-transform-test,relay-actor-change-test,relay-transforms,relay_resolvers_test,relay_test_operation_test,required_directive_test,skip_unused_variables_test,transform_connections_test,updatable_directive_test,updatable_fragment_spread_test,validate_connections_schema_test,validate_connections_test,validate_global_variable_names_test,validate_global_variables-test,validate_no_double_underscore_alias_test,validate_no_unselectable_selections_test,validate_static_args] [package] name = "relay-transforms" version = "0.0.0" diff --git a/compiler/crates/relay-transforms/src/apply_transforms.rs b/compiler/crates/relay-transforms/src/apply_transforms.rs index 6c27fabf28514..8cf9d23bed767 100644 --- a/compiler/crates/relay-transforms/src/apply_transforms.rs +++ b/compiler/crates/relay-transforms/src/apply_transforms.rs @@ -180,13 +180,6 @@ fn apply_common_transforms( ) })?; - if project_config.feature_flags.enable_flight_transform { - program = log_event.time("react_flight", || react_flight(&program))?; - program = log_event.time("relay_client_component", || { - relay_client_component(&program, &project_config.feature_flags) - })?; - } - program = log_event.time("relay_actor_change_transform", || { relay_actor_change_transform(&program, &project_config.feature_flags.actor_change_support) })?; diff --git a/compiler/crates/relay-transforms/src/errors.rs b/compiler/crates/relay-transforms/src/errors.rs index d20fec1ba46de..c99cb30c6ebf1 100644 --- a/compiler/crates/relay-transforms/src/errors.rs +++ b/compiler/crates/relay-transforms/src/errors.rs @@ -14,34 +14,13 @@ use common::WithDiagnosticData; use graphql_ir::FragmentDefinitionName; use graphql_ir::VariableName; use intern::string_key::StringKey; -use intern::Lookup; use thiserror::Error; #[derive(Clone, Debug, Error, Eq, PartialEq, Ord, PartialOrd, Hash)] pub enum ValidationMessage { - #[error("@relay_client_component is not compatible with these {}: `{}`", - if incompatible_directives.len() > 1 { "directives" } else { "directive" }, - incompatible_directives - .iter() - .map(|name| name.0.lookup()) - .collect::>() - .join("`, `")) - ] - IncompatibleRelayClientComponentDirectives { - incompatible_directives: Vec, - }, - - #[error("@relay_client_component is not compatible with @arguments.")] - InvalidRelayClientComponentWithArguments, - #[error("This fragment spread already has a split normalization file generated.")] DuplicateRelayClientComponentSplitOperation, - #[error( - "@relay_client_component can only be used on fragments on Viewer or Query, or whose type implements the Node interface. If the fragment's type is a union type, all members of that union must implement Node." - )] - InvalidRelayClientComponentNonNodeFragment, - #[error( "The Relay Resolver backing this field has an `@relay_resolver` directive with an invalid '{key}' argument. Expected a literal string value." )] @@ -113,7 +92,7 @@ pub enum ValidationMessage { }, #[error( - "The '{fragment_name}' is transformed to use @no_inline implictly by `@module` or `@relay_client_component`, but it's also used in a regular fragment spread. It's required to explicitly add `@no_inline` to the definition of '{fragment_name}'." + "The '{fragment_name}' is transformed to use @no_inline implictly by `@module`, but it's also used in a regular fragment spread. It's required to explicitly add `@no_inline` to the definition of '{fragment_name}'." )] RequiredExplicitNoInlineDirective { fragment_name: FragmentDefinitionName, diff --git a/compiler/crates/relay-transforms/src/inline_fragments.rs b/compiler/crates/relay-transforms/src/inline_fragments.rs index 936fb2141cae5..f6164c89f2f1a 100644 --- a/compiler/crates/relay-transforms/src/inline_fragments.rs +++ b/compiler/crates/relay-transforms/src/inline_fragments.rs @@ -21,7 +21,6 @@ use graphql_ir::Selection; use graphql_ir::Transformed; use graphql_ir::Transformer; -use crate::relay_client_component::RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME; use crate::NoInlineFragmentSpreadMetadata; use crate::RelayLocationAgnosticBehavior; @@ -128,7 +127,6 @@ impl<'s> Transformer for InlineFragmentsTransform<'s> { Selection::FragmentSpread(selection) => { let should_skip_inline = selection.directives.iter().any(|directive| { directive.name.item == NoInlineFragmentSpreadMetadata::directive_name() - || directive.name.item == *RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME }); if should_skip_inline { Transformed::Keep diff --git a/compiler/crates/relay-transforms/src/lib.rs b/compiler/crates/relay-transforms/src/lib.rs index 80837f84750a8..3b85a671a993b 100644 --- a/compiler/crates/relay-transforms/src/lib.rs +++ b/compiler/crates/relay-transforms/src/lib.rs @@ -43,10 +43,8 @@ mod murmurhash; mod no_inline; mod preloadable_directive; mod provided_variable_fragment_transform; -mod react_flight; mod refetchable_fragment; mod relay_actor_change; -mod relay_client_component; mod relay_directive; mod relay_node_identifier; mod relay_resolvers; @@ -154,9 +152,6 @@ pub use no_inline::NO_INLINE_DIRECTIVE_NAME; pub use preloadable_directive::is_operation_preloadable; pub use preloadable_directive::should_generate_hack_preloader; pub use provided_variable_fragment_transform::provided_variable_fragment_transform; -pub use react_flight::react_flight; -pub use react_flight::ReactFlightLocalComponentsMetadata; -pub use react_flight::REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY; pub use refetchable_fragment::transform_refetchable_fragment; pub use refetchable_fragment::RefetchableDerivedFromMetadata; pub use refetchable_fragment::RefetchableMetadata; @@ -164,11 +159,6 @@ pub use refetchable_fragment::CONSTANTS as REFETCHABLE_CONSTANTS; pub use refetchable_fragment::REFETCHABLE_NAME; pub use relay_actor_change::relay_actor_change_transform; pub use relay_actor_change::RELAY_ACTOR_CHANGE_DIRECTIVE_FOR_CODEGEN; -pub use relay_client_component::relay_client_component; -pub use relay_client_component::RelayClientComponentMetadata; -pub use relay_client_component::RELAY_CLIENT_COMPONENT_DIRECTIVE_NAME; -pub use relay_client_component::RELAY_CLIENT_COMPONENT_MODULE_ID_ARGUMENT_NAME; -pub use relay_client_component::RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME; pub use relay_directive::RelayDirective; pub use relay_node_identifier::RelayLocationAgnosticBehavior; pub use relay_resolvers::get_resolver_fragment_dependency_name; diff --git a/compiler/crates/relay-transforms/src/no_inline/mod.rs b/compiler/crates/relay-transforms/src/no_inline/mod.rs index 432989c7fea4a..93df115048152 100644 --- a/compiler/crates/relay-transforms/src/no_inline/mod.rs +++ b/compiler/crates/relay-transforms/src/no_inline/mod.rs @@ -28,7 +28,6 @@ use lazy_static::lazy_static; use crate::ValidationMessage; use crate::MATCH_CONSTANTS; -use crate::RELAY_CLIENT_COMPONENT_DIRECTIVE_NAME; lazy_static! { pub static ref NO_INLINE_DIRECTIVE_NAME: DirectiveName = DirectiveName("no_inline".intern()); @@ -157,10 +156,10 @@ impl<'f, 'p> Validator for RequiredNoInlineValidator<'f, 'p> { // If the fragment spread isn't used for @module or @relay_client_component // then explicit @no_inline is required. if spread.directives.is_empty() - || !spread.directives.iter().any(|directive| { - directive.name.item == MATCH_CONSTANTS.module_directive_name - || directive.name.item == *RELAY_CLIENT_COMPONENT_DIRECTIVE_NAME - }) + || !spread + .directives + .iter() + .any(|directive| directive.name.item == MATCH_CONSTANTS.module_directive_name) { Err(vec![ Diagnostic::error( diff --git a/compiler/crates/relay-transforms/src/react_flight.rs b/compiler/crates/relay-transforms/src/react_flight.rs deleted file mode 100644 index 1e1702245afc3..0000000000000 --- a/compiler/crates/relay-transforms/src/react_flight.rs +++ /dev/null @@ -1,453 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -use std::sync::Arc; - -use common::ArgumentName; -use common::Diagnostic; -use common::DiagnosticsResult; -use common::DirectiveName; -use common::Location; -use common::NamedItem; -use common::WithLocation; -use graphql_ir::associated_data_impl; -use graphql_ir::Argument; -use graphql_ir::ConstantValue; -use graphql_ir::Directive; -use graphql_ir::FragmentDefinition; -use graphql_ir::FragmentDefinitionNameMap; -use graphql_ir::FragmentSpread; -use graphql_ir::OperationDefinition; -use graphql_ir::Program; -use graphql_ir::ScalarField; -use graphql_ir::Selection; -use graphql_ir::Transformed; -use graphql_ir::Transformer; -use graphql_ir::Value; -use intern::string_key::Intern; -use intern::string_key::StringKey; -use intern::string_key::StringKeySet; -use itertools::Itertools; -use lazy_static::lazy_static; -use schema::Field; -use schema::FieldID; -use schema::Schema; -use schema::Type; -use thiserror::Error; - -lazy_static! { - static ref REACT_FLIGHT_TRANSITIVE_COMPONENTS_DIRECTIVE_NAME: DirectiveName = - DirectiveName("react_flight".intern()); - static ref REACT_FLIGHT_TRANSITIVE_COMPONENTS_DIRECTIVE_ARG: ArgumentName = - ArgumentName("components".intern()); - pub static ref REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY: DirectiveName = - DirectiveName("__ReactFlightComponent".intern()); - static ref REACT_FLIGHT_COMPONENT_ARGUMENT_NAME: ArgumentName = - ArgumentName("component".intern()); - static ref REACT_FLIGHT_PROPS_ARGUMENT_NAME: ArgumentName = ArgumentName("props".intern()); - static ref REACT_FLIGHT_PROPS_TYPE: StringKey = "ReactFlightProps".intern(); - static ref REACT_FLIGHT_COMPONENT_TYPE: StringKey = "ReactFlightComponent".intern(); - static ref REACT_FLIGHT_FIELD_NAME: StringKey = "flight".intern(); - static ref REACT_FLIGHT_EXTENSION_DIRECTIVE_NAME: DirectiveName = - DirectiveName("react_flight_component".intern()); - static ref NAME_ARGUMENT: ArgumentName = ArgumentName("name".intern()); -} - -#[derive(Clone, Debug, PartialEq, Eq, Hash)] -pub struct ReactFlightLocalComponentsMetadata { - pub components: Vec, -} -associated_data_impl!(ReactFlightLocalComponentsMetadata); - -/// Transform to find calls to React Flight schema extension fields and rewrite them into calls -/// to a generic `flight(component, props)` field. Also tracks which Flight fields each document -/// references locally (stored as a metadata directive on fragments/operations) as well as which -/// Flight fields each operation uses transitively (stored as a server directive on operations). -pub fn react_flight(program: &Program) -> DiagnosticsResult { - // No-op unless the special props/component types and flight directive are defined - let props_type = program.schema.get_type(*REACT_FLIGHT_PROPS_TYPE); - let component_type = program.schema.get_type(*REACT_FLIGHT_COMPONENT_TYPE); - let (props_type, component_type) = match (props_type, component_type) { - (Some(props_type), Some(component_type)) => (props_type, component_type), - _ => return Ok(program.clone()), - }; - let mut transform = ReactFlightTransform::new(program, props_type, component_type); - let transform_result = transform.transform_program(program); - if transform.errors.is_empty() { - Ok(transform_result.replace_or_else(|| program.clone())) - } else { - Err(transform.errors) - } -} - -struct ReactFlightTransform<'s> { - component_type: Type, - errors: Vec, - program: &'s Program, - props_type: Type, - // server components encountered as a dependency of the visited operation/fragment - // NOTE: this is operation/fragment-specific - local_components: StringKeySet, - transitive_components: StringKeySet, - fragments: FragmentDefinitionNameMap, -} - -enum FragmentResult { - Pending, - Resolved { - fragment: Transformed, - transitive_components: StringKeySet, - }, -} - -impl<'s> ReactFlightTransform<'s> { - fn new(program: &'s Program, props_type: Type, component_type: Type) -> Self { - Self { - component_type, - errors: Default::default(), - program, - props_type, - local_components: Default::default(), - transitive_components: Default::default(), - fragments: Default::default(), - } - } - - fn get_component_name_for_field( - &mut self, - field_definition: &Field, - location: Location, - ) -> Result { - // the field definition must specify the backing component's module name - let component_directive = match field_definition - .directives - .named(*REACT_FLIGHT_EXTENSION_DIRECTIVE_NAME) - { - Some(component_directive) => component_directive, - None => { - self.errors.push(Diagnostic::error( - ValidationMessage::InvalidFlightFieldMissingModuleDirective, - location, - )); - return Err(()); - } - }; - // extract the component name - let value = component_directive - .arguments - .iter() - .cloned() - .find(|arg| arg.name == *NAME_ARGUMENT) - .unwrap() - .value; - match value { - graphql_syntax::ConstantValue::String(node) => Ok(node.value), - _ => { - self.errors.push(Diagnostic::error( - ValidationMessage::InvalidFlightFieldExpectedModuleNameString, - location, - )); - Err(()) - } - } - } - - // validates that the field's parent type also has a field conforming to the - // following specification: - // - // ``` - // flight( - // component: String - // props: ReactFlightProps - // ): ReactFlightComponent - // ``` - fn validate_flight_field( - &mut self, - field_definition: &Field, - location: Location, - ) -> Result { - // not a built-in field, so there must be a parent type or the schema is - // invalid (which is a compiler error not a user error) - let parent_type = field_definition - .parent_type - .unwrap_or_else(|| panic!("Expected field to have a parent type")); - - // the parent type must have the generic `flight` field - let flight_field_id = match self - .program - .schema - .named_field(parent_type, *REACT_FLIGHT_FIELD_NAME) - { - Some(flight_field_id) => flight_field_id, - None => { - self.errors.push(Diagnostic::error( - ValidationMessage::InvalidFlightFieldNotDefinedOnType { - field_name: field_definition.name.item, - }, - location, - )); - return Err(()); - } - }; - let flight_field_definition = self.program.schema.field(flight_field_id); - - // flight field must have `props: ReactFlightProps` arg - let props_argument = flight_field_definition.arguments.iter().find(|arg| { - arg.name == *REACT_FLIGHT_PROPS_ARGUMENT_NAME && arg.type_.inner() == self.props_type - }); - if props_argument.is_none() { - self.errors.push(Diagnostic::error( - ValidationMessage::InvalidFlightFieldPropsArgument, - location, - )); - return Err(()); - } - // flight field must have `component: String` arg - let component_argument = flight_field_definition.arguments.iter().find(|arg| { - arg.name == *REACT_FLIGHT_COMPONENT_ARGUMENT_NAME - && Some(arg.type_.inner()) == self.program.schema.get_type("String".intern()) - }); - if component_argument.is_none() { - self.errors.push(Diagnostic::error( - ValidationMessage::InvalidFlightFieldComponentArgument, - location, - )); - return Err(()); - } - // flight field must return `ReactFlightComponent` - if flight_field_definition.type_.inner() != self.component_type { - self.errors.push(Diagnostic::error( - ValidationMessage::InvalidFlightFieldReturnType, - location, - )); - return Err(()); - } - Ok(flight_field_id) - } - - // Generate a metadata directive recording which server components were reachable - // from the visited IR nodes - fn generate_flight_local_flight_components_metadata_directive(&self) -> Directive { - ReactFlightLocalComponentsMetadata { - components: self.local_components.iter().copied().sorted().collect(), - } - .into() - } - - // Generate a server directive recording which server components were *transitively* reachable - // from the visited IR nodes - fn generate_flight_transitive_flight_components_server_directive(&self) -> Directive { - let mut components: Vec = self.transitive_components.iter().copied().collect(); - components.sort(); - Directive { - name: WithLocation::generated(*REACT_FLIGHT_TRANSITIVE_COMPONENTS_DIRECTIVE_NAME), - arguments: vec![Argument { - name: WithLocation::generated(*REACT_FLIGHT_TRANSITIVE_COMPONENTS_DIRECTIVE_ARG), - value: WithLocation::generated(Value::Constant(ConstantValue::List( - components.into_iter().map(ConstantValue::String).collect(), - ))), - }], - data: None, - } - } -} - -impl<'s> Transformer for ReactFlightTransform<'s> { - const NAME: &'static str = "ReactFlightTransform"; - const VISIT_ARGUMENTS: bool = false; - const VISIT_DIRECTIVES: bool = false; - - fn transform_operation( - &mut self, - operation: &OperationDefinition, - ) -> Transformed { - // reset component lists per document - self.local_components.clear(); - self.transitive_components.clear(); - let transformed = self.default_transform_operation(operation); - - // if there are no locally or transitively referenced server components there is no metadata - // to add to the fragment - if self.transitive_components.is_empty() && self.local_components.is_empty() { - return transformed; - } - - let mut operation = transformed.unwrap_or_else(|| operation.clone()); - self.transitive_components - .extend(self.local_components.iter().cloned()); - operation.directives.reserve_exact(2); - operation - .directives - .push(self.generate_flight_local_flight_components_metadata_directive()); - if self - .program - .schema - .has_directive(*REACT_FLIGHT_TRANSITIVE_COMPONENTS_DIRECTIVE_NAME) - { - operation - .directives - .push(self.generate_flight_transitive_flight_components_server_directive()); - } - Transformed::Replace(operation) - } - - fn transform_fragment( - &mut self, - fragment: &FragmentDefinition, - ) -> Transformed { - if let Some(FragmentResult::Resolved { fragment, .. }) = - self.fragments.get(&fragment.name.item) - { - // fragment has already been visited (a previous fragment transitively referenced this one) - return fragment.clone(); - } - - // reset component lists per document - self.local_components.clear(); - self.transitive_components.clear(); - let transformed = self.default_transform_fragment(fragment); - - // if there are no locally referenced server components there is no metadata to add to the fragment - if self.local_components.is_empty() { - return transformed; - } - - let mut fragment = transformed.unwrap_or_else(|| fragment.clone()); - fragment.directives.reserve_exact(1); - fragment - .directives - .push(self.generate_flight_local_flight_components_metadata_directive()); - - Transformed::Replace(fragment) - } - - fn transform_fragment_spread(&mut self, spread: &FragmentSpread) -> Transformed { - match self.fragments.get(&spread.fragment.item) { - Some(FragmentResult::Resolved { - transitive_components, - .. - }) => { - self.transitive_components - .extend(transitive_components.iter().cloned()); - return Transformed::Keep; - } - Some(FragmentResult::Pending) => { - // recursive fragment, immediately return to avoid infinite loop. components will be added - // at the point where the fragment was first reached - return Transformed::Keep; - } - None => {} - }; - // capture the local/transitive component sets prior to visiting the fragment - let mut local_components = std::mem::take(&mut self.local_components); - let mut transitive_components = std::mem::take(&mut self.transitive_components); - // mark the fragment as pending in case of a recursive fragment and then visit it - self.fragments - .insert(spread.fragment.item, FragmentResult::Pending); - let fragment = - self.transform_fragment(self.program.fragment(spread.fragment.item).unwrap_or_else( - || { - panic!( - "Tried to spread missing fragment: `{}`.", - spread.fragment.item - ); - }, - )); - // extend the parent's transitive component set w the local and transitive components from the fragment - transitive_components.extend(self.local_components.iter().cloned()); - transitive_components.extend(self.transitive_components.iter().cloned()); - // then make the parent's sets active again - std::mem::swap(&mut self.local_components, &mut local_components); - std::mem::swap(&mut self.transitive_components, &mut transitive_components); - - transitive_components.extend(local_components); - self.fragments.insert( - spread.fragment.item, - FragmentResult::Resolved { - fragment, - transitive_components, - }, - ); - Transformed::Keep - } - - fn transform_scalar_field(&mut self, field: &ScalarField) -> Transformed { - let field_definition = self.program.schema.field(field.definition.item); - // Activate the transform based on the return type since this is a fast check - if field_definition.type_.inner() != self.component_type { - return Transformed::Keep; - } - - // Extract the backing component's name from the field definition - let component_name = - match self.get_component_name_for_field(field_definition, field.definition.location) { - Ok(value) => value, - Err(_) => return Transformed::Keep, - }; - - // Determine the type's `flight` field - let flight_field_id = - match self.validate_flight_field(field_definition, field.definition.location) { - Ok(value) => value, - Err(_) => return Transformed::Keep, - }; - - // Record that the given component is reachable from this field - self.local_components.insert(component_name); - - // Rewrite into a call to the `flight` field, passing the original arguments - // as values of the `props` argument: - let alias = field.alias.unwrap_or(field_definition.name); - let mut directives = Vec::with_capacity(field.directives.len() + 1); - directives.extend(field.directives.iter().cloned()); - directives.push(Directive { - name: WithLocation::generated(*REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY), - arguments: vec![], - data: None, - }); - Transformed::Replace(Selection::ScalarField(Arc::new(ScalarField { - alias: Some(alias), - arguments: vec![ - Argument { - name: WithLocation::generated(*REACT_FLIGHT_COMPONENT_ARGUMENT_NAME), - value: WithLocation::generated(Value::Constant(ConstantValue::String( - component_name, - ))), - }, - Argument { - name: WithLocation::generated(*REACT_FLIGHT_PROPS_ARGUMENT_NAME), - value: WithLocation::generated(Value::Object(field.arguments.clone())), - }, - ], - definition: WithLocation::generated(flight_field_id), - directives, - }))) - } -} - -#[derive(Error, Debug)] -enum ValidationMessage { - #[error( - "Expected 'flight' field schema definition to specify its component name with @react_flight_component" - )] - InvalidFlightFieldMissingModuleDirective, - - #[error("Cannot query field '{field_name}', this type does not define a 'flight' field")] - InvalidFlightFieldNotDefinedOnType { field_name: StringKey }, - - #[error("Expected @react_flight_component value to be a literal string")] - InvalidFlightFieldExpectedModuleNameString, - - #[error("Expected flight field to have a 'props: ReactFlightProps' argument")] - InvalidFlightFieldPropsArgument, - - #[error("Expected flight field to have a 'component: String' argument")] - InvalidFlightFieldComponentArgument, - - #[error("Expected flight field to return 'ReactFlightComponent'")] - InvalidFlightFieldReturnType, -} diff --git a/compiler/crates/relay-transforms/src/relay_client_component.rs b/compiler/crates/relay-transforms/src/relay_client_component.rs deleted file mode 100644 index 4d7099622aa9c..0000000000000 --- a/compiler/crates/relay-transforms/src/relay_client_component.rs +++ /dev/null @@ -1,417 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -use std::sync::Arc; - -use common::ArgumentName; -use common::Diagnostic; -use common::DiagnosticsResult; -use common::DirectiveName; -use common::FeatureFlag; -use common::FeatureFlags; -use common::InterfaceName; -use common::NamedItem; -use common::WithLocation; -use graphql_ir::associated_data_impl; -use graphql_ir::Argument; -use graphql_ir::ConstantValue; -use graphql_ir::Directive; -use graphql_ir::ExecutableDefinitionName; -use graphql_ir::FragmentDefinition; -use graphql_ir::FragmentDefinitionNameMap; -use graphql_ir::FragmentSpread; -use graphql_ir::OperationDefinition; -use graphql_ir::OperationDefinitionName; -use graphql_ir::Program; -use graphql_ir::Selection; -use graphql_ir::Transformed; -use graphql_ir::Transformer; -use graphql_ir::Value; -use graphql_syntax::OperationKind; -use intern::string_key::Intern; -use intern::string_key::StringKey; -use intern::string_key::StringKeyMap; -use intern::string_key::StringKeySet; -use itertools::Itertools; -use lazy_static::lazy_static; -use schema::InterfaceID; -use schema::Schema; -use schema::Type; - -use super::ValidationMessage; -use crate::match_::SplitOperationMetadata; -use crate::no_inline::attach_no_inline_directives_to_fragments; -use crate::no_inline::validate_required_no_inline_directive; -use crate::util::get_fragment_filename; -use crate::util::get_normalization_operation_name; - -lazy_static! { - pub static ref RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME: DirectiveName = - DirectiveName("relay_client_component_server".intern()); - pub static ref RELAY_CLIENT_COMPONENT_MODULE_ID_ARGUMENT_NAME: ArgumentName = - ArgumentName("module_id".intern()); - pub static ref RELAY_CLIENT_COMPONENT_DIRECTIVE_NAME: DirectiveName = - DirectiveName("relay_client_component".intern()); - static ref STRING_TYPE: StringKey = "String".intern(); - static ref NODE_TYPE_NAME: InterfaceName = InterfaceName("Node".intern()); - static ref VIEWER_TYPE_NAME: StringKey = "Viewer".intern(); -} - -#[derive(Clone, Debug, PartialEq, Eq, Hash)] -pub struct RelayClientComponentMetadata { - pub split_operation_filenames: Vec, -} -associated_data_impl!(RelayClientComponentMetadata); - -pub fn relay_client_component( - program: &Program, - feature_flags: &FeatureFlags, -) -> DiagnosticsResult { - // Noop, the @relay_client_component_server directive is not defined in the schema - if program - .schema - .get_directive(*RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME) - .is_none() - { - return Ok(program.clone()); - } - let node_interface_id = program - .schema - .get_type(NODE_TYPE_NAME.0) - .and_then(|type_| { - if let Type::Interface(id) = type_ { - Some(id) - } else { - None - } - }) - .expect("@relay_client_component requires your schema to define the Node interface."); - - let mut transform = - RelayClientComponentTransform::new(program, node_interface_id, feature_flags); - let mut next_program = transform - .transform_program(program) - .replace_or_else(|| program.clone()); - - if !transform.no_inline_fragments.is_empty() { - validate_required_no_inline_directive(&transform.no_inline_fragments, program)?; - attach_no_inline_directives_to_fragments( - &mut transform.no_inline_fragments, - &mut next_program, - ); - } - if !transform.split_operations.is_empty() { - for (_, (metadata, mut operation)) in transform.split_operations.drain() { - operation.directives.push(metadata.into()); - if let Some(prev_operation) = - next_program.operation(OperationDefinitionName(operation.name.item.0)) - { - transform.errors.push(Diagnostic::error( - ValidationMessage::DuplicateRelayClientComponentSplitOperation, - prev_operation.name.location, - )); - } else { - next_program.insert_operation(Arc::new(operation)) - } - } - } - - if transform.errors.is_empty() { - Ok(next_program) - } else { - Err(transform.errors) - } -} - -struct RelayClientComponentTransform<'program, 'flag> { - program: &'program Program, - errors: Vec, - split_operations: StringKeyMap<(SplitOperationMetadata, OperationDefinition)>, - node_interface_id: InterfaceID, - /// Name of the document currently being transformed. - document_name: Option, - split_operation_filenames: StringKeySet, - no_inline_flag: &'flag FeatureFlag, - // Stores the fragments that should use @no_inline and their parent document name - no_inline_fragments: FragmentDefinitionNameMap>, -} - -impl<'program, 'flag> RelayClientComponentTransform<'program, 'flag> { - fn new( - program: &'program Program, - node_interface_id: InterfaceID, - feature_flags: &'flag FeatureFlags, - ) -> Self { - Self { - program, - errors: Default::default(), - split_operations: Default::default(), - node_interface_id, - document_name: None, - split_operation_filenames: Default::default(), - no_inline_flag: &feature_flags.no_inline, - no_inline_fragments: Default::default(), - } - } - - fn transform_relay_client_component( - &mut self, - spread: &FragmentSpread, - ) -> Result, Diagnostic> { - if let Some(incompatible_directives_diagnostic) = - self.get_incompatible_directives_diagnostic(spread) - { - return Err(incompatible_directives_diagnostic); - } - // @relay_client_component does not take arguments (yet) - if let Some(argument) = spread.arguments.first() { - return Err(Diagnostic::error( - ValidationMessage::InvalidRelayClientComponentWithArguments, - argument.name.location, - )); - } - - let fragment = self - .program - .fragment(spread.fragment.item) - .unwrap_or_else(|| panic!("Expected to find fragment `{}`", spread.fragment.item)); - // Validate that the fragment's type condition MUST implement `Node`. - let node_interface_id = self.node_interface_id; - let implements_node = match fragment.type_condition { - // Fragments can be specified on object types, interfaces, and unions. - // https://spec.graphql.org/June2018/#sec-Type-Conditions - Type::Interface(id) => { - id == node_interface_id - || self - .program - .schema - .interface(id) - .implementing_objects - .iter() - .all(|&object_id| { - self.program - .schema - .object(object_id) - .interfaces - .iter() - .any(|interface_id| *interface_id == node_interface_id) - }) - } - Type::Object(id) => self - .program - .schema - .object(id) - .interfaces - .iter() - .any(|interface_id| *interface_id == node_interface_id), - Type::Union(id) => self - .program - .schema - .union(id) - .members - .iter() - .all(|&object_id| { - self.program - .schema - .object(object_id) - .interfaces - .iter() - .any(|interface_id| *interface_id == node_interface_id) - }), - _ => false, - }; - let is_fragment_on_query = - fragment.type_condition == self.program.schema.query_type().unwrap(); - let is_fragment_on_viewer = - self.program.schema.get_type_name(fragment.type_condition) == *VIEWER_TYPE_NAME; - if !implements_node && !is_fragment_on_query && !is_fragment_on_viewer { - return Err(Diagnostic::error( - ValidationMessage::InvalidRelayClientComponentNonNodeFragment, - fragment.name.location, - )); - } - - let should_use_no_inline = self.no_inline_flag.is_enabled_for(spread.fragment.item.0); - if should_use_no_inline { - self.no_inline_fragments - .entry(fragment.name.item) - .or_default() - .push(self.document_name.unwrap()); - } else { - // Generate a SplitOperation AST - let created_split_operation = self - .split_operations - .entry(spread.fragment.item.0) - .or_insert_with(|| { - let normalization_name = - get_normalization_operation_name(spread.fragment.item.0).intern(); - ( - SplitOperationMetadata { - derived_from: Some(spread.fragment.item), - location: self - .program - .fragment(spread.fragment.item) - .unwrap() - .name - .location, - parent_documents: Default::default(), - raw_response_type_generation_mode: None, - }, - OperationDefinition { - name: WithLocation::new( - spread.fragment.location, - OperationDefinitionName(normalization_name), - ), - type_: fragment.type_condition, - kind: OperationKind::Query, - variable_definitions: fragment.variable_definitions.clone(), - directives: fragment.directives.clone(), - selections: vec![Selection::FragmentSpread(Arc::new(FragmentSpread { - arguments: Default::default(), - directives: Default::default(), - fragment: spread.fragment, - }))], - }, - ) - }); - created_split_operation - .0 - .parent_documents - .insert(self.document_name.unwrap()); - } - - // @relay_client_component -> @relay_client_component_server(module_id: "...") - let module_id = get_fragment_filename(spread.fragment.item); - let mut next_directives = spread.directives.clone(); - if let Some(relay_client_component_directive) = next_directives - .iter_mut() - .find(|directive| directive.name.item == *RELAY_CLIENT_COMPONENT_DIRECTIVE_NAME) - { - *relay_client_component_directive = Directive { - name: WithLocation { - item: *RELAY_CLIENT_COMPONENT_SERVER_DIRECTIVE_NAME, - location: relay_client_component_directive.name.location, - }, - arguments: vec![Argument { - name: WithLocation::generated(*RELAY_CLIENT_COMPONENT_MODULE_ID_ARGUMENT_NAME), - value: WithLocation::generated(Value::Constant(ConstantValue::String( - module_id, - ))), - }], - data: None, - }; - } - - // Record the SplitOperation so we can emit metadata later - self.split_operation_filenames.insert(module_id); - - Ok(Transformed::Replace(Selection::FragmentSpread(Arc::new( - FragmentSpread { - directives: next_directives, - ..spread.clone() - }, - )))) - } - - fn get_incompatible_directives_diagnostic( - &self, - spread: &FragmentSpread, - ) -> Option { - let incompatible_directives = spread - .directives - .iter() - .filter_map(|directive| { - if directive.name.item != *RELAY_CLIENT_COMPONENT_DIRECTIVE_NAME { - Some(directive.name.item) - } else { - None - } - }) - .collect::>(); - if !incompatible_directives.is_empty() { - Some(Diagnostic::error( - ValidationMessage::IncompatibleRelayClientComponentDirectives { - incompatible_directives, - }, - spread.fragment.location, - )) - } else { - None - } - } - - fn generate_relay_client_component_client_metadata_directive(&mut self) -> Directive { - let split_operation_filenames = self.split_operation_filenames.drain().sorted().collect(); - RelayClientComponentMetadata { - split_operation_filenames, - } - .into() - } -} - -impl<'program, 'flag> Transformer for RelayClientComponentTransform<'program, 'flag> { - const NAME: &'static str = "RelayClientComponentTransform"; - const VISIT_ARGUMENTS: bool = false; - const VISIT_DIRECTIVES: bool = false; - - fn transform_operation( - &mut self, - operation: &OperationDefinition, - ) -> Transformed { - assert!(self.split_operation_filenames.is_empty()); - self.document_name = Some(operation.name.item.into()); - - let transformed = self.default_transform_operation(operation); - if self.split_operation_filenames.is_empty() { - return transformed; - } - - let mut operation = transformed.unwrap_or_else(|| operation.clone()); - operation.directives.reserve_exact(1); - operation - .directives - .push(self.generate_relay_client_component_client_metadata_directive()); - Transformed::Replace(operation) - } - - fn transform_fragment( - &mut self, - fragment: &FragmentDefinition, - ) -> Transformed { - assert!(self.split_operation_filenames.is_empty()); - self.document_name = Some(fragment.name.item.into()); - - let transformed = self.default_transform_fragment(fragment); - if self.split_operation_filenames.is_empty() { - return transformed; - } - - let mut fragment = transformed.unwrap_or_else(|| fragment.clone()); - fragment.directives.reserve_exact(1); - fragment - .directives - .push(self.generate_relay_client_component_client_metadata_directive()); - Transformed::Replace(fragment) - } - - fn transform_fragment_spread(&mut self, spread: &FragmentSpread) -> Transformed { - let relay_client_component_directive = spread - .directives - .named(*RELAY_CLIENT_COMPONENT_DIRECTIVE_NAME); - if relay_client_component_directive.is_some() { - match self.transform_relay_client_component(spread) { - Ok(transformed) => transformed, - Err(err) => { - self.errors.push(err); - self.default_transform_fragment_spread(spread) - } - } - } else { - self.default_transform_fragment_spread(spread) - } - } -} diff --git a/compiler/crates/relay-transforms/src/util.rs b/compiler/crates/relay-transforms/src/util.rs index ba6ff26fdb96f..0a8023acefce2 100644 --- a/compiler/crates/relay-transforms/src/util.rs +++ b/compiler/crates/relay-transforms/src/util.rs @@ -27,7 +27,6 @@ use crate::client_extensions::CLIENT_EXTENSION_DIRECTIVE_NAME; use crate::connections::ConnectionMetadataDirective; use crate::handle_fields::HANDLE_FIELD_DIRECTIVE_NAME; use crate::inline_data_fragment::InlineDirectiveMetadata; -use crate::react_flight::REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY; use crate::refetchable_fragment::RefetchableMetadata; use crate::relay_actor_change::RELAY_ACTOR_CHANGE_DIRECTIVE_FOR_CODEGEN; use crate::required_directive::CHILDREN_CAN_BUBBLE_METADATA_KEY; @@ -36,9 +35,7 @@ use crate::ClientEdgeGeneratedQueryMetadataDirective; use crate::ClientEdgeMetadataDirective; use crate::FragmentAliasMetadata; use crate::ModuleMetadata; -use crate::ReactFlightLocalComponentsMetadata; use crate::RefetchableDerivedFromMetadata; -use crate::RelayClientComponentMetadata; use crate::RelayResolverMetadata; use crate::RequiredMetadataDirective; use crate::DIRECTIVE_SPLIT_OPERATION; @@ -87,7 +84,7 @@ pub fn extract_variable_name(argument: Option<&Argument>) -> Option { } lazy_static! { - static ref CUSTOM_METADATA_DIRECTIVES: [DirectiveName; 22] = [ + static ref CUSTOM_METADATA_DIRECTIVES: [DirectiveName; 19] = [ *CLIENT_EXTENSION_DIRECTIVE_NAME, ConnectionMetadataDirective::directive_name(), *HANDLE_FIELD_DIRECTIVE_NAME, @@ -97,21 +94,18 @@ lazy_static! { RefetchableDerivedFromMetadata::directive_name(), *INTERNAL_METADATA_DIRECTIVE, *ARGUMENT_DEFINITION, - *REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY, - ReactFlightLocalComponentsMetadata::directive_name(), *REQUIRED_DIRECTIVE_NAME, RequiredMetadataDirective::directive_name(), ClientEdgeMetadataDirective::directive_name(), ClientEdgeGeneratedQueryMetadataDirective::directive_name(), *CHILDREN_CAN_BUBBLE_METADATA_KEY, RelayResolverMetadata::directive_name(), - RelayClientComponentMetadata::directive_name(), *UNUSED_LOCAL_VARIABLE_DEPRECATED, *RELAY_ACTOR_CHANGE_DIRECTIVE_FOR_CODEGEN, ProvidedVariableMetadata::directive_name(), FragmentAliasMetadata::directive_name(), ]; - static ref DIRECTIVES_SKIPPED_IN_NODE_IDENTIFIER: [DirectiveName; 11] = [ + static ref DIRECTIVES_SKIPPED_IN_NODE_IDENTIFIER: [DirectiveName; 8] = [ *CLIENT_EXTENSION_DIRECTIVE_NAME, ConnectionMetadataDirective::directive_name(), *HANDLE_FIELD_DIRECTIVE_NAME, @@ -119,10 +113,7 @@ lazy_static! { RefetchableDerivedFromMetadata::directive_name(), *INTERNAL_METADATA_DIRECTIVE, *ARGUMENT_DEFINITION, - *REACT_FLIGHT_SCALAR_FLIGHT_FIELD_METADATA_KEY, - ReactFlightLocalComponentsMetadata::directive_name(), *REQUIRED_DIRECTIVE_NAME, - RelayClientComponentMetadata::directive_name(), ]; static ref RELAY_CUSTOM_INLINE_FRAGMENT_DIRECTIVES: [DirectiveName; 8] = [ *CLIENT_EXTENSION_DIRECTIVE_NAME, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-inline-fragment-no-type-condition.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-inline-fragment-no-type-condition.expected index 41724255c79db..3e7861c9aa8ad 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-inline-fragment-no-type-condition.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-inline-fragment-no-type-condition.expected @@ -38,7 +38,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, @@ -65,7 +65,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-inline-fragment.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-inline-fragment.expected index 5e253386f697d..0f089a34924d6 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-inline-fragment.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-inline-fragment.expected @@ -43,7 +43,7 @@ fragment Foo_node on Node { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, @@ -72,7 +72,7 @@ fragment Foo_node on Node { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-to-client-object.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-to-client-object.expected index bf30b08e2be03..a9bca2149757d 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-to-client-object.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-to-client-object.expected @@ -36,7 +36,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(518), + # field_id: FieldID(517), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-variables.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-variables.expected index 52d62c03e5905..b1b0d3b0e298c 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-variables.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-variables.expected @@ -30,7 +30,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-with-required.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-with-required.expected index 1a6166afcb5a8..5a0b9b91a3ef2 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-with-required.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-with-required.expected @@ -34,7 +34,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-within-non-client-edge.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-within-non-client-edge.expected index 34a702c7c1cf4..d013e7157317e 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-within-non-client-edge.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge-within-non-client-edge.expected @@ -33,7 +33,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge.expected index 7bb90aa47d756..b3f3e6e179670 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/client-edge.expected @@ -30,7 +30,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-client-edges-with-variables.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-client-edges-with-variables.expected index 49b16d0564756..9b46c7b22cbb6 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-client-edges-with-variables.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-client-edges-with-variables.expected @@ -34,7 +34,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, @@ -57,7 +57,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, @@ -112,7 +112,7 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend on User @__ClientEdgeGe { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-client-edges.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-client-edges.expected index 06de8d85966e1..bf2374105ce18 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-client-edges.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-client-edges.expected @@ -32,7 +32,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, @@ -54,7 +54,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, @@ -107,7 +107,7 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend on User @__ClientEdgeGe { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-path-with-alias.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-path-with-alias.expected index be54beb16c9c5..038d2b6777285 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-path-with-alias.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-path-with-alias.expected @@ -42,7 +42,7 @@ fragment Foo_user on ClientUser { { ...BestFriendFragment @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(518), + # field_id: FieldID(517), # import_path: "BestFriendResolver", # import_name: None, # field_alias: Some( @@ -68,7 +68,7 @@ fragment Foo_user on ClientUser { { ...BestFriendFragment @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(518), + # field_id: FieldID(517), # import_path: "BestFriendResolver", # import_name: None, # field_alias: Some( diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-path.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-path.expected index 3dfe83188bcc5..cd5db1a0bcc50 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-path.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/nested-path.expected @@ -42,7 +42,7 @@ fragment Foo_user on ClientUser { { ...BestFriendFragment @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(518), + # field_id: FieldID(517), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, @@ -66,7 +66,7 @@ fragment Foo_user on ClientUser { { ...BestFriendFragment @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(518), + # field_id: FieldID(517), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/client_edges/fixtures/output-type.expected b/compiler/crates/relay-transforms/tests/client_edges/fixtures/output-type.expected index 9e33bac29afef..3fe8752b46517 100644 --- a/compiler/crates/relay-transforms/tests/client_edges/fixtures/output-type.expected +++ b/compiler/crates/relay-transforms/tests/client_edges/fixtures/output-type.expected @@ -36,7 +36,7 @@ fragment Foo_user on User { { ...BestFriendResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(518), + # field_id: FieldID(517), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.expected deleted file mode 100644 index 66596302bfcd4..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.expected +++ /dev/null @@ -1,22 +0,0 @@ -==================================== INPUT ==================================== -# expected-to-throw -query QueryWithRelayClientComponent { - neverNode { - ... on FakeNode { - id - } - ...ClientFragmentOnNonNodeUnion @relay_client_component - } -} - -fragment ClientFragmentOnNonNodeUnion on NonNode { - name -} -==================================== ERROR ==================================== -✖︎ @relay_client_component can only be used on fragments on Viewer or Query, or whose type implements the Node interface. If the fragment's type is a union type, all members of that union must implement Node. - - fragment-on-all-non-node-union.invalid.graphql:11:10 - 10 │ - 11 │ fragment ClientFragmentOnNonNodeUnion on NonNode { - │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - 12 │ name diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.graphql deleted file mode 100644 index d34ce00f3094b..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.graphql +++ /dev/null @@ -1,13 +0,0 @@ -# expected-to-throw -query QueryWithRelayClientComponent { - neverNode { - ... on FakeNode { - id - } - ...ClientFragmentOnNonNodeUnion @relay_client_component - } -} - -fragment ClientFragmentOnNonNodeUnion on NonNode { - name -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-fake-node-type.invalid.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-fake-node-type.invalid.expected deleted file mode 100644 index 824ce48732866..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-fake-node-type.invalid.expected +++ /dev/null @@ -1,22 +0,0 @@ -==================================== INPUT ==================================== -# expected-to-throw -query QueryWithRelayClientComponent($id: ID!) { - nonNodeStory(id: $id) { - id - ...ClientFragmentOnFakeNode @relay_client_component - } -} - -fragment ClientFragmentOnFakeNode on NonNodeStory { - message { - text - } -} -==================================== ERROR ==================================== -✖︎ @relay_client_component can only be used on fragments on Viewer or Query, or whose type implements the Node interface. If the fragment's type is a union type, all members of that union must implement Node. - - fragment-on-fake-node-type.invalid.graphql:9:10 - 8 │ - 9 │ fragment ClientFragmentOnFakeNode on NonNodeStory { - │ ^^^^^^^^^^^^^^^^^^^^^^^^ - 10 │ message { diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-fake-node-type.invalid.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-fake-node-type.invalid.graphql deleted file mode 100644 index 24708fb64c2c0..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-fake-node-type.invalid.graphql +++ /dev/null @@ -1,13 +0,0 @@ -# expected-to-throw -query QueryWithRelayClientComponent($id: ID!) { - nonNodeStory(id: $id) { - id - ...ClientFragmentOnFakeNode @relay_client_component - } -} - -fragment ClientFragmentOnFakeNode on NonNodeStory { - message { - text - } -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-non-node-type.invalid.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-non-node-type.invalid.expected deleted file mode 100644 index 910072499aa5b..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-non-node-type.invalid.expected +++ /dev/null @@ -1,21 +0,0 @@ -==================================== INPUT ==================================== -# expected-to-throw -query QueryWithRelayClientComponent { - me { - tasks { - ...ClientFragmentOnNonNode @relay_client_component - } - } -} - -fragment ClientFragmentOnNonNode on Task { - title -} -==================================== ERROR ==================================== -✖︎ @relay_client_component can only be used on fragments on Viewer or Query, or whose type implements the Node interface. If the fragment's type is a union type, all members of that union must implement Node. - - fragment-on-non-node-type.invalid.graphql:10:10 - 9 │ - 10 │ fragment ClientFragmentOnNonNode on Task { - │ ^^^^^^^^^^^^^^^^^^^^^^^ - 11 │ title diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-non-node-type.invalid.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-non-node-type.invalid.graphql deleted file mode 100644 index 38e10963327af..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-non-node-type.invalid.graphql +++ /dev/null @@ -1,12 +0,0 @@ -# expected-to-throw -query QueryWithRelayClientComponent { - me { - tasks { - ...ClientFragmentOnNonNode @relay_client_component - } - } -} - -fragment ClientFragmentOnNonNode on Task { - title -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.expected deleted file mode 100644 index 08c4ee6465a8b..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.expected +++ /dev/null @@ -1,38 +0,0 @@ -==================================== INPUT ==================================== -# expected-to-throw -query QueryWithRelayClientComponent { - maybeNode { - ...ClientFragment_one @relay_client_component - ...ClientFragment_two @relay_client_component - ...ClientFragment_three @relay_client_component - } -} - -fragment ClientFragment_one on NonNode { - name -} -fragment ClientFragment_two on FakeNode { - id -} -fragment ClientFragment_three on Story { - author { - name - } -} -==================================== ERROR ==================================== -✖︎ @relay_client_component can only be used on fragments on Viewer or Query, or whose type implements the Node interface. If the fragment's type is a union type, all members of that union must implement Node. - - fragment-on-some-non-node-union.invalid.graphql:10:10 - 9 │ - 10 │ fragment ClientFragment_one on NonNode { - │ ^^^^^^^^^^^^^^^^^^ - 11 │ name - - -✖︎ @relay_client_component can only be used on fragments on Viewer or Query, or whose type implements the Node interface. If the fragment's type is a union type, all members of that union must implement Node. - - fragment-on-some-non-node-union.invalid.graphql:13:10 - 12 │ } - 13 │ fragment ClientFragment_two on FakeNode { - │ ^^^^^^^^^^^^^^^^^^ - 14 │ id diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.graphql deleted file mode 100644 index 0019310249d46..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.graphql +++ /dev/null @@ -1,20 +0,0 @@ -# expected-to-throw -query QueryWithRelayClientComponent { - maybeNode { - ...ClientFragment_one @relay_client_component - ...ClientFragment_two @relay_client_component - ...ClientFragment_three @relay_client_component - } -} - -fragment ClientFragment_one on NonNode { - name -} -fragment ClientFragment_two on FakeNode { - id -} -fragment ClientFragment_three on Story { - author { - name - } -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-arguments.invalid.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-arguments.invalid.expected deleted file mode 100644 index ea9670b905e38..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-arguments.invalid.expected +++ /dev/null @@ -1,24 +0,0 @@ -==================================== INPUT ==================================== -# expected-to-throw -query QueryWithRelayClientComponent { - me { - id - ...ClientFragmentWithArguments @relay_client_component @arguments(scale: 1.5) - } -} - -fragment ClientFragmentWithArguments on User @argumentDefinitions(scale: {type: "Float"}) { - id - name - profile_picture(scale: $scale) { - uri - } -} -==================================== ERROR ==================================== -✖︎ @relay_client_component is not compatible with @arguments. - - fragment-with-arguments.invalid.graphql:5:71 - 4 │ id - 5 │ ...ClientFragmentWithArguments @relay_client_component @arguments(scale: 1.5) - │ ^^^^^ - 6 │ } diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-arguments.invalid.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-arguments.invalid.graphql deleted file mode 100644 index adc22ee44a424..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-arguments.invalid.graphql +++ /dev/null @@ -1,15 +0,0 @@ -# expected-to-throw -query QueryWithRelayClientComponent { - me { - id - ...ClientFragmentWithArguments @relay_client_component @arguments(scale: 1.5) - } -} - -fragment ClientFragmentWithArguments on User @argumentDefinitions(scale: {type: "Float"}) { - id - name - profile_picture(scale: $scale) { - uri - } -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.expected deleted file mode 100644 index 2a64563b1126f..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.expected +++ /dev/null @@ -1,21 +0,0 @@ -==================================== INPUT ==================================== -# expected-to-throw -query QueryWithRelayClientComponent { - me { - id - ...ClientFragment @relay_client_component @defer @relay(mask: false) - } -} - -fragment ClientFragment on User { - id - name -} -==================================== ERROR ==================================== -✖︎ @relay_client_component is not compatible with these directives: `defer`, `relay` - - fragment-with-incompatible-directives.invalid.graphql:5:8 - 4 │ id - 5 │ ...ClientFragment @relay_client_component @defer @relay(mask: false) - │ ^^^^^^^^^^^^^^ - 6 │ } diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.graphql deleted file mode 100644 index ed4f3a8c6ec0a..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.graphql +++ /dev/null @@ -1,12 +0,0 @@ -# expected-to-throw -query QueryWithRelayClientComponent { - me { - id - ...ClientFragment @relay_client_component @defer @relay(mask: false) - } -} - -fragment ClientFragment on User { - id - name -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-query.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-query.expected deleted file mode 100644 index b5c522493d58d..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-query.expected +++ /dev/null @@ -1,47 +0,0 @@ -==================================== INPUT ==================================== -fragment ServerComponentFragment on Query { - ...ClientFragment @relay_client_component -} - -fragment ClientFragment on Query { - viewer { - isFbEmployee - } -} -==================================== OUTPUT =================================== -query ClientFragment$normalization @__SplitOperationMetadata -# SplitOperationMetadata { -# derived_from: Some( -# FragmentDefinitionName( -# "ClientFragment", -# ), -# ), -# location: fragment-with-relay-client-component-on-query.graphql:100:114, -# parent_documents: { -# FragmentDefinitionName( -# FragmentDefinitionName( -# "ServerComponentFragment", -# ), -# ), -# }, -# raw_response_type_generation_mode: None, -# } - { - ...ClientFragment -} - -fragment ClientFragment on Query { - viewer { - isFbEmployee - } -} - -fragment ServerComponentFragment on Query @__RelayClientComponentMetadata -# RelayClientComponentMetadata { -# split_operation_filenames: [ -# "ClientFragment$normalization.graphql", -# ], -# } - { - ...ClientFragment @relay_client_component_server(module_id: "ClientFragment$normalization.graphql") -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-query.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-query.graphql deleted file mode 100644 index 98f06730607df..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-query.graphql +++ /dev/null @@ -1,9 +0,0 @@ -fragment ServerComponentFragment on Query { - ...ClientFragment @relay_client_component -} - -fragment ClientFragment on Query { - viewer { - isFbEmployee - } -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.expected deleted file mode 100644 index b8a32b309b3e2..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.expected +++ /dev/null @@ -1,43 +0,0 @@ -==================================== INPUT ==================================== -fragment ServerComponentFragment on Viewer { - ...ClientFragment @relay_client_component -} - -fragment ClientFragment on Viewer { - isFbEmployee -} -==================================== OUTPUT =================================== -query ClientFragment$normalization @__SplitOperationMetadata -# SplitOperationMetadata { -# derived_from: Some( -# FragmentDefinitionName( -# "ClientFragment", -# ), -# ), -# location: fragment-with-relay-client-component-on-viewer.graphql:101:115, -# parent_documents: { -# FragmentDefinitionName( -# FragmentDefinitionName( -# "ServerComponentFragment", -# ), -# ), -# }, -# raw_response_type_generation_mode: None, -# } - { - ...ClientFragment -} - -fragment ClientFragment on Viewer { - isFbEmployee -} - -fragment ServerComponentFragment on Viewer @__RelayClientComponentMetadata -# RelayClientComponentMetadata { -# split_operation_filenames: [ -# "ClientFragment$normalization.graphql", -# ], -# } - { - ...ClientFragment @relay_client_component_server(module_id: "ClientFragment$normalization.graphql") -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.graphql deleted file mode 100644 index f77de0c37b19c..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.graphql +++ /dev/null @@ -1,7 +0,0 @@ -fragment ServerComponentFragment on Viewer { - ...ClientFragment @relay_client_component -} - -fragment ClientFragment on Viewer { - isFbEmployee -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component.expected deleted file mode 100644 index ac4cfab05eb6e..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component.expected +++ /dev/null @@ -1,47 +0,0 @@ -==================================== INPUT ==================================== -fragment ServerComponentFragment on User { - id - ...ClientFragment @relay_client_component -} - -fragment ClientFragment on User { - id - name -} -==================================== OUTPUT =================================== -query ClientFragment$normalization @__SplitOperationMetadata -# SplitOperationMetadata { -# derived_from: Some( -# FragmentDefinitionName( -# "ClientFragment", -# ), -# ), -# location: fragment-with-relay-client-component.graphql:104:118, -# parent_documents: { -# FragmentDefinitionName( -# FragmentDefinitionName( -# "ServerComponentFragment", -# ), -# ), -# }, -# raw_response_type_generation_mode: None, -# } - { - ...ClientFragment -} - -fragment ClientFragment on User { - id - name -} - -fragment ServerComponentFragment on User @__RelayClientComponentMetadata -# RelayClientComponentMetadata { -# split_operation_filenames: [ -# "ClientFragment$normalization.graphql", -# ], -# } - { - id - ...ClientFragment @relay_client_component_server(module_id: "ClientFragment$normalization.graphql") -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component.graphql deleted file mode 100644 index a7a1cbd32a8f1..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/fragment-with-relay-client-component.graphql +++ /dev/null @@ -1,9 +0,0 @@ -fragment ServerComponentFragment on User { - id - ...ClientFragment @relay_client_component -} - -fragment ClientFragment on User { - id - name -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/query-with-relay-client-component.expected b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/query-with-relay-client-component.expected deleted file mode 100644 index f32a1e1cf110c..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/query-with-relay-client-component.expected +++ /dev/null @@ -1,49 +0,0 @@ -==================================== INPUT ==================================== -query QueryWithRelayClientComponent { - me { - ...ClientFragment @relay_client_component - } -} - -fragment ClientFragment on User { - id - name -} -==================================== OUTPUT =================================== -query ClientFragment$normalization @__SplitOperationMetadata -# SplitOperationMetadata { -# derived_from: Some( -# FragmentDefinitionName( -# "ClientFragment", -# ), -# ), -# location: query-with-relay-client-component.graphql:107:121, -# parent_documents: { -# OperationDefinitionName( -# OperationDefinitionName( -# "QueryWithRelayClientComponent", -# ), -# ), -# }, -# raw_response_type_generation_mode: None, -# } - { - ...ClientFragment -} - -query QueryWithRelayClientComponent @__RelayClientComponentMetadata -# RelayClientComponentMetadata { -# split_operation_filenames: [ -# "ClientFragment$normalization.graphql", -# ], -# } - { - me { - ...ClientFragment @relay_client_component_server(module_id: "ClientFragment$normalization.graphql") - } -} - -fragment ClientFragment on User { - id - name -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/query-with-relay-client-component.graphql b/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/query-with-relay-client-component.graphql deleted file mode 100644 index 243d60e3ea125..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/fixtures/query-with-relay-client-component.graphql +++ /dev/null @@ -1,10 +0,0 @@ -query QueryWithRelayClientComponent { - me { - ...ClientFragment @relay_client_component - } -} - -fragment ClientFragment on User { - id - name -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component/mod.rs b/compiler/crates/relay-transforms/tests/relay_client_component/mod.rs deleted file mode 100644 index 76ec3f1bada0b..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component/mod.rs +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -use common::FeatureFlags; -use fixture_tests::Fixture; -use graphql_test_helpers::apply_transform_for_test; -use relay_transforms::relay_client_component; - -pub fn transform_fixture(fixture: &Fixture<'_>) -> Result { - let flags = FeatureFlags::default(); - apply_transform_for_test(fixture, |program| relay_client_component(program, &flags)) -} diff --git a/compiler/crates/relay-transforms/tests/relay_client_component_test.rs b/compiler/crates/relay-transforms/tests/relay_client_component_test.rs deleted file mode 100644 index 816d6ea242b88..0000000000000 --- a/compiler/crates/relay-transforms/tests/relay_client_component_test.rs +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @generated SignedSource<> - */ - -mod relay_client_component; - -use relay_client_component::transform_fixture; -use fixture_tests::test_fixture; - -#[test] -fn fragment_on_all_non_node_union_invalid() { - let input = include_str!("relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.expected"); - test_fixture(transform_fixture, "fragment-on-all-non-node-union.invalid.graphql", "relay_client_component/fixtures/fragment-on-all-non-node-union.invalid.expected", input, expected); -} - -#[test] -fn fragment_on_fake_node_type_invalid() { - let input = include_str!("relay_client_component/fixtures/fragment-on-fake-node-type.invalid.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-on-fake-node-type.invalid.expected"); - test_fixture(transform_fixture, "fragment-on-fake-node-type.invalid.graphql", "relay_client_component/fixtures/fragment-on-fake-node-type.invalid.expected", input, expected); -} - -#[test] -fn fragment_on_non_node_type_invalid() { - let input = include_str!("relay_client_component/fixtures/fragment-on-non-node-type.invalid.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-on-non-node-type.invalid.expected"); - test_fixture(transform_fixture, "fragment-on-non-node-type.invalid.graphql", "relay_client_component/fixtures/fragment-on-non-node-type.invalid.expected", input, expected); -} - -#[test] -fn fragment_on_some_non_node_union_invalid() { - let input = include_str!("relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.expected"); - test_fixture(transform_fixture, "fragment-on-some-non-node-union.invalid.graphql", "relay_client_component/fixtures/fragment-on-some-non-node-union.invalid.expected", input, expected); -} - -#[test] -fn fragment_with_arguments_invalid() { - let input = include_str!("relay_client_component/fixtures/fragment-with-arguments.invalid.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-with-arguments.invalid.expected"); - test_fixture(transform_fixture, "fragment-with-arguments.invalid.graphql", "relay_client_component/fixtures/fragment-with-arguments.invalid.expected", input, expected); -} - -#[test] -fn fragment_with_incompatible_directives_invalid() { - let input = include_str!("relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.expected"); - test_fixture(transform_fixture, "fragment-with-incompatible-directives.invalid.graphql", "relay_client_component/fixtures/fragment-with-incompatible-directives.invalid.expected", input, expected); -} - -#[test] -fn fragment_with_relay_client_component() { - let input = include_str!("relay_client_component/fixtures/fragment-with-relay-client-component.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-with-relay-client-component.expected"); - test_fixture(transform_fixture, "fragment-with-relay-client-component.graphql", "relay_client_component/fixtures/fragment-with-relay-client-component.expected", input, expected); -} - -#[test] -fn fragment_with_relay_client_component_on_query() { - let input = include_str!("relay_client_component/fixtures/fragment-with-relay-client-component-on-query.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-with-relay-client-component-on-query.expected"); - test_fixture(transform_fixture, "fragment-with-relay-client-component-on-query.graphql", "relay_client_component/fixtures/fragment-with-relay-client-component-on-query.expected", input, expected); -} - -#[test] -fn fragment_with_relay_client_component_on_viewer() { - let input = include_str!("relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.graphql"); - let expected = include_str!("relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.expected"); - test_fixture(transform_fixture, "fragment-with-relay-client-component-on-viewer.graphql", "relay_client_component/fixtures/fragment-with-relay-client-component-on-viewer.expected", input, expected); -} - -#[test] -fn query_with_relay_client_component() { - let input = include_str!("relay_client_component/fixtures/query-with-relay-client-component.graphql"); - let expected = include_str!("relay_client_component/fixtures/query-with-relay-client-component.expected"); - test_fixture(transform_fixture, "query-with-relay-client-component.graphql", "relay_client_component/fixtures/query-with-relay-client-component.expected", input, expected); -} diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/field-alias.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/field-alias.expected index c67061845c3e9..27b960b145d6f 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/field-alias.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/field-alias.expected @@ -22,7 +22,7 @@ extend type User { fragment Foo_user on User { ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: Some( diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/missing-fragment-name.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/missing-fragment-name.expected index 583126e86a61b..8e9eb894fb27c 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/missing-fragment-name.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/missing-fragment-name.expected @@ -12,7 +12,7 @@ extend type User { fragment Foo_user on User { __id @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/multiple-relay-resolvers.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/multiple-relay-resolvers.expected index 0bcd333705f3d..9ef0c0968ebcb 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/multiple-relay-resolvers.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/multiple-relay-resolvers.expected @@ -28,7 +28,7 @@ extend type User { fragment Foo_user on User { ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: None, @@ -41,7 +41,7 @@ fragment Foo_user on User { ...HobbitNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(518), + # field_id: FieldID(517), # import_path: "HobbitNameResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/nested-relay-resolver.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/nested-relay-resolver.expected index bcbea93f32955..6cc465055b008 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/nested-relay-resolver.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/nested-relay-resolver.expected @@ -28,7 +28,7 @@ extend type User { fragment Foo_user on User { ...HobbitNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(518), + # field_id: FieldID(517), # import_path: "HobbitNameResolver", # import_name: None, # field_alias: None, @@ -45,7 +45,7 @@ fragment HobbitNameResolverFragment_name on User { name ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-backing-client-edge.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-backing-client-edge.expected index 9582060adad17..23c84d45e8289 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-backing-client-edge.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-backing-client-edge.expected @@ -26,7 +26,7 @@ fragment BestFriendResolverFragment on User { fragment Foo_user on User { ...BestFriendResolverFragment @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "BestFriendResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-field-and-fragment-arguments.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-field-and-fragment-arguments.expected index 4c8ce635404c4..045923ec1b182 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-field-and-fragment-arguments.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-field-and-fragment-arguments.expected @@ -17,7 +17,7 @@ extend type User { fragment Foo_user on User { ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-model.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-model.expected index b966f5d99b148..b96d3f21e3ead 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-model.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-model.expected @@ -22,7 +22,7 @@ extend type User { fragment Foo_user on User { ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-named-import.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-named-import.expected index 6c603b684ac62..6e1469075e174 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-named-import.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-named-import.expected @@ -22,7 +22,7 @@ extend type User { fragment Foo_user on User { ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: Some( # "pop_star_name", diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-required.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-required.expected index 700c94d618d26..0122c3e658284 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-required.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-required.expected @@ -22,7 +22,7 @@ extend type User { fragment Foo_user on User { ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-within-named-inline-fragment.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-within-named-inline-fragment.expected index 1f1151fc776ed..8e48fcfa27f70 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-within-named-inline-fragment.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver-within-named-inline-fragment.expected @@ -33,7 +33,7 @@ fragment Foo_user on Node { { ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver.expected b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver.expected index 5feb036641d31..dd7dbcbe280ae 100644 --- a/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver.expected +++ b/compiler/crates/relay-transforms/tests/relay_resolvers/fixtures/relay-resolver.expected @@ -22,7 +22,7 @@ extend type User { fragment Foo_user on User { ...PopStarNameResolverFragment_name @__RelayResolverMetadata # RelayResolverMetadata { - # field_id: FieldID(517), + # field_id: FieldID(516), # import_path: "PopStarNameResolver", # import_name: None, # field_alias: None, diff --git a/compiler/crates/relay-typegen/src/visit.rs b/compiler/crates/relay-typegen/src/visit.rs index ee976b8107487..4c420597b6443 100644 --- a/compiler/crates/relay-typegen/src/visit.rs +++ b/compiler/crates/relay-typegen/src/visit.rs @@ -1890,8 +1890,7 @@ pub(crate) fn raw_response_visit_selections( for selection in selections { match selection { Selection::FragmentSpread(spread) => { - // @relay_client_component generate fragment spreads without - // @no_inline if no_inline isn't enabled for the fragment. + // TODO: this may be stale after removal of Flight and @relay_client_component if NoInlineFragmentSpreadMetadata::find(&spread.directives).is_some() { let spread_type = spread.fragment.item.0; imported_raw_response_types.0.insert( diff --git a/compiler/crates/relay-typegen/tests/generate_flow/fixtures/query_with_raw_response_and_client_components.expected b/compiler/crates/relay-typegen/tests/generate_flow/fixtures/query_with_raw_response_and_client_components.expected deleted file mode 100644 index 5c86702963661..0000000000000 --- a/compiler/crates/relay-typegen/tests/generate_flow/fixtures/query_with_raw_response_and_client_components.expected +++ /dev/null @@ -1,66 +0,0 @@ -==================================== INPUT ==================================== -query queryWithRelayClientComponentQuery @raw_response_type{ - viewer { - ...queryWithRelayClientComponent_f1 @relay_client_component - ...queryWithRelayClientComponent_f2 @relay_client_component - } -} - -fragment queryWithRelayClientComponent_f1 on Viewer { - __typename -} - -fragment queryWithRelayClientComponent_f2 on Viewer { - __typename -} -==================================== OUTPUT =================================== -import type { queryWithRelayClientComponent_f1$fragmentType } from "queryWithRelayClientComponent_f1.graphql"; -import type { queryWithRelayClientComponent_f2$fragmentType } from "queryWithRelayClientComponent_f2.graphql"; -export type queryWithRelayClientComponentQuery$variables = {||}; -export type queryWithRelayClientComponentQuery$data = {| - +viewer: ?{| - +$fragmentSpreads: queryWithRelayClientComponent_f1$fragmentType & queryWithRelayClientComponent_f2$fragmentType, - |}, -|}; -export type queryWithRelayClientComponentQuery$rawResponse = {| - +viewer: ?{||}, -|}; -export type queryWithRelayClientComponentQuery = {| - rawResponse: queryWithRelayClientComponentQuery$rawResponse, - response: queryWithRelayClientComponentQuery$data, - variables: queryWithRelayClientComponentQuery$variables, -|}; -------------------------------------------------------------------------------- -import type { FragmentType } from "relay-runtime"; -declare export opaque type queryWithRelayClientComponent_f1$fragmentType: FragmentType; -export type queryWithRelayClientComponent_f1$data = {| - +__typename: "Viewer", - +$fragmentType: queryWithRelayClientComponent_f1$fragmentType, -|} | {| - // This will never be '%other', but we need some - // value in case none of the concrete values match. - +__typename: "%other", - +$fragmentType: queryWithRelayClientComponent_f1$fragmentType, -|}; -export type queryWithRelayClientComponent_f1$key = { - +$data?: queryWithRelayClientComponent_f1$data, - +$fragmentSpreads: queryWithRelayClientComponent_f1$fragmentType, - ... -}; -------------------------------------------------------------------------------- -import type { FragmentType } from "relay-runtime"; -declare export opaque type queryWithRelayClientComponent_f2$fragmentType: FragmentType; -export type queryWithRelayClientComponent_f2$data = {| - +__typename: "Viewer", - +$fragmentType: queryWithRelayClientComponent_f2$fragmentType, -|} | {| - // This will never be '%other', but we need some - // value in case none of the concrete values match. - +__typename: "%other", - +$fragmentType: queryWithRelayClientComponent_f2$fragmentType, -|}; -export type queryWithRelayClientComponent_f2$key = { - +$data?: queryWithRelayClientComponent_f2$data, - +$fragmentSpreads: queryWithRelayClientComponent_f2$fragmentType, - ... -}; diff --git a/compiler/crates/relay-typegen/tests/generate_flow/fixtures/query_with_raw_response_and_client_components.graphql b/compiler/crates/relay-typegen/tests/generate_flow/fixtures/query_with_raw_response_and_client_components.graphql deleted file mode 100644 index 93990986d6918..0000000000000 --- a/compiler/crates/relay-typegen/tests/generate_flow/fixtures/query_with_raw_response_and_client_components.graphql +++ /dev/null @@ -1,14 +0,0 @@ -query queryWithRelayClientComponentQuery @raw_response_type{ - viewer { - ...queryWithRelayClientComponent_f1 @relay_client_component - ...queryWithRelayClientComponent_f2 @relay_client_component - } -} - -fragment queryWithRelayClientComponent_f1 on Viewer { - __typename -} - -fragment queryWithRelayClientComponent_f2 on Viewer { - __typename -} diff --git a/compiler/crates/relay-typegen/tests/generate_flow/mod.rs b/compiler/crates/relay-typegen/tests/generate_flow/mod.rs index 4dcfdd65f42fd..1fa6ab11d730c 100644 --- a/compiler/crates/relay-typegen/tests/generate_flow/mod.rs +++ b/compiler/crates/relay-typegen/tests/generate_flow/mod.rs @@ -61,7 +61,6 @@ pub fn transform_fixture(fixture: &Fixture<'_>) -> Result { .into_iter() .collect(), }, - enable_flight_transform: true, enable_relay_resolver_transform: true, actor_change_support: FeatureFlag::Enabled, enable_fragment_aliases: FeatureFlag::Enabled, diff --git a/compiler/crates/relay-typegen/tests/generate_flow_test.rs b/compiler/crates/relay-typegen/tests/generate_flow_test.rs index 2264196f311af..c916201809914 100644 --- a/compiler/crates/relay-typegen/tests/generate_flow_test.rs +++ b/compiler/crates/relay-typegen/tests/generate_flow_test.rs @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<> + * @generated SignedSource<<25475c05eb3f5f45ec627699946bcc05>> */ mod generate_flow; @@ -229,13 +229,6 @@ fn query_with_multiple_match_fields() { test_fixture(transform_fixture, "query-with-multiple-match-fields.graphql", "generate_flow/fixtures/query-with-multiple-match-fields.expected", input, expected); } -#[test] -fn query_with_raw_response_and_client_components() { - let input = include_str!("generate_flow/fixtures/query_with_raw_response_and_client_components.graphql"); - let expected = include_str!("generate_flow/fixtures/query_with_raw_response_and_client_components.expected"); - test_fixture(transform_fixture, "query_with_raw_response_and_client_components.graphql", "generate_flow/fixtures/query_with_raw_response_and_client_components.expected", input, expected); -} - #[test] fn query_with_raw_response_on_conditional() { let input = include_str!("generate_flow/fixtures/query-with-raw-response-on-conditional.graphql"); diff --git a/compiler/fixture_dirs.txt b/compiler/fixture_dirs.txt index 0dde34c226124..e61f954a3640e 100644 --- a/compiler/fixture_dirs.txt +++ b/compiler/fixture_dirs.txt @@ -25,7 +25,6 @@ crates/relay-codegen/tests/connections crates/relay-codegen/tests/deduped_json_codegen crates/relay-codegen/tests/defer_stream crates/relay-codegen/tests/json_codegen -crates/relay-codegen/tests/react_flight_codegen crates/relay-codegen/tests/relay_actor_change crates/relay-codegen/tests/request_metadata crates/relay-codegen/tests/skip_printing_nulls @@ -62,7 +61,6 @@ crates/relay-transforms/tests/match_transform_local crates/relay-transforms/tests/provided_variable_fragment_transform crates/relay-transforms/tests/refetchable_fragment crates/relay-transforms/tests/relay_actor_change -crates/relay-transforms/tests/relay_client_component crates/relay-transforms/tests/relay_resolvers crates/relay-transforms/tests/relay_test_operation crates/relay-transforms/tests/required_directive diff --git a/packages/relay-runtime/index.js b/packages/relay-runtime/index.js index 9addfa0f62cf3..6124b80665431 100644 --- a/packages/relay-runtime/index.js +++ b/packages/relay-runtime/index.js @@ -95,10 +95,6 @@ export type { LogRequestInfoFunction, PayloadData, PayloadError, - ReactFlightPayloadData, - ReactFlightPayloadQuery, - ReactFlightServerTree, - ReactFlightServerError, SubscribeFunction, Uploadable, UploadableMap, @@ -142,9 +138,6 @@ export type { PluralReaderSelector, Props, PublishQueue, - ReactFlightClientResponse, - ReactFlightPayloadDeserializer, - ReactFlightServerErrorHandler, ReaderSelector, ReadOnlyRecordProxy, ReadOnlyRecordSourceProxy, @@ -171,7 +164,6 @@ export type { NormalizationArgument, NormalizationDefer, NormalizationField, - NormalizationFlightField, NormalizationLinkedField, NormalizationLinkedHandle, NormalizationLocalArgumentDefinition, @@ -188,7 +180,6 @@ export type { ReaderArgument, ReaderArgumentDefinition, ReaderField, - ReaderFlightField, ReaderFragment, ReaderInlineDataFragment, ReaderInlineDataFragmentSpread, diff --git a/packages/relay-runtime/multi-actor-environment/MultiActorEnvironment.js b/packages/relay-runtime/multi-actor-environment/MultiActorEnvironment.js index 60f48a24c7983..ad1d7fbdd5f16 100644 --- a/packages/relay-runtime/multi-actor-environment/MultiActorEnvironment.js +++ b/packages/relay-runtime/multi-actor-environment/MultiActorEnvironment.js @@ -27,8 +27,6 @@ import type { OperationLoader, OptimisticResponseConfig, OptimisticUpdateFunction, - ReactFlightPayloadDeserializer, - ReactFlightServerErrorHandler, RequiredFieldLogger, SelectorStoreUpdater, SingularReaderSelector, @@ -66,8 +64,6 @@ export type MultiActorEnvironmentConfig = $ReadOnly<{ logFn?: ?LogFunction, missingFieldHandlers?: ?$ReadOnlyArray, operationLoader?: ?OperationLoader, - reactFlightPayloadDeserializer?: ?ReactFlightPayloadDeserializer, - reactFlightServerErrorHandler?: ?ReactFlightServerErrorHandler, requiredFieldLogger?: ?RequiredFieldLogger, scheduler?: ?TaskScheduler, shouldProcessClientComponents?: ?boolean, @@ -87,8 +83,6 @@ class MultiActorEnvironment implements IMultiActorEnvironment { +_missingFieldHandlers: $ReadOnlyArray; +_operationExecutions: Map; +_operationLoader: ?OperationLoader; - +_reactFlightPayloadDeserializer: ?ReactFlightPayloadDeserializer; - +_reactFlightServerErrorHandler: ?ReactFlightServerErrorHandler; +_requiredFieldLogger: RequiredFieldLogger; +_scheduler: ?TaskScheduler; +_shouldProcessClientComponents: ?boolean; @@ -112,9 +106,6 @@ class MultiActorEnvironment implements IMultiActorEnvironment { this._isServer = config.isServer ?? false; this._missingFieldHandlers = config.missingFieldHandlers ?? []; this._createStoreForActor = config.createStoreForActor; - this._reactFlightPayloadDeserializer = - config.reactFlightPayloadDeserializer; - this._reactFlightServerErrorHandler = config.reactFlightServerErrorHandler; this._createConfigNameForActor = config.createConfigNameForActor; this._defaultRenderPolicy = config.defaultRenderPolicy ?? 'partial'; } @@ -466,8 +457,6 @@ class MultiActorEnvironment implements IMultiActorEnvironment { getPublishQueue: (actorIdentifier: ActorIdentifier) => { return this.forActor(actorIdentifier).getPublishQueue(); }, - reactFlightPayloadDeserializer: this._reactFlightPayloadDeserializer, - reactFlightServerErrorHandler: this._reactFlightServerErrorHandler, scheduler: this._scheduler, shouldProcessClientComponents: this._shouldProcessClientComponents, sink, diff --git a/packages/relay-runtime/mutations/__tests__/__generated__/validateMutationTestFlightMutation.graphql.js b/packages/relay-runtime/mutations/__tests__/__generated__/validateMutationTestFlightMutation.graphql.js deleted file mode 100644 index 820f27663ae30..0000000000000 --- a/packages/relay-runtime/mutations/__tests__/__generated__/validateMutationTestFlightMutation.graphql.js +++ /dev/null @@ -1,187 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Mutation } from 'relay-runtime'; -export type StoryUpdateInput = {| - body?: ?InputText, -|}; -export type InputText = {| - ranges?: ?$ReadOnlyArray, - text?: ?string, -|}; -export type validateMutationTestFlightMutation$variables = {| - count: number, - input: StoryUpdateInput, -|}; -export type validateMutationTestFlightMutation$data = {| - +storyUpdate: ?{| - +story: ?{| - +body: ?{| - +text: ?string, - |}, - +flightComponentValidateMutation: ?any, - +id: string, - |}, - |}, -|}; -export type validateMutationTestFlightMutation = {| - response: validateMutationTestFlightMutation$data, - variables: validateMutationTestFlightMutation$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" -}, -v2 = [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } - ], - "concreteType": "StoryUpdateResponsePayload", - "kind": "LinkedField", - "name": "storyUpdate", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Story", - "kind": "LinkedField", - "name": "story", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "concreteType": "Text", - "kind": "LinkedField", - "name": "body", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "text", - "storageKey": null - } - ], - "storageKey": null - }, - { - "alias": "flightComponentValidateMutation", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - } - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null - } -]; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "validateMutationTestFlightMutation", - "selections": (v2/*: any*/), - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "validateMutationTestFlightMutation", - "selections": (v2/*: any*/) - }, - "params": { - "cacheID": "118f5bcd280fc4045732b0d197c1e4b6", - "id": null, - "metadata": {}, - "name": "validateMutationTestFlightMutation", - "operationKind": "mutation", - "text": "mutation validateMutationTestFlightMutation(\n $input: StoryUpdateInput!\n $count: Int!\n) {\n storyUpdate(input: $input) {\n story {\n id\n body {\n text\n }\n flightComponentValidateMutation: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count})\n }\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "c2572b38ee685a5a6aabe18d3b11f56b"; -} - -module.exports = ((node/*: any*/)/*: Mutation< - validateMutationTestFlightMutation$variables, - validateMutationTestFlightMutation$data, ->*/); diff --git a/packages/relay-runtime/mutations/__tests__/validateMutation-test.js b/packages/relay-runtime/mutations/__tests__/validateMutation-test.js index 24d5ca03508f3..fe54f29d60252 100644 --- a/packages/relay-runtime/mutations/__tests__/validateMutation-test.js +++ b/packages/relay-runtime/mutations/__tests__/validateMutation-test.js @@ -12,7 +12,7 @@ 'use strict'; const validateMutation = require('../validateMutation'); -const {RelayFeatureFlags, graphql} = require('relay-runtime'); +const {graphql} = require('relay-runtime'); jest.mock('warning', () => { return (dontWarn, message, ...args) => { @@ -843,104 +843,4 @@ describe('validateOptimisticResponse', () => { } }); }); - - describe('feature ENABLE_REACT_FLIGHT_COMPONENT_FIELD', () => { - let FlightMutation; - beforeEach(() => { - jest.clearAllMocks(); - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = true; - FlightMutation = graphql` - mutation validateMutationTestFlightMutation( - $input: StoryUpdateInput! - $count: Int! - ) { - storyUpdate(input: $input) { - story { - id - body { - text - } - flightComponentValidateMutation(condition: true, count: $count) - } - } - } - `; - }); - - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - it('Throws an error when optimistic responses contain Flight fields', () => { - const optimisticResponse: $FlowFixMe = { - storyUpdate: { - story: { - id: 1, - body: { - text: 'Hello world', - }, - flightComponentValidateMutation: { - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: [], - errors: [], - fragments: [], - }, - }, - }, - }; - const variables = null; - - expect(() => { - validateMutation(optimisticResponse, FlightMutation, variables); - }).toThrowError(/validateMutation: Flight fields are not compatible/); - }); - - it('Does not error when optimistic responses contain null or undefined Flight fields', () => { - const optimisticResponseWithUndefinedFlightField = { - storyUpdate: { - story: { - id: 1, - body: { - text: 'Hello world', - }, - flightComponentValidateMutation: undefined, - }, - }, - }; - const optimisticResponseWithNullFlightField = { - storyUpdate: { - story: { - id: 1, - body: { - text: 'Hello world', - }, - flightComponentValidateMutation: null, - }, - }, - }; - const variables = null; - - expect(() => { - validateMutation( - optimisticResponseWithUndefinedFlightField, - FlightMutation, - variables, - ); - }).not.toThrow(); - expect(() => { - validateMutation( - optimisticResponseWithNullFlightField, - FlightMutation, - variables, - ); - }).not.toThrow(); - }); - }); }); diff --git a/packages/relay-runtime/mutations/createUpdatableProxy.js b/packages/relay-runtime/mutations/createUpdatableProxy.js index 282cd861e38d4..e8d22c66c2b05 100644 --- a/packages/relay-runtime/mutations/createUpdatableProxy.js +++ b/packages/relay-runtime/mutations/createUpdatableProxy.js @@ -33,7 +33,6 @@ const { CLIENT_EXTENSION, CONDITION, DEFER, - FLIGHT_FIELD, FRAGMENT_SPREAD, INLINE_DATA_FRAGMENT_SPREAD, INLINE_FRAGMENT, @@ -202,7 +201,6 @@ function updateProxyFromSelections( case CLIENT_EDGE_TO_CLIENT_OBJECT: case CLIENT_EDGE_TO_SERVER_OBJECT: case DEFER: - case FLIGHT_FIELD: case MODULE_IMPORT: case RELAY_LIVE_RESOLVER: case REQUIRED_FIELD: diff --git a/packages/relay-runtime/mutations/validateMutation.js b/packages/relay-runtime/mutations/validateMutation.js index 065f9e9f49c2b..14fb1b6b2ea1e 100644 --- a/packages/relay-runtime/mutations/validateMutation.js +++ b/packages/relay-runtime/mutations/validateMutation.js @@ -25,7 +25,6 @@ const { CLIENT_EXTENSION, CONDITION, DEFER, - FLIGHT_FIELD, FRAGMENT_SPREAD, INLINE_FRAGMENT, LINKED_FIELD, @@ -137,7 +136,6 @@ if (__DEV__) { return; case SCALAR_FIELD: case LINKED_FIELD: - case FLIGHT_FIELD: return validateField(optimisticResponse, selection, context); case ACTOR_CHANGE: return validateField( @@ -244,21 +242,6 @@ if (__DEV__) { return; } } - case FLIGHT_FIELD: - if ( - optimisticResponse[fieldName] === null || - (hasOwnProperty.call(optimisticResponse, fieldName) && - optimisticResponse[fieldName] === undefined) - ) { - return; - } - throw new Error( - 'validateMutation: Flight fields are not compatible with ' + - 'optimistic updates, as React does not have the component code ' + - 'necessary to process new data on the client. Instead, you ' + - 'should update your code to require a full refetch of the Flight ' + - 'field so your UI can be updated.', - ); } }; diff --git a/packages/relay-runtime/network/RelayNetworkTypes.js b/packages/relay-runtime/network/RelayNetworkTypes.js index 781fed51054fc..7b6159df05a1f 100644 --- a/packages/relay-runtime/network/RelayNetworkTypes.js +++ b/packages/relay-runtime/network/RelayNetworkTypes.js @@ -120,45 +120,3 @@ export type SubscribeFunction = ( export type Uploadable = File | Blob; export type UploadableMap = {[key: string]: Uploadable}; - -/** - * React Flight tree created on the server. - */ -export type ReactFlightServerTree = mixed; -export type ReactFlightPayloadQuery = { - +id: mixed, - +module: mixed, - +response: GraphQLSingularResponse, - +variables: Variables, -}; -export type ReactFlightPayloadFragment = { - +__id: string, - +__typename: string, - +module: mixed, - +response: GraphQLSingularResponse, - +variables: Variables, -}; -export type ReactFlightServerError = { - +message: string, - +stack: string, - ... -}; -/** - * Data that is returned by a Flight compliant GraphQL server. - * - * - status: string representing status of the server response. - * - tree: React Server Components written into a row protocol that can be later - * read on the client. If this is null, this indicates that no rows were - * were written on the server. - * - queries: an array of queries that the server preloaded for the client. - * - errors: an array of errors that were encountered while rendering the - * Server Component. - * - fragments: an array of fragments that the server preloaded for the client. - */ -export type ReactFlightPayloadData = { - +status: string, - +tree: ?Array, - +queries: Array, - +errors: Array, - +fragments: Array, -}; diff --git a/packages/relay-runtime/store/DataChecker.js b/packages/relay-runtime/store/DataChecker.js index 63cf62f6bf0ec..49a0a5431deef 100644 --- a/packages/relay-runtime/store/DataChecker.js +++ b/packages/relay-runtime/store/DataChecker.js @@ -13,7 +13,6 @@ import type {ActorIdentifier} from '../multi-actor-environment/ActorIdentifier'; import type { - NormalizationFlightField, NormalizationLinkedField, NormalizationModuleImport, NormalizationNode, @@ -28,7 +27,6 @@ import type { MutableRecordSource, NormalizationSelector, OperationLoader, - ReactFlightReachableExecutableDefinitions, RecordSource, } from './RelayStoreTypes'; @@ -43,7 +41,6 @@ const cloneRelayScalarHandleSourceField = require('./cloneRelayScalarHandleSourc const {getLocalVariables} = require('./RelayConcreteVariables'); const RelayModernRecord = require('./RelayModernRecord'); const {EXISTENT, UNKNOWN} = require('./RelayRecordState'); -const RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils'); const RelayStoreUtils = require('./RelayStoreUtils'); const {TYPE_SCHEMA_TYPE, generateTypeID} = require('./TypeID'); const invariant = require('invariant'); @@ -60,7 +57,6 @@ const { CLIENT_EXTENSION, CLIENT_EDGE_TO_CLIENT_OBJECT, DEFER, - FLIGHT_FIELD, FRAGMENT_SPREAD, INLINE_FRAGMENT, LINKED_FIELD, @@ -451,13 +447,6 @@ class DataChecker { this._handleMissing(); } // else: if it does or doesn't implement, we don't need to check or skip anything else break; - case FLIGHT_FIELD: - if (RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD) { - this._checkFlightField(selection, dataID); - } else { - throw new Error('Flight fields are not yet supported.'); - } - break; case CLIENT_COMPONENT: if (this._shouldProcessClientComponents === false) { break; @@ -602,57 +591,6 @@ class DataChecker { } } - _checkFlightField(field: NormalizationFlightField, dataID: DataID): void { - const storageKey = getStorageKey(field, this._variables); - const linkedID = this._mutator.getLinkedRecordID(dataID, storageKey); - - if (linkedID == null) { - if (linkedID === undefined) { - this._handleMissing(); - return; - } - return; - } - - const tree = this._mutator.getValue( - linkedID, - RelayStoreReactFlightUtils.REACT_FLIGHT_TREE_STORAGE_KEY, - ); - const reachableExecutableDefinitions = this._mutator.getValue( - linkedID, - RelayStoreReactFlightUtils.REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY, - ); - - if (tree == null || !Array.isArray(reachableExecutableDefinitions)) { - this._handleMissing(); - return; - } - - const operationLoader = this._operationLoader; - invariant( - operationLoader !== null, - 'DataChecker: Expected an operationLoader to be configured when using ' + - 'React Flight.', - ); - // In Flight, the variables that are in scope for reachable executable - // definitions aren't the same as what's in scope for the outer query. - const prevVariables = this._variables; - // $FlowFixMe[incompatible-cast] - for (const definition of (reachableExecutableDefinitions: Array)) { - this._variables = definition.variables; - const normalizationRootNode = operationLoader.get(definition.module); - if (normalizationRootNode != null) { - const operation = getOperation(normalizationRootNode); - this._traverseSelections(operation.selections, ROOT_ID); - } else { - // If the fragment is not available, we assume that the data cannot have - // been processed yet and must therefore be missing. - this._handleMissing(); - } - } - this._variables = prevVariables; - } - // For abstract types defined in the client schema extension, we won't be // getting `__is` hints from the server. To handle this, the // compiler attaches additional metadata on the normalization artifact, diff --git a/packages/relay-runtime/store/OperationExecutor.js b/packages/relay-runtime/store/OperationExecutor.js index 97444ede5a187..428a2e34cdb2d 100644 --- a/packages/relay-runtime/store/OperationExecutor.js +++ b/packages/relay-runtime/store/OperationExecutor.js @@ -16,7 +16,6 @@ import type { GraphQLResponse, GraphQLResponseWithData, GraphQLSingularResponse, - ReactFlightServerTree, } from '../network/RelayNetworkTypes'; import type {Sink, Subscription} from '../network/RelayObservable'; import type { @@ -34,9 +33,6 @@ import type { OptimisticResponseConfig, OptimisticUpdate, PublishQueue, - ReactFlightClientResponse, - ReactFlightPayloadDeserializer, - ReactFlightServerErrorHandler, Record, RelayResponsePayload, RequestDescriptor, @@ -87,8 +83,6 @@ export type ExecuteConfig = { +operationLoader: ?OperationLoader, +operationTracker: OperationTracker, +optimisticConfig: ?OptimisticResponseConfig, - +reactFlightPayloadDeserializer?: ?ReactFlightPayloadDeserializer, - +reactFlightServerErrorHandler?: ?ReactFlightServerErrorHandler, +scheduler?: ?TaskScheduler, +shouldProcessClientComponents?: ?boolean, +sink: Sink, @@ -146,8 +140,6 @@ class Executor { _optimisticUpdates: null | Array>; _pendingModulePayloadsCount: number; +_getPublishQueue: (actorIdentifier: ActorIdentifier) => PublishQueue; - _reactFlightPayloadDeserializer: ?ReactFlightPayloadDeserializer; - _reactFlightServerErrorHandler: ?ReactFlightServerErrorHandler; _shouldProcessClientComponents: ?boolean; _scheduler: ?TaskScheduler; _sink: Sink; @@ -177,8 +169,6 @@ class Executor { operationLoader, operationTracker, optimisticConfig, - reactFlightPayloadDeserializer, - reactFlightServerErrorHandler, scheduler, shouldProcessClientComponents, sink, @@ -211,8 +201,6 @@ class Executor { this._subscriptions = new Map(); this._updater = updater; this._isClientPayload = isClientPayload === true; - this._reactFlightPayloadDeserializer = reactFlightPayloadDeserializer; - this._reactFlightServerErrorHandler = reactFlightServerErrorHandler; this._isSubscriptionOperation = this._operation.request.node.params.operationKind === 'subscription'; this._shouldProcessClientComponents = shouldProcessClientComponents; @@ -285,26 +273,6 @@ class Executor { this._disposeRetainedData(); } - _deserializeReactFlightPayloadWithLogging = ( - tree: ReactFlightServerTree, - ): ReactFlightClientResponse => { - const reactFlightPayloadDeserializer = this._reactFlightPayloadDeserializer; - invariant( - typeof reactFlightPayloadDeserializer === 'function', - 'OperationExecutor: Expected reactFlightPayloadDeserializer to be available when calling _deserializeReactFlightPayloadWithLogging.', - ); - const [duration, result] = withDuration(() => { - return reactFlightPayloadDeserializer(tree); - }); - this._log({ - name: 'execute.flight.payload_deserialize', - executeId: this._executeId, - operationName: this._operation.request.node.params.name, - duration, - }); - return result; - }; - _updateActiveState(): void { let activeState; switch (this._state) { @@ -615,11 +583,6 @@ class Executor { actorIdentifier: this._actorIdentifier, getDataID: this._getDataID, path: [], - reactFlightPayloadDeserializer: - this._reactFlightPayloadDeserializer != null - ? this._deserializeReactFlightPayloadWithLogging - : null, - reactFlightServerErrorHandler: this._reactFlightServerErrorHandler, shouldProcessClientComponents: this._shouldProcessClientComponents, treatMissingFieldsAsNull, }, @@ -726,11 +689,6 @@ class Executor { actorIdentifier: this._actorIdentifier, getDataID: this._getDataID, path: followupPayload.path, - reactFlightPayloadDeserializer: - this._reactFlightPayloadDeserializer != null - ? this._deserializeReactFlightPayloadWithLogging - : null, - reactFlightServerErrorHandler: this._reactFlightServerErrorHandler, treatMissingFieldsAsNull: this._treatMissingFieldsAsNull, shouldProcessClientComponents: this._shouldProcessClientComponents, }, @@ -809,11 +767,6 @@ class Executor { actorIdentifier: this._actorIdentifier, getDataID: this._getDataID, path: [], - reactFlightPayloadDeserializer: - this._reactFlightPayloadDeserializer != null - ? this._deserializeReactFlightPayloadWithLogging - : null, - reactFlightServerErrorHandler: this._reactFlightServerErrorHandler, treatMissingFieldsAsNull: this._treatMissingFieldsAsNull, shouldProcessClientComponents: this._shouldProcessClientComponents, }, @@ -1267,11 +1220,6 @@ class Executor { actorIdentifier: this._actorIdentifier, getDataID: this._getDataID, path: placeholder.path, - reactFlightPayloadDeserializer: - this._reactFlightPayloadDeserializer != null - ? this._deserializeReactFlightPayloadWithLogging - : null, - reactFlightServerErrorHandler: this._reactFlightServerErrorHandler, treatMissingFieldsAsNull: this._treatMissingFieldsAsNull, shouldProcessClientComponents: this._shouldProcessClientComponents, }, @@ -1499,11 +1447,6 @@ class Executor { actorIdentifier: this._actorIdentifier, getDataID: this._getDataID, path: [...normalizationPath, responseKey, String(itemIndex)], - reactFlightPayloadDeserializer: - this._reactFlightPayloadDeserializer != null - ? this._deserializeReactFlightPayloadWithLogging - : null, - reactFlightServerErrorHandler: this._reactFlightServerErrorHandler, treatMissingFieldsAsNull: this._treatMissingFieldsAsNull, shouldProcessClientComponents: this._shouldProcessClientComponents, }); diff --git a/packages/relay-runtime/store/RelayModernEnvironment.js b/packages/relay-runtime/store/RelayModernEnvironment.js index 356862f50dca2..afb15061c7e31 100644 --- a/packages/relay-runtime/store/RelayModernEnvironment.js +++ b/packages/relay-runtime/store/RelayModernEnvironment.js @@ -35,8 +35,6 @@ import type { OptimisticResponseConfig, OptimisticUpdateFunction, PublishQueue, - ReactFlightPayloadDeserializer, - ReactFlightServerErrorHandler, RequiredFieldLogger, SelectorStoreUpdater, SingularReaderSelector, @@ -68,8 +66,6 @@ export type EnvironmentConfig = { +treatMissingFieldsAsNull?: boolean, +log?: ?LogFunction, +operationLoader?: ?OperationLoader, - +reactFlightPayloadDeserializer?: ?ReactFlightPayloadDeserializer, - +reactFlightServerErrorHandler?: ?ReactFlightServerErrorHandler, +network: INetwork, +scheduler?: ?TaskScheduler, +store: Store, @@ -87,8 +83,6 @@ class RelayModernEnvironment implements IEnvironment { __log: LogFunction; +_defaultRenderPolicy: RenderPolicy; _operationLoader: ?OperationLoader; - _reactFlightPayloadDeserializer: ?ReactFlightPayloadDeserializer; - _reactFlightServerErrorHandler: ?ReactFlightServerErrorHandler; _shouldProcessClientComponents: ?boolean; _network: INetwork; _publishQueue: PublishQueue; @@ -108,9 +102,6 @@ class RelayModernEnvironment implements IEnvironment { this.configName = config.configName; this._treatMissingFieldsAsNull = config.treatMissingFieldsAsNull === true; const operationLoader = config.operationLoader; - const reactFlightPayloadDeserializer = - config.reactFlightPayloadDeserializer; - const reactFlightServerErrorHandler = config.reactFlightServerErrorHandler; if (__DEV__) { if (operationLoader != null) { invariant( @@ -122,14 +113,6 @@ class RelayModernEnvironment implements IEnvironment { operationLoader, ); } - if (reactFlightPayloadDeserializer != null) { - invariant( - typeof reactFlightPayloadDeserializer === 'function', - 'RelayModernEnvironment: Expected `reactFlightPayloadDeserializer` ' + - ' to be a function, got `%s`.', - reactFlightPayloadDeserializer, - ); - } } this.__log = config.log ?? emptyFunction; this.requiredFieldLogger = @@ -162,8 +145,6 @@ class RelayModernEnvironment implements IEnvironment { this._operationTracker = config.operationTracker ?? new RelayOperationTracker(); - this._reactFlightPayloadDeserializer = reactFlightPayloadDeserializer; - this._reactFlightServerErrorHandler = reactFlightServerErrorHandler; this._shouldProcessClientComponents = config.shouldProcessClientComponents; // Register this Relay Environment with Relay DevTools if it exists. @@ -488,8 +469,6 @@ class RelayModernEnvironment implements IEnvironment { assertInternalActorIdentifier(actorIdentifier); return publishQueue; }, - reactFlightPayloadDeserializer: this._reactFlightPayloadDeserializer, - reactFlightServerErrorHandler: this._reactFlightServerErrorHandler, scheduler: this._scheduler, shouldProcessClientComponents: this._shouldProcessClientComponents, sink, diff --git a/packages/relay-runtime/store/RelayModernStore.js b/packages/relay-runtime/store/RelayModernStore.js index de67c2934eb16..dde64ef45e17b 100644 --- a/packages/relay-runtime/store/RelayModernStore.js +++ b/packages/relay-runtime/store/RelayModernStore.js @@ -45,7 +45,6 @@ const RelayModernRecord = require('./RelayModernRecord'); const RelayOptimisticRecordSource = require('./RelayOptimisticRecordSource'); const RelayReader = require('./RelayReader'); const RelayReferenceMarker = require('./RelayReferenceMarker'); -const RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils'); const RelayStoreSubscriptions = require('./RelayStoreSubscriptions'); const RelayStoreUtils = require('./RelayStoreUtils'); const {ROOT_ID, ROOT_TYPE} = require('./RelayStoreUtils'); @@ -729,15 +728,7 @@ function updateTargetFromSource( } } if (sourceRecord && targetRecord) { - // ReactFlightClientResponses are lazy and only materialize when readRoot - // is called when we read the field, so if the record is a Flight field - // we always use the new record's data regardless of whether - // it actually changed. Let React take care of reconciliation instead. - const nextRecord = - RelayModernRecord.getType(targetRecord) === - RelayStoreReactFlightUtils.REACT_FLIGHT_TYPE_NAME - ? sourceRecord - : RelayModernRecord.update(targetRecord, sourceRecord); + const nextRecord = RelayModernRecord.update(targetRecord, sourceRecord); if (nextRecord !== targetRecord) { // Prevent mutation of a record from outside the store. if (__DEV__) { diff --git a/packages/relay-runtime/store/RelayReader.js b/packages/relay-runtime/store/RelayReader.js index 650c550b153d2..47998ed5f26fd 100644 --- a/packages/relay-runtime/store/RelayReader.js +++ b/packages/relay-runtime/store/RelayReader.js @@ -16,7 +16,6 @@ import type { ReaderAliasedFragmentSpread, ReaderClientEdgeToClientObject, ReaderClientEdgeToServerObject, - ReaderFlightField, ReaderFragment, ReaderFragmentSpread, ReaderInlineDataFragmentSpread, @@ -57,7 +56,6 @@ const { CLIENT_EXTENSION, CONDITION, DEFER, - FLIGHT_FIELD, FRAGMENT_SPREAD, INLINE_DATA_FRAGMENT_SPREAD, INLINE_FRAGMENT, @@ -75,7 +73,6 @@ const { } = require('./experimental-live-resolvers/LiveResolverSuspenseSentinel'); const RelayConcreteVariables = require('./RelayConcreteVariables'); const RelayModernRecord = require('./RelayModernRecord'); -const {getReactFlightClientResponse} = require('./RelayStoreReactFlightUtils'); const { CLIENT_EDGE_TRAVERSAL_PATH, FRAGMENT_OWNER_KEY, @@ -452,13 +449,6 @@ class RelayReader { } break; } - case FLIGHT_FIELD: - if (RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD) { - this._readFlightField(selection, record, data); - } else { - throw new Error('Flight fields are not yet supported.'); - } - break; case ACTOR_CHANGE: this._readActorChange(selection, record, data); break; @@ -775,40 +765,6 @@ class RelayReader { } } - _readFlightField( - field: ReaderFlightField, - record: Record, - data: SelectorData, - ): ?mixed { - const applicationName = field.alias ?? field.name; - const storageKey = getStorageKey(field, this._variables); - const reactFlightClientResponseRecordID = - RelayModernRecord.getLinkedRecordID(record, storageKey); - if (reactFlightClientResponseRecordID == null) { - data[applicationName] = reactFlightClientResponseRecordID; - if (reactFlightClientResponseRecordID === undefined) { - this._markDataAsMissing(); - } - return reactFlightClientResponseRecordID; - } - const reactFlightClientResponseRecord = this._recordSource.get( - reactFlightClientResponseRecordID, - ); - this._seenRecords.add(reactFlightClientResponseRecordID); - if (reactFlightClientResponseRecord == null) { - data[applicationName] = reactFlightClientResponseRecord; - if (reactFlightClientResponseRecord === undefined) { - this._markDataAsMissing(); - } - return reactFlightClientResponseRecord; - } - const clientResponse = getReactFlightClientResponse( - reactFlightClientResponseRecord, - ); - data[applicationName] = clientResponse; - return clientResponse; - } - _readScalar( field: ReaderScalarField, record: Record, diff --git a/packages/relay-runtime/store/RelayReferenceMarker.js b/packages/relay-runtime/store/RelayReferenceMarker.js index cacfb41add911..20a37cc9fa19e 100644 --- a/packages/relay-runtime/store/RelayReferenceMarker.js +++ b/packages/relay-runtime/store/RelayReferenceMarker.js @@ -13,7 +13,6 @@ import type { NormalizationClientEdgeToClientObject, - NormalizationFlightField, NormalizationLinkedField, NormalizationModuleImport, NormalizationNode, @@ -25,19 +24,16 @@ import type { DataIDSet, NormalizationSelector, OperationLoader, - ReactFlightReachableExecutableDefinitions, Record, RecordSource, } from './RelayStoreTypes'; const getOperation = require('../util/getOperation'); const RelayConcreteNode = require('../util/RelayConcreteNode'); -const RelayFeatureFlags = require('../util/RelayFeatureFlags'); const cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField'); const getOutputTypeRecordIDs = require('./experimental-live-resolvers/getOutputTypeRecordIDs'); const {getLocalVariables} = require('./RelayConcreteVariables'); const RelayModernRecord = require('./RelayModernRecord'); -const RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils'); const RelayStoreUtils = require('./RelayStoreUtils'); const {generateTypeID} = require('./TypeID'); const invariant = require('invariant'); @@ -48,7 +44,6 @@ const { CLIENT_COMPONENT, CLIENT_EXTENSION, DEFER, - FLIGHT_FIELD, FRAGMENT_SPREAD, INLINE_FRAGMENT, LINKED_FIELD, @@ -61,7 +56,7 @@ const { RELAY_RESOLVER, CLIENT_EDGE_TO_CLIENT_OBJECT, } = RelayConcreteNode; -const {ROOT_ID, getStorageKey, getModuleOperationKey} = RelayStoreUtils; +const {getStorageKey, getModuleOperationKey} = RelayStoreUtils; function mark( recordSource: RecordSource, @@ -232,13 +227,6 @@ class RelayReferenceMarker { case CLIENT_EXTENSION: this._traverseSelections(selection.selections, record); break; - case FLIGHT_FIELD: - if (RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD) { - this._traverseFlightField(selection, record); - } else { - throw new Error('Flight fields are not yet supported.'); - } - break; case CLIENT_COMPONENT: if (this._shouldProcessClientComponents === false) { break; @@ -394,51 +382,6 @@ class RelayReferenceMarker { } }); } - - _traverseFlightField(field: NormalizationFlightField, record: Record): void { - const storageKey = getStorageKey(field, this._variables); - const linkedID = RelayModernRecord.getLinkedRecordID(record, storageKey); - if (linkedID == null) { - return; - } - this._references.add(linkedID); - - const reactFlightClientResponseRecord = this._recordSource.get(linkedID); - - if (reactFlightClientResponseRecord == null) { - return; - } - - const reachableExecutableDefinitions = RelayModernRecord.getValue( - reactFlightClientResponseRecord, - RelayStoreReactFlightUtils.REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY, - ); - - if (!Array.isArray(reachableExecutableDefinitions)) { - return; - } - - const operationLoader = this._operationLoader; - invariant( - operationLoader !== null, - 'DataChecker: Expected an operationLoader to be configured when using ' + - 'React Flight', - ); - // In Flight, the variables that are in scope for reachable executable - // definitions aren't the same as what's in scope for the outer query. - const prevVariables = this._variables; - // $FlowFixMe[incompatible-cast] - for (const definition of (reachableExecutableDefinitions: Array)) { - this._variables = definition.variables; - const operationReference = definition.module; - const normalizationRootNode = operationLoader.get(operationReference); - if (normalizationRootNode != null) { - const operation = getOperation(normalizationRootNode); - this._traverse(operation, ROOT_ID); - } - } - this._variables = prevVariables; - } } module.exports = {mark}; diff --git a/packages/relay-runtime/store/RelayResponseNormalizer.js b/packages/relay-runtime/store/RelayResponseNormalizer.js index 2d8888c82e180..5214ba1bf2737 100644 --- a/packages/relay-runtime/store/RelayResponseNormalizer.js +++ b/packages/relay-runtime/store/RelayResponseNormalizer.js @@ -16,7 +16,6 @@ import type {PayloadData} from '../network/RelayNetworkTypes'; import type { NormalizationActorChange, NormalizationDefer, - NormalizationFlightField, NormalizationLinkedField, NormalizationModuleImport, NormalizationNode, @@ -31,9 +30,6 @@ import type { IncrementalDataPlaceholder, MutableRecordSource, NormalizationSelector, - ReactFlightPayloadDeserializer, - ReactFlightReachableExecutableDefinitions, - ReactFlightServerErrorHandler, Record, RelayResponsePayload, } from './RelayStoreTypes'; @@ -49,7 +45,6 @@ const { CLIENT_EXTENSION, CONDITION, DEFER, - FLIGHT_FIELD, FRAGMENT_SPREAD, INLINE_FRAGMENT, LINKED_FIELD, @@ -66,12 +61,6 @@ const {generateClientID, isClientID} = require('./ClientID'); const {getLocalVariables} = require('./RelayConcreteVariables'); const RelayModernRecord = require('./RelayModernRecord'); const {createNormalizationSelector} = require('./RelayModernSelector'); -const { - REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY, - REACT_FLIGHT_TREE_STORAGE_KEY, - REACT_FLIGHT_TYPE_NAME, - refineToReactFlightPayloadData, -} = require('./RelayStoreReactFlightUtils'); const { ROOT_ID, ROOT_TYPE, @@ -96,8 +85,6 @@ export type NormalizationOptions = { +getDataID: GetDataID, +treatMissingFieldsAsNull: boolean, +path?: $ReadOnlyArray, - +reactFlightPayloadDeserializer?: ?ReactFlightPayloadDeserializer, - +reactFlightServerErrorHandler?: ?ReactFlightServerErrorHandler, +shouldProcessClientComponents?: ?boolean, +actorIdentifier?: ?ActorIdentifier, }; @@ -138,8 +125,6 @@ class RelayResponseNormalizer { _path: Array; _recordSource: MutableRecordSource; _variables: Variables; - _reactFlightPayloadDeserializer: ?ReactFlightPayloadDeserializer; - _reactFlightServerErrorHandler: ?ReactFlightServerErrorHandler; _shouldProcessClientComponents: ?boolean; constructor( @@ -158,9 +143,6 @@ class RelayResponseNormalizer { this._path = options.path ? [...options.path] : []; this._recordSource = recordSource; this._variables = variables; - this._reactFlightPayloadDeserializer = - options.reactFlightPayloadDeserializer; - this._reactFlightServerErrorHandler = options.reactFlightServerErrorHandler; this._shouldProcessClientComponents = options.shouldProcessClientComponents; } @@ -341,13 +323,6 @@ class RelayResponseNormalizer { } this._traverseSelections(selection.fragment, record, data); break; - case FLIGHT_FIELD: - if (RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD) { - this._normalizeFlightField(node, selection, record, data); - } else { - throw new Error('Flight fields are not yet supported.'); - } - break; case ACTOR_CHANGE: this._normalizeActorChange(node, selection, record, data); break; @@ -675,183 +650,6 @@ class RelayResponseNormalizer { }); } - _normalizeFlightField( - parent: NormalizationNode, - selection: NormalizationFlightField, - record: Record, - data: PayloadData, - ): void { - const responseKey = selection.alias || selection.name; - const storageKey = getStorageKey(selection, this._variables); - const fieldValue = data[responseKey]; - - if (fieldValue == null) { - if (fieldValue === undefined) { - // Flight field may be missing in the response if: - // - It is inside an abstract type refinement where the concrete type does - // not conform to the interface/union. - // However an otherwise-required field may also be missing if the server - // is configured to skip fields with `null` values, in which case the - // client is assumed to be correctly configured with - // treatMissingFieldsAsNull=true. - if (this._isUnmatchedAbstractType) { - // Field not expected to exist regardless of whether the server is pruning null - // fields or not. - return; - } else { - // Not optional and the server is not pruning null fields: field is expected - // to be present - invariant( - this._treatMissingFieldsAsNull, - 'RelayResponseNormalizer: Payload did not contain a value for ' + - 'field `%s: %s`. Check that you are parsing with the same ' + - 'query that was used to fetch the payload.', - responseKey, - storageKey, - ); - } - } - RelayModernRecord.setValue(record, storageKey, null); - return; - } - - const reactFlightPayload = refineToReactFlightPayloadData(fieldValue); - const reactFlightPayloadDeserializer = this._reactFlightPayloadDeserializer; - - invariant( - reactFlightPayload != null, - 'RelayResponseNormalizer: Expected React Flight payload data to be an ' + - 'object with `status`, tree`, `queries` and `errors` properties, got ' + - '`%s`.', - fieldValue, - ); - invariant( - typeof reactFlightPayloadDeserializer === 'function', - 'RelayResponseNormalizer: Expected reactFlightPayloadDeserializer to ' + - 'be a function, got `%s`.', - reactFlightPayloadDeserializer, - ); - - if (reactFlightPayload.errors.length > 0) { - if (typeof this._reactFlightServerErrorHandler === 'function') { - this._reactFlightServerErrorHandler( - reactFlightPayload.status, - reactFlightPayload.errors, - ); - } else { - warning( - false, - 'RelayResponseNormalizer: Received server errors for field `%s`.\n\n' + - '%s\n%s', - responseKey, - reactFlightPayload.errors[0].message, - reactFlightPayload.errors[0].stack, - ); - } - } - - const reactFlightID = generateClientID( - RelayModernRecord.getDataID(record), - getStorageKey(selection, this._variables), - ); - let reactFlightClientResponseRecord = this._recordSource.get(reactFlightID); - if (reactFlightClientResponseRecord == null) { - reactFlightClientResponseRecord = RelayModernRecord.create( - reactFlightID, - REACT_FLIGHT_TYPE_NAME, - ); - this._recordSource.set(reactFlightID, reactFlightClientResponseRecord); - } - - if (reactFlightPayload.tree == null) { - // This typically indicates that a fatal server error prevented rows from - // being written. When this occurs, we should not continue normalization of - // the Flight field because the row response is malformed. - // - // Receiving empty rows is OK because it can indicate the start of a stream. - warning( - false, - 'RelayResponseNormalizer: Expected `tree` not to be null. This ' + - 'typically indicates that a fatal server error prevented any Server ' + - 'Component rows from being written.', - ); - // We create the flight record with a null value for the tree - // and empty reachable definitions - RelayModernRecord.setValue( - reactFlightClientResponseRecord, - REACT_FLIGHT_TREE_STORAGE_KEY, - null, - ); - RelayModernRecord.setValue( - reactFlightClientResponseRecord, - REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY, - [], - ); - RelayModernRecord.setLinkedRecordID(record, storageKey, reactFlightID); - return; - } - - // We store the deserialized reactFlightClientResponse in a separate - // record and link it to the parent record. This is so we can GC the Flight - // tree later even if the parent record is still reachable. - const reactFlightClientResponse = reactFlightPayloadDeserializer( - reactFlightPayload.tree, - ); - - RelayModernRecord.setValue( - reactFlightClientResponseRecord, - REACT_FLIGHT_TREE_STORAGE_KEY, - reactFlightClientResponse, - ); - - const reachableExecutableDefinitions: Array = - []; - for (const query of reactFlightPayload.queries) { - if (query.response.data != null) { - this._followupPayloads.push({ - kind: 'ModuleImportPayload', - args: null, - data: query.response.data, - dataID: ROOT_ID, - operationReference: query.module, - path: [], - typeName: ROOT_TYPE, - variables: query.variables, - actorIdentifier: this._actorIdentifier, - }); - } - reachableExecutableDefinitions.push({ - module: query.module, - variables: query.variables, - }); - } - for (const fragment of reactFlightPayload.fragments) { - if (fragment.response.data != null) { - this._followupPayloads.push({ - kind: 'ModuleImportPayload', - args: null, - data: fragment.response.data, - dataID: fragment.__id, - operationReference: fragment.module, - path: [], - typeName: fragment.__typename, - variables: fragment.variables, - actorIdentifier: this._actorIdentifier, - }); - } - reachableExecutableDefinitions.push({ - module: fragment.module, - variables: fragment.variables, - }); - } - RelayModernRecord.setValue( - reactFlightClientResponseRecord, - REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY, - reachableExecutableDefinitions, - ); - RelayModernRecord.setLinkedRecordID(record, storageKey, reactFlightID); - } - _normalizeLink( field: NormalizationLinkedField, record: Record, diff --git a/packages/relay-runtime/store/RelayStoreReactFlightUtils.js b/packages/relay-runtime/store/RelayStoreReactFlightUtils.js deleted file mode 100644 index 2a97f86c1b6a2..0000000000000 --- a/packages/relay-runtime/store/RelayStoreReactFlightUtils.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - * @format - * @oncall relay - */ - -'use strict'; - -import type {ReactFlightPayloadData} from '../network/RelayNetworkTypes'; -import type {ReactFlightClientResponse, Record} from './RelayStoreTypes'; - -const {getType} = require('./RelayModernRecord'); -const invariant = require('invariant'); - -// Reachable (client) executable definitions encountered while server component -// rendering -const REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY = 'executableDefinitions'; -const REACT_FLIGHT_TREE_STORAGE_KEY = 'tree'; -const REACT_FLIGHT_TYPE_NAME = 'ReactFlightComponent'; - -function refineToReactFlightPayloadData( - payload: mixed, -): ?ReactFlightPayloadData { - if ( - payload == null || - typeof payload !== 'object' || - typeof payload.status !== 'string' || - (!Array.isArray(payload.tree) && payload.tree !== null) || - !Array.isArray(payload.queries) || - !Array.isArray(payload.fragments) || - !Array.isArray(payload.errors) - ) { - return null; - } - return (payload: $FlowFixMe); -} - -function getReactFlightClientResponse( - record: Record, -): ?ReactFlightClientResponse { - invariant( - getType(record) === REACT_FLIGHT_TYPE_NAME, - 'getReactFlightClientResponse(): Expected a ReactFlightComponentRecord, ' + - 'got %s.', - record, - ); - return (record[REACT_FLIGHT_TREE_STORAGE_KEY]: $FlowFixMe); -} - -module.exports = { - REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY, - REACT_FLIGHT_TREE_STORAGE_KEY, - REACT_FLIGHT_TYPE_NAME, - getReactFlightClientResponse, - refineToReactFlightPayloadData, -}; diff --git a/packages/relay-runtime/store/RelayStoreTypes.js b/packages/relay-runtime/store/RelayStoreTypes.js index 5f7f4e6468ccf..3704fa5321933 100644 --- a/packages/relay-runtime/store/RelayStoreTypes.js +++ b/packages/relay-runtime/store/RelayStoreTypes.js @@ -20,8 +20,6 @@ import type { INetwork, PayloadData, PayloadError, - ReactFlightServerError, - ReactFlightServerTree, UploadableMap, } from '../network/RelayNetworkTypes'; import type RelayObservable from '../network/RelayObservable'; @@ -655,13 +653,6 @@ export type ExecuteAsyncModuleLogEvent = { +duration: number, }; -export type ExecuteFlightPayloadDeserializeLogEvent = { - +name: 'execute.flight.payload_deserialize', - +executeId: number, - +operationName: string, - +duration: number, -}; - export type ExecuteErrorLogEvent = { +name: 'execute.error', +executeId: number, @@ -741,7 +732,6 @@ export type LogEvent = | ExecuteStartLogEvent | ExecuteNextLogEvent | ExecuteAsyncModuleLogEvent - | ExecuteFlightPayloadDeserializeLogEvent | ExecuteErrorLogEvent | ExecuteCompleteLogEvent | StorePublishLogEvent @@ -1001,7 +991,7 @@ export type HandleFieldPayload = { /** * A payload that represents data necessary to process the results of an object - * with a `@module` fragment spread, or a Flight field's: + * with a `@module` fragment spread: * * ## @module Fragment Spread * - args: Local arguments from the parent @@ -1016,20 +1006,6 @@ export type HandleFieldPayload = { * which can in turn be used to normalize and publish the data. The dataID and * typeName can also be used to construct a root record for normalization. * - * ## Flight fields - * In Flight, data for additional components rendered by the requested server - * component are included in the response returned by a Flight compliant server. - * - * - data: Data used by additional components rendered by the server component - * being requested. - * - dataID: For Flight fields, this should always be ROOT_ID. This is because - * the query data isn't relative to the parent record–it's root data. - * - operationReference: The query's module that will be later used by an - * operation loader. - * - variables: The query's variables. - * - typeName: For Flight fields, this should always be ROOT_TYPE. This is - * because the query data isn't relative to the parent record–it's - * root data. */ export type ModuleImportPayload = { +kind: 'ModuleImportPayload', @@ -1290,35 +1266,6 @@ export interface PublishQueue { run(sourceOperation?: OperationDescriptor): $ReadOnlyArray; } -/** - * ReactFlightDOMRelayClient processes a ReactFlightServerTree into a - * ReactFlightClientResponse object. readRoot() can suspend. - */ -export type ReactFlightClientResponse = {readRoot: () => mixed, ...}; - -export type ReactFlightReachableExecutableDefinitions = { - +module: mixed, - +variables: Variables, -}; - -/** - * A user-supplied function that takes a ReactFlightServerTree - * (after successful execution on the server), and deserializes it into a - * ReactFlightClientResponse object. - */ -export type ReactFlightPayloadDeserializer = ( - tree: ReactFlightServerTree, -) => ReactFlightClientResponse; - -/** - * An optionally user-supplied function that handles errors returned by the - * server's JS runtime while executing a React Server Component. - */ -export type ReactFlightServerErrorHandler = ( - status: string, - errors: Array, -) => void; - /** * The return type of a client edge resolver pointing to a concrete type. * T can be overridden to be more specific than a DataID, e.g. if the IDs diff --git a/packages/relay-runtime/store/__tests__/DataChecker-test.js b/packages/relay-runtime/store/__tests__/DataChecker-test.js index d8c490b365a40..db41cd840ed18 100644 --- a/packages/relay-runtime/store/__tests__/DataChecker-test.js +++ b/packages/relay-runtime/store/__tests__/DataChecker-test.js @@ -38,7 +38,6 @@ const { } = require('../../multi-actor-environment/ActorIdentifier'); const {getRequest, graphql} = require('../../query/GraphQLTag'); const getRelayHandleKey = require('../../util/getRelayHandleKey'); -const RelayFeatureFlags = require('../../util/RelayFeatureFlags'); const {check} = require('../DataChecker'); const defaultGetDataID = require('../defaultGetDataID'); const {createNormalizationSelector} = require('../RelayModernSelector'); @@ -2804,319 +2803,6 @@ describe('check()', () => { }); }); - describe('with feature ENABLE_REACT_FLIGHT_COMPONENT_FIELD', () => { - let FlightQuery; - let InnerQuery; - let operationLoader; - - const readRoot = () => { - return { - $$typeof: Symbol.for('react.element'), - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }; - }; - - beforeEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = true; - - FlightQuery = graphql` - query DataCheckerTestFlightQuery($id: ID!, $count: Int!) { - node(id: $id) { - ... on Story { - flightComponent(condition: true, count: $count, id: $id) - } - } - } - `; - InnerQuery = graphql` - query DataCheckerTestInnerQuery($id: ID!) { - node(id: $id) { - ... on User { - name - } - } - } - `; - - operationLoader = { - get: jest.fn(() => getRequest(InnerQuery)), - load: jest.fn(() => Promise.resolve(getRequest(InnerQuery))), - }; - }); - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - it('returns available when the Flight field is fetched', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - '2': { - __id: '2', - __typename: 'User', - id: '2', - name: 'Lauren', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __id: 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - __typename: 'ReactFlightComponent', - executableDefinitions: [ - { - module: { - __dr: 'RelayFlightExampleQuery.graphql', - }, - variables: { - id: '2', - }, - }, - ], - tree: { - readRoot, - }, - }, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - 'node(id:"2")': { - __ref: '2', - }, - }, - }; - const source = RelayRecordSource.create(data); - const target = RelayRecordSource.create(); - const status = check( - () => source, - () => target, - INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE, - createNormalizationSelector( - getRequest(FlightQuery).operation, - ROOT_ID, - { - count: 10, - id: '1', - }, - ), - [], - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - defaultGetDataID, - ); - expect(status).toEqual({ - status: 'available', - mostRecentlyInvalidatedAt: null, - }); - expect(target.size()).toBe(0); - }); - - it('returns missing when the Flight field exists but has not been processed', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __id: 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - __typename: 'ReactFlightComponent', - }, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const source = RelayRecordSource.create(data); - const target = RelayRecordSource.create(); - const status = check( - () => source, - () => target, - INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE, - createNormalizationSelector( - getRequest(FlightQuery).operation, - ROOT_ID, - { - count: 10, - id: '1', - }, - ), - [], - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - defaultGetDataID, - ); - expect(status).toEqual({ - status: 'missing', - mostRecentlyInvalidatedAt: null, - }); - expect(target.size()).toBe(0); - }); - - it('returns missing when the Flight field is null in the store', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - null, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const source = RelayRecordSource.create(data); - const target = RelayRecordSource.create(); - const status = check( - () => source, - () => target, - INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE, - createNormalizationSelector( - getRequest(FlightQuery).operation, - ROOT_ID, - { - count: 10, - id: '1', - }, - ), - [], - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - defaultGetDataID, - ); - expect(status).toEqual({ - status: 'missing', - mostRecentlyInvalidatedAt: null, - }); - expect(target.size()).toBe(0); - }); - - it('returns missing when the Flight field is undefined in the store', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - undefined, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const source = RelayRecordSource.create(data); - const target = RelayRecordSource.create(); - const status = check( - () => source, - () => target, - INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE, - createNormalizationSelector( - getRequest(FlightQuery).operation, - ROOT_ID, - { - count: 10, - id: '1', - }, - ), - [], - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - defaultGetDataID, - ); - expect(status).toEqual({ - status: 'missing', - mostRecentlyInvalidatedAt: null, - }); - expect(target.size()).toBe(0); - }); - - it('returns missing when the linked ReactFlightClientResponseRecord is missing', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const source = RelayRecordSource.create(data); - const target = RelayRecordSource.create(); - const status = check( - () => source, - () => target, - INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE, - createNormalizationSelector( - getRequest(FlightQuery).operation, - ROOT_ID, - { - count: 10, - id: '1', - }, - ), - [], - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - defaultGetDataID, - ); - expect(status).toEqual({ - status: 'missing', - mostRecentlyInvalidatedAt: null, - }); - expect(target.size()).toBe(0); - }); - }); - describe('ActorChange', () => { beforeEach(() => { Query = graphql` diff --git a/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteMutationWithFlight-test.js b/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteMutationWithFlight-test.js deleted file mode 100644 index 3216031a929f9..0000000000000 --- a/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteMutationWithFlight-test.js +++ /dev/null @@ -1,570 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow - * @format - * @oncall relay - */ - -'use strict'; -import type { - ReactFlightServerError, - ReactFlightServerTree, -} from '../../network/RelayNetworkTypes'; -import type {GraphQLResponse} from '../../network/RelayNetworkTypes'; -import type {Snapshot} from '../RelayStoreTypes'; -import type {RequestParameters} from 'relay-runtime/util/RelayConcreteNode'; -import type { - CacheConfig, - Variables, -} from 'relay-runtime/util/RelayRuntimeTypes'; - -const { - MultiActorEnvironment, - getActorIdentifier, -} = require('../../multi-actor-environment'); -const RelayNetwork = require('../../network/RelayNetwork'); -const RelayObservable = require('../../network/RelayObservable'); -const {graphql} = require('../../query/GraphQLTag'); -const RelayModernEnvironment = require('../RelayModernEnvironment'); -const { - createOperationDescriptor, -} = require('../RelayModernOperationDescriptor'); -const RelayModernStore = require('../RelayModernStore'); -const RelayRecordSource = require('../RelayRecordSource'); -const {RelayFeatureFlags} = require('relay-runtime'); -const {disallowWarnings, expectToWarn} = require('relay-test-utils-internal'); - -disallowWarnings(); - -describe.each(['RelayModernEnvironment', 'MultiActorEnvironment'])( - 'executeMutation() with Flight field', - environmentType => { - let callbacks; - let complete; - let environment; - let error; - let fetch; - let innerQueryOperation; - let innerQueryVariables; - let next; - let operation; - let operationLoader; - let queryOperation; - let queryVariables; - let reactFlightPayloadDeserializer; - let RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery; - let RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery; - let RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation; - let source; - let store; - let storyID; - let subject; - let variables; - - describe(environmentType, () => { - beforeEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = true; - - storyID = 'story-id'; - - RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation = graphql` - mutation RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation( - $input: StoryUpdateInput! - $count: Int! - ) { - storyUpdate(input: $input) { - story { - id - body { - text - } - flightComponent(condition: true, count: $count, id: "x") - } - } - } - `; - - RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery = graphql` - query RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery( - $id: ID! - $count: Int! - ) { - node(id: $id) { - ... on Story { - flightComponent(condition: true, count: $count, id: "x") - } - } - } - `; - - RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery = graphql` - query RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery( - $id: ID! - ) { - node(id: $id) { - ... on User { - name - } - } - } - `; - variables = { - input: { - body: { - text: 'Hello world!', - }, - }, - count: 5, - }; - queryVariables = { - id: storyID, - count: 5, - }; - innerQueryVariables = { - id: '2', - }; - - reactFlightPayloadDeserializer = jest.fn( - (payload: ReactFlightServerTree) => { - return { - readRoot() { - return payload; - }, - }; - }, - ); - complete = jest.fn<[], mixed>(); - error = jest.fn<[Error], mixed>(); - next = jest.fn<[GraphQLResponse], mixed>(); - callbacks = {complete, error, next}; - fetch = ( - _query: RequestParameters, - _variables: Variables, - _cacheConfig: CacheConfig, - ) => { - return RelayObservable.create(sink => { - subject = sink; - }); - }; - operationLoader = { - load: jest.fn(() => - Promise.resolve( - RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery, - ), - ), - get: jest.fn( - () => - RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery, - ), - }; - source = RelayRecordSource.create(); - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - store = new RelayModernStore(source, {operationLoader}); - const multiActorEnvironment = new MultiActorEnvironment({ - createNetworkForActor: _actorID => RelayNetwork.create(fetch), - createStoreForActor: _actorID => store, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - reactFlightPayloadDeserializer, - }); - environment = - environmentType === 'MultiActorEnvironment' - ? multiActorEnvironment.forActor(getActorIdentifier('actor:1234')) - : new RelayModernEnvironment({ - network: RelayNetwork.create(fetch), - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - store, - reactFlightPayloadDeserializer, - }); - - operation = createOperationDescriptor( - RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation, - variables, - ); - queryOperation = createOperationDescriptor( - RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery, - queryVariables, - ); - innerQueryOperation = createOperationDescriptor( - RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery, - innerQueryVariables, - ); - - environment.execute({operation: queryOperation}).subscribe({}); - subject.next({ - data: { - node: { - id: storyID, - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - node: { - id: '2', - name: 'Lauren', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '2', - }, - }, - ], - errors: [], - fragments: [], - }, - }, - }, - }); - jest.runAllTimers(); - }); - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - describe('when successful', () => { - it('updates Flight fields that were previously queried for', () => { - // precondition - FlightQuery - const snapshot = environment.lookup(queryOperation.fragment); - const callback = jest.fn<[Snapshot], void>(); - environment.subscribe(snapshot, callback); - // $FlowFixMe[incompatible-use] readRoot() to verify that it updated - expect(snapshot.data.node.flightComponent.readRoot()).toEqual([ - {key: null, props: {foo: 1}, ref: null, type: 'div'}, - ]); - - // precondition - InnerQuery - const innerSnapshot = environment.lookup( - innerQueryOperation.fragment, - ); - const innerCallback = jest.fn<[Snapshot], void>(); - environment.subscribe(innerSnapshot, innerCallback); - expect(innerSnapshot.data).toEqual({node: {name: 'Lauren'}}); - - environment.executeMutation({operation}).subscribe(callbacks); - callback.mockClear(); - subject.next({ - data: { - storyUpdate: { - story: { - id: storyID, - body: { - text: 'Hello world!', - }, - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 2, bar: 'abc', baz: [1, 2, 3]}, // updated - }, - ], - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - node: { - id: '2', - name: 'Lauren Tan', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '2', - }, - }, - ], - errors: [], - fragments: [], - }, - }, - }, - }, - }); - subject.complete(); - - expect(complete).toBeCalled(); - expect(error).not.toBeCalled(); - expect(callback).toHaveBeenCalledTimes(1); - expect( - // $FlowFixMe[incompatible-use] readRoot() to verify that it updated - callback.mock.calls[0][0].data.node.flightComponent.readRoot(), - ).toEqual([ - { - key: null, - props: {foo: 2, bar: 'abc', baz: [1, 2, 3]}, - ref: null, - type: 'div', - }, - ]); - - // This verifies that data for client components included in the payload are - // also updated as a result of the mutation. - expect(innerCallback).toHaveBeenCalledTimes(1); - expect(innerCallback).toHaveBeenLastCalledWith( - expect.objectContaining({ - data: { - node: { - name: 'Lauren Tan', - }, - }, - }), - ); - }); - }); - - describe('when server errors are encountered', () => { - describe('and ReactFlightServerErrorHandler is specified', () => { - let reactFlightServerErrorHandler; - beforeEach(() => { - reactFlightServerErrorHandler = jest.fn( - (status: string, errors: Array) => { - const err = new Error(`${status}: ${errors[0].message}`); - err.stack = errors[0].stack; - throw err; - }, - ); - const multiActorEnvironment = new MultiActorEnvironment({ - createNetworkForActor: _actorID => RelayNetwork.create(fetch), - createStoreForActor: _actorID => store, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - reactFlightPayloadDeserializer, - reactFlightServerErrorHandler, - }); - environment = - environmentType === 'MultiActorEnvironment' - ? multiActorEnvironment.forActor( - getActorIdentifier('actor:1234'), - ) - : new RelayModernEnvironment({ - network: RelayNetwork.create(fetch), - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - store, - reactFlightPayloadDeserializer, - reactFlightServerErrorHandler, - }); - }); - it('calls ReactFlightServerErrorHandler', () => { - // precondition - FlightQuery - const snapshot = environment.lookup(queryOperation.fragment); - const callback = jest.fn<[Snapshot], void>(); - environment.subscribe(snapshot, callback); - // $FlowFixMe[incompatible-use] readRoot() to verify that it updated - expect(snapshot.data.node.flightComponent.readRoot()).toEqual([ - {key: null, props: {foo: 1}, ref: null, type: 'div'}, - ]); - - // precondition - InnerQuery - const innerSnapshot = environment.lookup( - innerQueryOperation.fragment, - ); - const innerCallback = jest.fn<[Snapshot], void>(); - environment.subscribe(innerSnapshot, innerCallback); - expect(innerSnapshot.data).toEqual({node: {name: 'Lauren'}}); - - environment.executeMutation({operation}).subscribe(callbacks); - callback.mockClear(); - subject.next({ - data: { - storyUpdate: { - story: { - id: storyID, - body: { - text: 'Hello world!', - }, - __typename: 'Story', - flightComponent: { - status: 'FAIL_JS_ERROR', - tree: [], - queries: [], - errors: [ - { - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }, - ], - fragments: [], - }, - }, - }, - }, - }); - subject.complete(); - - expect(complete).not.toBeCalled(); - expect(error).toBeCalled(); - expect(callback).toHaveBeenCalledTimes(0); - expect(reactFlightServerErrorHandler).toHaveBeenCalledWith( - 'FAIL_JS_ERROR', - expect.arrayContaining([ - expect.objectContaining({ - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }), - ]), - ); - }); - }); - describe('and no ReactFlightServerErrorHandler is specified', () => { - it('warns', () => { - // precondition - FlightQuery - const snapshot = environment.lookup(queryOperation.fragment); - const callback = jest.fn<[Snapshot], void>(); - environment.subscribe(snapshot, callback); - // $FlowFixMe[incompatible-use] readRoot() to verify that it updated - expect(snapshot.data.node.flightComponent.readRoot()).toEqual([ - {key: null, props: {foo: 1}, ref: null, type: 'div'}, - ]); - - // precondition - InnerQuery - const innerSnapshot = environment.lookup( - innerQueryOperation.fragment, - ); - const innerCallback = jest.fn<[Snapshot], void>(); - environment.subscribe(innerSnapshot, innerCallback); - expect(innerSnapshot.data).toEqual({node: {name: 'Lauren'}}); - - environment.executeMutation({operation}).subscribe(callbacks); - callback.mockClear(); - expectToWarn( - `RelayResponseNormalizer: Received server errors for field \`flightComponent\`. - -Something threw an error on the server -Error - at :1:1`, - () => { - subject.next({ - data: { - storyUpdate: { - story: { - id: storyID, - body: { - text: 'Hello world!', - }, - __typename: 'Story', - flightComponent: { - status: 'FAIL_JS_ERROR', - tree: [], - queries: [], - errors: [ - { - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }, - ], - fragments: [], - }, - }, - }, - }, - }); - }, - ); - subject.complete(); - - expect(complete).toBeCalled(); - expect(error).not.toBeCalled(); - expect(callback).toHaveBeenCalledTimes(1); - }); - }); - }); - - describe('when the row protocol is malformed', () => { - it('warns when the row protocol is null', () => { - // precondition - FlightQuery - const snapshot = environment.lookup(queryOperation.fragment); - const callback = jest.fn<[Snapshot], void>(); - environment.subscribe(snapshot, callback); - // $FlowFixMe[incompatible-use] readRoot() to verify that it updated - expect(snapshot.data.node.flightComponent.readRoot()).toEqual([ - {key: null, props: {foo: 1}, ref: null, type: 'div'}, - ]); - - // precondition - InnerQuery - const innerSnapshot = environment.lookup( - innerQueryOperation.fragment, - ); - const innerCallback = jest.fn<[Snapshot], void>(); - environment.subscribe(innerSnapshot, innerCallback); - expect(innerSnapshot.data).toEqual({node: {name: 'Lauren'}}); - - environment.executeMutation({operation}).subscribe(callbacks); - callback.mockClear(); - expectToWarn( - 'RelayResponseNormalizer: Expected `tree` not to be null. This typically indicates that a fatal server error prevented any Server Component rows from being written.', - () => { - subject.next({ - data: { - storyUpdate: { - story: { - id: storyID, - body: { - text: 'Hello world!', - }, - __typename: 'Story', - flightComponent: { - status: 'UNEXPECTED_ERROR', - tree: null, - queries: [], - errors: [], - fragments: [], - }, - }, - }, - }, - }); - }, - ); - subject.complete(); - - expect(complete).toBeCalled(); - expect(error).not.toBeCalled(); - expect(innerCallback).toHaveBeenCalledTimes(0); - expect(callback).toHaveBeenCalledTimes(1); - expect(callback.mock.calls[0][0].data).toEqual({ - node: {flightComponent: null}, - }); - expect(callback.mock.calls[0][0].isMissingData).toEqual(false); - - // Server Component is read out as null - const latestSnapshot = environment.lookup(queryOperation.fragment); - expect(latestSnapshot.isMissingData).toEqual(false); - expect(latestSnapshot.data).toEqual({ - node: { - flightComponent: null, - }, - }); - }); - }); - }); - }, -); diff --git a/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithFlight-test.js b/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithFlight-test.js deleted file mode 100644 index feb0aa10b0e71..0000000000000 --- a/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithFlight-test.js +++ /dev/null @@ -1,776 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - * @oncall relay - */ - -'use strict'; -import type { - ReactFlightServerError, - ReactFlightServerTree, -} from '../../network/RelayNetworkTypes'; -import type {GraphQLResponse} from '../../network/RelayNetworkTypes'; -import type {RequestParameters} from 'relay-runtime/util/RelayConcreteNode'; -import type { - CacheConfig, - Variables, -} from 'relay-runtime/util/RelayRuntimeTypes'; - -const { - MultiActorEnvironment, - getActorIdentifier, -} = require('../../multi-actor-environment'); -const RelayNetwork = require('../../network/RelayNetwork'); -const RelayObservable = require('../../network/RelayObservable'); -const {graphql} = require('../../query/GraphQLTag'); -const RelayModernEnvironment = require('../RelayModernEnvironment'); -const { - createOperationDescriptor, -} = require('../RelayModernOperationDescriptor'); -const RelayModernStore = require('../RelayModernStore'); -const RelayRecordSource = require('../RelayRecordSource'); -const {RelayFeatureFlags} = require('relay-runtime'); -const {disallowWarnings, expectToWarn} = require('relay-test-utils-internal'); - -disallowWarnings(); - -describe.each(['RelayModernEnvironment', 'MultiActorEnvironment'])( - 'execute() with Flight field', - environmentType => { - let callbacks; - let complete; - let dataSource; - let environment; - let error; - let fetch; - let FlightQuery; - let innerOperation; - let InnerQuery; - let next; - let operation; - let operationLoader; - let reactFlightPayloadDeserializer; - let source; - let store; - - describe(environmentType, () => { - beforeEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = true; - - FlightQuery = graphql` - query RelayModernEnvironmentExecuteWithFlightTestFlightQuery( - $id: ID! - $count: Int! - ) { - node(id: $id) { - ... on Story { - flightComponent(condition: true, count: $count, id: $id) - } - } - } - `; - - InnerQuery = graphql` - query RelayModernEnvironmentExecuteWithFlightTestInnerQuery( - $id: ID! - ) { - node(id: $id) { - ... on User { - name - } - } - } - `; - - reactFlightPayloadDeserializer = jest.fn( - (payload: ReactFlightServerTree) => { - return { - readRoot() { - return payload; - }, - }; - }, - ); - complete = jest.fn<[], mixed>(); - error = jest.fn<[Error], mixed>(); - next = jest.fn<[GraphQLResponse], mixed>(); - callbacks = {complete, error, next}; - fetch = ( - _query: RequestParameters, - _variables: Variables, - _cacheConfig: CacheConfig, - ) => { - return RelayObservable.create<$FlowFixMe>(sink => { - dataSource = sink; - }); - }; - operationLoader = { - load: jest.fn(() => Promise.resolve(InnerQuery)), - get: jest.fn(() => InnerQuery), - }; - source = RelayRecordSource.create(); - // DataChecker receives its operationLoader from the store, not the - // environment. So we have to pass it here as well. - store = new RelayModernStore(source, { - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - gcReleaseBufferSize: 0, - }); - const multiActorEnvironment = new MultiActorEnvironment({ - createNetworkForActor: _actorID => RelayNetwork.create(fetch), - createStoreForActor: _actorID => store, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - reactFlightPayloadDeserializer, - }); - environment = - environmentType === 'MultiActorEnvironment' - ? multiActorEnvironment.forActor(getActorIdentifier('actor:1234')) - : new RelayModernEnvironment({ - network: RelayNetwork.create(fetch), - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - store, - reactFlightPayloadDeserializer, - }); - - operation = createOperationDescriptor(FlightQuery, { - count: 10, - id: '1', - }); - innerOperation = createOperationDescriptor(InnerQuery, {id: '2'}); - }); - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - it('loads the Flight field and normalizes/publishes the field payload', () => { - environment.retain(operation); - environment.execute({operation}).subscribe(callbacks); - const payload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - node: { - id: '2', - name: 'Lauren', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '2', - }, - }, - ], - errors: [], - fragments: [], - }, - }, - }, - }; - dataSource.next(payload); - jest.runAllTimers(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(0); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(1); - - store.scheduleGC(); - jest.runAllTimers(); - - expect(environment.lookup(innerOperation.fragment).data).toEqual({ - node: { - name: 'Lauren', - }, - }); - expect( - environment - .lookup(operation.fragment) - // $FlowFixMe[incompatible-use] readRoot() to verify that it updated - .data.node.flightComponent.readRoot(), - ).toEqual([{key: null, props: {foo: 1}, ref: null, type: 'div'}]); - }); - - it('updates the Flight field on refetch', () => { - environment.retain(operation); - environment.execute({operation}).subscribe(callbacks); - const initialPayload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - node: { - id: '2', - name: 'Lauren', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '2', - }, - }, - ], - errors: [], - fragments: [], - }, - }, - }, - }; - const nextPayload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 2, bar: 'abc', baz: [1, 2, 3]}, // updated - }, - ], - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - node: { - id: '2', - name: 'Lauren', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '2', - }, - }, - ], - errors: [], - fragments: [], - }, - }, - }, - }; - dataSource.next(initialPayload); - jest.runAllTimers(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(0); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(1); - - store.scheduleGC(); // Invoke gc to verify that data is retained - jest.runAllTimers(); - - expect(environment.lookup(innerOperation.fragment).data).toEqual({ - node: { - name: 'Lauren', - }, - }); - - dataSource.next(nextPayload); - jest.runAllTimers(); - - expect(next).toBeCalledTimes(2); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(0); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(2); - expect( - environment - .lookup(operation.fragment) - // $FlowFixMe[incompatible-use] readRoot() to verify that it updated - .data.node.flightComponent.readRoot(), - ).toEqual([ - { - key: null, - props: {foo: 2, bar: 'abc', baz: [1, 2, 3]}, - ref: null, - type: 'div', - }, - ]); - }); - - describe('when server errors are encountered', () => { - describe('and ReactFlightServerErrorHandler is specified', () => { - let reactFlightServerErrorHandler; - beforeEach(() => { - reactFlightServerErrorHandler = jest.fn( - (status: string, errors: Array) => { - const err = new Error(`${status}: ${errors[0].message}`); - err.stack = errors[0].stack; - throw err; - }, - ); - const multiActorEnvironment = new MultiActorEnvironment({ - createNetworkForActor: _actorID => RelayNetwork.create(fetch), - createStoreForActor: _actorID => store, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - reactFlightPayloadDeserializer, - reactFlightServerErrorHandler, - }); - environment = - environmentType === 'MultiActorEnvironment' - ? multiActorEnvironment.forActor( - getActorIdentifier('actor:1234'), - ) - : new RelayModernEnvironment({ - network: RelayNetwork.create(fetch), - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - store, - reactFlightPayloadDeserializer, - reactFlightServerErrorHandler, - }); - }); - - it('calls ReactFlightServerErrorHandler', () => { - environment.execute({operation}).subscribe(callbacks); - const payload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'FAIL_JS_ERROR', - tree: [], - queries: [], - errors: [ - { - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }, - ], - fragments: [], - }, - }, - }, - }; - dataSource.next(payload); - jest.runAllTimers(); - - expect(next).toBeCalledTimes(0); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(1); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(0); - expect(reactFlightServerErrorHandler).toHaveBeenCalledWith( - 'FAIL_JS_ERROR', - expect.arrayContaining([ - expect.objectContaining({ - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }), - ]), - ); - }); - }); - - describe('no ReactFlightServerErrorHandler is specified', () => { - it('warns', () => { - environment.execute({operation}).subscribe(callbacks); - const payload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'FAIL_JS_ERROR', - tree: [], - queries: [], - errors: [ - { - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }, - ], - fragments: [], - }, - }, - }, - }; - expectToWarn( - `RelayResponseNormalizer: Received server errors for field \`flightComponent\`. - -Something threw an error on the server -Error - at :1:1`, - () => { - dataSource.next(payload); - }, - ); - jest.runAllTimers(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(0); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(1); - }); - }); - }); - - describe('when checking availability', () => { - it('returns available if all data exists in the environment', () => { - environment.execute({operation}).subscribe(callbacks); - const payload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - node: { - id: '2', - name: 'Lauren', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '2', - }, - }, - ], - errors: [], - fragments: [], - }, - }, - }, - }; - dataSource.next(payload); - jest.runAllTimers(); - - expect(environment.check(operation)).toEqual({ - status: 'available', - fetchTime: null, - }); - expect(environment.check(innerOperation)).toEqual({ - status: 'available', - fetchTime: null, - }); - }); - - it('returns missing if `tree` is null in the payload', () => { - environment.execute({operation}).subscribe(callbacks); - const payload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: null, - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - node: { - id: '2', - name: 'Lauren', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '2', - }, - }, - ], - errors: [], - fragments: [], - }, - }, - }, - }; - - expectToWarn( - 'RelayResponseNormalizer: Expected `tree` not to be null. This typically indicates that a fatal server error prevented any Server Component rows from being written.', - () => { - dataSource.next(payload); - }, - ); - jest.runAllTimers(); - - expect(environment.check(operation)).toEqual({ - status: 'missing', - }); - expect(environment.check(innerOperation)).toEqual({ - status: 'missing', - }); - }); - - it('returns missing if `queries` is null in the payload', () => { - environment.execute({operation}).subscribe(callbacks); - const payload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: null, - errors: [], - fragments: [], - }, - }, - }, - }; - dataSource.next(payload); - jest.runAllTimers(); - - expect(environment.check(operation)).toEqual({ - status: 'missing', - }); - expect(environment.check(innerOperation)).toEqual({ - status: 'missing', - }); - }); - - it('returns missing if the inner query is missing data', () => { - environment.execute({operation}).subscribe(callbacks); - const payload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - node: { - id: '2', - // name: 'Lauren', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '3', - }, - }, - ], - errors: [], - fragments: [], - }, - }, - }, - }; - expectToWarn( - 'RelayResponseNormalizer: Payload did not contain a value for field `name: name`. Check that you are parsing with the same query that was used to fetch the payload.', - () => { - dataSource.next(payload); - }, - ); - jest.runAllTimers(); - - expect(environment.check(operation)).toEqual({ - status: 'missing', - }); - expect(environment.check(innerOperation)).toEqual({ - status: 'missing', - }); - }); - - it('returns missing if the response is undefined', () => { - environment.execute({operation}).subscribe(callbacks); - const payload = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: undefined, - }, - }, - }; - dataSource.next(payload); - jest.runAllTimers(); - - expect(next).toBeCalledTimes(0); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(1); - expect(error).toHaveBeenLastCalledWith( - expect.objectContaining({ - message: expect.stringMatching( - /Payload did not contain a value for field/, - ), - }), - ); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(0); - - const snapshot = environment.lookup(operation.fragment); - expect(snapshot.data).toMatchInlineSnapshot(` - Object { - "node": undefined, - } - `); - expect(snapshot.isMissingData).toEqual(true); - expect(environment.check(operation)).toEqual({ - status: 'missing', - }); - }); - - it('returns available if the response is null', () => { - environment.execute({operation}).subscribe(callbacks); - const payload = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: null, - }, - }, - }; - dataSource.next(payload); - jest.runAllTimers(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(0); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(0); - - const snapshot = environment.lookup(operation.fragment); - expect(snapshot.data).toMatchInlineSnapshot(` - Object { - "node": Object { - "flightComponent": null, - }, - } - `); - expect(snapshot.isMissingData).toEqual(false); - expect(environment.check(operation)).toEqual({ - status: 'available', - fetchTime: null, - }); - }); - }); - - describe('when the response is malformed', () => { - it('warns if the row protocol is null', () => { - environment.execute({operation}).subscribe(callbacks); - const payload: $FlowFixMe = { - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'UNEXPECTED_ERROR', - tree: null, - queries: [], - errors: [], - fragments: [], - }, - }, - }, - }; - expectToWarn( - 'RelayResponseNormalizer: Expected `tree` not to be null. This typically indicates that a fatal server error prevented any Server Component rows from being written.', - () => { - dataSource.next(payload); - }, - ); - jest.runAllTimers(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(0); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(0); - - // Server Component is read out as null - const snapshot = environment.lookup(operation.fragment); - expect(snapshot.isMissingData).toEqual(false); - expect(snapshot.data).toEqual({ - node: { - flightComponent: null, - }, - }); - }); - }); - }); - }, -); diff --git a/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithFlightAndClientFragment-test.js b/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithFlightAndClientFragment-test.js deleted file mode 100644 index f5c4604030a39..0000000000000 --- a/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithFlightAndClientFragment-test.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - * @oncall relay - */ - -'use strict'; -import type {GraphQLResponse} from '../../network/RelayNetworkTypes'; -import type {NormalizationRootNode} from '../../util/NormalizationNode'; -import type {RequestParameters} from 'relay-runtime/util/RelayConcreteNode'; -import type { - CacheConfig, - Variables, -} from 'relay-runtime/util/RelayRuntimeTypes'; - -const { - MultiActorEnvironment, - getActorIdentifier, -} = require('../../multi-actor-environment'); -const RelayNetwork = require('../../network/RelayNetwork'); -const RelayObservable = require('../../network/RelayObservable'); -const {graphql} = require('../../query/GraphQLTag'); -const RelayModernEnvironment = require('../RelayModernEnvironment'); -const { - createOperationDescriptor, -} = require('../RelayModernOperationDescriptor'); -const {getSingularSelector} = require('../RelayModernSelector'); -const RelayModernStore = require('../RelayModernStore'); -const RelayRecordSource = require('../RelayRecordSource'); -const nullthrows = require('nullthrows'); -const {RelayFeatureFlags} = require('relay-runtime'); -const {disallowWarnings} = require('relay-test-utils-internal'); - -disallowWarnings(); - -describe.each(['RelayModernEnvironment', 'MultiActorEnvironment'])( - 'execute() with Flight field and client fragment', - environmentType => { - let callbacks; - let ClientFragment; - let ClientNormalizationFragment; - let complete; - let dataSource; - let environment; - let error; - let fetch; - let FlightQuery; - let next; - let operation; - let operationLoader; - let reactFlightPayloadDeserializer; - let resolveFragment; - let source; - let store; - - describe(environmentType, () => { - beforeEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = true; - - FlightQuery = graphql` - query RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery( - $id: ID! - $count: Int! - ) { - node(id: $id) { - ... on Story { - flightComponent(condition: true, count: $count, id: $id) - } - } - } - `; - - ClientNormalizationFragment = require('./__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql'); - ClientFragment = graphql` - fragment RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment on Story { - name - body { - text - } - } - `; - // Query that indirectly executed as a result of selecting the - // `flightComponent` field. - graphql` - query RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery( - $id: ID! - ) { - node(id: $id) { - ...RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment - @relay_client_component - } - } - `; - - // $FlowFixMe[missing-local-annot] error found when enabling Flow LTI mode - reactFlightPayloadDeserializer = jest.fn(payload => { - return { - readRoot() { - return payload; - }, - }; - }); - complete = jest.fn<[], mixed>(); - error = jest.fn<[Error], mixed>(); - next = jest.fn<[GraphQLResponse], mixed>(); - callbacks = {complete, error, next}; - fetch = ( - _query: RequestParameters, - _variables: Variables, - _cacheConfig: CacheConfig, - ) => { - // $FlowFixMe[missing-local-annot] Error found while enabling LTI on this file - return RelayObservable.create(sink => { - dataSource = sink; - }); - }; - operationLoader = { - // $FlowFixMe[missing-local-annot] error found when enabling Flow LTI mode - load: jest.fn(moduleName => { - return new Promise(resolve => { - resolveFragment = resolve; - }); - }), - get: jest.fn<[mixed], ?NormalizationRootNode>(), - }; - source = RelayRecordSource.create(); - // DataChecker receives its operationLoader from the store, not the - // environment. So we have to pass it here as well. - store = new RelayModernStore(source, { - // $FlowFixMe[incompatible-call] error found when enabling Flow LTI mode - operationLoader, - gcReleaseBufferSize: 0, - }); - const multiActorEnvironment = new MultiActorEnvironment({ - createNetworkForActor: _actorID => RelayNetwork.create(fetch), - createStoreForActor: _actorID => store, - // $FlowFixMe[incompatible-call] error found when enabling Flow LTI mode - operationLoader, - reactFlightPayloadDeserializer, - }); - environment = - environmentType === 'MultiActorEnvironment' - ? multiActorEnvironment.forActor(getActorIdentifier('actor:1234')) - : new RelayModernEnvironment({ - network: RelayNetwork.create(fetch), - // $FlowFixMe[incompatible-call] error found when enabling Flow LTI mode - operationLoader, - store, - reactFlightPayloadDeserializer, - }); - operation = createOperationDescriptor(FlightQuery, { - count: 10, - id: '1', - }); - }); - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - it('loads the Flight field and normalizes/publishes the field payload', () => { - environment.execute({operation}).subscribe(callbacks); - dataSource.next({ - data: { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: [], - errors: [], - fragments: [ - { - module: { - __dr: 'RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql', - }, - __id: '3', - __typename: 'Story', - response: { - data: { - id: '3', - __typename: 'Story', - name: 'React Server Components: The Musical', - body: { - text: 'Presenting a new musical from the director of Cats (2019)!', - }, - }, - }, - variables: { - id: '3', - }, - }, - ], - }, - }, - }, - extensions: { - is_final: true, - }, - }); - dataSource.complete(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(0); - expect(error).toBeCalledTimes(0); - expect(reactFlightPayloadDeserializer).toBeCalledTimes(1); - - const querySnapshot = environment.lookup(operation.fragment); - expect( - // $FlowFixMe[incompatible-use] readRoot() to verify that it updated - querySnapshot.data.node?.flightComponent.readRoot(), - ).toEqual([{key: null, props: {foo: 1}, ref: null, type: 'div'}]); - - // This is the fragment ref we expect to be sent via the Server - // Component as a prop to the Client Component - const fragmentRef = { - __id: '3', - __fragments: {[ClientFragment.name]: {}}, - __fragmentOwner: operation.request, - }; - const selector = nullthrows( - getSingularSelector(ClientFragment, fragmentRef), - ); - const initialFragmentSnapshot = environment.lookup(selector); - // Expect isMissingData initially as we have yet to receive the fragment's - // SplitNormalization AST - expect(initialFragmentSnapshot.isMissingData).toBe(true); - - resolveFragment(ClientNormalizationFragment); - jest.runAllTimers(); - - const fragmentSnapshot = environment.lookup(selector); - expect(fragmentSnapshot.isMissingData).toBe(false); - expect(fragmentSnapshot.data).toEqual({ - name: 'React Server Components: The Musical', - body: { - text: 'Presenting a new musical from the director of Cats (2019)!', - }, - }); - }); - }); - }, -); diff --git a/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithRelayClientComponent-test.js b/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithRelayClientComponent-test.js deleted file mode 100644 index d567178869f14..0000000000000 --- a/packages/relay-runtime/store/__tests__/RelayModernEnvironment-ExecuteWithRelayClientComponent-test.js +++ /dev/null @@ -1,334 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - * @oncall relay - */ - -'use strict'; -import type {GraphQLResponse} from '../../network/RelayNetworkTypes'; -import type {NormalizationRootNode} from '../../util/NormalizationNode'; -import type {RequestParameters} from 'relay-runtime/util/RelayConcreteNode'; -import type { - CacheConfig, - Variables, -} from 'relay-runtime/util/RelayRuntimeTypes'; - -const RelayNetwork = require('../../network/RelayNetwork'); -const RelayObservable = require('../../network/RelayObservable'); -const {graphql} = require('../../query/GraphQLTag'); -const RelayModernEnvironment = require('../RelayModernEnvironment'); -const { - createOperationDescriptor, -} = require('../RelayModernOperationDescriptor'); -const {getSingularSelector} = require('../RelayModernSelector'); -const RelayModernStore = require('../RelayModernStore'); -const RelayRecordSource = require('../RelayRecordSource'); -const nullthrows = require('nullthrows'); -const {RelayFeatureFlags} = require('relay-runtime'); -const { - disallowWarnings, - expectWarningWillFire, -} = require('relay-test-utils-internal'); - -disallowWarnings(); - -describe('execute() with @relay_client_component', () => { - let callbacks; - let ClientFragment; - let complete; - let dataSource; - let environment; - let error; - let fetch; - let network; - let next; - let operation; - let operationLoader; - let Query; - let shouldProcessClientComponents; - let source; - let store; - - beforeEach(() => { - ClientFragment = graphql` - fragment RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment on Story { - name - body { - text - } - } - `; - Query = graphql` - query RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery( - $id: ID! - ) { - node(id: $id) { - ...RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment - @relay_client_component - } - } - `; - - complete = jest.fn<[], mixed>(); - error = jest.fn<[Error], mixed>(); - next = jest.fn<[GraphQLResponse], mixed>(); - callbacks = {complete, error, next}; - fetch = ( - _query: RequestParameters, - _variables: Variables, - _cacheConfig: CacheConfig, - ) => { - // $FlowFixMe[missing-local-annot] Error found while enabling LTI on this file - return RelayObservable.create(sink => { - dataSource = sink; - }); - }; - network = RelayNetwork.create(fetch); - source = RelayRecordSource.create(); - operationLoader = { - load: jest.fn<[mixed], Promise>(), - get: jest.fn<[mixed], ?NormalizationRootNode>(), - }; - operation = createOperationDescriptor(Query, {id: '1'}); - }); - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - describe('when the query contains @relay_client_component spreads', () => { - describe('and client component processing is enabled', () => { - beforeEach(() => { - shouldProcessClientComponents = true; - store = new RelayModernStore(source, { - operationLoader, - shouldProcessClientComponents, - gcReleaseBufferSize: 0, - }); - environment = new RelayModernEnvironment({ - network, - operationLoader, - store, - shouldProcessClientComponents, - }); - }); - it('executes and reads back results', () => { - environment.execute({operation}).subscribe(callbacks); - dataSource.next({ - data: { - node: { - id: '1', - __typename: 'Story', - name: 'React Server Components: The Musical', - body: { - text: 'Presenting a new musical from the director of Cats (2019)!', - }, - }, - }, - extensions: { - is_final: true, - }, - }); - dataSource.complete(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(1); - expect(error).toBeCalledTimes(0); - - const querySnapshot = environment.lookup(operation.fragment); - expect(querySnapshot.data).toEqual({ - node: { - __id: '1', - __fragments: { - [ClientFragment.name]: expect.anything(), - }, - __fragmentOwner: operation.request, - __isWithinUnmatchedTypeRefinement: false, - }, - }); - - // fragment data is present - const selector = nullthrows( - getSingularSelector( - ClientFragment, - (querySnapshot.data?.node: $FlowFixMe), - ), - ); - const snapshot = environment.lookup(selector); - expect(snapshot.data).toEqual({ - name: 'React Server Components: The Musical', - body: { - text: 'Presenting a new musical from the director of Cats (2019)!', - }, - }); - expect(snapshot.isMissingData).toBe(false); - - // available before a GC - expect(environment.check(operation)).toEqual({ - fetchTime: null, - status: 'available', - }); - - // available after GC if the query is retained - const retain = environment.retain(operation); - (environment.getStore(): $FlowFixMe).scheduleGC(); - jest.runAllTimers(); - expect(environment.check(operation)).toEqual({ - fetchTime: null, - status: 'available', - }); - - // missing after being freed plus a GC run - retain.dispose(); - (environment.getStore(): $FlowFixMe).scheduleGC(); - jest.runAllTimers(); - expect(environment.check(operation)).toEqual({ - status: 'missing', - }); - }); - - it('handles missing fragment data', () => { - environment.execute({operation}).subscribe(callbacks); - expectWarningWillFire( - 'RelayResponseNormalizer: Payload did not contain a value for field `name: name`. Check that you are parsing with the same query that was used to fetch the payload.', - ); - expectWarningWillFire( - 'RelayResponseNormalizer: Payload did not contain a value for field `body: body`. Check that you are parsing with the same query that was used to fetch the payload.', - ); - dataSource.next({ - data: { - node: { - id: '1', - __typename: 'Story', - }, - }, - extensions: { - is_final: true, - }, - }); - dataSource.complete(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(1); - expect(error).toBeCalledTimes(0); - - const querySnapshot = environment.lookup(operation.fragment); - expect(querySnapshot.data).toEqual({ - node: { - __id: '1', - __fragments: { - [ClientFragment.name]: expect.anything(), - }, - __fragmentOwner: operation.request, - __isWithinUnmatchedTypeRefinement: false, - }, - }); - - // fragment data is missing - const selector = nullthrows( - getSingularSelector( - ClientFragment, - (querySnapshot.data?.node: $FlowFixMe), - ), - ); - const snapshot = environment.lookup(selector); - expect(snapshot.data).toEqual({ - name: undefined, - body: undefined, - }); - expect(snapshot.isMissingData).toBe(true); - expect(environment.check(operation)).toEqual({ - status: 'missing', - }); - }); - }); - - describe('and client component processing is disabled', () => { - beforeEach(() => { - shouldProcessClientComponents = false; - store = new RelayModernStore(source, { - operationLoader, - shouldProcessClientComponents, - gcReleaseBufferSize: 0, - }); - environment = new RelayModernEnvironment({ - network, - operationLoader, - store, - shouldProcessClientComponents, - }); - }); - it('executes and reads back results', () => { - environment.execute({operation}).subscribe(callbacks); - dataSource.next({ - data: { - node: { - id: '1', - __typename: 'Story', - }, - }, - }); - dataSource.complete(); - - expect(next).toBeCalledTimes(1); - expect(complete).toBeCalledTimes(1); - expect(error).toBeCalledTimes(0); - - const querySnapshot = environment.lookup(operation.fragment); - expect(querySnapshot.data).toEqual({ - node: { - __id: '1', - __fragments: { - [ClientFragment.name]: expect.anything(), - }, - __fragmentOwner: operation.request, - __isWithinUnmatchedTypeRefinement: false, - }, - }); - - // fragment data is not present - const selector = nullthrows( - getSingularSelector( - ClientFragment, - (querySnapshot.data?.node: $FlowFixMe), - ), - ); - const snapshot = environment.lookup(selector); - expect(snapshot.data).toEqual({ - body: undefined, - name: undefined, - }); - expect(snapshot.isMissingData).toBe(true); - - // fragment data is missing (intentionally), because this is a server - // query, and we never need client fragment data. the operation should - // still be considered available before a GC - expect(environment.check(operation)).toEqual({ - fetchTime: null, - status: 'available', - }); - - // available after GC if the query is retained - const retain = environment.retain(operation); - (environment.getStore(): $FlowFixMe).scheduleGC(); - jest.runAllTimers(); - expect(environment.check(operation)).toEqual({ - fetchTime: null, - status: 'available', - }); - - // missing after being freed plus a GC run - retain.dispose(); - (environment.getStore(): $FlowFixMe).scheduleGC(); - jest.runAllTimers(); - expect(environment.check(operation)).toEqual({ - status: 'missing', - }); - }); - }); - }); -}); diff --git a/packages/relay-runtime/store/__tests__/RelayReader-test.js b/packages/relay-runtime/store/__tests__/RelayReader-test.js index 0741555302792..11002314aef7d 100644 --- a/packages/relay-runtime/store/__tests__/RelayReader-test.js +++ b/packages/relay-runtime/store/__tests__/RelayReader-test.js @@ -11,7 +11,6 @@ 'use strict'; const {getRequest, graphql} = require('../../query/GraphQLTag'); -const RelayFeatureFlags = require('../../util/RelayFeatureFlags'); const { createOperationDescriptor, } = require('../RelayModernOperationDescriptor'); @@ -1756,236 +1755,6 @@ describe('RelayReader', () => { ]); }); - describe('feature ENABLE_REACT_FLIGHT_COMPONENT_FIELD', () => { - let FlightQuery; - - beforeEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = true; - - FlightQuery = graphql` - query RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery( - $id: ID! - $count: Int! - ) { - node(id: $id) { - ... on Story { - flightComponent(condition: true, count: $count, id: $id) - } - } - } - `; - }); - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - it('should read data correctly when the ReactFlightClientResponse is valid and present in the store ', () => { - const records = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __id: 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - __typename: 'ReactFlightComponent', - executableDefinitions: [ - { - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - variables: { - id: '2', - }, - }, - ], - tree: { - readRoot() { - return { - $$typeof: Symbol.for('react.element'), - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }; - }, - }, - }, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const operation = createOperationDescriptor(FlightQuery, { - count: 10, - id: '1', - }); - source = RelayRecordSource.create(records); - const {data, isMissingData, seenRecords} = read( - source, - operation.fragment, - ); - expect(isMissingData).toBe(false); - expect(data).toMatchInlineSnapshot(` - Object { - "node": Object { - "flightComponent": Object { - "readRoot": [Function], - }, - }, - } - `); - expect(Array.from(seenRecords.values()).sort()).toEqual([ - '1', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - - it('should read data correctly when ReactFlightClientResponse is null in the store', () => { - const records = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - null, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const operation = createOperationDescriptor(FlightQuery, { - count: 10, - id: '1', - }); - source = RelayRecordSource.create(records); - const {data, isMissingData, seenRecords} = read( - source, - operation.fragment, - ); - expect(isMissingData).toBe(false); - expect(data).toMatchInlineSnapshot(` - Object { - "node": Object { - "flightComponent": null, - }, - } - `); - expect(Array.from(seenRecords.values()).sort()).toEqual([ - '1', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - - it('should be missing data when ReactFlightClientResponse is undefined in the store', () => { - const records = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - undefined, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const operation = createOperationDescriptor(FlightQuery, { - count: 10, - id: '1', - }); - source = RelayRecordSource.create(records); - const {data, isMissingData, seenRecords} = read( - source, - operation.fragment, - ); - expect(isMissingData).toBe(true); - expect(data).toMatchInlineSnapshot(` - Object { - "node": Object { - "flightComponent": undefined, - }, - } - `); - expect(Array.from(seenRecords.values()).sort()).toEqual([ - '1', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - - it('should be missing data when the linked ReactFlightClientResponseRecord is missing', () => { - const records = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const operation = createOperationDescriptor(FlightQuery, { - count: 10, - id: '1', - }); - source = RelayRecordSource.create(records); - const {data, isMissingData, seenRecords} = read( - source, - operation.fragment, - ); - expect(isMissingData).toBe(true); - expect(data).toMatchInlineSnapshot(` - Object { - "node": Object { - "flightComponent": undefined, - }, - } - `); - expect(Array.from(seenRecords.values()).sort()).toEqual([ - '1', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - }); - describe('Actor Change', () => { const query = graphql` query RelayReaderTestActorChangeQuery { diff --git a/packages/relay-runtime/store/__tests__/RelayReferenceMarker-test.js b/packages/relay-runtime/store/__tests__/RelayReferenceMarker-test.js index 29c1cb794250f..44c3ba09e8f25 100644 --- a/packages/relay-runtime/store/__tests__/RelayReferenceMarker-test.js +++ b/packages/relay-runtime/store/__tests__/RelayReferenceMarker-test.js @@ -1559,282 +1559,4 @@ describe('RelayReferenceMarker', () => { expect(Array.from(references).sort()).toEqual(['1', 'client:root']); }); }); - - describe('with feature ENABLE_REACT_FLIGHT_COMPONENT_FIELD', () => { - let FlightQuery; - let InnerQuery; - let operationLoader; - - const readRoot = () => { - return { - $$typeof: Symbol.for('react.element'), - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }; - }; - - beforeEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = true; - - FlightQuery = graphql` - query RelayReferenceMarkerTestFlightQuery($id: ID!, $count: Int!) { - node(id: $id) { - ... on Story { - flightComponent(condition: true, count: $count, id: $id) - } - } - } - `; - InnerQuery = graphql` - query RelayReferenceMarkerTestInnerQuery($id: ID!) { - node(id: $id) { - ... on User { - name - } - } - } - `; - operationLoader = { - get: jest.fn(() => InnerQuery), - load: jest.fn(() => Promise.resolve(InnerQuery)), - }; - }); - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - it('marks references when Flight fields are fetched', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - '2': { - __id: '2', - __typename: 'User', - id: '2', - name: 'Lauren', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __id: 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - __typename: 'ReactFlightComponent', - executableDefinitions: [ - { - module: { - __dr: 'RelayFlightExampleQuery.graphql', - }, - variables: { - id: '2', - }, - }, - ], - tree: { - readRoot, - }, - }, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - 'node(id:"2")': { - __ref: '2', - }, - }, - }; - const recordSource = RelayRecordSource.create(data); - const references = new Set(); - mark( - recordSource, - createNormalizationSelector(FlightQuery.operation, 'client:root', { - count: 10, - id: '1', - }), - references, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - ); - expect(Array.from(references).sort()).toEqual([ - '1', - '2', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - - it('marks references when the Flight field exists but has not been processed', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __id: 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - __typename: 'ReactFlightComponent', - }, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const recordSource = RelayRecordSource.create(data); - const references = new Set(); - mark( - recordSource, - createNormalizationSelector(FlightQuery.operation, 'client:root', { - count: 10, - id: '1', - }), - references, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - ); - expect(Array.from(references).sort()).toEqual([ - '1', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - - it('marks references when the Flight field is null', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - null, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const recordSource = RelayRecordSource.create(data); - const references = new Set(); - mark( - recordSource, - createNormalizationSelector(FlightQuery.operation, 'client:root', { - count: 10, - id: '1', - }), - references, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - ); - expect(Array.from(references).sort()).toEqual([ - '1', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - - it('marks references when the Flight field is undefined', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - undefined, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const recordSource = RelayRecordSource.create(data); - const references = new Set(); - mark( - recordSource, - createNormalizationSelector(FlightQuery.operation, 'client:root', { - count: 10, - id: '1', - }), - references, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - ); - expect(Array.from(references).sort()).toEqual([ - '1', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - - it('marks references when the linked ReactFlightClientResponseRecord is missing', () => { - const data = { - '1': { - __id: '1', - __typename: 'Story', - 'flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})': - { - __ref: - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - }, - id: '1', - }, - 'client:root': { - __id: 'client:root', - __typename: '__Root', - 'node(id:"1")': { - __ref: '1', - }, - }, - }; - const recordSource = RelayRecordSource.create(data); - const references = new Set(); - mark( - recordSource, - createNormalizationSelector(FlightQuery.operation, 'client:root', { - count: 10, - id: '1', - }), - references, - // $FlowFixMe[invalid-tuple-arity] Error found while enabling LTI on this file - operationLoader, - ); - expect(Array.from(references).sort()).toEqual([ - '1', - 'client:1:flight(component:"FlightComponent.server",props:{"condition":true,"count":10,"id":"1"})', - 'client:root', - ]); - }); - }); }); diff --git a/packages/relay-runtime/store/__tests__/RelayResponseNormalizer-test.js b/packages/relay-runtime/store/__tests__/RelayResponseNormalizer-test.js index 208146feea141..de4bbb4d52ac6 100644 --- a/packages/relay-runtime/store/__tests__/RelayResponseNormalizer-test.js +++ b/packages/relay-runtime/store/__tests__/RelayResponseNormalizer-test.js @@ -10,13 +10,11 @@ */ 'use strict'; -import type {ReactFlightServerError} from '../../network/RelayNetworkTypes'; const { getActorIdentifier, } = require('../../multi-actor-environment/ActorIdentifier'); const {graphql} = require('../../query/GraphQLTag'); -const RelayFeatureFlags = require('../../util/RelayFeatureFlags'); const defaultGetDataID = require('../defaultGetDataID'); const { createOperationDescriptor, @@ -3491,564 +3489,6 @@ describe('RelayResponseNormalizer', () => { }); }); - describe('feature ENABLE_REACT_FLIGHT_COMPONENT_FIELD', () => { - let FlightQuery; - let recordSource; - let ServerOrClientQuery; - const dummyReactFlightPayloadDeserializer = () => { - return { - readRoot() { - return { - $$typeof: Symbol.for('react.element'), - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }; - }, - }; - }; - - beforeEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = true; - - FlightQuery = graphql` - query RelayResponseNormalizerTestFlightQuery($id: ID!, $count: Int!) { - node(id: $id) { - ... on Story { - flightComponent(condition: true, count: $count, id: $id) - } - } - } - `; - graphql` - fragment RelayResponseNormalizerTest_clientFragment on Story { - name - body { - text - } - } - `; - ServerOrClientQuery = graphql` - query RelayResponseNormalizerTestServerOrClientQuery($id: ID!) { - node(id: $id) { - ...RelayResponseNormalizerTest_clientFragment - @relay_client_component - } - } - `; - recordSource = new RelayRecordSource(); - recordSource.set(ROOT_ID, RelayModernRecord.create(ROOT_ID, ROOT_TYPE)); - }); - afterEach(() => { - RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD = false; - }); - - describe('when successful', () => { - it('normalizes Flight fields', () => { - const payload: $FlowFixMe = { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [ - { - type: 'div', - key: null, - ref: null, - props: {foo: 1}, - }, - ], - queries: [ - { - id: 'b0dbe24703062b69e6b1d0c38c4f69d2', - module: {__dr: 'RelayFlightExampleQuery.graphql'}, - response: { - data: { - story: { - id: '2', - name: 'Lauren', - __typename: 'User', - }, - }, - extensions: [], - }, - variables: { - id: '2', - }, - }, - ], - errors: [], - fragments: [ - { - module: { - __dr: 'RelayResponseNormalizerTest_clientFragment$normalization.graphql', - }, - __id: '3', - __typename: 'Story', - response: { - data: { - node: { - id: '3', - __typename: 'Story', - name: 'React Server Components: The Musical', - body: { - text: 'Presenting a new musical from the director of Cats (2019)!', - }, - }, - }, - }, - variables: { - id: '3', - }, - }, - ], - }, - }, - }; - normalize( - recordSource, - createNormalizationSelector(FlightQuery.operation, ROOT_ID, { - count: 10, - id: '1', - }), - payload, - { - ...defaultOptions, - reactFlightPayloadDeserializer: dummyReactFlightPayloadDeserializer, - }, - ); - expect(recordSource.toJSON()).toMatchInlineSnapshot(` - Object { - "1": Object { - "__id": "1", - "__typename": "Story", - "flight(component:\\"FlightComponent.server\\",props:{\\"condition\\":true,\\"count\\":10,\\"id\\":\\"1\\"})": Object { - "__ref": "client:1:flight(component:\\"FlightComponent.server\\",props:{\\"condition\\":true,\\"count\\":10,\\"id\\":\\"1\\"})", - }, - "id": "1", - }, - "client:1:flight(component:\\"FlightComponent.server\\",props:{\\"condition\\":true,\\"count\\":10,\\"id\\":\\"1\\"})": Object { - "__id": "client:1:flight(component:\\"FlightComponent.server\\",props:{\\"condition\\":true,\\"count\\":10,\\"id\\":\\"1\\"})", - "__typename": "ReactFlightComponent", - "executableDefinitions": Array [ - Object { - "module": Object { - "__dr": "RelayFlightExampleQuery.graphql", - }, - "variables": Object { - "id": "2", - }, - }, - Object { - "module": Object { - "__dr": "RelayResponseNormalizerTest_clientFragment$normalization.graphql", - }, - "variables": Object { - "id": "3", - }, - }, - ], - "tree": Object { - "readRoot": [Function], - }, - }, - "client:root": Object { - "__id": "client:root", - "__typename": "__Root", - "node(id:\\"1\\")": Object { - "__ref": "1", - }, - }, - } - `); - }); - - it('asserts that reactFlightPayloadDeserializer is defined as a function', () => { - const payload: $FlowFixMe = { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'SUCCESS', - tree: [], - queries: [], - errors: [], - fragments: [], - }, - }, - }; - - expect(() => { - normalize( - recordSource, - createNormalizationSelector(FlightQuery.operation, ROOT_ID, { - count: 10, - id: '1', - }), - payload, - { - ...defaultOptions, - reactFlightPayloadDeserializer: - dummyReactFlightPayloadDeserializer, - }, - ); - }).not.toThrow(); - expect(() => { - normalize( - recordSource, - createNormalizationSelector(FlightQuery.operation, ROOT_ID, { - count: 10, - id: '1', - }), - payload, - defaultOptions, - ); - }).toThrow(); - }); - }); - - describe('when server errors are encountered', () => { - describe('and ReactFlightServerErrorHandler is specified', () => { - const reactFlightServerErrorHandler = jest.fn< - [string, Array], - void, - >(); - it('calls ReactFlightServerErrorHandler', () => { - const payload: $FlowFixMe = { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'FAIL_JS_ERROR', - tree: [], - queries: [], - errors: [ - { - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }, - ], - fragments: [], - }, - }, - }; - normalize( - recordSource, - createNormalizationSelector(FlightQuery.operation, ROOT_ID, { - count: 10, - id: '1', - }), - payload, - { - ...defaultOptions, - reactFlightPayloadDeserializer: - dummyReactFlightPayloadDeserializer, - reactFlightServerErrorHandler, - }, - ); - expect(reactFlightServerErrorHandler).toHaveBeenCalledWith( - 'FAIL_JS_ERROR', - expect.arrayContaining([ - expect.objectContaining({ - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }), - ]), - ); - }); - }); - describe('and no ReactFlightServerErrorHandler is specified', () => { - it('warns', () => { - const payload: $FlowFixMe = { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'FAIL_JS_ERROR', - tree: [], - queries: [], - errors: [ - { - message: 'Something threw an error on the server', - stack: 'Error\n at :1:1', - }, - ], - fragments: [], - }, - }, - }; - expectToWarn( - 'RelayResponseNormalizer: Received server errors for field `flightComponent`.\n\n' + - 'Something threw an error on the server\n' + - 'Error\n at :1:1', - () => { - normalize( - recordSource, - createNormalizationSelector(FlightQuery.operation, ROOT_ID, { - count: 10, - id: '1', - }), - payload, - { - ...defaultOptions, - reactFlightPayloadDeserializer: - dummyReactFlightPayloadDeserializer, - }, - ); - }, - ); - }); - }); - }); - - describe('when the response is malformed', () => { - it('normalizes when the response is null', () => { - const payload = { - node: { - id: '1', - __typename: 'Story', - flightComponent: null, - }, - }; - normalize( - recordSource, - createNormalizationSelector(FlightQuery.operation, ROOT_ID, { - count: 10, - id: '1', - }), - payload, - { - ...defaultOptions, - reactFlightPayloadDeserializer: dummyReactFlightPayloadDeserializer, - }, - ); - expect(recordSource.toJSON()).toMatchInlineSnapshot(` - Object { - "1": Object { - "__id": "1", - "__typename": "Story", - "flight(component:\\"FlightComponent.server\\",props:{\\"condition\\":true,\\"count\\":10,\\"id\\":\\"1\\"})": null, - "id": "1", - }, - "client:root": Object { - "__id": "client:root", - "__typename": "__Root", - "node(id:\\"1\\")": Object { - "__ref": "1", - }, - }, - } - `); - }); - it('throws if the response is undefined', () => { - const payload = { - node: { - id: '1', - __typename: 'Story', - flightComponent: undefined, - }, - }; - expect(() => { - normalize( - recordSource, - createNormalizationSelector(FlightQuery.operation, ROOT_ID, { - count: 10, - id: '1', - }), - payload, - { - ...defaultOptions, - reactFlightPayloadDeserializer: - dummyReactFlightPayloadDeserializer, - }, - ); - }).toThrow(/Payload did not contain a value for field/); - }); - - it('warns if the row protocol is null', () => { - const payload: $FlowFixMe = { - node: { - id: '1', - __typename: 'Story', - flightComponent: { - status: 'UNEXPECTED_ERROR', - tree: null, - queries: [], - errors: [], - fragments: [], - }, - }, - }; - expectToWarn( - 'RelayResponseNormalizer: Expected `tree` not to be null. This typically indicates that a fatal server error prevented any Server Component rows from being written.', - () => { - normalize( - recordSource, - createNormalizationSelector(FlightQuery.operation, ROOT_ID, { - count: 10, - id: '1', - }), - payload, - { - ...defaultOptions, - reactFlightPayloadDeserializer: - dummyReactFlightPayloadDeserializer, - }, - ); - }, - ); - }); - }); - - describe('when the query contains @relay_client_component spreads', () => { - let options; - describe('and client component processing is enabled', () => { - beforeEach(() => { - options = { - ...defaultOptions, - shouldProcessClientComponents: true, - }; - }); - it('normalizes', () => { - const payload = { - node: { - id: '1', - __typename: 'Story', - name: 'React Server Components: The Musical', - body: { - text: 'Presenting a new musical from the director of Cats (2019)!', - }, - }, - }; - normalize( - recordSource, - createNormalizationSelector( - ServerOrClientQuery.operation, - ROOT_ID, - { - id: '1', - }, - ), - payload, - options, - ); - expect(recordSource.toJSON()).toMatchInlineSnapshot(` - Object { - "1": Object { - "__id": "1", - "__typename": "Story", - "body": Object { - "__ref": "client:1:body", - }, - "id": "1", - "name": "React Server Components: The Musical", - }, - "client:1:body": Object { - "__id": "client:1:body", - "__typename": "Text", - "text": "Presenting a new musical from the director of Cats (2019)!", - }, - "client:root": Object { - "__id": "client:root", - "__typename": "__Root", - "node(id:\\"1\\")": Object { - "__ref": "1", - }, - }, - } - `); - }); - }); - - describe('and client component processing is disabled', () => { - beforeEach(() => { - options = { - ...defaultOptions, - shouldProcessClientComponents: false, - }; - }); - it('does not normalize', () => { - const payload = { - node: { - id: '1', - __typename: 'Story', - }, - }; - normalize( - recordSource, - createNormalizationSelector( - ServerOrClientQuery.operation, - ROOT_ID, - { - id: '1', - }, - ), - payload, - options, - ); - expect(recordSource.toJSON()).toMatchInlineSnapshot(` - Object { - "1": Object { - "__id": "1", - "__typename": "Story", - "id": "1", - }, - "client:root": Object { - "__id": "client:root", - "__typename": "__Root", - "node(id:\\"1\\")": Object { - "__ref": "1", - }, - }, - } - `); - }); - - it('does not normalize client fragment data even if present', () => { - const payload = { - node: { - id: '1', - __typename: 'Story', - name: 'React Server Components: The Musical', - body: { - text: 'Presenting a new musical from the director of Cats (2019)!', - }, - }, - }; - normalize( - recordSource, - createNormalizationSelector( - ServerOrClientQuery.operation, - ROOT_ID, - { - id: '1', - }, - ), - payload, - options, - ); - expect(recordSource.toJSON()).toMatchInlineSnapshot(` - Object { - "1": Object { - "__id": "1", - "__typename": "Story", - "id": "1", - }, - "client:root": Object { - "__id": "client:root", - "__typename": "__Root", - "node(id:\\"1\\")": Object { - "__ref": "1", - }, - }, - } - `); - }); - }); - }); - }); describe('"falsy" IDs in payload', () => { let recordSource; const Query = graphql` diff --git a/packages/relay-runtime/store/__tests__/__generated__/DataCheckerTestFlightQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/DataCheckerTestFlightQuery.graphql.js deleted file mode 100644 index 9604c71722b58..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/DataCheckerTestFlightQuery.graphql.js +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type DataCheckerTestFlightQuery$variables = {| - count: number, - id: string, -|}; -export type DataCheckerTestFlightQuery$data = {| - +node: ?{| - +flightComponent?: ?any, - |}, -|}; -export type DataCheckerTestFlightQuery = {| - response: DataCheckerTestFlightQuery$data, - variables: DataCheckerTestFlightQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" -}, -v2 = { - "kind": "Variable", - "name": "id", - "variableName": "id" -}, -v3 = [ - (v2/*: any*/) -], -v4 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": "flightComponent", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - (v2/*: any*/) - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "DataCheckerTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v4/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "DataCheckerTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v4/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "8057911ba030096bf50db84986d9103b", - "id": null, - "metadata": {}, - "name": "DataCheckerTestFlightQuery", - "operationKind": "query", - "text": "query DataCheckerTestFlightQuery(\n $id: ID!\n $count: Int!\n) {\n node(id: $id) {\n __typename\n ... on Story {\n flightComponent: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count, id: $id})\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "5deb0c7fbfc1629f14967d717067775d"; -} - -module.exports = ((node/*: any*/)/*: Query< - DataCheckerTestFlightQuery$variables, - DataCheckerTestFlightQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/DataCheckerTestInnerQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/DataCheckerTestInnerQuery.graphql.js deleted file mode 100644 index e156f304826e4..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/DataCheckerTestInnerQuery.graphql.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<631849a7ba0985c7c0ceb300fa04eb95>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type DataCheckerTestInnerQuery$variables = {| - id: string, -|}; -export type DataCheckerTestInnerQuery$data = {| - +node: ?{| - +name?: ?string, - |}, -|}; -export type DataCheckerTestInnerQuery = {| - response: DataCheckerTestInnerQuery$data, - variables: DataCheckerTestInnerQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } -], -v1 = [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - } - ], - "type": "User", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "DataCheckerTestInnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v2/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "DataCheckerTestInnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "e140c5016c9604edb00067693511c4ba", - "id": null, - "metadata": {}, - "name": "DataCheckerTestInnerQuery", - "operationKind": "query", - "text": "query DataCheckerTestInnerQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ... on User {\n name\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "137eac9e94abaaa5f18959dc2f8cfc23"; -} - -module.exports = ((node/*: any*/)/*: Query< - DataCheckerTestInnerQuery$variables, - DataCheckerTestInnerQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery.graphql.js deleted file mode 100644 index 05fc0fd50c34d..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery.graphql.js +++ /dev/null @@ -1,178 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery$variables = {| - count: number, - id: string, -|}; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery$data = {| - +node: ?{| - +flightComponent?: ?any, - |}, -|}; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery = {| - response: RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery$data, - variables: RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" -}, -v2 = [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } -], -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": "flightComponent", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - { - "kind": "Literal", - "name": "id", - "value": "x" - } - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery", - "selections": [ - { - "alias": null, - "args": (v2/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v3/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery", - "selections": [ - { - "alias": null, - "args": (v2/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v3/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "3b418060ab265ecc5c7746282402c5c2", - "id": null, - "metadata": {}, - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery", - "operationKind": "query", - "text": "query RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery(\n $id: ID!\n $count: Int!\n) {\n node(id: $id) {\n __typename\n ... on Story {\n flightComponent: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count, id: \"x\"})\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "a8576cffa1a503ae3169c301dbe17dc9"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery$variables, - RelayModernEnvironmentExecuteMutationWithFlightTest_FlightQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery.graphql.js deleted file mode 100644 index 6f745188decf1..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery.graphql.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery$variables = {| - id: string, -|}; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery$data = {| - +node: ?{| - +name?: ?string, - |}, -|}; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery = {| - response: RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery$data, - variables: RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } -], -v1 = [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - } - ], - "type": "User", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v2/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "f62b1d65d77831be7e666ea04fbcf8e9", - "id": null, - "metadata": {}, - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery", - "operationKind": "query", - "text": "query RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ... on User {\n name\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "09a947eb9531ea2baf54ad751801b7f8"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery$variables, - RelayModernEnvironmentExecuteMutationWithFlightTest_InnerQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation.graphql.js deleted file mode 100644 index e2361edf6a903..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation.graphql.js +++ /dev/null @@ -1,192 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Mutation } from 'relay-runtime'; -export type StoryUpdateInput = {| - body?: ?InputText, -|}; -export type InputText = {| - ranges?: ?$ReadOnlyArray, - text?: ?string, -|}; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation$variables = {| - count: number, - input: StoryUpdateInput, -|}; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation$data = {| - +storyUpdate: ?{| - +story: ?{| - +body: ?{| - +text: ?string, - |}, - +flightComponent: ?any, - +id: string, - |}, - |}, -|}; -export type RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation = {| - response: RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation$data, - variables: RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" -}, -v2 = [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } - ], - "concreteType": "StoryUpdateResponsePayload", - "kind": "LinkedField", - "name": "storyUpdate", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Story", - "kind": "LinkedField", - "name": "story", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "concreteType": "Text", - "kind": "LinkedField", - "name": "body", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "text", - "storageKey": null - } - ], - "storageKey": null - }, - { - "alias": "flightComponent", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - { - "kind": "Literal", - "name": "id", - "value": "x" - } - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null - } -]; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation", - "selections": (v2/*: any*/), - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation", - "selections": (v2/*: any*/) - }, - "params": { - "cacheID": "bc77fdcb1d93e6598f93a1f482af7052", - "id": null, - "metadata": {}, - "name": "RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation", - "operationKind": "mutation", - "text": "mutation RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation(\n $input: StoryUpdateInput!\n $count: Int!\n) {\n storyUpdate(input: $input) {\n story {\n id\n body {\n text\n }\n flightComponent: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count, id: \"x\"})\n }\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "3f3551ba1af651d056e6777df90ef1d4"; -} - -module.exports = ((node/*: any*/)/*: Mutation< - RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation$variables, - RelayModernEnvironmentExecuteMutationWithFlightTest_UpdateStoryMutation$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery.graphql.js deleted file mode 100644 index 4d8185a24eb00..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery.graphql.js +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery$variables = {| - count: number, - id: string, -|}; -export type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery$data = {| - +node: ?{| - +flightComponent?: ?any, - |}, -|}; -export type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery = {| - response: RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery$data, - variables: RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" -}, -v2 = { - "kind": "Variable", - "name": "id", - "variableName": "id" -}, -v3 = [ - (v2/*: any*/) -], -v4 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": "flightComponent", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - (v2/*: any*/) - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v4/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v4/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "a8934f5931bb2ca91455943e0eba59be", - "id": null, - "metadata": {}, - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery", - "operationKind": "query", - "text": "query RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery(\n $id: ID!\n $count: Int!\n) {\n node(id: $id) {\n __typename\n ... on Story {\n flightComponent: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count, id: $id})\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "af935db133f1abf1a578d02f3bb73db0"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery$variables, - RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestFlightQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery.graphql.js deleted file mode 100644 index 05f2f32ed32c2..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery.graphql.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<87c42af271f7245ab44a8a837d3829a9>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightClientDependency RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -import type { RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$fragmentType } from "./RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment.graphql"; -export type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery$variables = {| - id: string, -|}; -export type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery$data = {| - +node: ?{| - +$fragmentSpreads: RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$fragmentType, - |}, -|}; -export type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery = {| - response: RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery$data, - variables: RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } -], -v1 = [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } -]; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "args": null, - "fragment": require('./RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql'), - "kind": "ClientComponent" - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "16a3c110f5321eb844d02c0421a2e253", - "id": null, - "metadata": {}, - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery", - "operationKind": "query", - "text": "query RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment @relay_client_component_server(module_id: \"RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql\")\n id\n }\n}\n\nfragment RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment on Story {\n name\n body {\n text\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "337f43907f43a7d61eed932a0bf7f0d2"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery$variables, - RelayModernEnvironmentExecuteWithFlightAndClientFragmentTestInnerQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql.js deleted file mode 100644 index 4f519cf5a0c23..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization.graphql.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<2a4ecd388a80e42c9f408c071fdedd24>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { NormalizationSplitOperation } from 'relay-runtime'; - -*/ - -var node/*: NormalizationSplitOperation*/ = { - "kind": "SplitOperation", - "metadata": {}, - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$normalization", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "concreteType": "Text", - "kind": "LinkedField", - "name": "body", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "text", - "storageKey": null - } - ], - "storageKey": null - } - ] -}; - -if (__DEV__) { - (node/*: any*/).hash = "ea85bfcba4ce6cf4e091669c406f440d"; -} - -module.exports = node; diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment.graphql.js deleted file mode 100644 index af2143cd89d19..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment.graphql.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { Fragment, ReaderFragment } from 'relay-runtime'; -import type { FragmentType } from "relay-runtime"; -declare export opaque type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$fragmentType: FragmentType; -export type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$data = {| - +body: ?{| - +text: ?string, - |}, - +name: ?string, - +$fragmentType: RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$fragmentType, -|}; -export type RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$key = { - +$data?: RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$data, - +$fragmentSpreads: RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$fragmentType, - ... -}; -*/ - -var node/*: ReaderFragment*/ = { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "concreteType": "Text", - "kind": "LinkedField", - "name": "body", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "text", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; - -if (__DEV__) { - (node/*: any*/).hash = "ea85bfcba4ce6cf4e091669c406f440d"; -} - -module.exports = ((node/*: any*/)/*: Fragment< - RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$fragmentType, - RelayModernEnvironmentExecuteWithFlightAndClientFragmentTest_clientFragment$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightTestFlightQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightTestFlightQuery.graphql.js deleted file mode 100644 index ad13c18d0c300..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightTestFlightQuery.graphql.js +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<865a3d04a44bce22cbc1815bfad2f209>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayModernEnvironmentExecuteWithFlightTestFlightQuery$variables = {| - count: number, - id: string, -|}; -export type RelayModernEnvironmentExecuteWithFlightTestFlightQuery$data = {| - +node: ?{| - +flightComponent?: ?any, - |}, -|}; -export type RelayModernEnvironmentExecuteWithFlightTestFlightQuery = {| - response: RelayModernEnvironmentExecuteWithFlightTestFlightQuery$data, - variables: RelayModernEnvironmentExecuteWithFlightTestFlightQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" -}, -v2 = { - "kind": "Variable", - "name": "id", - "variableName": "id" -}, -v3 = [ - (v2/*: any*/) -], -v4 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": "flightComponent", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - (v2/*: any*/) - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteWithFlightTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v4/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "RelayModernEnvironmentExecuteWithFlightTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v4/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "6253e6b9124de07a9d1fa7f9a8274790", - "id": null, - "metadata": {}, - "name": "RelayModernEnvironmentExecuteWithFlightTestFlightQuery", - "operationKind": "query", - "text": "query RelayModernEnvironmentExecuteWithFlightTestFlightQuery(\n $id: ID!\n $count: Int!\n) {\n node(id: $id) {\n __typename\n ... on Story {\n flightComponent: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count, id: $id})\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "dd0fa7d8034b2f3bba51ca36fbec30b0"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayModernEnvironmentExecuteWithFlightTestFlightQuery$variables, - RelayModernEnvironmentExecuteWithFlightTestFlightQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightTestInnerQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightTestInnerQuery.graphql.js deleted file mode 100644 index 3c4e6c81be9df..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithFlightTestInnerQuery.graphql.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<0872b54bdd20677a900cb703b45c000d>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayModernEnvironmentExecuteWithFlightTestInnerQuery$variables = {| - id: string, -|}; -export type RelayModernEnvironmentExecuteWithFlightTestInnerQuery$data = {| - +node: ?{| - +name?: ?string, - |}, -|}; -export type RelayModernEnvironmentExecuteWithFlightTestInnerQuery = {| - response: RelayModernEnvironmentExecuteWithFlightTestInnerQuery$data, - variables: RelayModernEnvironmentExecuteWithFlightTestInnerQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } -], -v1 = [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - } - ], - "type": "User", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteWithFlightTestInnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v2/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "RelayModernEnvironmentExecuteWithFlightTestInnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "5bcfc11827ad90de437d3ab08d3382b1", - "id": null, - "metadata": {}, - "name": "RelayModernEnvironmentExecuteWithFlightTestInnerQuery", - "operationKind": "query", - "text": "query RelayModernEnvironmentExecuteWithFlightTestInnerQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ... on User {\n name\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "b2fdcec723be1551d06257004e593265"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayModernEnvironmentExecuteWithFlightTestInnerQuery$variables, - RelayModernEnvironmentExecuteWithFlightTestInnerQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery.graphql.js deleted file mode 100644 index 84b9e9b93596e..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery.graphql.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<7eb01d6195f1c4b41ba3bc4131c4d516>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightClientDependency RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$normalization.graphql - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -import type { RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$fragmentType } from "./RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment.graphql"; -export type RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery$variables = {| - id: string, -|}; -export type RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery$data = {| - +node: ?{| - +$fragmentSpreads: RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$fragmentType, - |}, -|}; -export type RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery = {| - response: RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery$data, - variables: RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } -], -v1 = [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } -]; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "args": null, - "fragment": require('./RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$normalization.graphql'), - "kind": "ClientComponent" - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "07ae87a9f65ccf4bcb38dbf960d82515", - "id": null, - "metadata": {}, - "name": "RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery", - "operationKind": "query", - "text": "query RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment @relay_client_component_server(module_id: \"RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$normalization.graphql\")\n id\n }\n}\n\nfragment RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment on Story {\n name\n body {\n text\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "7bf230bc939d43ce10e55e7a2cc0af8e"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery$variables, - RelayModernEnvironmentExecuteWithRelayClientComponentTestQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$normalization.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$normalization.graphql.js deleted file mode 100644 index 53182decfc1fd..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$normalization.graphql.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<6ce75d78dbb2fa9b746fe370d9a6dfb6>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { NormalizationSplitOperation } from 'relay-runtime'; - -*/ - -var node/*: NormalizationSplitOperation*/ = { - "kind": "SplitOperation", - "metadata": {}, - "name": "RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$normalization", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "concreteType": "Text", - "kind": "LinkedField", - "name": "body", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "text", - "storageKey": null - } - ], - "storageKey": null - } - ] -}; - -if (__DEV__) { - (node/*: any*/).hash = "18679cc241c9b27229ab29e32aad5597"; -} - -module.exports = node; diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment.graphql.js deleted file mode 100644 index 1dd08738a58c6..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment.graphql.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<299d46278318ffb9f9ae62c8ede05c33>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { Fragment, ReaderFragment } from 'relay-runtime'; -import type { FragmentType } from "relay-runtime"; -declare export opaque type RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$fragmentType: FragmentType; -export type RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$data = {| - +body: ?{| - +text: ?string, - |}, - +name: ?string, - +$fragmentType: RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$fragmentType, -|}; -export type RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$key = { - +$data?: RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$data, - +$fragmentSpreads: RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$fragmentType, - ... -}; -*/ - -var node/*: ReaderFragment*/ = { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "concreteType": "Text", - "kind": "LinkedField", - "name": "body", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "text", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; - -if (__DEV__) { - (node/*: any*/).hash = "18679cc241c9b27229ab29e32aad5597"; -} - -module.exports = ((node/*: any*/)/*: Fragment< - RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$fragmentType, - RelayModernEnvironmentExecuteWithRelayClientComponentTest_clientFragment$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery.graphql.js deleted file mode 100644 index 48db3ed40546d..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery.graphql.js +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<0e627954c6c51d81c54e0fc321377146>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery$variables = {| - count: number, - id: string, -|}; -export type RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery$data = {| - +node: ?{| - +flightComponent?: ?any, - |}, -|}; -export type RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery = {| - response: RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery$data, - variables: RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" -}, -v2 = { - "kind": "Variable", - "name": "id", - "variableName": "id" -}, -v3 = [ - (v2/*: any*/) -], -v4 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": "flightComponent", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - (v2/*: any*/) - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v4/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v4/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "e45c38ecfcd4f1a957657a5a2500d5f4", - "id": null, - "metadata": {}, - "name": "RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery", - "operationKind": "query", - "text": "query RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery(\n $id: ID!\n $count: Int!\n) {\n node(id: $id) {\n __typename\n ... on Story {\n flightComponent: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count, id: $id})\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "4c044218b936033e2034103a2d011f01"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery$variables, - RelayReaderTestFeatureEnableReactFlightComponentFieldFlightQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayReferenceMarkerTestFlightQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayReferenceMarkerTestFlightQuery.graphql.js deleted file mode 100644 index cc49b311ac93d..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayReferenceMarkerTestFlightQuery.graphql.js +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayReferenceMarkerTestFlightQuery$variables = {| - count: number, - id: string, -|}; -export type RelayReferenceMarkerTestFlightQuery$data = {| - +node: ?{| - +flightComponent?: ?any, - |}, -|}; -export type RelayReferenceMarkerTestFlightQuery = {| - response: RelayReferenceMarkerTestFlightQuery$data, - variables: RelayReferenceMarkerTestFlightQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" -}, -v2 = { - "kind": "Variable", - "name": "id", - "variableName": "id" -}, -v3 = [ - (v2/*: any*/) -], -v4 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": "flightComponent", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - (v2/*: any*/) - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "RelayReferenceMarkerTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v4/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "RelayReferenceMarkerTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v4/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "0159f073be38cdefd11248e5fc61eabd", - "id": null, - "metadata": {}, - "name": "RelayReferenceMarkerTestFlightQuery", - "operationKind": "query", - "text": "query RelayReferenceMarkerTestFlightQuery(\n $id: ID!\n $count: Int!\n) {\n node(id: $id) {\n __typename\n ... on Story {\n flightComponent: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count, id: $id})\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "09d7f9c41cf97f8858a39193930a2f54"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayReferenceMarkerTestFlightQuery$variables, - RelayReferenceMarkerTestFlightQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayReferenceMarkerTestInnerQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayReferenceMarkerTestInnerQuery.graphql.js deleted file mode 100644 index b1cbf12647b60..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayReferenceMarkerTestInnerQuery.graphql.js +++ /dev/null @@ -1,139 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<1ebd406827b91d3476a93af08db10b9c>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayReferenceMarkerTestInnerQuery$variables = {| - id: string, -|}; -export type RelayReferenceMarkerTestInnerQuery$data = {| - +node: ?{| - +name?: ?string, - |}, -|}; -export type RelayReferenceMarkerTestInnerQuery = {| - response: RelayReferenceMarkerTestInnerQuery$data, - variables: RelayReferenceMarkerTestInnerQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } -], -v1 = [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - } - ], - "type": "User", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "RelayReferenceMarkerTestInnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v2/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "RelayReferenceMarkerTestInnerQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "fc5c304dae91ac99c643cf8e8c190b01", - "id": null, - "metadata": {}, - "name": "RelayReferenceMarkerTestInnerQuery", - "operationKind": "query", - "text": "query RelayReferenceMarkerTestInnerQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ... on User {\n name\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "4c6a9934bb55d4c7f8779a65a12773c9"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayReferenceMarkerTestInnerQuery$variables, - RelayReferenceMarkerTestInnerQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTestFlightQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTestFlightQuery.graphql.js deleted file mode 100644 index ccb69ebb8d237..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTestFlightQuery.graphql.js +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightServerDependency FlightComponent.server - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -export type RelayResponseNormalizerTestFlightQuery$variables = {| - count: number, - id: string, -|}; -export type RelayResponseNormalizerTestFlightQuery$data = {| - +node: ?{| - +flightComponent?: ?any, - |}, -|}; -export type RelayResponseNormalizerTestFlightQuery = {| - response: RelayResponseNormalizerTestFlightQuery$data, - variables: RelayResponseNormalizerTestFlightQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "count" -}, -v1 = { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" -}, -v2 = { - "kind": "Variable", - "name": "id", - "variableName": "id" -}, -v3 = [ - (v2/*: any*/) -], -v4 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": "flightComponent", - "args": [ - { - "kind": "Literal", - "name": "component", - "value": "FlightComponent.server" - }, - { - "fields": [ - { - "kind": "Literal", - "name": "condition", - "value": true - }, - { - "kind": "Variable", - "name": "count", - "variableName": "count" - }, - (v2/*: any*/) - ], - "kind": "ObjectValue", - "name": "props" - } - ], - "kind": "FlightField", - "name": "flight", - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": [ - (v0/*: any*/), - (v1/*: any*/) - ], - "kind": "Fragment", - "metadata": null, - "name": "RelayResponseNormalizerTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - (v4/*: any*/) - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [ - (v1/*: any*/), - (v0/*: any*/) - ], - "kind": "Operation", - "name": "RelayResponseNormalizerTestFlightQuery", - "selections": [ - { - "alias": null, - "args": (v3/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v4/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "0330b8661d511af1582b5bd6409a4b93", - "id": null, - "metadata": {}, - "name": "RelayResponseNormalizerTestFlightQuery", - "operationKind": "query", - "text": "query RelayResponseNormalizerTestFlightQuery(\n $id: ID!\n $count: Int!\n) {\n node(id: $id) {\n __typename\n ... on Story {\n flightComponent: flight(component: \"FlightComponent.server\", props: {condition: true, count: $count, id: $id})\n }\n id\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "ff8e6b8262a0c8e39f55eaf9638a7c88"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayResponseNormalizerTestFlightQuery$variables, - RelayResponseNormalizerTestFlightQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTestServerOrClientQuery.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTestServerOrClientQuery.graphql.js deleted file mode 100644 index ff96959cb6132..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTestServerOrClientQuery.graphql.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<8d09d233fde5f03b60adf848e8aa3298>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -// @ReactFlightClientDependency RelayResponseNormalizerTest_clientFragment$normalization.graphql - -/*:: -import type { ConcreteRequest, Query } from 'relay-runtime'; -import type { RelayResponseNormalizerTest_clientFragment$fragmentType } from "./RelayResponseNormalizerTest_clientFragment.graphql"; -export type RelayResponseNormalizerTestServerOrClientQuery$variables = {| - id: string, -|}; -export type RelayResponseNormalizerTestServerOrClientQuery$data = {| - +node: ?{| - +$fragmentSpreads: RelayResponseNormalizerTest_clientFragment$fragmentType, - |}, -|}; -export type RelayResponseNormalizerTestServerOrClientQuery = {| - response: RelayResponseNormalizerTestServerOrClientQuery$data, - variables: RelayResponseNormalizerTestServerOrClientQuery$variables, -|}; -*/ - -var node/*: ConcreteRequest*/ = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "id" - } -], -v1 = [ - { - "kind": "Variable", - "name": "id", - "variableName": "id" - } -]; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "RelayResponseNormalizerTestServerOrClientQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "RelayResponseNormalizerTest_clientFragment" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "RelayResponseNormalizerTestServerOrClientQuery", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": null, - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - { - "args": null, - "fragment": require('./RelayResponseNormalizerTest_clientFragment$normalization.graphql'), - "kind": "ClientComponent" - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "cacheID": "50369b33d8ddd327912866577ac3722e", - "id": null, - "metadata": {}, - "name": "RelayResponseNormalizerTestServerOrClientQuery", - "operationKind": "query", - "text": "query RelayResponseNormalizerTestServerOrClientQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...RelayResponseNormalizerTest_clientFragment @relay_client_component_server(module_id: \"RelayResponseNormalizerTest_clientFragment$normalization.graphql\")\n id\n }\n}\n\nfragment RelayResponseNormalizerTest_clientFragment on Story {\n name\n body {\n text\n }\n}\n" - } -}; -})(); - -if (__DEV__) { - (node/*: any*/).hash = "a0dd4ee40f4cb0fc29cc2dc260f83cde"; -} - -module.exports = ((node/*: any*/)/*: Query< - RelayResponseNormalizerTestServerOrClientQuery$variables, - RelayResponseNormalizerTestServerOrClientQuery$data, ->*/); diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTest_clientFragment$normalization.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTest_clientFragment$normalization.graphql.js deleted file mode 100644 index e334c04c7f204..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTest_clientFragment$normalization.graphql.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<64646c25f8efed87f7bcd6e0d6b47911>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { NormalizationSplitOperation } from 'relay-runtime'; - -*/ - -var node/*: NormalizationSplitOperation*/ = { - "kind": "SplitOperation", - "metadata": {}, - "name": "RelayResponseNormalizerTest_clientFragment$normalization", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "concreteType": "Text", - "kind": "LinkedField", - "name": "body", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "text", - "storageKey": null - } - ], - "storageKey": null - } - ] -}; - -if (__DEV__) { - (node/*: any*/).hash = "4e927d138eadf9425e552317ba807e5b"; -} - -module.exports = node; diff --git a/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTest_clientFragment.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTest_clientFragment.graphql.js deleted file mode 100644 index 238fe88c9be6f..0000000000000 --- a/packages/relay-runtime/store/__tests__/__generated__/RelayResponseNormalizerTest_clientFragment.graphql.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @oncall relay - * - * @generated SignedSource<<7198a0a0403bac51c54a0a274823a6bf>> - * @flow - * @lightSyntaxTransform - * @nogrep - */ - -/* eslint-disable */ - -'use strict'; - -/*:: -import type { Fragment, ReaderFragment } from 'relay-runtime'; -import type { FragmentType } from "relay-runtime"; -declare export opaque type RelayResponseNormalizerTest_clientFragment$fragmentType: FragmentType; -export type RelayResponseNormalizerTest_clientFragment$data = {| - +body: ?{| - +text: ?string, - |}, - +name: ?string, - +$fragmentType: RelayResponseNormalizerTest_clientFragment$fragmentType, -|}; -export type RelayResponseNormalizerTest_clientFragment$key = { - +$data?: RelayResponseNormalizerTest_clientFragment$data, - +$fragmentSpreads: RelayResponseNormalizerTest_clientFragment$fragmentType, - ... -}; -*/ - -var node/*: ReaderFragment*/ = { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "RelayResponseNormalizerTest_clientFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "concreteType": "Text", - "kind": "LinkedField", - "name": "body", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "text", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Story", - "abstractKey": null -}; - -if (__DEV__) { - (node/*: any*/).hash = "4e927d138eadf9425e552317ba807e5b"; -} - -module.exports = ((node/*: any*/)/*: Fragment< - RelayResponseNormalizerTest_clientFragment$fragmentType, - RelayResponseNormalizerTest_clientFragment$data, ->*/); diff --git a/packages/relay-runtime/store/experimental-live-resolvers/LiveResolverStore.js b/packages/relay-runtime/store/experimental-live-resolvers/LiveResolverStore.js index b5be4c31a71dc..a23308caae120 100644 --- a/packages/relay-runtime/store/experimental-live-resolvers/LiveResolverStore.js +++ b/packages/relay-runtime/store/experimental-live-resolvers/LiveResolverStore.js @@ -23,8 +23,6 @@ import type { OperationAvailability, OperationDescriptor, OperationLoader, - ReactFlightPayloadDeserializer, - ReactFlightServerErrorHandler, RecordSource, RequestDescriptor, Scheduler, @@ -47,7 +45,6 @@ const RelayModernRecord = require('../RelayModernRecord'); const RelayOptimisticRecordSource = require('../RelayOptimisticRecordSource'); const RelayReader = require('../RelayReader'); const RelayReferenceMarker = require('../RelayReferenceMarker'); -const RelayStoreReactFlightUtils = require('../RelayStoreReactFlightUtils'); const RelayStoreSubscriptions = require('../RelayStoreSubscriptions'); const RelayStoreUtils = require('../RelayStoreUtils'); const {ROOT_ID, ROOT_TYPE} = require('../RelayStoreUtils'); @@ -111,8 +108,6 @@ class LiveResolverStore implements Store { _updatedRecordIDs: DataIDSet; _actorIdentifier: ?ActorIdentifier; _treatMissingFieldsAsNull: boolean; - _reactFlightPayloadDeserializer: ?ReactFlightPayloadDeserializer; - _reactFlightServerErrorHandler: ?ReactFlightServerErrorHandler; _shouldProcessClientComponents: boolean; constructor( @@ -125,8 +120,6 @@ class LiveResolverStore implements Store { log?: ?LogFunction, operationLoader?: ?OperationLoader, queryCacheExpirationTime?: ?number, - reactFlightPayloadDeserializer?: ?ReactFlightPayloadDeserializer, - reactFlightServerErrorHandler?: ?ReactFlightServerErrorHandler, shouldProcessClientComponents?: ?boolean, treatMissingFieldsAsNull?: ?boolean, }, @@ -170,10 +163,6 @@ class LiveResolverStore implements Store { this._updatedRecordIDs = new Set(); this._treatMissingFieldsAsNull = options?.treatMissingFieldsAsNull ?? false; this._actorIdentifier = options?.actorIdentifier; - this._reactFlightPayloadDeserializer = - options?.reactFlightPayloadDeserializer; - this._reactFlightServerErrorHandler = - options?.reactFlightServerErrorHandler; this._shouldProcessClientComponents = options?.shouldProcessClientComponents ?? false; @@ -733,8 +722,6 @@ class LiveResolverStore implements Store { path, getDataID: this._getDataID, treatMissingFieldsAsNull: this._treatMissingFieldsAsNull, - reactFlightPayloadDeserializer: this._reactFlightPayloadDeserializer, - reactFlightServerErrorHandler: this._reactFlightServerErrorHandler, shouldProcessClientComponents: this._shouldProcessClientComponents, actorIdentifier: this._actorIdentifier, }; @@ -830,15 +817,7 @@ function updateTargetFromSource( } } if (sourceRecord && targetRecord) { - // ReactFlightClientResponses are lazy and only materialize when readRoot - // is called when we read the field, so if the record is a Flight field - // we always use the new record's data regardless of whether - // it actually changed. Let React take care of reconciliation instead. - const nextRecord = - RelayModernRecord.getType(targetRecord) === - RelayStoreReactFlightUtils.REACT_FLIGHT_TYPE_NAME - ? sourceRecord - : RelayModernRecord.update(targetRecord, sourceRecord); + const nextRecord = RelayModernRecord.update(targetRecord, sourceRecord); if (nextRecord !== targetRecord) { // Prevent mutation of a record from outside the store. if (__DEV__) { diff --git a/packages/relay-runtime/util/NormalizationNode.js b/packages/relay-runtime/util/NormalizationNode.js index 9cec34e328ac5..9411cdbd46f69 100644 --- a/packages/relay-runtime/util/NormalizationNode.js +++ b/packages/relay-runtime/util/NormalizationNode.js @@ -78,7 +78,6 @@ export type NormalizationClientExtension = { export type NormalizationField = | NormalizationResolverField - | NormalizationFlightField | NormalizationScalarField | NormalizationLinkedField; @@ -164,14 +163,6 @@ export type NormalizationScalarField = { +storageKey?: ?string, }; -export type NormalizationFlightField = { - +kind: 'FlightField', - +alias: ?string, - +name: string, - +args: ?$ReadOnlyArray, - +storageKey: ?string, -}; - export type NormalizationResolverField = { +kind: 'RelayResolver', +name: string, @@ -205,7 +196,6 @@ export type NormalizationSelection = | NormalizationClientEdgeToClientObject | NormalizationDefer | NormalizationField - | NormalizationFlightField | NormalizationFragmentSpread | NormalizationHandle | NormalizationInlineFragment diff --git a/packages/relay-runtime/util/ReaderNode.js b/packages/relay-runtime/util/ReaderNode.js index c625c25b1a783..795f3447a0214 100644 --- a/packages/relay-runtime/util/ReaderNode.js +++ b/packages/relay-runtime/util/ReaderNode.js @@ -212,14 +212,6 @@ export type ReaderScalarField = { +storageKey?: ?string, }; -export type ReaderFlightField = { - +kind: 'FlightField', - +alias: ?string, - +name: string, - +args: ?$ReadOnlyArray, - +storageKey: ?string, -}; - export type ReaderDefer = { +kind: 'Defer', +selections: $ReadOnlyArray, @@ -302,7 +294,6 @@ export type ReaderSelection = | ReaderDefer | ReaderField | ReaderActorChange - | ReaderFlightField | ReaderFragmentSpread | ReaderAliasedFragmentSpread | ReaderInlineDataFragmentSpread diff --git a/packages/relay-runtime/util/RelayConcreteNode.js b/packages/relay-runtime/util/RelayConcreteNode.js index 97e25f8edb1d7..a0fd9532a75d5 100644 --- a/packages/relay-runtime/util/RelayConcreteNode.js +++ b/packages/relay-runtime/util/RelayConcreteNode.js @@ -102,7 +102,6 @@ const RelayConcreteNode = { CLIENT_EXTENSION: 'ClientExtension', DEFER: 'Defer', CONNECTION: 'Connection', - FLIGHT_FIELD: 'FlightField', FRAGMENT: 'Fragment', FRAGMENT_SPREAD: 'FragmentSpread', INLINE_DATA_FRAGMENT_SPREAD: 'InlineDataFragmentSpread', diff --git a/packages/relay-runtime/util/RelayFeatureFlags.js b/packages/relay-runtime/util/RelayFeatureFlags.js index be8fdaf6cbadc..776357aa76e26 100644 --- a/packages/relay-runtime/util/RelayFeatureFlags.js +++ b/packages/relay-runtime/util/RelayFeatureFlags.js @@ -16,7 +16,6 @@ import type {Disposable} from '../util/RelayRuntimeTypes'; export type FeatureFlags = { ENABLE_CLIENT_EDGES: boolean, ENABLE_VARIABLE_CONNECTION_KEY: boolean, - ENABLE_REACT_FLIGHT_COMPONENT_FIELD: boolean, ENABLE_RELAY_RESOLVERS: boolean, ENABLE_GETFRAGMENTIDENTIFIER_OPTIMIZATION: boolean, ENABLE_FRIENDLY_QUERY_NAME_GQL_URL: boolean, @@ -45,7 +44,6 @@ export type FeatureFlags = { const RelayFeatureFlags: FeatureFlags = { ENABLE_CLIENT_EDGES: false, ENABLE_VARIABLE_CONNECTION_KEY: false, - ENABLE_REACT_FLIGHT_COMPONENT_FIELD: false, ENABLE_RELAY_RESOLVERS: false, ENABLE_GETFRAGMENTIDENTIFIER_OPTIMIZATION: false, ENABLE_FRIENDLY_QUERY_NAME_GQL_URL: false, diff --git a/packages/relay-test-utils/RelayMockPayloadGenerator.js b/packages/relay-test-utils/RelayMockPayloadGenerator.js index 966c9c393bd9c..a5f0a7e58be5f 100644 --- a/packages/relay-test-utils/RelayMockPayloadGenerator.js +++ b/packages/relay-test-utils/RelayMockPayloadGenerator.js @@ -40,7 +40,6 @@ const { CONDITION, CONNECTION, DEFER, - FLIGHT_FIELD, FRAGMENT_SPREAD, INLINE_FRAGMENT, LINKED_FIELD, @@ -495,8 +494,6 @@ class RelayMockPayloadGenerator { case SCALAR_HANDLE: case LINKED_HANDLE: break; - case FLIGHT_FIELD: - throw new Error('Flight fields are not yet supported.'); case ACTOR_CHANGE: throw new Error('ActorChange fields are not yet supported.'); case RELAY_RESOLVER: