Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

formatArgumentValidationError causing typescript error #258

Closed
jansselt opened this issue Feb 22, 2019 · 11 comments

Comments

Projects
5 participants
@jansselt
Copy link

commented Feb 22, 2019

Following along with @benawad fantastic tutorial. On the validation video.

I'm running into an issue when attempting to use formatArgumentValidationError.

import { ApolloServer } from 'apollo-server-express';
import Express from 'express';
import 'reflect-metadata';
import { buildSchema, formatArgumentValidationError } from 'type-graphql';
import { createConnection } from 'typeorm';

import { RegisterResolver } from './modules/user/Register';

const main = async () => {
  await createConnection();

  const schema = await buildSchema({
    resolvers: [RegisterResolver]
  });

  const apolloServer = new ApolloServer({ schema, formatError: formatArgumentValidationError });

  const app = Express();

  apolloServer.applyMiddleware({ app });

  app.listen(4000, () => {
    // tslint:disable-next-line:no-console
    console.log('Server started on http://localhost:4000/graphql');
  });
};

// tslint:disable-next-line:no-floating-promises
main(); 

This is resulting in the TS error below

$ ts-node-dev --respawn src/index.ts
Using ts-node version 8.0.2, typescript version 3.3.3333
[ERROR] 09:59:16 ⨯ Unable to compile TypeScript:
src/index.ts(16,51): error TS2322: Type '(err: GraphQLError) => { [key: string]: any; }' is not assignable to type '(error: GraphQLError) => GraphQLFormattedError'.
  Type '{ [key: string]: any; }' is missing the following properties from type 'GraphQLFormattedError': message, locations, path

I haven't seen anyone else complain of this, so it feels like an issue with my setup. But I cannot for the life of me figure out why I am getting it while no one else is.

@vfaramond

This comment has been minimized.

Copy link

commented Feb 22, 2019

Hi @jansselt, the typings of formatError have been updated on version 2.4.3 of apollo-server-express. Version 2.4.2 works 👍

@jansselt

This comment has been minimized.

Copy link
Author

commented Feb 22, 2019

Alright, will downgrade for now until this is updated to coincide. Thanks @vfaramond . Was going crazy.

@galkin

This comment has been minimized.

Copy link
Contributor

commented Feb 23, 2019

@19majkel94, sorry for creating duplicate. Do we plan fix this issue?

@19majkel94

This comment has been minimized.

Copy link
Owner

commented Feb 23, 2019

There is a lot of weird type changes in apollo-server right now:
apollographql/apollo-server#2346

I will wait for it to settle down and then re-investigate whether it really changed the signature or the API.

@vfaramond

This comment has been minimized.

Copy link

commented Feb 23, 2019

In the meantime, this is the custom implementation of formatError I use with the last version (2.4.6) of apollo-server-express:

formatError: (error: GraphQLError): GraphQLFormattedError => {
  if (error.originalError instanceof ApolloError) {
    return error;
  }

  if (error.originalError instanceof ArgumentValidationError) {
    const { extensions, locations, message, path } = error;

    error.extensions.code = 'GRAPHQL_VALIDATION_FAILED';

    return {
      extensions,
      locations,
      message,
      path,
    };
  }

  error.message = 'Internal Server Error';

  return error;
}
@19majkel94

This comment has been minimized.

Copy link
Owner

commented Feb 23, 2019

Basically, looks like in new ApolloServer the formatArgumentValidationError is not needed anymore as the original error is reflected in extensions:

{
  "errors": [
    {
      "message": "Argument Validation Error",
      "locations": [
        {
          "line": 22,
          "column": 3
        }
      ],
      "path": [
        "addRecipe"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "validationErrors": [
            {
              "target": {
                "title": "Correct title",
                "description": "Too short description"
              },
              "value": "Too short description",
              "property": "description",
              "children": [],
              "constraints": {
                "length": "description must be longer than or equal to 30 characters"
              }
            }
          ],
          "stacktrace": [
            "Error: Argument Validation Error",
            "    at Object.<anonymous> (F:\\#Projekty\\type-graphql\\src\\resolvers\\validate-arg.ts:29:11)",
            "    at Generator.throw (<anonymous>)",
            "    at rejected (F:\\#Projekty\\type-graphql\\node_modules\\tslib\\tslib.js:105:69)",
            "    at processTicksAndRejections (internal/process/next_tick.js:81:5)"
          ]
        }
      }
    }
  ],
  "data": null
}

@19majkel94 19majkel94 added this to Backlog in Board via automation Feb 23, 2019

@19majkel94 19majkel94 added this to the 1.0.0 release milestone Feb 23, 2019

@19majkel94 19majkel94 moved this from Backlog to In progress in Board Feb 23, 2019

@19majkel94

This comment has been minimized.

Copy link
Owner

commented Feb 23, 2019

I've tested that so I will remove the formatArgumentValidationError at all as it's not needed anymore. The first version of ApolloServer, as well as GraphQLYoga, stripped off additional properties, so I had to provide a format helper for that:

{
  "errors": [
    {
      "message": "Argument Validation Error",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": ["addRecipe"]
    }
  ],
  "data": null
}

@19majkel94 19majkel94 reopened this Feb 23, 2019

@19majkel94

This comment has been minimized.

Copy link
Owner

commented Feb 23, 2019

Fixed via 526886c 🔒

Released in 0.17.0-beta.9 🎉

@19majkel94 19majkel94 closed this Feb 23, 2019

@19majkel94 19majkel94 moved this from In progress to Done in Board Feb 23, 2019

@MichalKalita

This comment has been minimized.

Copy link

commented Feb 23, 2019

It probably doesn't works for validation in nested objects. 😞

@19majkel94

This comment has been minimized.

Copy link
Owner

commented Feb 23, 2019

@Myiyk See #133 - nested inputs are not an instance, so they can't be validated using class-validator. It's not a format error fault.

@19majkel94

This comment has been minimized.

Copy link
Owner

commented Apr 17, 2019

@git-no
Please read this thread once more - this helper was removed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.