/ utils / gqlCodegen.ts
gqlCodegen.ts
 1  import type { AddPluginConfig } from '@graphql-codegen/add';
 2  import type { CodegenConfig } from '@graphql-codegen/cli';
 3  import type { TypeScriptPluginConfig } from '@graphql-codegen/typescript';
 4  import type { TypeScriptDocumentsPluginConfig } from '@graphql-codegen/typescript-operations';
 5  import { loadConfigSync } from 'graphql-config';
 6  
 7  const gqlConfig = loadConfigSync({
 8  	throwOnEmpty: true,
 9  	throwOnMissing: true,
10  });
11  
12  export const commentsProject = gqlConfig.getProject('comments');
13  
14  const typescriptConfig: TypeScriptPluginConfig = {
15  	strictScalars: true,
16  	defaultScalarType: 'unknown',
17  	scalars: {
18  		ISO8601Date: 'string',
19  		ISO8601DateTime: 'string',
20  		JSON: 'unknown',
21  	},
22  	skipTypename: true,
23  	useTypeImports: true,
24  	inlineFragmentTypes: 'combine',
25  	declarationKind: 'interface',
26  	printFieldsOnNewLines: true,
27  };
28  
29  const typescriptOperationsConfig: TypeScriptDocumentsPluginConfig = {
30  	arrayInputCoercion: false,
31  };
32  
33  const config = {
34  	ignoreNoDocuments: true,
35  	generates: {
36  		'./src/gql/comments/graphql.ts': {
37  			schema: commentsProject.schema,
38  			documents: commentsProject.documents,
39  			plugins: [
40  				{ add: { content: '/* eslint-disable */' } satisfies AddPluginConfig },
41  				{ typescript: {} },
42  				{ 'typescript-operations': {} },
43  			],
44  			config: {
45  				...typescriptConfig,
46  				...typescriptOperationsConfig,
47  			},
48  		},
49  	},
50  } satisfies CodegenConfig;
51  
52  export default config;