Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: deep merge resolvers #11760

Merged
merged 21 commits into from
Apr 15, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
5d6a069
feat: deep merge resolvers by default
alessbell Apr 5, 2024
912220a
chore: add changeset
alessbell Apr 5, 2024
12a5f36
chore: update comment
alessbell Apr 8, 2024
0fb94cc
chore: add reset test, remove option
alessbell Apr 10, 2024
696a15d
chore: update changeset
alessbell Apr 10, 2024
49d9557
Merge branch 'release-3.10' into issue-11758-merging-resolvers
alessbell Apr 10, 2024
cd40f9c
Merge branch 'release-3.10' of github.com:apollographql/apollo-client…
alessbell Apr 10, 2024
c10dd8b
chore: update changeset
alessbell Apr 10, 2024
52afa27
Merge branch 'release-3.10' into issue-11758-merging-resolvers
alessbell Apr 10, 2024
ce4f9cd
fix: update function names in tests
alessbell Apr 10, 2024
178eb83
fix: remove unused useTrackRenders
alessbell Apr 12, 2024
b6bf236
Merge branch 'release-3.10' of github.com:apollographql/apollo-client…
alessbell Apr 12, 2024
f51a233
Merge branch 'release-3.10' into issue-11758-merging-resolvers
alessbell Apr 12, 2024
25872f6
chore: fix tests post-merge and merge resolvers in .fork
alessbell Apr 12, 2024
b36407b
Merge branch 'release-3.10' into issue-11758-merging-resolvers
alessbell Apr 12, 2024
b95cad4
chore: comment out flaky test
alessbell Apr 12, 2024
07a568a
Merge branch 'issue-11758-merging-resolvers' of github.com:apollograp…
alessbell Apr 12, 2024
712d338
chore: update comment with link to issue
alessbell Apr 12, 2024
0d49273
commit failing test
alessbell Apr 12, 2024
0130771
chore: fix merge conflicts
alessbell Apr 15, 2024
c6eaea4
chore: remove old comment
alessbell Apr 15, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/cold-dancers-call.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@apollo/client": minor
---

`createProxiedSchema` deep merges resolvers by default, can be opted out of with `mergeResolvers: false`
1 change: 1 addition & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
"@babel/parser": "7.24.1",
"@changesets/changelog-github": "0.5.0",
"@changesets/cli": "2.27.1",
"@graphql-tools/merge": "^9.0.3",
"@graphql-tools/schema": "10.0.3",
"@graphql-tools/utils": "10.0.13",
"@microsoft/api-extractor": "7.42.3",
Expand Down
13 changes: 8 additions & 5 deletions src/testing/core/__tests__/createProxiedSchema.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ describe("schema proxy", () => {
unmount();
});

it("does not pollute the original schema", async () => {
it("schema.fork does not pollute the original schema", async () => {
const Profiler = createDefaultProfiler<ViewerQueryData>();

using _fetch = createMockFetch(schema);
alessbell marked this conversation as resolved.
Show resolved Hide resolved
Expand Down Expand Up @@ -861,6 +861,7 @@ describe("schema proxy", () => {
},
Book: {
__resolveType: (obj) => {
console.log(obj);
alessbell marked this conversation as resolved.
Show resolved Hide resolved
if ("text" in obj) {
return "TextBook";
}
Expand All @@ -876,10 +877,9 @@ describe("schema proxy", () => {
resolvers: {
Query: {
viewer: () => ({
name: "Virginia",
book: {
colors: ["red", "blue", "green"],
title: "The Book",
title: "A New Book",
},
}),
},
Expand Down Expand Up @@ -997,7 +997,7 @@ describe("schema proxy", () => {
colors: ["red", "blue", "green"],
id: "1",
publishedAt: "2024-01-01",
title: "The Book",
title: "A New Book",
},
},
});
Expand All @@ -1020,12 +1020,15 @@ describe("schema proxy", () => {
colors: ["red", "blue", "green"],
id: "1",
publishedAt: "2024-01-01",
title: "The Book",
title: "A New Book",
},
},
});
}

unmount();
});
it.todo("add test for reset");
it.todo("add test for mergeResolvers: false");
it.todo("add test for mergeResolvers: true");
});
26 changes: 21 additions & 5 deletions src/testing/core/createProxiedSchema.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { addResolversToSchema } from "@graphql-tools/schema";
import type { GraphQLSchema } from "graphql";

import { addResolversToSchema } from "@graphql-tools/schema";
import { mergeResolvers } from "@graphql-tools/merge";
import type { Resolvers } from "../../core/types.js";

type ProxiedSchema = GraphQLSchema & ProxiedSchemaFns;
Expand All @@ -11,6 +11,10 @@ interface ProxiedSchemaFns {
reset: () => void;
}

type CreateProxiedSchemaOptions = {
mergeResolvers: boolean;
};

/**
* A function that creates a [Proxy object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)
* around a given `schema` with `resolvers`. This proxied schema can be used to
Expand Down Expand Up @@ -45,7 +49,10 @@ interface ProxiedSchemaFns {
*/
const createProxiedSchema = (
schemaWithMocks: GraphQLSchema,
resolvers: Resolvers
resolvers: Resolvers,
options: CreateProxiedSchemaOptions = {
mergeResolvers: true,
}
): ProxiedSchema => {
let targetResolvers = { ...resolvers };
let targetSchema = addResolversToSchema({
Expand All @@ -55,7 +62,12 @@ const createProxiedSchema = (

const fns: ProxiedSchemaFns = {
add: ({ resolvers: newResolvers }) => {
targetResolvers = { ...targetResolvers, ...newResolvers };
// @ts-ignore TODO(fixme): IResolvers type does not play well with our Resolvers
targetResolvers =
alessbell marked this conversation as resolved.
Show resolved Hide resolved
options.mergeResolvers ?
mergeResolvers([targetResolvers, newResolvers])
: { ...targetResolvers, ...newResolvers };

targetSchema = addResolversToSchema({
schema: targetSchema,
resolvers: targetResolvers,
Expand All @@ -65,7 +77,11 @@ const createProxiedSchema = (
},

fork: ({ resolvers: newResolvers } = {}) => {
return createProxiedSchema(targetSchema, newResolvers ?? targetResolvers);
return createProxiedSchema(
targetSchema,
newResolvers ?? targetResolvers,
options
);
},

reset: () => {
Expand Down
Loading