Skip to content

Releases: eddeee888/graphql-code-generator-plugins

@eddeee888/gcg-typescript-resolver-files@0.5.0

24 May 11:16
775267e

Choose a tag to compare

Minor Changes

  • f7831c1: Use resolversNonOptionalTypename instead of nonOptionalTypename

    This makes using abstract types simpler because we do not return __typename for all types, only for union members and interface implementing types.

  • f7831c1: Add scalarsOverrides config option

    Record<string, { resolver?: string; type?: string | { input: string; output: string } }> (Default: {})

    Overrides scalars' resolver implementation, type or both.

    Example:

    // codegen.ts
    {
      generates: {
        'src/schema': defineConfig({
          scalarsOverrides: {
            DateTime: {
              resolver: './localDateTimeResolver#Resolver',
            }
            Currency: {
              type: 'unknown'
            },
            BigInt: {
              resolver: '@other/scalars#BigIntResolver',
              type: 'bigint'
            }
          }
        })
      }
    }

    BREAKING CHANGE: typesPluginsConfig.scalars can no longer be used. Please use scalarOverrides instead.

  • f7831c1: Use optionalResolveType=true because resolversNonOptionalTypename works

  • f7831c1: Add scalarsModule config option

    string or false (Default: graphql-scalars)

    Where Scalar implementation and codegen types come from. Use false to implement your own Scalars.

    If using an module that is not graphql-scalars, the module must export resolver implementation and codegen type the same way graphql-scalars does e.g.

    {
      resolvers: {
        DateTime: DateTimeResolver,
      },
      DateTimeResolver: {
        // ... resolver implementation
        extensions: {
          codegenScalarType: 'Date | string',
        },
      }
    }

Patch Changes

  • f7831c1: Allows overriding native scalar types' type (Equivalent of typescript plugin's scalars option)
  • f7831c1: Correctly implement ID Scalar's input/output type: input is string and output is string | number

By default, ID scalar types are targeted at client types. Example generated type:

type Scalars = {
  ID: { 
    input: string | number; 
    output: string 
  }
}

Server preset manages the default ID scalar to be correct for server types. Example generated type for the server:

type Scalars = {
  ID: { 
    input: string; 
    output: string | number;
  }
}

@eddeee888/gcg-typescript-resolver-files@0.4.1

21 May 11:04
d5ebde4

Choose a tag to compare

Patch Changes

  • af10b65: Add emitLegacyCommonJSImports config option to support esm-style imports in generated output
  • 72c0dc1: Fix typeDefsFileMode=modules not working well with codegen hooks (e.g. afterAllFileWrite) for Windows

@eddeee888/gcg-typescript-resolver-files@0.4.0

09 Apr 22:45
fcf9167

Choose a tag to compare

Minor Changes

  • 037afdc: Add resolverMainFileMode. merged or modules (Default: merged)

    How to generate file/s that put resolvers map together:

    • merged: one file
    • modules: one file per module. This can be used with module-based libraries like graphql-modules

    Example codegen config:

    // codegen.ts
    import type { CodegenConfig } from '@graphql-codegen/cli';
    import { defineConfig } from '@eddeee888/gcg-typescript-resolver-files';
    
    const config: CodegenConfig = {
      schema: '**/*.graphql',
      generates: {
        'src/schema': defineConfig({
          resolverMainFileMode: 'modules',
        }),
      },
    };
    
    export default config;

    resolverMainFileMode=modules generates one resolvers.generated.ts file in each module:

    ├── src/
    │   ├── schema/
    │   │   ├── base/
    │   │   │   ├── schema.graphql
    │   │   │   ├── resolvers.generated.ts # contains resolvers of types in `src/schema/base/schema.graphql`
    │   │   ├── user/
    │   │   │   ├── schema.graphql
    │   │   │   ├── resolvers.generated.ts # contains resolvers of types in `src/schema/user/schema.graphql`
    │   │   ├── book/
    │   │   │   ├── schema.graphql
    │   │   │   ├── resolvers.generated.ts # contains resolvers of types in `src/schema/book/schema.graphql`
    

    If you are using graphql-modules, you can use the resolvers map like this:

    // src/schema/user/index.ts
    import { createModule } from 'graphql-modules';
    import { resolvers } from './resolvers.generated.ts';
    
    export const userModule = createModule({
      id: 'user-module',
      dirname: __dirname,
      typeDefs: [
        /* Your typeDefs*/
      ],
      resolvers,
    });
  • df06e3b: Add typeDefsFileMode. merged or mergedWhitelisted or modules (Default: merged)

    How to generate typeDefs file/s:

    • merged: one file
    • mergedWhitelisted: one file but only contains whitelisted modules. This is useful if your blacklisted modules handle their own type defs
    • modules: one file per module. This can be used with module-based libraries like graphql-modules

    Example codegen config:

    // codegen.ts
    import type { CodegenConfig } from '@graphql-codegen/cli';
    import { defineConfig } from '@eddeee888/gcg-typescript-resolver-files';
    
    const config: CodegenConfig = {
      schema: '**/*.graphql',
      generates: {
        'src/schema': defineConfig({
          typeDefsFileMode: 'modules',
        }),
      },
    };
    
    export default config;

    typeDefsFileMode=modules generates one typeDefs.generated.ts file in each module:

    ├── src/
    │   ├── schema/
    │   │   ├── base/
    │   │   │   ├── schema.graphql
    │   │   │   ├── typeDefs.generated.ts # contains typeDefs of `src/schema/base/schema.graphql`
    │   │   ├── user/
    │   │   │   ├── schema.graphql
    │   │   │   ├── typeDefs.generated.ts # contains typeDefs of `src/schema/user/schema.graphql`
    │   │   ├── book/
    │   │   │   ├── schema.graphql
    │   │   │   ├── typeDefs.generated.ts # contains typeDefs of `src/schema/book/schema.graphql`
    

    If you are using graphql-modules, you can use the resolvers map like this:

    // src/schema/user/index.ts
    import { createModule } from 'graphql-modules';
    import { typeDefs } from './typeDefs.generated.ts';
    
    export const userModule = createModule({
      id: 'user-module',
      dirname: __dirname,
      typeDefs: [typeDefs],
      resolvers: {
        /* Your resolver map */
      },
    });
  • 086802e: Add defineConfig. This sets up preset, presetConfig and watchPattern.

    Example:

    import type { CodegenConfig } from '@graphql-codegen/cli';
    import { defineConfig } from '@eddeee888/typescript-resolver-files';
    
    const config: CodegenConfig = {
      schema: 'src/schema/**/*.graphql',
      generates: {
        'src/schema': defineConfig(),
      },
    };
    
    export default config;

Patch Changes

  • fe0ca5d: Bump ts-morph to v18
  • d5aac16: Handle intersection typeNode usually seen in GQL Interface types e.g. type TypeA = TypeB & { something: string } & { somethingelse: string }
  • 6324453: Fix Subscription default generation template
  • b70ee7f: Use path.posix to fix Windows errors
  • 5302e38: Add example for custom preset config in README

@eddeee888/gcg-typescript-resolver-files@0.3.0

24 Feb 11:28
826291e

Choose a tag to compare

Minor Changes

  • 686cafd: Implement type comparison between mapper type vs schema type to generate resolvers

@eddeee888/gcg-typescript-resolver-files@0.2.1

22 Feb 11:27
3605d16

Choose a tag to compare

Patch Changes

  • 75fc48b: Bump @graphql-codegen/* deps

@eddeee888/gcg-typescript-resolver-files@0.2.0

29 Jan 06:52
3593977

Choose a tag to compare

Minor Changes

  • 0d3c9db: Generate typeDefs by default

@eddeee888/gcg-typescript-resolver-files@0.1.2

23 Jan 10:25
c463922

Choose a tag to compare

Patch Changes

  • 0a07d09: Make graphql-scalars deps because it is used in implementation

@eddeee888/gcg-typescript-resolver-files@0.1.1

21 Jan 12:43
88d362d

Choose a tag to compare

Patch Changes

  • 120a06a: Make resolverRelativeTargetDir more reasonable for merged mode

@eddeee888/gcg-typescript-resolver-files@0.1.0

02 Jan 10:50
bd20c1a

Choose a tag to compare

Minor Changes

  • 80986d8: Update config setting names and defaults to prioritise 'modules' mode over 'merged'
  • 6a918ed: Fix deps vs peerDeps in package.json
  • a81f7f3: Implement auto mappers

Patch Changes

  • 9646937: Fix Scalars in blacklisted modules not being ignored correctly

@eddeee888/gcg-typescript-resolver-files@0.0.7

21 Nov 11:42
2025fd3

Choose a tag to compare

Patch Changes

  • a53b315: Make generated RootObjectTypeFields NonNullable to make reexports easier