graphql-code-generator: graphql-codegen-cli UnhandledPromiseRejection since 1.8.0

Describe the bug Since 1.8.0, when generator is run through code and there is a parsing error, unhandled rejection pops out and node process crashes.

To Reproduce Steps to reproduce the behavior:

Version 1.8.0

Welcome to Node.js v12.9.1.
Type ".help" for more information.
> 
> const { generate } = require('@graphql-codegen/cli');
undefined
> p = generate({schema: 'schema.graphql', documents: 'src/**/*.{ts,tsx}', generates: {'/tmp/types.ts': { plugins: ['typescript', 'typescript-operations'] }}}).catch(console.error)
Promise { <pending> }
  ✔ Parse configuration
  ❯ Generate outputs
    ❯ Generate /tmp/types.ts
      ✔ Load GraphQL schemas
      ⠼ Load GraphQL documents
        Generate
(node:67419) UnhandledPromiseRejectionWarning: GraphQLError: Syntax Error: Expected {, found }
    at syntaxError (/Users/peter/Developer/pjur/node_modules/graphql/error/syntaxError.js:15:10)
    at Parser.expectToken (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1404:40)
    at Parser.many (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1514:10)
    at Parser.parseSelectionSet (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:267:24)
    at Parser.parseFragment (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:375:26)
    at Parser.parseSelection (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:280:58)
    at Parser.many (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1518:26)
    at Parser.parseSelectionSet (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:267:24)
  ✔ Parse configuration
  ❯ Generate outputs
    ❯ Generate /tmp/types.ts
      ✔ Load GraphQL schemas
      ✖ Load GraphQL documents
        → Syntax Error: Expected {, found }
        Generate


 Found 1 error

  ✖ GraphQL request
    GraphQLError: Syntax Error: Expected {, found }
        at syntaxError (/Users/peter/Developer/pjur/node_modules/graphql/error/syntaxError.js:15:10)
        at Parser.expectToken (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1404:40)
        at Parser.many (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1514:10)
        at Parser.parseSelectionSet (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:267:24)
        at Parser.parseFragment (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:375:26)
        at Parser.parseSelection (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:280:58)
        at Parser.many (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1518:26)
        at Parser.parseSelectionSet (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:267:24)
        at Parser.parseField (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:308:68)
        at Parser.parseSelection (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:280:81)


ListrError: Something went wrong
    at /Users/peter/Developer/pjur/node_modules/listr/index.js:102:18
    at processTicksAndRejections (internal/process/task_queues.js:85:5)
    at Object.executeCodegen (/Users/peter/Developer/pjur/node_modules/@graphql-codegen/cli/src/codegen.ts:275:3)
    at generate (/Users/peter/Developer/pjur/node_modules/@graphql-codegen/cli/src/generate-and-save.ts:74:23) {
  name: 'ListrError',
  errors: [
    GraphQLError: Syntax Error: Expected {, found }
        at syntaxError (/Users/peter/Developer/pjur/node_modules/graphql/error/syntaxError.js:15:10)
        at Parser.expectToken (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1404:40)
        at Parser.many (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1514:10)
        at Parser.parseSelectionSet (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:267:24)
        at Parser.parseFragment (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:375:26)
        at Parser.parseSelection (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:280:58)
        at Parser.many (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1518:26)
        at Parser.parseSelectionSet (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:267:24)
        at Parser.parseField (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:308:68)
        at Parser.parseSelection (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:280:81) {
      message: 'Syntax Error: Expected {, found }',
      locations: [Array],
      context: [Object: null prototype] {}
    }
  ],
  context: [Object: null prototype] {}
}
(node:67419) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 1)

Was correct in 1.7.0:

> p = generate({schema: 'schema.graphql', documents: 'src/**/*.{ts,tsx}', generates: {'/tmp/types.ts': { plugins: ['typescript', 'typescript-operations'] }}}).catch(console.error)
Promise { <pending> }
>   ✔ Parse configuration
  ❯ Generate outputs
    ❯ Generate /tmp/types.ts
      ✔ Load GraphQL schemas
      ✖ Load GraphQL documents
        → Syntax Error: Expected {, found }
        Generate


 Found 1 error

  ✖ GraphQL request
    Syntax Error: Expected {, found }

    GraphQL request:29:3
    28 |     ... on CheckoutFragment
    29 |   }
       |   ^
    30 | }


ListrError: Something went wrong
    at /Users/peter/Developer/pjur/node_modules/listr/index.js:102:18
    at Object.executeCodegen (/Users/peter/Developer/pjur/node_modules/@graphql-codegen/cli/src/codegen.ts:272:3)
    at generate (/Users/peter/Developer/pjur/node_modules/@graphql-codegen/cli/src/generate-and-save.ts:74:23) {
  name: 'ListrError',
  errors: [
    GraphQLError: Syntax Error: Expected {, found }
        at syntaxError (/Users/peter/Developer/pjur/node_modules/graphql/error/syntaxError.js:15:10)
        at Parser.expectToken (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1404:40)
        at Parser.many (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1514:10)
        at Parser.parseSelectionSet (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:267:24)
        at Parser.parseFragment (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:375:26)
        at Parser.parseSelection (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:280:58)
        at Parser.many (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:1518:26)
        at Parser.parseSelectionSet (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:267:24)
        at Parser.parseField (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:308:68)
        at Parser.parseSelection (/Users/peter/Developer/pjur/node_modules/graphql/language/parser.js:280:81) {
      message: 'Syntax Error: Expected {, found }',
      locations: [Array],
      context: [Object: null prototype] {}
    }
  ],
  context: [Object: null prototype] {}
}
  1. My GraphQL schema:
# Put your schema here
  1. My GraphQL operations:
# Put your operations here
  1. My codegen.yml config file:
# Put your YML here

Expected behavior

Environment:

  • OS:
  • @graphql-codegen/...:
  • NodeJS:

Additional context

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Reactions: 1
  • Comments: 15 (6 by maintainers)

Most upvoted comments

Fixed. Thanks

Could you check with the following canary version? 1.8.2-alpha-ed9885c3.63+ed9885c3

You can see the correct behaviour with:
npm i @graphql-codegen/cli@1.7.0 && npx gatsby develop

Thank you 😃

 try {
    await generate(
      {
        schema: "schema.graphql",
        documents: [
          "./node_modules/gatsby-transformer-*/**/*.js",
          "./src/!(graphql)/**/*.{ts,tsx}",
        ],
        config: { namingConvention: { enumValues: "keep" } },
        generates: {
          "./src/graphql/types.ts": {
            plugins: ["typescript", "typescript-operations"],
          },
          //   './src/graphql/definitions.ts': { plugins: ['codegen-graphql-to-gql'] },
          //   './src/graphql/fragment-types.json': { plugins: ['fragment-matcher'] },
        },
        pluckConfig: {
          modules: [
            {
              name: "gatsby",
              identifier: "graphql",
            },
          ],
        },
      },
      true
    )
  } catch (err) {
    console.error("not called")
  }

By expected I mean that the error handler in catch is called: console.error("not called") -> this would ouput to console not called and the build process won’t exit and would continue.

@pristas-peter Thanks, we’ll take a look.