-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcodegen.config.ts
140 lines (135 loc) · 3.76 KB
/
codegen.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import { defineConfig } from "@eddeee888/gcg-typescript-resolver-files";
import type { CodegenConfig } from "@graphql-codegen/cli";
const generatedPrefix = `
// biome-ignore
/**
* This file was automatically generated by 'graphql-codegen'.
* Please do not edit this file directly.
* To regenerate this file, run \`pnpm generate:gql\`
*/
`;
const generatedPrefixGraphQL = `
"""
This file was automatically generated by 'graphql-codegen'.
Please do not edit this file directly.
To regenerate this file, run \`npm run generate:gql\`
"""
`;
const config: CodegenConfig = {
schema: "src/graphql/**/schema.graphql",
emitLegacyCommonJSImports: false,
hooks: {
afterAllFileWrite: ["pnpm exec biome check --apply"],
},
ignoreNoDocuments: true,
generates: {
/**
* Generate typed document nodes for operations that are used for
* integration tests. Unfortunately, we can't use the same preset as
* for the unit tests because the integration tests require the queries to
* be passed as strings.
*/
"src/graphql/test-clients/integration/": {
/* Only generate documents for integration tests */
documents: [
"src/graphql/**/__tests__/integration/*.ts",
"src/graphql/**/*.integration.test.ts",
],
/* Client preset is a sensible default, see https://the-guild.dev/graphql/codegen/plugins/presets/preset-client */
preset: "client-preset",
config: {
/**
* By default, the return value of the `graphql(...)` function is a JavaScript object,
* but for integration tests, we need to pass a string instead.
* See https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#documentmode
*/
documentMode: "string",
enumsAsTypes: true,
useTypeImports: true,
// We must explicitly call include this as we don't do so automatically
skipTypename: true,
},
presetConfig: {
useTypeImports: true,
/* Fragment masking is only useful for actual clients, and it's not relevant for testing */
fragmentMasking: false,
},
plugins: [
{
add: {
content: generatedPrefix,
},
},
],
},
/**
* Generate typed document nodes for operations that are used for unit tests.
*/
"src/graphql/test-clients/unit/": {
/* Only generate documents for unit tests */
documents: [
"src/graphql/**/__tests__/unit/*.ts",
"src/graphql/**/*.unit.test.ts",
],
/* Client preset is a sensible default, see https://the-guild.dev/graphql/codegen/plugins/presets/preset-client */
preset: "client-preset",
config: {
enumsAsTypes: true,
useTypeImports: true,
// We must explicitly call include this as we don't do so automatically
skipTypename: true,
},
presetConfig: {
/* Fragment masking is only useful for actual clients, and it's not relevant for testing */
fragmentMasking: false,
},
plugins: [
{
add: {
content: generatedPrefix,
},
},
],
},
"schema.graphql": {
plugins: [
{
add: {
content: generatedPrefixGraphQL,
},
},
"schema-ast",
],
},
/**
* Generate resolvers and types for the GraphQL schema in
* a modular way.
* Docs: https://the-guild.dev/graphql/codegen/docs/guides/graphql-server-apollo-yoga-with-server-preset
*/
"src/graphql": defineConfig(
{
mode: "modules",
emitLegacyCommonJSImports: false,
typeDefsFilePath: "./type-defs.generated.ts",
mergeSchema: false,
add: {
"./types.generated.ts": { content: generatedPrefix },
},
typesPluginsConfig: {
contextType: "~/lib/apollo-server.js#ApolloContext",
useTypeImports: true,
},
scalarsOverrides: {
DateTime: {
type: "Date",
},
Date: {
type: "Date",
},
},
},
{ schema: "src/graphql/**/*.{graphql}" },
),
},
};
module.exports = config;