dotansimha / dotansimha/graphql-code-generator

Preset Loading is masking module import errors

Open
#9,436 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
11.3k
Forks
1.4k
Avg merge
1d 1h
Merged PRs (30d)
23

Description

### Which packages are impacted by your issue?

@graphql-codegen/cli

### Describe the bug

When using a preset that itself has missing dependencies, the preset loading function masks the error saying that it could not find the preset when, in fact, it could not find one of the preset's dependencies.

In my case, the error being covered up is below. This is a separate issue which I haven't solved yet, but it took a fair bit of work to even discover why the `@graphql-codegen/client-preset` appeared to not be loading. (The underlying issue with @ardatan/relay-compiler not loading the babel deps is something I still need to resolve, so if anyone has pointers there, I'm all ears. I'll open a separate issue for that if I'm not able to resolve it today.)

As you can see from the stack, the preset loads fine, but then another dependency fails to load.

```
Error: Cannot find module '@babel/runtime/helpers/objectSpread2'
Require stack:
- /Users/lheywood/project-path/node_modules/@ardatan/relay-compiler/lib/transforms/SkipRedundantNodesTransform.js
- /Users/lheywood/project-path/node_modules/@graphql-tools/relay-operation-optimizer/cjs/index.js
- /Users/lheywood/project-path/node_modules/@graphql-codegen/visitor-plugin-common/cjs/optimize-operations.js
- /Users/lheywood/project-path/node_modules/@graphql-codegen/visitor-plugin-common/cjs/index.js
- /Users/lheywood/project-path/node_modules/@graphql-codegen/gql-tag-operations/cjs/index.js
- /Users/lheywood/project-path/node_modules/@graphql-codegen/client-preset/cjs/index.js
- /Users/lheywood/project-path/node_modules/@graphql-codegen/cli/cjs/codegen.js
- /Users/lheywood/project-path/node_modules/@graphql-codegen/cli/cjs/generate-and-save.js
- /Users/lheywood/project-path/node_modules/@graphql-codegen/cli/cjs/cli.js
- /Users/lheywood/project-path/node_modules/@graphql-codegen/cli/cjs/bin.js
at Module._resolveFilename (node:internal/modules/cjs/loader:995:15)
at Module._load (node:internal/modules/cjs/loader:841:27)
at Module.require (node:internal/modules/cjs/loader:1061:19)
at require (node:internal/modules/cjs/helpers:103:18)
at Object. (/Users/lheywood/project-path/node_modules/@ardatan/relay-compiler/lib/transforms/SkipRedundantNodesTransform.js:15:45)
at Module._compile (node:internal/modules/cjs/loader:1159:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
at Module.load (node:internal/modules/cjs/loader:1037:32)
at Module._load (node:internal/modules/cjs/loader:878:12)
at Module.require (node:internal/modules/cjs/loader:1061:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lheywood/project-path/node_modules/@ardatan/relay-compiler/lib/transforms/SkipRedundantNodesTransform.js',
'/Users/lheywood/project-path/node_modules/@graphql-tools/relay-operation-optimizer/cjs/index.js',
'/Users/lheywood/project-path/node_modules/@graphql-codegen/visitor-plugin-common/cjs/optimize-operations.js',
'/Users/lheywood/project-path/node_modules/@graphql-codegen/visitor-plugin-common/cjs/index.js',
'/Users/lheywood/project-path/node_modules/@graphql-codegen/gql-tag-operations/cjs/index.js',
'/Users/lheywood/project-path/node_modules/@graphql-codegen/client-preset/cjs/index.js',
'/Users/lheywood/project-path/node_modules/@graphql-codegen/cli/cjs/codegen.js',
'/Users/lheywood/project-path/node_modules/@graphql-codegen/cli/cjs/generate-and-save.js',
'/Users/lheywood/project-path/node_modules/@graphql-codegen/cli/cjs/cli.js',
'/Users/lheywood/project-path/node_modules/@graphql-codegen/cli/cjs/bin.js'
]
}
```

### Your Example Website or App

https://stackblitz.com/edit/github-qesmwt?file=package.json,codegen.ts,custom/index.js

### Steps to Reproduce the Bug or Issue

1. run `yarn generate` to see command fail
2. comment out the broken import in `custom/index.js`
3. run `yarn generate` again to see command pass

### Expected behavior

I expected to see an error making mention of the missing module, however because the preset loader function looks for _any_ `MODULE_NOT_FOUND` error, the displayed message is that it could not find the preset at all, not it's dependency.

### Screenshots or Videos

_No response_

### Platform

- OS: macOS
- NodeJS: 18.12.2
- `graphql` version: 16.6.0
- `@graphql-codegen/*` version(s):
- `@graphql-codegen/cli`: ^3.3.1,
- `@graphql-codegen/client-preset`: ^3.0.1,

### Codegen Config File
```ts
import {CodegenConfig} from '@graphql-codegen/cli';

const config: CodegenConfig = {
schema: 'https://swapi-graphql.netlify.app/.netlify/functions/index',
documents: ['src/**/*.tsx'],
ignoreNoDocuments: true, // for better experience with the watcher
generates: {
'./src/gql/': {
preset: 'client',
},
},
};

export default config;
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.