Skip to content

Commit

Permalink
fix(gatsby): Stabilize types output of GraphQL Typegen (#35925)
Browse files Browse the repository at this point in the history
* initial

* Update packages/gatsby/src/utils/graphql-typegen/utils.ts

Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com>

Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com>
  • Loading branch information
LekoArts and pieh committed Jun 15, 2022
1 parent 76ed6a8 commit 0268405
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 10 deletions.
27 changes: 17 additions & 10 deletions packages/gatsby/src/utils/graphql-typegen/ts-codegen.ts
Expand Up @@ -8,7 +8,11 @@ import type { TypeScriptDocumentsPluginConfig } from "@graphql-codegen/typescrip
import { CodeFileLoader } from "@graphql-tools/code-file-loader"
import { loadDocuments } from "@graphql-tools/load"
import { IDefinitionMeta, IStateProgram } from "../../redux/types"
import { filterTargetDefinitions, stabilizeSchema } from "./utils"
import {
filterTargetDefinitions,
sortDefinitions,
stabilizeSchema,
} from "./utils"

const OUTPUT_PATH = `src/gatsby-types.d.ts`
const NAMESPACE = `Queries`
Expand Down Expand Up @@ -104,6 +108,7 @@ export async function writeTypeScriptTypes(
},
}),
],
sort: true,
}
)
} catch (e) {
Expand All @@ -112,15 +117,17 @@ export async function writeTypeScriptTypes(

const documents: Array<Types.DocumentFile> = [
...filterTargetDefinitions(definitions).values(),
].map(definitionMeta => {
return {
document: {
kind: Kind.DOCUMENT,
definitions: [definitionMeta.def],
},
hash: definitionMeta.hash.toString(),
}
})
]
.sort(sortDefinitions)
.map(definitionMeta => {
return {
document: {
kind: Kind.DOCUMENT,
definitions: [definitionMeta.def],
},
hash: definitionMeta.hash.toString(),
}
})

const codegenOptions: Omit<Types.GenerateOptions, "plugins" | "pluginMap"> = {
// @ts-ignore - Incorrect types
Expand Down
7 changes: 7 additions & 0 deletions packages/gatsby/src/utils/graphql-typegen/utils.ts
Expand Up @@ -14,6 +14,13 @@ export function stabilizeSchema(schema: GraphQLSchema): GraphQLSchema {
return lexicographicSortSchema(schema)
}

export function sortDefinitions(
a: IDefinitionMeta,
b: IDefinitionMeta
): number {
return a.name.localeCompare(b.name)
}

/**
* Internally in Gatsby we use the function generateQueryName:
* packages/gatsby/src/query/file-parser.js
Expand Down

0 comments on commit 0268405

Please sign in to comment.