local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Parent.LuauPolyfill);
local l_Array_0 = v1.Array;
local l_Map_0 = v1.Map;
local l_Object_0 = v1.Object;
local l_inspect_0 = require(l_Parent_0.jsutils.inspect).inspect;
local l_invariant_0 = require(l_Parent_0.jsutils.invariant).invariant;
local l_keyValMap_0 = require(l_Parent_0.jsutils.keyValMap).keyValMap;
local l_naturalCompare_0 = require(l_Parent_0.jsutils.naturalCompare).naturalCompare;
local l_GraphQLSchema_0 = require(l_Parent_0.type.schema).GraphQLSchema;
local l_GraphQLDirective_0 = require(l_Parent_0.type.directives).GraphQLDirective;
local v11 = require(l_Parent_0.type.definition);
local _ = require(l_Parent_0.language.ast);
local l_isIntrospectionType_0 = require(l_Parent_0.type.introspection).isIntrospectionType;
local l_GraphQLList_0 = v11.GraphQLList;
local l_GraphQLNonNull_0 = v11.GraphQLNonNull;
local l_GraphQLObjectType_0 = v11.GraphQLObjectType;
local l_GraphQLInterfaceType_0 = v11.GraphQLInterfaceType;
local l_GraphQLUnionType_0 = v11.GraphQLUnionType;
local l_GraphQLEnumType_0 = v11.GraphQLEnumType;
local l_GraphQLInputObjectType_0 = v11.GraphQLInputObjectType;
local l_isListType_0 = v11.isListType;
local l_isNonNullType_0 = v11.isNonNullType;
local l_isScalarType_0 = v11.isScalarType;
local l_isObjectType_0 = v11.isObjectType;
local l_isInterfaceType_0 = v11.isInterfaceType;
local l_isUnionType_0 = v11.isUnionType;
local l_isEnumType_0 = v11.isEnumType;
local l_isInputObjectType_0 = v11.isInputObjectType;
local v29 = nil;
local v30 = nil;
local v31 = nil;
local function v65(v32)
    local v33 = nil;
    local v34 = nil;
    local v35 = nil;
    local v36 = nil;
    local v37 = nil;
    local v38 = nil;
    local v39 = nil;
    local v40 = nil;
    local _ = nil;
    local v42 = v32:toConfig();
    local function v43(v44)
        if not l_isListType_0(v44) then
            if not l_isNonNullType_0(v44) then
                return v34(v44);
            else
                return l_GraphQLNonNull_0.new(v43(v44.ofType));
            end;
        else
            return l_GraphQLList_0.new(v43(v44.ofType));
        end;
    end;
    v34 = function(v45)
        return v33[v45.name];
    end;
    v35 = function(v46)
        if not v46 then
            return nil;
        else
            return (v34(v46));
        end;
    end;
    v36 = function(v47)
        local v48 = v47:toConfig();
        return l_GraphQLDirective_0.new(l_Object_0.assign({}, v48, {
            locations = v31(v48.locations, function(v49)
                return v49;
            end),
            args = v37(v48.args)
        }));
    end;
    v37 = function(v50)
        return v29(v50, function(v51)
            return l_Object_0.assign({}, v51, {
                type = v43(v51.type)
            });
        end);
    end;
    v38 = function(v52)
        return v29(v52, function(v53)
            return l_Object_0.assign({}, v53, {
                type = v43(v53.type),
                args = if not v53.args then nil else v37(v53.args)
            });
        end);
    end;
    v39 = function(v54)
        return v29(v54, function(v55)
            return l_Object_0.assign({}, v55, {
                type = v43(v55.type)
            });
        end);
    end;
    v40 = function(v56)
        return l_Array_0.map(v30(v56), v34);
    end;
    v33 = l_keyValMap_0(v30(v42.types), function(v57)
        return v57.name;
    end, function(v58)
        if not l_isScalarType_0(v58) and not l_isIntrospectionType_0(v58) then
            if not l_isObjectType_0(v58) then
                if not l_isInterfaceType_0(v58) then
                    if not l_isUnionType_0(v58) then
                        if not l_isEnumType_0(v58) then
                            if not l_isInputObjectType_0(v58) then
                                l_invariant_0(false, "Unexpected type: " .. l_inspect_0(v58));
                                error("Unexpected type: " .. l_inspect_0(v58));
                                return ;
                            else
                                local v59 = v58:toConfig();
                                return l_GraphQLInputObjectType_0.new(l_Object_0.assign({}, v59, {
                                    fields = function()
                                        return v39(v59.fields);
                                    end
                                }));
                            end;
                        else
                            local v60 = v58:toConfig();
                            return l_GraphQLEnumType_0.new(l_Object_0.assign({}, v60, {
                                values = v29(v60.values, function(v61)
                                    return v61;
                                end)
                            }));
                        end;
                    else
                        local v62 = v58:toConfig();
                        return l_GraphQLUnionType_0.new(l_Object_0.assign({}, v62, {
                            types = function()
                                return v40(v62.types);
                            end
                        }));
                    end;
                else
                    local v63 = v58:toConfig();
                    return l_GraphQLInterfaceType_0.new(l_Object_0.assign({}, v63, {
                        interfaces = function()
                            return v40(v63.interfaces);
                        end,
                        fields = function()
                            return v38(v63.fields);
                        end
                    }));
                end;
            else
                local v64 = v58:toConfig();
                return l_GraphQLObjectType_0.new(l_Object_0.assign({}, v64, {
                    interfaces = function()
                        return v40(v64.interfaces);
                    end,
                    fields = function()
                        return v38(v64.fields);
                    end
                }));
            end;
        else
            return v58;
        end;
    end);
    return l_GraphQLSchema_0.new(l_Object_0.assign({}, v42, {
        types = v33:values(),
        directives = l_Array_0.map(v30(v42.directives), v36),
        query = v35(v42.query),
        mutation = v35(v42.mutation),
        subscription = v35(v42.subscription)
    }));
end;
v29 = function(v66, v67)
    local v68 = l_Map_0.new();
    for _, v71 in ipairs((v31(v66:keys(), function(v69)
        return v69;
    end))) do
        v68[v71] = v67(v66[v71]);
    end;
    return v68;
end;
v30 = function(v72)
    return v31(v72, function(v73)
        return v73.name;
    end);
end;
v31 = function(v74, v75)
    return l_Array_0.sort(l_Array_0.slice(v74), function(v76, v77)
        return l_naturalCompare_0(v75(v76), (v75(v77)));
    end);
end;
return {
    lexicographicSortSchema = v65
};


local v0 = require(script.Parent.Parent.Parent.LuauPolyfill);
local l_Array_0 = v0.Array;
local l_Boolean_0 = v0.Boolean;
local l_inspect_0 = require(script.Parent.Parent.jsutils.inspect).inspect;
local l_invariant_0 = require(script.Parent.Parent.jsutils.invariant).invariant;
local l_print_0 = require(script.Parent.Parent.language.printer).print;
local l_printBlockString_0 = require(script.Parent.Parent.language.blockString).printBlockString;
local l_isIntrospectionType_0 = require(script.Parent.Parent.type.introspection).isIntrospectionType;
local l_GraphQLString_0 = require(script.Parent.Parent.type.scalars).GraphQLString;
local l_isSpecifiedScalarType_0 = require(script.Parent.Parent.type.scalars).isSpecifiedScalarType;
local v10 = require(script.Parent.Parent.type.directives);
local l_DEFAULT_DEPRECATION_REASON_0 = v10.DEFAULT_DEPRECATION_REASON;
local l_isSpecifiedDirective_0 = v10.isSpecifiedDirective;
local v13 = require(script.Parent.Parent.type.definition);
local l_isScalarType_0 = v13.isScalarType;
local l_isObjectType_0 = v13.isObjectType;
local l_isInterfaceType_0 = v13.isInterfaceType;
local l_isUnionType_0 = v13.isUnionType;
local l_isEnumType_0 = v13.isEnumType;
local l_isInputObjectType_0 = v13.isInputObjectType;
local _ = require(script.Parent.Parent.type.schema);
local _ = require(script.Parent.Parent.language.ast);
local l_astFromValue_0 = require(script.Parent.astFromValue).astFromValue;
local l_NULL_0 = require(script.Parent.astFromValue).NULL;
local v24 = require(script.Parent.Parent.luaUtils.isNillish);
local l_isNillish_0 = v24.isNillish;
local l_isNotNillish_0 = v24.isNotNillish;
local v27 = nil;
local v28 = nil;
local v29 = nil;
local v30 = nil;
local v31 = nil;
local v32 = nil;
local v33 = nil;
local v34 = nil;
local v35 = nil;
local v36 = nil;
local v37 = nil;
local v38 = nil;
local v39 = nil;
local v40 = nil;
local v41 = nil;
local v42 = nil;
local v43 = nil;
local v44 = nil;
local v45 = nil;
local function v48(v46)
    return v29(v46, function(v47)
        return not l_isSpecifiedDirective_0(v47);
    end, v30);
end;
local function v50(v49)
    return v29(v49, l_isSpecifiedDirective_0, l_isIntrospectionType_0);
end;
v30 = function(v51)
    return not l_isSpecifiedScalarType_0(v51) and not l_isIntrospectionType_0(v51);
end;
v29 = function(v52, v53, v54)
    return l_Array_0.join(l_Array_0.filter(l_Array_0.concat({
        v31(v52)
    }, l_Array_0.map(l_Array_0.filter(v52:getDirectives(), v53), function(v55)
        return v32(v55);
    end), l_Array_0.map(l_Array_0.filter(v52:getTypeMap():values(), v54), function(v56)
        return v33(v56);
    end)), function(v57)
        return l_Boolean_0.toJSBoolean(v57);
    end), "\n\n") .. "\n";
end;
v31 = function(v58)
    if not l_isNillish_0(v58.description) or not v34(v58) then
        local v59 = {};
        local v60 = v58:getQueryType();
        if l_isNotNillish_0(v60) then
            table.insert(v59, ("  query: %s"):format(v60.name));
        end;
        local v61 = v58:getMutationType();
        if l_isNotNillish_0(v61) then
            table.insert(v59, ("  mutation: %s"):format(v61.name));
        end;
        local v62 = v58:getSubscriptionType();
        if l_isNotNillish_0(v62) then
            table.insert(v59, ("  subscription: %s"):format(v62.name));
        end;
        return v28(v58) .. ("schema {\n%s\n}"):format(l_Array_0.join(v59, "\n"));
    else
        return ;
    end;
end;
v34 = function(v63)
    local v64 = v63:getQueryType();
    if l_isNotNillish_0(v64) and v64.name ~= "Query" then
        return false;
    else
        local v65 = v63:getMutationType();
        if l_isNotNillish_0(v65) and v65.name ~= "Mutation" then
            return false;
        else
            local v66 = v63:getSubscriptionType();
            if l_isNotNillish_0(v66) and v66.name ~= "Subscription" then
                return false;
            else
                return true;
            end;
        end;
    end;
end;
v33 = function(v67)
    if not l_isScalarType_0(v67) then
        if not l_isObjectType_0(v67) then
            if not l_isInterfaceType_0(v67) then
                if not l_isUnionType_0(v67) then
                    if not l_isEnumType_0(v67) then
                        if not l_isInputObjectType_0(v67) then
                            l_invariant_0(false, "Unexpected type: " .. l_inspect_0(v67));
                            return "";
                        else
                            return v43(v67);
                        end;
                    else
                        return v42(v67);
                    end;
                else
                    return v41(v67);
                end;
            else
                return v40(v67);
            end;
        else
            return v35(v67);
        end;
    else
        return v27(v67);
    end;
end;
v27 = function(v68)
    return v28(v68) .. ("scalar %s"):format(v68.name) .. v44(v68);
end;
local function v72(v69)
    local v70 = v69:getInterfaces();
    if #v70 > 0 then
        return " implements " .. l_Array_0.join(l_Array_0.map(v70, function(v71)
            return v71.name;
        end), " & ");
    else
        return "";
    end;
end;
v35 = function(v73)
    return v28(v73) .. ("type %s"):format(v73.name) .. v72(v73) .. v45(v73);
end;
v40 = function(v74)
    return v28(v74) .. ("interface %s"):format(v74.name) .. v72(v74) .. v45(v74);
end;
v41 = function(v75)
    local v76 = v75:getTypes();
    return v28(v75) .. "union " .. v75.name .. if #v76 > 0 then " = " .. l_Array_0.join(v76, " | ") else "";
end;
v42 = function(v77)
    return v28(v77) .. ("enum %s"):format(v77.name) .. v39((l_Array_0.map(v77:getValues(), function(v78, v79)
        return v28(v78, "  ", v79 == 1) .. "  " .. v78.name .. v38(v78.deprecationReason);
    end)));
end;
v43 = function(v80)
    return v28(v80) .. ("input %s"):format(v80.name) .. v39((l_Array_0.map(v80:getFields():values(), function(v81, v82)
        return v28(v81, "  ", v82 == 1) .. "  " .. v37(v81);
    end)));
end;
v45 = function(v83)
    return v39((l_Array_0.map(v83:getFields():values(), function(v84, v85)
        return v28(v84, "  ", v85 == 1) .. "  " .. v84.name .. v36(v84.args, "  ") .. ": " .. tostring(v84.type) .. v38(v84.deprecationReason);
    end)));
end;
v39 = function(v86)
    if #v86 ~= 0 then
        return " {\n" .. l_Array_0.join(v86, "\n") .. "\n}";
    else
        return "";
    end;
end;
v36 = function(v87, v88)
    local v89 = if v88 ~= nil then v88 else "";
    if #v87 == 0 then
        return "";
    elseif not l_Array_0.every(v87, function(v90)
        return l_isNillish_0(v90.description);
    end) then
        return "(\n" .. l_Array_0.join(l_Array_0.map(v87, function(v91, v92)
            return v28(v91, "  " .. v89, v92 == 1) .. "  " .. v89 .. v37(v91);
        end), "\n") .. "\n" .. v89 .. ")";
    else
        return "(" .. l_Array_0.join(l_Array_0.map(v87, v37), ", ") .. ")";
    end;
end;
v37 = function(v93)
    local v94 = l_astFromValue_0(v93.defaultValue, v93.type);
    local v95 = v93.name .. ": " .. tostring(v93.type);
    if l_isNotNillish_0(v94) then
        v95 = v95 .. (" = %s"):format(l_print_0(v94));
    end;
    return v95 .. v38(v93.deprecationReason);
end;
v32 = function(v96)
    return v28(v96) .. "directive @" .. v96.name .. v36(v96.args) .. (not v96.isRepeatable and "" or " repeatable") .. " on " .. l_Array_0.join(v96.locations, " | ");
end;
v38 = function(v97)
    if not l_isNillish_0(v97) then
        local v98 = l_astFromValue_0(v97, l_GraphQLString_0);
        if v98 and v97 ~= l_DEFAULT_DEPRECATION_REASON_0 then
            return " @deprecated(reason: " .. l_print_0(v98) .. ")";
        else
            return " @deprecated";
        end;
    else
        return "";
    end;
end;
v44 = function(v99)
    if not l_isNillish_0(v99.specifiedByUrl) then
        local v100 = l_astFromValue_0(v99.specifiedByUrl, l_GraphQLString_0);
        l_invariant_0(v100, "Unexpected null value returned from `astFromValue` for specifiedByUrl");
        return " @specifiedBy(url: " .. l_print_0(v100) .. ")";
    else
        return "";
    end;
end;
v28 = function(v101, v102, v103)
    local v104 = if v102 ~= nil then v102 else "";
    local v105 = not (v103 ~= nil) or v103;
    local l_description_0 = v101.description;
    if not l_isNillish_0(l_description_0) then
        local v107 = l_printBlockString_0(l_description_0, "", string.len(l_description_0) > 70);
        local v108 = if not l_Boolean_0.toJSBoolean(v104) or v105 then v104 else "\n" .. v104;
        local v109, _ = string.gsub(v107, "\n", "\n" .. v104);
        return v108 .. v109 .. "\n";
    else
        return "";
    end;
end;
return {
    printSchema = v48,
    printIntrospectionSchema = v50,
    printType = v33,
    NULL = l_NULL_0
};


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Parent.LuauPolyfill);
local l_Array_0 = v1.Array;
local l_Set_0 = v1.Set;
local _ = require(l_Parent_0.jsutils.ObjMap);
local _ = require(l_Parent_0.language.ast);
local l_Kind_0 = require(l_Parent_0.language.kinds).Kind;
local l_visit_0 = require(l_Parent_0.language.visitor).visit;
local v8 = nil;
local v9 = nil;
local function v24(v10)
    local v11 = {};
    local v12 = {};
    for _, v14 in pairs(v10.definitions) do
        local l_kind_0 = v14.kind;
        if l_kind_0 == l_Kind_0.OPERATION_DEFINITION then
            table.insert(v11, v14);
        elseif l_kind_0 == l_Kind_0.FRAGMENT_DEFINITION then
            v12[v14.name.value] = v8(v14.selectionSet);
        end;
    end;
    local v16 = {};
    for _, v18 in pairs(v11) do
        local v19 = l_Set_0.new();
        for _, v21 in pairs(v8(v18.selectionSet)) do
            v9(v19, v12, v21);
        end;
        v16[not not v18.name and v18.name.value or ""] = {
            kind = l_Kind_0.DOCUMENT,
            definitions = l_Array_0.filter(v10.definitions, function(v22)
                local v23 = true;
                if v22 ~= v18 then
                    v23 = false;
                    if v22.kind == l_Kind_0.FRAGMENT_DEFINITION then
                        v23 = v19:has(v22.name.value);
                    end;
                end;
                return v23;
            end)
        };
    end;
    return v16;
end;
v9 = function(v25, v26, v27)
    if not v25:has(v27) then
        v25:add(v27);
        local v28 = v26[v27];
        if v28 ~= nil then
            for _, v30 in pairs(v28) do
                v9(v25, v26, v30);
            end;
        end;
    end;
end;
v8 = function(v31)
    local v32 = {};
    l_visit_0(v31, {
        FragmentSpread = function(_, v34)
            table.insert(v32, v34.name.value);
        end
    });
    return v32;
end;
return {
    separateOperations = v24
};


local l_Parent_0 = script.Parent.Parent;
local l_language_0 = l_Parent_0.language;
local l_String_0 = require(l_Parent_0.Parent.LuauPolyfill).String;
local v3 = require(l_language_0.source);
local l_Source_0 = v3.Source;
local l_isSource_0 = v3.isSource;
local l_TokenKind_0 = require(l_language_0.tokenKind).TokenKind;
local v7 = require(l_language_0.lexer);
local l_Lexer_0 = v7.Lexer;
local l_isPunctuatorTokenKind_0 = v7.isPunctuatorTokenKind;
local v10 = require(l_language_0.blockString);
local l_dedentBlockStringValue_0 = v10.dedentBlockStringValue;
local l_getBlockStringIndentation_0 = v10.getBlockStringIndentation;
local v13 = nil;
local function v24(v14)
    local v15 = if not l_isSource_0(v14) then l_Source_0.new(v14) else v14;
    local l_body_0 = v15.body;
    local v17 = l_Lexer_0.new(v15);
    local v18 = "";
    local v19 = false;
    while v17:advance().kind ~= l_TokenKind_0.EOF do
        local l_token_0 = v17.token;
        local l_kind_0 = l_token_0.kind;
        local v22 = not l_isPunctuatorTokenKind_0(l_token_0.kind);
        if v19 and (v22 or l_token_0.kind == l_TokenKind_0.SPREAD) then
            v18 = v18 .. " ";
        end;
        local v23 = l_String_0.slice(l_body_0, l_token_0.start, l_token_0._end);
        v18 = if l_kind_0 == l_TokenKind_0.BLOCK_STRING then v18 .. v13(v23) else v18 .. v23;
        v19 = v22;
    end;
    return v18;
end;
v13 = function(v25)
    local v26 = l_dedentBlockStringValue_0((l_String_0.slice(v25, 4, -3)));
    if l_getBlockStringIndentation_0(v26) > 0 then
        v26 = "\n" .. v26;
    end;
    local v27 = utf8.len(v26);
    assert(v27 ~= nil, "invalid utf8 detected: " .. v26);
    local v28 = l_String_0.slice(v26, v27);
    local v29 = false;
    if v28 == "\"" then
        v29 = l_String_0.slice(v26, -4) ~= "\\\"\"\"";
    end;
    if v29 or v28 == "\\" then
        v26 = v26 .. "\n";
    end;
    return "\"\"\"" .. v26 .. "\"\"\"";
end;
return {
    stripIgnoredCharacters = v24
};


local l_Parent_0 = script.Parent.Parent;
local l_Array_0 = require(l_Parent_0.Parent.LuauPolyfill).Array;
local v2 = require(l_Parent_0.type.definition);
local l_isInterfaceType_0 = v2.isInterfaceType;
local l_isObjectType_0 = v2.isObjectType;
local l_isListType_0 = v2.isListType;
local l_isNonNullType_0 = v2.isNonNullType;
local l_isAbstractType_0 = v2.isAbstractType;
local function v8(v9, v10)
    if v9 == v10 then
        return true;
    elseif not l_isNonNullType_0(v9) or not l_isNonNullType_0(v10) then
        if not l_isListType_0(v9) or not l_isListType_0(v10) then
            return false;
        else
            return v8(v9.ofType, v10.ofType);
        end;
    else
        return v8(v9.ofType, v10.ofType);
    end;
end;
local function v11(v12, v13, v14)
    if v13 == v14 then
        return true;
    elseif not l_isNonNullType_0(v14) then
        if not l_isNonNullType_0(v13) then
            if not l_isListType_0(v14) then
                if not l_isListType_0(v13) then
                    return (l_isAbstractType_0(v14) and (l_isInterfaceType_0(v13) or l_isObjectType_0(v13))) and v12:isSubType(v14, v13);
                else
                    return false;
                end;
            elseif not l_isListType_0(v13) then
                return false;
            else
                return v11(v12, v13.ofType, v14.ofType);
            end;
        else
            return v11(v12, v13.ofType, v14);
        end;
    elseif not l_isNonNullType_0(v13) then
        return false;
    else
        return v11(v12, v13.ofType, v14.ofType);
    end;
end;
return {
    isEqualType = v8,
    isTypeSubTypeOf = v11,
    doTypesOverlap = function(v15, v16, v17)
        if v16 == v17 then
            return true;
        elseif not l_isAbstractType_0(v16) then
            if not l_isAbstractType_0(v17) then
                return false;
            else
                return v15:isSubType(v17, v16);
            end;
        elseif not l_isAbstractType_0(v17) then
            return v15:isSubType(v16, v17);
        else
            return l_Array_0.some(v15:getPossibleTypes(v16), function(v18)
                return v15:isSubType(v17, v18);
            end);
        end;
    end
};


local l_Parent_0 = script.Parent.Parent;
local l_inspect_0 = require(l_Parent_0.jsutils.inspect).inspect;
local l_invariant_0 = require(l_Parent_0.jsutils.invariant).invariant;
local _ = require(l_Parent_0.language.ast);
local l_Kind_0 = require(l_Parent_0.language.kinds).Kind;
local v5 = require(l_Parent_0.type.definition);
local l_GraphQLList_0 = v5.GraphQLList;
local l_GraphQLNonNull_0 = v5.GraphQLNonNull;
local _ = require(l_Parent_0.type.schema);
local function v9(v10, v11)
    local v12 = nil;
    if v11.kind == l_Kind_0.LIST_TYPE then
        v12 = v9(v10, v11.type);
        return v12 and l_GraphQLList_0.new(v12);
    elseif v11.kind == l_Kind_0.NON_NULL_TYPE then
        v12 = v9(v10, v11.type);
        return v12 and l_GraphQLNonNull_0.new(v12);
    elseif v11.kind == l_Kind_0.NAMED_TYPE then
        return v10:getType(v11.name.value);
    else
        l_invariant_0(false, "Unexpected type node: " .. l_inspect_0(v11));
        return nil;
    end;
end;
return {
    typeFromAST = v9
};


local l_Parent_0 = script.Parent.Parent;
local _ = require(l_Parent_0.jsutils.ObjMap);
local l_keyMap_0 = require(l_Parent_0.jsutils.keyMap).keyMap;
local l_inspect_0 = require(l_Parent_0.jsutils.inspect).inspect;
local l_invariant_0 = require(l_Parent_0.jsutils.invariant).invariant;
local _ = require(l_Parent_0.language.ast);
local l_Kind_0 = require(l_Parent_0.language.kinds).Kind;
local v7 = require(l_Parent_0.type.definition);
local l_isLeafType_0 = v7.isLeafType;
local l_isInputObjectType_0 = v7.isInputObjectType;
local l_isListType_0 = v7.isListType;
local l_isNonNullType_0 = v7.isNonNullType;
local v12 = require(l_Parent_0.luaUtils.null);
local v13 = nil;
local function v14(v15, v16, v17)
    if v15 then
        if v15.kind == l_Kind_0.VARIABLE then
            local l_value_0 = v15.name.value;
            if not (v17 ~= nil) or v17[l_value_0] == nil then
                return ;
            else
                local v19 = v17[l_value_0];
                if not (v19 == v12) or not l_isNonNullType_0(v16) then
                    return v19;
                else
                    return ;
                end;
            end;
        elseif not l_isNonNullType_0(v16) then
            if v15.kind == l_Kind_0.NULL then
                return v12;
            elseif not l_isListType_0(v16) then
                if not l_isInputObjectType_0(v16) then
                    if not l_isLeafType_0(v16) then
                        l_invariant_0(false, "Unexpected input type: " .. l_inspect_0(v16));
                        return ;
                    else
                        local v20 = nil;
                        if pcall(function()
                            v20 = v16:parseLiteral(v15, v17);
                        end) then
                            if v20 == nil then
                                return ;
                            else
                                return v20;
                            end;
                        else
                            return ;
                        end;
                    end;
                elseif v15.kind ~= l_Kind_0.OBJECT then
                    return ;
                else
                    local v21 = {};
                    local v23 = l_keyMap_0(v15.fields, function(v22)
                        return v22.name.value;
                    end);
                    for _, v25 in ipairs(v16:getFields():values()) do
                        local v26 = v23[v25.name];
                        if v26 and not v13(v26.value, v17) then
                            local v27 = v14(v26.value, v25.type, v17);
                            if v27 == nil then
                                return ;
                            else
                                v21[v25.name] = v27;
                            end;
                        elseif v25.defaultValue ~= nil then
                            v21[v25.name] = v25.defaultValue;
                        elseif l_isNonNullType_0(v25.type) then
                            return ;
                        end;
                    end;
                    return v21;
                end;
            else
                local l_ofType_0 = v16.ofType;
                if v15.kind == l_Kind_0.LIST then
                    local v29 = {};
                    for _, v31 in ipairs(v15.values) do
                        if not v13(v31, v17) then
                            local v32 = v14(v31, l_ofType_0, v17);
                            if v32 == nil then
                                return ;
                            else
                                table.insert(v29, v32);
                            end;
                        elseif not l_isNonNullType_0(l_ofType_0) then
                            table.insert(v29, v12);
                        else
                            return ;
                        end;
                    end;
                    return v29;
                else
                    local v33 = v14(v15, l_ofType_0, v17);
                    if v33 == nil then
                        return ;
                    else
                        return {
                            v33
                        };
                    end;
                end;
            end;
        elseif v15.kind == l_Kind_0.NULL then
            return ;
        else
            return v14(v15, v16.ofType, v17);
        end;
    else
        return ;
    end;
end;
v13 = function(v34, v35)
    local v36 = false;
    if v34.kind == l_Kind_0.VARIABLE then
        v36 = true;
        if v35 ~= nil then
            v36 = v35[v34.name.value] == nil;
        end;
    end;
    return v36;
end;
return {
    valueFromAST = v14
};


local l_Parent_0 = script.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local l_jsutils_0 = l_Parent_0.jsutils;
local l_language_0 = l_Parent_0.language;
local v4 = require(l_Parent_1.LuauPolyfill);
local l_Array_0 = v4.Array;
local l_coerceToTable_0 = v4.coerceToTable;
local v7 = require(l_Parent_0.luaUtils.null);
local _ = require(l_jsutils_0.ObjMap);
local l_inspect_0 = require(l_jsutils_0.inspect).inspect;
local l_invariant_0 = require(l_jsutils_0.invariant).invariant;
local l_keyValMap_0 = require(l_jsutils_0.keyValMap).keyValMap;
local l_Kind_0 = require(l_language_0.kinds).Kind;
local _ = require(l_language_0.ast);
local function v14(v15, v16)
    if v15.kind == l_Kind_0.NULL then
        return v7;
    elseif v15.kind == l_Kind_0.INT then
        return (tonumber(v15.value, 10));
    elseif v15.kind == l_Kind_0.FLOAT then
        return (tonumber(v15.value));
    elseif not (v15.kind ~= l_Kind_0.STRING and v15.kind ~= l_Kind_0.ENUM) or v15.kind == l_Kind_0.BOOLEAN then
        return v15.value;
    elseif v15.kind == l_Kind_0.LIST then
        return l_Array_0.map(v15.values, function(v17)
            return v14(v17, v16);
        end);
    elseif v15.kind == l_Kind_0.OBJECT then
        return l_coerceToTable_0(l_keyValMap_0(v15.fields, function(v18)
            return v18.name.value;
        end, function(v19)
            return v14(v19.value, v16);
        end));
    elseif v15.kind == l_Kind_0.VARIABLE then
        return v16 and v16[v15.name.value];
    else
        l_invariant_0(false, "Unexpected value node: " .. l_inspect_0(v15));
        error("Unexpected value node: " .. l_inspect_0(v15));
        return ;
    end;
end;
return {
    valueFromASTUntyped = v14
};


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Parent.LuauPolyfill);
local l_Array_0 = v1.Array;
local l_Map_0 = v1.Map;
local _ = require(l_Parent_0.jsutils.ObjMap);
local l_language_0 = l_Parent_0.language;
local l_Kind_0 = require(l_language_0.kinds).Kind;
local l_visit_0 = require(l_language_0.visitor).visit;
local _ = require(l_language_0.ast);
local _ = require(l_Parent_0.error.GraphQLError);
local v10 = require(l_Parent_0.utilities.TypeInfo);
local l_TypeInfo_0 = v10.TypeInfo;
local l_visitWithTypeInfo_0 = v10.visitWithTypeInfo;
local _ = require(l_Parent_0.type.schema);
local _ = require(l_Parent_0.type.directives);
local _ = require(l_Parent_0.type.definition);
local v16 = {};
local v17 = {
    __index = v16
};
v16.new = function(v18, v19)
    return (setmetatable({
        _ast = v18,
        _fragments = nil,
        _fragmentSpreads = {},
        _recursivelyReferencedFragments = {},
        _onError = v19
    }, v17));
end;
v16.reportError = function(v20, v21)
    v20._onError(v21);
end;
v16.getDocument = function(v22)
    return v22._ast;
end;
v16.getFragment = function(v23, v24)
    local v25 = nil;
    if not v23._fragments then
        v25 = {};
        for _, v27 in ipairs(v23:getDocument().definitions) do
            if v27.kind == l_Kind_0.FRAGMENT_DEFINITION then
                v25[v27.name.value] = v27;
            end;
        end;
        v23._fragments = v25;
    else
        v25 = v23._fragments;
    end;
    return v25[v24];
end;
v16.getFragmentSpreads = function(v28, v29)
    local v30 = v28._fragmentSpreads[v29] or {};
    if not v28._fragmentSpreads[v29] then
        local v31 = {
            v29
        };
        while #v31 ~= 0 do
            for _, v33 in ipairs(table.remove(v31).selections) do
                if v33.kind == l_Kind_0.FRAGMENT_SPREAD then
                    table.insert(v30, v33);
                elseif v33.selectionSet then
                    table.insert(v31, v33.selectionSet);
                end;
            end;
        end;
        v28._fragmentSpreads[v29] = v30;
    end;
    return v30;
end;
v16.getRecursivelyReferencedFragments = function(v34, v35)
    local v36 = v34._recursivelyReferencedFragments[v35] or {};
    if not v34._recursivelyReferencedFragments[v35] then
        local v37 = {};
        local v38 = {
            v35.selectionSet
        };
        while #v38 ~= 0 do
            for _, v40 in ipairs(v34:getFragmentSpreads((table.remove(v38)))) do
                local l_value_0 = v40.name.value;
                if v37[l_value_0] ~= true then
                    v37[l_value_0] = true;
                    local v42 = v34:getFragment(l_value_0);
                    if v42 then
                        table.insert(v36, v42);
                        table.insert(v38, v42.selectionSet);
                    end;
                end;
            end;
        end;
        v34._recursivelyReferencedFragments[v35] = v36;
    end;
    return v36;
end;
local v43 = setmetatable({}, {
    __index = v16
});
local v44 = {
    __index = v43
};
v43.new = function(v45, v46, v47)
    local v48 = v16.new(v45, v47);
    v48._schema = v46;
    return (setmetatable(v48, v44));
end;
v43.getSchema = function(v49)
    return v49._schema;
end;
local v50 = setmetatable({}, {
    __index = v16
});
local v51 = {
    __index = v50
};
v50.new = function(v52, v53, v54, v55)
    local v56 = v16.new(v53, v55);
    v56._schema = v52;
    v56._typeInfo = v54;
    v56._variableUsages = l_Map_0.new();
    v56._recursiveVariableUsages = l_Map_0.new();
    return (setmetatable(v56, v51));
end;
v50.getSchema = function(v57)
    return v57._schema;
end;
v50.getVariableUsages = function(v58, v59)
    local v60 = v58._variableUsages[v59];
    if not v60 then
        local v61 = {};
        local v62 = l_TypeInfo_0.new(v58._schema);
        l_visit_0(v59, l_visitWithTypeInfo_0(v62, {
            VariableDefinition = function()
                return false;
            end,
            Variable = function(_, v64)
                table.insert(v61, {
                    node = v64,
                    type = v62:getInputType(),
                    defaultValue = v62:getDefaultValue()
                });
            end
        }));
        v60 = v61;
        v58._variableUsages[v59] = v60;
    end;
    return v60;
end;
v50.getRecursiveVariableUsages = function(v65, v66)
    local v67 = v65._recursiveVariableUsages[v66];
    if not v67 then
        v67 = v65:getVariableUsages(v66);
        for _, v69 in ipairs(v65:getRecursivelyReferencedFragments(v66)) do
            v67 = l_Array_0.concat(v67, v65:getVariableUsages(v69));
        end;
        v65._recursiveVariableUsages[v66] = v67;
    end;
    return v67;
end;
v50.getType = function(v70)
    return v70._typeInfo:getType();
end;
v50.getParentType = function(v71)
    return v71._typeInfo:getParentType();
end;
v50.getInputType = function(v72)
    return v72._typeInfo:getInputType();
end;
v50.getParentInputType = function(v73)
    return v73._typeInfo:getParentInputType();
end;
v50.getFieldDef = function(v74)
    return v74._typeInfo:getFieldDef();
end;
v50.getDirective = function(v75)
    return v75._typeInfo:getDirective();
end;
v50.getArgument = function(v76)
    return v76._typeInfo:getArgument();
end;
v50.getEnumValue = function(v77)
    return v77._typeInfo:getEnumValue();
end;
return {
    ASTValidationContext = v16,
    SDLValidationContext = v43,
    ValidationContext = v50
};


local l_Parent_0 = script.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local l_Array_0 = require(l_Parent_1.Parent.LuauPolyfill).Array;
local l_parse_0 = require(l_Parent_1.language.parser).parse;
local _ = require(l_Parent_1.type.schema);
local l_buildSchema_0 = require(l_Parent_1.utilities.buildASTSchema).buildSchema;
local v6 = require(l_Parent_0.validate);
local l_validate_0 = v6.validate;
local l_validateSDL_0 = v6.validateSDL;
local v9 = l_buildSchema_0("  interface Being {\n    name(surname: Boolean): String\n  }\n\n  interface Mammal {\n    mother: Mammal\n    father: Mammal\n  }\n\n  interface Pet implements Being {\n    name(surname: Boolean): String\n  }\n\n  interface Canine implements Mammal & Being {\n    name(surname: Boolean): String\n    mother: Canine\n    father: Canine\n  }\n\n  enum DogCommand {\n    SIT\n    HEEL\n    DOWN\n  }\n\n  type Dog implements Being & Pet & Mammal & Canine {\n    name(surname: Boolean): String\n    nickname: String\n    barkVolume: Int\n    barks: Boolean\n    doesKnowCommand(dogCommand: DogCommand): Boolean\n    isHouseTrained(atOtherHomes: Boolean = true): Boolean\n    isAtLocation(x: Int, y: Int): Boolean\n    mother: Dog\n    father: Dog\n  }\n\n  type Cat implements Being & Pet {\n    name(surname: Boolean): String\n    nickname: String\n    meows: Boolean\n    meowsVolume: Int\n    furColor: FurColor\n  }\n\n  union CatOrDog = Cat | Dog\n\n  interface Intelligent {\n    iq: Int\n  }\n\n  type Human implements Being & Intelligent {\n    name(surname: Boolean): String\n    pets: [Pet]\n    relatives: [Human]\n    iq: Int\n  }\n\n  type Alien implements Being & Intelligent {\n    name(surname: Boolean): String\n    numEyes: Int\n    iq: Int\n  }\n\n  union DogOrHuman = Dog | Human\n\n  union HumanOrAlien = Human | Alien\n\n  enum FurColor {\n    BROWN\n    BLACK\n    TAN\n    SPOTTED\n    NO_FUR\n    UNKNOWN\n  }\n\n  input ComplexInput {\n    requiredField: Boolean Boolean Int\n    stringField: String\n    booleanField: Boolean\n    stringListField: [String]\n  }\n\n  type ComplicatedArgs {\n    # TODO List\n    # TODO Coercion\n    # TODO NotNulls\n    intArgField(intArg: Int): String\n    nonNullIntArgField(nonNullIntArg: Int String\n    stringArgField(stringArg: String): String\n    booleanArgField(booleanArg: Boolean): String\n    enumArgField(enumArg: FurColor): String\n    floatArgField(floatArg: Float): String\n    idArgField(idArg: ID): String\n    stringListArgField(stringListArg: [String]): String\n    stringListNonNullArgField(stringListNonNullArg: [String String\n    complexArgField(complexArg: ComplexInput): String\n    multipleReqs(req1: Int Int String\n    nonNullFieldWithDefault(arg: Int String\n    multipleOpts(opt1: Int = 0, opt2: Int = 0): String\n    multipleOptAndReq(req1: Int Int Int = 0, opt2: Int = 0): String\n  }\n\n  type QueryRoot {\n    human(id: ID): Human\n    alien: Alien\n    dog: Dog\n    cat: Cat\n    pet: Pet\n    catOrDog: CatOrDog\n    dogOrHuman: DogOrHuman\n    humanOrAlien: HumanOrAlien\n    complicatedArgs: ComplicatedArgs\n  }\n\n  schema {\n    query: QueryRoot\n  }\n\n  directive @onQuery on QUERY\n  directive @onMutation on MUTATION\n  directive @onSubscription on SUBSCRIPTION\n  directive @onField on FIELD\n  directive @onFragmentDefinition on FRAGMENT_DEFINITION\n  directive @onFragmentSpread on FRAGMENT_SPREAD\n  directive @onInlineFragment on INLINE_FRAGMENT\n  directive @onVariableDefinition on VARIABLE_DEFINITION\n");
local function v15(v10, v11, v12, v13)
    return v10((l_Array_0.map(l_validate_0(v11, l_parse_0(v13), {
        v12
    }), function(v14)
        return {
            message = v14.message,
            locations = v14.locations
        };
    end)));
end;
return {
    testSchema = v9,
    expectValidationErrorsWithSchema = v15,
    expectValidationErrors = function(v16, v17, v18)
        return v15(v16, v9, v17, v18);
    end,
    expectSDLValidationErrors = function(v19, v20, v21, v22)
        return v19((l_Array_0.map(l_validateSDL_0(l_parse_0(v22), v20, {
            v21
        }), function(v23)
            return {
                message = v23.message,
                locations = v23.locations
            };
        end)));
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_language_0 = l_Parent_0.language;
local l_Kind_0 = require(l_language_0.kinds).Kind;
local l_isExecutableDefinitionNode_0 = require(l_language_0.predicates).isExecutableDefinitionNode;
return {
    ExecutableDefinitionsRule = function(v5)
        return {
            Document = function(_, v7)
                for _, v9 in ipairs(v7.definitions) do
                    if not l_isExecutableDefinitionNode_0(v9) then
                        local _ = nil;
                        v5:reportError(l_GraphQLError_0.new(("The %s definition is not executable."):format((not (v9.kind ~= l_Kind_0.SCHEMA_DEFINITION) or v9.kind == l_Kind_0.SCHEMA_EXTENSION) and "schema" or "\"" .. v9.name.value .. "\""), v9));
                    end;
                end;
                return false;
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_jsutils_0 = l_Parent_0.jsutils;
local l_Array_0 = require(l_Parent_0.Parent.LuauPolyfill).Array;
local l_didYouMean_0 = require(l_jsutils_0.didYouMean).didYouMean;
local l_suggestionList_0 = require(l_jsutils_0.suggestionList).suggestionList;
local l_naturalCompare_0 = require(l_jsutils_0.naturalCompare).naturalCompare;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local v7 = require(l_Parent_0.type.definition);
local l_isObjectType_0 = v7.isObjectType;
local l_isInterfaceType_0 = v7.isInterfaceType;
local l_isAbstractType_0 = v7.isAbstractType;
local v11 = nil;
local v12 = nil;
local v20 = {
    FieldsOnCorrectTypeRule = function(v13)
        return {
            Field = function(_, v15)
                local v16 = v13:getParentType();
                if not (not v16 or v13:getFieldDef()) then
                    local v17 = v13:getSchema();
                    local l_value_0 = v15.name.value;
                    local v19 = l_didYouMean_0("to use an inline fragment on", v12(v17, v16, l_value_0));
                    if v19 == "" then
                        v19 = l_didYouMean_0(v11(v16, l_value_0));
                    end;
                    v13:reportError(l_GraphQLError_0.new(("Cannot query field \"%s\" on type \"%s\"."):format(l_value_0, v16.name) .. v19, v15));
                end;
            end
        };
    end
};
v12 = function(v21, v22, v23)
    if l_isAbstractType_0(v22) then
        local v24 = {};
        local v25 = {};
        for _, v27 in ipairs(v21:getPossibleTypes(v22)) do
            if v27:getFields():get(v23) then
                v24[v27] = true;
                v25[v27.name] = 1;
                for _, v29 in ipairs(v27:getInterfaces()) do
                    if v29:getFields():get(v23) then
                        v24[v29] = true;
                        v25[v29.name] = (v25[v29.name] or 0) + 1;
                    end;
                end;
            end;
        end;
        local v30 = {};
        for v31, _ in pairs(v24) do
            table.insert(v30, v31);
        end;
        l_Array_0.sort(v30, function(v33, v34)
            local v35 = v25[v34.name] - v25[v33.name];
            if v35 ~= 0 then
                return v35;
            elseif not l_isInterfaceType_0(v33) or not v21:isSubType(v33, v34) then
                if not l_isInterfaceType_0(v34) or not v21:isSubType(v34, v33) then
                    return l_naturalCompare_0(v33.name, v34.name);
                else
                    return 1;
                end;
            else
                return -1;
            end;
        end);
        return l_Array_0.map(v30, function(v36)
            return v36.name;
        end);
    else
        return {};
    end;
end;
v11 = function(v37, v38)
    if not l_isObjectType_0(v37) and not l_isInterfaceType_0(v37) then
        return {};
    else
        return l_suggestionList_0(v38, (v37:getFields():keys()));
    end;
end;
return v20;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_print_0 = require(l_Parent_0.language.printer).print;
local l_isCompositeType_0 = require(l_Parent_0.type.definition).isCompositeType;
local l_typeFromAST_0 = require(l_Parent_0.utilities.typeFromAST).typeFromAST;
return {
    FragmentsOnCompositeTypesRule = function(v5)
        return {
            InlineFragment = function(_, v7)
                local l_typeCondition_0 = v7.typeCondition;
                if l_typeCondition_0 then
                    local v9 = l_typeFromAST_0(v5:getSchema(), l_typeCondition_0);
                    if not (not v9 or l_isCompositeType_0(v9)) then
                        v5:reportError(l_GraphQLError_0.new(("Fragment cannot condition on non composite type \"%s\"."):format((l_print_0(l_typeCondition_0))), l_typeCondition_0));
                    end;
                end;
            end,
            FragmentDefinition = function(_, v11)
                local v12 = l_typeFromAST_0(v5:getSchema(), v11.typeCondition);
                if not (not v12 or l_isCompositeType_0(v12)) then
                    v5:reportError(l_GraphQLError_0.new(("Fragment \"%s\" cannot condition on non composite type \"%s\"."):format(v11.name.value, (l_print_0(v11.typeCondition))), v11.typeCondition));
                end;
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Parent.LuauPolyfill);
local l_Array_0 = v1.Array;
local l_Object_0 = v1.Object;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_language_0 = l_Parent_0.language;
local l_jsutils_0 = l_Parent_0.jsutils;
local l_didYouMean_0 = require(l_jsutils_0.didYouMean).didYouMean;
local l_suggestionList_0 = require(l_jsutils_0.suggestionList).suggestionList;
local l_Kind_0 = require(l_language_0.kinds).Kind;
local l_specifiedDirectives_0 = require(l_Parent_0.type.directives).specifiedDirectives;
local v11 = {};
v11.KnownArgumentNamesRule = function(v12)
    return l_Object_0.assign({}, v11.KnownArgumentNamesOnDirectivesRule(v12), {
        Argument = function(_, v14)
            local v15 = v12:getArgument();
            local v16 = v12:getFieldDef();
            local v17 = v12:getParentType();
            if not ((v15 or not v16) or not v17) then
                local l_value_0 = v14.name.value;
                v12:reportError(l_GraphQLError_0.new(("Unknown argument \"%s\" on field \"%s.%s\"."):format(l_value_0, v17.name, v16.name) .. l_didYouMean_0((l_suggestionList_0(l_value_0, (l_Array_0.map(v16.args, function(v19)
                    return v19.name;
                end))))), v14));
            end;
        end
    });
end;
v11.KnownArgumentNamesOnDirectivesRule = function(v20)
    local v21 = {};
    local v22 = v20:getSchema();
    local l_l_specifiedDirectives_0_0 = l_specifiedDirectives_0;
    if v22 then
        l_l_specifiedDirectives_0_0 = v22:getDirectives();
    end;
    for _, v25 in ipairs(l_l_specifiedDirectives_0_0) do
        v21[v25.name] = l_Array_0.map(v25.args, function(v26)
            return v26.name;
        end);
    end;
    for _, v28 in ipairs(v20:getDocument().definitions) do
        if v28.kind == l_Kind_0.DIRECTIVE_DEFINITION then
            v21[v28.name.value] = l_Array_0.map(v28.arguments or {}, function(v29)
                return v29.name.value;
            end);
        end;
    end;
    return {
        Directive = function(_, v31)
            local l_value_1 = v31.name.value;
            local v33 = v21[l_value_1];
            if not (not v31.arguments or not v33) then
                for _, v35 in ipairs(v31.arguments) do
                    local l_value_2 = v35.name.value;
                    if l_Array_0.indexOf(v33, l_value_2) == -1 then
                        v20:reportError(l_GraphQLError_0.new(("Unknown argument \"%s\" on directive \"@%s\"."):format(l_value_2, l_value_1) .. l_didYouMean_0((l_suggestionList_0(l_value_2, v33))), v35));
                    end;
                end;
            end;
            return false;
        end
    };
end;
return v11;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Array_0 = require(l_Parent_0.Parent.LuauPolyfill).Array;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_language_0 = l_Parent_0.language;
local l_jsutils_0 = l_Parent_0.jsutils;
local l_inspect_0 = require(l_jsutils_0.inspect).inspect;
local l_invariant_0 = require(l_jsutils_0.invariant).invariant;
local l_Kind_0 = require(l_language_0.kinds).Kind;
local l_DirectiveLocation_0 = require(l_language_0.directiveLocation).DirectiveLocation;
local l_specifiedDirectives_0 = require(l_Parent_0.type.directives).specifiedDirectives;
local v10 = {};
local v11 = nil;
local v12 = nil;
v10.KnownDirectivesRule = function(v13)
    local v14 = {};
    local v15 = v13:getSchema();
    local l_l_specifiedDirectives_0_0 = l_specifiedDirectives_0;
    if v15 then
        l_l_specifiedDirectives_0_0 = v15:getDirectives();
    end;
    for _, v18 in ipairs(l_l_specifiedDirectives_0_0) do
        v14[v18.name] = v18.locations;
    end;
    for _, v20 in ipairs(v13:getDocument().definitions) do
        if v20.kind == l_Kind_0.DIRECTIVE_DEFINITION then
            v14[v20.name.value] = l_Array_0.map(v20.locations, function(v21)
                return v21.value;
            end);
        end;
    end;
    return {
        Directive = function(_, v23, _, _, _, v27)
            local l_value_0 = v23.name.value;
            local v29 = v14[l_value_0];
            if v29 then
                local v30 = v11(v27);
                if v30 and l_Array_0.indexOf(v29, v30) == -1 then
                    v13:reportError(l_GraphQLError_0.new(("Directive \"@%s\" may not be used on %s."):format(l_value_0, v30), v23));
                end;
                return ;
            else
                v13:reportError(l_GraphQLError_0.new(("Unknown directive \"@%s\"."):format(l_value_0), v23));
                return ;
            end;
        end
    };
end;
v11 = function(v31)
    local v32 = v31[#v31];
    l_invariant_0(not l_Array_0.isArray(v32));
    local l_kind_0 = v32.kind;
    if l_kind_0 == l_Kind_0.OPERATION_DEFINITION then
        return v12(v32.operation);
    elseif l_kind_0 == l_Kind_0.FIELD then
        return l_DirectiveLocation_0.FIELD;
    elseif l_kind_0 == l_Kind_0.FRAGMENT_SPREAD then
        return l_DirectiveLocation_0.FRAGMENT_SPREAD;
    elseif l_kind_0 == l_Kind_0.INLINE_FRAGMENT then
        return l_DirectiveLocation_0.INLINE_FRAGMENT;
    elseif l_kind_0 == l_Kind_0.FRAGMENT_DEFINITION then
        return l_DirectiveLocation_0.FRAGMENT_DEFINITION;
    elseif l_kind_0 == l_Kind_0.VARIABLE_DEFINITION then
        return l_DirectiveLocation_0.VARIABLE_DEFINITION;
    elseif not (l_kind_0 ~= l_Kind_0.SCHEMA_DEFINITION) or l_kind_0 == l_Kind_0.SCHEMA_EXTENSION then
        return l_DirectiveLocation_0.SCHEMA;
    elseif not (l_kind_0 ~= l_Kind_0.SCALAR_TYPE_DEFINITION) or l_kind_0 == l_Kind_0.SCALAR_TYPE_EXTENSION then
        return l_DirectiveLocation_0.SCALAR;
    elseif not (l_kind_0 ~= l_Kind_0.OBJECT_TYPE_DEFINITION) or l_kind_0 == l_Kind_0.OBJECT_TYPE_EXTENSION then
        return l_DirectiveLocation_0.OBJECT;
    elseif l_kind_0 == l_Kind_0.FIELD_DEFINITION then
        return l_DirectiveLocation_0.FIELD_DEFINITION;
    elseif not (l_kind_0 ~= l_Kind_0.INTERFACE_TYPE_DEFINITION) or l_kind_0 == l_Kind_0.INTERFACE_TYPE_EXTENSION then
        return l_DirectiveLocation_0.INTERFACE;
    elseif not (l_kind_0 ~= l_Kind_0.UNION_TYPE_DEFINITION) or l_kind_0 == l_Kind_0.UNION_TYPE_EXTENSION then
        return l_DirectiveLocation_0.UNION;
    elseif not (l_kind_0 ~= l_Kind_0.ENUM_TYPE_DEFINITION) or l_kind_0 == l_Kind_0.ENUM_TYPE_EXTENSION then
        return l_DirectiveLocation_0.ENUM;
    elseif l_kind_0 == l_Kind_0.ENUM_VALUE_DEFINITION then
        return l_DirectiveLocation_0.ENUM_VALUE;
    elseif not (l_kind_0 ~= l_Kind_0.INPUT_OBJECT_TYPE_DEFINITION) or l_kind_0 == l_Kind_0.INPUT_OBJECT_TYPE_EXTENSION then
        return l_DirectiveLocation_0.INPUT_OBJECT;
    elseif l_kind_0 == l_Kind_0.INPUT_VALUE_DEFINITION then
        return v31[#v31 - 2].kind == l_Kind_0.INPUT_OBJECT_TYPE_DEFINITION and l_DirectiveLocation_0.INPUT_FIELD_DEFINITION or l_DirectiveLocation_0.ARGUMENT_DEFINITION;
    else
        return nil;
    end;
end;
v12 = function(v34)
    if v34 == "query" then
        return l_DirectiveLocation_0.QUERY;
    elseif v34 == "mutation" then
        return l_DirectiveLocation_0.MUTATION;
    elseif v34 == "subscription" then
        return l_DirectiveLocation_0.SUBSCRIPTION;
    else
        l_invariant_0(false, "Unexpected operation: " .. l_inspect_0(v34));
        return nil;
    end;
end;
return v10;


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    KnownFragmentNamesRule = function(v1)
        return {
            FragmentSpread = function(_, v3)
                local l_value_0 = v3.name.value;
                if not v1:getFragment(l_value_0) then
                    v1:reportError(l_GraphQLError_0.new(("Unknown fragment \"%s\"."):format(l_value_0), v3.name));
                end;
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local l_jsutils_0 = l_Parent_0.jsutils;
local v3 = require(l_Parent_1.LuauPolyfill);
local l_Array_0 = v3.Array;
local l_Map_0 = v3.Map;
local l_Object_0 = v3.Object;
local l_didYouMean_0 = require(l_jsutils_0.didYouMean).didYouMean;
local l_suggestionList_0 = require(l_jsutils_0.suggestionList).suggestionList;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local v10 = require(l_Parent_0.language.predicates);
local l_isTypeDefinitionNode_0 = v10.isTypeDefinitionNode;
local l_isTypeSystemDefinitionNode_0 = v10.isTypeSystemDefinitionNode;
local l_isTypeSystemExtensionNode_0 = v10.isTypeSystemExtensionNode;
local l_type_0 = l_Parent_0.type;
local l_specifiedScalarTypes_0 = require(l_type_0.scalars).specifiedScalarTypes;
local l_introspectionTypes_0 = require(l_type_0.introspection).introspectionTypes;
local v17 = {};
local v18 = nil;
local v19 = nil;
local v20 = nil;
v17.KnownTypeNamesRule = function(v21)
    local v22 = v21:getSchema();
    local v23 = l_Map_0.new();
    if v22 then
        v23 = v22:getTypeMap();
    end;
    local v24 = {};
    for _, v26 in ipairs(v21:getDocument().definitions) do
        if l_isTypeDefinitionNode_0(v26) then
            v24[v26.name.value] = true;
        end;
    end;
    local v27 = l_Array_0.concat(v23:keys(), l_Object_0.keys(v24));
    return {
        NamedType = function(_, v29, _, v31, _, v33)
            local l_value_0 = v29.name.value;
            if not (v23:get(l_value_0) or v24[l_value_0]) then
                local v35 = v33[3] or v31;
                local v36 = false;
                if v35 ~= nil then
                    v36 = v20(v35);
                end;
                if not v36 or not v19(l_value_0) then
                    v21:reportError(l_GraphQLError_0.new(("Unknown type \"%s\"."):format(l_value_0) .. l_didYouMean_0((l_suggestionList_0(l_value_0, not not v36 and l_Array_0.concat(v18, v27) or v27))), v29));
                else
                    return ;
                end;
            end;
        end
    };
end;
v18 = l_Array_0.map(l_Array_0.concat(l_specifiedScalarTypes_0, l_introspectionTypes_0), function(v37)
    return v37.name;
end);
v19 = function(v38)
    return l_Array_0.indexOf(v18, v38) ~= -1;
end;
v20 = function(v39)
    return not l_Array_0.isArray(v39) and (l_isTypeSystemDefinitionNode_0(v39) or l_isTypeSystemExtensionNode_0(v39));
end;
return v17;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Array_0 = require(l_Parent_0.Parent.LuauPolyfill).Array;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_Kind_0 = require(l_Parent_0.language.kinds).Kind;
return {
    LoneAnonymousOperationRule = function(v4)
        local v5 = 0;
        return {
            Document = function(_, v7)
                v5 = #l_Array_0.filter(v7.definitions, function(v8)
                    return v8.kind == l_Kind_0.OPERATION_DEFINITION;
                end);
            end,
            OperationDefinition = function(_, v10)
                if not v10.name and v5 > 1 then
                    v4:reportError(l_GraphQLError_0.new("This anonymous operation must be the only defined operation.", v10));
                end;
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local v2 = require(l_Parent_0.luaUtils.isNillish);
local l_isNillish_0 = v2.isNillish;
local l_isNotNillish_0 = v2.isNotNillish;
return {
    LoneSchemaDefinitionRule = function(v5)
        local v6 = v5:getSchema();
        local v7 = nil;
        if v6 then
            v7 = v6.astNode;
            if l_isNillish_0(v7) then
                v7 = v6:getQueryType();
            end;
            if l_isNillish_0(v7) then
                v7 = v6:getMutationType();
            end;
            if l_isNillish_0(v7) then
                v7 = v6:getSubscriptionType();
            end;
        end;
        local v8 = 0;
        return {
            SchemaDefinition = function(_, v10)
                if not l_isNotNillish_0(v7) then
                    if v8 > 0 then
                        v5:reportError(l_GraphQLError_0.new("Must provide only one schema definition.", v10));
                    end;
                    v8 = v8 + 1;
                    return ;
                else
                    v5:reportError(l_GraphQLError_0.new("Cannot define a new schema within a schema extension.", v10));
                    return ;
                end;
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Array_0 = require(l_Parent_0.Parent.LuauPolyfill).Array;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
return {
    NoFragmentCyclesRule = function(v3)
        local v4 = {};
        local v5 = {};
        local v6 = {};
        local function v7(v8)
            if not v4[v8.name.value] then
                local l_value_0 = v8.name.value;
                v4[l_value_0] = true;
                local v10 = v3:getFragmentSpreads(v8.selectionSet);
                if #v10 == 0 then
                    return ;
                else
                    v6[l_value_0] = #v5;
                    for _, v12 in ipairs(v10) do
                        local l_value_1 = v12.name.value;
                        local v14 = v6[l_value_1];
                        table.insert(v5, v12);
                        if v14 == nil then
                            local v15 = v3:getFragment(l_value_1);
                            if v15 then
                                v7(v15);
                            end;
                        else
                            local v16 = l_Array_0.slice(v5, v14 + 1);
                            local v18 = table.concat(l_Array_0.map(l_Array_0.slice(v16, 1, #v16), function(v17)
                                return "\"" .. v17.name.value .. "\"";
                            end), ", ");
                            v3:reportError(l_GraphQLError_0.new(("Cannot spread fragment \"%s\" within itself"):format(l_value_1) .. (v18 ~= "" and (" via %s."):format(v18) or "."), v16));
                        end;
                        table.remove(v5);
                    end;
                    v6[l_value_0] = nil;
                    return ;
                end;
            else
                return ;
            end;
        end;
        return {
            OperationDefinition = function()
                return false;
            end,
            FragmentDefinition = function(_, v20)
                v7(v20);
                return false;
            end
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    NoUndefinedVariablesRule = function(v1)
        local v2 = {};
        return {
            OperationDefinition = {
                enter = function()
                    v2 = {};
                end,
                leave = function(_, v4)
                    for _, v6 in ipairs((v1:getRecursiveVariableUsages(v4))) do
                        local l_node_0 = v6.node;
                        local l_value_0 = l_node_0.name.value;
                        if v2[l_value_0] ~= true then
                            v1:reportError(l_GraphQLError_0.new(not not v4.name and ("Variable \"$%s\" is not defined by operation \"%s\"."):format(l_value_0, v4.name.value) or ("Variable \"$%s\" is not defined."):format(l_value_0), {
                                l_node_0,
                                v4
                            }));
                        end;
                    end;
                end
            },
            VariableDefinition = function(_, v10)
                v2[v10.variable.name.value] = true;
            end
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    NoUnusedFragmentsRule = function(v1)
        local v2 = {};
        local v3 = {};
        return {
            OperationDefinition = function(_, v5)
                table.insert(v2, v5);
                return false;
            end,
            FragmentDefinition = function(_, v7)
                table.insert(v3, v7);
                return false;
            end,
            Document = {
                leave = function()
                    local v8 = {};
                    for _, v10 in ipairs(v2) do
                        for _, v12 in ipairs(v1:getRecursivelyReferencedFragments(v10)) do
                            v8[v12.name.value] = true;
                        end;
                    end;
                    for _, v14 in ipairs(v3) do
                        local l_value_0 = v14.name.value;
                        if v8[l_value_0] ~= true then
                            v1:reportError(l_GraphQLError_0.new(("Fragment \"%s\" is never used."):format(l_value_0), v14));
                        end;
                    end;
                end
            }
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    NoUnusedVariablesRule = function(v1)
        local v2 = {};
        return {
            OperationDefinition = {
                enter = function()
                    v2 = {};
                end,
                leave = function(_, v4)
                    local v5 = {};
                    for _, v7 in ipairs((v1:getRecursiveVariableUsages(v4))) do
                        v5[v7.node.name.value] = true;
                    end;
                    for _, v9 in ipairs(v2) do
                        local l_value_0 = v9.variable.name.value;
                        if v5[l_value_0] ~= true then
                            v1:reportError(l_GraphQLError_0.new(not not v4.name and ("Variable \"$%s\" is never used in operation \"%s\"."):format(l_value_0, v4.name.value) or ("Variable \"$%s\" is never used."):format(l_value_0), v9));
                        end;
                    end;
                end
            },
            VariableDefinition = function(_, v12)
                table.insert(v2, v12);
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local v1 = require(l_Parent_0.Parent.LuauPolyfill);
local l_Array_0 = v1.Array;
local l_Map_0 = v1.Map;
local l_Object_0 = v1.Object;
local v5 = require(l_Parent_0.luaUtils.null);
local l_jsutils_0 = l_Parent_0.jsutils;
local l_language_0 = l_Parent_0.language;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_inspect_0 = require(l_jsutils_0.inspect).inspect;
local l_Kind_0 = require(l_language_0.kinds).Kind;
local l_print_0 = require(l_language_0.printer).print;
local v12 = require(l_Parent_0.type.definition);
local l_getNamedType_0 = v12.getNamedType;
local l_isNonNullType_0 = v12.isNonNullType;
local l_isLeafType_0 = v12.isLeafType;
local l_isObjectType_0 = v12.isObjectType;
local l_isListType_0 = v12.isListType;
local l_isInterfaceType_0 = v12.isInterfaceType;
local l_typeFromAST_0 = require(l_Parent_0.utilities.typeFromAST).typeFromAST;
local v20 = {};
local v21 = nil;
local v22 = nil;
local v23 = nil;
local v24 = nil;
local v25 = nil;
local v26 = nil;
local v27 = nil;
local v28 = nil;
local v29 = nil;
local v30 = nil;
local v31 = nil;
local v32 = nil;
local function v33(v34)
    if not l_Array_0.isArray(v34) then
        return v34;
    else
        return table.concat(l_Array_0.map(v34, function(v35)
            return ("subfields \"%s\" conflict because "):format(v35[1]) .. v33(v35[2]);
        end), " and ");
    end;
end;
v20.OverlappingFieldsCanBeMergedRule = function(v36)
    local v37 = v32.new();
    local v38 = {};
    return {
        SelectionSet = function(_, v40)
            for _, v42 in ipairs((v21(v36, v38, v37, v36:getParentType(), v40))) do
                local v43 = v42[1];
                local v44 = v43[1];
                local v45 = v43[2];
                v36:reportError(l_GraphQLError_0.new(("Fields \"%s\" conflict because %s. Use different aliases on the fields to fetch both if this was intentional."):format(v44, if not l_Array_0.isArray(v45) then v45 else table.concat(l_Array_0.map(v45, function(v46)
                    return ("subfields \"%s\" conflict because "):format(v46[1]) .. v33(v46[2]);
                end), " and ")), l_Array_0.concat(v42[2], v42[3])));
            end;
        end
    };
end;
v21 = function(v47, v48, v49, v50, v51)
    local v52 = {};
    local v53 = v26(v47, v48, v50, v51);
    local v54 = v53[1];
    local v55 = v53[2];
    v24(v47, v52, v48, v49, v54);
    if #v55 ~= 0 then
        for v56 = 1, #v55 do
            v22(v47, v52, v48, v49, false, v54, v55[v56]);
            for v57 = v56 + 1, #v55 do
                v25(v47, v52, v48, v49, false, v55[v56], v55[v57]);
            end;
        end;
    end;
    return v52;
end;
v22 = function(v58, v59, v60, v61, v62, v63, v64)
    local v65 = v58:getFragment(v64);
    if v65 then
        local v66 = v27(v58, v60, v65);
        local v67 = v66[1];
        local v68 = v66[2];
        if v63 == v67 then
            return ;
        else
            v23(v58, v59, v60, v61, v62, v63, v67);
            for v69 = 1, #v68 do
                v22(v58, v59, v60, v61, v62, v63, v68[v69]);
            end;
            return ;
        end;
    else
        return ;
    end;
end;
v25 = function(v70, v71, v72, v73, v74, v75, v76)
    if v75 == v76 then
        return ;
    elseif not v73:has(v75, v76, v74) then
        v73:add(v75, v76, v74);
        local v77 = v70:getFragment(v75);
        local v78 = v70:getFragment(v76);
        if v77 and v78 then
            local v79 = v27(v70, v72, v77);
            local v80 = v79[1];
            local v81 = v79[2];
            local v82 = v27(v70, v72, v78);
            local v83 = v82[1];
            local v84 = v82[2];
            v23(v70, v71, v72, v73, v74, v80, v83);
            for v85 = 1, #v84 do
                v25(v70, v71, v72, v73, v74, v75, v84[v85]);
            end;
            for v86 = 1, #v81 do
                v25(v70, v71, v72, v73, v74, v81[v86], v76);
            end;
            return ;
        else
            return ;
        end;
    else
        return ;
    end;
end;
local function v106(v87, v88, v89, v90, v91, v92, v93, v94)
    local v95 = {};
    local v96 = v26(v87, v88, v91, v92);
    local v97 = v96[1];
    local v98 = v96[2];
    local v99 = v26(v87, v88, v93, v94);
    local v100 = v99[1];
    local v101 = v99[2];
    v23(v87, v95, v88, v89, v90, v97, v100);
    if #v101 ~= 0 then
        for v102 = 1, #v101 do
            v22(v87, v95, v88, v89, v90, v97, v101[v102]);
        end;
    end;
    if #v98 ~= 0 then
        for v103 = 1, #v98 do
            v22(v87, v95, v88, v89, v90, v100, v98[v103]);
        end;
    end;
    for v104 = 1, #v98 do
        for v105 = 1, #v101 do
            v25(v87, v95, v88, v89, v90, v98[v104], v101[v105]);
        end;
    end;
    return v95;
end;
v24 = function(v107, v108, v109, v110, v111)
    for _, v113 in v111, nil, nil do
        local v114 = v113[1];
        local v115 = v113[2];
        if #v115 > 1 then
            for v116 = 1, #v115 do
                for v117 = v116 + 1, #v115 do
                    local v118 = v28(v107, v109, v110, false, v114, v115[v116], v115[v117]);
                    if v118 then
                        table.insert(v108, v118);
                    end;
                end;
            end;
        end;
    end;
end;
v23 = function(v119, v120, v121, v122, v123, v124, v125)
    for _, v127 in ipairs(v124:keys()) do
        local v128 = v125[v127];
        if v128 then
            local v129 = v124[v127];
            for v130 = 1, #v129 do
                for v131 = 1, #v128 do
                    local v132 = v28(v119, v121, v122, v123, v127, v129[v130], v128[v131]);
                    if v132 then
                        table.insert(v120, v132);
                    end;
                end;
            end;
        end;
    end;
end;
v28 = function(v133, v134, v135, v136, v137, v138, v139)
    local v140 = v138[1];
    local v141 = v138[2];
    local v142 = v138[3];
    local v143 = v139[1];
    local v144 = v139[2];
    local v145 = v139[3];
    local l_v136_0 = v136;
    if not l_v136_0 then
        l_v136_0 = false;
        if v140 ~= v143 then
            l_v136_0 = l_isObjectType_0(v140) and l_isObjectType_0(v143);
        end;
    end;
    if not l_v136_0 then
        local l_value_0 = v141.name.value;
        local l_value_1 = v144.name.value;
        if l_value_0 ~= l_value_1 then
            return {
                {
                    v137,
                    ("\"%s\" and \"%s\" are different fields"):format(l_value_0, l_value_1)
                },
                {
                    v141
                },
                {
                    v144
                }
            };
        elseif not v29(v141.arguments or {}, v144.arguments or {}) then
            return {
                {
                    v137,
                    "they have differing arguments"
                },
                {
                    v141
                },
                {
                    v144
                }
            };
        end;
    end;
    local v149 = v142 and v142.type;
    local v150 = v145 and v145.type;
    if (not v149 or not v150) or not v30(v149, v150) then
        local l_selectionSet_0 = v141.selectionSet;
        local l_selectionSet_1 = v144.selectionSet;
        if not l_selectionSet_0 or not l_selectionSet_1 then
            return nil;
        else
            return v31(v106(v133, v134, v135, l_v136_0, l_getNamedType_0(v149), l_selectionSet_0, l_getNamedType_0(v150), l_selectionSet_1), v137, v141, v144);
        end;
    else
        return {
            {
                v137,
                ("they return conflicting types \"%s\" and \"%s\""):format(l_inspect_0(v149), l_inspect_0(v150))
            },
            {
                v141
            },
            {
                v144
            }
        };
    end;
end;
local v153 = nil;
local v154 = nil;
v29 = function(v155, v156)
    if #v155 ~= #v156 then
        return false;
    else
        return l_Array_0.every(v155, function(v157)
            local v159 = l_Array_0.find(v156, function(v158)
                return v158.name.value == v157.name.value;
            end);
            if v159 then
                return v153(v157.value, v159.value);
            else
                return false;
            end;
        end);
    end;
end;
v153 = function(v160, v161)
    return l_print_0(v160) == l_print_0(v161);
end;
v30 = function(v162, v163)
    if not l_isListType_0(v162) then
        if not l_isListType_0(v163) then
            if not l_isNonNullType_0(v162) then
                if not l_isNonNullType_0(v163) then
                    if not l_isLeafType_0(v162) and not l_isLeafType_0(v163) then
                        return false;
                    else
                        return v162 ~= v163;
                    end;
                else
                    return true;
                end;
            elseif not l_isNonNullType_0(v163) then
                return true;
            else
                return v30(v162.ofType, v163.ofType);
            end;
        else
            return true;
        end;
    elseif not l_isListType_0(v163) then
        return true;
    else
        return v30(v162.ofType, v163.ofType);
    end;
end;
v26 = function(v164, v165, v166, v167)
    local v168 = v165[v167];
    if not v168 then
        local v169 = l_Map_0.new();
        local v170 = {};
        v154(v164, v166, v167, v169, v170);
        v168 = {
            v169,
            l_Object_0.keys(v170)
        };
        v165[v167] = v168;
    end;
    return v168;
end;
v27 = function(v171, v172, v173)
    local v174 = v172[v173.selectionSet];
    if not v174 then
        return v26(v171, v172, l_typeFromAST_0(v171:getSchema(), v173.typeCondition), v173.selectionSet);
    else
        return v174;
    end;
end;
v154 = function(v175, v176, v177, v178, v179)
    for _, v181 in ipairs(v177.selections) do
        local l_kind_0 = v181.kind;
        if l_kind_0 == l_Kind_0.FIELD then
            local l_value_2 = v181.name.value;
            local v184 = nil;
            if not (not l_isObjectType_0(v176) and not l_isInterfaceType_0(v176)) then
                v184 = v176:getFields():get(l_value_2);
            end;
            local v185 = if not v181.alias then l_value_2 else v181.alias.value;
            if not v178[v185] then
                v178[v185] = {};
            end;
            table.insert(v178[v185], {
                v176 or v5,
                v181 or v5,
                v184 or v5
            });
        elseif l_kind_0 == l_Kind_0.FRAGMENT_SPREAD then
            v179[v181.name.value] = true;
        elseif l_kind_0 == l_Kind_0.INLINE_FRAGMENT then
            local l_typeCondition_0 = v181.typeCondition;
            local l_v176_0 = v176;
            if l_typeCondition_0 then
                l_v176_0 = l_typeFromAST_0(v175:getSchema(), l_typeCondition_0);
            end;
            v154(v175, l_v176_0, v181.selectionSet, v178, v179);
        end;
    end;
end;
v31 = function(v188, v189, v190, v191)
    if #v188 > 0 then
        return {
            {
                v189,
                l_Array_0.map(v188, function(v192)
                    return v192[1];
                end)
            },
            l_Array_0.reduce(v188, function(v193, v194)
                return l_Array_0.concat(v193, v194[2]);
            end, {
                v190
            }),
            l_Array_0.reduce(v188, function(v195, v196)
                return l_Array_0.concat(v195, v196[3]);
            end, {
                v191
            })
        };
    else
        return nil;
    end;
end;
v32 = {};
local v197 = {
    __index = v32
};
v32.new = function()
    local v198 = setmetatable({}, v197);
    v198._data = {};
    return v198;
end;
v32.has = function(v199, v200, v201, v202)
    local v203 = v199._data[v200];
    local v204 = v203 and v203[v201];
    if v204 == nil then
        return false;
    elseif v202 == false then
        return v204 == false;
    else
        return true;
    end;
end;
v32.add = function(v205, v206, v207, v208)
    v205:_pairSetAdd(v206, v207, v208);
    v205:_pairSetAdd(v207, v206, v208);
end;
v32._pairSetAdd = function(v209, v210, v211, v212)
    local v213 = v209._data[v210];
    if not v213 then
        v213 = {};
        v209._data[v210] = v213;
    end;
    v213[v211] = v212;
end;
return v20;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_inspect_0 = require(l_Parent_0.jsutils.inspect).inspect;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_isCompositeType_0 = require(l_Parent_0.type.definition).isCompositeType;
local l_utilities_0 = l_Parent_0.utilities;
local l_typeFromAST_0 = require(l_utilities_0.typeFromAST).typeFromAST;
local l_doTypesOverlap_0 = require(l_utilities_0.typeComparators).doTypesOverlap;
local v7 = {};
local v8 = nil;
v7.PossibleFragmentSpreadsRule = function(v9)
    return {
        InlineFragment = function(_, v11)
            local v12 = v9:getType();
            local v13 = v9:getParentType();
            if not ((not l_isCompositeType_0(v12) or not l_isCompositeType_0(v13)) or l_doTypesOverlap_0(v9:getSchema(), v12, v13)) then
                v9:reportError(l_GraphQLError_0.new(("Fragment cannot be spread here as objects of type \"%s\" can never be of type \"%s\"."):format(l_inspect_0(v13), (l_inspect_0(v12))), v11));
            end;
        end,
        FragmentSpread = function(_, v15)
            local l_value_0 = v15.name.value;
            local v17 = v8(v9, l_value_0);
            local v18 = v9:getParentType();
            if not ((not v17 or not v18) or l_doTypesOverlap_0(v9:getSchema(), v17, v18)) then
                v9:reportError(l_GraphQLError_0.new(("Fragment \"%s\" cannot be spread here as objects of type \"%s\" can never be of type \"%s\"."):format(l_value_0, l_inspect_0(v18), (l_inspect_0(v17))), v15));
            end;
        end
    };
end;
v8 = function(v19, v20)
    local v21 = v19:getFragment(v20);
    if v21 then
        local v22 = l_typeFromAST_0(v19:getSchema(), v21.typeCondition);
        if l_isCompositeType_0(v22) then
            return v22;
        end;
    end;
    return nil;
end;
return v7;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_jsutils_0 = l_Parent_0.jsutils;
local v2 = require(l_Parent_0.Parent.LuauPolyfill);
local l_Array_0 = v2.Array;
local l_Object_0 = v2.Object;
local l_inspect_0 = require(l_jsutils_0.inspect).inspect;
local l_invariant_0 = require(l_jsutils_0.invariant).invariant;
local l_didYouMean_0 = require(l_jsutils_0.didYouMean).didYouMean;
local l_suggestionList_0 = require(l_jsutils_0.suggestionList).suggestionList;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_language_0 = l_Parent_0.language;
local l_Kind_0 = require(l_language_0.kinds).Kind;
local l_isTypeDefinitionNode_0 = require(l_language_0.predicates).isTypeDefinitionNode;
local v13 = require(l_Parent_0.type.definition);
local l_isScalarType_0 = v13.isScalarType;
local l_isObjectType_0 = v13.isObjectType;
local l_isInterfaceType_0 = v13.isInterfaceType;
local l_isUnionType_0 = v13.isUnionType;
local l_isEnumType_0 = v13.isEnumType;
local l_isInputObjectType_0 = v13.isInputObjectType;
local v20 = {};
local v21 = nil;
local v22 = nil;
local v23 = nil;
v20.PossibleTypeExtensionsRule = function(v24)
    local v25 = v24:getSchema();
    local v26 = {};
    for _, v28 in ipairs(v24:getDocument().definitions) do
        if l_isTypeDefinitionNode_0(v28) then
            v26[v28.name.value] = v28;
        end;
    end;
    local function v35(v29)
        local l_value_0 = v29.name.value;
        local v31 = v26[l_value_0];
        local v32 = nil;
        if v25 then
            v32 = v25:getType(l_value_0);
        end;
        local v33 = nil;
        if not v31 then
            if v32 then
                v33 = v22(v32);
            end;
        else
            v33 = v21[v31.kind];
        end;
        if not v33 then
            local v34 = l_Object_0.keys(v26);
            if v25 then
                v34 = l_Array_0.concat(v34, v25:getTypeMap():keys());
            end;
            v24:reportError(l_GraphQLError_0.new(("Cannot extend type \"%s\" because it is not defined."):format(l_value_0) .. l_didYouMean_0((l_suggestionList_0(l_value_0, v34))), v29.name));
        elseif v33 ~= v29.kind then
            v24:reportError(l_GraphQLError_0.new(("Cannot extend non-%s type \"%s\"."):format(v23(v29.kind), l_value_0), not not v31 and {
                v31,
                v29
            } or v29));
            return ;
        end;
    end;
    local function v37(_, ...)
        return v35(...);
    end;
    return {
        ScalarTypeExtension = v37,
        ObjectTypeExtension = v37,
        InterfaceTypeExtension = v37,
        UnionTypeExtension = v37,
        EnumTypeExtension = v37,
        InputObjectTypeExtension = v37
    };
end;
v21 = {
    [l_Kind_0.SCALAR_TYPE_DEFINITION] = l_Kind_0.SCALAR_TYPE_EXTENSION,
    [l_Kind_0.OBJECT_TYPE_DEFINITION] = l_Kind_0.OBJECT_TYPE_EXTENSION,
    [l_Kind_0.INTERFACE_TYPE_DEFINITION] = l_Kind_0.INTERFACE_TYPE_EXTENSION,
    [l_Kind_0.UNION_TYPE_DEFINITION] = l_Kind_0.UNION_TYPE_EXTENSION,
    [l_Kind_0.ENUM_TYPE_DEFINITION] = l_Kind_0.ENUM_TYPE_EXTENSION,
    [l_Kind_0.INPUT_OBJECT_TYPE_DEFINITION] = l_Kind_0.INPUT_OBJECT_TYPE_EXTENSION
};
v22 = function(v38)
    if not l_isScalarType_0(v38) then
        if not l_isObjectType_0(v38) then
            if not l_isInterfaceType_0(v38) then
                if not l_isUnionType_0(v38) then
                    if not l_isEnumType_0(v38) then
                        if not l_isInputObjectType_0(v38) then
                            l_invariant_0(false, "Unexpected type: " .. l_inspect_0(v38));
                            return nil;
                        else
                            return l_Kind_0.INPUT_OBJECT_TYPE_EXTENSION;
                        end;
                    else
                        return l_Kind_0.ENUM_TYPE_EXTENSION;
                    end;
                else
                    return l_Kind_0.UNION_TYPE_EXTENSION;
                end;
            else
                return l_Kind_0.INTERFACE_TYPE_EXTENSION;
            end;
        else
            return l_Kind_0.OBJECT_TYPE_EXTENSION;
        end;
    else
        return l_Kind_0.SCALAR_TYPE_EXTENSION;
    end;
end;
v23 = function(v39)
    if v39 == l_Kind_0.SCALAR_TYPE_EXTENSION then
        return "scalar";
    elseif v39 == l_Kind_0.OBJECT_TYPE_EXTENSION then
        return "object";
    elseif v39 == l_Kind_0.INTERFACE_TYPE_EXTENSION then
        return "interface";
    elseif v39 == l_Kind_0.UNION_TYPE_EXTENSION then
        return "union";
    elseif v39 == l_Kind_0.ENUM_TYPE_EXTENSION then
        return "enum";
    elseif v39 == l_Kind_0.INPUT_OBJECT_TYPE_EXTENSION then
        return "input object";
    else
        l_invariant_0(false, "Unexpected kind: " .. l_inspect_0(v39));
        return "";
    end;
end;
return v20;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_jsutils_0 = l_Parent_0.jsutils;
local v2 = require(l_Parent_0.Parent.LuauPolyfill);
local l_Array_0 = v2.Array;
local l_Object_0 = v2.Object;
local l_inspect_0 = require(l_jsutils_0.inspect).inspect;
local l_keyMap_0 = require(l_jsutils_0.keyMap).keyMap;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_language_0 = l_Parent_0.language;
local l_Kind_0 = require(l_language_0.kinds).Kind;
local l_print_0 = require(l_language_0.printer).print;
local v11 = require(l_Parent_0.type.definition);
local l_isType_0 = v11.isType;
local l_isRequiredArgument_0 = v11.isRequiredArgument;
local l_specifiedDirectives_0 = require(l_Parent_0.type.directives).specifiedDirectives;
local v15 = {};
v15.ProvidedRequiredArgumentsRule = function(v16)
    return l_Object_0.assign({}, v15.ProvidedRequiredArgumentsOnDirectivesRule(v16), {
        Field = {
            leave = function(_, v18)
                local v19 = v16:getFieldDef();
                if v19 then
                    local v21 = l_keyMap_0(v18.arguments or {}, function(v20)
                        return v20.name.value;
                    end);
                    for _, v23 in ipairs(v19.args) do
                        if not (v21[v23.name] or not l_isRequiredArgument_0(v23)) then
                            v16:reportError(l_GraphQLError_0.new(("Field \"%s\" argument \"%s\" of type \"%s\" is required, but it was not provided."):format(v19.name, v23.name, (l_inspect_0(v23.type))), v18));
                        end;
                    end;
                    return ;
                else
                    return false;
                end;
            end
        }
    });
end;
v15.ProvidedRequiredArgumentsOnDirectivesRule = function(v24)
    local v25 = {};
    local v26 = v24:getSchema();
    local l_l_specifiedDirectives_0_0 = l_specifiedDirectives_0;
    if v26 then
        l_l_specifiedDirectives_0_0 = v26:getDirectives();
    end;
    for _, v29 in ipairs(l_l_specifiedDirectives_0_0) do
        v25[v29.name] = l_keyMap_0(l_Array_0.filter(v29.args, l_isRequiredArgument_0), function(v30)
            return v30.name;
        end);
    end;
    for _, v32 in ipairs(v24:getDocument().definitions) do
        if v32.kind == l_Kind_0.DIRECTIVE_DEFINITION then
            v25[v32.name.value] = l_keyMap_0(l_Array_0.filter(v32.arguments or {}, isRequiredArgumentNode), function(v33)
                return v33.name.value;
            end);
        end;
    end;
    return {
        Directive = {
            leave = function(_, v35)
                local l_value_0 = v35.name.value;
                local v37 = v25[l_value_0];
                if v37 then
                    local v39 = l_keyMap_0(v35.arguments or {}, function(v38)
                        return v38.name.value;
                    end);
                    for _, v41 in ipairs(l_Object_0.keys(v37)) do
                        if not v39[v41] then
                            local l_type_0 = v37[v41].type;
                            v24:reportError(l_GraphQLError_0.new(("Directive \"@%s\" argument \"%s\" of type \"%s\" is required, but it was not provided."):format(l_value_0, v41, not not l_isType_0(l_type_0) and l_inspect_0(l_type_0) or l_print_0(l_type_0)), v35));
                        end;
                    end;
                end;
            end
        }
    };
end;
isRequiredArgumentNode = function(v43)
    local v44 = false;
    if v43.type.kind == l_Kind_0.NON_NULL_TYPE then
        v44 = v43.defaultValue == nil;
    end;
    return v44;
end;
return v15;


local l_Parent_0 = script.Parent.Parent.Parent;
local l_inspect_0 = require(l_Parent_0.jsutils.inspect).inspect;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local v3 = require(l_Parent_0.type.definition);
local l_getNamedType_0 = v3.getNamedType;
local l_isLeafType_0 = v3.isLeafType;
return {
    ScalarLeafsRule = function(v6)
        return {
            Field = function(_, v8)
                local v9 = v6:getType();
                local l_selectionSet_0 = v8.selectionSet;
                if v9 then
                    if not l_isLeafType_0(l_getNamedType_0(v9)) then
                        if not l_selectionSet_0 then
                            local l_value_0 = v8.name.value;
                            v6:reportError(l_GraphQLError_0.new(("Field \"%s\" of type \"%s\" must have a selection of subfields. Did you mean \"%s { ... }\"?"):format(l_value_0, l_inspect_0(v9), l_value_0), v8));
                        end;
                    elseif l_selectionSet_0 then
                        v6:reportError(l_GraphQLError_0.new(("Field \"%s\" must not have a selection since type \"%s\" has no subfields."):format(v8.name.value, (l_inspect_0(v9))), l_selectionSet_0));
                        return ;
                    end;
                end;
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Array_0 = require(l_Parent_0.Parent.LuauPolyfill).Array;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
return {
    SingleFieldSubscriptionsRule = function(v3)
        return {
            OperationDefinition = function(_, v5)
                if v5.operation == "subscription" and #v5.selectionSet.selections ~= 1 then
                    v3:reportError(l_GraphQLError_0.new(not not v5.name and ("Subscription \"%s\" must select only one top level field."):format(v5.name.value) or "Anonymous Subscription must select only one top level field.", l_Array_0.slice(v5.selectionSet.selections, 2)));
                end;
            end
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    UniqueArgumentNamesRule = function(v1)
        local v2 = {};
        return {
            Field = function()
                v2 = {};
            end,
            Directive = function()
                v2 = {};
            end,
            Argument = function(_, v4)
                local l_value_0 = v4.name.value;
                if not v2[l_value_0] then
                    v2[l_value_0] = v4.name;
                else
                    v1:reportError(l_GraphQLError_0.new(("There can be only one argument named \"%s\"."):format(l_value_0), {
                        v2[l_value_0],
                        v4.name
                    }));
                end;
                return false;
            end
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    UniqueDirectiveNamesRule = function(v1)
        local v2 = {};
        local v3 = v1:getSchema();
        return {
            DirectiveDefinition = function(_, v5)
                local l_value_0 = v5.name.value;
                if not v3 or not v3:getDirective(l_value_0) then
                    if not v2[l_value_0] then
                        v2[l_value_0] = v5.name;
                    else
                        v1:reportError(l_GraphQLError_0.new(("There can be only one directive named \"@%s\"."):format(l_value_0), {
                            v2[l_value_0],
                            v5.name
                        }));
                    end;
                    return false;
                else
                    v1:reportError(l_GraphQLError_0.new(("Directive \"@%s\" already exists in the schema. It cannot be redefined."):format(l_value_0), v5.name));
                    return ;
                end;
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Map_0 = require(l_Parent_0.Parent.LuauPolyfill).Map;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local l_isEnumType_0 = require(l_Parent_0.type.definition).isEnumType;
return {
    UniqueEnumValueNamesRule = function(v4)
        local v5 = v4:getSchema();
        local v6 = not not v5 and v5:getTypeMap() or l_Map_0.new();
        local v7 = {};
        local function v17(_, v9)
            local l_value_0 = v9.name.value;
            if not v7[l_value_0] then
                v7[l_value_0] = {};
            end;
            local v11 = v9.values or {};
            local v12 = v7[l_value_0];
            for _, v14 in ipairs(v11) do
                local l_value_1 = v14.name.value;
                local v16 = v6:get(l_value_0);
                if not l_isEnumType_0(v16) or not v16:getValue(l_value_1) then
                    if not v12[l_value_1] then
                        v12[l_value_1] = v14.name;
                    else
                        v4:reportError(l_GraphQLError_0.new(("Enum value \"%s.%s\" can only be defined once."):format(l_value_0, l_value_1), {
                            v12[l_value_1],
                            v14.name
                        }));
                    end;
                else
                    v4:reportError(l_GraphQLError_0.new(("Enum value \"%s.%s\" already exists in the schema. It cannot also be defined in this type extension."):format(l_value_0, l_value_1), v14.name));
                end;
            end;
            return false;
        end;
        return {
            EnumTypeDefinition = v17,
            EnumTypeExtension = v17
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_Map_0 = require(l_Parent_0.Parent.LuauPolyfill).Map;
local l_isNotNillish_0 = require(l_Parent_0.luaUtils.isNillish).isNotNillish;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local v4 = require(l_Parent_0.type.definition);
local l_isObjectType_0 = v4.isObjectType;
local l_isInterfaceType_0 = v4.isInterfaceType;
local l_isInputObjectType_0 = v4.isInputObjectType;
local v8 = {};
local v9 = nil;
v8.UniqueFieldDefinitionNamesRule = function(v10)
    local v11 = v10:getSchema();
    local v12 = not not v11 and v11:getTypeMap() or l_Map_0.new();
    local v13 = {};
    local function v22(_, v15)
        local l_value_0 = v15.name.value;
        if not v13[l_value_0] then
            v13[l_value_0] = {};
        end;
        local v17 = v15.fields or {};
        local v18 = v13[l_value_0];
        for _, v20 in ipairs(v17) do
            local l_value_1 = v20.name.value;
            if not v9(v12:get(l_value_0), l_value_1) then
                if not v18[l_value_1] then
                    v18[l_value_1] = v20.name;
                else
                    v10:reportError(l_GraphQLError_0.new(("Field \"%s.%s\" can only be defined once."):format(l_value_0, l_value_1), {
                        v18[l_value_1],
                        v20.name
                    }));
                end;
            else
                v10:reportError(l_GraphQLError_0.new(("Field \"%s.%s\" already exists in the schema. It cannot also be defined in this type extension."):format(l_value_0, l_value_1), v20.name));
            end;
        end;
        return false;
    end;
    return {
        InputObjectTypeDefinition = v22,
        InputObjectTypeExtension = v22,
        InterfaceTypeDefinition = v22,
        InterfaceTypeExtension = v22,
        ObjectTypeDefinition = v22,
        ObjectTypeExtension = v22
    };
end;
v9 = function(v23, v24)
    if not (l_isObjectType_0(v23) or l_isInterfaceType_0(v23)) and not l_isInputObjectType_0(v23) then
        return false;
    else
        return l_isNotNillish_0(v23:getFields():get(v24));
    end;
end;
return v8;


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    UniqueFragmentNamesRule = function(v1)
        local v2 = {};
        return {
            OperationDefinition = function()
                return false;
            end,
            FragmentDefinition = function(_, v4)
                local l_value_0 = v4.name.value;
                if not v2[l_value_0] then
                    v2[l_value_0] = v4.name;
                else
                    v1:reportError(l_GraphQLError_0.new(("There can be only one fragment named \"%s\"."):format(l_value_0), {
                        v2[l_value_0],
                        v4.name
                    }));
                end;
                return false;
            end
        };
    end
};


local l_Parent_0 = script.Parent.Parent.Parent;
local l_GraphQLError_0 = require(l_Parent_0.error.GraphQLError).GraphQLError;
local _ = require(l_Parent_0.language.visitor);
local _ = require(script.Parent.Parent.ValidationContext);
local _ = require(l_Parent_0.language.ast);
return {
    UniqueInputFieldNamesRule = function(v5)
        local v6 = {};
        local v7 = {};
        return {
            ObjectValue = {
                enter = function()
                    table.insert(v6, v7);
                    v7 = {};
                end,
                leave = function()
                    v7 = table.remove(v6);
                end
            },
            ObjectField = function(_, v9)
                local l_value_0 = v9.name.value;
                if not v7[l_value_0] then
                    v7[l_value_0] = v9.name;
                    return ;
                else
                    v5:reportError(l_GraphQLError_0.new(("There can be only one input field named \"%s\"."):format(l_value_0), {
                        v7[l_value_0],
                        v9.name
                    }));
                    return ;
                end;
            end
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    UniqueOperationNamesRule = function(v1)
        local v2 = {};
        return {
            OperationDefinition = function(_, v4)
                local l_name_0 = v4.name;
                if l_name_0 then
                    if not v2[l_name_0.value] then
                        v2[l_name_0.value] = l_name_0;
                    else
                        v1:reportError(l_GraphQLError_0.new(("There can be only one operation named \"%s\"."):format(l_name_0.value), {
                            v2[l_name_0.value],
                            l_name_0
                        }));
                    end;
                end;
                return false;
            end,
            FragmentDefinition = function()
                return false;
            end
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    UniqueOperationTypesRule = function(v1)
        local v2 = v1:getSchema();
        local v3 = {};
        local v4 = not not v2 and {
            query = v2:getQueryType(),
            mutation = v2:getMutationType(),
            subscription = v2:getSubscriptionType()
        } or {};
        local function v12(_, v6)
            local v7 = v6.operationTypes or {};
            for _, v9 in ipairs(v7) do
                local l_operation_0 = v9.operation;
                local v11 = v3[l_operation_0];
                if not v4[l_operation_0] then
                    if not v11 then
                        v3[l_operation_0] = v9;
                    else
                        v1:reportError(l_GraphQLError_0.new(("There can be only one %s type in schema."):format(l_operation_0), {
                            v11,
                            v9
                        }));
                    end;
                else
                    v1:reportError(l_GraphQLError_0.new(("Type for %s already defined in the schema. It cannot be redefined."):format(l_operation_0), v9));
                end;
            end;
            return false;
        end;
        return {
            SchemaDefinition = v12,
            SchemaExtension = v12
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    UniqueTypeNamesRule = function(v1)
        local v2 = {};
        local v3 = v1:getSchema();
        local function v7(_, v5)
            local l_value_0 = v5.name.value;
            if not v3 or not v3:getType(l_value_0) then
                if not v2[l_value_0] then
                    v2[l_value_0] = v5.name;
                else
                    v1:reportError(l_GraphQLError_0.new(("There can be only one type named \"%s\"."):format(l_value_0), {
                        v2[l_value_0],
                        v5.name
                    }));
                end;
                return false;
            else
                v1:reportError(l_GraphQLError_0.new(("Type \"%s\" already exists in the schema. It cannot also be defined in this type definition."):format(l_value_0), v5.name));
                return ;
            end;
        end;
        return {
            ScalarTypeDefinition = v7,
            ObjectTypeDefinition = v7,
            InterfaceTypeDefinition = v7,
            UnionTypeDefinition = v7,
            EnumTypeDefinition = v7,
            InputObjectTypeDefinition = v7
        };
    end
};


local l_GraphQLError_0 = require(script.Parent.Parent.Parent.error.GraphQLError).GraphQLError;
return {
    UniqueVariableNamesRule = function(v1)
        local v2 = {};
        return {
            OperationDefinition = function()
                v2 = {};
            end,
            VariableDefinition = function(_, v4)
                local l_value_0 = v4.variable.name.value;
                if not v2[l_value_0] then
                    v2[l_value_0] = v4.variable.name;
                    return ;
                else
                    v1:reportError(l_GraphQLError_0.new(("There can be only one variable named \"$%s\"."):format(l_value_0), {
                        v2[l_value_0],
                        v4.variable.name
                    }));
                    return ;
                end;
            end
        };
    end
};