Skip to content

Commit

Permalink
feat: reduce code output
Browse files Browse the repository at this point in the history
  • Loading branch information
n1ru4l committed Jul 28, 2024
1 parent d0cdb8f commit 0e7e51f
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 180 deletions.
5 changes: 5 additions & 0 deletions .changeset/cold-pants-carry.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@graphql-codegen/client-preset': minor
---

Reduce noise of generated code by only generating code relevant to GraphQL operations.
6 changes: 6 additions & 0 deletions .changeset/silent-maps-dress.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@graphql-codegen/visitor-plugin-common': minor
'@graphql-codegen/typescript': minor
---

Add config option `onlyTypescriptOperationTypes` for only emitting types relevant for the typescript-operations plugin.
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export interface ParsedTypesConfig extends ParsedConfig {
wrapEntireDefinitions: boolean;
ignoreEnumValuesFromSchema: boolean;
directiveArgumentAndInputFieldMappings: ParsedDirectiveArgumentAndInputFieldMappings;
onlyTypescriptOperationTypes: boolean;
}

export interface RawTypesConfig extends RawConfig {
Expand Down Expand Up @@ -704,6 +705,7 @@ export class BaseTypesVisitor<
}

FieldDefinition(node: FieldDefinitionNode): string {
if (this.config.onlyTypescriptOperationTypes) return '';
if (this.config.onlyEnums) return '';

const typeString = node.type as any as string;
Expand All @@ -714,6 +716,7 @@ export class BaseTypesVisitor<
}

UnionTypeDefinition(node: UnionTypeDefinitionNode, key: string | number | undefined, parent: any): string {
if (this.config.onlyTypescriptOperationTypes) return '';
if (this.config.onlyOperationTypes || this.config.onlyEnums) return '';
const originalNode = parent[key] as UnionTypeDefinitionNode;
const possibleTypes = originalNode.types
Expand Down Expand Up @@ -783,6 +786,7 @@ export class BaseTypesVisitor<
}

ObjectTypeDefinition(node: ObjectTypeDefinitionNode, key: number | string, parent: any): string {
if (this.config.onlyTypescriptOperationTypes) return '';
if (this.config.onlyOperationTypes || this.config.onlyEnums) return '';
const originalNode = parent[key] as ObjectTypeDefinitionNode;

Expand All @@ -805,6 +809,7 @@ export class BaseTypesVisitor<
}

InterfaceTypeDefinition(node: InterfaceTypeDefinitionNode, key: number | string, parent: any): string {
if (this.config.onlyTypescriptOperationTypes) return '';
if (this.config.onlyOperationTypes || this.config.onlyEnums) return '';
const originalNode = parent[key] as InterfaceTypeDefinitionNode;

Expand Down
4 changes: 4 additions & 0 deletions packages/plugins/typescript/typescript/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -512,4 +512,8 @@ export interface TypeScriptPluginConfig extends RawTypesConfig {
* ```
*/
allowEnumStringTypes?: boolean;
/**
* @description Only generate types used by typescript operations
*/
onlyTypescriptOperationTypes?: boolean;
}
3 changes: 3 additions & 0 deletions packages/plugins/typescript/typescript/src/visitor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export interface TypeScriptPluginParsedConfig extends ParsedTypesConfig {
inputMaybeValue: string;
noExport: boolean;
useImplementingTypes: boolean;
onlyTypescriptOperationTypes: boolean;
}

export const EXACT_SIGNATURE = `type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };`;
Expand Down Expand Up @@ -77,6 +78,7 @@ export class TsVisitor<
useImplementingTypes: getConfigValue(pluginConfig.useImplementingTypes, false),
entireFieldWrapperValue: getConfigValue(pluginConfig.entireFieldWrapperValue, 'T'),
wrapEntireDefinitions: getConfigValue(pluginConfig.wrapEntireFieldDefinitions, false),
onlyTypescriptOperationTypes: getConfigValue(pluginConfig.onlyTypescriptOperationTypes, false),
...additionalConfig,
} as TParsedConfig);

Expand Down Expand Up @@ -243,6 +245,7 @@ export class TsVisitor<
}

UnionTypeDefinition(node: UnionTypeDefinitionNode, key: string | number | undefined, parent: any): string {
if (this.config.onlyTypescriptOperationTypes) return '';
if (this.config.onlyOperationTypes || this.config.onlyEnums) return '';

let withFutureAddedValue: string[] = [];
Expand Down
6 changes: 5 additions & 1 deletion packages/presets/client/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,11 @@ export const preset: Types.OutputPreset<ClientPresetConfig> = {

const plugins: Array<Types.ConfiguredPlugin> = [
{ [`add`]: { content: `/* eslint-disable */` } },
{ [`typescript`]: {} },
{
[`typescript`]: {
onlyTypescriptOperationTypes: true,
},
},
{ [`typescript-operations`]: {} },
{
[`typed-document-node`]: {
Expand Down
Loading

0 comments on commit 0e7e51f

Please sign in to comment.