Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/bjornbytes/graphql-lua

GraphQL implementation in Lua
https://github.com/bjornbytes/graphql-lua

Last synced: 3 days ago
JSON representation

GraphQL implementation in Lua

Awesome Lists containing this project

README

        

GraphQL Lua [![Join the chat at https://gitter.im/bjornbytes/graphql-lua](https://badges.gitter.im/bjornbytes/graphql-lua.svg)](https://gitter.im/bjornbytes/graphql-lua?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
===

Lua implementation of GraphQL.

Installation
------------

1. Using luvit

lit install bjornbytes/graphql

2. Using luarocks

luarocks install graphql

Example
---

```lua
local parse = require 'graphql.parse'
local schema = require 'graphql.schema'
local types = require 'graphql.types'
local validate = require 'graphql.validate'
local execute = require 'graphql.execute'

-- Parse a query
local ast = parse [[
query getUser($id: ID) {
person(id: $id) {
firstName
lastName
}
}
]]

-- Create a type
local Person = 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 schema
local schema = schema.create {
query = types.object {
name = 'Query',
fields = {
person = {
kind = Person,
arguments = {
id = types.id
},
resolve = function(rootValue, arguments)
if arguments.id ~= 1 then return nil end

return {
id = 1,
firstName = 'Bob',
lastName = 'Ross',
age = 52
}
end
}
}
}
}

-- Validate a parsed query against a schema
validate(schema, ast)

-- Execution
local rootValue = {}
local variables = { id = 1 }
local operationName = 'getUser'

execute(schema, ast, rootValue, variables, operationName)

--[[
{
person = {
firstName = 'Bob',
lastName = 'Ross'
}
}
]]
```

Status
---

- [x] Parsing
- [ ] Improve error messages
- [x] Type system
- [x] Introspection
- [x] Validation
- [x] Execution
- [ ] Asynchronous execution (coroutines)
- [ ] Example server

Running tests
---

```lua
lua tests/runner.lua
```

License
---

MIT