1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- local util = {}
- function util.map(t, fn)
- local res = {}
- for k, v in pairs(t) do res[k] = fn(v, k) end
- return res
- end
- function util.find(t, fn)
- local res = {}
- for k, v in pairs(t) do
- if fn(v, k) then return v end
- end
- end
- function util.coerceValue(node, schemaType, variables)
- variables = variables or {}
- if schemaType.__type == 'NonNull' then
- return util.coerceValue(node, schemaType.ofType, variables)
- end
- if not node then
- return nil
- end
- if node.kind == 'variable' then
- return variables[node.name.value]
- end
- if schemaType.__type == 'List' then
- if node.kind ~= 'list' then
- error('Expected a list')
- end
- return util.map(node.values, function(value)
- return util.coerceValue(node.values[i], schemaType.ofType, variables)
- end)
- end
- if schemaType.__type == 'InputObject' then
- if node.kind ~= 'inputObject' then
- error('Expected an input object')
- end
- return util.map(node.values, function(field)
- if not schemaType.fields[field.name] then
- error('Unknown input object field "' .. field.name .. '"')
- end
- return util.coerceValue(schemaType.fields[field.name].kind, field.value, variables)
- end)
- end
- if schemaType.__type == 'Enum' then
- if node.kind ~= 'enum' then
- error('Expected enum value, got ' .. node.kind)
- end
- if not schemaType.values[node.value] then
- error('Invalid enum value "' .. node.value .. '"')
- end
- return node.value
- end
- if schemaType.__type == 'Scalar' then
- if schemaType.parseLiteral(node) == nil then
- error('Could not coerce "' .. tostring(node.value) .. '" to "' .. schemaType.name .. '"')
- end
- return schemaType.parseLiteral(node)
- end
- end
- function util.compose (f,g)
- return function(...) return f(g(...)) end
- end
- function util.bind1(func, val1)
- return function (val2)
- return func(val1, val2)
- end
- end
- return util
|