diff --git a/compiler/crates/relay-codegen/src/build_ast.rs b/compiler/crates/relay-codegen/src/build_ast.rs index a93bd779375d1..b9006300ddcf4 100644 --- a/compiler/crates/relay-codegen/src/build_ast.rs +++ b/compiler/crates/relay-codegen/src/build_ast.rs @@ -433,10 +433,13 @@ impl<'schema, 'builder, 'config> CodegenBuilder<'schema, 'builder, 'config> { ), operation: Primitive::GraphQLModuleDependency(GraphQLModuleDependency::Name(refetch_metadata.operation_name.into())), }; - if let Some(identifier_field) = refetch_metadata.identifier_field { + if let Some(identifier_info) = &refetch_metadata.identifier_info { refetch_object.push(ObjectEntry { - key: CODEGEN_CONSTANTS.identifier_field, - value: Primitive::String(identifier_field), + key: CODEGEN_CONSTANTS.identifier_info, + value: Primitive::Key(self.object(object! { + identifier_field: Primitive::String(identifier_info.identifier_field), + identifier_query_variable_name: Primitive::String(identifier_info.identifier_query_variable_name), + })), }); } diff --git a/compiler/crates/relay-codegen/src/constants.rs b/compiler/crates/relay-codegen/src/constants.rs index 7a5ff6faf30a1..f8e9ef6f95637 100644 --- a/compiler/crates/relay-codegen/src/constants.rs +++ b/compiler/crates/relay-codegen/src/constants.rs @@ -58,6 +58,8 @@ pub struct CodegenConstants { pub has_client_edges: StringKey, pub id: StringKey, pub identifier_field: StringKey, + pub identifier_query_variable_name: StringKey, + pub identifier_info: StringKey, pub if_: StringKey, pub inline_data_fragment_spread: StringKey, pub inline_data_fragment: StringKey, @@ -166,6 +168,8 @@ lazy_static! { has_client_edges: "hasClientEdges".intern(), id: "id".intern(), identifier_field: "identifierField".intern(), + identifier_query_variable_name: "identifierQueryVariableName".intern(), + identifier_info: "identifierInfo".intern(), if_: "if".intern(), inline_data_fragment_spread: "InlineDataFragmentSpread".intern(), inline_data_fragment: "InlineDataFragment".intern(), diff --git a/compiler/crates/relay-codegen/tests/client_edges/fixtures/client-edge-backed-by-resolver.expected b/compiler/crates/relay-codegen/tests/client_edges/fixtures/client-edge-backed-by-resolver.expected index 95d9e8d4110c2..8343ea2b9104c 100644 --- a/compiler/crates/relay-codegen/tests/client_edges/fixtures/client-edge-backed-by-resolver.expected +++ b/compiler/crates/relay-codegen/tests/client_edges/fixtures/client-edge-backed-by-resolver.expected @@ -127,7 +127,10 @@ extend type User { "node" ], "operation": require('ClientEdgeQuery_Foo_user_best_friend.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_Foo_user_best_friend", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-node-interface.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-node-interface.expected index 78e19b4e9d517..48d8aa2572a26 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-node-interface.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-node-interface.expected @@ -244,7 +244,10 @@ fragment fragmentOnNodeInterface_RefetchableFragment on Node { "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "fragmentOnNodeInterface_RefetchableFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-non-node-fetchable-type.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-non-node-fetchable-type.expected index 9d0cf6bcdcc5d..94c3498c75c31 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-non-node-fetchable-type.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-non-node-fetchable-type.expected @@ -263,7 +263,10 @@ fragment fragmentOnNonNodeFetchableType_RefetchableFragment on NonNodeStory { "fetch__NonNodeStory" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "fetch_id" + "identifierInfo": { + "identifierField": "fetch_id", + "identifierQueryVariableName": "id" + } } }, "name": "fragmentOnNonNodeFetchableType_RefetchableFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-object-implementing-node-interface.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-object-implementing-node-interface.expected index 84bfa1bd84746..893a400d33ef8 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-object-implementing-node-interface.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/fragment-on-object-implementing-node-interface.expected @@ -235,7 +235,10 @@ fragment fragmentOnObjectImplementingNodeInterface_RefetchableFragment on User { "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "fragmentOnObjectImplementingNodeInterface_RefetchableFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/provided-variable-refetchable-fragment.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/provided-variable-refetchable-fragment.expected index b4cc718ccffa0..63c7df4a05bea 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/provided-variable-refetchable-fragment.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/provided-variable-refetchable-fragment.expected @@ -321,7 +321,10 @@ fragment providedVariableRefetchableFragment_providedVariableFragment on User { "node" ], "operation": require('refetchableQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "providedVariableRefetchableFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-connection-custom-handler.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-connection-custom-handler.expected index 35b9c79c1e5a3..1e84b772d2697 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-connection-custom-handler.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-connection-custom-handler.expected @@ -318,7 +318,10 @@ fragment refetchableConnectionCustomHandler_RefetchableConnection_feedback on Fe "node" ], "operation": require('RefetchableConnectionQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableConnectionCustomHandler_RefetchableConnection_feedback", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-connection.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-connection.expected index fb16f42a15e28..016d3a6a9622d 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-connection.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-connection.expected @@ -318,7 +318,10 @@ fragment refetchableConnection_RefetchableConnection_feedback on Feedback { "node" ], "operation": require('RefetchableConnectionQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableConnection_RefetchableConnection_feedback", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-on-node-with-missing-id.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-on-node-with-missing-id.expected index e91b8492174b1..49dfbbdc91fb0 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-on-node-with-missing-id.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-on-node-with-missing-id.expected @@ -243,7 +243,10 @@ fragment refetchableFragmentOnNodeWithMissingId_RefetchableFragment on Node { "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableFragmentOnNodeWithMissingId_RefetchableFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-bidirectional.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-bidirectional.expected index a26bdf4b5f4f2..742e445add423 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-bidirectional.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-bidirectional.expected @@ -421,7 +421,10 @@ fragment refetchableFragmentWithConnectionBidirectional_PaginationFragment_1G22u "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableFragmentWithConnectionBidirectional_PaginationFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-es-modules.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-es-modules.expected index 9616b19185e26..e6e18c31fcfff 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-es-modules.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-es-modules.expected @@ -355,7 +355,10 @@ import RefetchableFragmentQuery_graphql from './RefetchableFragmentQuery.graphql "node" ], "operation": RefetchableFragmentQuery_graphql, - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableFragmentWithConnectionEsModules_PaginationFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-with-stream.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-with-stream.expected index 84b1abf3b93f3..12a21162fcb3c 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-with-stream.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection-with-stream.expected @@ -365,7 +365,10 @@ fragment refetchableFragmentWithConnectionWithStream_PaginationFragment_1G22uz o "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableFragmentWithConnectionWithStream_PaginationFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection.expected index aef310842b6a4..11d9eaf09b5e4 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/refetchable-fragment-with-connection.expected @@ -348,7 +348,10 @@ fragment refetchableFragmentWithConnection_PaginationFragment_1G22uz on Node { "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableFragmentWithConnection_PaginationFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/relay-resolver-backing-client-edge.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/relay-resolver-backing-client-edge.expected index 2e3e9c3c9efa2..147abf640235a 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/relay-resolver-backing-client-edge.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/relay-resolver-backing-client-edge.expected @@ -287,7 +287,10 @@ fragment relayResolverBackingClientEdge_best_friend_resolver on User { "node" ], "operation": require('ClientEdgeQuery_relayResolverBackingClientEdgeQuery_me__best_friend.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_relayResolverBackingClientEdgeQuery_me__best_friend", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/relay-resolver-with-required-client-edge.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/relay-resolver-with-required-client-edge.expected index ffc0f4c494e0a..7c12d598c5f14 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/relay-resolver-with-required-client-edge.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts/fixtures/relay-resolver-with-required-client-edge.expected @@ -292,7 +292,10 @@ fragment relayResolverWithRequiredClientEdge_best_friend_resolver on User { "node" ], "operation": require('ClientEdgeQuery_relayResolverWithRequiredClientEdgeQuery_me__best_friend.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_relayResolverWithRequiredClientEdgeQuery_me__best_friend", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.expected new file mode 100644 index 0000000000000..c02cc1d9e20c8 --- /dev/null +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.expected @@ -0,0 +1,284 @@ +==================================== INPUT ==================================== +fragment fragmentOnNodeInterfaceWithCustomVariableName_RefetchableFragment on Node + @refetchable(queryName: "RefetchableFragmentQuery") { + global_id + ... on User { + name + ...fragmentOnNodeInterfaceWithCustomVariableName_ProfilePicture + } +} + +fragment fragmentOnNodeInterfaceWithCustomVariableName_ProfilePicture on User { + profilePicture(size: $size) { + uri + } +} +==================================== OUTPUT =================================== +{ + "fragment": { + "argumentDefinitions": [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "global_id" + }, + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "size" + } + ], + "kind": "Fragment", + "metadata": null, + "name": "RefetchableFragmentQuery", + "selections": [ + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "global_id", + "variableName": "global_id" + } + ], + "concreteType": null, + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "args": null, + "kind": "FragmentSpread", + "name": "fragmentOnNodeInterfaceWithCustomVariableName_RefetchableFragment" + } + ], + "storageKey": null + } + ], + "type": "Query", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "size" + }, + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "global_id" + } + ], + "kind": "Operation", + "name": "RefetchableFragmentQuery", + "selections": [ + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "global_id", + "variableName": "global_id" + } + ], + "concreteType": null, + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "__typename", + "storageKey": null + }, + { + "kind": "TypeDiscriminator", + "abstractKey": "__isNode" + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "global_id", + "storageKey": null + }, + { + "kind": "InlineFragment", + "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 + } + ], + "storageKey": null + } + ] + }, + "params": { + "cacheID": "31dcd57f42128b8d975e6224202a17c9", + "id": null, + "metadata": {}, + "name": "RefetchableFragmentQuery", + "operationKind": "query", + "text": null + } +} + +QUERY: + +query RefetchableFragmentQuery( + $size: [Int] + $global_id: ID! +) { + node(global_id: $global_id) { + __typename + ...fragmentOnNodeInterfaceWithCustomVariableName_RefetchableFragment + global_id + } +} + +fragment fragmentOnNodeInterfaceWithCustomVariableName_ProfilePicture on User { + profilePicture(size: $size) { + uri + } +} + +fragment fragmentOnNodeInterfaceWithCustomVariableName_RefetchableFragment on Node { + __isNode: __typename + global_id + ... on User { + name + ...fragmentOnNodeInterfaceWithCustomVariableName_ProfilePicture + } +} + + +{ + "argumentDefinitions": [ + { + "kind": "RootArgument", + "name": "size" + } + ], + "kind": "Fragment", + "metadata": null, + "name": "fragmentOnNodeInterfaceWithCustomVariableName_ProfilePicture", + "selections": [ + { + "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 +} + +{ + "argumentDefinitions": [ + { + "kind": "RootArgument", + "name": "size" + } + ], + "kind": "Fragment", + "metadata": { + "refetch": { + "connection": null, + "fragmentPathInResult": [ + "node" + ], + "operation": require('RefetchableFragmentQuery.graphql'), + "identifierInfo": { + "identifierField": "global_id", + "identifierQueryVariableName": "id" + } + } + }, + "name": "fragmentOnNodeInterfaceWithCustomVariableName_RefetchableFragment", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "global_id", + "storageKey": null + }, + { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "args": null, + "kind": "FragmentSpread", + "name": "fragmentOnNodeInterfaceWithCustomVariableName_ProfilePicture" + } + ], + "type": "User", + "abstractKey": null + } + ], + "type": "Node", + "abstractKey": "__isNode" +} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.graphql b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.graphql new file mode 100644 index 0000000000000..c03762dffdf43 --- /dev/null +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.graphql @@ -0,0 +1,14 @@ +fragment fragmentOnNodeInterfaceWithCustomVariableName_RefetchableFragment on Node + @refetchable(queryName: "RefetchableFragmentQuery") { + global_id + ... on User { + name + ...fragmentOnNodeInterfaceWithCustomVariableName_ProfilePicture + } +} + +fragment fragmentOnNodeInterfaceWithCustomVariableName_ProfilePicture on User { + profilePicture(size: $size) { + uri + } +} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface.expected index 01249a6d7a551..0bc7f6caab0e9 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface.expected @@ -244,7 +244,10 @@ fragment fragmentOnNodeInterface_RefetchableFragment on Node { "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "global_id" + "identifierInfo": { + "identifierField": "global_id", + "identifierQueryVariableName": "id" + } } }, "name": "fragmentOnNodeInterface_RefetchableFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.expected new file mode 100644 index 0000000000000..48b7381920e76 --- /dev/null +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.expected @@ -0,0 +1,269 @@ +==================================== INPUT ==================================== +# use-custom-variable-name +fragment fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_RefetchableFragment on User +@refetchable(queryName: "RefetchableFragmentQuery") { + global_id + name + ...fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_ProfilePicture +} + +fragment fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_ProfilePicture on User { + profilePicture(size: $size) { + uri + } +} +==================================== OUTPUT =================================== +{ + "fragment": { + "argumentDefinitions": [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "global_id" + }, + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "size" + } + ], + "kind": "Fragment", + "metadata": null, + "name": "RefetchableFragmentQuery", + "selections": [ + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "global_id", + "variableName": "global_id" + } + ], + "concreteType": null, + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "args": null, + "kind": "FragmentSpread", + "name": "fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_RefetchableFragment" + } + ], + "storageKey": null + } + ], + "type": "Query", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "size" + }, + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "global_id" + } + ], + "kind": "Operation", + "name": "RefetchableFragmentQuery", + "selections": [ + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "global_id", + "variableName": "global_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": "global_id", + "storageKey": null + }, + { + "kind": "InlineFragment", + "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 + } + ], + "storageKey": null + } + ] + }, + "params": { + "cacheID": "31dcd57f42128b8d975e6224202a17c9", + "id": null, + "metadata": {}, + "name": "RefetchableFragmentQuery", + "operationKind": "query", + "text": null + } +} + +QUERY: + +query RefetchableFragmentQuery( + $size: [Int] + $global_id: ID! +) { + node(global_id: $global_id) { + __typename + ...fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_RefetchableFragment + global_id + } +} + +fragment fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_ProfilePicture on User { + profilePicture(size: $size) { + uri + } +} + +fragment fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_RefetchableFragment on User { + global_id + name + ...fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_ProfilePicture +} + + +{ + "argumentDefinitions": [ + { + "kind": "RootArgument", + "name": "size" + } + ], + "kind": "Fragment", + "metadata": null, + "name": "fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_ProfilePicture", + "selections": [ + { + "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 +} + +{ + "argumentDefinitions": [ + { + "kind": "RootArgument", + "name": "size" + } + ], + "kind": "Fragment", + "metadata": { + "refetch": { + "connection": null, + "fragmentPathInResult": [ + "node" + ], + "operation": require('RefetchableFragmentQuery.graphql'), + "identifierInfo": { + "identifierField": "global_id", + "identifierQueryVariableName": "variable_name" + } + } + }, + "name": "fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_RefetchableFragment", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "global_id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "args": null, + "kind": "FragmentSpread", + "name": "fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_ProfilePicture" + } + ], + "type": "User", + "abstractKey": null +} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.graphql b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.graphql new file mode 100644 index 0000000000000..bf5b8421d8dc2 --- /dev/null +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.graphql @@ -0,0 +1,13 @@ +# use-custom-variable-name +fragment fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_RefetchableFragment on User +@refetchable(queryName: "RefetchableFragmentQuery") { + global_id + name + ...fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_ProfilePicture +} + +fragment fragmentOnObjectImplementingNodeInterfaceWithCustomVariableName_ProfilePicture on User { + profilePicture(size: $size) { + uri + } +} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface.expected index 5f0a60287bc01..aaa405702b77c 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface.expected @@ -235,7 +235,10 @@ fragment fragmentOnObjectImplementingNodeInterface_RefetchableFragment on User { "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "global_id" + "identifierInfo": { + "identifierField": "global_id", + "identifierQueryVariableName": "id" + } } }, "name": "fragmentOnObjectImplementingNodeInterface_RefetchableFragment", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.expected new file mode 100644 index 0000000000000..1a010ecc7bb53 --- /dev/null +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.expected @@ -0,0 +1,419 @@ +==================================== INPUT ==================================== +# use-custom-variable-name +fragment refetchableConnectionWithCustomVariableName_RefetchableConnection_feedback on Feedback +@refetchable(queryName: "RefetchableConnectionQuery") { + global_id + comments(first: $count, after: $cursor) + @connection(key: "RefetchableConnection_comments") { + edges { + cursor + node { + global_id + } + } + pageInfo { + endCursor + hasNextPage + } + } +} +==================================== OUTPUT =================================== +{ + "fragment": { + "argumentDefinitions": [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "count" + }, + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "cursor" + }, + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "global_id" + } + ], + "kind": "Fragment", + "metadata": null, + "name": "RefetchableConnectionQuery", + "selections": [ + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "global_id", + "variableName": "global_id" + } + ], + "concreteType": null, + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "args": null, + "kind": "FragmentSpread", + "name": "refetchableConnectionWithCustomVariableName_RefetchableConnection_feedback" + } + ], + "storageKey": null + } + ], + "type": "Query", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "count" + }, + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "cursor" + }, + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "global_id" + } + ], + "kind": "Operation", + "name": "RefetchableConnectionQuery", + "selections": [ + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "global_id", + "variableName": "global_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": "global_id", + "storageKey": null + }, + { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "after", + "variableName": "cursor" + }, + { + "kind": "Variable", + "name": "first", + "variableName": "count" + } + ], + "concreteType": "CommentsConnection", + "kind": "LinkedField", + "name": "comments", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "CommentsEdge", + "kind": "LinkedField", + "name": "edges", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "cursor", + "storageKey": null + }, + { + "alias": null, + "args": null, + "concreteType": "Comment", + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "global_id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "__typename", + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": null + }, + { + "alias": null, + "args": null, + "concreteType": "PageInfo", + "kind": "LinkedField", + "name": "pageInfo", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "endCursor", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "hasNextPage", + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": null + }, + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "after", + "variableName": "cursor" + }, + { + "kind": "Variable", + "name": "first", + "variableName": "count" + } + ], + "filters": null, + "handle": "connection", + "key": "RefetchableConnection_comments", + "kind": "LinkedHandle", + "name": "comments" + } + ], + "type": "Feedback", + "abstractKey": null + } + ], + "storageKey": null + } + ] + }, + "params": { + "cacheID": "5b0bba64f5feedde7f799aa3e6ec8e76", + "id": null, + "metadata": {}, + "name": "RefetchableConnectionQuery", + "operationKind": "query", + "text": null + } +} + +QUERY: + +query RefetchableConnectionQuery( + $count: Int + $cursor: ID + $global_id: ID! +) { + node(global_id: $global_id) { + __typename + ...refetchableConnectionWithCustomVariableName_RefetchableConnection_feedback + global_id + } +} + +fragment refetchableConnectionWithCustomVariableName_RefetchableConnection_feedback on Feedback { + global_id + comments(first: $count, after: $cursor) { + edges { + cursor + node { + global_id + __typename + } + } + pageInfo { + endCursor + hasNextPage + } + } +} + + +{ + "argumentDefinitions": [ + { + "kind": "RootArgument", + "name": "count" + }, + { + "kind": "RootArgument", + "name": "cursor" + } + ], + "kind": "Fragment", + "metadata": { + "connection": [ + { + "count": "count", + "cursor": "cursor", + "direction": "forward", + "path": [ + "comments" + ] + } + ], + "refetch": { + "connection": { + "forward": { + "count": "count", + "cursor": "cursor" + }, + "backward": null, + "path": [ + "comments" + ] + }, + "fragmentPathInResult": [ + "node" + ], + "operation": require('RefetchableConnectionQuery.graphql'), + "identifierInfo": { + "identifierField": "global_id", + "identifierQueryVariableName": "variable_name" + } + } + }, + "name": "refetchableConnectionWithCustomVariableName_RefetchableConnection_feedback", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "global_id", + "storageKey": null + }, + { + "alias": "comments", + "args": null, + "concreteType": "CommentsConnection", + "kind": "LinkedField", + "name": "__RefetchableConnection_comments_connection", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "CommentsEdge", + "kind": "LinkedField", + "name": "edges", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "cursor", + "storageKey": null + }, + { + "alias": null, + "args": null, + "concreteType": "Comment", + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "global_id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "__typename", + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": null + }, + { + "alias": null, + "args": null, + "concreteType": "PageInfo", + "kind": "LinkedField", + "name": "pageInfo", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "endCursor", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "hasNextPage", + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Feedback", + "abstractKey": null +} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.graphql b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.graphql new file mode 100644 index 0000000000000..3ef023f0dfce9 --- /dev/null +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.graphql @@ -0,0 +1,18 @@ +# use-custom-variable-name +fragment refetchableConnectionWithCustomVariableName_RefetchableConnection_feedback on Feedback +@refetchable(queryName: "RefetchableConnectionQuery") { + global_id + comments(first: $count, after: $cursor) + @connection(key: "RefetchableConnection_comments") { + edges { + cursor + node { + global_id + } + } + pageInfo { + endCursor + hasNextPage + } + } +} diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection.expected index 006ab5afb60b9..3263f18d6fc58 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection.expected @@ -318,7 +318,10 @@ fragment refetchableConnection_RefetchableConnection_feedback on Feedback { "node" ], "operation": require('RefetchableConnectionQuery.graphql'), - "identifierField": "global_id" + "identifierInfo": { + "identifierField": "global_id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableConnection_RefetchableConnection_feedback", diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-fragment-on-node-with-missing-id.expected b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-fragment-on-node-with-missing-id.expected index 551bbf5f813d8..f2517313ed6b7 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-fragment-on-node-with-missing-id.expected +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id/fixtures/refetchable-fragment-on-node-with-missing-id.expected @@ -243,7 +243,10 @@ fragment refetchableFragmentOnNodeWithMissingId_RefetchableFragment on Node { "node" ], "operation": require('RefetchableFragmentQuery.graphql'), - "identifierField": "global_id" + "identifierInfo": { + "identifierField": "global_id", + "identifierQueryVariableName": "id" + } } }, "name": "refetchableFragmentOnNodeWithMissingId_RefetchableFragment", 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 7b75d76bd97b0..64a5680f297a5 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 @@ -49,6 +49,13 @@ pub fn transform_fixture(fixture: &Fixture<'_>) -> Result { return Ok("TODO".to_string()); } + let node_interface_query_variable_name = + if fixture.content.contains("# use-custom-variable-name") { + Some("variable_name".intern()) + } else { + None + }; + let parts: Vec<_> = fixture.content.split("%extensions%").collect(); let (base, schema) = match parts.as_slice() { [base, extensions] => ( @@ -89,12 +96,16 @@ pub fn transform_fixture(fixture: &Fixture<'_>) -> Result { relay_resolver_enable_output_type: FeatureFlag::Disabled, }; + let default_schema_config = SchemaConfig::default(); + let project_config = ProjectConfig { name: "test".intern(), feature_flags: Arc::new(feature_flags), schema_config: SchemaConfig { node_interface_id_field: "global_id".intern(), - ..Default::default() + node_interface_id_variable_name: node_interface_query_variable_name + .unwrap_or(default_schema_config.node_interface_id_variable_name), + ..default_schema_config }, js_module_format: JsModuleFormat::Haste, ..Default::default() diff --git a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id_test.rs b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id_test.rs index 2c97bed430c07..63c10ff5e543b 100644 --- a/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id_test.rs +++ b/compiler/crates/relay-compiler/tests/compile_relay_artifacts_with_custom_id_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<<029b71da6b224936e7ca559c10f51c93>> + * @generated SignedSource<<1e99c40a98b34b55c49b7b2a2bfddae2>> */ mod compile_relay_artifacts_with_custom_id; @@ -19,6 +19,13 @@ fn fragment_on_node_interface() { test_fixture(transform_fixture, "fragment-on-node-interface.graphql", "compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface.expected", input, expected); } +#[test] +fn fragment_on_node_interface_with_custom_variable_name() { + let input = include_str!("compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.graphql"); + let expected = include_str!("compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.expected"); + test_fixture(transform_fixture, "fragment-on-node-interface-with-custom-variable-name.graphql", "compile_relay_artifacts_with_custom_id/fixtures/fragment-on-node-interface-with-custom-variable-name.expected", input, expected); +} + #[test] fn fragment_on_object_implementing_node_interface() { let input = include_str!("compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface.graphql"); @@ -26,6 +33,13 @@ fn fragment_on_object_implementing_node_interface() { test_fixture(transform_fixture, "fragment-on-object-implementing-node-interface.graphql", "compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface.expected", input, expected); } +#[test] +fn fragment_on_object_implementing_node_interface_with_custom_variable_name() { + let input = include_str!("compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.graphql"); + let expected = include_str!("compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.expected"); + test_fixture(transform_fixture, "fragment-on-object-implementing-node-interface-with-custom-variable-name.graphql", "compile_relay_artifacts_with_custom_id/fixtures/fragment-on-object-implementing-node-interface-with-custom-variable-name.expected", input, expected); +} + #[test] fn fragment_on_query() { let input = include_str!("compile_relay_artifacts_with_custom_id/fixtures/fragment-on-query.graphql"); @@ -82,6 +96,13 @@ fn refetchable_connection() { test_fixture(transform_fixture, "refetchable-connection.graphql", "compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection.expected", input, expected); } +#[test] +fn refetchable_connection_with_custom_variable_name() { + let input = include_str!("compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.graphql"); + let expected = include_str!("compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.expected"); + test_fixture(transform_fixture, "refetchable-connection-with-custom-variable-name.graphql", "compile_relay_artifacts_with_custom_id/fixtures/refetchable-connection-with-custom-variable-name.expected", input, expected); +} + #[test] fn refetchable_fragment_on_node_with_missing_id() { let input = include_str!("compile_relay_artifacts_with_custom_id/fixtures/refetchable-fragment-on-node-with-missing-id.graphql"); diff --git a/compiler/crates/relay-config/src/project_config.rs b/compiler/crates/relay-config/src/project_config.rs index d76dcbce01ab3..d3c62e888c340 100644 --- a/compiler/crates/relay-config/src/project_config.rs +++ b/compiler/crates/relay-config/src/project_config.rs @@ -156,6 +156,10 @@ pub struct SchemaConfig { #[serde(default = "default_node_interface_id_field")] pub node_interface_id_field: StringKey, + /// The name of the variable expected by the `node` query. + #[serde(default = "default_node_interface_id_variable_name")] + pub node_interface_id_variable_name: StringKey, + #[serde(default)] pub non_node_id_fields: Option, @@ -168,6 +172,10 @@ fn default_node_interface_id_field() -> StringKey { "id".intern() } +fn default_node_interface_id_variable_name() -> StringKey { + "id".intern() +} + fn default_unselectable_directive_name() -> DirectiveName { DirectiveName("unselectable".intern()) } @@ -177,6 +185,7 @@ impl Default for SchemaConfig { Self { connection_interface: ConnectionInterface::default(), node_interface_id_field: default_node_interface_id_field(), + node_interface_id_variable_name: default_node_interface_id_variable_name(), non_node_id_fields: None, unselectable_directive_name: default_unselectable_directive_name(), } diff --git a/compiler/crates/relay-transforms/src/refetchable_fragment/fetchable_query_generator.rs b/compiler/crates/relay-transforms/src/refetchable_fragment/fetchable_query_generator.rs index a0f6a7f259e17..a2aaca755199f 100644 --- a/compiler/crates/relay-transforms/src/refetchable_fragment/fetchable_query_generator.rs +++ b/compiler/crates/relay-transforms/src/refetchable_fragment/fetchable_query_generator.rs @@ -37,6 +37,7 @@ use super::build_used_global_variables; use super::validation_message::ValidationMessage; use super::QueryGenerator; use super::RefetchRoot; +use super::RefetchableIdentifierInfo; use super::RefetchableMetadata; use super::CONSTANTS; use crate::root_variables::VariableMap; @@ -72,7 +73,11 @@ fn build_refetch_operation( RefetchableMetadata { operation_name: query_name, path: vec![fetch_field_name], - identifier_field: Some(identifier_field_name), + identifier_info: Some(RefetchableIdentifierInfo { + identifier_field: identifier_field_name, + identifier_query_variable_name: schema_config + .node_interface_id_variable_name, + }), }, ), selections: enforce_selections_with_id_field( diff --git a/compiler/crates/relay-transforms/src/refetchable_fragment/node_query_generator.rs b/compiler/crates/relay-transforms/src/refetchable_fragment/node_query_generator.rs index 3a4ea581ae061..1f2167ed61c91 100644 --- a/compiler/crates/relay-transforms/src/refetchable_fragment/node_query_generator.rs +++ b/compiler/crates/relay-transforms/src/refetchable_fragment/node_query_generator.rs @@ -40,6 +40,7 @@ use super::build_used_global_variables; use super::validation_message::ValidationMessage; use super::QueryGenerator; use super::RefetchRoot; +use super::RefetchableIdentifierInfo; use super::RefetchableMetadata; use super::CONSTANTS; use crate::root_variables::VariableMap; @@ -120,7 +121,11 @@ fn build_refetch_operation( RefetchableMetadata { operation_name: query_name, path: vec![CONSTANTS.node_field_name], - identifier_field: Some(id_name), + identifier_info: Some(RefetchableIdentifierInfo { + identifier_field: id_name, + identifier_query_variable_name: schema_config + .node_interface_id_variable_name, + }), }, ), used_global_variables: build_used_global_variables( diff --git a/compiler/crates/relay-transforms/src/refetchable_fragment/query_query_generator.rs b/compiler/crates/relay-transforms/src/refetchable_fragment/query_query_generator.rs index dc0498f6c2ecb..c57212723a43c 100644 --- a/compiler/crates/relay-transforms/src/refetchable_fragment/query_query_generator.rs +++ b/compiler/crates/relay-transforms/src/refetchable_fragment/query_query_generator.rs @@ -41,7 +41,7 @@ fn build_refetch_operation( RefetchableMetadata { operation_name: query_name, path: vec![], - identifier_field: None, + identifier_info: None, }, ), used_global_variables: build_used_global_variables( diff --git a/compiler/crates/relay-transforms/src/refetchable_fragment/utils.rs b/compiler/crates/relay-transforms/src/refetchable_fragment/utils.rs index b8e7886aa82eb..a83c907a0b3a6 100644 --- a/compiler/crates/relay-transforms/src/refetchable_fragment/utils.rs +++ b/compiler/crates/relay-transforms/src/refetchable_fragment/utils.rs @@ -31,11 +31,17 @@ use lazy_static::lazy_static; use super::validation_message::ValidationMessage; use crate::root_variables::VariableMap; +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub struct RefetchableIdentifierInfo { + pub identifier_field: StringKey, + pub identifier_query_variable_name: StringKey, +} + #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub struct RefetchableMetadata { pub operation_name: OperationDefinitionName, pub path: Vec, - pub identifier_field: Option, + pub identifier_info: Option, } associated_data_impl!(RefetchableMetadata); diff --git a/compiler/crates/relay-transforms/src/refetchable_fragment/viewer_query_generator.rs b/compiler/crates/relay-transforms/src/refetchable_fragment/viewer_query_generator.rs index 54ce6bd2175e7..1179fc2e7c50a 100644 --- a/compiler/crates/relay-transforms/src/refetchable_fragment/viewer_query_generator.rs +++ b/compiler/crates/relay-transforms/src/refetchable_fragment/viewer_query_generator.rs @@ -50,7 +50,7 @@ fn build_refetch_operation( RefetchableMetadata { operation_name: query_name, path: vec![CONSTANTS.viewer_field_name], - identifier_field: None, + identifier_info: None, }, ), used_global_variables: build_used_global_variables( 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 3e7861c9aa8ad..127de74ef1461 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 @@ -102,8 +102,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend on User @__ClientEdgeGe # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { @@ -130,8 +133,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend_1 on User @__ClientEdge # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { 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 0f089a34924d6..33865ef977f41 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 @@ -110,8 +110,11 @@ fragment RefetchableClientEdgeQuery_Foo_node_PhotoStory__author__best_friend on # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { @@ -138,8 +141,11 @@ fragment RefetchableClientEdgeQuery_Foo_node_Story__author__best_friend on User # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { 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 b1b0d3b0e298c..f8bf32205b615 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 @@ -66,8 +66,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend on User @__ClientEdgeGe # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { 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 5a0b9b91a3ef2..22d14b6f7bdd3 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 @@ -70,8 +70,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend on User @__ClientEdgeGe # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { 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 d013e7157317e..3c7d85592fba8 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 @@ -70,8 +70,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_nearest_neighbor__best_friend on Us # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { 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 b3f3e6e179670..30f5785fec1cf 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 @@ -66,8 +66,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend on User @__ClientEdgeGe # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { 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 9b46c7b22cbb6..25b9f10f72c72 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 @@ -96,8 +96,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend on User @__ClientEdgeGe # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { @@ -150,8 +153,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend__best_friend on User @_ # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { 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 bf2374105ce18..30ca1626ec74c 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 @@ -92,8 +92,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend on User @__ClientEdgeGe # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { @@ -144,8 +147,11 @@ fragment RefetchableClientEdgeQuery_Foo_user_best_friend__best_friend on User @_ # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-interface-which-implementations-implement-node.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-interface-which-implementations-implement-node.expected index 4926ff054656e..3b47429b478f6 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-interface-which-implementations-implement-node.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-interface-which-implementations-implement-node.expected @@ -43,8 +43,11 @@ fragment RefetchableFragment on Actor @refetchable(queryName: "RefetchableFragme # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-interface-without-id.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-interface-without-id.expected index 24fcc9c8c238e..e9cc99a3138ca 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-interface-without-id.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-interface-without-id.expected @@ -26,8 +26,11 @@ fragment RefetchableFragment on AllConcreteTypesImplementNode @refetchable(query # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-node-interface-without-id.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-node-interface-without-id.expected index 41b3809f57666..96227bdc60b02 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-node-interface-without-id.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-node-interface-without-id.expected @@ -42,8 +42,11 @@ fragment RefetchableFragment on Node @refetchable(queryName: "RefetchableFragmen # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-node-interface.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-node-interface.expected index 56c23e5b6356e..719edd1457366 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-node-interface.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-node-interface.expected @@ -43,8 +43,11 @@ fragment RefetchableFragment on Node @refetchable(queryName: "RefetchableFragmen # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-non-node-fetchable-type.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-non-node-fetchable-type.expected index 9dd87caa451ef..672e971ecbd52 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-non-node-fetchable-type.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-non-node-fetchable-type.expected @@ -41,8 +41,11 @@ fragment RefetchableFragment on NonNodeStory @refetchable(queryName: "Refetchabl # path: [ # "fetch__NonNodeStory", # ], -# identifier_field: Some( -# "fetch_id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "fetch_id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-object-implementing-node-interface-with-alias-id.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-object-implementing-node-interface-with-alias-id.expected index 3575ea631bc28..3e7a1933617d2 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-object-implementing-node-interface-with-alias-id.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-object-implementing-node-interface-with-alias-id.expected @@ -41,8 +41,11 @@ fragment RefetchableFragment on User @refetchable(queryName: "RefetchableFragmen # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-object-implementing-node-interface.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-object-implementing-node-interface.expected index 90fe9a85f5572..1b53815a0f20a 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-object-implementing-node-interface.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-object-implementing-node-interface.expected @@ -41,8 +41,11 @@ fragment RefetchableFragment on User @refetchable(queryName: "RefetchableFragmen # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-query-with-cycle.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-query-with-cycle.expected index 5c5d20f3a1dd9..27799c67a20d0 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-query-with-cycle.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-query-with-cycle.expected @@ -68,7 +68,7 @@ fragment RefetchableFragment on Query @refetchable(queryName: "RefetchableFragme # "RefetchableFragmentQuery", # ), # path: [], -# identifier_field: None, +# identifier_info: None, # } { node(id: $id) { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-query.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-query.expected index d0f990fdaac31..7153d53d31403 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-query.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-query.expected @@ -44,7 +44,7 @@ fragment RefetchableFragment on Query @refetchable(queryName: "RefetchableFragme # "RefetchableFragmentQuery", # ), # path: [], -# identifier_field: None, +# identifier_info: None, # } { node(id: $id) { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-viewer.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-viewer.expected index 09f0c9d6ac7f7..37dd9ffe8e551 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-viewer.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-on-viewer.expected @@ -42,7 +42,7 @@ fragment RefetchableFragment on Viewer @refetchable(queryName: "RefetchableFragm # path: [ # "viewer", # ], -# identifier_field: None, +# identifier_info: None, # } { actor { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-object-implementing-node-interface.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-object-implementing-node-interface.expected index 125a1ff64e197..deb5551f00753 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-object-implementing-node-interface.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-object-implementing-node-interface.expected @@ -53,8 +53,11 @@ fragment RefetchableFragment on User @refetchable(queryName: "RefetchableFragmen # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-query.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-query.expected index 6ed24b57b60ad..360dd792018e8 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-query.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-query.expected @@ -54,7 +54,7 @@ fragment RefetchableFragment on Query @refetchable(queryName: "RefetchableFragme # "RefetchableFragmentQuery", # ), # path: [], -# identifier_field: None, +# identifier_info: None, # } { node(id: $id) { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-viewer.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-viewer.expected index fc3f6e3900796..1205eb4c93672 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-viewer.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/fragment-with-args-on-viewer.expected @@ -54,7 +54,7 @@ fragment RefetchableFragment on Viewer @refetchable(queryName: "RefetchableFragm # path: [ # "viewer", # ], -# identifier_field: None, +# identifier_info: None, # } { actor { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection-bidirectional.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection-bidirectional.expected index 1b6b932b5b44d..c880926364b69 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection-bidirectional.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection-bidirectional.expected @@ -78,8 +78,11 @@ fragment PaginationFragment on Node @refetchable(queryName: "RefetchableFragment # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection-with-stream.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection-with-stream.expected index be80f33782b6b..0e0f21a623129 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection-with-stream.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection-with-stream.expected @@ -68,8 +68,11 @@ fragment PaginationFragment on Node @refetchable(queryName: "RefetchableFragment # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection.expected index 37eb65f619c1e..a6264c1c6394b 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-fragment-with-connection.expected @@ -68,8 +68,11 @@ fragment PaginationFragment on Node @refetchable(queryName: "RefetchableFragment # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-all-implementing-types-impl-node.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-all-implementing-types-impl-node.expected index cd1ca7de5cb43..30357a05c64a1 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-all-implementing-types-impl-node.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-all-implementing-types-impl-node.expected @@ -40,8 +40,11 @@ fragment RefetchableFragment on RefetchableInterface @refetchable(queryName: "Re # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-but-no-implementing-types.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-but-no-implementing-types.expected index e847c8de938fb..6c5666e3fb179 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-but-no-implementing-types.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-but-no-implementing-types.expected @@ -39,8 +39,11 @@ fragment RefetchableFragmentFoo on RefetchableInterfaceFoo @refetchable(queryNam # path: [ # "node", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-some-types-impl-node.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-some-types-impl-node.expected index 84d3aef63c5b2..2995e4f9dd26d 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-some-types-impl-node.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface-some-types-impl-node.expected @@ -44,8 +44,11 @@ fragment RefetchableFragment on RefetchableInterface @refetchable(queryName: "Re # path: [ # "fetch__RefetchableInterface", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface.expected b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface.expected index 111bc31ee4b08..35264388f9240 100644 --- a/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface.expected +++ b/compiler/crates/relay-transforms/tests/refetchable_fragment/fixtures/refetchable-interface.expected @@ -68,8 +68,11 @@ fragment RefetchableFragment on RefetchableInterface @refetchable(queryName: "Re # path: [ # "fetch__RefetchableInterface", # ], -# identifier_field: Some( -# "id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "id", +# identifier_query_variable_name: "id", +# }, # ), # } { @@ -85,8 +88,11 @@ fragment RefetchableFragment2 on RefetchableInterface2 @refetchable(queryName: " # path: [ # "fetch__RefetchableInterface2", # ], -# identifier_field: Some( -# "not_id", +# identifier_info: Some( +# RefetchableIdentifierInfo { +# identifier_field: "not_id", +# identifier_query_variable_name: "id", +# }, # ), # } { diff --git a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest1Query_me__client_node.graphql.js b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest1Query_me__client_node.graphql.js index 587d40d97d031..2c3e1178f1834 100644 --- a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest1Query_me__client_node.graphql.js +++ b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest1Query_me__client_node.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<8b7e2ebba0da9d4dc59a9c5001ca2112>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_ClientEdgesTest1Query_me__client_node.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_ClientEdgesTest1Query_me__client_node", diff --git a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest2Query_me__client_node.graphql.js b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest2Query_me__client_node.graphql.js index e805db54a739c..9608d9d6f6816 100644 --- a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest2Query_me__client_node.graphql.js +++ b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest2Query_me__client_node.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<27b1fed880ee37fc241ddb4b04ac60c3>> + * @generated SignedSource<<9172cd1c8f829c7dce78fbd22a72f555>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_ClientEdgesTest2Query_me__client_node.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_ClientEdgesTest2Query_me__client_node", diff --git a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest3Query_me__client_node.graphql.js b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest3Query_me__client_node.graphql.js index 059f6b7e86d0f..ca0ab94c18acc 100644 --- a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest3Query_me__client_node.graphql.js +++ b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientEdgesTest3Query_me__client_node.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<368f2734b28b10a0e4ba2453a1e1407c>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_ClientEdgesTest3Query_me__client_node.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_ClientEdgesTest3Query_me__client_node", diff --git a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientOnlyQueriesTest3Query_hello_user.graphql.js b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientOnlyQueriesTest3Query_hello_user.graphql.js index 983580e521c9a..425a860018594 100644 --- a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientOnlyQueriesTest3Query_hello_user.graphql.js +++ b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_ClientOnlyQueriesTest3Query_hello_user.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<38119d2859c697aa13c27778fa54d347>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_ClientOnlyQueriesTest3Query_hello_user.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_ClientOnlyQueriesTest3Query_hello_user", diff --git a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_LiveResolversTest13Query_live_constant_client_edge.graphql.js b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_LiveResolversTest13Query_live_constant_client_edge.graphql.js index 62cab892da755..afd5df10827f7 100644 --- a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_LiveResolversTest13Query_live_constant_client_edge.graphql.js +++ b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_LiveResolversTest13Query_live_constant_client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_LiveResolversTest13Query_live_constant_client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_LiveResolversTest13Query_live_constant_client_edge", diff --git a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_LiveResolversTest15Query_live_user_resolver_always_suspend.graphql.js b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_LiveResolversTest15Query_live_user_resolver_always_suspend.graphql.js index 53ea975b62a9f..c28ee47b333a9 100644 --- a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_LiveResolversTest15Query_live_user_resolver_always_suspend.graphql.js +++ b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_LiveResolversTest15Query_live_user_resolver_always_suspend.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<2e5f3c3a15e68521b574ca5f72684bf6>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_LiveResolversTest15Query_live_user_resolver_always_suspend.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_LiveResolversTest15Query_live_user_resolver_always_suspend", diff --git a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_QueryResourceClientEdgesTest2Query_me__client_edge.graphql.js b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_QueryResourceClientEdgesTest2Query_me__client_edge.graphql.js index 91bbc3e4ca20e..f8a4ca3fe4b21 100644 --- a/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_QueryResourceClientEdgesTest2Query_me__client_edge.graphql.js +++ b/packages/react-relay/__tests__/__generated__/RefetchableClientEdgeQuery_QueryResourceClientEdgesTest2Query_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<294905380e1d78aa11cb855086aa97bc>> + * @generated SignedSource<<1bbbb7efcf5b7be9c316b87d91fff210>> * @flow * @lightSyntaxTransform * @nogrep @@ -45,7 +45,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_QueryResourceClientEdgesTest2Query_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_QueryResourceClientEdgesTest2Query_me__client_edge", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/RefetchableClientEdgeQuery_FragmentResourceClientEdgesTestFragment1_client_edge.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/RefetchableClientEdgeQuery_FragmentResourceClientEdgesTestFragment1_client_edge.graphql.js index 4c7792737c40d..dbb545d5052ac 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/RefetchableClientEdgeQuery_FragmentResourceClientEdgesTestFragment1_client_edge.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/RefetchableClientEdgeQuery_FragmentResourceClientEdgesTestFragment1_client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<1b4b3613e8eb27e8eb87b478b107648b>> + * @generated SignedSource<<4b70286945a5d40ef704aca8d8ffb04f>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_FragmentResourceClientEdgesTestFragment1_client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_FragmentResourceClientEdgesTestFragment1_client_edge", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTest2Fragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTest2Fragment.graphql.js index 33d57e5d4f3d2..7586664dd0365 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTest2Fragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTest2Fragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<169f364cafb7106b58e6f19eb668579e>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -104,7 +104,10 @@ return { "node" ], "operation": require('./useBlockingPaginationFragmentTest2FragmentPaginationQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useBlockingPaginationFragmentTest2Fragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTest4Fragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTest4Fragment.graphql.js index e745912d5c34d..3f3857ccea487 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTest4Fragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTest4Fragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -42,7 +42,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./useBlockingPaginationFragmentTest4FragmentRefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useBlockingPaginationFragmentTest4Fragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTestUserFragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTestUserFragment.graphql.js index 4678c0e486c85..a9362e3939613 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTestUserFragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentTestUserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<69b22a79c5e55847626b125c376b0ceb>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -121,7 +121,10 @@ return { "node" ], "operation": require('./useBlockingPaginationFragmentTestUserFragmentPaginationQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useBlockingPaginationFragmentTestUserFragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentWithSuspenseTransitionTestUserFragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentWithSuspenseTransitionTestUserFragment.graphql.js index 1099edc1b86ee..72b13a980cfa3 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentWithSuspenseTransitionTestUserFragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useBlockingPaginationFragmentWithSuspenseTransitionTestUserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<7243d1a57efc233d9be96f249683ad02>> + * @generated SignedSource<<1a2c32db911019bfa94d781c718e11a6>> * @flow * @lightSyntaxTransform * @nogrep @@ -116,7 +116,10 @@ return { "node" ], "operation": require('./useBlockingPaginationFragmentWithSuspenseTransitionTestUserFragmentPaginationQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useBlockingPaginationFragmentWithSuspenseTransitionTestUserFragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTest3Fragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTest3Fragment.graphql.js index 6fafdbca83c76..eb905e486855e 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTest3Fragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTest3Fragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<06910f3103bbd9cacf1d49c8ceb423d0>> + * @generated SignedSource<<287a510a57f147dc9086ffd1d27ddaae>> * @flow * @lightSyntaxTransform * @nogrep @@ -42,7 +42,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./usePaginationFragmentTest3FragmentRefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "usePaginationFragmentTest3Fragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestStoryFragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestStoryFragment.graphql.js index dfd166b6b4bf7..b5449c614b58f 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestStoryFragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestStoryFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<78d2548c61fb6ef49166b87871b6e52c>> * @flow * @lightSyntaxTransform * @nogrep @@ -80,7 +80,10 @@ return { "fetch__NonNodeStory" ], "operation": require('./usePaginationFragmentTestStoryFragmentRefetchQuery.graphql'), - "identifierField": "fetch_id" + "identifierInfo": { + "identifierField": "fetch_id", + "identifierQueryVariableName": "id" + } } }, "name": "usePaginationFragmentTestStoryFragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestUserFragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestUserFragment.graphql.js index d0c207e77edb9..5917ddb113524 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestUserFragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestUserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<38db53050ac518827b1a14880489e2fb>> * @flow * @lightSyntaxTransform * @nogrep @@ -121,7 +121,10 @@ return { "node" ], "operation": require('./usePaginationFragmentTestUserFragmentPaginationQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "usePaginationFragmentTestUserFragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestUserFragmentWithStreaming.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestUserFragmentWithStreaming.graphql.js index f9d61f3ac5d40..04e020b63add3 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestUserFragmentWithStreaming.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/usePaginationFragmentTestUserFragmentWithStreaming.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<8fac414c6ad6a4410aa7b98ba736f4b7>> + * @generated SignedSource<<43148d01576a91b8c9b8380b998b1063>> * @flow * @lightSyntaxTransform * @nogrep @@ -122,7 +122,10 @@ return { "node" ], "operation": require('./usePaginationFragmentTestUserFragmentStreamingPaginationQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "usePaginationFragmentTestUserFragmentWithStreaming", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTest1Fragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTest1Fragment.graphql.js index 82356118917e1..15d027a463743 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTest1Fragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTest1Fragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<7c2c05ec0d836f9fab77060b8dc4447e>> * @flow * @lightSyntaxTransform * @nogrep @@ -46,7 +46,10 @@ var node/*: ReaderFragment*/ = { "fetch__NonNodeStory" ], "operation": require('./useRefetchableFragmentNodeTest1FragmentRefetchQuery.graphql'), - "identifierField": "fetch_id" + "identifierInfo": { + "identifierField": "fetch_id", + "identifierQueryVariableName": "id" + } } }, "name": "useRefetchableFragmentNodeTest1Fragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTest3Fragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTest3Fragment.graphql.js index 4d9e5c135e1b0..82c8159aae111 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTest3Fragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTest3Fragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<9a8e6d62d25a5d79047dcc1db10f00d4>> * @flow * @lightSyntaxTransform * @nogrep @@ -53,7 +53,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./useRefetchableFragmentNodeTest3FragmentRefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useRefetchableFragmentNodeTest3Fragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTestUserFragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTestUserFragment.graphql.js index b7ae7de39b77a..9d9096b5c9bd2 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTestUserFragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTestUserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -53,7 +53,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./useRefetchableFragmentNodeTestUserFragmentRefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useRefetchableFragmentNodeTestUserFragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTestUserFragmentWithArgs.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTestUserFragmentWithArgs.graphql.js index cf380bbfab984..707eb03786bd3 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTestUserFragmentWithArgs.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeTestUserFragmentWithArgs.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<7794d486d753cec98e1680f705d910b6>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -54,7 +54,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./useRefetchableFragmentNodeTestUserFragmentWithArgsRefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useRefetchableFragmentNodeTestUserFragmentWithArgs", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeWithSuspenseTransitionTestUserFragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeWithSuspenseTransitionTestUserFragment.graphql.js index 9662abdb4c3fc..2f365bbc8f868 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeWithSuspenseTransitionTestUserFragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentNodeWithSuspenseTransitionTestUserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<2a7b050b23f0fb4fbccf0e8e669e4dd8>> + * @generated SignedSource<<78ea09cf1853f6f29afab6b209aea558>> * @flow * @lightSyntaxTransform * @nogrep @@ -53,7 +53,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./useRefetchableFragmentNodeWithSuspenseTransitionTestUserFragmentRefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useRefetchableFragmentNodeWithSuspenseTransitionTestUserFragment", diff --git a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentTestUserFragment.graphql.js b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentTestUserFragment.graphql.js index 125213c163d20..521a072aa1c07 100644 --- a/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentTestUserFragment.graphql.js +++ b/packages/react-relay/relay-hooks/__tests__/__generated__/useRefetchableFragmentTestUserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<799d1c5f3e177c392081edd3d9fc38f9>> * @flow * @lightSyntaxTransform * @nogrep @@ -53,7 +53,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./useRefetchableFragmentTestUserFragmentRefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "useRefetchableFragmentTestUserFragment", diff --git a/packages/react-relay/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js b/packages/react-relay/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js index b244110937efb..57e4be11d97ae 100644 --- a/packages/react-relay/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +++ b/packages/react-relay/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js @@ -72,12 +72,8 @@ function usePaginationFragment< ); const componentDisplayName = 'usePaginationFragment()'; - const { - connectionPathInFragmentData, - paginationRequest, - paginationMetadata, - identifierField, - } = getPaginationMetadata(fragmentNode, componentDisplayName); + const {connectionPathInFragmentData, paginationRequest, paginationMetadata} = + getPaginationMetadata(fragmentNode, componentDisplayName); const {fragmentData, fragmentRef, refetch} = useRefetchableFragmentInternal< TQuery, @@ -95,7 +91,6 @@ function usePaginationFragment< fragmentIdentifier, fragmentNode, fragmentRef, - identifierField, paginationMetadata, paginationRequest, }); @@ -111,7 +106,6 @@ function usePaginationFragment< fragmentIdentifier, fragmentNode, fragmentRef, - identifierField, paginationMetadata, paginationRequest, }); diff --git a/packages/react-relay/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js b/packages/react-relay/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js index 9466f8ed3a9ab..4d2029dc6d5bf 100644 --- a/packages/react-relay/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +++ b/packages/react-relay/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js @@ -11,6 +11,7 @@ 'use strict'; +import type {RefetchableIdentifierInfo} from '../../../relay-runtime/util/ReaderNode'; import type {LoaderFn} from '../useQueryLoader'; import type { ConcreteRequest, @@ -171,7 +172,7 @@ function useRefetchableFragmentNode< componentDisplayName: string, ): ReturnType { const parentEnvironment = useRelayEnvironment(); - const {refetchableRequest, fragmentRefPathInResponse, identifierField} = + const {refetchableRequest, fragmentRefPathInResponse, identifierInfo} = getRefetchMetadata(fragmentNode, componentDisplayName); const fragmentIdentifier = getFragmentIdentifier( fragmentNode, @@ -236,6 +237,7 @@ function useRefetchableFragmentNode< debugPreviousIDAndTypename = debugFunctions.getInitialIDAndType( refetchQuery.request.variables, fragmentRefPathInResponse, + identifierInfo?.identifierQueryVariableName, environment, ); } @@ -343,7 +345,7 @@ function useRefetchableFragmentNode< fragmentIdentifier, fragmentNode, fragmentRefPathInResponse, - identifierField, + identifierInfo, loadQuery, parentFragmentRef, refetchableRequest, @@ -377,17 +379,17 @@ function useRefetchFunction( fragmentIdentifier: string, fragmentNode: ReaderFragment, fragmentRefPathInResponse: $ReadOnlyArray, - identifierField: ?string, + identifierInfo: ?RefetchableIdentifierInfo, loadQuery: LoaderFn, parentFragmentRef: mixed, refetchableRequest: ConcreteRequest, ): RefetchFn { const isMountedRef = useIsMountedRef(); const identifierValue = - identifierField != null && + identifierInfo?.identifierField != null && fragmentData != null && typeof fragmentData === 'object' - ? fragmentData[identifierField] + ? fragmentData[identifierInfo.identifierField] : null; return useCallback( ( @@ -454,8 +456,10 @@ function useRefetchFunction( // If the query needs an identifier value ('id' or similar) and one // was not explicitly provided, read it from the fragment data. if ( - identifierField != null && - !providedRefetchVariables.hasOwnProperty('id') + identifierInfo != null && + !providedRefetchVariables.hasOwnProperty( + identifierInfo.identifierQueryVariableName, + ) ) { // @refetchable fragments are guaranteed to have an `id` selection // if the type is Node, implements Node, or is @fetchable. Double-check @@ -465,11 +469,13 @@ function useRefetchFunction( false, 'Relay: Expected result to have a string ' + '`%s` in order to refetch, got `%s`.', - identifierField, + identifierInfo.identifierField, identifierValue, ); } - (refetchVariables: $FlowFixMe).id = identifierValue; + (refetchVariables: $FlowFixMe)[ + identifierInfo.identifierQueryVariableName + ] = identifierValue; } const refetchQuery = createOperationDescriptor( @@ -518,10 +524,11 @@ if (__DEV__) { getInitialIDAndType( memoRefetchVariables: ?Variables, fragmentRefPathInResponse: $ReadOnlyArray, + identifierQueryVariableName: ?string, environment: IEnvironment, ): ?DebugIDandTypename { const {Record} = require('relay-runtime'); - const id = memoRefetchVariables?.id; + const id = memoRefetchVariables?.[identifierQueryVariableName ?? 'id']; if ( fragmentRefPathInResponse.length !== 1 || fragmentRefPathInResponse[0] !== 'node' || diff --git a/packages/react-relay/relay-hooks/useBlockingPaginationFragment.js b/packages/react-relay/relay-hooks/useBlockingPaginationFragment.js index c74b749c53a2a..f494a7a6a9152 100644 --- a/packages/react-relay/relay-hooks/useBlockingPaginationFragment.js +++ b/packages/react-relay/relay-hooks/useBlockingPaginationFragment.js @@ -89,7 +89,6 @@ function useBlockingPaginationFragment< const { connectionPathInFragmentData, - identifierField, paginationRequest, paginationMetadata, stream, @@ -132,7 +131,6 @@ function useBlockingPaginationFragment< fragmentIdentifier, fragmentNode, fragmentRef, - identifierField, paginationMetadata, paginationRequest, }); @@ -148,7 +146,6 @@ function useBlockingPaginationFragment< fragmentIdentifier, fragmentNode, fragmentRef, - identifierField, paginationMetadata, paginationRequest, }); diff --git a/packages/react-relay/relay-hooks/useLoadMoreFunction.js b/packages/react-relay/relay-hooks/useLoadMoreFunction.js index acb04a6d58d35..779574d1458ac 100644 --- a/packages/react-relay/relay-hooks/useLoadMoreFunction.js +++ b/packages/react-relay/relay-hooks/useLoadMoreFunction.js @@ -33,6 +33,7 @@ const { ConnectionInterface, createOperationDescriptor, getPaginationVariables, + getRefetchMetadata, getSelector, getValueAtPath, } = require('relay-runtime'); @@ -53,7 +54,6 @@ export type UseLoadMoreFunctionArgs = { fragmentIdentifier: string, fragmentData: mixed, connectionPathInFragmentData: $ReadOnlyArray, - identifierField: ?string, paginationRequest: ConcreteRequest, paginationMetadata: ReaderPaginationMetadata, componentDisplayName: string, @@ -76,17 +76,22 @@ function useLoadMoreFunction( componentDisplayName, observer, onReset, - identifierField, } = args; const environment = useRelayEnvironment(); const {isFetchingRef, startFetch, disposeFetch, completeFetch} = useFetchTrackingRef(); + + const {identifierInfo} = getRefetchMetadata( + fragmentNode, + componentDisplayName, + ); const identifierValue = - identifierField != null && + identifierInfo?.identifierField != null && fragmentData != null && typeof fragmentData === 'object' - ? fragmentData[identifierField] + ? fragmentData[identifierInfo.identifierField] : null; + const isMountedRef = useIsMountedRef(); const [mirroredEnvironment, setMirroredEnvironment] = useState(environment); const [mirroredFragmentIdentifier, setMirroredFragmentIdentifier] = @@ -201,7 +206,7 @@ function useLoadMoreFunction( // If the query needs an identifier value ('id' or similar) and one // was not explicitly provided, read it from the fragment data. - if (identifierField != null) { + if (identifierInfo != null) { // @refetchable fragments are guaranteed to have an `id` selection // if the type is Node, implements Node, or is @fetchable. Double-check // that there actually is a value at runtime. @@ -210,11 +215,12 @@ function useLoadMoreFunction( false, 'Relay: Expected result to have a string ' + '`%s` in order to refetch, got `%s`.', - identifierField, + identifierInfo.identifierField, identifierValue, ); } - paginationVariables.id = identifierValue; + paginationVariables[identifierInfo.identifierQueryVariableName] = + identifierValue; } const paginationQuery = createOperationDescriptor( diff --git a/packages/react-relay/relay-hooks/usePaginationFragment.js b/packages/react-relay/relay-hooks/usePaginationFragment.js index 748dfb55fc892..2a336424eba96 100644 --- a/packages/react-relay/relay-hooks/usePaginationFragment.js +++ b/packages/react-relay/relay-hooks/usePaginationFragment.js @@ -62,12 +62,8 @@ function usePaginationFragment_LEGACY< ); const componentDisplayName = 'usePaginationFragment()'; - const { - connectionPathInFragmentData, - paginationRequest, - paginationMetadata, - identifierField, - } = getPaginationMetadata(fragmentNode, componentDisplayName); + const {connectionPathInFragmentData, paginationRequest, paginationMetadata} = + getPaginationMetadata(fragmentNode, componentDisplayName); const {fragmentData, fragmentRef, refetch} = useRefetchableFragmentNode< $FlowFixMe, @@ -85,7 +81,6 @@ function usePaginationFragment_LEGACY< fragmentIdentifier, fragmentNode, fragmentRef, - identifierField, paginationMetadata, paginationRequest, }); @@ -100,7 +95,6 @@ function usePaginationFragment_LEGACY< fragmentIdentifier, fragmentNode, fragmentRef, - identifierField, paginationMetadata, paginationRequest, }); diff --git a/packages/react-relay/relay-hooks/useRefetchableFragmentNode.js b/packages/react-relay/relay-hooks/useRefetchableFragmentNode.js index b7c3ac014424e..7662a8ce0c0ed 100644 --- a/packages/react-relay/relay-hooks/useRefetchableFragmentNode.js +++ b/packages/react-relay/relay-hooks/useRefetchableFragmentNode.js @@ -11,6 +11,7 @@ 'use strict'; +import type {RefetchableIdentifierInfo} from '../../relay-runtime/util/ReaderNode'; import type {LoaderFn} from './useQueryLoader'; import type { ConcreteRequest, @@ -173,8 +174,10 @@ function useRefetchableFragmentNode< componentDisplayName: string, ): ReturnType { const parentEnvironment = useRelayEnvironment(); - const {refetchableRequest, fragmentRefPathInResponse, identifierField} = - getRefetchMetadata(fragmentNode, componentDisplayName); + const {refetchableRequest, fragmentRefPathInResponse} = getRefetchMetadata( + fragmentNode, + componentDisplayName, + ); const fragmentIdentifier = getFragmentIdentifier( fragmentNode, parentFragmentRef, @@ -214,6 +217,12 @@ function useRefetchableFragmentNode< >((refetchableRequest: $FlowFixMe)); let fragmentRef = parentFragmentRef; + + const {identifierInfo} = getRefetchMetadata( + fragmentNode, + componentDisplayName, + ); + if (shouldReset) { dispatch({ type: 'reset', @@ -239,6 +248,7 @@ function useRefetchableFragmentNode< debugPreviousIDAndTypename = debugFunctions.getInitialIDAndType( refetchQuery.request.variables, fragmentRefPathInResponse, + identifierInfo?.identifierQueryVariableName, environment, ); } @@ -345,7 +355,7 @@ function useRefetchableFragmentNode< fragmentIdentifier, fragmentNode, fragmentRefPathInResponse, - identifierField, + identifierInfo, loadQuery, parentFragmentRef, refetchableRequest, @@ -381,17 +391,17 @@ function useRefetchFunction( fragmentIdentifier: string, fragmentNode: ReaderFragment, fragmentRefPathInResponse: $ReadOnlyArray, - identifierField: ?string, + identifierInfo: ?RefetchableIdentifierInfo, loadQuery: LoaderFn, parentFragmentRef: mixed, refetchableRequest: ConcreteRequest, ): RefetchFn { const isMountedRef = useIsMountedRef(); const identifierValue = - identifierField != null && + identifierInfo?.identifierField != null && fragmentData != null && typeof fragmentData === 'object' - ? fragmentData[identifierField] + ? fragmentData[identifierInfo.identifierField] : null; return useCallback( ( @@ -458,8 +468,10 @@ function useRefetchFunction( // If the query needs an identifier value ('id' or similar) and one // was not explicitly provided, read it from the fragment data. if ( - identifierField != null && - !providedRefetchVariables.hasOwnProperty('id') + identifierInfo != null && + !providedRefetchVariables.hasOwnProperty( + identifierInfo.identifierQueryVariableName, + ) ) { // @refetchable fragments are guaranteed to have an `id` selection // if the type is Node, implements Node, or is @fetchable. Double-check @@ -469,11 +481,13 @@ function useRefetchFunction( false, 'Relay: Expected result to have a string ' + '`%s` in order to refetch, got `%s`.', - identifierField, + identifierInfo.identifierField, identifierValue, ); } - (refetchVariables: $FlowFixMe).id = identifierValue; + (refetchVariables: $FlowFixMe)[ + identifierInfo.identifierQueryVariableName + ] = identifierValue; } const refetchQuery = createOperationDescriptor( @@ -522,10 +536,11 @@ if (__DEV__) { getInitialIDAndType( memoRefetchVariables: ?Variables, fragmentRefPathInResponse: $ReadOnlyArray, + identifierQueryVariableName: ?string, environment: IEnvironment, ): ?DebugIDandTypename { const {Record} = require('relay-runtime'); - const id = memoRefetchVariables?.id; + const id = memoRefetchVariables?.[identifierQueryVariableName ?? 'id']; if ( fragmentRefPathInResponse.length !== 1 || fragmentRefPathInResponse[0] !== 'node' || diff --git a/packages/relay-compiler/README.md b/packages/relay-compiler/README.md index adfe85208b530..979620e129ab8 100644 --- a/packages/relay-compiler/README.md +++ b/packages/relay-compiler/README.md @@ -73,6 +73,7 @@ file sources, and "listen" to the file changes in the "watch" mode. If - `schemaConfig` - `nodeInterfaceIdField` Configure the name of the globally unique ID field on the Node interface. Useful if you can't use the default `id` field name. + - `nodeInterfaceIdVariableName` Specifies the name of the variable expected by the `node` query to pass the Node id. [string][default: "id"] - `nonNodeIdFields` Restricts the type of all fields named `id` to `ID`. - `allowedIdTypes` Mappings from types in your schema to allowed types diff --git a/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest2UserFragment.graphql.js b/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest2UserFragment.graphql.js index 2017f8de5f041..7138626f61d42 100644 --- a/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest2UserFragment.graphql.js +++ b/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest2UserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<99b2659aac414e5620cf540a3b13791b>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./GraphQLTagTestUserFragment1RefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "GraphQLTagTest2UserFragment", diff --git a/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest3UserFragment.graphql.js b/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest3UserFragment.graphql.js index 838f63678793c..aec7110766974 100644 --- a/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest3UserFragment.graphql.js +++ b/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest3UserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<4018b4e80f1d6432e56d1dfa7535a059>> + * @generated SignedSource<<8daad82cbca6de3764f2bf2ed141b351>> * @flow * @lightSyntaxTransform * @nogrep @@ -85,7 +85,10 @@ return { "node" ], "operation": require('./GraphQLTagTestUserFragment2RefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "GraphQLTagTest3UserFragment", diff --git a/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest5UserFragment.graphql.js b/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest5UserFragment.graphql.js index 24785fff621b4..412f610ef37da 100644 --- a/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest5UserFragment.graphql.js +++ b/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest5UserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<11da578433d138975c94a54c2626cc87>> + * @generated SignedSource<<7b5a78643acce4af8a23edc051d9a7d3>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./GraphQLTagTestUserFragment3RefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "GraphQLTagTest5UserFragment", diff --git a/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest6UserFragment.graphql.js b/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest6UserFragment.graphql.js index 31333eef99c3c..528ddcdb152c3 100644 --- a/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest6UserFragment.graphql.js +++ b/packages/relay-runtime/query/__tests__/__generated__/GraphQLTagTest6UserFragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<990accbcac33e8970b31abebfdb8ddf9>> + * @generated SignedSource<<7fa67ff6bb012fe145942de10f12f8a5>> * @flow * @lightSyntaxTransform * @nogrep @@ -85,7 +85,10 @@ return { "node" ], "operation": require('./GraphQLTagTestUserFragment4RefetchQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "GraphQLTagTest6UserFragment", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest1Query_me__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest1Query_me__client_edge.graphql.js index d7da8c36426f0..92eceb5d67b88 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest1Query_me__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest1Query_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<1c3802a11b3c43edbd60a1310b4ae15f>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderClientEdgesTest1Query_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderClientEdgesTest1Query_me__client_edge", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest2Query_me__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest2Query_me__client_edge.graphql.js index d99fd12252f62..317ce738a7cd1 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest2Query_me__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest2Query_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<3907c91ef6989ecfcc0f23c05c06be6b>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -45,7 +45,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderClientEdgesTest2Query_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderClientEdgesTest2Query_me__client_edge", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest3Query_me__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest3Query_me__client_edge.graphql.js index 9dd7a8f9d6a68..1a2fa3eeda1e7 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest3Query_me__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest3Query_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<8a73771292d1141c30dbe0de66b22144>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -44,7 +44,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderClientEdgesTest3Query_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderClientEdgesTest3Query_me__client_edge", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge.graphql.js index 4c96289085b99..5685371aae18b 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<<6ff8e6f67c61293509ba016782dc028b>> * @flow * @lightSyntaxTransform * @nogrep @@ -55,7 +55,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge__another_client_edge.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge__another_client_edge.graphql.js index 62833ab725080..addf4c1bdbdec 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge__another_client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge__another_client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge__another_client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderClientEdgesTest4Query_me__client_edge__another_client_edge", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest5Query_me__client_extension_linked_field__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest5Query_me__client_extension_linked_field__client_edge.graphql.js index 8d33da47ecf20..1190427b81c66 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest5Query_me__client_extension_linked_field__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest5Query_me__client_extension_linked_field__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<8d81f4a70ab5e158ffad5a1a1cb9bf20>> + * @generated SignedSource<<2e579079be8fbf9250e99cd159c62a8c>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderClientEdgesTest5Query_me__client_extension_linked_field__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderClientEdgesTest5Query_me__client_extension_linked_field__client_edge", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest6Query_me__the_alias.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest6Query_me__the_alias.graphql.js index 6cfb7a5c23057..cbec88e78dac4 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest6Query_me__the_alias.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest6Query_me__the_alias.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<370f2f8e5400766a979a7c663fa2ce6a>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderClientEdgesTest6Query_me__the_alias.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderClientEdgesTest6Query_me__the_alias", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest7Query_me__null_client_edge.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest7Query_me__null_client_edge.graphql.js index a0aff1512a9cd..43e38ec1a0070 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest7Query_me__null_client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderClientEdgesTest7Query_me__null_client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<5394b7a4bfe5d4c8b429f3b05cde6fda>> + * @generated SignedSource<<3ba1d057907a8ad61aca61235523a1b3>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderClientEdgesTest7Query_me__null_client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderClientEdgesTest7Query_me__null_client_edge", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderRequiredFieldsTest28Query_live_user_resolver_always_suspend.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderRequiredFieldsTest28Query_live_user_resolver_always_suspend.graphql.js index 39d4aaaf34ba7..2195a5c8b2f1e 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderRequiredFieldsTest28Query_live_user_resolver_always_suspend.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderRequiredFieldsTest28Query_live_user_resolver_always_suspend.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<385c769ac8e9e37700514ca159c40756>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderRequiredFieldsTest28Query_live_user_resolver_always_suspend.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderRequiredFieldsTest28Query_live_user_resolver_always_suspend", diff --git a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderResolverTest24Query_me__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderResolverTest24Query_me__client_edge.graphql.js index 95697bddf5753..fcb1dfa92c092 100644 --- a/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderResolverTest24Query_me__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/__generated__/RefetchableClientEdgeQuery_RelayReaderResolverTest24Query_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<768501c48375b9cd265e1ca1f28a6be0>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_RelayReaderResolverTest24Query_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_RelayReaderResolverTest24Query_me__client_edge", diff --git a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_LiveExternalGreetingFragment_user.graphql.js b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_LiveExternalGreetingFragment_user.graphql.js index d8c7eb643f408..e5f262118240f 100644 --- a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_LiveExternalGreetingFragment_user.graphql.js +++ b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_LiveExternalGreetingFragment_user.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<97b6fd7bad5fcac105510cd2b235f965>> + * @generated SignedSource<<28f257fe1aeac1511dcfef10e4fdcaf8>> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_LiveExternalGreetingFragment_user.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_LiveExternalGreetingFragment_user", diff --git a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_LiveResolversTestUnsubscribesWhenSuspendsQuery_user.graphql.js b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_LiveResolversTestUnsubscribesWhenSuspendsQuery_user.graphql.js index 9565882bb332e..07f7b14762d4c 100644 --- a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_LiveResolversTestUnsubscribesWhenSuspendsQuery_user.graphql.js +++ b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_LiveResolversTestUnsubscribesWhenSuspendsQuery_user.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<02f06f3b82d93c55847bce5d5f4da3ba>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -42,7 +42,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_LiveResolversTestUnsubscribesWhenSuspendsQuery_user.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_LiveResolversTestUnsubscribesWhenSuspendsQuery_user", diff --git a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerQuery_me__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerQuery_me__client_edge.graphql.js index cdbf55e84990b..e85e993df4a18 100644 --- a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerQuery_me__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerQuery_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -62,7 +62,10 @@ return { "node" ], "operation": require('./ClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerQuery_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerQuery_me__client_edge", diff --git a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge.graphql.js index 2cead50b3092f..8f756745fc480 100644 --- a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<0bb6f8d46d9b4cd925a53212bcd6b7a5>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -72,7 +72,10 @@ return { "node" ], "operation": require('./ClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge", diff --git a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge__another_client_edge.graphql.js b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge__another_client_edge.graphql.js index eb3a77855be1b..bfc2ce6474f0c 100644 --- a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge__another_client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge__another_client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<69a75fdd1599dd19df56af20f9a1c99c>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge__another_client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_ResolverGCTestResolverClientEdgeToServerRecursiveQuery_me__client_edge__another_client_edge", diff --git a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverTest3Query_me__client_edge.graphql.js b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverTest3Query_me__client_edge.graphql.js index cc9aa4016ff7c..f713fac94188b 100644 --- a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverTest3Query_me__client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_ResolverTest3Query_me__client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<9f9dc98e2dea2aa91bff4a3e6b91c837>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_ResolverTest3Query_me__client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_ResolverTest3Query_me__client_edge", diff --git a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_UserReadsClientEdgeResolver_client_edge.graphql.js b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_UserReadsClientEdgeResolver_client_edge.graphql.js index c5e9c4e49a1c6..549a9c6f997db 100644 --- a/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_UserReadsClientEdgeResolver_client_edge.graphql.js +++ b/packages/relay-runtime/store/__tests__/resolvers/__generated__/RefetchableClientEdgeQuery_UserReadsClientEdgeResolver_client_edge.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<<18ca59fec6559882d9d29737a41b85fd>> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -43,7 +43,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ClientEdgeQuery_UserReadsClientEdgeResolver_client_edge.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "RefetchableClientEdgeQuery_UserReadsClientEdgeResolver_client_edge", diff --git a/packages/relay-runtime/store/__tests__/resolvers/__generated__/ResolverTest2Fragment.graphql.js b/packages/relay-runtime/store/__tests__/resolvers/__generated__/ResolverTest2Fragment.graphql.js index 8c480046fcf0a..b23fa8195c285 100644 --- a/packages/relay-runtime/store/__tests__/resolvers/__generated__/ResolverTest2Fragment.graphql.js +++ b/packages/relay-runtime/store/__tests__/resolvers/__generated__/ResolverTest2Fragment.graphql.js @@ -6,7 +6,7 @@ * * @oncall relay * - * @generated SignedSource<> + * @generated SignedSource<> * @flow * @lightSyntaxTransform * @nogrep @@ -50,7 +50,10 @@ var node/*: ReaderFragment*/ = { "node" ], "operation": require('./ResolverTest1FragmentRefetchableQuery.graphql'), - "identifierField": "id" + "identifierInfo": { + "identifierField": "id", + "identifierQueryVariableName": "id" + } } }, "name": "ResolverTest2Fragment", diff --git a/packages/relay-runtime/util/ReaderNode.js b/packages/relay-runtime/util/ReaderNode.js index 795f3447a0214..118252414b825 100644 --- a/packages/relay-runtime/util/ReaderNode.js +++ b/packages/relay-runtime/util/ReaderNode.js @@ -76,13 +76,28 @@ export type ReaderPaginationFragment = { }, }; -export type ReaderRefetchMetadata = { - +connection?: ?ReaderPaginationMetadata, - +operation: string | ConcreteRequest, - +fragmentPathInResult: Array, - +identifierField?: ?string, +export type RefetchableIdentifierInfo = { + +identifierField: string, + +identifierQueryVariableName: string, }; +export type ReaderRefetchMetadata = + | { + +connection?: ?ReaderPaginationMetadata, + +operation: string | ConcreteRequest, + +fragmentPathInResult: Array, + +identifierInfo?: ?RefetchableIdentifierInfo, + } + | { + // TODO(T154006492) Legacy form of ConnectionMetadata included for + // backwards compatibility while we rollout compiler changes to emit + // RefetchableIdentifierInfo + +connection?: ?ReaderPaginationMetadata, + +operation: string | ConcreteRequest, + +fragmentPathInResult: Array, + +identifierField?: ?string, + }; + // Stricter form of ConnectionMetadata export type ReaderPaginationMetadata = { +backward: { diff --git a/packages/relay-runtime/util/getIdentifierInfo.js b/packages/relay-runtime/util/getIdentifierInfo.js new file mode 100644 index 0000000000000..258c4b40e04c4 --- /dev/null +++ b/packages/relay-runtime/util/getIdentifierInfo.js @@ -0,0 +1,32 @@ +/** + * 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 + */ + +import type { + ReaderRefetchMetadata, + RefetchableIdentifierInfo, +} from './ReaderNode'; + +// TODO(T154006492): Temporary module. identifierInfo is a new structure that replaces the +// string identifierField. This function is needed to support rolling out the +// runtime changes that use the new structure (and types) before we rollout the +// compiler changes that emit the new structure. +function getIdentifierInfo( + refetchMetadata: ReaderRefetchMetadata, +): ?RefetchableIdentifierInfo { + if (refetchMetadata.identifierField != null) { + return { + identifierField: refetchMetadata.identifierField, + identifierQueryVariableName: refetchMetadata.identifierField, + }; + } + return refetchMetadata.identifierInfo; +} +module.exports = getIdentifierInfo; diff --git a/packages/relay-runtime/util/getPaginationMetadata.js b/packages/relay-runtime/util/getPaginationMetadata.js index c5577ec76dede..d621be4892f05 100644 --- a/packages/relay-runtime/util/getPaginationMetadata.js +++ b/packages/relay-runtime/util/getPaginationMetadata.js @@ -14,6 +14,7 @@ import type {ReaderFragment, ReaderPaginationMetadata} from './ReaderNode'; import type {ConcreteRequest} from './RelayConcreteNode'; +const getIdentifierInfo = require('./getIdentifierInfo'); const getRefetchMetadata = require('./getRefetchMetadata'); const invariant = require('invariant'); @@ -50,14 +51,15 @@ function getPaginationMetadata( componentDisplayName, fragmentNode.name, ); - const identifierField = refetchMetadata.identifierField; + const identifierInfo = getIdentifierInfo(refetchMetadata); invariant( - identifierField == null || typeof identifierField === 'string', + identifierInfo?.identifierField == null || + typeof identifierInfo.identifierField === 'string', 'Relay: getRefetchMetadata(): Expected `identifierField` to be a string.', ); return { connectionPathInFragmentData, - identifierField, + identifierField: identifierInfo?.identifierField, paginationRequest, paginationMetadata, stream: connectionMetadata.stream === true, diff --git a/packages/relay-runtime/util/getRefetchMetadata.js b/packages/relay-runtime/util/getRefetchMetadata.js index 60f3c61d69099..7b119705ad9d7 100644 --- a/packages/relay-runtime/util/getRefetchMetadata.js +++ b/packages/relay-runtime/util/getRefetchMetadata.js @@ -11,9 +11,14 @@ 'use strict'; -import type {ReaderFragment, ReaderRefetchMetadata} from './ReaderNode'; +import type { + ReaderFragment, + ReaderRefetchMetadata, + RefetchableIdentifierInfo, +} from './ReaderNode'; import type {ConcreteRequest} from './RelayConcreteNode'; +const getIdentifierInfo = require('./getIdentifierInfo'); const invariant = require('invariant'); function getRefetchMetadata( @@ -21,7 +26,7 @@ function getRefetchMetadata( componentDisplayName: string, ): { fragmentRefPathInResponse: $ReadOnlyArray, - identifierField: ?string, + identifierInfo: ?RefetchableIdentifierInfo, refetchableRequest: ConcreteRequest, refetchMetadata: ReaderRefetchMetadata, } { @@ -58,14 +63,22 @@ function getRefetchMetadata( 'this is likely a bug in Relay.', componentDisplayName, ); - const identifierField = refetchMetadata.identifierField; - invariant( - identifierField == null || typeof identifierField === 'string', - 'Relay: getRefetchMetadata(): Expected `identifierField` to be a string.', - ); + const identifierInfo = getIdentifierInfo(refetchMetadata); + if (identifierInfo != null) { + invariant( + identifierInfo.identifierField == null || + typeof identifierInfo.identifierField === 'string', + 'Relay: getRefetchMetadata(): Expected `identifierField` to be a string.', + ); + invariant( + identifierInfo.identifierQueryVariableName == null || + typeof identifierInfo.identifierQueryVariableName === 'string', + 'Relay: getRefetchMetadata(): Expected `identifierQueryVariableName` to be a string.', + ); + } return { fragmentRefPathInResponse, - identifierField, + identifierInfo, refetchableRequest, refetchMetadata, };