Skip to content

Commit 54d4721

Browse files
authored
fix(gatsby): update nested input types when rebuilding SitePage (#30426)
1 parent c240813 commit 54d4721

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

packages/gatsby/src/schema/__tests__/rebuild-sitepage-type.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,24 @@ describe(`build and update schema for SitePage`, () => {
171171
await testNestedFields()
172172
})
173173

174+
it(`updates nested input types on rebuild`, async () => {
175+
// sanity-check
176+
const inputFields = Object.keys(
177+
schema.getType(`SitePageFieldsFilterInput`).getFields()
178+
)
179+
expect(inputFields.length).toBe(1)
180+
expect(inputFields).toEqual([`oldKey`])
181+
182+
// Rebuild
183+
const page = firstPage()
184+
page.fields = {}
185+
store.dispatch({ type: `CREATE_NODE`, payload: page })
186+
await rebuildWithSitePage({})
187+
schema = store.getState().schema
188+
189+
expect(schema.getType(`SitePageFieldsFilterInput`)).toBeUndefined()
190+
})
191+
174192
it(`respects @dontInfer on SitePage`, async () => {
175193
const typeDefs = `
176194
type SitePage implements Node @dontInfer {

packages/gatsby/src/schema/types/derived-types.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ export const deleteFieldsOfDerivedTypes = ({ typeComposer }): void => {
6565
})
6666
}
6767

68+
const removeTypeFromSchemaComposer = ({
69+
schemaComposer,
70+
typeComposer,
71+
}): void => {
72+
schemaComposer.delete(typeComposer.getTypeName())
73+
schemaComposer.delete((typeComposer as any)._gqType)
74+
schemaComposer.delete(typeComposer)
75+
}
76+
6877
export const clearDerivedTypes = ({
6978
schemaComposer,
7079
typeComposer,
@@ -77,15 +86,21 @@ export const clearDerivedTypes = ({
7786
for (const typeName of derivedTypes.values()) {
7887
const derivedTypeComposer = schemaComposer.getAnyTC(typeName)
7988
clearDerivedTypes({ schemaComposer, typeComposer: derivedTypeComposer })
80-
schemaComposer.delete(typeName)
81-
schemaComposer.delete((derivedTypeComposer as any)._gqType)
82-
schemaComposer.delete(derivedTypeComposer)
89+
removeTypeFromSchemaComposer({
90+
schemaComposer,
91+
typeComposer: derivedTypeComposer,
92+
})
8393
}
8494

8595
if (
8696
typeComposer instanceof ObjectTypeComposer ||
8797
typeComposer instanceof InterfaceTypeComposer
8898
) {
99+
const inputTypeComposer = typeComposer.getInputTypeComposer()
100+
removeTypeFromSchemaComposer({
101+
schemaComposer,
102+
typeComposer: inputTypeComposer,
103+
})
89104
typeComposer.removeInputTypeComposer()
90105
}
91106

0 commit comments

Comments
 (0)