piglovesyou/graphql-let

graphql does not generate TypedDocumentNodes that can be inferred by TS 4.5

swist opened this issue · 0 comments

swist commented

Hey, I'm setting up a toy project with next and graphql let. I'm unable to get the correct types to go through using TypedDocumentNode unless I do:

My setup is as follows:

#graphql-let.yml
schema: '**/*.graphqls'
documents: '**/*.graphql'
plugins:
  - typescript-operations
  - typed-document-node
cacheDir: .cache
config:
  withHooks: false
useQuery<MyQuery>(MyDocument)
#codegen.yml
schema: lib/type-defs.graphqls
documents: lib/**/*.graphql
generates:
  ./typed-document-nodes.ts:
    plugins:
      - typescript
      - typescript-operations
      - typed-document-node

Generated document from graphql-let

export declare const ViewerDocument: DocumentNode<ViewerQuery, Types.Exact<{
  [key: string]: never;
}>>;
export declare const UpdateNameDocument: DocumentNode<UpdateNameMutation, Types.Exact<{
  name: Types.Scalars['String'];
}>>;

Generated document type from graphql-codegen

export const ViewerDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"Viewer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"viewer"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"Partial"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},...PartialFragmentDoc.definitions]} as unknown as DocumentNode<ViewerQuery, ViewerQueryVariables>;
export const UpdateNameDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateName"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"name"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"updateName"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name"},"value":{"kind":"Variable","name":{"kind":"Name","value":"name"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}}]} as unknown as DocumentNode<UpdateNameMutation, UpdateNameMutationVariables>;

My deps are:

{
  "private": true,
  "scripts": {
    "codegen": "graphql-let",
    "dev": "yarn codegen && next",
    "build": "yarn codegen && next build",
    "test": "yarn codegen && jest",
    "start": "next start",
    "lint": "next lint",
    "lint:fix": "next lint --fix",
    "mock": "graphql-faker ./lib/type-defs.graphqls"
  },
  "dependencies": {
    "@apollo/client": "^3.5.9",
    "@apollo/react-hooks": "^4.0.0",
    "@emotion/react": "^11.8.1",
    "@emotion/styled": "^11.8.1",
    "@graphql-tools/load-files": "6.0.18",
    "@graphql-tools/merge": "6.0.18",
    "@graphql-tools/schema": "6.0.18",
    "@mui/material": "^5.4.3",
    "@mui/x-data-grid": "^5.5.1",
    "apollo-server-micro": "^2.16.1",
    "graphql": "15.3.0",
    "next": "latest",
    "react": "^17.0.2",
    "react-dom": "^17.0.2"
  },
  "devDependencies": {
    "@graphql-codegen/cli": "^2.6.2",
    "@graphql-codegen/import-types-preset": "^2.1.6",
    "@graphql-codegen/plugin-helpers": "^2.2.0",
    "@graphql-codegen/typed-document-node": "^2.2.5",
    "@graphql-codegen/typescript": "^2.4.5",
    "@graphql-codegen/typescript-operations": "^2.3.2",
    "@graphql-typed-document-node/core": "^3.1.1",
    "@types/jest": "^27.0.2",
    "@types/mocha": "^9.0.0",
    "@types/react": "^16.9.46",
    "@types/react-dom": "^16.9.8",
    "@types/react-test-renderer": "^17.0.1",
    "@typescript-eslint/eslint-plugin": "^5.12.1",
    "@typescript-eslint/parser": "^5.12.1",
    "babel-jest": "27.2.5",
    "eslint": "^8.9.0",
    "eslint-config-next": "12.1.0",
    "eslint-config-prettier": "^8.4.0",
    "eslint-plugin-prettier": "^4.0.0",
    "eslint-plugin-react": "^7.28.0",
    "graphql-faker": "^2.0.0-rc.25",
    "graphql-let": "^0.18.6",
    "graphql-tag": "2.11.0",
    "jest": "^27.2.5",
    "prettier": "^2.5.1",
    "react-test-renderer": "^17.0.1",
    "typescript": "^4.4.4",
    "yaml-loader": "0.6.0"
  }
}

I think it should be enough for a repro?