graphql-factory
Tools for building GraphQL
Announcements
-
Alpha releases have started...
-
Documentation on graphqlfactory.io is not currently up to date. This announcement will be removed when it is.
This project is currently undergoing a major re-write for v3.0.0
.
This will include
- a more graphql-like api
- updated GraphQL Factory Definition Format
- custom execution which will allow
- custom directive middleware support
- tracing data for all resolves/middleware
- Schema building tools
- Schema language support
- better code testing
- and more...
v2.1.0
code is available in the v2.1.0
branch. The master branch will
be used for v3.0.0
development
Schema Language Example
Create a schema from schema language and a SchemaBacking
// create a schema language definitionconst definition = ` type Item { id: String! name: String! } type List { id: String! name: String! items: [Item]! } type Query { listLists (search: String): [List] } directive @test(value: String) on SCHEMA | OBJECT | QUERY | FIELD schema @test(value: "I am a schema directive") { query: Query }` // create a schema backing that contains resolversconst backing = // create an async function so we can use await { // build a schema from the definition and backing const schema = await // make a request with the attached request method // you can also use the standard graphql execution // but extensions will not be returned in the result const result = await schema; console;} // call async function to execute query;
Factory Definition Example
Create the same schema using GraphQL Factory Definition Format
// graphql factory definition which includes// definitions and resolversconst definition = directives: test: locations: 'SCHEMA' 'OBJECT' 'QUERY' 'FIELD' args: value: type: 'String' { console } types: Item: type: 'Object' fields: id: type: 'String!' name: type: 'String!' List: type: 'Object' fields: id: type: 'String!' name: type: 'String!' items: type: '[Item]!' { // resolve code } Query: type: 'Object' fields: listLists: type: '[List]' args: search: type: 'String' { // resolve code } schema: directives: 'test' query: 'Query' '@directives': test: value: 'I am a schema directive' // create an async function so we can use await { // build a schema from the definition and backing const schema = await // make a request with the attached request method // you can also use the standard graphql execution // but extensions will not be returned in the result const result = await schema; console;} // call async function to execute query;