From 3bdc1bb59b6d82be5d9b91db81f6165243c13305 Mon Sep 17 00:00:00 2001 From: nieyong Date: Fri, 30 Jun 2017 11:37:30 +0800 Subject: [PATCH] add support for GraphQL Docs Request for client request, add fix can't get the InputObject's Parameter bug, and fix the directive does not work well bug. --- graphql/introspection.lua | 15 ++++++++++++++- graphql/rules.lua | 11 +++++++++-- graphql/util.lua | 9 ++++++++- graphql/validate.lua | 4 ++-- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/graphql/introspection.lua b/graphql/introspection.lua index 526138c..23b34f7 100644 --- a/graphql/introspection.lua +++ b/graphql/introspection.lua @@ -116,6 +116,19 @@ __Directive = types.object({ args = { kind = types.nonNull(types.list(types.nonNull(__InputValue))), resolve = resolveArgs + }, + + onOperation = { + kind = types.boolean, + defaultValue = false + }, + onFragment = { + kind = types.boolean, + defaultValue = false + }, + onField = { + kind = types.boolean, + defaultValue = false } } end @@ -230,7 +243,7 @@ __Type = types.object({ kind = types.list(types.nonNull(__Type)), resolve = function(kind) if kind.__type == 'Object' then - return kind.interfaces + return kind.interface or {} end end }, diff --git a/graphql/rules.lua b/graphql/rules.lua index 61005ea..a82170c 100644 --- a/graphql/rules.lua +++ b/graphql/rules.lua @@ -407,10 +407,17 @@ function rules.variablesAreUsed(node, context) end function rules.variablesAreDefined(node, context) - if context.variableReferences then + local _cv = context.variableReferences + if _cv then local variableMap = {} + local _vn for _, definition in ipairs(node.variableDefinitions or {}) do - variableMap[definition.variable.name.value] = true + _vn = definition.variable.name.value + variableMap[_vn] = true + -- TODO Maybe danger + if not _cv[_vn] then + _cv[_vn] = true + end end for variable in pairs(context.variableReferences) do diff --git a/graphql/util.lua b/graphql/util.lua index 45aa3b1..27b8477 100644 --- a/graphql/util.lua +++ b/graphql/util.lua @@ -6,6 +6,12 @@ function util.map(t, fn) return res end +function util.map_input(t, fn) + local res = {} + for _i, field in pairs(t) do res[field.name] = fn(field) end + return res +end + function util.find(t, fn) local res = {} for k, v in pairs(t) do @@ -75,7 +81,8 @@ function util.coerceValue(node, schemaType, variables) error('Expected an input object') end - return util.map(node.values, function(field) + -- You can get InputTypes`s parameters now, just as input.name + return util.map_input(node.values, function(field) if not schemaType.fields[field.name] then error('Unknown input object field "' .. field.name .. '"') end diff --git a/graphql/validate.lua b/graphql/validate.lua index af255d4..c08ad8a 100644 --- a/graphql/validate.lua +++ b/graphql/validate.lua @@ -59,8 +59,8 @@ local visitors = { rules.variablesHaveCorrectType, rules.variableDefaultValuesHaveCorrectType, exit = { - rules.variablesAreUsed, - rules.variablesAreDefined + rules.variablesAreDefined, + rules.variablesAreUsed } } },