graphql-code-generator icon indicating copy to clipboard operation
graphql-code-generator copied to clipboard

feat(graphql-modules-preset): allow custom namespace name

Open jjangga0214 opened this issue 5 months ago • 0 comments

Is your feature request related to a problem? Please describe.

Hi! I am using graphql-modules and preset @graphql-codegen/graphql-modules-preset.

codegen.ts:

import type { CodegenConfig } from '@graphql-codegen/cli'

const config: CodegenConfig = {
  schema: './src/modules/*/*.graphql',
  generates: {
    './src/modules/': {
      preset: 'graphql-modules',
      presetConfig: {
        baseTypesPath: './generated.ts',
        filename: './generated.ts',
      },
      plugins: [
        'typescript',
        'typescript-resolvers',
      ],
    },
  },
}

export default config

This config generates generated.ts like this.

src/modules/
├── generated.ts # `presetConfig.baseTypesPath`
├── foo
│   ├── generated.ts  # `presetConfig.filename`
│   ├── index.graphql # Schema for foo module
│   └── index.ts
├── index.ts
└── bar
    ├── generated.ts  # `presetConfig.filename`
    ├── index.graphql # Schema for bar module
    └── index.ts

src/modules/foo/index.ts:

import { FooModule } from './generated.js'

const resolvers: FooModule.Resolvers = {
  Query: {
    // ...
  },
}

As we can see above, a directory name becomes a generated namespace prefix.

  • foo/index.graphql => FooModule
  • bar/index.graphql => BarModule

But, I don't want a prefix. For instance, I want to do this.

import { Module } from './generated.js'

Thus when you rename the directory, you don't need to change source code. This is a benefit.

How do you think?

Thanks.

Describe the solution you'd like

What if we introduce a custom option like generates.config.namingConvention?

I'd like to use a custom function, that probably takes context information like path and graphql schema as a argument(s). It returns string, and becomes namespace name.

Describe alternatives you've considered

No response

Any additional important details?

No response

jjangga0214 avatar Sep 11 '24 06:09 jjangga0214