Skip to content

Commit 914d78c

Browse files
authored
fix(response-cache): extra __typename props in the execution result (#1873)
1 parent 458189a commit 914d78c

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

.changeset/dull-maps-care.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@envelop/response-cache': patch
3+
---
4+
5+
Do not revisit cached parser result which adds extra \_\_typename properties in the execution result

packages/plugins/response-cache/src/plugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ export function useResponseCache<PluginContext extends Record<string, any> = {}>
251251
return {
252252
onParse() {
253253
return ({ result, replaceParseResult }) => {
254-
if (result.kind === Kind.DOCUMENT) {
254+
if (!originalDocumentMap.has(result) && result.kind === Kind.DOCUMENT) {
255255
const newDocument = addTypeNameToDocument(result);
256256
replaceParseResult(newDocument);
257257
}

packages/plugins/response-cache/test/response-cache.spec.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1466,7 +1466,6 @@ describe('useResponseCache', () => {
14661466
});
14671467

14681468
it.skip('cache is purged upon mutation even when error is included in the mutation execution result', async () => {
1469-
3;
14701469
const spy = jest.fn(() => [
14711470
{
14721471
id: 1,
@@ -2003,6 +2002,51 @@ describe('useResponseCache', () => {
20032002
ttl: Infinity,
20042003
});
20052004
});
2005+
2006+
it('works with parse caching', async () => {
2007+
const schema = makeExecutableSchema({
2008+
typeDefs: /* GraphQL */ `
2009+
type Query {
2010+
foo: String
2011+
}
2012+
`,
2013+
resolvers: {
2014+
Query: {
2015+
foo: () => 'bar',
2016+
},
2017+
},
2018+
});
2019+
const operation = /* GraphQL */ `
2020+
query {
2021+
foo
2022+
}
2023+
`;
2024+
const testkit = createTestkit(
2025+
[
2026+
useResponseCache({
2027+
session: () => null,
2028+
ttl: 0,
2029+
}),
2030+
useParserCache(),
2031+
],
2032+
schema,
2033+
);
2034+
2035+
const result = await testkit.execute(operation);
2036+
assertSingleExecutionValue(result);
2037+
expect(result).toEqual({
2038+
data: {
2039+
foo: 'bar',
2040+
},
2041+
});
2042+
const cachedResult = await testkit.execute(operation);
2043+
assertSingleExecutionValue(result);
2044+
expect(cachedResult).toEqual({
2045+
data: {
2046+
foo: 'bar',
2047+
},
2048+
});
2049+
});
20062050
});
20072051

20082052
describe('ignoring and ttl per type for types without id field', () => {
@@ -2194,6 +2238,7 @@ describe('useResponseCache', () => {
21942238
onExecute({ setExecuteFn }) {
21952239
setExecuteFn(() => ({
21962240
data: {
2241+
__typename: 'Query',
21972242
foo: 'bar',
21982243
},
21992244
extensions: {
@@ -2249,6 +2294,7 @@ describe('useResponseCache', () => {
22492294
onExecute({ setExecuteFn }) {
22502295
setExecuteFn(() => ({
22512296
data: {
2297+
__typename: 'Query',
22522298
foo: 'bar',
22532299
},
22542300
extensions: {

0 commit comments

Comments
 (0)