js-graphql-intellij-plugin icon indicating copy to clipboard operation
js-graphql-intellij-plugin copied to clipboard

Failed to evaluate config in TS-based project with ESM imports

Open jkazimierczak opened this issue 2 years ago • 3 comments

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:

  1. Clone: https://github.com/jkazimierczak/intellij-graphql-bug-report
  2. npm i
  3. Open .graphqlrc.ts and 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

jkazimierczak avatar Sep 19 '23 20:09 jkazimierczak

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 image

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;

TRUSTMEIMJEDI avatar Oct 13 '23 11:10 TRUSTMEIMJEDI

@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,
  }
}

vepanimas avatar Oct 14 '23 08:10 vepanimas

@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;
^^^^^^

vepanimas avatar Oct 14 '23 08:10 vepanimas