/graphql

GraphQL implementation in Lua

Primary LanguageLuaMIT LicenseMIT

Lua implementation of GraphQL for Tarantool

Lua implementation of GraphQL for Tarantool. It is based on graphql-lua.

Installation

tarantoolctl rocks install graphql

Example

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

  • Parsing (based on luagraphqlparser)
  • Type system
  • Introspection
  • Validation
  • Execution
    • Asynchronous execution (coroutines)

Running tests

tarantoolctl rocks make
tarantoolctl rocks install luatest 0.5.2
.rocks/bin/luatest

License

MIT