js-graphql-intellij-plugin
js-graphql-intellij-plugin copied to clipboard
Failed to evaluate config in TS-based project with ESM imports
Describe the bug
I tried adding this plugin to a codebase with .graphqlrc.ts config - this result in "Failed to evaluate config" message. The same config works wine without TS. I configured TS as described in: README.
Error:
java.lang.Throwable:
node:internal/process/esm_loader:48
internalBinding('errors').triggerUncaughtException(
^
[Object: null prototype] {
[]:
}
Node.js v20.7.0
at com.intellij.lang.jsgraphql.javascript.config.GraphQLJavaScriptConfigLoader.completeExceptionally(GraphQLJavaScriptConfigLoader.kt:96)
at com.intellij.lang.jsgraphql.javascript.config.GraphQLJavaScriptConfigLoader.load(GraphQLJavaScriptConfigLoader.kt:81)
at com.intellij.lang.jsgraphql.ide.config.loader.GraphQLConfigLoader.readJs(GraphQLConfigLoader.kt:167)
at com.intellij.lang.jsgraphql.ide.config.loader.GraphQLConfigLoader.readData(GraphQLConfigLoader.kt:127)
at com.intellij.lang.jsgraphql.ide.config.loader.GraphQLConfigLoader.load(GraphQLConfigLoader.kt:29)
at com.intellij.lang.jsgraphql.ide.config.GraphQLConfigProvider.reload(GraphQLConfigProvider.kt:380)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:186)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:604)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:679)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:635)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:603)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:173)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:360)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:338)
at com.intellij.lang.jsgraphql.ide.config.GraphQLConfigProvider.scheduleConfigurationReload$lambda$22(GraphQLConfigProvider.kt:351)
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:254)
at com.intellij.util.Alarm$Request.runSafely(Alarm.java:373)
at com.intellij.util.Alarm$Request.run(Alarm.java:360)
at com.intellij.util.concurrency.Propagation.contextAwareCallable$lambda$2(propagation.kt:328)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:272)
at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:249)
at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:31)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:227)
at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:218)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:215)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
at java.base/java.lang.Thread.run(Thread.java:833)
.graphqlrc.ts (Fails):
import { loadEnvConfig } from "@next/env";
import type { CodegenConfig } from "@graphql-codegen/cli";
loadEnvConfig(process.cwd());
const config: CodegenConfig = {
schema: process.env.GRAPHQL_URL,
overwrite: true,
ignoreNoDocuments: true,
documents: "src/graphql/**/*.graphql",
generates: {
"src/gql/": {
preset: "client",
// plugins: [],
presetConfig: {
fragmentMasking: false,
},
config: {
useTypeImports: true,
enumsAsTypes: true,
defaultScalarType: "unknown",
// strictScalars: true, // throw if not all scalars mapping are defined
skipTypename: true,
documentMode: "string",
},
},
},
};
export default config;
.graphqlrc.ts (works):
const nextEnv = require("@next/env");
nextEnv.loadEnvConfig(process.cwd());
const config = {
schema: process.env.GRAPHQL_URL,
overwrite: true,
ignoreNoDocuments: true,
documents: "src/graphql/**/*.graphql",
generates: {
"src/gql/": {
preset: "client",
// plugins: [],
presetConfig: {
fragmentMasking: false,
},
config: {
useTypeImports: true,
enumsAsTypes: true,
defaultScalarType: "unknown",
// strictScalars: true, // throw if not all scalars mapping are defined
skipTypename: true,
documentMode: "string",
},
},
},
};
// export default config;
module.exports = config;
To Reproduce Link to Repo with Reproduction or Steps to Reproduce:
- Clone:
https://github.com/jkazimierczak/intellij-graphql-bug-report npm i- Open
.graphqlrc.tsand see the notification.
Expected behavior TS config with ESM imports is read correctly by the plugin.
Version and Environment Details
WebStorm 2023.2.2
Build #WS-232.9921.42, built on September 12, 2023
Licensed to Jakub Kazimierczak
Subscription is active until November 4, 2023.
For educational use only.
Runtime version: 17.0.8+7-b1000.22 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Linux 5.19.16-200.fc36.x86_64
GC: G1 Young Generation, G1 Old Generation
Memory: 2996M
Cores: 4
Non-Bundled Plugins:
com.intellij.lang.jsgraphql (4.0.2)
Current Desktop: GNOME
I have similar issue.
This is my config file:
import type { CodegenConfig } from '@graphql-codegen/cli';
require('dotenv').config();
const scalars = {
JSON: '{ [key: string]: any }',
Date: 'string',
Datetime: 'string',
Time: 'string',
UUID: 'string',
BigInt: 'string',
};
const config: CodegenConfig = {
schema: [
{
'http://localhost:3000/graphql': {
headers: {
Authorization: `Bearer ${process.env.APOLLO_CODEGEN_TOKEN}`,
},
}
}
],
documents: 'libs/data-access/**/src/**/!(*.generated).{ts,graphql}',
generates: {
'libs/util/global-search/src/lib/__generated__/global-types.ts': {
plugins: ['typescript'],
config: {
immutableTypes: true,
scalars
}
},
'libs/data-access': {
preset: 'near-operation-file',
presetConfig: {
extension: '.generated.ts',
baseTypesPath: '../util/global-search/src/lib/__generated__/global-types.ts',
folder: '__generated__'
},
plugins: ['typescript-operations', 'typescript-apollo-angular'],
config: {
withHooks: true,
addExplicitOverride: true,
immutableTypes: true,
scalars
},
},
},
hooks: {
afterAllFileWrite: ['prettier --write']
}
};
export default config;
Codę generator is working fine
but plugin returns for me this stack trace:
java.lang.Throwable: /my-path/.graphqlrc.ts:50
export default config;
^^^^^^
SyntaxError: Unexpected token 'export'
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1031:15)
at Module._compile (node:internal/modules/cjs/loader:1065:27)
at Module.m._compile (/my-path/node_modules/ts-node/src/index.ts:1618:23)
at Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Object.require.extensions.<computed> [as .ts] (/my-path/node_modules/ts-node/src/index.ts:1621:12)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at com.intellij.lang.jsgraphql.javascript.config.GraphQLJavaScriptConfigLoader.completeExceptionally(GraphQLJavaScriptConfigLoader.kt:96)
at com.intellij.lang.jsgraphql.javascript.config.GraphQLJavaScriptConfigLoader.load(GraphQLJavaScriptConfigLoader.kt:81)
at com.intellij.lang.jsgraphql.ide.config.loader.GraphQLConfigLoader.readJs(GraphQLConfigLoader.kt:167)
at com.intellij.lang.jsgraphql.ide.config.loader.GraphQLConfigLoader.readData(GraphQLConfigLoader.kt:127)
at com.intellij.lang.jsgraphql.ide.config.loader.GraphQLConfigLoader.load(GraphQLConfigLoader.kt:29)
at com.intellij.lang.jsgraphql.ide.config.GraphQLConfigProvider.reload(GraphQLConfigProvider.kt:380)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:186)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:604)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:679)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:635)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:603)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:173)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:360)
at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:338)
at com.intellij.lang.jsgraphql.ide.config.GraphQLConfigProvider.scheduleConfigurationReload$lambda$22(GraphQLConfigProvider.kt:351)
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:254)
at com.intellij.util.Alarm$Request.runSafely(Alarm.java:373)
at com.intellij.util.Alarm$Request.run(Alarm.java:360)
at com.intellij.util.concurrency.Propagation.contextAwareCallable$lambda$2(propagation.kt:328)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:272)
at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:249)
at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:31)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.executeFirstTaskAndHelpQueue(BoundedTaskExecutor.java:227)
at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:218)
at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:215)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
at java.base/java.lang.Thread.run(Thread.java:833)
Not using ESM imports and TS module export solve the issue:
// import type { CodegenConfig } from '@graphql-codegen/cli';
require('dotenv').config();
const scalars = {
JSON: '{ [key: string]: any }',
Date: 'string',
Datetime: 'string',
Time: 'string',
UUID: 'string',
BigInt: 'string',
};
// const config: CodegenConfig = {
const config = {
schema: [
{
'http://localhost:3000/graphql': {
headers: {
Authorization: `Bearer ${process.env.APOLLO_CODEGEN_TOKEN}`,
},
},
},
],
documents: 'libs/data-access/**/src/**/!(*.generated).{ts,graphql}',
generates: {
'libs/util/global-search/src/lib/__generated__/global-types.ts': {
plugins: ['typescript'],
config: {
immutableTypes: true,
scalars,
},
},
'libs/data-access': {
preset: 'near-operation-file',
presetConfig: {
extension: '.generated.ts',
baseTypesPath: '../util/global-search/src/lib/__generated__/global-types.ts',
folder: '__generated__',
},
plugins: ['typescript-operations', 'typescript-apollo-angular'],
config: {
withHooks: true,
addExplicitOverride: true,
immutableTypes: true,
scalars,
},
},
},
hooks: {
afterAllFileWrite: ['prettier --write'],
},
};
// export default config;
module.exports = config;
@jkazimierczak hi! AFAIU you can't import a CJS module like that, try this instead:
import env from "@next/env";
import type {CodegenConfig} from "@graphql-codegen/cli";
const {loadEnvConfig} = env;
More details can be found here https://stackoverflow.com/a/76306331
Also, please note, that ts-node key shouldn't be inside compilerOptions
{
"$schema": "https://json.schemastore.org/tsconfig",
"compilerOptions": {
"target": "ESNext",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"allowSyntheticDefaultImports": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": [
"./src/*"
]
}
},
"ts-node": {
"esm": true,
}
}
@TRUSTMEIMJEDI hi! That error means that you probably haven't enabled "type": "module" in package.json.
java.lang.Throwable: /my-path/.graphqlrc.ts:50
export default config;
^^^^^^