Skip to content

Commit

Permalink
add enabledProvider argument inside @exec_time_resolvers directive (r…
Browse files Browse the repository at this point in the history
…untime + artifacts)

Reviewed By: tyao1

Differential Revision: D69763472

fbshipit-source-id: 6dcebf4dcec127ca17f5d762a991c38c7d66b699
  • Loading branch information
lynnshaoyu authored and facebook-github-bot committed Feb 22, 2025
1 parent 322d60a commit e29e1f9
Show file tree
Hide file tree
Showing 6 changed files with 574 additions and 24 deletions.
5 changes: 4 additions & 1 deletion packages/relay-runtime/store/RelayReader.js
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,10 @@ class RelayReader {
this._fieldErrors = null;
this._owner = selector.owner;
this._useExecTimeResolvers =
this._owner.node.operation.use_exec_time_resolvers ?? false;
this._owner.node.operation.use_exec_time_resolvers ??
this._owner.node.operation.exec_time_resolvers_enabled_provider?.get() ===
true ??
false;
this._recordSource = recordSource;
this._seenRecords = new Set();
this._selector = selector;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,12 @@ export function RelayReaderExecResolversTest_user_one(): IdOf<'RelayReaderExecRe
* not as read time resolver queries.
*/
describe('RelayReaderExecResolvers', () => {
it('reads exec_time_resolvers without calling the resolvers', () => {
it('reads exec_time_resolvers without calling the resolvers when provider returns true', () => {
const Query = graphql`
query RelayReaderExecResolversTestRunsQuery @exec_time_resolvers {
query RelayReaderExecResolversTestRunsQuery
@exec_time_resolvers(
enabledProvider: "relayReaderTestExecTimeResolversTrueProvider"
) {
RelayReaderExecResolversTest_user_one {
name
best_friend {
Expand Down Expand Up @@ -151,4 +154,78 @@ describe('RelayReaderExecResolvers', () => {
},
});
});

it('reads read time resolvers when exec time resolvers provider returns false', () => {
const Query = graphql`
query RelayReaderExecResolversTestRunsNoProviderQuery
@exec_time_resolvers(
enabledProvider: "relayReaderTestExecTimeResolversFalseProvider"
) {
RelayReaderExecResolversTest_user_one {
name
best_friend {
name
}
friends {
name
}
}
}
`;
const operation = createOperationDescriptor(Query, {});
const source = new RelayRecordSource({
'client:root': {
__id: 'client:root',
__typename: '__Root',
RelayReaderExecResolversTest_user_one: {__ref: '1'},
},
'1': {
__id: '1',
name: 'Alice',
friends: {__refs: ['2', '3', '4']},
},
'2': {
__id: '2',
name: 'Bob',
},
'3': {
__id: '3',
name: 'Claire',
},
'4': {
__id: '4',
name: 'Dennis',
},
});
const resolverStore = new RelayModernStore(source);
const {data} = read(
source,
operation.fragment,
new LiveResolverCache(() => source, resolverStore),
);

expect(modelMock).toBeCalled();
expect(nameMock).toBeCalled();
expect(user_oneMock).toBeCalled();
expect(friendsMock).toBeCalled();
expect(data).toEqual({
RelayReaderExecResolversTest_user_one: {
best_friend: {
name: 'Bob',
},
friends: [
{
name: 'Bob',
},
{
name: 'Claire',
},
{
name: 'Dennis',
},
],
name: 'Alice',
},
});
});
});
Loading

0 comments on commit e29e1f9

Please # to comment.