Profile
Back to NewsBack
GitHub Trending 2 min
Reader Mode
captbaritone/grats: Implementation-First GraphQL for TypeScript

captbaritone/grats: Implementation-First GraphQL for TypeScript

13 hours ago

Grats: Implementation-First GraphQL for TypeScript

The simplest way to build a GraphQL server in TypeScript

When you write your GraphQL server in TypeScript, your fields and resolvers are _already_ annotated with type information. _Grats leverages your existing type annotations to automatically extract an executable GraphQL schema from your generic TypeScript resolver code._

By making your TypeScript implementation the source of truth, you never have to worry about validating that your implementation matches your schema. Your implementation _is_ your schema!

Read the blog post.

Example

Here's what it looks like to define a User type with a greeting field using Grats:

/* @gqlType /
class User {
  /* @gqlField /
  name: string;

/* @gqlField / greet(greeting: string): string { return ${greeting}, ${this.name}; } }

After running npx grats, you'll find a schema.ts module that exports an executable schema, and a schema.graphql file contains your GraphQL schema definition:

type User {
  name: String
  greet(greeting: String!): String
}

That's just the beginning! To learn more, Read the docs: https://grats.capt.dev/

Join our Discord!</a>

Contributing

See CONTRIBUTING.md in the repo root for details on how to make changes to this project.

Acknowledgements

  • @mofeiZ and @alunyov for their Relay hack-week project exploring a similar idea.
  • @josephsavona for input on the design of Relay Resolvers which inspired this project.
  • @bradzacher for tips on how to handle TypeScript ASTs.
  • Everyone who worked on Meta's Hack GraphQL server, the developer experience of which inspired this project.
  • A number of other projects which seem to have explored similar ideas in the past:
- ts2gql - ts2graphql - typegraphql-reflection-poc

License

Grats is MIT licensed.

Chat with me