Lua implementation of GraphQL.
Using luvit
lit install bjornbytes/graphqlUsing luarocks
luarocks install graphql
localparse=require'graphql.parse'localschema=require'graphql.schema'localtypes=require'graphql.types'localvalidate=require'graphql.validate'localexecute=require'graphql.execute'-- Parse a querylocalast=parse[[query getUser($id: ID) { person(id: $id) { firstName lastName }}]]-- Create a typelocalPerson=types.object {
name='Person',
fields= {
id=types.id.nonNull,
firstName=types.string.nonNull,
middleName=types.string,
lastName=types.string.nonNull,
age=types.int.nonNull
}
}
-- Create a schemalocalschema=schema.create {
query=types.object {
name='Query',
fields= {
person= {
kind=Person,
arguments= {
id=types.id
},
resolve=function(rootValue, arguments)
ifarguments.id~=1thenreturnnilendreturn {
id=1,
firstName='Bob',
lastName='Ross',
age=52
}
end
}
}
}
}
-- Validate a parsed query against a schemavalidate(schema, ast)
-- ExecutionlocalrootValue= {}
localvariables= { id=1 }
localoperationName='getUser'execute(schema, ast, rootValue, variables, operationName)
--[[{ person = { firstName = 'Bob', lastName = 'Ross' }}]]- Parsing
- Improve error messages
- Type system
- Introspection
- Validation
- Execution
- Asynchronous execution (coroutines)
- Example server
luatests/runner.luaMIT