prismake / typegql

Create GraphQL schema with TypeScript classes.
https://prismake.github.io/typegql/
MIT License
423 stars 21 forks source link

more info in the error messages #27

Open capaj opened 6 years ago

capaj commented 6 years ago

when I specify a field decorator such as this:

@ObjectType({ description: 'Simple product object type' })
class Product {
  @Field()
  async wow(): Promise<number> {
    return 10
  }
}

I get this error:

TypeError: undefined is not a promise
    at Promise (<anonymous>)
    at resolveType (/home/capaj/git_projects/tests/type-gql/node_modules/typegql/lib/index.js:227:24)
    at inferTypeOrThrow (/home/capaj/git_projects/tests/type-gql/node_modules/typegql/lib/index.js:389:12)
    at resolveRegisteredOrInferedType (/home/capaj/git_projects/tests/type-gql/node_modules/typegql/lib/index.js:607:12)
    at compileFieldConfig$$1 (/home/capaj/git_projects/tests/type-gql/node_modules/typegql/lib/index.js:625:24)
    at /home/capaj/git_projects/tests/type-gql/node_modules/typegql/lib/index.js:658:39
    at Array.forEach (<anonymous>)
    at getAllFields (/home/capaj/git_projects/tests/type-gql/node_modules/typegql/lib/index.js:653:25)
    at /home/capaj/git_projects/tests/type-gql/node_modules/typegql/lib/index.js:666:39
    at Array.forEach (<anonymous>)

Which is fine-you need to specify the type explicitly using {type: Number}, but would it be possible to maybe at least print out a name of the field and the name of the class? It's quite hard to find where the error is coming from if I have just added many fields

pie6k commented 6 years ago

Do you use compileSchema function of typegql to compile schema that is using this type? It should perform validation and do exactly what you're asking here.

Giving good error messages is really important for library like this. I'd appreciate if you'd describe steps to reproduce getting your error.

capaj commented 6 years ago

I just have this very basic project set up and I try most of the things there: https://github.com/capaj/type-gql-with-binding-boilerplate

Our production project is way to complex for experimenting like that. You can see I compile it here: https://github.com/capaj/type-gql-with-binding-boilerplate/blob/3ad576184fbdf405cf4445f1340728d3064a0947/index.ts#L55

and I run it using https://github.com/capaj/type-gql-with-binding-boilerplate/blob/3ad576184fbdf405cf4445f1340728d3064a0947/package.json#L7

I don't have the async field there, but you can easily just copu paste this field in there.