Skip to content

Latest commit

 

History

History
460 lines (283 loc) · 16.8 KB

File metadata and controls

460 lines (283 loc) · 16.8 KB

@graphql-codegen/plugin-helpers

5.0.1

Patch Changes

5.0.0

Major Changes

  • bb66c2a31 Thanks @n1ru4l! - Require Node.js >= 16. Drop support for Node.js 14

Patch Changes

4.2.0

Minor Changes

  • #9151 b7dacb21f Thanks @'./user/schema.mappers#UserMapper',! - Add watchPattern config option for generates sections.

    By default, watch mode automatically watches all GraphQL schema and document files. This means when a change is detected, Codegen CLI is run.

    A user may want to run Codegen CLI when non-schema and non-document files are changed. Each generates section now has a watchPattern option to allow more file patterns to be added to the list of patterns to watch.

    In the example below, mappers are exported from schema.mappers.ts files. We want to re-run Codegen if the content of *.mappers.ts files change because they change the generated types file. To solve this, we can add mapper file patterns to watch using the glob pattern used for schema and document files.

    // codegen.ts
    const config: CodegenConfig = {
      schema: 'src/schema/**/*.graphql',
      generates: {
        'src/schema/types.ts': {
          plugins: ['typescript', 'typescript-resolvers'],
          config: {
            mappers: {
    
              Book: './book/schema.mappers#BookMapper',
            },
          }
          watchPattern: 'src/schema/**/*.mappers.ts', // Watches mapper files in `watch` mode. Use an array for multiple patterns e.g. `['src/*.pattern1.ts','src/*.pattern2.ts']`
        },
      },
    };

    Then, run Codegen CLI in watch mode:

    yarn graphql-codegen --watch

    Now, updating *.mappers.ts files re-runs Codegen! 🎉

    Note: watchPattern is only used in watch mode i.e. running CLI with --watch flag.

Patch Changes

  • f104619ac Thanks @saihaj! - Resolve issue with nesting fields in @provides directive being prevented

4.1.0

Minor Changes

  • #8893 a118c307a Thanks @n1ru4l! - mark plugins in config optional

  • #8723 a3309e63e Thanks @kazekyo! - Introduce a new feature called DocumentTransform.

    DocumentTransform is a functionality that allows you to modify documents before they are processed by plugins. You can use functions passed to the documentTransforms option to make changes to GraphQL documents.

    To use this feature, you can write documentTransforms as follows:

    import type { CodegenConfig } from '@graphql-codegen/cli';
    
    const config: CodegenConfig = {
      schema: 'https://localhost:4000/graphql',
      documents: ['src/**/*.tsx'],
      generates: {
        './src/gql/': {
          preset: 'client',
          documentTransforms: [
            {
              transform: ({ documents }) => {
                // Make some changes to the documents
                return documents;
              },
            },
          ],
        },
      },
    };
    export default config;

    For instance, to remove a @localOnlyDirective directive from documents, you can write the following code:

    import type { CodegenConfig } from '@graphql-codegen/cli';
    import { visit } from 'graphql';
    
    const config: CodegenConfig = {
      schema: 'https://localhost:4000/graphql',
      documents: ['src/**/*.tsx'],
      generates: {
        './src/gql/': {
          preset: 'client',
          documentTransforms: [
            {
              transform: ({ documents }) => {
                return documents.map(documentFile => {
                  documentFile.document = visit(documentFile.document, {
                    Directive: {
                      leave(node) {
                        if (node.name.value === 'localOnlyDirective') return null;
                      },
                    },
                  });
                  return documentFile;
                });
              },
            },
          ],
        },
      },
    };
    export default config;

    DocumentTransform can also be specified by file name. You can create a custom file for a specific transformation and pass it to documentTransforms.

    Let's create the document transform as a file:

    module.exports = {
      transform: ({ documents }) => {
        // Make some changes to the documents
        return documents;
      },
    };

    Then, you can specify the file name as follows:

    import type { CodegenConfig } from '@graphql-codegen/cli';
    
    const config: CodegenConfig = {
      schema: 'https://localhost:4000/graphql',
      documents: ['src/**/*.tsx'],
      generates: {
        './src/gql/': {
          preset: 'client',
          documentTransforms: ['./my-document-transform.js'],
        },
      },
    };
    export default config;

Patch Changes

4.0.0

Major Changes

Patch Changes

3.1.2

Patch Changes

3.1.1

Patch Changes

  • 307a5d350 Thanks @saihaj! - Something went wrong in old relesae so this will ensure we have a good bump on all packages

3.1.0

Minor Changes

  • #8662 c0183810f Thanks @jantimon! - the life cycle hook beforeOneFileWrite is now able to modify the generated content

3.0.0

Major Changes

Patch Changes

2.7.2

Patch Changes

2.7.1

Patch Changes

2.7.0

Minor Changes

  • #8301 2ed21a471 Thanks @charlypoly! - Introduces support for TypeScript config file and a new preset lifecycle (required for client-preset)

2.6.2

Patch Changes

  • #8189 b408f8238 Thanks @n1ru4l! - Fix CommonJS TypeScript resolution with moduleResolution node16 or nodenext

2.6.1

Patch Changes

  • 6a2e328e6: feat(cli): --verbose and --debug flags

2.6.0

Minor Changes

  • 2cbcbb371: Add new flag to emit legacy common js imports. Default it will be true this way it ensure that generated code works with non-compliant bundlers.

    You can use the option in your config:

    schema: 'schema.graphql'
     documents:
       - 'src/**/*.graphql'
     emitLegacyCommonJSImports: true

    Alternative you can use the CLI to set this option:

    $ codegen --config-file=config.yml --emit-legacy-common-js-imports

2.5.0

Minor Changes

  • d84afec09: Support TypeScript ESM modules ("module": "node16" and "moduleResolution": "node16").

    More information on the TypeScript Release Notes.

  • 8e44df58b: Add new config option to not exit with non-zero exit code when there are no documents.

    You can use this option in your config:

    schema: 'schema.graphql'
    documents:
      - 'src/**/*.graphql'
    ignoreNoDocuments: true

    Alternative you can use the CLI to set this option:

    $ codegen --config-file=config.yml --ignore-no-documents

Patch Changes

  • a4fe5006b: Fix TS type error on strictNullChecks: true

    Fix the compiler error:

    node_modules/@graphql-codegen/plugin-helpers/oldVisit.d.ts:5:75 - error TS2339: Property 'enter' does not exist on type '{ readonly enter?: ASTVisitFn<NameNode> | undefined; readonly leave: ASTReducerFn<NameNode, unknown>; } | { readonly enter?: ASTVisitFn<DocumentNode> | undefined; readonly leave: ASTReducerFn<...>; } | ... 41 more ... | undefined'.
    
    5     enter?: Partial<Record<keyof NewVisitor, NewVisitor[keyof NewVisitor]['enter']>>;
                                                                                ~~~~~~~
    
    node_modules/@graphql-codegen/plugin-helpers/oldVisit.d.ts:6:75 - error TS2339: Property 'leave' does not exist on type '{ readonly enter?: ASTVisitFn<NameNode> | undefined; readonly leave: ASTReducerFn<NameNode, unknown>; } | { readonly enter?: ASTVisitFn<DocumentNode> | undefined; readonly leave: ASTReducerFn<...>; } | ... 41 more ... | undefined'.
    
    6     leave?: Partial<Record<keyof NewVisitor, NewVisitor[keyof NewVisitor]['leave']>>;
                                                                                ~~~~~~~
    
    
    Found 2 errors in the same file, starting at: node_modules/@graphql-codegen/plugin-helpers/oldVisit.d.ts:5
    

    Only happens when TS compiler options strictNullChecks: true and skipLibCheck: false.

    Partial<T> includes {}, therefore NewVisitor[keyof NewVisitor] includes undefined, and indexing undefined is error. Eliminate undefined by wrapping it inside NonNullable<...>.

    Related #7519

2.4.2

Patch Changes

  • a521216d6: broken links within documentation

2.4.1

Patch Changes

  • cb9adeb96: Cache validation of documents

2.4.0

Minor Changes

  • 754a33715: Performance Profiler --profile

2.3.2

Patch Changes

  • 6002feb3d: Fix exports in package.json files for react-native projects

2.3.1

Patch Changes

  • bcc5636fc: fix wrong dependency version range

2.3.0

Minor Changes

  • 97ddb487a: feat: GraphQL v16 compatibility

2.2.0

Minor Changes

  • 7c60e5acc: feat(core): ability to skip some specific validation rules with skipDocumentsValidation option

2.1.1

Patch Changes

  • 6470e6cc9: fix(plugin-helpers): remove unnecessary import
  • 35199dedf: Fix module not found bug in resolveExternalModuleAndFn

2.1.0

Minor Changes

  • 39773f59b: enhance(plugins): use getDocumentNodeFromSchema and other utilities from @graphql-tools/utils
  • 440172cfe: support ESM

Patch Changes

  • 24185985a: bump graphql-tools package versions

2.0.0

Major Changes

  • b0cb13df4: Update to latest graphql-tools and graphql-config version.

    ‼️ ‼️ ‼️ Please note ‼️ ‼️ ‼️:

    This is a breaking change since Node 10 is no longer supported in graphql-tools, and also no longer supported for Codegen packages.

1.18.8

Patch Changes

  • 470336a1: don't require plugins for for config if preset provides plugin. Instead the preset should throw if no plugins were provided.

1.18.7

Patch Changes

  • dfd25caf: chore(deps): bump graphql-tools versions

1.18.6

Patch Changes

  • 637338cb: fix: make lifecycle hooks definition a partial

1.18.5

Patch Changes

  • d9212aa0: fix(visitor-plugin-common): guard for a runtime type error

1.18.4

Patch Changes

  • 23862e7e: fix(naming-convention): revert and pin change-case-all dependency for workaround #3256

1.18.3

Patch Changes

  • 29b75b1e: enhance(namingConvention): use change-case-all instead of individual packages for naming convention

1.18.2

Patch Changes

  • 1183d173: Bump all packages to resolve issues with shared dependencies

1.18.1

Patch Changes

  • eaf45d1f: fix issue with inline fragment without typeCondition

1.18.0

Minor Changes

  • 857c603c: Adds the --errors-only flag to the cli to print errors only.

1.17.9

Patch Changes

  • da8bdd17: Allow hooks to be defined as partial object

1.17.8

Patch Changes

  • 1d7c6432: Bump all packages to allow "^" in deps and fix compatibility issues
  • 1d7c6432: Bump versions of @graphql-tools/ packages to fix issues with loading schemas and SDL comments