dotansimha/graphql-code-generator-community

Enum is being treated as `string` in typescript mongodb plugin

Open

#134 opened on 2021年6月26日

GitHub で見る
 (2 comments) (1 reaction) (0 assignees)TypeScript (195 forks)github user discovery
help wanted

Repository metrics

Stars
 (136 stars)
PR merge metrics
 (PR metrics pending)

説明

Describe the bug

Enum is being treated as string in typescript mongodb plugin To Reproduce Steps to reproduce the behavior:

  1. Create a simple @entity with a @column with enum value.
  2. Generate the schema with typescript & typescript-mongodb plugin

Codesanbox link: Click here

My GraphQL schema:

enum Role {
    USER
    ADMIN
}

type User @entity {
    _id: ID! @id
    name: String! @column
    role: Role! @column
}

My codegen.yml config file:

schema: ./schema.graphql
config:
  enumsAsTypes: true
generates:
  ./mongodb-types.ts:
    plugins:
      - typescript-mongodb
      - typescript

Expected behavior

export type Maybe<T> = T | null;
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
import { ObjectID } from 'mongodb';
export type UserDbObject = {
  _id: ObjectID,
  name: string,
  role: string,  /*********** EXPECTED THIS TYPE TO BE ```Role``` TYPE *******/
};

/** All built-in and custom scalars, mapped to their actual values */
export type Scalars = {
  ID: string;
  String: string;
  Boolean: boolean;
  Int: number;
  Float: number;
};

export type Role =
  | 'USER'
  | 'ADMIN';

export type User = {
  __typename?: 'User';
  _id: Scalars['ID'];
  name: Scalars['String'];
  role: Role;
};

export type AdditionalEntityFields = {
  path?: Maybe<Scalars['String']>;
  type?: Maybe<Scalars['String']>;
};

Environment:

  • OS: Windows 10 64 bit
  • @graphql-codegen/cli: 1.20.1
  • @graphql-codegen/typescript: 1.21.0
  • @graphql-codegen/typescript-mongodb: 1.19.3
  • NodeJS: 14.16.1

Additional context

I have tried only using typescript-mongodb plugin it doesn't even generate enums but when I use typescript plugin extra types are generated which is also I don't want for example:

type User @entity {
  name: String! @column
}

That will generate

export type UserDbObject = {
  name: string
};

and

export type User = {
  name: Scalars['String'];
};

I only want the upper one output.

コントリビューターガイド