Skip to content

Commit

Permalink
import ClientRequest for client only mutations
Browse files Browse the repository at this point in the history
Reviewed By: alunyov

Differential Revision: D50805852

fbshipit-source-id: 222e4e81becfa62b108afdb1fab17189f7163d3b
  • Loading branch information
Alex Danoff authored and facebook-github-bot committed Oct 31, 2023
1 parent c36131a commit 22a3c89
Show file tree
Hide file tree
Showing 7 changed files with 294 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,13 @@ impl ArtifactGeneratedTypes {
("Query", "ConcreteRequest, Query")
}
}
OperationKind::Mutation => ("Mutation", "ConcreteRequest, Mutation"),
OperationKind::Mutation => {
if is_client_only {
("Mutation", "ClientRequest, Mutation")
} else {
("Mutation", "ConcreteRequest, Mutation")
}
}
OperationKind::Subscription => (
"GraphQLSubscription",
"ConcreteRequest, GraphQLSubscription",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
==================================== INPUT ====================================
//- bar.js
graphql`mutation barMutation {
foo_mutation
}`

//- relay.config.json
{
"language": "flow",
"schema": "./schema.graphql",
"eagerEsModules": true,
"featureFlags": {
"enable_relay_resolver_transform": true
},
"schemaExtensions": [
"./extensions.graphql"
]
}

//- schema.graphql

type Mutation


//- extensions.graphql

extend type Mutation {
foo_mutation: Boolean
}
==================================== OUTPUT ===================================
//- __generated__/barMutation.graphql.js
/**
* <auto-generated> SignedSource<<8c2ec235b8b068c2c2fffbc3aae787b8>>
* @flow
* @lightSyntaxTransform
* @nogrep
*/

/* eslint-disable */

'use strict';

/*::
import type { ClientRequest, Mutation } from 'relay-runtime';
export type barMutation$variables = {||};
export type barMutation$data = {|
+foo_mutation: ?boolean,
|};
export type barMutation = {|
response: barMutation$data,
variables: barMutation$variables,
|};
*/

var node/*: ClientRequest*/ = (function(){
var v0 = [
{
"kind": "ClientExtension",
"selections": [
{
"alias": null,
"args": null,
"kind": "ScalarField",
"name": "foo_mutation",
"storageKey": null
}
]
}
];
return {
"fragment": {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "barMutation",
"selections": (v0/*: any*/),
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [],
"kind": "Operation",
"name": "barMutation",
"selections": (v0/*: any*/)
},
"params": {
"cacheID": "b7409af7b3a13247f776ad3f9192c84b",
"id": null,
"metadata": {},
"name": "barMutation",
"operationKind": "mutation",
"text": null
}
};
})();

(node/*: any*/).hash = "1f3610a117a92bb877caf826f77fae63";

export default ((node/*: any*/)/*: Mutation<
barMutation$variables,
barMutation$data,
>*/);
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//- bar.js
graphql`mutation barMutation {
foo_mutation
}`

//- relay.config.json
{
"language": "flow",
"schema": "./schema.graphql",
"eagerEsModules": true,
"featureFlags": {
"enable_relay_resolver_transform": true
},
"schemaExtensions": [
"./extensions.graphql"
]
}

//- schema.graphql

type Mutation


//- extensions.graphql

extend type Mutation {
foo_mutation: Boolean
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
==================================== INPUT ====================================
//- foo.js
/**
* @RelayResolver Mutation.foo_mutation: Boolean
*/

//- bar.js
graphql`mutation barMutation {
foo_mutation
}`

//- relay.config.json
{
"language": "flow",
"schema": "./schema.graphql",
"eagerEsModules": true,
"featureFlags": {
"enable_relay_resolver_transform": true
}
}

//- schema.graphql

type Mutation
==================================== OUTPUT ===================================
//- __generated__/barMutation.graphql.js
/**
* <auto-generated> SignedSource<<7f1de50339842bab9cecc72c6fbc076f>>
* @flow
* @lightSyntaxTransform
* @nogrep
*/

/* eslint-disable */

'use strict';

/*::
import type { ClientRequest, Mutation } from 'relay-runtime';
import {foo_mutation as mutationFooMutationResolverType} from "../foo.js";
// Type assertion validating that `mutationFooMutationResolverType` resolver is correctly implemented.
// A type error here indicates that the type signature of the resolver module is incorrect.
(mutationFooMutationResolverType: () => ?boolean);
export type barMutation$variables = {||};
export type barMutation$data = {|
+foo_mutation: ?boolean,
|};
export type barMutation = {|
response: barMutation$data,
variables: barMutation$variables,
|};
*/

import {foo_mutation as mutationFooMutationResolver} from './../foo';

var node/*: ClientRequest*/ = {
"fragment": {
"argumentDefinitions": [],
"kind": "Fragment",
"metadata": null,
"name": "barMutation",
"selections": [
{
"kind": "ClientExtension",
"selections": [
{
"alias": null,
"args": null,
"fragment": null,
"kind": "RelayResolver",
"name": "foo_mutation",
"resolverModule": mutationFooMutationResolver,
"path": "foo_mutation"
}
]
}
],
"type": "Mutation",
"abstractKey": null
},
"kind": "Request",
"operation": {
"argumentDefinitions": [],
"kind": "Operation",
"name": "barMutation",
"selections": [
{
"kind": "ClientExtension",
"selections": [
{
"name": "foo_mutation",
"args": null,
"fragment": null,
"kind": "RelayResolver",
"storageKey": null,
"isOutputType": true
}
]
}
]
},
"params": {
"cacheID": "b7409af7b3a13247f776ad3f9192c84b",
"id": null,
"metadata": {},
"name": "barMutation",
"operationKind": "mutation",
"text": null
}
};

(node/*: any*/).hash = "1f3610a117a92bb877caf826f77fae63";

export default ((node/*: any*/)/*: Mutation<
barMutation$variables,
barMutation$data,
>*/);
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//- foo.js
/**
* @RelayResolver Mutation.foo_mutation: Boolean
*/

//- bar.js
graphql`mutation barMutation {
foo_mutation
}`

//- relay.config.json
{
"language": "flow",
"schema": "./schema.graphql",
"eagerEsModules": true,
"featureFlags": {
"enable_relay_resolver_transform": true
}
}

//- schema.graphql

type Mutation
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,28 @@
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @generated SignedSource<<04c298d7b18b4ef4e4be2c9c820b2e46>>
* @generated SignedSource<<6a4360c4cb2d5b7641f3a41ae33f6a27>>
*/

mod relay_compiler_integration;

use relay_compiler_integration::transform_fixture;
use fixture_tests::test_fixture;

#[tokio::test]
async fn client_mutation_extension() {
let input = include_str!("relay_compiler_integration/fixtures/client_mutation_extension.input");
let expected = include_str!("relay_compiler_integration/fixtures/client_mutation_extension.expected");
test_fixture(transform_fixture, "client_mutation_extension.input", "relay_compiler_integration/fixtures/client_mutation_extension.expected", input, expected).await;
}

#[tokio::test]
async fn client_mutation_resolver() {
let input = include_str!("relay_compiler_integration/fixtures/client_mutation_resolver.input");
let expected = include_str!("relay_compiler_integration/fixtures/client_mutation_resolver.expected");
test_fixture(transform_fixture, "client_mutation_resolver.input", "relay_compiler_integration/fixtures/client_mutation_resolver.expected", input, expected).await;
}

#[tokio::test]
async fn simple_fragment() {
let input = include_str!("relay_compiler_integration/fixtures/simple_fragment.input");
Expand Down
2 changes: 1 addition & 1 deletion packages/relay-runtime/util/RelayConcreteNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export type ClientRequestParameters = {
+text: null,
// common fields
+name: string,
+operationKind: 'query',
+operationKind: 'query' | 'mutation',
+providedVariables?: ProvidedVariablesType,
+metadata: {[key: string]: mixed, ...},
};
Expand Down

0 comments on commit 22a3c89

Please sign in to comment.