Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 5d6a069

Browse files
committedApr 5, 2024··
feat: deep merge resolvers by default
1 parent 80d2ba5 commit 5d6a069

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed
 

‎package-lock.json

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
"@babel/parser": "7.24.1",
112112
"@changesets/changelog-github": "0.5.0",
113113
"@changesets/cli": "2.27.1",
114+
"@graphql-tools/merge": "^9.0.3",
114115
"@graphql-tools/schema": "10.0.3",
115116
"@graphql-tools/utils": "10.0.13",
116117
"@microsoft/api-extractor": "7.42.3",

‎src/testing/core/__tests__/createProxiedSchema.test.tsx

+8-5
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ describe("schema proxy", () => {
346346
unmount();
347347
});
348348

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

352352
using _fetch = createMockFetch(schema);
@@ -861,6 +861,7 @@ describe("schema proxy", () => {
861861
},
862862
Book: {
863863
__resolveType: (obj) => {
864+
console.log(obj);
864865
if ("text" in obj) {
865866
return "TextBook";
866867
}
@@ -876,10 +877,9 @@ describe("schema proxy", () => {
876877
resolvers: {
877878
Query: {
878879
viewer: () => ({
879-
name: "Virginia",
880880
book: {
881881
colors: ["red", "blue", "green"],
882-
title: "The Book",
882+
title: "A New Book",
883883
},
884884
}),
885885
},
@@ -997,7 +997,7 @@ describe("schema proxy", () => {
997997
colors: ["red", "blue", "green"],
998998
id: "1",
999999
publishedAt: "2024-01-01",
1000-
title: "The Book",
1000+
title: "A New Book",
10011001
},
10021002
},
10031003
});
@@ -1020,12 +1020,15 @@ describe("schema proxy", () => {
10201020
colors: ["red", "blue", "green"],
10211021
id: "1",
10221022
publishedAt: "2024-01-01",
1023-
title: "The Book",
1023+
title: "A New Book",
10241024
},
10251025
},
10261026
});
10271027
}
10281028

10291029
unmount();
10301030
});
1031+
it.todo("add test for reset");
1032+
it.todo("add test for mergeResolvers: false");
1033+
it.todo("add test for mergeResolvers: true");
10311034
});

‎src/testing/core/createProxiedSchema.ts

+21-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { addResolversToSchema } from "@graphql-tools/schema";
21
import type { GraphQLSchema } from "graphql";
3-
2+
import { addResolversToSchema } from "@graphql-tools/schema";
3+
import { mergeResolvers } from "@graphql-tools/merge";
44
import type { Resolvers } from "../../core/types.js";
55

66
type ProxiedSchema = GraphQLSchema & ProxiedSchemaFns;
@@ -11,6 +11,10 @@ interface ProxiedSchemaFns {
1111
reset: () => void;
1212
}
1313

14+
type CreateProxiedSchemaOptions = {
15+
mergeResolvers: boolean;
16+
};
17+
1418
/**
1519
* A function that creates a [Proxy object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)
1620
* around a given `schema` with `resolvers`. This proxied schema can be used to
@@ -45,7 +49,10 @@ interface ProxiedSchemaFns {
4549
*/
4650
const createProxiedSchema = (
4751
schemaWithMocks: GraphQLSchema,
48-
resolvers: Resolvers
52+
resolvers: Resolvers,
53+
options: CreateProxiedSchemaOptions = {
54+
mergeResolvers: true,
55+
}
4956
): ProxiedSchema => {
5057
let targetResolvers = { ...resolvers };
5158
let targetSchema = addResolversToSchema({
@@ -55,7 +62,12 @@ const createProxiedSchema = (
5562

5663
const fns: ProxiedSchemaFns = {
5764
add: ({ resolvers: newResolvers }) => {
58-
targetResolvers = { ...targetResolvers, ...newResolvers };
65+
// @ts-ignore TODO: fix this
66+
targetResolvers =
67+
options.mergeResolvers ?
68+
mergeResolvers([targetResolvers, newResolvers])
69+
: { ...targetResolvers, ...newResolvers };
70+
5971
targetSchema = addResolversToSchema({
6072
schema: targetSchema,
6173
resolvers: targetResolvers,
@@ -65,7 +77,11 @@ const createProxiedSchema = (
6577
},
6678

6779
fork: ({ resolvers: newResolvers } = {}) => {
68-
return createProxiedSchema(targetSchema, newResolvers ?? targetResolvers);
80+
return createProxiedSchema(
81+
targetSchema,
82+
newResolvers ?? targetResolvers,
83+
options
84+
);
6985
},
7086

7187
reset: () => {

0 commit comments

Comments
 (0)
Please sign in to comment.