GraphQL.ts
The Typescrit implementation for GraphQL, a query language for APIs created by Facebook. See specification here http://graphql.org/
Getting Started
That package is currently in development and not ready for PRODUCTION. Graphql.ts use decorator and metadata for generate a graphql.js model. The why of this package is to provide a suger syntax for Typescript and use the power of the typings. Feel free to contribute, any issues, pull request or stars are welcome.
Using GraphQL.ts
Install GraphQL.ts from npm
npm install --save graphql-ts
We use reflect-metadata for have type at the runtime, so we need to pass some parameters to the compilator
"compilerOptions": "module": "commonjs" "target": "es6" "emitDecoratorMetadata": true "experimentalDecorators": true
GraphQL.ts provides the capabilities to build the schema. This schema will be interprated by GraphQL.js
First, build a GraphQL type schema which maps to your code base.
//That is the entry point of the schemagraphqlTs.initnew root;
This code will generate at the runtime the equivalent model
; var schema = query: name: 'RootQueryType' fields: hello: type: GraphQLString { return 'world'; } ;
Then, serve the result of a query against that schema.
graphqlTs.initnew root; ;graphqlTs.queryqueryString.then;
Decorator
Graphql-ts work with decorator for annotate the code and then generate the model
@objectType
create an object type with the class name as name
@inputType
create an input object type with the class name as name
@scalarType
create a scalar type, for more information about the scalar in graphql check here
@field
add the field in the model, if it's a function, it will be use as resolve. In the resolve, 'this' will be the equivalent of _ in graphql, and the context will be in this.contextQl
@description(name:string)
add a description to the field or the object
@list
same as field but return a list, for more information about the list in graphql check here@returnType(Type)
Cause of lack in typescript about emit decorator for complexe object, when we returne an object, Array for exemple, we are not able to have the T type, so that's why we need to specify that T using the @returnType
@required(['paramName'])
set a params as required
@nullable(boolean)
set a field or input nullable or not, by default is true
@mutation
create a mutation, see here for more information
addUseruserInput:userInput:user
More complex exemple
For more complexe case, check the exemple folder.