packages feed

morpheus-graphql-core 0.15.1 → 0.16.0

raw patch · 131 files changed

+41184/−2230 lines, 131 filesdep +reludePVP ok

version bump matches the API change (PVP)

Dependencies added: relude

API changes (from Hackage documentation)

- Data.Morpheus.Error: nameCollisionError :: TypeName -> ValidationError
- Data.Morpheus.Internal.TH: decodeObjectE :: (Bool -> Name) -> TypeName -> [FieldDefinition cat s] -> ExpQ
- Data.Morpheus.Internal.TH: destructRecord :: TypeName -> [FieldDefinition cat s] -> PatQ
- Data.Morpheus.Internal.TH: matchWith :: Bool -> (t -> (PatQ, ExpQ)) -> [t] -> ExpQ
- Data.Morpheus.Internal.TH: mkFieldsE :: Name -> [FieldDefinition cat s] -> Exp
- Data.Morpheus.Internal.Utils: (<.>) :: SemigroupM m a => a -> a -> m a
- Data.Morpheus.Internal.Utils: (<:>) :: (Monad m, Merge a, Failure ValidationErrors m) => a -> a -> m a
- Data.Morpheus.Internal.Utils: UpdateT :: (a -> m a) -> UpdateT m a
- Data.Morpheus.Internal.Utils: [updateTState] :: UpdateT m a -> a -> m a
- Data.Morpheus.Internal.Utils: class Listable a coll | coll -> a
- Data.Morpheus.Internal.Utils: class Merge a
- Data.Morpheus.Internal.Utils: class SemigroupM m a
- Data.Morpheus.Internal.Utils: concatUpdates :: Monad m => [UpdateT m a] -> UpdateT m a
- Data.Morpheus.Internal.Utils: data ResolutionT a coll m x
- Data.Morpheus.Internal.Utils: failUpdates :: Failure e m => e -> UpdateT m a
- Data.Morpheus.Internal.Utils: fromListT :: RESOLUTION k a coll m => [a] -> ResolutionT a coll m coll
- Data.Morpheus.Internal.Utils: instance (Data.Morpheus.Error.NameCollision.NameCollision a, Data.Morpheus.Internal.Utils.KeyOf k a) => Data.Morpheus.Internal.Utils.Listable a (Data.HashMap.Internal.HashMap k a)
- Data.Morpheus.Internal.Utils: instance (Data.Morpheus.Error.NameCollision.NameCollision a, Data.Morpheus.Internal.Utils.KeyOf k a) => Data.Morpheus.Internal.Utils.Merge (Data.HashMap.Internal.HashMap k a)
- Data.Morpheus.Internal.Utils: instance (GHC.Base.Monad m, Data.Morpheus.Internal.Utils.Failure Data.Morpheus.Types.Internal.AST.Base.ValidationErrors m) => Data.Morpheus.Internal.Utils.Failure Data.Morpheus.Types.Internal.AST.Base.ValidationErrors (Data.Morpheus.Internal.Utils.ResolutionT a coll m)
- Data.Morpheus.Internal.Utils: instance (GHC.Base.Monad m, Data.Morpheus.Internal.Utils.Failure errors m) => Data.Morpheus.Internal.Utils.Failure errors (Control.Monad.Trans.Reader.ReaderT ctx m)
- Data.Morpheus.Internal.Utils: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k) => Data.Morpheus.Internal.Utils.KeyOf k (k, a)
- Data.Morpheus.Internal.Utils: instance Control.Monad.Trans.Class.MonadTrans (Data.Morpheus.Internal.Utils.ResolutionT e coll)
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.Capitalize Data.Morpheus.Types.Internal.AST.Base.Token
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.Capitalize Data.Morpheus.Types.Internal.AST.Base.TypeName
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.Capitalize GHC.Base.String
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.Failure error (Data.Either.Either error)
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.KeyOf Data.Morpheus.Types.Internal.AST.Base.FieldName Data.Morpheus.Types.Internal.AST.Base.Ref
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.KeyOf Data.Morpheus.Types.Internal.AST.Base.TypeName Data.Morpheus.Types.Internal.AST.Base.TypeNameRef
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.KeyOf k a => Data.Morpheus.Internal.Utils.Selectable k a (Data.HashMap.Internal.HashMap k a)
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.KeyOf k a => Data.Morpheus.Internal.Utils.Selectable k a [a]
- Data.Morpheus.Internal.Utils: instance Data.Morpheus.Internal.Utils.KeyOf k v => Data.Morpheus.Internal.Utils.Collection v (Data.HashMap.Internal.HashMap k v)
- Data.Morpheus.Internal.Utils: instance GHC.Base.Applicative m => GHC.Base.Applicative (Data.Morpheus.Internal.Utils.ResolutionT a coll m)
- Data.Morpheus.Internal.Utils: instance GHC.Base.Functor m => GHC.Base.Functor (Data.Morpheus.Internal.Utils.ResolutionT a coll m)
- Data.Morpheus.Internal.Utils: instance GHC.Base.Monad m => Control.Monad.Reader.Class.MonadReader (Data.Morpheus.Internal.Utils.Resolution a coll m) (Data.Morpheus.Internal.Utils.ResolutionT a coll m)
- Data.Morpheus.Internal.Utils: instance GHC.Base.Monad m => GHC.Base.Monad (Data.Morpheus.Internal.Utils.ResolutionT a coll m)
- Data.Morpheus.Internal.Utils: keys :: (KeyOf k a, Listable a coll) => coll -> [k]
- Data.Morpheus.Internal.Utils: merge :: (Merge a, Monad m, Failure ValidationErrors m) => [Ref] -> a -> a -> m a
- Data.Morpheus.Internal.Utils: mergeM :: SemigroupM m a => [Ref] -> a -> a -> m a
- Data.Morpheus.Internal.Utils: newtype UpdateT m a
- Data.Morpheus.Internal.Utils: ordTraverse :: (Monad f, KeyOf k b, Listable a (t a), Listable b (t b), Failure ValidationErrors f) => (a -> f b) -> t a -> f (t b)
- Data.Morpheus.Internal.Utils: ordTraverse_ :: (Monad f, Listable a (t a)) => (a -> f b) -> t a -> f ()
- Data.Morpheus.Internal.Utils: resolveUpdates :: Monad m => a -> [UpdateT m a] -> m a
- Data.Morpheus.Internal.Utils: resolveWith :: Monad m => (a -> a -> m a) -> NonEmpty a -> m a
- Data.Morpheus.Internal.Utils: runResolutionT :: ResolutionT a coll m b -> ([a] -> coll) -> (NonEmpty a -> m a) -> m b
- Data.Morpheus.Types.Internal.AST: DataFingerprint :: TypeName -> [String] -> DataFingerprint
- Data.Morpheus.Types.Internal.AST: Fields :: OrdMap FieldName def -> Fields def
- Data.Morpheus.Types.Internal.AST: [mapKeys] :: OrdMap k a -> [k]
- Data.Morpheus.Types.Internal.AST: [typeFingerprint] :: TypeDefinition -> DataFingerprint
- Data.Morpheus.Types.Internal.AST: [unFields] :: Fields def -> OrdMap FieldName def
- Data.Morpheus.Types.Internal.AST: data DataFingerprint
- Data.Morpheus.Types.Internal.AST: data OrdMap k a
- Data.Morpheus.Types.Internal.AST: internalFingerprint :: TypeName -> [String] -> DataFingerprint
- Data.Morpheus.Types.Internal.AST: isTypeDefined :: TypeName -> Schema s -> Maybe DataFingerprint
- Data.Morpheus.Types.Internal.AST: newtype Fields def
- Data.Morpheus.Types.Internal.Resolving: Event :: [e] -> c -> Event e c
- Data.Morpheus.Types.Internal.Resolving: [Channel] :: a -> Channel (Event a c)
- Data.Morpheus.Types.Internal.Resolving: [channels] :: Event e c -> [e]
- Data.Morpheus.Types.Internal.Resolving: [content] :: Event e c -> c
- Data.Morpheus.Types.Internal.Resolving: data Channel (event :: *)
- Data.Morpheus.Types.Internal.Resolving: data Event e c
- Data.Morpheus.Types.Internal.Resolving: eventChannels :: Event e c -> [Channel (Event e c)]
- Data.Morpheus.Types.Internal.Resolving: type SubEvent event m = Event (Channel event) (event -> m GQLResponse)
+ Data.Morpheus.Internal.TH: toVar :: ToVar a b => a -> b
+ Data.Morpheus.Internal.Utils: class Elems a coll | coll -> a
+ Data.Morpheus.Internal.Utils: class FromElems m a coll | coll -> a
+ Data.Morpheus.Internal.Utils: failOnDuplicates :: (Failure ValidationErrors m, NameCollision a) => NonEmpty a -> m a
+ Data.Morpheus.Internal.Utils: fromLBS :: ByteString -> Text
+ Data.Morpheus.Internal.Utils: instance (Data.Morpheus.Error.NameCollision.NameCollision a, Data.Morpheus.Ext.Failure.Failure Data.Morpheus.Types.Internal.AST.Base.ValidationErrors m, Data.Morpheus.Ext.KeyOf.KeyOf k a, GHC.Base.Monad m) => Data.Morpheus.Internal.Utils.FromElems m a (Data.HashMap.Internal.HashMap k a)
+ Data.Morpheus.Internal.Utils: instance Data.Morpheus.Ext.KeyOf.KeyOf k a => Data.Morpheus.Internal.Utils.Selectable k a (Data.HashMap.Internal.HashMap k a)
+ Data.Morpheus.Internal.Utils: instance Data.Morpheus.Ext.KeyOf.KeyOf k a => Data.Morpheus.Internal.Utils.Selectable k a [a]
+ Data.Morpheus.Internal.Utils: instance Data.Morpheus.Ext.KeyOf.KeyOf k v => Data.Morpheus.Internal.Utils.Collection v (Data.HashMap.Internal.HashMap k v)
+ Data.Morpheus.Internal.Utils: toLBS :: Text -> ByteString
+ Data.Morpheus.Types.Internal.AST: defineSchemaWith :: (Monad f, Failure ValidationErrors f) => [TypeDefinition cat s] -> (Maybe (TypeDefinition OBJECT s), Maybe (TypeDefinition OBJECT s), Maybe (TypeDefinition OBJECT s)) -> f (Schema s)
+ Data.Morpheus.Types.Internal.AST: newtype OrdMap k a
+ Data.Morpheus.Types.Internal.Resolving: [subChannel] :: ResponseEvent event (m :: * -> *) -> Channel event
+ Data.Morpheus.Types.Internal.Resolving: [subRes] :: ResponseEvent event (m :: * -> *) -> event -> m GQLResponse
+ Data.Morpheus.Types.Internal.Resolving: class EventHandler e where {
+ Data.Morpheus.Types.Internal.Resolving: getChannels :: EventHandler e => e -> [Channel e]
+ Data.Morpheus.Types.Internal.Resolving: sortErrors :: Result e a -> Result e a
+ Data.Morpheus.Types.Internal.Resolving: type family Channel e;
+ Data.Morpheus.Types.Internal.Resolving: }
- Data.Morpheus.Core: App :: AppData event m VALID -> App event
+ Data.Morpheus.Core: App :: AppData event m VALID -> App event (m :: * -> *)
- Data.Morpheus.Core: AppData :: Config -> RootResModel event m -> Schema s -> AppData event s
+ Data.Morpheus.Core: AppData :: Config -> RootResModel event m -> Schema s -> AppData event (m :: * -> *) s
- Data.Morpheus.Core: FailApp :: GQLErrors -> App event
+ Data.Morpheus.Core: FailApp :: GQLErrors -> App event (m :: * -> *)
- Data.Morpheus.Core: [appConfig] :: AppData event s -> Config
+ Data.Morpheus.Core: [appConfig] :: AppData event (m :: * -> *) s -> Config
- Data.Morpheus.Core: [appErrors] :: App event -> GQLErrors
+ Data.Morpheus.Core: [appErrors] :: App event (m :: * -> *) -> GQLErrors
- Data.Morpheus.Core: [appResolvers] :: AppData event s -> RootResModel event m
+ Data.Morpheus.Core: [appResolvers] :: AppData event (m :: * -> *) s -> RootResModel event m
- Data.Morpheus.Core: [appSchema] :: AppData event s -> Schema s
+ Data.Morpheus.Core: [appSchema] :: AppData event (m :: * -> *) s -> Schema s
- Data.Morpheus.Core: [app] :: App event -> AppData event m VALID
+ Data.Morpheus.Core: [app] :: App event (m :: * -> *) -> AppData event m VALID
- Data.Morpheus.Core: parseTypeDefinitions :: Text -> Eventless [TypeDefinition ANY CONST]
+ Data.Morpheus.Core: parseTypeDefinitions :: ByteString -> Eventless [TypeDefinition ANY CONST]
- Data.Morpheus.Core: parseTypeSystemDefinition :: Text -> Eventless (Schema VALID)
+ Data.Morpheus.Core: parseTypeSystemDefinition :: ByteString -> Eventless (Schema VALID)
- Data.Morpheus.Core: render :: RenderGQL a => a -> Rendering
+ Data.Morpheus.Core: render :: RenderGQL a => a -> ByteString
- Data.Morpheus.Internal.Utils: capitalize :: Capitalize a => a -> a
+ Data.Morpheus.Internal.Utils: capitalize :: Text -> Text
- Data.Morpheus.Internal.Utils: elems :: Listable a coll => coll -> [a]
+ Data.Morpheus.Internal.Utils: elems :: Elems a coll => coll -> [a]
- Data.Morpheus.Internal.Utils: fromElems :: (Listable a coll, Monad m, Failure ValidationErrors m) => [a] -> m coll
+ Data.Morpheus.Internal.Utils: fromElems :: FromElems m a coll => [a] -> m coll
- Data.Morpheus.Internal.Utils: mergeT :: RESOLUTION k a coll m => coll -> coll -> ResolutionT a coll m coll
+ Data.Morpheus.Internal.Utils: mergeT :: (KeyOf k a, Monad m, Elems a c) => c -> c -> ResolutionT k a c m c
- Data.Morpheus.Internal.Utils: size :: Listable a coll => coll -> Int
+ Data.Morpheus.Internal.Utils: size :: Elems a coll => coll -> Int
- Data.Morpheus.Internal.Utils: traverseCollection :: (Monad f, KeyOf k b, Listable a (t a), Listable b (t' b), Failure ValidationErrors f) => (a -> f b) -> t a -> f (t' b)
+ Data.Morpheus.Internal.Utils: traverseCollection :: (Monad f, KeyOf k b, Elems a (t a), FromElems f b (t' b), Failure ValidationErrors f) => (a -> f b) -> t a -> f (t' b)
- Data.Morpheus.QuasiQuoter: dslExpression :: Text -> Q Exp
+ Data.Morpheus.QuasiQuoter: dslExpression :: ByteString -> Q Exp
- Data.Morpheus.QuasiQuoter: gqlExpression :: Text -> Q Exp
+ Data.Morpheus.QuasiQuoter: gqlExpression :: ByteString -> Q Exp
- Data.Morpheus.Types.IO: GQLRequest :: Token -> Maybe FieldName -> Maybe Value -> GQLRequest
+ Data.Morpheus.Types.IO: GQLRequest :: Maybe FieldName -> Text -> Maybe Value -> GQLRequest
- Data.Morpheus.Types.IO: [query] :: GQLRequest -> Token
+ Data.Morpheus.Types.IO: [query] :: GQLRequest -> Text
- Data.Morpheus.Types.Internal.AST: Argument :: FieldName -> Position -> Value valid -> Argument
+ Data.Morpheus.Types.Internal.AST: Argument :: Position -> FieldName -> Value valid -> Argument (valid :: Stage)
- Data.Morpheus.Types.Internal.AST: DataEnumValue :: TypeName -> Maybe Description -> [Directive s] -> DataEnumValue s
+ Data.Morpheus.Types.Internal.AST: DataEnumValue :: Maybe Description -> TypeName -> [Directive s] -> DataEnumValue s
- Data.Morpheus.Types.Internal.AST: Directive :: FieldName -> Position -> Arguments s -> Directive
+ Data.Morpheus.Types.Internal.AST: Directive :: Position -> FieldName -> Arguments s -> Directive (s :: Stage)
- Data.Morpheus.Types.Internal.AST: DirectiveDefinition :: FieldName -> Maybe Description -> [DirectiveLocation] -> ArgumentsDefinition s -> DirectiveDefinition s
+ Data.Morpheus.Types.Internal.AST: DirectiveDefinition :: FieldName -> Maybe Description -> ArgumentsDefinition s -> [DirectiveLocation] -> DirectiveDefinition s
- Data.Morpheus.Types.Internal.AST: FieldDefinition :: FieldName -> Maybe Description -> TypeRef -> [Directive s] -> Maybe (FieldContent TRUE cat s) -> FieldDefinition
+ Data.Morpheus.Types.Internal.AST: FieldDefinition :: Maybe Description -> FieldName -> TypeRef -> Maybe (FieldContent TRUE cat s) -> [Directive s] -> FieldDefinition (cat :: TypeCategory) (s :: Stage)
- Data.Morpheus.Types.Internal.AST: Fragment :: FieldName -> TypeName -> Position -> SelectionSet stage -> Directives stage -> Fragment
+ Data.Morpheus.Types.Internal.AST: Fragment :: FieldName -> TypeName -> Position -> SelectionSet stage -> Directives stage -> Fragment (stage :: Stage)
- Data.Morpheus.Types.Internal.AST: GQLQuery :: Fragments RAW -> Operation RAW -> [(FieldName, ResolvedValue)] -> GQLQuery
+ Data.Morpheus.Types.Internal.AST: GQLQuery :: [(FieldName, ResolvedValue)] -> Operation RAW -> Fragments RAW -> GQLQuery
- Data.Morpheus.Types.Internal.AST: ObjectEntry :: FieldName -> Value s -> ObjectEntry
+ Data.Morpheus.Types.Internal.AST: ObjectEntry :: FieldName -> Value s -> ObjectEntry (s :: Stage)
- Data.Morpheus.Types.Internal.AST: Operation :: Maybe FieldName -> OperationType -> VariableDefinitions s -> SelectionSet s -> Position -> Directives s -> Operation
+ Data.Morpheus.Types.Internal.AST: Operation :: Position -> OperationType -> Maybe FieldName -> VariableDefinitions s -> Directives s -> SelectionSet s -> Operation (s :: Stage)
- Data.Morpheus.Types.Internal.AST: OrdMap :: [k] -> HashMap k a -> OrdMap k a
+ Data.Morpheus.Types.Internal.AST: OrdMap :: HashMap k (Indexed k a) -> OrdMap k a
- Data.Morpheus.Types.Internal.AST: Schema :: TypeLib s -> TypeDefinition OBJECT s -> Maybe (TypeDefinition OBJECT s) -> Maybe (TypeDefinition OBJECT s) -> [DirectiveDefinition s] -> Schema
+ Data.Morpheus.Types.Internal.AST: Schema :: TypeLib s -> TypeDefinition OBJECT s -> Maybe (TypeDefinition OBJECT s) -> Maybe (TypeDefinition OBJECT s) -> [DirectiveDefinition s] -> Schema (s :: Stage)
- Data.Morpheus.Types.Internal.AST: TypeDefinition :: TypeName -> DataFingerprint -> Maybe Description -> Directives s -> TypeContent TRUE a s -> TypeDefinition
+ Data.Morpheus.Types.Internal.AST: TypeDefinition :: Maybe Description -> TypeName -> Directives s -> TypeContent TRUE a s -> TypeDefinition (a :: TypeCategory) (s :: Stage)
- Data.Morpheus.Types.Internal.AST: Typed :: a -> Typed a
+ Data.Morpheus.Types.Internal.AST: Typed :: a -> Typed (cat :: TypeCategory) (s :: Stage) a
- Data.Morpheus.Types.Internal.AST: UnionMember :: TypeName -> Bool -> UnionMember
+ Data.Morpheus.Types.Internal.AST: UnionMember :: TypeName -> Bool -> UnionMember (cat :: TypeCategory) (s :: Stage)
- Data.Morpheus.Types.Internal.AST: Variable :: FieldName -> TypeRef -> Position -> VariableContent (CONST_OR_VALID stage) -> Variable
+ Data.Morpheus.Types.Internal.AST: Variable :: Position -> FieldName -> TypeRef -> VariableContent (CONST_OR_VALID stage) -> Variable (stage :: Stage)
- Data.Morpheus.Types.Internal.AST: [Selection] :: {selectionName :: FieldName, selectionAlias :: Maybe FieldName, selectionPosition :: Position, selectionArguments :: Arguments s, selectionContent :: SelectionContent s, selectionDirectives :: Directives s} -> Selection s
+ Data.Morpheus.Types.Internal.AST: [Selection] :: {selectionPosition :: Position, selectionAlias :: Maybe FieldName, selectionName :: FieldName, selectionArguments :: Arguments s, selectionDirectives :: Directives s, selectionContent :: SelectionContent s} -> Selection s
- Data.Morpheus.Types.Internal.AST: [argumentName] :: Argument -> FieldName
+ Data.Morpheus.Types.Internal.AST: [argumentName] :: Argument (valid :: Stage) -> FieldName
- Data.Morpheus.Types.Internal.AST: [argumentPosition] :: Argument -> Position
+ Data.Morpheus.Types.Internal.AST: [argumentPosition] :: Argument (valid :: Stage) -> Position
- Data.Morpheus.Types.Internal.AST: [argumentValue] :: Argument -> Value valid
+ Data.Morpheus.Types.Internal.AST: [argumentValue] :: Argument (valid :: Stage) -> Value valid
- Data.Morpheus.Types.Internal.AST: [directiveArgs] :: Directive -> Arguments s
+ Data.Morpheus.Types.Internal.AST: [directiveArgs] :: Directive (s :: Stage) -> Arguments s
- Data.Morpheus.Types.Internal.AST: [directiveDefinitions] :: Schema -> [DirectiveDefinition s]
+ Data.Morpheus.Types.Internal.AST: [directiveDefinitions] :: Schema (s :: Stage) -> [DirectiveDefinition s]
- Data.Morpheus.Types.Internal.AST: [directiveName] :: Directive -> FieldName
+ Data.Morpheus.Types.Internal.AST: [directiveName] :: Directive (s :: Stage) -> FieldName
- Data.Morpheus.Types.Internal.AST: [directivePosition] :: Directive -> Position
+ Data.Morpheus.Types.Internal.AST: [directivePosition] :: Directive (s :: Stage) -> Position
- Data.Morpheus.Types.Internal.AST: [entryName] :: ObjectEntry -> FieldName
+ Data.Morpheus.Types.Internal.AST: [entryName] :: ObjectEntry (s :: Stage) -> FieldName
- Data.Morpheus.Types.Internal.AST: [entryValue] :: ObjectEntry -> Value s
+ Data.Morpheus.Types.Internal.AST: [entryValue] :: ObjectEntry (s :: Stage) -> Value s
- Data.Morpheus.Types.Internal.AST: [fieldContent] :: FieldDefinition -> Maybe (FieldContent TRUE cat s)
+ Data.Morpheus.Types.Internal.AST: [fieldContent] :: FieldDefinition (cat :: TypeCategory) (s :: Stage) -> Maybe (FieldContent TRUE cat s)
- Data.Morpheus.Types.Internal.AST: [fieldDescription] :: FieldDefinition -> Maybe Description
+ Data.Morpheus.Types.Internal.AST: [fieldDescription] :: FieldDefinition (cat :: TypeCategory) (s :: Stage) -> Maybe Description
- Data.Morpheus.Types.Internal.AST: [fieldDirectives] :: FieldDefinition -> [Directive s]
+ Data.Morpheus.Types.Internal.AST: [fieldDirectives] :: FieldDefinition (cat :: TypeCategory) (s :: Stage) -> [Directive s]
- Data.Morpheus.Types.Internal.AST: [fieldName] :: FieldDefinition -> FieldName
+ Data.Morpheus.Types.Internal.AST: [fieldName] :: FieldDefinition (cat :: TypeCategory) (s :: Stage) -> FieldName
- Data.Morpheus.Types.Internal.AST: [fieldType] :: FieldDefinition -> TypeRef
+ Data.Morpheus.Types.Internal.AST: [fieldType] :: FieldDefinition (cat :: TypeCategory) (s :: Stage) -> TypeRef
- Data.Morpheus.Types.Internal.AST: [fragmentDirectives] :: Fragment -> Directives stage
+ Data.Morpheus.Types.Internal.AST: [fragmentDirectives] :: Fragment (stage :: Stage) -> Directives stage
- Data.Morpheus.Types.Internal.AST: [fragmentName] :: Fragment -> FieldName
+ Data.Morpheus.Types.Internal.AST: [fragmentName] :: Fragment (stage :: Stage) -> FieldName
- Data.Morpheus.Types.Internal.AST: [fragmentPosition] :: Fragment -> Position
+ Data.Morpheus.Types.Internal.AST: [fragmentPosition] :: Fragment (stage :: Stage) -> Position
- Data.Morpheus.Types.Internal.AST: [fragmentSelection] :: Fragment -> SelectionSet stage
+ Data.Morpheus.Types.Internal.AST: [fragmentSelection] :: Fragment (stage :: Stage) -> SelectionSet stage
- Data.Morpheus.Types.Internal.AST: [fragmentType] :: Fragment -> TypeName
+ Data.Morpheus.Types.Internal.AST: [fragmentType] :: Fragment (stage :: Stage) -> TypeName
- Data.Morpheus.Types.Internal.AST: [mapEntries] :: OrdMap k a -> HashMap k a
+ Data.Morpheus.Types.Internal.AST: [mapEntries] :: OrdMap k a -> HashMap k (Indexed k a)
- Data.Morpheus.Types.Internal.AST: [memberName] :: UnionMember -> TypeName
+ Data.Morpheus.Types.Internal.AST: [memberName] :: UnionMember (cat :: TypeCategory) (s :: Stage) -> TypeName
- Data.Morpheus.Types.Internal.AST: [mutation] :: Schema -> Maybe (TypeDefinition OBJECT s)
+ Data.Morpheus.Types.Internal.AST: [mutation] :: Schema (s :: Stage) -> Maybe (TypeDefinition OBJECT s)
- Data.Morpheus.Types.Internal.AST: [operationArguments] :: Operation -> VariableDefinitions s
+ Data.Morpheus.Types.Internal.AST: [operationArguments] :: Operation (s :: Stage) -> VariableDefinitions s
- Data.Morpheus.Types.Internal.AST: [operationDirectives] :: Operation -> Directives s
+ Data.Morpheus.Types.Internal.AST: [operationDirectives] :: Operation (s :: Stage) -> Directives s
- Data.Morpheus.Types.Internal.AST: [operationName] :: Operation -> Maybe FieldName
+ Data.Morpheus.Types.Internal.AST: [operationName] :: Operation (s :: Stage) -> Maybe FieldName
- Data.Morpheus.Types.Internal.AST: [operationPosition] :: Operation -> Position
+ Data.Morpheus.Types.Internal.AST: [operationPosition] :: Operation (s :: Stage) -> Position
- Data.Morpheus.Types.Internal.AST: [operationSelection] :: Operation -> SelectionSet s
+ Data.Morpheus.Types.Internal.AST: [operationSelection] :: Operation (s :: Stage) -> SelectionSet s
- Data.Morpheus.Types.Internal.AST: [operationType] :: Operation -> OperationType
+ Data.Morpheus.Types.Internal.AST: [operationType] :: Operation (s :: Stage) -> OperationType
- Data.Morpheus.Types.Internal.AST: [query] :: Schema -> TypeDefinition OBJECT s
+ Data.Morpheus.Types.Internal.AST: [query] :: Schema (s :: Stage) -> TypeDefinition OBJECT s
- Data.Morpheus.Types.Internal.AST: [subscription] :: Schema -> Maybe (TypeDefinition OBJECT s)
+ Data.Morpheus.Types.Internal.AST: [subscription] :: Schema (s :: Stage) -> Maybe (TypeDefinition OBJECT s)
- Data.Morpheus.Types.Internal.AST: [typeContent] :: TypeDefinition -> TypeContent TRUE a s
+ Data.Morpheus.Types.Internal.AST: [typeContent] :: TypeDefinition (a :: TypeCategory) (s :: Stage) -> TypeContent TRUE a s
- Data.Morpheus.Types.Internal.AST: [typeDescription] :: TypeDefinition -> Maybe Description
+ Data.Morpheus.Types.Internal.AST: [typeDescription] :: TypeDefinition (a :: TypeCategory) (s :: Stage) -> Maybe Description
- Data.Morpheus.Types.Internal.AST: [typeDirectives] :: TypeDefinition -> Directives s
+ Data.Morpheus.Types.Internal.AST: [typeDirectives] :: TypeDefinition (a :: TypeCategory) (s :: Stage) -> Directives s
- Data.Morpheus.Types.Internal.AST: [typeName] :: TypeDefinition -> TypeName
+ Data.Morpheus.Types.Internal.AST: [typeName] :: TypeDefinition (a :: TypeCategory) (s :: Stage) -> TypeName
- Data.Morpheus.Types.Internal.AST: [types] :: Schema -> TypeLib s
+ Data.Morpheus.Types.Internal.AST: [types] :: Schema (s :: Stage) -> TypeLib s
- Data.Morpheus.Types.Internal.AST: [variableName] :: Variable -> FieldName
+ Data.Morpheus.Types.Internal.AST: [variableName] :: Variable (stage :: Stage) -> FieldName
- Data.Morpheus.Types.Internal.AST: [variablePosition] :: Variable -> Position
+ Data.Morpheus.Types.Internal.AST: [variablePosition] :: Variable (stage :: Stage) -> Position
- Data.Morpheus.Types.Internal.AST: [variableType] :: Variable -> TypeRef
+ Data.Morpheus.Types.Internal.AST: [variableType] :: Variable (stage :: Stage) -> TypeRef
- Data.Morpheus.Types.Internal.AST: [variableValue] :: Variable -> VariableContent (CONST_OR_VALID stage)
+ Data.Morpheus.Types.Internal.AST: [variableValue] :: Variable (stage :: Stage) -> VariableContent (CONST_OR_VALID stage)
- Data.Morpheus.Types.Internal.AST: [visibility] :: UnionMember -> Bool
+ Data.Morpheus.Types.Internal.AST: [visibility] :: UnionMember (cat :: TypeCategory) (s :: Stage) -> Bool
- Data.Morpheus.Types.Internal.AST: type ANY = 'ANY
+ Data.Morpheus.Types.Internal.AST: type ANY = 'ANY
- Data.Morpheus.Types.Internal.AST: type CONST = 'CONST
+ Data.Morpheus.Types.Internal.AST: type CONST = 'CONST
- Data.Morpheus.Types.Internal.AST: type FALSE = 'False
+ Data.Morpheus.Types.Internal.AST: type FALSE = 'False
- Data.Morpheus.Types.Internal.AST: type FieldsDefinition cat s = Fields (FieldDefinition cat s)
+ Data.Morpheus.Types.Internal.AST: type FieldsDefinition cat s = OrdMap FieldName (FieldDefinition cat s)
- Data.Morpheus.Types.Internal.AST: type IMPLEMENTABLE = 'IMPLEMENTABLE
+ Data.Morpheus.Types.Internal.AST: type IMPLEMENTABLE = 'IMPLEMENTABLE
- Data.Morpheus.Types.Internal.AST: type IN = 'IN
+ Data.Morpheus.Types.Internal.AST: type IN = 'IN
- Data.Morpheus.Types.Internal.AST: type InputFieldsDefinition s = Fields (InputValueDefinition s)
+ Data.Morpheus.Types.Internal.AST: type InputFieldsDefinition s = OrdMap FieldName (InputValueDefinition s)
- Data.Morpheus.Types.Internal.AST: type LEAF = 'LEAF
+ Data.Morpheus.Types.Internal.AST: type LEAF = 'LEAF
- Data.Morpheus.Types.Internal.AST: type MUTATION = 'Mutation
+ Data.Morpheus.Types.Internal.AST: type MUTATION = 'Mutation
- Data.Morpheus.Types.Internal.AST: type OBJECT = 'OBJECT
+ Data.Morpheus.Types.Internal.AST: type OBJECT = 'OBJECT
- Data.Morpheus.Types.Internal.AST: type OUT = 'OUT
+ Data.Morpheus.Types.Internal.AST: type OUT = 'OUT
- Data.Morpheus.Types.Internal.AST: type QUERY = 'Query
+ Data.Morpheus.Types.Internal.AST: type QUERY = 'Query
- Data.Morpheus.Types.Internal.AST: type RAW = 'RAW
+ Data.Morpheus.Types.Internal.AST: type RAW = 'RAW
- Data.Morpheus.Types.Internal.AST: type SUBSCRIPTION = 'Subscription
+ Data.Morpheus.Types.Internal.AST: type SUBSCRIPTION = 'Subscription
- Data.Morpheus.Types.Internal.AST: type SelectionSet (s :: Stage) = MergeSet s (Selection s)
+ Data.Morpheus.Types.Internal.AST: type SelectionSet (s :: Stage) = MergeSet s FieldName (Selection s)
- Data.Morpheus.Types.Internal.AST: type TRUE = 'True
+ Data.Morpheus.Types.Internal.AST: type TRUE = 'True
- Data.Morpheus.Types.Internal.AST: type UnionSelection (s :: Stage) = MergeSet s UnionTag
+ Data.Morpheus.Types.Internal.AST: type UnionSelection (s :: Stage) = MergeSet s TypeName UnionTag
- Data.Morpheus.Types.Internal.AST: type VALID = 'VALID
+ Data.Morpheus.Types.Internal.AST: type VALID = 'VALID
- Data.Morpheus.Types.Internal.Resolving: Publish :: event -> ResponseEvent event
+ Data.Morpheus.Types.Internal.Resolving: Publish :: event -> ResponseEvent event (m :: * -> *)
- Data.Morpheus.Types.Internal.Resolving: ResEnum :: TypeName -> TypeName -> ResModel e
+ Data.Morpheus.Types.Internal.Resolving: ResEnum :: TypeName -> TypeName -> ResModel (o :: OperationType) e (m :: * -> *)
- Data.Morpheus.Types.Internal.Resolving: ResList :: [ResModel o e m] -> ResModel e
+ Data.Morpheus.Types.Internal.Resolving: ResList :: [ResModel o e m] -> ResModel (o :: OperationType) e (m :: * -> *)
- Data.Morpheus.Types.Internal.Resolving: ResNull :: ResModel e
+ Data.Morpheus.Types.Internal.Resolving: ResNull :: ResModel (o :: OperationType) e (m :: * -> *)
- Data.Morpheus.Types.Internal.Resolving: ResObject :: ObjectResModel o e m -> ResModel e
+ Data.Morpheus.Types.Internal.Resolving: ResObject :: ObjectResModel o e m -> ResModel (o :: OperationType) e (m :: * -> *)
- Data.Morpheus.Types.Internal.Resolving: ResScalar :: ScalarValue -> ResModel e
+ Data.Morpheus.Types.Internal.Resolving: ResScalar :: ScalarValue -> ResModel (o :: OperationType) e (m :: * -> *)
- Data.Morpheus.Types.Internal.Resolving: ResUnion :: TypeName -> Resolver o e m (ResModel o e m) -> ResModel e
+ Data.Morpheus.Types.Internal.Resolving: ResUnion :: TypeName -> Resolver o e m (ResModel o e m) -> ResModel (o :: OperationType) e (m :: * -> *)
- Data.Morpheus.Types.Internal.Resolving: ResultT :: m (Result event a) -> ResultT event a
+ Data.Morpheus.Types.Internal.Resolving: ResultT :: m (Result event a) -> ResultT event (m :: * -> *) a
- Data.Morpheus.Types.Internal.Resolving: Subscribe :: SubEvent event m -> ResponseEvent event
+ Data.Morpheus.Types.Internal.Resolving: Subscribe :: Channel event -> (event -> m GQLResponse) -> ResponseEvent event (m :: * -> *)
- Data.Morpheus.Types.Internal.Resolving: [runResultT] :: ResultT event a -> m (Result event a)
+ Data.Morpheus.Types.Internal.Resolving: [runResultT] :: ResultT event (m :: * -> *) a -> m (Result event a)
- Data.Morpheus.Types.Internal.Resolving: subscribe :: forall e channel cont m a. (Monad m, Event channel cont ~ e) => channel -> Resolver QUERY e m (e -> Resolver SUBSCRIPTION e m a) -> SubscriptionField (Resolver SUBSCRIPTION e m a)
+ Data.Morpheus.Types.Internal.Resolving: subscribe :: Monad m => Channel e -> Resolver QUERY e m (e -> Resolver SUBSCRIPTION e m a) -> SubscriptionField (Resolver SUBSCRIPTION e m a)

Files

changelog.md view
@@ -1,5 +1,28 @@ # Changelog +## 0.16.0 - 05.11.2020++### Breaking Changes++- signature changes:++  - `render`:+    `a -> Text`+    to `a -> ByteString`+  - parseTypeSystemDefinition :+    `Text -> Eventless (Schema VALID)`+    to `ByteString -> Eventless (Schema VALID)`++  - parseTypeDefinitions:+    `Text -> Eventless [TypeDefinition ANY CONST]`+    to `ByteString -> Eventless [TypeDefinition ANY CONST]`++### new features++### Minor Changes++- parser performance optimization+ ## 0.15.1 - 12.09.2020  relaxed upper boundary of `megaparsec` up to 10.0.0
morpheus-graphql-core.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: ce18cb316044bb79be32544a1626da5772a8ed0cc0d17214179d77c1d9c6f8f4+-- hash: 0e4275c173b38bbd418ec7b8e986f8b9542760b3cb6df2c53d5976715576a5f4  name:           morpheus-graphql-core-version:        0.15.1+version:        0.16.0 synopsis:       Morpheus GraphQL Core description:    Build GraphQL APIs with your favourite functional language! category:       web, graphql@@ -44,6 +44,37 @@     test/merge/schema/simple-query/api/ext.gql     test/merge/schema/simple-query/expected/ok.gql     test/merge/schema/simple-query/request/query/query.gql+    test/rendering/simple/directive/query.gql+    test/rendering/simple/directive/rendering.gql+    test/rendering/simple/fragment/query.gql+    test/rendering/simple/fragment/rendering.gql+    test/rendering/simple/mutation/query.gql+    test/rendering/simple/mutation/rendering.gql+    test/rendering/simple/nested/query.gql+    test/rendering/simple/nested/rendering.gql+    test/rendering/simple/query/query.gql+    test/rendering/simple/query/rendering.gql+    test/rendering/simple/schema.gql+    test/rendering/simple/simple/query.gql+    test/rendering/simple/simple/rendering.gql+    test/rendering/simple/subscription/query.gql+    test/rendering/simple/subscription/rendering.gql+    test/rendering/union/interface/query.gql+    test/rendering/union/interface/rendering.gql+    test/rendering/union/schema.gql+    test/rendering/union/union/query.gql+    test/rendering/union/union/rendering.gql+    test/rendering/variable/enum/query.gql+    test/rendering/variable/enum/rendering.gql+    test/rendering/variable/include-exclude/query.gql+    test/rendering/variable/include-exclude/rendering.gql+    test/rendering/variable/input/query.gql+    test/rendering/variable/input/rendering.gql+    test/rendering/variable/list/query.gql+    test/rendering/variable/list/rendering.gql+    test/rendering/variable/schema.gql+    test/rendering/variable/simple/query.gql+    test/rendering/variable/simple/rendering.gql     test/schema/parsing/directive/ok/simple/schema.gql     test/schema/parsing/directive/ok/sophisticated/schema.gql     test/schema/parsing/schema-definition/fail/dupplicate-field/query-mutation-subscription/schema.gql@@ -73,6 +104,7 @@     test/schema/validation/interface/field-args/ok/schema.gql     test/schema/validation/interface/field-type/fail/schema.gql     test/schema/validation/interface/field-type/ok/schema.gql+    test/schema/validation/performance-check/schema.gql     test/schema/validation/schema-definition/fail/non-object-kind/from-schema/schema.gql     test/schema/validation/schema-definition/fail/non-object-kind/without-schema/schema.gql     "test/schema/validation/schema-definition/fail/required query/empty/schema.gql"@@ -100,6 +132,14 @@     test/merge/schema/simple-query/api/app.json     test/merge/schema/simple-query/api/ext.json     test/merge/schema/simple-query/request/query/response.json+    test/rendering/simple/fragment/variables.json+    test/rendering/union/interface/variables.json+    test/rendering/union/union/variables.json+    test/rendering/variable/enum/variables.json+    test/rendering/variable/include-exclude/variables.json+    test/rendering/variable/input/variables.json+    test/rendering/variable/list/variables.json+    test/rendering/variable/simple/variables.json     test/schema/parsing/directive/ok/simple/response.json     test/schema/parsing/directive/ok/sophisticated/response.json     test/schema/parsing/schema-definition/fail/dupplicate-field/query-mutation-subscription/response.json@@ -129,6 +169,7 @@     test/schema/validation/interface/field-args/ok/response.json     test/schema/validation/interface/field-type/fail/response.json     test/schema/validation/interface/field-type/ok/response.json+    test/schema/validation/performance-check/response.json     test/schema/validation/schema-definition/fail/non-object-kind/from-schema/response.json     test/schema/validation/schema-definition/fail/non-object-kind/without-schema/response.json     "test/schema/validation/schema-definition/fail/required query/empty/response.json"@@ -161,11 +202,18 @@       Data.Morpheus.Error.Input       Data.Morpheus.Error.NameCollision       Data.Morpheus.Error.Operation-      Data.Morpheus.Error.Schema       Data.Morpheus.Error.Selection       Data.Morpheus.Error.Utils       Data.Morpheus.Error.Variable       Data.Morpheus.Error.Warning+      Data.Morpheus.Ext.Elems+      Data.Morpheus.Ext.Failure+      Data.Morpheus.Ext.KeyOf+      Data.Morpheus.Ext.Map+      Data.Morpheus.Ext.MergeSet+      Data.Morpheus.Ext.OrdMap+      Data.Morpheus.Ext.SafeHashMap+      Data.Morpheus.Ext.SemigroupM       Data.Morpheus.Internal.Graph       Data.Morpheus.Parser       Data.Morpheus.Parsing.Document.TypeSystem@@ -186,9 +234,6 @@       Data.Morpheus.Types.Internal.AST.Base       Data.Morpheus.Types.Internal.AST.DirectiveLocation       Data.Morpheus.Types.Internal.AST.Fields-      Data.Morpheus.Types.Internal.AST.MergeSet-      Data.Morpheus.Types.Internal.AST.OrdMap-      Data.Morpheus.Types.Internal.AST.SafeHashMap       Data.Morpheus.Types.Internal.AST.Selection       Data.Morpheus.Types.Internal.AST.Stage       Data.Morpheus.Types.Internal.AST.TH@@ -227,6 +272,7 @@     , hashable >=1.0.0     , megaparsec >=7.0.0 && <10.0.0     , mtl >=2.0 && <=3.0+    , relude >=0.3.0     , scientific >=0.3.6.2 && <0.4     , template-haskell >=2.0 && <=3.0     , text >=1.2.3.0 && <1.3@@ -242,6 +288,7 @@   other-modules:       Utils.Api       Utils.MergeSchema+      Utils.Rendering       Utils.Schema       Utils.Utils       Paths_morpheus_graphql_core@@ -257,6 +304,7 @@     , megaparsec >=7.0.0 && <10.0.0     , morpheus-graphql-core     , mtl >=2.0 && <=3.0+    , relude >=0.3.0     , scientific >=0.3.6.2 && <0.4     , tasty     , tasty-hunit
src/Data/Morpheus/Core.hs view
@@ -5,6 +5,7 @@ {-# LANGUAGE KindSignatures #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Core   ( parseDSL,@@ -16,7 +17,6 @@     parseRequestWith,     validateSchema,     parseRequest,-    RenderGQL (..),     SelectionTree (..),     Config (..),     VALIDATION_MODE (..),@@ -28,15 +28,15 @@     withDebugger,     mkApp,     runAppStream,+    render,+    RenderGQL,   ) where --- MORPHEUS-import Control.Monad ((>=>)) import Data.ByteString.Lazy.Char8   ( ByteString,   )-import Data.Morpheus.Internal.Utils+import Data.Morpheus.Ext.SemigroupM   ( (<:>),   ) import Data.Morpheus.Parser@@ -45,9 +45,8 @@     parseTypeDefinitions,     parseTypeSystemDefinition,   )-import Data.Morpheus.Rendering.RenderGQL-  ( RenderGQL (..),-  )+import Data.Morpheus.Rendering.RenderGQL (RenderGQL)+import qualified Data.Morpheus.Rendering.RenderGQL as R import Data.Morpheus.Schema.Schema (internalSchema) import Data.Morpheus.Types.App   ( App (..),@@ -70,22 +69,23 @@ import Data.Morpheus.Types.Internal.Resolving   ( Eventless,     resultOr,+    sortErrors,   ) import Data.Morpheus.Types.SelectionTree (SelectionTree (..)) import Data.Morpheus.Validation.Document.Validation (ValidateSchema (..)) import Data.Morpheus.Validation.Query.Validation   ( validateRequest,   )-import qualified Data.Text.Lazy as LT-  ( toStrict,-  )-import Data.Text.Lazy.Encoding (decodeUtf8)+import Relude hiding (ByteString) +render :: RenderGQL a => a -> ByteString+render = R.renderGQL+ parseDSL :: ByteString -> Either String (Schema VALID) parseDSL = resultOr (Left . show) pure . parseGQLDocument  parseGQLDocument :: ByteString -> Eventless (Schema VALID)-parseGQLDocument = parseTypeSystemDefinition . LT.toStrict . decodeUtf8+parseGQLDocument = sortErrors . parseTypeSystemDefinition  parseFullGQLDocument :: ByteString -> Eventless (Schema VALID) parseFullGQLDocument = parseGQLDocument >=> (internalSchema <:>)
src/Data/Morpheus/Error.hs view
@@ -1,14 +1,14 @@+{-# LANGUAGE NoImplicitPrelude #-}+ module Data.Morpheus.Error   ( errorMessage,     globalErrorMessage,     gqlWarnings,     renderGQLErrors,     deprecatedField,-    nameCollisionError,   ) where -import Data.Morpheus.Error.Schema import Data.Morpheus.Error.Utils import Data.Morpheus.Error.Warning   ( deprecatedField,
src/Data/Morpheus/Error/Fragment.hs view
@@ -8,8 +8,6 @@ where  -- MORPHEUS--import Data.Maybe (Maybe (..)) import Data.Morpheus.Error.Utils (validationErrorMessage) import Data.Morpheus.Types.Internal.AST.Base   ( FieldName,@@ -20,8 +18,7 @@     msg,     msgSepBy,   )-import Data.Semigroup ((<>))-import Prelude (($), fmap, head)+import Relude  {-   FRAGMENT:@@ -35,14 +32,14 @@     {...H} -> "Unknown fragment \"H\"." -} -cannotSpreadWithinItself :: [Ref] -> ValidationError-cannotSpreadWithinItself fragments = ValidationError text (fmap refPosition fragments)+cannotSpreadWithinItself :: NonEmpty Ref -> ValidationError+cannotSpreadWithinItself (fr :| frs) = ValidationError text (fmap refPosition (fr : frs))   where     text =       "Cannot spread fragment "-        <> msg (refName $ head fragments)+        <> msg (refName fr)         <> " within itself via "-        <> msgSepBy ", " (fmap refName fragments)+        <> msgSepBy ", " (fmap refName (fr : frs))         <> "."  -- Fragment type mismatch -> "Fragment \"H\" cannot be spread here as objects of type \"Hobby\" can never be of type \"Experience\"."
src/Data/Morpheus/Error/NameCollision.hs view
@@ -5,9 +5,14 @@   ) where +import Data.Morpheus.Ext.Map (Indexed (..)) import Data.Morpheus.Types.Internal.AST.Base   ( ValidationError,   )+import Relude  class NameCollision a where   nameCollision :: a -> ValidationError++instance NameCollision a => NameCollision (Indexed k a) where+  nameCollision = nameCollision . indexedValue
− src/Data/Morpheus/Error/Schema.hs
@@ -1,25 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE NoImplicitPrelude #-}--module Data.Morpheus.Error.Schema-  ( nameCollisionError,-  )-where--import Data.Morpheus.Types.Internal.AST.Base-  ( TypeName,-    ValidationError,-    msgValidation,-  )-import Data.Semigroup ((<>))-import Prelude (($))--schemaValidationError :: ValidationError -> ValidationError-schemaValidationError error = "Schema Validation Error, " <> error--nameCollisionError :: TypeName -> ValidationError-nameCollisionError typeName =-  schemaValidationError $-    "Name collision: "-      <> msgValidation typeName-      <> " is used for different dataTypes in two separate modules"
src/Data/Morpheus/Error/Utils.hs view
@@ -14,7 +14,6 @@   ( ByteString,     pack,   )-import Data.Maybe (Maybe, maybeToList) import Data.Morpheus.Types.Internal.AST.Base   ( GQLError (..),     GQLErrors,@@ -22,8 +21,7 @@     Position (..),     ValidationError (..),   )-import Data.Semigroup ((<>))-import Prelude ((.), String)+import Relude hiding (ByteString)  validationErrorMessage :: Maybe Position -> Message -> ValidationError validationErrorMessage pos message = ValidationError message (maybeToList pos)
src/Data/Morpheus/Error/Variable.hs view
@@ -16,8 +16,7 @@     Variable (..),     msg,   )-import Data.Semigroup ((<>))-import Prelude (($), Maybe (..))+import Relude  -- query M ( $v : String ) { a(p:$v) } -> "Variable \"$v\" of type \"String\" used in position expecting type \"LANGUAGE\"." incompatibleVariableType :: Ref -> Variable s -> TypeRef -> ValidationError
src/Data/Morpheus/Error/Warning.hs view
@@ -12,10 +12,6 @@  import Data.Aeson (encode) import Data.ByteString.Lazy.Char8 (unpack)-import Data.Foldable (traverse_)--- MORPHEUS--import Data.Maybe (Maybe (..), maybe) import Data.Morpheus.Error.Utils (errorMessage) import Data.Morpheus.Types.Internal.AST.Base   ( Description,@@ -24,17 +20,8 @@     Ref (..),     msg,   )-import Data.Semigroup ((<>))-import Language.Haskell.TH-  ( Q,-    reportWarning,-  )-import Prelude-  ( ($),-    (.),-    String,-    pure,-  )+import Language.Haskell.TH (Q, reportWarning)+import Relude  renderGQLErrors :: GQLErrors -> String renderGQLErrors = unpack . encode
+ src/Data/Morpheus/Ext/Elems.hs view
@@ -0,0 +1,25 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Morpheus.Ext.Elems+  ( Elems (..),+    size,+  )+where++import qualified Data.HashMap.Lazy as HM+import Instances.TH.Lift ()+import Relude++class Elems a coll | coll -> a where+  elems :: coll -> [a]++instance Elems a (HashMap k a) where+  elems = HM.elems++instance Elems a [a] where+  elems = id++size :: Elems a coll => coll -> Int+size = length . elems
+ src/Data/Morpheus/Ext/Failure.hs view
@@ -0,0 +1,21 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Morpheus.Ext.Failure+  ( Failure (..),+  )+where++import Relude++-- Failure: for custom Morpheus GrapHQL errors+class Applicative f => Failure error (f :: * -> *) where+  failure :: error -> f v++instance Failure error (Either error) where+  failure = Left++instance (Monad m, Failure errors m) => Failure errors (ReaderT ctx m) where+  failure = lift . failure
+ src/Data/Morpheus/Ext/KeyOf.hs view
@@ -0,0 +1,38 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Morpheus.Ext.KeyOf+  ( KeyOf (..),+    toPair,+  )+where++import Data.Morpheus.Ext.Map+  ( Indexed (..),+  )+import Data.Morpheus.Types.Internal.AST.Base+  ( FieldName (..),+    Ref (..),+    TypeName (..),+    TypeNameRef (..),+  )+import Relude++class (Eq k, Hashable k) => KeyOf k a | a -> k where+  keyOf :: a -> k++instance (Eq k, Hashable k) => KeyOf k (k, a) where+  keyOf = fst++instance KeyOf FieldName Ref where+  keyOf = refName++instance KeyOf TypeName TypeNameRef where+  keyOf = typeNameRef++instance (Eq k, Hashable k) => KeyOf k (Indexed k a) where+  keyOf = indexedKey++toPair :: KeyOf k a => a -> (k, a)+toPair x = (keyOf x, x)
+ src/Data/Morpheus/Ext/Map.hs view
@@ -0,0 +1,104 @@+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Morpheus.Ext.Map+  ( Indexed (..),+    indexed,+    fromListT,+    resolveWith,+    runResolutionT,+    ResolutionT,+  )+where++import Data.Foldable (foldl)+import qualified Data.HashMap.Lazy as HM+import Language.Haskell.TH.Syntax (Lift)+import Relude++sortedEntries :: [Indexed k a] -> [(k, a)]+sortedEntries = fmap f . sortOn index+  where+    f a = (indexedKey a, indexedValue a)++fromListT :: (Monad m, Eq k, Hashable k) => [(k, a)] -> ResolutionT k a coll m coll+fromListT = traverse resolveDuplicatesM . fromListDuplicates >=> fromNoDuplicatesM++resolveWith ::+  Monad m =>+  (a -> a -> m a) ->+  NonEmpty a ->+  m a+resolveWith f (x :| xs) = foldlM f x xs++data Indexed k a = Indexed+  { index :: Int,+    indexedKey :: k,+    indexedValue :: a+  }+  deriving+    ( Show,+      Eq,+      Functor,+      Traversable,+      Foldable,+      Lift+    )++fromListDuplicates :: (Eq k, Hashable k) => [(k, a)] -> [(k, NonEmpty a)]+fromListDuplicates xs =+  sortedEntries+    $ HM.elems+    $ clusterDuplicates (indexed xs) HM.empty++indexed :: [(k, a)] -> [Indexed k a]+indexed = __indexed 0+  where+    __indexed :: Int -> [(k, a)] -> [Indexed k a]+    __indexed _ [] = []+    __indexed i ((k, x) : xs) = Indexed i k x : __indexed (i + 1) xs++resolveDuplicatesM :: Monad m => (k, NonEmpty a) -> ResolutionT k a coll m (k, a)+resolveDuplicatesM (k, xs) = asks resolveDuplicates >>= lift . fmap (k,) . (xs &)++fromNoDuplicatesM :: Monad m => [(k, a)] -> ResolutionT k a coll m coll+fromNoDuplicatesM xs = asks ((xs &) . fromNoDuplicates)++insertWithList :: (Eq k, Hashable k) => Indexed k (NonEmpty a) -> HashMap k (Indexed k (NonEmpty a)) -> HashMap k (Indexed k (NonEmpty a))+insertWithList (Indexed i1 key value) = HM.alter (Just . updater) key+  where+    updater Nothing = Indexed i1 key value+    updater (Just (Indexed i2 _ x)) = Indexed i2 key (x <> value)++clusterDuplicates :: (Eq k, Hashable k) => [Indexed k a] -> HashMap k (Indexed k (NonEmpty a)) -> HashMap k (Indexed k (NonEmpty a))+clusterDuplicates [] = id+clusterDuplicates xs = flip (foldl (\coll x -> insertWithList (fmap (:| []) x) coll)) xs++data Resolution k a coll m = Resolution+  { resolveDuplicates :: NonEmpty a -> m a,+    fromNoDuplicates :: [(k, a)] -> coll+  }++runResolutionT ::+  ResolutionT k a coll m b ->+  ([(k, a)] -> coll) ->+  (NonEmpty a -> m a) ->+  m b+runResolutionT (ResolutionT x) fromNoDuplicates resolveDuplicates = runReaderT x Resolution {..}++newtype ResolutionT k a coll m x = ResolutionT+  { _runResolutionT :: ReaderT (Resolution k a coll m) m x+  }+  deriving+    ( Functor,+      Monad,+      Applicative,+      MonadReader (Resolution k a coll m)+    )++instance MonadTrans (ResolutionT k a coll) where+  lift = ResolutionT . lift
+ src/Data/Morpheus/Ext/MergeSet.hs view
@@ -0,0 +1,106 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE DeriveLift #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Morpheus.Ext.MergeSet+  ( MergeSet,+  )+where++import Data.Morpheus.Ext.Elems (Elems (..))+import Data.Morpheus.Ext.Map+  ( fromListT,+    resolveWith,+    runResolutionT,+  )+import Data.Morpheus.Ext.SemigroupM+  ( SemigroupM (..),+  )+import Data.Morpheus.Internal.Utils+  ( Collection (..),+    Failure (..),+    FromElems (..),+    KeyOf (..),+    Selectable (..),+    toPair,+  )+import Data.Morpheus.Types.Internal.AST.Base+  ( Ref,+    ValidationErrors,+  )+import Data.Morpheus.Types.Internal.AST.Stage+  ( RAW,+    Stage,+    VALID,+  )+import Language.Haskell.TH.Syntax (Lift (..))+import Relude++-- set with mergeable components+newtype MergeSet (dups :: Stage) k a = MergeSet+  { unpack :: [a]+  }+  deriving+    ( Show,+      Eq,+      Functor,+      Foldable,+      Lift,+      Traversable,+      Collection a,+      Elems a+    )++instance (KeyOf k a) => Selectable k a (MergeSet opt k a) where+  selectOr fb f key (MergeSet ls) = maybe fb f (find ((key ==) . keyOf) ls)++instance+  ( KeyOf k a,+    SemigroupM m a,+    Monad m,+    Failure ValidationErrors m,+    Eq a+  ) =>+  SemigroupM m (MergeSet VALID k a)+  where+  mergeM path (MergeSet x) (MergeSet y) = resolveMergable path (x <> y)++resolveMergable ::+  ( KeyOf k a,+    Monad m,+    Eq a,+    SemigroupM m a,+    Failure ValidationErrors m+  ) =>+  [Ref] ->+  [a] ->+  m (MergeSet dups k a)+resolveMergable path xs = runResolutionT (fromListT (toPair <$> xs)) (MergeSet . fmap snd) (resolveWith (resolveConflict path))++instance+  ( KeyOf k a,+    SemigroupM m a,+    Monad m,+    Failure ValidationErrors m,+    Eq a+  ) =>+  FromElems m a (MergeSet VALID k a)+  where+  fromElems = resolveMergable []++instance Applicative m => SemigroupM m (MergeSet RAW k a) where+  mergeM _ (MergeSet x) (MergeSet y) = pure $ MergeSet $ x <> y++instance Applicative m => FromElems m a (MergeSet RAW k a) where+  fromElems = pure . MergeSet++resolveConflict :: (Monad m, Eq a, KeyOf k a, SemigroupM m a, Failure ValidationErrors m) => [Ref] -> a -> a -> m a+resolveConflict path oldValue newValue+  | oldValue == newValue = pure oldValue+  | otherwise = mergeM path oldValue newValue
+ src/Data/Morpheus/Ext/OrdMap.hs view
@@ -0,0 +1,92 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Morpheus.Ext.OrdMap+  ( OrdMap (..),+    unsafeFromList,+  )+where++import qualified Data.HashMap.Lazy as HM+import Data.Morpheus.Error.NameCollision (NameCollision (..))+import Data.Morpheus.Ext.Elems (Elems (..))+import Data.Morpheus.Ext.Map+  ( Indexed (..),+    indexed,+  )+import Data.Morpheus.Ext.SemigroupM+  ( SemigroupM (..),+  )+import Data.Morpheus.Internal.Utils+  ( Collection (..),+    Failure,+    FromElems (..),+    KeyOf (..),+    Selectable (..),+    toPair,+  )+import Data.Morpheus.Types.Internal.AST.Base (ValidationErrors)+import Language.Haskell.TH.Syntax (Lift (..))+import Relude++-- OrdMap+newtype OrdMap k a = OrdMap+  { mapEntries :: HashMap k (Indexed k a)+  }+  deriving+    ( Show,+      Eq,+      Functor,+      Traversable+    )++instance (Lift a, Lift k, Eq k, Hashable k) => Lift (OrdMap k a) where+  lift (OrdMap x) = [|OrdMap (HM.fromList ls)|]+    where+      ls = HM.toList x++#if MIN_VERSION_template_haskell(2,16,0)+  liftTyped (OrdMap x) = [||OrdMap (HM.fromList ls)||]+    where+      ls = HM.toList x+#endif++instance (Eq k, Hashable k) => Foldable (OrdMap k) where+  foldMap f = foldMap f . getElements++getElements :: (Eq k, Hashable k) => OrdMap k b -> [b]+getElements = fmap indexedValue . sortOn index . toList . mapEntries++instance (KeyOf k a, Hashable k) => Collection a (OrdMap k a) where+  empty = OrdMap HM.empty+  singleton x = OrdMap $ HM.singleton (keyOf x) (Indexed 0 (keyOf x) x)++instance (Eq k, Hashable k) => Selectable k a (OrdMap k a) where+  selectOr fb f key OrdMap {mapEntries} = maybe fb (f . indexedValue) (HM.lookup key mapEntries)++instance (NameCollision a, Monad m, KeyOf k a, Failure ValidationErrors m) => SemigroupM m (OrdMap k a) where+  mergeM ref (OrdMap x) (OrdMap y) = OrdMap <$> mergeM ref x y++instance (NameCollision a, Monad m, Failure ValidationErrors m, KeyOf k a, Hashable k) => FromElems m a (OrdMap k a) where+  fromElems values = OrdMap <$> fromElems (indexed (toPair <$> values))++instance (Eq k, Hashable k) => Elems a (OrdMap k a) where+  elems = getElements++unsafeFromList ::+  (Hashable k, Eq k) =>+  [(k, a)] ->+  OrdMap k a+unsafeFromList = OrdMap . HM.fromList . fmap withKey . indexed+  where+    withKey idx = (indexedKey idx, idx)
+ src/Data/Morpheus/Ext/SafeHashMap.hs view
@@ -0,0 +1,81 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE DerivingStrategies #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Morpheus.Ext.SafeHashMap+  ( SafeHashMap,+    unsafeFromList,+    insert,+  )+where++import qualified Data.HashMap.Lazy as HM+import Data.Morpheus.Error.NameCollision (NameCollision (..))+import Data.Morpheus.Ext.Elems (Elems)+import Data.Morpheus.Ext.SemigroupM+  ( (<:>),+    SemigroupM (..),+  )+import Data.Morpheus.Internal.Utils+  ( Collection (..),+    Failure (..),+    FromElems (..),+    KeyOf (..),+    Selectable (..),+  )+import Data.Morpheus.Types.Internal.AST.Base (ValidationErrors)+import Language.Haskell.TH.Syntax (Lift (..))+import Relude++newtype SafeHashMap k a = SafeHashMap+  { unpackSafeHashMap :: HashMap k a+  }+  deriving+    ( Show,+      Eq,+      Functor,+      Foldable,+      Traversable+    )+  deriving newtype+    ( Collection a,+      Selectable k a,+      Elems a+    )++instance (Lift a, Lift k, Eq k, Hashable k) => Lift (SafeHashMap k a) where+  lift (SafeHashMap x) = let ls = HM.toList x in [|SafeHashMap (HM.fromList ls)|]++#if MIN_VERSION_template_haskell(2,16,0)+  liftTyped (SafeHashMap x) = let ls = HM.toList x in [||SafeHashMap (HM.fromList ls)||]+#endif++instance (NameCollision a, Monad m, KeyOf k a, Failure ValidationErrors m) => SemigroupM m (SafeHashMap k a) where+  mergeM ref (SafeHashMap x) (SafeHashMap y) = SafeHashMap <$> mergeM ref x y++instance (NameCollision a, Failure ValidationErrors m, Monad m, KeyOf k a, Hashable k) => FromElems m a (SafeHashMap k a) where+  fromElems = fmap SafeHashMap . fromElems++unsafeFromList :: (Eq k, KeyOf k a) => [(k, a)] -> SafeHashMap k a+unsafeFromList = SafeHashMap . HM.fromList++insert ::+  ( NameCollision a,+    KeyOf k a,+    Monad m,+    Failure ValidationErrors m+  ) =>+  a ->+  SafeHashMap k a ->+  m (SafeHashMap k a)+insert x = (<:> singleton x)
+ src/Data/Morpheus/Ext/SemigroupM.hs view
@@ -0,0 +1,82 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE KindSignatures #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Data.Morpheus.Ext.SemigroupM+  ( SemigroupM (..),+    (<:>),+    concatTraverse,+    join,+  )+where++import qualified Data.HashMap.Lazy as HM+import Data.HashMap.Lazy (HashMap)+import Data.Morpheus.Error.NameCollision (NameCollision)+import Data.Morpheus.Ext.KeyOf (KeyOf (..))+import Data.Morpheus.Ext.Map+  ( fromListT,+    runResolutionT,+  )+import Data.Morpheus.Internal.Utils+  ( Collection (..),+    Elems (..),+    Failure,+    failOnDuplicates,+  )+import Data.Morpheus.Types.Internal.AST.Base+  ( Ref,+    ValidationErrors,+  )+import Relude+  ( ($),+    Applicative (..),+    Monad (..),+    Semigroup (..),+    Traversable (..),+  )++class SemigroupM (m :: * -> *) a where+  mergeM :: [Ref] -> a -> a -> m a++instance+  ( NameCollision a,+    Monad m,+    KeyOf k a,+    Failure ValidationErrors m+  ) =>+  SemigroupM m (HashMap k a)+  where+  mergeM _ x y = runResolutionT (fromListT $ HM.toList x <> HM.toList y) HM.fromList failOnDuplicates++concatTraverse ::+  ( Monad m,+    Failure ValidationErrors m,+    Collection b cb,+    Elems a ca,+    SemigroupM m cb+  ) =>+  (a -> m cb) ->+  ca ->+  m cb+concatTraverse f smap =+  traverse f (elems smap)+    >>= join++join ::+  ( Collection e a,+    Monad m,+    Failure ValidationErrors m,+    SemigroupM m a+  ) =>+  [a] ->+  m a+join = __join empty+  where+    __join acc [] = pure acc+    __join acc (x : xs) = acc <:> x >>= (`__join` xs)++(<:>) :: SemigroupM m a => a -> a -> m a+(<:>) = mergeM []
src/Data/Morpheus/Internal/Graph.hs view
@@ -11,18 +11,9 @@   ) where -import Control.Applicative (Applicative, pure)-import Data.Foldable (traverse_)-import Data.List (elem, lookup)-import Data.Maybe (Maybe (..))--- MORPHEUS-import Data.Morpheus.Types.Internal.AST-  ( Ref (..),-  )-import Data.Semigroup ((<>))-import Prelude-  ( otherwise,-  )+import Data.List (lookup)+import Data.Morpheus.Types.Internal.AST (Ref (..))+import Relude  type Node = Ref @@ -32,31 +23,31 @@  cycleChecking ::   Applicative m =>-  ([Ref] -> m ()) ->+  (NonEmpty Ref -> m ()) ->   Graph ->   m ()-cycleChecking fail graph = traverse_ checkNode graph+cycleChecking fail' graph = traverse_ checkNode graph   where-    checkNode (node, _) = cycleCheckingWith graph node [node] fail+    checkNode (node, _) = cycleCheckingWith graph node [node] fail'  cycleCheckingWith ::   Applicative m =>   Graph ->   Ref ->   [Ref] ->-  ([Ref] -> m ()) ->+  (NonEmpty Ref -> m ()) ->   m ()-cycleCheckingWith graph parentNode history fail =+cycleCheckingWith graph parentNode history fail' =   case lookup parentNode graph of     Just node -> traverse_ checkNode node     Nothing -> pure ()   where     checkNode node       | node `elem` history =-        fail (node : history)+        fail' (node :| history)       | otherwise =         cycleCheckingWith           graph           node           (history <> [node])-          fail+          fail'
src/Data/Morpheus/Internal/TH.hs view
@@ -9,7 +9,6 @@ {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-}--- MORPHEUS {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Internal.TH@@ -19,18 +18,17 @@     applyVars,     decArgs,     declareTypeRef,-    destructRecord,     funDProxy,     funDSimple,     infoTyVars,     isEnum,     m',-    mkFieldsE,     nameSpaceField,     nameSpaceType,     toCon,     toConE,     toConT,+    toVar,     ToName (..),     toString,     toVarE,@@ -43,49 +41,29 @@     o',     e',     vars,-    decodeObjectE,-    matchWith,   ) where -import Control.Applicative ((<*>), pure)-import Control.Monad.Fail (fail)-import Data.Foldable (foldl, foldr1)-import Data.Functor ((<$>))-import Data.Maybe (Maybe (..))+import Data.Foldable (foldl) import Data.Morpheus.Internal.Utils   ( capitalize,     nameSpaceField,     nameSpaceType,   ) import Data.Morpheus.Types.Internal.AST-  ( FieldDefinition (..),-    FieldName (..),+  ( FieldName (..),     TypeKind (..),     TypeName (..),     TypeRef (..),     TypeWrapper (..),     convertToHaskellName,     isEnum,-    isNullable,     isOutputObject,     readName,   )-import Data.Semigroup ((<>)) import Data.Text (unpack) import Language.Haskell.TH-import Prelude-  ( ($),-    (.),-    (==),-    Bool (..),-    String,-    id,-    map,-    otherwise,-    show,-    (||),-  )+import Relude hiding (ToString (..), Type)  m' :: Type m' = VarT (mkName "m")@@ -119,8 +97,8 @@     wrappedT [] = decType typeArgs     --------------------------------------------     decType :: Maybe String -> Type-    decType (Just par) = apply (capitalize typeConName) [toVar par]-    decType _ = toCon (capitalize typeConName)+    decType (Just par) = apply typeConName [toVar par]+    decType _ = toCon typeConName  tyConArgs :: TypeKind -> [String] tyConArgs kindD@@ -234,21 +212,6 @@ funDSimple :: Name -> [PatQ] -> ExpQ -> DecQ funDSimple name args body = funD name [clause args (normalB body) []] --- |--- input:--- >>>--- destructRecord "User" ["name","id"]--- >>>------ expression:--- >>>--- (User name id)--- >>>-destructRecord :: TypeName -> [FieldDefinition cat s] -> PatQ-destructRecord conName fields = conP (toName conName) (vars names)-  where-    names = map fieldName fields- infoTyVars :: Info -> [TyVarBndr] infoTyVars (TyConI x) = decArgs x infoTyVars _ = []@@ -270,74 +233,6 @@  toConE :: ToCon a Exp => a -> ExpQ toConE = toCon---- | 'mkFieldsE'------  input :---  >>>---       mkFieldsE 'mkValue [FieldDefinition { fieldName = \"field1" ,..} ,..]---  >>>------  expression :---  >>>---    [ mkValue \"field1\" field1,---    ..---    ]--- >>>-mkFieldsE :: Name -> [FieldDefinition cat s] -> Exp-mkFieldsE name = ListE . map (mkEntryWith name)----  input : mkFieldWith 'mkValue (FieldDefinition { fieldName = "field1", ..})---  expression: mkValue "field1"  field1-mkEntryWith ::-  Name ->-  FieldDefinition cat s ->-  Exp-mkEntryWith f FieldDefinition {fieldName} =-  AppE-    (AppE (VarE f) (toString fieldName))-    (toVar fieldName)--decodeObjectE :: (Bool -> Name) -> TypeName -> [FieldDefinition cat s] -> ExpQ-decodeObjectE _ conName [] = appE (varE 'pure) (toCon conName)-decodeObjectE funName conName fields =-  uInfixE-    (toCon conName)-    (varE '(<$>))-    (foldr1 withApplicative $ map (defField funName) fields)--withApplicative :: ExpQ -> ExpQ -> ExpQ-withApplicative x = uInfixE x (varE '(<*>))--matchWith ::-  Bool ->-  (t -> (PatQ, ExpQ)) ->-  [t] ->-  ExpQ-matchWith isClosed f xs = lamCaseE (map buildMatch xs <> fallback)-  where-    fallback-      | isClosed = []-      | otherwise = [elseCaseEXP]-    buildMatch x = match pat (normalB body) []-      where-        (pat, body) = f x--elseCaseEXP :: MatchQ-elseCaseEXP = match v' body []-  where-    body =-      normalB $-        appE-          (toVarE 'fail)-          ( uInfixE-              (appE (varE 'show) v')-              (varE '(<>))-              (stringE " is Not Valid Union Constructor")-          )--defField :: (Bool -> Name) -> FieldDefinition cat s -> ExpQ-defField f field@FieldDefinition {fieldName} = uInfixE v' (varE $ f (isNullable field)) (toString fieldName)  #if MIN_VERSION_template_haskell(2,15,0) -- fix breaking changes
src/Data/Morpheus/Internal/Utils.hs view
@@ -1,12 +1,9 @@ {-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-}-{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Internal.Utils@@ -16,89 +13,65 @@     capitalTypeName,     Collection (..),     Selectable (..),-    Listable (..),-    Merge (..),+    FromElems (..),     Failure (..),     KeyOf (..),     toPair,     selectBy,-    member,-    keys,-    size,-    (<:>),     mapFst,     mapSnd,     mapTuple,-    UpdateT (..),-    resolveUpdates,-    concatUpdates,-    failUpdates,-    ordTraverse,-    ordTraverse_,     traverseCollection,-    (<.>),-    SemigroupM (..),-    fromListT,-    mergeT,-    runResolutionT,-    ResolutionT,     prop,-    resolveWith,     stripFieldNamespace,     stripConstructorNamespace,+    fromLBS,+    toLBS,+    mergeT,+    Elems (..),+    size,+    failOnDuplicates,   ) where -import Control.Applicative (Applicative (..))-import Control.Monad ((=<<), (>=>), (>>=), foldM)-import Control.Monad.Reader (MonadReader (..), asks)-import Control.Monad.Trans.Class (MonadTrans (..))-import Control.Monad.Trans.Reader-  ( ReaderT (..),-  )+import Data.ByteString.Lazy (ByteString) import Data.Char   ( toLower,     toUpper,   )-import Data.Foldable (foldlM, null, traverse_)-import Data.Function ((&))-import Data.HashMap.Lazy (HashMap) import qualified Data.HashMap.Lazy as HM-import Data.Hashable (Hashable)-import Data.List (drop, find)-import Data.List.NonEmpty (NonEmpty (..))-import Data.Maybe (maybe) import Data.Morpheus.Error.NameCollision (NameCollision (..))+import Data.Morpheus.Ext.Elems (Elems (..), size)+import Data.Morpheus.Ext.Failure (Failure (..))+import Data.Morpheus.Ext.KeyOf (KeyOf (..), toPair)+import Data.Morpheus.Ext.Map+  ( ResolutionT,+    fromListT,+    runResolutionT,+  ) import Data.Morpheus.Types.Internal.AST.Base   ( FieldName,     FieldName (..),-    Ref (..),     Token,     TypeName (..),-    TypeNameRef (..),     ValidationErrors,   )-import Data.Semigroup (Semigroup (..)) import qualified Data.Text as T-import Data.Traversable (traverse)+import qualified Data.Text.Lazy as LT+import Data.Text.Lazy.Encoding (decodeUtf8, encodeUtf8) import Instances.TH.Lift ()-import Prelude-  ( ($),-    (.),-    Bool (..),-    Either (..),-    Eq (..),-    Functor (..),-    Int,-    Monad,-    String,-    const,-    fst,-    length,-    otherwise,-    snd,+import Relude hiding+  ( ByteString,+    decodeUtf8,+    encodeUtf8,   ) +toLBS :: Text -> ByteString+toLBS = encodeUtf8 . LT.fromStrict++fromLBS :: ByteString -> Text+fromLBS = LT.toStrict . decodeUtf8+ prop :: (b -> b -> m b) -> (a -> b) -> a -> a -> m b prop f fSel a1 a2 = f (fSel a1) (fSel a2) @@ -106,40 +79,30 @@ nameSpaceType list (TypeName name) = TypeName . T.concat $ fmap capitalize (fmap readName list <> [name])  nameSpaceField :: TypeName -> FieldName -> FieldName-nameSpaceField nSpace (FieldName name) = FieldName (nonCapital nSpace <> capitalize name)+nameSpaceField (TypeName nSpace) (FieldName name) = FieldName (uncapitalize nSpace <> capitalize name)  dropPrefix :: TypeName -> String -> String-dropPrefix (TypeName name) = drop (length (T.unpack name))+dropPrefix (TypeName name) = drop (T.length name)  stripConstructorNamespace :: TypeName -> String -> String stripConstructorNamespace = dropPrefix  stripFieldNamespace :: TypeName -> String -> String-stripFieldNamespace prefix = uncapitalize . dropPrefix prefix--mapText :: (String -> String) -> Token -> Token-mapText f = T.pack . f . T.unpack--nonCapital :: TypeName -> Token-nonCapital = uncapitalize . readTypeName--class Capitalize a where-  capitalize :: a -> a-  uncapitalize :: a -> a+stripFieldNamespace prefix = __uncapitalize . dropPrefix prefix+  where+    __uncapitalize [] = []+    __uncapitalize (x : xs) = toLower x : xs -instance Capitalize String where-  capitalize [] = []-  capitalize (x : xs) = toUpper x : xs-  uncapitalize [] = []-  uncapitalize (x : xs) = toLower x : xs+capitalize :: Text -> Text+capitalize = mapFstChar toUpper -instance Capitalize Token where-  capitalize = mapText capitalize-  uncapitalize = mapText uncapitalize+uncapitalize :: Text -> Text+uncapitalize = mapFstChar toLower -instance Capitalize TypeName where-  capitalize = TypeName . capitalize . readTypeName-  uncapitalize = TypeName . uncapitalize . readTypeName+mapFstChar :: (Char -> Char) -> Token -> Token+mapFstChar f x+  | T.null x = x+  | otherwise = T.singleton (f $ T.head x) <> T.tail x  capitalTypeName :: FieldName -> TypeName capitalTypeName = TypeName . capitalize . readName@@ -160,6 +123,9 @@ class Selectable k a c | c -> a where   selectOr :: d -> (a -> d) -> k -> c -> d +  member :: k -> c -> Bool+  member = selectOr False (const True)+ instance KeyOf k a => Selectable k a [a] where   selectOr fb f key lib = maybe fb f (find ((key ==) . keyOf) lib) @@ -169,29 +135,11 @@ selectBy :: (Failure e m, Selectable k a c, Monad m) => e -> k -> c -> m a selectBy err = selectOr (failure err) pure -member :: Selectable k a c => k -> c -> Bool-member = selectOr False toTrue-  where-    toTrue :: a -> Bool-    toTrue _ = True--ordTraverse ::-  ( Monad f,-    KeyOf k b,-    Listable a (t a),-    Listable b (t b),-    Failure ValidationErrors f-  ) =>-  (a -> f b) ->-  t a ->-  f (t b)-ordTraverse = traverseCollection- traverseCollection ::   ( Monad f,     KeyOf k b,-    Listable a (t a),-    Listable b (t' b),+    Elems a (t a),+    FromElems f b (t' b),     Failure ValidationErrors f   ) =>   (a -> f b) ->@@ -199,75 +147,25 @@   f (t' b) traverseCollection f a = fromElems =<< traverse f (elems a) -ordTraverse_ ::-  ( Monad f,-    Listable a (t a)-  ) =>-  (a -> f b) ->-  t a ->-  f ()-ordTraverse_ f a = traverse_ f (elems a)--class (Eq k, Hashable k) => KeyOf k a | a -> k where-  keyOf :: a -> k--instance (Eq k, Hashable k) => KeyOf k (k, a) where-  keyOf = fst--instance KeyOf FieldName Ref where-  keyOf = refName--instance KeyOf TypeName TypeNameRef where-  keyOf = typeNameRef--toPair :: KeyOf k a => a -> (k, a)-toPair x = (keyOf x, x)- -- list Like Collections-class Listable a coll | coll -> a where-  elems :: coll -> [a]-  fromElems :: (Monad m, Failure ValidationErrors m) => [a] -> m coll--instance (NameCollision a, KeyOf k a) => Listable a (HashMap k a) where-  fromElems xs = runResolutionT (fromListT xs) hmUnsafeFromValues failOnDuplicates-  elems = HM.elems+class FromElems m a coll | coll -> a where+  fromElems :: [a] -> m coll -keys :: (KeyOf k a, Listable a coll) => coll -> [k]-keys = fmap keyOf . elems+mergeT :: (KeyOf k a, Monad m, Elems a c) => c -> c -> ResolutionT k a c m c+mergeT x y = fromListT (toPair <$> (elems x <> elems y)) -size :: Listable a coll => coll -> Int-size = length . elems+instance+  ( NameCollision a,+    Failure ValidationErrors m,+    KeyOf k a,+    Monad m+  ) =>+  FromElems m a (HashMap k a)+  where+  fromElems xs = runResolutionT (fromListT (toPair <$> xs)) HM.fromList failOnDuplicates  -- Merge Object with of Failure as an Option-class Merge a where-  merge :: (Monad m, Failure ValidationErrors m) => [Ref] -> a -> a -> m a -instance (NameCollision a, KeyOf k a) => Merge (HashMap k a) where-  merge _ x y = runResolutionT (fromListT $ HM.elems x <> HM.elems y) hmUnsafeFromValues failOnDuplicates--(<:>) :: (Monad m, Merge a, Failure ValidationErrors m) => a -> a -> m a-(<:>) = merge []--class SemigroupM m a where-  mergeM :: [Ref] -> a -> a -> m a--(<.>) ::-  (SemigroupM m a) =>-  a ->-  a ->-  m a-(<.>) = mergeM []---- Failure: for custom Morpheus GrapHQL errors-class Applicative f => Failure error (f :: * -> *) where-  failure :: error -> f v--instance Failure error (Either error) where-  failure = Left--instance (Monad m, Failure errors m) => Failure errors (ReaderT ctx m) where-  failure = lift . failure- mapFst :: (a -> a') -> (a, b) -> (a', b) mapFst f (a, b) = (f a, b) @@ -276,98 +174,6 @@  mapTuple :: (a -> a') -> (b -> b') -> (a, b) -> (a', b') mapTuple f1 f2 (a, b) = (f1 a, f2 b)---- Helper Functions-newtype UpdateT m a = UpdateT {updateTState :: a -> m a}--failUpdates :: (Failure e m) => e -> UpdateT m a-failUpdates = UpdateT . const . failure--concatUpdates :: Monad m => [UpdateT m a] -> UpdateT m a-concatUpdates x = UpdateT (`resolveUpdates` x)--resolveUpdates :: Monad m => a -> [UpdateT m a] -> m a-resolveUpdates a = foldM (&) a . fmap updateTState--type RESOLUTION k a coll m =-  ( Monad m,-    KeyOf k a,-    Listable a coll-  )--data Resolution a coll m = Resolution-  { resolveDuplicates :: NonEmpty a -> m a,-    fromNoDuplicates :: [a] -> coll-  }--runResolutionT ::-  ResolutionT a coll m b ->-  ([a] -> coll) ->-  (NonEmpty a -> m a) ->-  m b-runResolutionT (ResolutionT x) fromNoDuplicates resolveDuplicates = runReaderT x Resolution {..}--newtype ResolutionT a coll m x = ResolutionT-  { _runResolutionT :: ReaderT (Resolution a coll m) m x-  }-  deriving-    ( Functor,-      Monad,-      Applicative,-      MonadReader (Resolution a coll m)-    )--instance MonadTrans (ResolutionT e coll) where-  lift = ResolutionT . lift--instance-  ( Monad m,-    Failure ValidationErrors m-  ) =>-  Failure ValidationErrors (ResolutionT a coll m)-  where-  failure = lift . failure--resolveDuplicatesM :: Monad m => NonEmpty a -> ResolutionT a coll m a-resolveDuplicatesM xs = asks resolveDuplicates >>= lift . (xs &)--fromNoDuplicatesM :: Monad m => [a] -> ResolutionT a coll m coll-fromNoDuplicatesM xs = asks ((xs &) . fromNoDuplicates)--insertWithList :: (Eq k, Hashable k) => (k, NonEmpty a) -> [(k, NonEmpty a)] -> [(k, NonEmpty a)]-insertWithList (key, value) values-  | key `member` values = fmap replaceBy values-  | otherwise = values <> [(key, value)]-  where-    replaceBy (entryKey, entryValue)-      | key == entryKey = (key, entryValue <> value)-      | otherwise = (entryKey, entryValue)--clusterDuplicates :: (Eq k, Hashable k) => [(k, NonEmpty a)] -> [(k, a)] -> [(k, NonEmpty a)]-clusterDuplicates collected [] = collected-clusterDuplicates coll ((key, value) : xs) = clusterDuplicates (insertWithList (key, value :| []) coll) xs--fromListDuplicates :: (KeyOf k a) => [a] -> [(k, NonEmpty a)]-fromListDuplicates xs = clusterDuplicates [] (fmap toPair xs)--fromListT ::-  RESOLUTION k a coll m =>-  [a] ->-  ResolutionT a coll m coll-fromListT = traverse (resolveDuplicatesM . snd) . fromListDuplicates >=> fromNoDuplicatesM--mergeT :: RESOLUTION k a coll m => coll -> coll -> ResolutionT a coll m coll-mergeT c1 c2 = traverse (resolveDuplicatesM . snd) (fromListDuplicates (elems c1 <> elems c2)) >>= fromNoDuplicatesM--resolveWith ::-  Monad m =>-  (a -> a -> m a) ->-  NonEmpty a ->-  m a-resolveWith f (x :| xs) = foldlM f x xs--hmUnsafeFromValues :: (Eq k, KeyOf k a) => [a] -> HashMap k a-hmUnsafeFromValues = HM.fromList . fmap toPair  failOnDuplicates :: (Failure ValidationErrors m, NameCollision a) => NonEmpty a -> m a failOnDuplicates (x :| xs)
src/Data/Morpheus/Parser.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE NoImplicitPrelude #-}+ module Data.Morpheus.Parser   ( parseTypeDefinitions,     parseTypeSystemDefinition,@@ -6,12 +8,14 @@   ) where -import Control.Monad ((>=>))+import Data.ByteString.Lazy (ByteString)+import Data.Morpheus.Ext.SemigroupM ((<:>)) import qualified Data.Morpheus.Parsing.Document.TypeSystem as P   ( parseSchema,     parseTypeDefinitions,   ) import Data.Morpheus.Parsing.Request.Parser (parseGQL)+import Data.Morpheus.Schema.Schema (internalSchema) import Data.Morpheus.Types.IO   ( GQLRequest (..),   )@@ -37,10 +41,10 @@ import Data.Morpheus.Validation.Query.Validation   ( validateRequest,   )-import Data.Text (Text)+import Relude hiding (ByteString)  parseTypeSystemDefinition ::-  Text -> Eventless (Schema VALID)+  ByteString -> Eventless (Schema VALID) parseTypeSystemDefinition =   P.parseSchema     >=> validateSchema@@ -51,11 +55,14 @@         }  parseTypeDefinitions ::-  Text -> Eventless [TypeDefinition ANY CONST]+  ByteString -> Eventless [TypeDefinition ANY CONST] parseTypeDefinitions = P.parseTypeDefinitions  parseRequest :: GQLRequest -> Eventless GQLQuery parseRequest = parseGQL  parseRequestWith :: Config -> Schema VALID -> GQLRequest -> Eventless (Operation VALID)-parseRequestWith config schema = parseRequest >=> validateRequest config schema+parseRequestWith config schema req = do+  qu <- parseRequest req+  fuillSchema <- internalSchema <:> schema+  validateRequest config fuillSchema qu
src/Data/Morpheus/Parsing/Document/TypeSystem.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GADTs #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-}@@ -10,13 +11,7 @@   ) where --- MORPHEUS--import Control.Applicative ((*>), pure)-import Control.Monad ((>=>))-import Data.Foldable (foldr)-import Data.Functor ((<$>), fmap)-import Data.Maybe (Maybe (..))+import Data.ByteString.Lazy (ByteString) import Data.Morpheus.Error.NameCollision (NameCollision (..)) import Data.Morpheus.Parsing.Internal.Internal   ( Parser,@@ -33,7 +28,10 @@     typeDeclaration,   ) import Data.Morpheus.Parsing.Internal.Terms-  ( collection,+  ( at,+    collection,+    colon,+    equal,     ignoredTokens,     keyword,     optDescription,@@ -43,7 +41,6 @@     pipe,     sepByAnd,     setOf,-    symbol,   ) import Data.Morpheus.Parsing.Internal.Value   ( Parse (..),@@ -51,41 +48,51 @@ import Data.Morpheus.Types.Internal.AST   ( ANY,     CONST,-    DataFingerprint (..),     Description,     DirectiveDefinition (..),-    IN,+    Directives,+    ELEM,+    FieldsDefinition,+    OBJECT,     OUT,     RawTypeDefinition (..),     RootOperationTypeDefinition (..),     ScalarDefinition (..),     Schema,     SchemaDefinition (..),+    TRUE,     TypeContent (..),     TypeDefinition (..),     TypeName,     Value,     buildSchema,     mkUnionMember,-    toAny,   ) import Data.Morpheus.Types.Internal.Resolving   ( Eventless,     failure,   )-import Data.Text (Text)+import Relude hiding (ByteString) import Text.Megaparsec-  ( (<|>),-    eof,+  ( eof,     label,     manyTill,-    optional,   )-import Prelude-  ( ($),-    (.),-  ) +mkObject ::+  (ELEM OBJECT a ~ TRUE) =>+  Maybe Description ->+  TypeName ->+  [TypeName] ->+  Directives s ->+  FieldsDefinition OUT s ->+  TypeDefinition a s+mkObject typeDescription typeName objectImplements typeDirectives objectFields =+  TypeDefinition+    { typeContent = DataObject {objectImplements, objectFields},+      ..+    }+ -- Scalars : https://graphql.github.io/graphql-spec/June2018/#sec-Scalars -- --  ScalarTypeDefinition:@@ -95,15 +102,12 @@   Parse (Value s) =>   Maybe Description ->   Parser (TypeDefinition ANY s)-scalarTypeDefinition typeDescription = label "ScalarTypeDefinition" $ do-  typeName <- typeDeclaration "scalar"-  typeDirectives <- optionalDirectives-  pure-    TypeDefinition-      { typeFingerprint = DataFingerprint typeName [],-        typeContent = DataScalar $ ScalarDefinition pure,-        ..-      }+scalarTypeDefinition typeDescription =+  label "ScalarTypeDefinition" $+    TypeDefinition typeDescription+      <$> typeDeclaration "scalar"+      <*> optionalDirectives+      <*> pure (DataScalar (ScalarDefinition pure))  -- Objects : https://graphql.github.io/graphql-spec/June2018/#sec-Objects --@@ -123,20 +127,17 @@ objectTypeDefinition ::   Parse (Value s) =>   Maybe Description ->-  Parser (TypeDefinition OUT s)-objectTypeDefinition typeDescription = label "ObjectTypeDefinition" $ do-  typeName <- typeDeclaration "type"-  objectImplements <- optionalImplementsInterfaces-  typeDirectives <- optionalDirectives-  objectFields <- fieldsDefinition-  -- build object-  pure-    TypeDefinition-      { typeFingerprint = DataFingerprint typeName [],-        typeContent = DataObject {objectImplements, objectFields},-        ..-      }+  Parser (TypeDefinition ANY s)+objectTypeDefinition typeDescription =+  label "ObjectTypeDefinition" $+    mkObject typeDescription+      <$> typeDeclaration "type"+      <*> optionalImplementsInterfaces+      <*> optionalDirectives+      <*> fieldsDefinition +-- build object+ optionalImplementsInterfaces :: Parser [TypeName] optionalImplementsInterfaces = implements <|> pure []   where@@ -151,16 +152,13 @@ interfaceTypeDefinition ::   Parse (Value s) =>   Maybe Description ->-  Parser (TypeDefinition OUT s)-interfaceTypeDefinition typeDescription = label "InterfaceTypeDefinition" $ do-  typeName <- typeDeclaration "interface"-  typeDirectives <- optionalDirectives-  typeContent <- DataInterface <$> fieldsDefinition-  pure-    TypeDefinition-      { typeFingerprint = DataFingerprint typeName [],-        ..-      }+  Parser (TypeDefinition ANY s)+interfaceTypeDefinition typeDescription =+  label "InterfaceTypeDefinition" $+    TypeDefinition typeDescription+      <$> typeDeclaration "interface"+      <*> optionalDirectives+      <*> (DataInterface <$> fieldsDefinition)  -- Unions : https://graphql.github.io/graphql-spec/June2018/#sec-Unions --@@ -174,19 +172,16 @@ unionTypeDefinition ::   Parse (Value s) =>   Maybe Description ->-  Parser (TypeDefinition OUT s)-unionTypeDefinition typeDescription = label "UnionTypeDefinition" $ do-  typeName <- typeDeclaration "union"-  typeDirectives <- optionalDirectives-  typeContent <- DataUnion <$> unionMemberTypes-  pure-    TypeDefinition-      { typeFingerprint = DataFingerprint typeName [],-        ..-      }+  Parser (TypeDefinition ANY s)+unionTypeDefinition typeDescription =+  label "UnionTypeDefinition" $+    TypeDefinition typeDescription+      <$> typeDeclaration "union"+      <*> optionalDirectives+      <*> (DataUnion <$> unionMemberTypes)   where     unionMemberTypes =-      symbol '='+      equal         *> pipe (mkUnionMember <$> parseTypeName)  -- Enums : https://graphql.github.io/graphql-spec/June2018/#sec-Enums@@ -204,15 +199,12 @@   Parse (Value s) =>   Maybe Description ->   Parser (TypeDefinition ANY s)-enumTypeDefinition typeDescription = label "EnumTypeDefinition" $ do-  typeName <- typeDeclaration "enum"-  typeDirectives <- optionalDirectives-  typeContent <- DataEnum <$> collection enumValueDefinition-  pure-    TypeDefinition-      { typeFingerprint = DataFingerprint typeName [],-        ..-      }+enumTypeDefinition typeDescription =+  label "EnumTypeDefinition" $+    TypeDefinition typeDescription+      <$> typeDeclaration "enum"+      <*> optionalDirectives+      <*> (DataEnum <$> collection enumValueDefinition)  -- Input Objects : https://graphql.github.io/graphql-spec/June2018/#sec-Input-Objects --@@ -225,18 +217,14 @@ inputObjectTypeDefinition ::   Parse (Value s) =>   Maybe Description ->-  Parser (TypeDefinition IN s)+  Parser (TypeDefinition ANY s) inputObjectTypeDefinition typeDescription =-  label "InputObjectTypeDefinition" $ do-    typeName <- typeDeclaration "input"-    typeDirectives <- optionalDirectives-    typeContent <- DataInputObject <$> inputFieldsDefinition-    -- build input-    pure-      TypeDefinition-        { typeFingerprint = DataFingerprint typeName [],-          ..-        }+  label "InputObjectTypeDefinition" $+    TypeDefinition+      typeDescription+      <$> typeDeclaration "input"+      <*> optionalDirectives+      <*> (DataInputObject <$> inputFieldsDefinition)  -- 3.13 DirectiveDefinition --@@ -246,26 +234,20 @@ --  DirectiveLocations: --    DirectiveLocations | DirectiveLocation --    |[opt] DirectiveLocation- parseDirectiveDefinition ::+  Parse (Value s) =>   Maybe Description ->-  Parser RawTypeDefinition-parseDirectiveDefinition directiveDefinitionDescription = label "DirectiveDefinition" $ do-  keyword "directive"-  symbol '@'-  directiveDefinitionName <- parseName-  directiveDefinitionArgs <- optionalCollection argumentsDefinition-  _ <- optional (keyword "repeatable")-  keyword "on"-  directiveDefinitionLocations <- pipe parseDirectiveLocation-  pure-    $ RawDirectiveDefinition-    $ DirectiveDefinition-      { directiveDefinitionName,-        directiveDefinitionDescription,-        directiveDefinitionLocations,-        directiveDefinitionArgs-      }+  Parser (DirectiveDefinition s)+parseDirectiveDefinition directiveDefinitionDescription =+  label "DirectiveDefinition" $+    DirectiveDefinition+      <$> ( keyword "directive"+              *> at+              *> parseName+          )+        <*> pure directiveDefinitionDescription+        <*> optionalCollection argumentsDefinition+        <*> (optional (keyword "repeatable") *> keyword "on" *> pipe parseDirectiveLocation)  -- 3.2 Schema -- SchemaDefinition:@@ -280,21 +262,20 @@ --     mutation :: Maybe TypeName, --     subscription :: Maybe TypeName --   }--parseSchemaDefinition :: Maybe Description -> Parser RawTypeDefinition-parseSchemaDefinition _schemaDescription = label "SchemaDefinition" $ do-  keyword "schema"-  schemaDirectives <- optionalDirectives-  unSchemaDefinition <- setOf parseRootOperationTypeDefinition-  pure-    $ RawSchemaDefinition-    $ SchemaDefinition {schemaDirectives, unSchemaDefinition}+parseSchemaDefinition :: Maybe Description -> Parser SchemaDefinition+parseSchemaDefinition _schemaDescription =+  label "SchemaDefinition" $+    keyword "schema"+      *> ( SchemaDefinition+             <$> optionalDirectives+             <*> setOf parseRootOperationTypeDefinition+         )  parseRootOperationTypeDefinition :: Parser RootOperationTypeDefinition-parseRootOperationTypeDefinition = do-  operationType <- parseOperationType-  symbol ':'-  RootOperationTypeDefinition operationType <$> parseTypeName+parseRootOperationTypeDefinition =+  RootOperationTypeDefinition+    <$> (parseOperationType <* colon)+    <*> parseTypeName  parseTypeSystemUnit ::   Parser RawTypeDefinition@@ -303,18 +284,18 @@     do       description <- optDescription       -- scalar | enum |  input | object | union | interface-      types description-        <|> parseSchemaDefinition description-        <|> parseDirectiveDefinition description+      parseTypeDef description+        <|> RawSchemaDefinition <$> parseSchemaDefinition description+        <|> RawDirectiveDefinition <$> parseDirectiveDefinition description   where-    types description =+    parseTypeDef description =       RawTypeDefinition-        <$> ( (toAny <$> inputObjectTypeDefinition description)-                <|> (toAny <$> unionTypeDefinition description)+        <$> ( objectTypeDefinition description+                <|> inputObjectTypeDefinition description+                <|> interfaceTypeDefinition description+                <|> unionTypeDefinition description                 <|> enumTypeDefinition description                 <|> scalarTypeDefinition description-                <|> (toAny <$> objectTypeDefinition description)-                <|> (toAny <$> interfaceTypeDefinition description)             )  typePartition ::@@ -353,12 +334,13 @@ withSchemaDefinition (_ : xs, _, _) = failure (fmap nameCollision xs)  parseTypeSystemDefinition :: Parser [RawTypeDefinition]-parseTypeSystemDefinition = label "TypeSystemDefinitions" $ do-  ignoredTokens-  manyTill parseTypeSystemUnit eof+parseTypeSystemDefinition =+  label "TypeSystemDefinitions" $+    ignoredTokens+      *> manyTill parseTypeSystemUnit eof  typeSystemDefinition ::-  Text ->+  ByteString ->   Eventless     ( Maybe SchemaDefinition,       [TypeDefinition ANY CONST],@@ -368,14 +350,14 @@   processParser parseTypeSystemDefinition     >=> withSchemaDefinition . typePartition -parseTypeDefinitions :: Text -> Eventless [TypeDefinition ANY CONST]+parseTypeDefinitions :: ByteString -> Eventless [TypeDefinition ANY CONST] parseTypeDefinitions = fmap snd3 . typeSystemDefinition  snd3 :: (a, b, c) -> b snd3 (_, x, _) = x  parseSchema ::-  Text ->+  ByteString ->   Eventless (Schema CONST) parseSchema =   typeSystemDefinition
src/Data/Morpheus/Parsing/Internal/Arguments.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Parsing.Internal.Arguments (maybeArguments) where @@ -9,8 +9,7 @@     getLocation,   ) import Data.Morpheus.Parsing.Internal.Terms-  ( parseAssignment,-    parseName,+  ( fieldNameColon,     uniqTupleOpt,   ) import Data.Morpheus.Parsing.Internal.Value@@ -21,6 +20,7 @@     Arguments,     Value,   )+import Relude import Text.Megaparsec (label)  -- Arguments : https://graphql.github.io/graphql-spec/June2018/#sec-Language.Arguments@@ -32,10 +32,11 @@ --  Name : Value[Const] valueArgument :: Parse (Value s) => Parser (Argument s) valueArgument =-  label "Argument" $ do-    argumentPosition <- getLocation-    (argumentName, argumentValue) <- parseAssignment parseName parse-    pure $ Argument {argumentName, argumentValue, argumentPosition}+  label "Argument" $+    Argument+      <$> getLocation+      <*> fieldNameColon+      <*> parse  maybeArguments :: Parse (Value s) => Parser (Arguments s) maybeArguments =
src/Data/Morpheus/Parsing/Internal/Internal.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Parsing.Internal.Internal   ( Parser,@@ -8,6 +9,7 @@   ) where +import Data.ByteString.Lazy (ByteString) import qualified Data.List.NonEmpty as NonEmpty import Data.Morpheus.Types.Internal.AST   ( GQLError (..),@@ -20,10 +22,15 @@     Result (..),     failure,   )-import Data.Text-  ( Text,+import Relude+  ( ($),+    (.),+    Applicative (..),+    Either (..),+    Functor (..),+    Void,+    fst,   )-import Data.Void (Void) import Text.Megaparsec   ( ParseError,     ParseErrorBundle@@ -51,11 +58,11 @@  type MyError = Void -type Parser = ParsecT MyError Text Eventless+type Parser = ParsecT MyError ByteString Eventless -type ErrorBundle = ParseErrorBundle Text MyError+type ErrorBundle = ParseErrorBundle ByteString MyError -processParser :: Parser a -> Text -> Eventless a+processParser :: Parser a -> ByteString -> Eventless a processParser parser txt = case runParserT parser [] txt of   Success {result} -> case result of     Right root -> pure root@@ -63,19 +70,20 @@   Failure {errors} -> failure errors  processErrorBundle :: ErrorBundle -> GQLErrors-processErrorBundle = map parseErrorToGQLError . bundleToErrors-  where-    parseErrorToGQLError :: (ParseError Text MyError, SourcePos) -> GQLError-    parseErrorToGQLError (err, position) =-      GQLError-        { message = msg (parseErrorPretty err),-          locations = [toLocation position]-        }-    bundleToErrors ::-      ErrorBundle -> [(ParseError Text MyError, SourcePos)]-    bundleToErrors ParseErrorBundle {bundleErrors, bundlePosState} =-      NonEmpty.toList $ fst $-        attachSourcePos-          errorOffset-          bundleErrors-          bundlePosState+processErrorBundle = fmap parseErrorToGQLError . bundleToErrors++parseErrorToGQLError :: (ParseError ByteString MyError, SourcePos) -> GQLError+parseErrorToGQLError (err, position) =+  GQLError+    { message = msg (parseErrorPretty err),+      locations = [toLocation position]+    }++bundleToErrors ::+  ErrorBundle -> [(ParseError ByteString MyError, SourcePos)]+bundleToErrors ParseErrorBundle {bundleErrors, bundlePosState} =+  NonEmpty.toList $ fst $+    attachSourcePos+      errorOffset+      bundleErrors+      bundlePosState
src/Data/Morpheus/Parsing/Internal/Pattern.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Parsing.Internal.Pattern   ( inputValueDefinition,@@ -15,8 +16,6 @@   ) where -import Data.Functor (($>))--- MORPHEUS import Data.Morpheus.Parsing.Internal.Arguments   ( maybeArguments,   )@@ -25,14 +24,15 @@     getLocation,   ) import Data.Morpheus.Parsing.Internal.Terms-  ( ignoredTokens,+  ( at,+    colon,+    ignoredTokens,     keyword,     optDescription,     parseName,     parseType,     parseTypeName,     setOf,-    symbol,     uniqTuple,   ) import Data.Morpheus.Parsing.Internal.Value@@ -42,6 +42,7 @@ import Data.Morpheus.Types.Internal.AST   ( ArgumentsDefinition (..),     DataEnumValue (..),+    Description,     Directive (..),     DirectiveLocation (..),     FieldContent (..),@@ -52,18 +53,18 @@     InputFieldsDefinition,     OUT,     OperationType (..),+    TRUE,     TypeName,+    TypeRef,     Value,   )-import Data.Text (pack)+import Relude hiding (many) import Text.Megaparsec-  ( (<|>),-    choice,+  ( choice,     label,     many,-    optional,   )-import Text.Megaparsec.Char (string)+import Text.Megaparsec.Byte (string)  --  EnumValueDefinition: https://graphql.github.io/graphql-spec/June2018/#EnumValueDefinition --@@ -73,11 +74,12 @@ enumValueDefinition ::   Parse (Value s) =>   Parser (DataEnumValue s)-enumValueDefinition = label "EnumValueDefinition" $ do-  enumDescription <- optDescription-  enumName <- parseTypeName-  enumDirectives <- optionalDirectives-  return DataEnumValue {..}+enumValueDefinition =+  label "EnumValueDefinition" $+    DataEnumValue+      <$> optDescription+      <*> parseTypeName+      <*> optionalDirectives  -- InputValue : https://graphql.github.io/graphql-spec/June2018/#InputValueDefinition --@@ -87,14 +89,14 @@ inputValueDefinition ::   Parse (Value s) =>   Parser (FieldDefinition IN s)-inputValueDefinition = label "InputValueDefinition" $ do-  fieldDescription <- optDescription-  fieldName <- parseName-  symbol ':'-  fieldType <- parseType-  fieldContent <- optional (DefaultInputValue <$> parseDefaultValue)-  fieldDirectives <- optionalDirectives-  pure FieldDefinition {..}+inputValueDefinition =+  label "InputValueDefinition" $+    FieldDefinition+      <$> optDescription+      <*> parseName+      <*> (colon *> parseType)+      <*> optional (DefaultInputValue <$> parseDefaultValue)+      <*> optionalDirectives  -- Field Arguments: https://graphql.github.io/graphql-spec/June2018/#sec-Field-Arguments --@@ -122,15 +124,25 @@ --    Description(opt) Name ArgumentsDefinition(opt) : Type Directives(Const)(opt) -- fieldDefinition :: Parse (Value s) => Parser (FieldDefinition OUT s)-fieldDefinition = label "FieldDefinition" $ do-  fieldDescription <- optDescription-  fieldName <- parseName-  fieldContent <- optional (FieldArgs <$> argumentsDefinition)-  symbol ':'-  fieldType <- parseType-  fieldDirectives <- optionalDirectives-  pure FieldDefinition {..}+fieldDefinition =+  label "FieldDefinition" $+    mkField+      <$> optDescription+      <*> parseName+      <*> optional (FieldArgs <$> argumentsDefinition)+      <*> (colon *> parseType)+      <*> optionalDirectives +mkField ::+  Maybe Description ->+  FieldName ->+  Maybe (FieldContent TRUE cat s) ->+  TypeRef ->+  [Directive s] ->+  FieldDefinition cat s+mkField fieldDescription fieldName fieldContent fieldType fieldDirectives =+  FieldDefinition {..}+ -- InputFieldsDefinition : https://graphql.github.io/graphql-spec/June2018/#sec-Language.Directives --   InputFieldsDefinition: --     { InputValueDefinition(list) }@@ -154,12 +166,12 @@ -- -- @ Name Arguments[Const](opt) directive :: Parse (Value s) => Parser (Directive s)-directive = label "Directive" $ do-  directivePosition <- getLocation-  symbol '@'-  directiveName <- parseName-  directiveArgs <- maybeArguments-  pure Directive {..}+directive =+  label "Directive" $+    Directive+      <$> getLocation+      <*> (at *> parseName)+      <*> maybeArguments  -- typDeclaration : Not in spec ,start part of type definitions --@@ -167,18 +179,16 @@ --   Description(opt) scalar Name -- typeDeclaration :: FieldName -> Parser TypeName-typeDeclaration kind = do-  keyword kind-  parseTypeName+typeDeclaration kind = keyword kind *> parseTypeName  parseOperationType :: Parser OperationType-parseOperationType = label "OperationType" $ do-  kind <--    (string "query" $> Query)-      <|> (string "mutation" $> Mutation)-      <|> (string "subscription" $> Subscription)-  ignoredTokens-  return kind+parseOperationType =+  label "OperationType" $+    ( (string "query" $> Query)+        <|> (string "mutation" $> Mutation)+        <|> (string "subscription" $> Subscription)+    )+      <* ignoredTokens  parseDirectiveLocation :: Parser DirectiveLocation parseDirectiveLocation =@@ -209,4 +219,4 @@     <* ignoredTokens  toKeyword :: Show a => a -> Parser a-toKeyword x = string (pack $ show x) $> x+toKeyword x = string (fromString $ show x) $> x
src/Data/Morpheus/Parsing/Internal/Terms.hs view
@@ -1,13 +1,15 @@+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TupleSections #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Parsing.Internal.Terms   ( name,     variable,+    varName,     ignoredTokens,     parseString,-    -------------     collection,     setOf,     uniqTuple,@@ -15,7 +17,6 @@     parseTypeCondition,     spreadLiteral,     parseNonNull,-    parseAssignment,     parseWrappedType,     parseAlias,     sepByAnd,@@ -28,19 +29,26 @@     parseNegativeSign,     parseTypeName,     pipe,+    fieldNameColon,+    brackets,+    equal,+    comma,+    colon,+    at,   ) where -import Control.Monad ((>=>))--- MORPHEUS-import Control.Monad.Trans (lift)-import Data.Functor (($>))+import Data.ByteString.Lazy+  ( pack,+  ) import Data.Morpheus.Internal.Utils   ( Collection,+    FromElems (..),     KeyOf,-    Listable (..),     empty,     fromElems,+    fromLBS,+    toLBS,   ) import Data.Morpheus.Parsing.Internal.Internal   ( Parser,@@ -57,26 +65,25 @@     TypeRef (..),     toHSWrappers,   )+import Data.Morpheus.Types.Internal.Resolving (Eventless) import Data.Text-  ( pack,-    strip,+  ( strip,   )+import Relude hiding (empty, many) import Text.Megaparsec   ( (<?>),-    (<|>),     between,     choice,     label,     many,     manyTill,-    optional,     sepBy,     sepBy1,     sepEndBy,     skipManyTill,     try,   )-import Text.Megaparsec.Char+import Text.Megaparsec.Byte   ( char,     digitChar,     letterChar,@@ -88,7 +95,7 @@   )  parseNegativeSign :: Parser Bool-parseNegativeSign = (char '-' $> True <* ignoredTokens) <|> pure False+parseNegativeSign = (minus $> True <* ignoredTokens) <|> pure False  parseName :: Parser FieldName parseName = FieldName <$> name@@ -97,18 +104,57 @@ parseTypeName = label "TypeName" $ TypeName <$> name  keyword :: FieldName -> Parser ()-keyword (FieldName word) = string word *> space1 *> ignoredTokens+keyword (FieldName word) = string (toLBS word) *> space1 *> ignoredTokens -symbol :: Char -> Parser ()+symbol :: Word8 -> Parser () symbol x = char x *> ignoredTokens --- LITERALS-braces :: Parser [a] -> Parser [a]-braces =-  between-    (char '{' *> ignoredTokens)-    (char '}' *> ignoredTokens)+-- braces: {}+braces :: Parser a -> Parser a+braces = between (symbol 123) (symbol 125) +-- brackets: []+brackets :: Parser a -> Parser a+brackets = between (symbol 91) (symbol 93)++-- parens : '()'+parens :: Parser a -> Parser a+parens = between (symbol 40) (symbol 41)++-- underscore : '_'+underscore :: Parser Word8+underscore = char 95++comma :: Parser ()+comma = label "," $ char 44 *> space++-- dollar :: $+dollar :: Parser ()+dollar = label "$" $ symbol 36++-- equal :: '='+equal :: Parser ()+equal = label "=" $ symbol 61++-- colon :: ':'+colon :: Parser ()+colon = label ":" $ symbol 58++-- minus: '-'+minus :: Parser ()+minus = label "-" $ symbol 45++-- verticalPipe: '|'+verticalPipe :: Parser ()+verticalPipe = label "|" $ symbol 124++ampersand :: Parser ()+ampersand = label "&" $ symbol 38++-- at: '@'+at :: Parser ()+at = label "@" $ symbol 64+ -- PRIMITIVE ------------------------------------ @@ -118,35 +164,37 @@ --  NameStart NameContinue[list,opt] -- name :: Parser Token-name = label "Name" $ do-  start <- nameStart-  continue <- nameContinue-  ignoredTokens-  pure $ pack (start : continue)+name =+  label "Name" $+    fromLBS . pack+      <$> ((:) <$> nameStart <*> nameContinue)+      <* ignoredTokens  -- NameStart:: --   Letter --   _-nameStart :: Parser Char-nameStart = letterChar <|> char '_'+nameStart :: Parser Word8+nameStart = letterChar <|> underscore  --  NameContinue:: --   Letter --   Digit-nameContinue :: Parser String-nameContinue = many (letterChar <|> char '_' <|> digitChar)+nameContinue :: Parser [Word8]+nameContinue = many (letterChar <|> underscore <|> digitChar) +varName :: Parser FieldName+varName = dollar *> parseName <* ignoredTokens+ -- Variable : https://graphql.github.io/graphql-spec/June2018/#Variable -- -- Variable :  $Name -- variable :: Parser Ref-variable = label "variable" $ do-  refPosition <- getLocation-  _ <- char '$'-  refName <- parseName-  ignoredTokens-  pure $ Ref {refName, refPosition}+variable =+  label "variable" $+    flip Ref+      <$> getLocation+      <*> varName  -- Descriptions: https://graphql.github.io/graphql-spec/June2018/#Description --@@ -165,39 +213,39 @@ blockString = stringWith (string "\"\"\"") (printChar <|> newline)  singleLineString :: Parser Token-singleLineString = stringWith (char '"') escapedChar+singleLineString = stringWith (string "\"") escapedChar -stringWith :: Parser quote -> Parser Char -> Parser Token+stringWith :: Parser quote -> Parser Word8 -> Parser Token stringWith quote parser =-  pack+  fromLBS . pack     <$> ( quote             *> manyTill parser quote             <* ignoredTokens         ) -escapedChar :: Parser Char+escapedChar :: Parser Word8 escapedChar = label "EscapedChar" $ printChar >>= handleEscape -handleEscape :: Char -> Parser Char-handleEscape '\\' = choice escape+handleEscape :: Word8 -> Parser Word8+handleEscape 92 = choice escape handleEscape x = pure x -escape :: [Parser Char]-escape = map escapeCh escapeOptions+escape :: [Parser Word8]+escape = escapeCh <$> escapeOptions   where-    escapeCh :: (Char, Char) -> Parser Char+    escapeCh :: (Word8, Word8) -> Parser Word8     escapeCh (code, replacement) = char code $> replacement -escapeOptions :: [(Char, Char)]+escapeOptions :: [(Word8, Word8)] escapeOptions =-  [ ('b', '\b'),-    ('n', '\n'),-    ('f', '\f'),-    ('r', '\r'),-    ('t', '\t'),-    ('\\', '\\'),-    ('\"', '\"'),-    ('/', '/')+  [ (98, 8),+    (110, 10),+    (102, 12),+    (114, 13),+    (116, 9),+    (92, 92),+    (34, 34),+    (47, 47)   ]  -- Ignored Tokens : https://graphql.github.io/graphql-spec/June2018/#sec-Source-Text.Ignored-Tokens@@ -215,61 +263,56 @@       *> space  ignored :: Parser ()-ignored =-  label "Ignored" $-    comment-      <|> comma+ignored = label "Ignored" (comment <|> comma)  comment :: Parser () comment =   label "Comment" $-    char '#' *> skipManyTill printChar newline *> space+    octothorpe *> skipManyTill printChar newline *> space -comma :: Parser ()-comma = label "Comma" $ char ',' *> space+-- exclamationMark: '!'+exclamationMark :: Parser ()+exclamationMark = label "!" $symbol 33 +-- octothorpe: '#'+octothorpe :: Parser ()+octothorpe = label "#" $ char 35 $> ()+ ------------------------------------------------------------------------  sepByAnd :: Parser a -> Parser [a]-sepByAnd entry = entry `sepBy` (optional (symbol '&') *> ignoredTokens)+sepByAnd entry = entry `sepBy` (optional ampersand *> ignoredTokens)  pipe :: Parser a -> Parser [a]-pipe x = optional (symbol '|') *> (x `sepBy1` symbol '|')+pipe x = optional verticalPipe *> (x `sepBy1` verticalPipe)  ----------------------------- collection :: Parser a -> Parser [a] collection entry = braces (entry `sepEndBy` ignoredTokens) -setOf :: (Listable a coll, KeyOf k a) => Parser a -> Parser coll+setOf :: (FromElems Eventless a coll, KeyOf k a) => Parser a -> Parser coll setOf = collection >=> lift . fromElems  optionalCollection :: Collection a c => Parser c -> Parser c optionalCollection x = x <|> pure empty  parseNonNull :: Parser [DataTypeWrapper]-parseNonNull = do-  wrapper <- (char '!' $> [NonNullType]) <|> pure []-  ignoredTokens-  return wrapper+parseNonNull =+  (exclamationMark $> [NonNullType])+    <|> pure [] -uniqTuple :: (Listable a coll, KeyOf k a) => Parser a -> Parser coll+uniqTuple :: (FromElems Eventless a coll, KeyOf k a) => Parser a -> Parser coll uniqTuple parser =   label "Tuple" $-    between-      (char '(' *> ignoredTokens)-      (char ')' *> ignoredTokens)+    parens       (parser `sepBy` ignoredTokens <?> "empty Tuple value!")       >>= lift . fromElems -uniqTupleOpt :: (Listable a coll, Collection a coll, KeyOf k a) => Parser a -> Parser coll+uniqTupleOpt :: (FromElems Eventless a coll, Collection a coll, KeyOf k a) => Parser a -> Parser coll uniqTupleOpt x = uniqTuple x <|> pure empty -parseAssignment :: (Show a, Show b) => Parser a -> Parser b -> Parser (a, b)-parseAssignment nameParser valueParser = label "assignment" $ do-  name' <- nameParser-  symbol ':'-  value' <- valueParser-  pure (name', value')+fieldNameColon :: Parser FieldName+fieldNameColon = parseName <* colon  -- Type Conditions: https://graphql.github.io/graphql-spec/June2018/#sec-Type-Conditions --@@ -277,16 +320,10 @@ --    on NamedType -- parseTypeCondition :: Parser TypeName-parseTypeCondition = do-  keyword "on"-  parseTypeName+parseTypeCondition = keyword "on" *> parseTypeName  spreadLiteral :: Parser Position-spreadLiteral = do-  index <- getLocation-  _ <- string "..."-  space-  return index+spreadLiteral = getLocation <* string "..." <* space  -- Field Alias : https://graphql.github.io/graphql-spec/June2018/#sec-Field-Alias -- Alias@@ -294,19 +331,19 @@ parseAlias :: Parser (Maybe FieldName) parseAlias = try (optional alias) <|> pure Nothing   where-    alias = label "alias" $ parseName <* char ':' <* ignoredTokens+    alias = label "alias" fieldNameColon  parseType :: Parser TypeRef-parseType = do-  (wrappers, typeConName) <- parseWrappedType-  nonNull <- parseNonNull-  pure-    TypeRef-      { typeConName,-        typeArgs = Nothing,-        typeWrappers = toHSWrappers $ nonNull ++ wrappers-      }+parseType = parseTypeW <$> parseWrappedType <*> parseNonNull +parseTypeW :: ([DataTypeWrapper], TypeName) -> [DataTypeWrapper] -> TypeRef+parseTypeW (wrappers, typeConName) nonNull =+  TypeRef+    { typeConName,+      typeArgs = Nothing,+      typeWrappers = toHSWrappers (nonNull <> wrappers)+    }+ parseWrappedType :: Parser ([DataTypeWrapper], TypeName) parseWrappedType = (unwrapped <|> wrapped) <* ignoredTokens   where@@ -314,12 +351,7 @@     unwrapped = ([],) <$> parseTypeName <* ignoredTokens     ----------------------------------------------     wrapped :: Parser ([DataTypeWrapper], TypeName)-    wrapped =-      between-        (char '[' *> ignoredTokens)-        (char ']' *> ignoredTokens)-        ( do-            (wrappers, tName) <- unwrapped <|> wrapped-            nonNull' <- parseNonNull-            return ((ListType : nonNull') ++ wrappers, tName)-        )+    wrapped = brackets (wrapAsList <$> (unwrapped <|> wrapped) <*> parseNonNull)++wrapAsList :: ([DataTypeWrapper], TypeName) -> [DataTypeWrapper] -> ([DataTypeWrapper], TypeName)+wrapAsList (wrappers, tName) nonNull = (ListType : nonNull <> wrappers, tName)
src/Data/Morpheus/Parsing/Internal/Value.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Parsing.Internal.Value   ( enumValue,@@ -10,21 +10,18 @@   ) where -import Data.Functor (($>))------ MORPHEUS import Data.Morpheus.Parsing.Internal.Internal   ( Parser,   ) import Data.Morpheus.Parsing.Internal.Terms-  ( ignoredTokens,-    parseAssignment,-    parseName,+  ( brackets,+    equal,+    fieldNameColon,+    ignoredTokens,     parseNegativeSign,     parseString,     parseTypeName,     setOf,-    symbol,     variable,   ) import Data.Morpheus.Types.Internal.AST@@ -37,18 +34,15 @@     Value (..),     decodeScientific,   )+import Relude import Text.Megaparsec-  ( (<|>),-    between,-    label,-    many,+  ( label,     sepBy,   )-import Text.Megaparsec.Char-  ( char,-    string,+import Text.Megaparsec.Byte+  ( string,   )-import Text.Megaparsec.Char.Lexer (scientific)+import Text.Megaparsec.Byte.Lexer (scientific)  valueNull :: Parser (Value a) valueNull = string "null" $> Null@@ -60,35 +54,27 @@     boolFalse = string "false" $> Scalar (Boolean False)  valueNumber :: Parser (Value a)-valueNumber = do-  isNegative <- parseNegativeSign-  Scalar . decodeScientific . signedNumber isNegative <$> scientific+valueNumber =+  Scalar . decodeScientific+    <$> (signedNumber <$> parseNegativeSign <*> scientific)   where     signedNumber isNegative number       | isNegative = - number       | otherwise = number  enumValue :: Parser (Value a)-enumValue = do-  enum <- Enum <$> parseTypeName-  ignoredTokens-  return enum+enumValue = Enum <$> parseTypeName <* ignoredTokens  stringValue :: Parser (Value a) stringValue = label "stringValue" $ Scalar . String <$> parseString  listValue :: Parser a -> Parser [a]-listValue parser =-  label "ListValue" $-    between-      (char '[' *> ignoredTokens)-      (char ']' *> ignoredTokens)-      (parser `sepBy` (many (char ',') *> ignoredTokens))+listValue parser = label "list" $ brackets (parser `sepBy` ignoredTokens)  objectEntry :: Parser (Value a) -> Parser (ObjectEntry a)-objectEntry parser = label "ObjectEntry" $ do-  (entryName, entryValue) <- parseAssignment parseName parser-  pure ObjectEntry {entryName, entryValue}+objectEntry parser =+  label "ObjectEntry" $+    ObjectEntry <$> fieldNameColon <*> parser  objectValue :: Parser (Value a) -> Parser (OrdMap FieldName (ObjectEntry a)) objectValue = label "ObjectValue" . setOf . objectEntry@@ -98,9 +84,7 @@   valueNull <|> booleanValue <|> valueNumber <|> enumValue <|> stringValue  parseDefaultValue :: Parser (Value s)-parseDefaultValue = do-  symbol '='-  parseV+parseDefaultValue = equal *> parseV   where     parseV :: Parser (Value s)     parseV = structValue parseV
src/Data/Morpheus/Parsing/Request/Operation.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Parsing.Request.Operation   ( parseOperation,@@ -18,11 +19,11 @@     parseOperationType,   ) import Data.Morpheus.Parsing.Internal.Terms-  ( parseName,+  ( colon,+    parseName,     parseType,-    symbol,     uniqTupleOpt,-    variable,+    varName,   ) import Data.Morpheus.Parsing.Internal.Value   ( parseDefaultValue,@@ -34,15 +35,13 @@   ( Operation (..),     OperationType (..),     RAW,-    Ref (..),     Variable (..),     VariableContent (..),   )+import Relude hiding (empty) import Text.Megaparsec   ( (<?>),-    (<|>),     label,-    optional,   )  -- Variables :  https://graphql.github.io/graphql-spec/June2018/#VariableDefinition@@ -51,12 +50,13 @@ --    Variable : Type DefaultValue(opt) -- variableDefinition :: Parser (Variable RAW)-variableDefinition = label "VariableDefinition" $ do-  (Ref variableName variablePosition) <- variable-  symbol ':'-  variableType <- parseType-  variableValue <- DefaultValue <$> optional parseDefaultValue-  pure Variable {..}+variableDefinition =+  label "VariableDefinition" $+    Variable+      <$> getLocation+      <*> (varName <* colon)+      <*> parseType+      <*> (DefaultValue <$> optional parseDefaultValue)  -- Operations : https://graphql.github.io/graphql-spec/June2018/#sec-Language.Operations --@@ -66,14 +66,15 @@ --   OperationType: one of --     query, mutation,    subscription parseOperationDefinition :: Parser (Operation RAW)-parseOperationDefinition = label "OperationDefinition" $ do-  operationPosition <- getLocation-  operationType <- parseOperationType-  operationName <- optional parseName-  operationArguments <- uniqTupleOpt variableDefinition-  operationDirectives <- optionalDirectives-  operationSelection <- parseSelectionSet-  pure Operation {..}+parseOperationDefinition =+  label "OperationDefinition" $+    Operation+      <$> getLocation+      <*> parseOperationType+      <*> optional parseName+      <*> uniqTupleOpt variableDefinition+      <*> optionalDirectives+      <*> parseSelectionSet  parseAnonymousQuery :: Parser (Operation RAW) parseAnonymousQuery = label "AnonymousQuery" $ do
src/Data/Morpheus/Parsing/Request/Parser.hs view
@@ -1,17 +1,18 @@ {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Parsing.Request.Parser (parseGQL) where  -- -- MORPHEUS-import Control.Monad.Trans (lift) import qualified Data.Aeson as Aeson   ( Value (..),   ) import Data.HashMap.Lazy (toList) import Data.Morpheus.Internal.Utils   ( fromElems,+    toLBS,   ) import Data.Morpheus.Parsing.Internal.Internal   ( Parser,@@ -36,21 +37,30 @@ import Data.Morpheus.Types.Internal.Resolving   ( Eventless,   )+import Relude hiding+  ( many,+    toList,+  ) import Text.Megaparsec   ( eof,     label,-    manyTill,+    many,   )  request :: Parser GQLQuery-request = label "GQLQuery" $ do-  ignoredTokens-  operation <- parseOperation-  fragments <- manyTill parseFragmentDefinition eof >>= lift . fromElems-  pure GQLQuery {operation, fragments, inputVariables = []}+request =+  label "GQLQuery" $+    ( GQLQuery []+        <$> (ignoredTokens *> parseOperation)+        <*> (many parseFragmentDefinition >>= lift . fromElems)+    )+      <* ignoredTokens+      <* eof  parseGQL :: GQLRequest -> Eventless GQLQuery-parseGQL GQLRequest {query, variables} = setVariables <$> processParser request query+parseGQL GQLRequest {query, variables} =+  setVariables+    <$> processParser request (toLBS query)   where     setVariables root = root {inputVariables = toVariableMap variables}     toVariableMap :: Maybe Aeson.Value -> [(FieldName, ResolvedValue)]
src/Data/Morpheus/Parsing/Request/Selection.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Parsing.Request.Selection   ( parseSelectionSet,@@ -39,9 +40,9 @@     SelectionContent (..),     SelectionSet,   )+import Relude import Text.Megaparsec-  ( (<|>),-    label,+  ( label,     try,   ) @@ -61,7 +62,7 @@     parseSelection =       label "Selection" $         try inlineFragment-          <|> try spread+          <|> spread           <|> parseSelectionField  -- Fields: https://graphql.github.io/graphql-spec/June2018/#sec-Language.Fields@@ -72,14 +73,13 @@ parseSelectionField :: Parser (Selection RAW) parseSelectionField =   label "SelectionField" $-    do-      selectionPosition <- getLocation-      selectionAlias <- parseAlias-      selectionName <- parseName-      selectionArguments <- maybeArguments-      selectionDirectives <- optionalDirectives-      selectionContent <- parseSelectionContent-      pure Selection {..}+    Selection+      <$> getLocation+      <*> parseAlias+      <*> parseName+      <*> maybeArguments+      <*> optionalDirectives+      <*> parseSelectionContent  parseSelectionContent :: Parser (SelectionContent RAW) parseSelectionContent =@@ -109,7 +109,7 @@ --   fragment FragmentName TypeCondition Directives(opt) SelectionSet -- parseFragmentDefinition :: Parser (Fragment RAW)-parseFragmentDefinition = label "FragmentDefinition" $ do+parseFragmentDefinition = label "Fragment" $ do   keyword "fragment"   fragmentPosition <- getLocation   fragmentName <- parseName
src/Data/Morpheus/QuasiQuoter.hs view
@@ -4,6 +4,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.QuasiQuoter   ( gql,@@ -13,10 +14,18 @@   ) where +import Data.ByteString.Lazy.Char8+  ( ByteString,+    pack,+    unpack,+  ) import Data.Morpheus.Error   ( gqlWarnings,     renderGQLErrors,   )+import Data.Morpheus.Internal.Utils+  ( fromLBS,+  ) import Data.Morpheus.Parser   ( parseRequest,     parseTypeSystemDefinition,@@ -25,13 +34,9 @@ import Data.Morpheus.Types.Internal.Resolving   ( Result (..),   )-import Data.Text-  ( Text,-    pack,-    unpack,-  ) import Language.Haskell.TH import Language.Haskell.TH.Quote+import Relude hiding (ByteString)  gql :: QuasiQuoter gql =@@ -43,9 +48,11 @@     }   where     notHandled things =-      error $ things ++ " are not supported by the GraphQL QuasiQuoter"+      error $+        things+          <> " are not supported by the GraphQL QuasiQuoter" -gqlExpression :: Text -> Q Exp+gqlExpression :: ByteString -> Q Exp gqlExpression queryText = case parseRequest request of   Failure errors -> fail (renderGQLErrors errors)   Success {result, warnings} ->@@ -54,7 +61,7 @@     query = unpack queryText     request =       GQLRequest-        { query = queryText,+        { query = fromLBS queryText,           operationName = Nothing,           variables = Nothing         }@@ -69,9 +76,10 @@     }   where     notHandled things =-      error $ things ++ " are not supported by the GraphQL QuasiQuoter"+      error $+        things <> " are not supported by the GraphQL QuasiQuoter" -dslExpression :: Text -> Q Exp+dslExpression :: ByteString -> Q Exp dslExpression doc = case parseTypeSystemDefinition doc of   Failure errors -> fail (renderGQLErrors errors)   Success {result, warnings} ->
src/Data/Morpheus/Rendering/RenderGQL.hs view
@@ -11,36 +11,44 @@     renderEntry,     space,     Rendering,+    fromText,+    renderGQL,+    intercalate,+    renderInputSeq,   ) where  -- MORPHEUS  import qualified Data.Aeson as A-import Data.Foldable (null)-import Data.Functor ((<$>))-import Data.Maybe (Maybe, maybe)-import Data.Semigroup ((<>))-import Data.Text-  ( Text,+import Data.ByteString.Lazy (ByteString)+import qualified Data.ByteString.Lazy.Char8 as LB+import Data.Foldable (foldl)+import qualified Data.Text as T+import Relude hiding+  ( ByteString,     intercalate,-    pack,   )-import Data.Text.Encoding (decodeUtf8)-import Data.ByteString.Lazy (toStrict)-import Prelude-  ( (.),-    ($),-    Bool (..),-    Float,-    Int,-    fmap,-    otherwise,-    show,-  ) -type Rendering = Text+renderGQL :: RenderGQL a => a -> ByteString+renderGQL x = runRendering (render x) 0 +newtype Rendering = Rendering+  { runRendering :: Int -> ByteString+  }++instance Semigroup Rendering where+  Rendering f <> Rendering g = Rendering $ \x -> f x <> g x++instance IsString Rendering where+  fromString = Rendering . const . LB.pack++fromShow :: Show a => a -> Rendering+fromShow = fromString . show++fromText :: Text -> Rendering+fromText = fromString . T.unpack+ class RenderGQL a where   render :: a -> Rendering @@ -50,39 +58,49 @@   where   render = maybe "" render +instance RenderGQL ByteString where+  render = Rendering . const+ instance RenderGQL Int where-  render = pack . show+  render = fromShow  instance RenderGQL Float where-  render = pack . show+  render = fromShow  instance RenderGQL Text where-  render = pack . show+  render = fromShow  instance RenderGQL Bool where   render True = "true"   render False = "false"  instance RenderGQL A.Value where-  render x = decodeUtf8 $ toStrict $ A.encode x--indent :: Rendering-indent = "  "+  render = render . A.encode  space :: Rendering space = " "  newline :: Rendering-newline = "\n"+newline = "\n" <> Rendering indentionSize -indentNewline :: Rendering-indentNewline = newline <> indent+indentionSize :: (Semigroup a, IsString a) => Int -> a+indentionSize 0 = ""+indentionSize n = stimes (n * 2) " " +indent :: Rendering -> Rendering+indent (Rendering f) = Rendering $ f . (+ 1)++intercalate :: Rendering -> [Rendering] -> Rendering+intercalate (Rendering f) fs = Rendering $ \x -> LB.intercalate (f x) (map ((x &) . runRendering) fs)++indentNewline :: Rendering -> Rendering+indentNewline rendering = indent (newline <> rendering)+ renderAtNewLine :: (RenderGQL a) => [a] -> Rendering-renderAtNewLine elems = indentNewline <> intercalate indentNewline (fmap render elems)+renderAtNewLine elems = indentNewline $ intercalate newline (fmap render elems)  renderObject :: (RenderGQL a) => [a] -> Rendering-renderObject fields = " {" <> renderAtNewLine fields <> "\n}"+renderObject fields = space <> "{" <> renderAtNewLine fields <> newline <> "}"  renderMembers :: (RenderGQL a) => [a] -> Rendering renderMembers members = intercalate (space <> "|" <> space) (fmap render members)@@ -98,3 +116,13 @@   value ->   Rendering renderEntry name value = render name <> ": " <> render value++renderInputSeq ::+  (Foldable t, RenderGQL a) =>+  t a ->+  Rendering+renderInputSeq = fromMaybe "" . foldl renderValue Nothing+  where+    renderValue :: RenderGQL a => Maybe Rendering -> a -> Maybe Rendering+    renderValue Nothing value = Just (render value)+    renderValue (Just txt) value = Just (txt <> ", " <> render value)
src/Data/Morpheus/Rendering/RenderIntrospection.hs view
@@ -14,21 +14,14 @@   ) where --- Morpheus--import Control.Applicative (pure)-import Control.Monad (Monad (..))-import Data.Foldable (foldr)-import Data.Functor ((<$>))-import Data.List (filter)-import Data.Maybe (Maybe (..), isJust, maybe) import Data.Morpheus.Internal.Utils   ( Failure,     elems,     failure,+    fromLBS,     selectBy,   )-import qualified Data.Morpheus.Rendering.RenderGQL as GQL (RenderGQL (..))+import qualified Data.Morpheus.Rendering.RenderGQL as GQL import Data.Morpheus.Types.Internal.AST   ( ANY,     ArgumentsDefinition (..),@@ -77,15 +70,8 @@     mkString,     unsafeInternalContext,   )-import Data.Semigroup ((<>)) import Data.Text (pack)-import Data.Traversable (traverse)-import Prelude-  ( ($),-    (.),-    Bool,-    show,-  )+import Relude  class   ( Monad m,@@ -133,7 +119,7 @@   render = pure . mkBoolean  instance RenderIntrospection TypeKind where-  render = pure . mkString . GQL.render+  render = pure . mkString . fromLBS . GQL.renderGQL  instance RenderIntrospection (DirectiveDefinition VALID) where   render@@ -217,7 +203,7 @@  instance RenderIntrospection (Value VALID) where   render Null = pure mkNull-  render x = pure $ mkString $ GQL.render x+  render x = pure $ mkString $ fromLBS $ GQL.renderGQL x  instance   RenderIntrospection
src/Data/Morpheus/Schema/DSL.hs view
@@ -5,9 +5,14 @@ {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Schema.DSL (dsl) where +import Data.ByteString.Lazy.Char8+  ( ByteString,+    pack,+  ) import Data.Morpheus.Error   ( gqlWarnings,     renderGQLErrors,@@ -18,12 +23,9 @@ import Data.Morpheus.Types.Internal.Resolving   ( Result (..),   )-import Data.Text-  ( Text,-    pack,-  ) import Language.Haskell.TH import Language.Haskell.TH.Quote+import Relude hiding (ByteString)  dsl :: QuasiQuoter dsl =@@ -34,10 +36,9 @@       quoteDec = notHandled "Declarations"     }   where-    notHandled things =-      error $ things ++ " are not supported by the GraphQL QuasiQuoter"+    notHandled things = error $ things <> " are not supported by the GraphQL QuasiQuoter" -dslExpression :: Text -> Q Exp+dslExpression :: ByteString -> Q Exp dslExpression doc = case parseSchema doc of   Failure errors -> fail (renderGQLErrors errors)   Success {result, warnings} -> gqlWarnings warnings >> [|result|]
src/Data/Morpheus/Schema/Schema.hs view
@@ -8,36 +8,21 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Schema.Schema   ( internalSchema,   ) where --- MORPHEUS- import Data.Morpheus.Schema.DSL (dsl) import Data.Morpheus.Types.Internal.AST-  ( DataFingerprint (..),-    Schema (..),-    TypeDefinition (..),-    internalFingerprint,+  ( Schema,   ) -toInternalSchema :: Schema s -> Schema s-toInternalSchema Schema {..} = Schema {types = fmap toInternalType types, ..}--toInternalType :: TypeDefinition a s -> TypeDefinition a s-toInternalType-  tyDef@TypeDefinition-    { typeFingerprint = DataFingerprint name xs-    } =-    tyDef {typeFingerprint = internalFingerprint name xs}- internalSchema :: Schema s internalSchema =-  toInternalSchema-    [dsl|+  [dsl|  """ Directs the executor to skip this field or fragment when the `if` argument is true.
src/Data/Morpheus/Schema/SchemaAPI.hs view
@@ -3,16 +3,16 @@ {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Schema.SchemaAPI   ( withSystemFields,   ) where --- MORPHEUS+import Data.Morpheus.Ext.SemigroupM ((<:>)) import Data.Morpheus.Internal.Utils-  ( (<.>),-    elems,+  ( elems,     empty,     selectOr,   )@@ -45,6 +45,7 @@     mkObject,     withArguments,   )+import Relude hiding (empty)  resolveTypes ::   Monad m => Schema VALID -> Resolver QUERY e m (ResModel QUERY e m)@@ -103,6 +104,6 @@ withSystemFields schema RootResModel {query, ..} =   pure $     RootResModel-      { query = query >>= (<.> schemaAPI schema),+      { query = query >>= (<:> schemaAPI schema),         ..       }
src/Data/Morpheus/Types/App.hs view
@@ -16,14 +16,10 @@   ) where -import Control.Applicative (Applicative (..))-import Control.Monad (Monad) import qualified Data.Aeson as A-import qualified Data.ByteString.Lazy.Char8 as LBS-import Data.Functor ((<$>), Functor (..))+import Data.Morpheus.Ext.SemigroupM ((<:>)) import Data.Morpheus.Internal.Utils-  ( (<:>),-    empty,+  ( empty,     failure,     prop,   )@@ -66,15 +62,7 @@   ) import Data.Morpheus.Types.Internal.Stitching (Stitching (..)) import Data.Morpheus.Validation.Document.Validation (ValidateSchema (..))-import Data.Semigroup (Semigroup (..))-import Data.Text (pack)-import Prelude-  ( ($),-    (.),-    Bool (..),-    Maybe (..),-    const,-  )+import Relude hiding (empty)  mkApp :: ValidateSchema s => Schema s -> RootResModel e m -> App e m mkApp appSchema appResolvers =@@ -89,7 +77,7 @@  instance RenderGQL (App e m) where   render App {app} = render app-  render FailApp {appErrors} = pack $ LBS.unpack (A.encode appErrors)+  render FailApp {appErrors} = render (A.encode appErrors)  instance Monad m => Semigroup (App e m) where   (FailApp err1) <> (FailApp err2) = FailApp (err1 <> err2)@@ -133,7 +121,7 @@ validateReq inputSchema config request = cleanEvents $ ResultT $ pure $ do   validSchema <- validateSchema True config inputSchema   schema <- internalSchema <:> validSchema-  operation <- parseRequestWith config schema request+  operation <- parseRequestWith config validSchema request   pure $     ResolverContext       { schema,
src/Data/Morpheus/Types/GQLScalar.hs view
@@ -12,9 +12,7 @@   ) where -import Control.Monad.Fail (MonadFail (..)) import qualified Data.Aeson as A-import Data.Either (Either (..), either) import Data.Morpheus.Types.Internal.AST   ( ScalarDefinition (..),     ScalarValue (..),@@ -22,18 +20,8 @@     Value (..),     replaceValue,   )-import Data.Text (Text, unpack)-import Prelude-  ( ($),-    (.),-    Bool,-    Float,-    Int,-    Monad,-    fromInteger,-    pure,-    toInteger,-  )+import Data.Text (unpack)+import Relude  toScalar :: ValidValue -> Either Text ScalarValue toScalar (Scalar x) = pure x
src/Data/Morpheus/Types/ID.hs view
@@ -17,18 +17,8 @@ import Data.Morpheus.Types.Internal.AST   ( ScalarValue (..),   )-import Data.Text-  ( Text,-    pack,-  )-import GHC.Generics (Generic)-import Prelude-  ( ($),-    Either (..),-    Eq,-    Show (..),-    pure,-  )+import Data.Text (pack)+import Relude  -- | default GraphQL type, -- parses only 'String' and 'Int' values,
src/Data/Morpheus/Types/IO.hs view
@@ -15,10 +15,6 @@   ) where --- MORPHEUS--import Control.Applicative (Applicative (..))-import Control.Monad.Fail (fail) import Data.Aeson   ( (.:?),     (.=),@@ -40,30 +36,22 @@   ( eitherDecodeWith,     jsonNoDup,   )-import Data.ByteString (ByteString) import qualified Data.ByteString.Lazy.Char8 as LB   ( ByteString,     fromStrict,     toStrict,   )-import Data.Either (Either (..))-import Data.Functor ((<$>), fmap) import qualified Data.HashMap.Lazy as LH-  ( toList,-  )-import Data.Maybe (Maybe (..)) import Data.Morpheus.Error.Utils (badRequestError) import Data.Morpheus.Types.Internal.AST   ( FieldName,     GQLError (..),-    Token,     ValidValue,   ) import Data.Morpheus.Types.Internal.Resolving.Core   ( Failure (..),     Result (..),   )-import Data.Text (Text) import qualified Data.Text.Lazy as LT   ( Text,     fromStrict,@@ -73,8 +61,10 @@   ( decodeUtf8,     encodeUtf8,   )-import GHC.Generics (Generic)-import Prelude (($), (.), Show, String)+import Relude hiding+  ( decodeUtf8,+    encodeUtf8,+  )  decodeNoDup :: Failure String m => LB.ByteString -> m GQLRequest decodeNoDup str = case eitherDecodeWith jsonNoDup ifromJSON str of@@ -102,7 +92,7 @@   mapAPI api = fmap LT.toStrict . mapAPI api . LT.fromStrict  renderResponse :: Result e ValidValue -> GQLResponse-renderResponse (Failure errors) = Errors errors+renderResponse (Failure errors) = Errors (sortOn locations errors) renderResponse Success {result} = Data result  instance FromJSON a => FromJSON (JSONResponse a) where@@ -118,8 +108,8 @@  -- | GraphQL HTTP Request Body data GQLRequest = GQLRequest-  { query :: Token,-    operationName :: Maybe FieldName,+  { operationName :: Maybe FieldName,+    query :: Text,     variables :: Maybe Aeson.Value   }   deriving (Show, Generic, FromJSON, ToJSON)
src/Data/Morpheus/Types/Internal/AST.hs view
@@ -5,8 +5,7 @@ {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Types.Internal.AST-  ( -- BASE-    Ref (..),+  ( Ref (..),     Position (..),     Message,     anonymousRef,@@ -16,7 +15,6 @@     CONST,     VALID,     RAW,-    -- VALUE     Value (..),     ScalarValue (..),     Object,@@ -33,7 +31,6 @@     ResolvedValue,     splitDuplicates,     removeDuplicates,-    -- Selection     Argument (..),     Arguments,     SelectionSet,@@ -41,13 +38,11 @@     Selection (..),     Fragments,     Fragment (..),-    -- OPERATION     Operation (..),     Variable (..),     VariableDefinitions,     DefaultValue,     getOperationName,-    -- DSL     ScalarDefinition (..),     DataEnum,     FieldsDefinition,@@ -61,7 +56,6 @@     Schema (..),     DataTypeWrapper (..),     TypeKind (..),-    DataFingerprint (..),     TypeWrapper (..),     TypeRef (..),     DataEnumValue (..),@@ -96,9 +90,7 @@     lookupDeprecated,     lookupDeprecatedReason,     lookupWith,-    -- Template Haskell     hsTypeName,-    -- LOCAL     GQLQuery (..),     Variables,     unsafeFromFields,@@ -108,7 +100,6 @@     ObjectEntry (..),     UnionTag (..),     __inputname,-    internalFingerprint,     ANY,     IN,     OUT,@@ -125,7 +116,6 @@     toFieldName,     TypeNameRef (..),     isEnum,-    Fields (..),     fieldsToArguments,     mkCons,     mkConsEnum,@@ -166,18 +156,16 @@     possibleTypes,     possibleInterfaceTypes,     mkField,-    isTypeDefined,     safeDefineType,+    defineSchemaWith,   ) where  import Data.HashMap.Lazy (HashMap)--- Morpheus-+import Data.Morpheus.Ext.OrdMap import Data.Morpheus.Types.Internal.AST.Base import Data.Morpheus.Types.Internal.AST.DirectiveLocation (DirectiveLocation (..)) import Data.Morpheus.Types.Internal.AST.Fields-import Data.Morpheus.Types.Internal.AST.OrdMap import Data.Morpheus.Types.Internal.AST.Selection import Data.Morpheus.Types.Internal.AST.Stage import Data.Morpheus.Types.Internal.AST.TH@@ -190,8 +178,8 @@ type Variables = HashMap FieldName ResolvedValue  data GQLQuery = GQLQuery-  { fragments :: Fragments RAW,+  { inputVariables :: [(FieldName, ResolvedValue)],     operation :: Operation RAW,-    inputVariables :: [(FieldName, ResolvedValue)]+    fragments :: Fragments RAW   }   deriving (Show, Lift)
src/Data/Morpheus/Types/Internal/AST/Base.hs view
@@ -25,7 +25,6 @@     MUTATION,     SUBSCRIPTION,     TypeKind (..),-    DataFingerprint (..),     DataTypeWrapper (..),     Token,     anonymousRef,@@ -44,7 +43,6 @@     removeDuplicates,     GQLError (..),     GQLErrors,-    internalFingerprint,     TRUE,     FALSE,     TypeName (..),@@ -72,16 +70,13 @@     Value,     encode,   )-import Data.ByteString.Lazy.Char8 (ByteString, unpack)+import Data.ByteString.Lazy (ByteString) import Data.Char (toLower)-import Data.Hashable (Hashable)-import Data.Maybe (Maybe (..), maybeToList)-import Data.Morpheus.Rendering.RenderGQL (RenderGQL (..))-import Data.Semigroup (Semigroup (..))-import Data.String (IsString (..))-import Data.Text (Text, intercalate, pack)+import Data.Morpheus.Rendering.RenderGQL (RenderGQL (..), Rendering, fromText, renderGQL)+import Data.Text (intercalate, pack) import qualified Data.Text as T-import GHC.Generics (Generic)+import qualified Data.Text.Lazy as LT+import Data.Text.Lazy.Encoding (decodeUtf8) import Language.Haskell.TH   ( ExpQ,     stringE,@@ -92,23 +87,10 @@     TExp,     unsafeTExpCoerce,   )-import Prelude-  ( ($),-    (&&),-    (.),-    Bool (..),-    Eq (..),-    Functor (..),-    Int,-    Ord (..),-    Show (..),-    String,-    elem,-    fst,-    id,-    not,-    notElem,-    otherwise,+import Relude hiding+  ( ByteString,+    decodeUtf8,+    intercalate,   )  type TRUE = 'True@@ -189,7 +171,7 @@   msg = Message . pack  instance Msg ByteString where-  msg = msg . unpack+  msg = Message . LT.toStrict . decodeUtf8  instance Msg Text where   msg = Message@@ -219,7 +201,7 @@   msg FieldName {readName} = Message $ "\"" <> readName <> "\""  instance RenderGQL FieldName where-  render = readName+  render = fromText . readName  intercalateName :: FieldName -> [FieldName] -> FieldName intercalateName (FieldName x) = FieldName . intercalate x . fmap readName@@ -259,7 +241,7 @@   msg TypeName {readTypeName} = Message $ "\"" <> readTypeName <> "\""  instance RenderGQL TypeName where-  render = readTypeName+  render = fromText . readTypeName  -- Description type Description = Text@@ -270,6 +252,9 @@   }   deriving (Show, Generic, FromJSON, ToJSON, Lift) +instance Ord Position where+  compare x y = compare (line x) (line y)+ -- Positions 2 Value withs same structire -- but different Positions should be Equal instance Eq Position where@@ -283,11 +268,6 @@  type GQLErrors = [GQLError] -data DataFingerprint = DataFingerprint TypeName [String] deriving (Show, Eq, Ord, Lift)--internalFingerprint :: TypeName -> [String] -> DataFingerprint-internalFingerprint name = DataFingerprint ("SYSTEM.INTERNAL." <> name)- data OperationType   = Query   | Subscription@@ -295,7 +275,7 @@   deriving (Show, Eq, Lift, Generic, Hashable)  instance RenderGQL OperationType where-  render = pack . fmap toLower . show+  render = fromString . fmap toLower . show  instance Msg OperationType where   msg Query = msg ("query" :: TypeName)@@ -351,7 +331,7 @@   render TypeRef {typeConName, typeWrappers} = renderWrapped typeConName typeWrappers  instance Msg TypeRef where-  msg = msg . FieldName . render+  msg = msg . FieldName . LT.toStrict . decodeUtf8 . renderGQL  -- Kind -----------------------------------------------------------------------------------@@ -438,7 +418,7 @@ toHSWrappers [] = [TypeMaybe] toHSWrappers [NonNullType] = [] -renderWrapped :: RenderGQL a => a -> [TypeWrapper] -> Token+renderWrapped :: RenderGQL a => a -> [TypeWrapper] -> Rendering renderWrapped x wrappers = showGQLWrapper (toGQLWrapper wrappers)   where     showGQLWrapper [] = render x
src/Data/Morpheus/Types/Internal/AST/DirectiveLocation.hs view
@@ -8,7 +8,8 @@  import Data.Morpheus.Types.Internal.AST.Base (Msg (..)) import Language.Haskell.TH.Syntax (Lift)-import Prelude ((.), Eq, Show (..))+import Relude hiding (Show, show)+import Prelude (Show (..))  data DirectiveLocation   = QUERY
src/Data/Morpheus/Types/Internal/AST/Fields.hs view
@@ -1,10 +1,8 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveLift #-}-{-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-}@@ -13,7 +11,6 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Types.Internal.AST.Fields@@ -23,7 +20,6 @@     ArgumentsDefinition (..),     FieldDefinition (..),     FieldsDefinition,-    Fields (..),     FieldContent (..),     InputFieldsDefinition,     DirectiveDefinitions,@@ -39,31 +35,35 @@     mkInputValue,     mkObjectField,     mkField,+    renderArgumentValues,+    renderDirectives,   ) where --- MORPHEUS--import Data.Foldable (Foldable)-import Data.Functor ((<$>), Functor (..))-import Data.List (find)-import Data.Maybe (Maybe (..)) import Data.Morpheus.Error.NameCollision   ( NameCollision (..),   )+import Data.Morpheus.Ext.OrdMap+  ( OrdMap,+    unsafeFromList,+  ) import Data.Morpheus.Internal.Utils   ( Collection (..),+    Elems (..),+    Failure,+    FromElems (..),     KeyOf (..),-    Listable (..),-    Merge (..),     Selectable (..),-    elems,+    toPair,   ) import Data.Morpheus.Rendering.RenderGQL   ( RenderGQL (..),+    Rendering,+    intercalate,     renderArguments,     renderEntry,     renderObject,+    space,   ) import Data.Morpheus.Types.Internal.AST.Base   ( Description,@@ -77,14 +77,11 @@     TypeRef (..),     TypeWrapper (..),     ValidationError (..),+    ValidationErrors,     msgValidation,     sysFields,   ) import Data.Morpheus.Types.Internal.AST.DirectiveLocation (DirectiveLocation)-import Data.Morpheus.Types.Internal.AST.OrdMap-  ( OrdMap,-    unsafeFromValues,-  ) import Data.Morpheus.Types.Internal.AST.Stage   ( Stage,   )@@ -101,25 +98,15 @@   ( ScalarValue (..),     Value (..),   )-import Data.Semigroup (Semigroup ((<>)))-import Data.Traversable (Traversable) import Instances.TH.Lift () import Language.Haskell.TH.Syntax (Lift (..))-import Prelude-  ( ($),-    (.),-    Bool (..),-    Eq,-    Show,-    filter,-    notElem,-  )+import Relude hiding (empty, intercalate)  -- scalar ------------------------------------------------------------------ data Argument (valid :: Stage) = Argument-  { argumentName :: FieldName,-    argumentPosition :: Position,+  { argumentPosition :: Position,+    argumentName :: FieldName,     argumentValue :: Value valid   }   deriving (Show, Eq, Lift)@@ -140,11 +127,17 @@  type Arguments (s :: Stage) = OrdMap FieldName (Argument s) +renderArgumentValues :: Arguments s -> Rendering+renderArgumentValues = renderArguments . filter notNull . elems+  where+    notNull Argument {argumentValue = Null} = False+    notNull _ = True+ -- directive ------------------------------------------------------------------ data Directive (s :: Stage) = Directive-  { directiveName :: FieldName,-    directivePosition :: Position,+  { directivePosition :: Position,+    directiveName :: FieldName,     directiveArgs :: Arguments s   }   deriving (Show, Lift, Eq)@@ -152,13 +145,28 @@ instance KeyOf FieldName (Directive s) where   keyOf = directiveName +instance RenderGQL (Directive s) where+  render Directive {..} =+    "@" <> render directiveName+      <> renderArgumentValues directiveArgs+ type Directives s = [Directive s] +renderDirectives :: Directives s -> Rendering+renderDirectives xs+  | null dirs = ""+  | otherwise = space <> intercalate space (fmap render dirs)+  where+    dirs = filter notSystem xs+    notSystem Directive {directiveName = "include"} = False+    notSystem Directive {directiveName = "skip"} = False+    notSystem _ = True+ data DirectiveDefinition s = DirectiveDefinition   { directiveDefinitionName :: FieldName,     directiveDefinitionDescription :: Maybe Description,-    directiveDefinitionLocations :: [DirectiveLocation],-    directiveDefinitionArgs :: ArgumentsDefinition s+    directiveDefinitionArgs :: ArgumentsDefinition s,+    directiveDefinitionLocations :: [DirectiveLocation]   }   deriving (Show, Lift) @@ -197,33 +205,11 @@   toCategory (FieldArgs x) = FieldArgs x   toCategory (DefaultInputValue x) = DefaultInputValue x -newtype Fields def = Fields-  {unFields :: OrdMap FieldName def}-  deriving-    ( Show,-      Lift,-      Functor,-      Foldable,-      Traversable-    )--deriving instance (KeyOf FieldName def) => Collection def (Fields def)--instance Merge (FieldsDefinition cat s) where-  merge path (Fields x) (Fields y) = Fields <$> merge path x y--instance Selectable FieldName (FieldDefinition cat s) (Fields (FieldDefinition cat s)) where-  selectOr fb f name (Fields lib) = selectOr fb f name lib- unsafeFromFields :: [FieldDefinition cat s] -> FieldsDefinition cat s-unsafeFromFields = Fields . unsafeFromValues+unsafeFromFields = unsafeFromList . fmap toPair  fieldsToArguments :: FieldsDefinition IN s -> ArgumentsDefinition s-fieldsToArguments = ArgumentsDefinition Nothing . unFields--instance (KeyOf FieldName def, NameCollision def) => Listable def (Fields def) where-  fromElems = fmap Fields . fromElems-  elems = elems . unFields+fieldsToArguments = ArgumentsDefinition Nothing  -- 3.6 Objects : https://graphql.github.io/graphql-spec/June2018/#sec-Objects ------------------------------------------------------------------------------@@ -237,7 +223,7 @@ --  FieldsDefinition --    { FieldDefinition(list) } ---type FieldsDefinition cat s = Fields (FieldDefinition cat s)+type FieldsDefinition cat s = OrdMap FieldName (FieldDefinition cat s)  --  FieldDefinition --    Description(opt) Name ArgumentsDefinition(opt) : Type Directives(Const)(opt)@@ -246,11 +232,11 @@ --   Description(opt) Name: Type DefaultValue(opt) Directives[Const](opt)  data FieldDefinition (cat :: TypeCategory) (s :: Stage) = FieldDefinition-  { fieldName :: FieldName,-    fieldDescription :: Maybe Description,+  { fieldDescription :: Maybe Description,+    fieldName :: FieldName,     fieldType :: TypeRef,-    fieldDirectives :: [Directive s],-    fieldContent :: Maybe (FieldContent TRUE cat s)+    fieldContent :: Maybe (FieldContent TRUE cat s),+    fieldDirectives :: [Directive s]   }   deriving (Show, Lift, Eq) @@ -286,8 +272,8 @@     "There can Be only One field Named " <> msgValidation fieldName  instance RenderGQL (FieldDefinition cat s) where-  render FieldDefinition {fieldName = FieldName name, fieldType, fieldContent = Just (FieldArgs args)} =-    name <> render args <> ": " <> render fieldType+  render FieldDefinition {fieldName, fieldType, fieldContent = Just (FieldArgs args)} =+    render fieldName <> render args <> ": " <> render fieldType   render FieldDefinition {fieldName, fieldType} =     renderEntry fieldName fieldType @@ -339,7 +325,7 @@ --- InputFieldsDefinition -- { InputValueDefinition(list) } -type InputFieldsDefinition s = Fields (InputValueDefinition s)+type InputFieldsDefinition s = OrdMap FieldName (InputValueDefinition s)  type InputValueDefinition = FieldDefinition IN @@ -366,6 +352,8 @@   empty = ArgumentsDefinition Nothing empty   singleton = ArgumentsDefinition Nothing . singleton -instance Listable (ArgumentDefinition s) (ArgumentsDefinition s) where-  elems (ArgumentsDefinition _ args) = elems args+instance (Monad m, Failure ValidationErrors m) => FromElems m (ArgumentDefinition s) (ArgumentsDefinition s) where   fromElems args = ArgumentsDefinition Nothing <$> fromElems args++instance Elems (ArgumentDefinition s) (ArgumentsDefinition s) where+  elems (ArgumentsDefinition _ args) = elems args
− src/Data/Morpheus/Types/Internal/AST/MergeSet.hs
@@ -1,152 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DeriveLift #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE KindSignatures #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE NoImplicitPrelude #-}--module Data.Morpheus.Types.Internal.AST.MergeSet-  ( MergeSet,-    toOrdMap,-    concatTraverse,-    join,-  )-where---- MORPHEUS--import Control.Applicative (Applicative (..))-import Control.Monad (Monad (..))-import Data.Foldable (Foldable (..))-import Data.Functor (Functor (..))-import Data.List (find)-import Data.Maybe (maybe)-import Data.Morpheus.Internal.Utils-  ( (<:>),-    Collection (..),-    Failure (..),-    KeyOf (..),-    Listable (..),-    Merge (..),-    Selectable (..),-    elems,-    fromListT,-    mergeT,-    resolveWith,-    runResolutionT,-  )-import Data.Morpheus.Types.Internal.AST.Base-  ( Ref,-    ValidationErrors,-  )-import Data.Morpheus.Types.Internal.AST.OrdMap-  ( OrdMap (..),-  )-import qualified Data.Morpheus.Types.Internal.AST.OrdMap as OM-import Data.Morpheus.Types.Internal.AST.Stage-  ( RAW,-    Stage,-    VALID,-  )-import Data.Semigroup (Semigroup (..))-import Data.Traversable (Traversable (..))-import Language.Haskell.TH.Syntax (Lift (..))-import Prelude-  ( ($),-    (.),-    Eq (..),-    Show,-    otherwise,-  )---- set with mergeable components-newtype MergeSet (dups :: Stage) a = MergeSet-  { unpack :: [a]-  }-  deriving-    ( Show,-      Eq,-      Functor,-      Foldable,-      Lift,-      Traversable,-      Collection a-    )--concatTraverse ::-  ( Eq a,-    Eq b,-    Merge a,-    Merge b,-    KeyOf k b,-    Monad m,-    Failure ValidationErrors m-  ) =>-  (a -> m (MergeSet VALID b)) ->-  MergeSet RAW a ->-  m (MergeSet VALID b)-concatTraverse f smap =-  traverse f (elems smap)-    >>= join--join ::-  ( Eq a,-    KeyOf k a,-    Merge a,-    Monad m,-    Failure ValidationErrors m,-    Listable a (MergeSet opt a),-    Merge (MergeSet opt a)-  ) =>-  [MergeSet opt a] ->-  m (MergeSet opt a)-join = __join empty-  where-    __join acc [] = pure acc-    __join acc (x : xs) = acc <:> x >>= (`__join` xs)--toOrdMap :: (KeyOf k a) => MergeSet opt a -> OrdMap k a-toOrdMap = OM.unsafeFromValues . unpack--instance (KeyOf k a) => Selectable k a (MergeSet opt a) where-  selectOr fb f key (MergeSet ls) = maybe fb f (find ((key ==) . keyOf) ls)---- must merge files on collision--instance-  ( KeyOf k a,-    Listable a (MergeSet VALID a),-    Merge a,-    Eq a-  ) =>-  Merge (MergeSet VALID a)-  where-  merge path x y = runResolutionT (mergeT x y) MergeSet (resolveWith (resolveConflict path))--instance-  ( Listable a (MergeSet VALID a),-    KeyOf k a,-    Merge a,-    Eq a-  ) =>-  Listable a (MergeSet VALID a)-  where-  fromElems xs = runResolutionT (fromListT xs) MergeSet (resolveWith (resolveConflict []))-  elems = unpack--instance Merge (MergeSet RAW a) where-  merge _ (MergeSet x) (MergeSet y) = pure $ MergeSet $ x <> y--instance Listable a (MergeSet RAW a) where-  fromElems = pure . MergeSet-  elems = unpack--resolveConflict :: (Monad m, Eq a, KeyOf k a, Merge a, Failure ValidationErrors m) => [Ref] -> a -> a -> m a-resolveConflict path oldValue newValue-  | oldValue == newValue = pure oldValue-  | otherwise = merge path oldValue newValue
− src/Data/Morpheus/Types/Internal/AST/OrdMap.hs
@@ -1,100 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveFunctor #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NamedFieldPuns #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE NoImplicitPrelude #-}--module Data.Morpheus.Types.Internal.AST.OrdMap-  ( OrdMap (..),-    unsafeFromValues,-  )-where---- MORPHEUS-import Data.Foldable (Foldable (..))-import Data.Functor ((<$>), Functor (..))-import Data.HashMap.Lazy (HashMap)-import qualified Data.HashMap.Lazy as HM-import Data.Hashable (Hashable)-import Data.Maybe (fromMaybe, maybe)-import Data.Morpheus.Error.NameCollision (NameCollision (..))-import Data.Morpheus.Internal.Utils-  ( Collection (..),-    KeyOf (..),-    Listable (..),-    Merge (..),-    Selectable (..),-    toPair,-  )-import Data.Semigroup ((<>))-import Data.Traversable (Traversable (..))-import Language.Haskell.TH.Syntax (Lift (..))-import Prelude-  ( ($),-    (.),-    Eq,-    Show,-    error,-  )---- OrdMap-data OrdMap k a = OrdMap-  { mapKeys :: [k],-    mapEntries :: HashMap k a-  }-  deriving-    ( Show,-      Eq,-      Functor-    )--instance (Lift a, Lift k, Eq k, Hashable k) => Lift (OrdMap k a) where-  lift (OrdMap names x) = [|OrdMap names (HM.fromList ls)|]-    where-      ls = HM.toList x--#if MIN_VERSION_template_haskell(2,16,0)-  liftTyped (OrdMap names x) = [||OrdMap names (HM.fromList ls)||]-    where-      ls = HM.toList x-#endif--instance (Eq k, Hashable k) => Foldable (OrdMap k) where-  foldMap f = foldMap f . getElements--getElements :: (Eq k, Hashable k) => OrdMap k b -> [b]-getElements OrdMap {mapKeys, mapEntries} = fmap takeValue mapKeys-  where-    takeValue key = fromMaybe (error "TODO: invalid Ordered Map") (key `HM.lookup` mapEntries)--instance (Eq k, Hashable k) => Traversable (OrdMap k) where-  traverse f (OrdMap names values) = OrdMap names <$> traverse f values--instance (KeyOf k a, Hashable k) => Collection a (OrdMap k a) where-  empty = OrdMap [] HM.empty-  singleton x = OrdMap [keyOf x] $ HM.singleton (keyOf x) x--instance (Eq k, Hashable k) => Selectable k a (OrdMap k a) where-  selectOr fb f key OrdMap {mapEntries} = maybe fb f (HM.lookup key mapEntries)--instance (NameCollision a, KeyOf k a) => Merge (OrdMap k a) where-  merge ref (OrdMap k1 x) (OrdMap k2 y) = OrdMap (k1 <> k2) <$> merge ref x y--instance (NameCollision a, KeyOf k a, Hashable k) => Listable a (OrdMap k a) where-  fromElems values = OrdMap (fmap keyOf values) <$> fromElems values-  elems = getElements--unsafeFromValues ::-  ( KeyOf k a,-    Hashable k-  ) =>-  [a] ->-  OrdMap k a-unsafeFromValues x = OrdMap (fmap keyOf x) $ HM.fromList $ fmap toPair x
− src/Data/Morpheus/Types/Internal/AST/SafeHashMap.hs
@@ -1,91 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE DerivingStrategies #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE NoImplicitPrelude #-}--module Data.Morpheus.Types.Internal.AST.SafeHashMap-  ( SafeHashMap,-    unsafeFromValues,-    insert,-  )-where---- MORPHEUS-import Control.Monad (Monad)-import Data.Foldable (Foldable (..))-import Data.Functor ((<$>), Functor (..))-import Data.HashMap.Lazy (HashMap)-import qualified Data.HashMap.Lazy as HM-import Data.Hashable (Hashable)-import Data.Morpheus.Error.NameCollision (NameCollision (..))-import Data.Morpheus.Internal.Utils-  ( (<:>),-    Collection (..),-    Failure (..),-    KeyOf (..),-    Listable (..),-    Merge (..),-    Selectable (..),-    toPair,-  )-import Data.Morpheus.Types.Internal.AST.Base (ValidationErrors)-import Data.Traversable (Traversable (..))-import Language.Haskell.TH.Syntax (Lift (..))-import Prelude-  ( (.),-    Eq,-    Show,-  )--newtype SafeHashMap k a = SafeHashMap-  { unpackSafeHashMap :: HashMap k a-  }-  deriving-    ( Show,-      Eq,-      Functor,-      Foldable,-      Traversable-    )-  deriving newtype-    ( Collection a,-      Selectable k a-    )--instance (Lift a, Lift k, Eq k, Hashable k) => Lift (SafeHashMap k a) where-  lift (SafeHashMap x) = let ls = HM.toList x in [|SafeHashMap (HM.fromList ls)|]--#if MIN_VERSION_template_haskell(2,16,0)-  liftTyped (SafeHashMap x) = let ls = HM.toList x in [||SafeHashMap (HM.fromList ls)||]-#endif--instance (NameCollision a, KeyOf k a) => Merge (SafeHashMap k a) where-  merge ref (SafeHashMap x) (SafeHashMap y) = SafeHashMap <$> merge ref x y--instance (NameCollision a, KeyOf k a, Hashable k) => Listable a (SafeHashMap k a) where-  fromElems = fmap SafeHashMap . fromElems-  elems = elems . unpackSafeHashMap--unsafeFromValues :: (Eq k, KeyOf k a) => [a] -> SafeHashMap k a-unsafeFromValues = SafeHashMap . HM.fromList . fmap toPair--insert ::-  ( NameCollision a,-    KeyOf k a,-    Monad m,-    Failure ValidationErrors m-  ) =>-  a ->-  SafeHashMap k a ->-  m (SafeHashMap k a)-insert x = (<:> singleton x)
src/Data/Morpheus/Types/Internal/AST/Selection.hs view
@@ -29,10 +29,6 @@   ) where -import Control.Applicative (pure)-import Data.Foldable (all, foldr)-import Data.Functor ((<$>), fmap)-import Data.Maybe (Maybe (..), fromMaybe, isJust, maybe) import Data.Morpheus.Error.NameCollision   ( NameCollision (..),   )@@ -40,16 +36,22 @@   ( mutationIsNotDefined,     subscriptionIsNotDefined,   )+import Data.Morpheus.Ext.MergeSet+  ( MergeSet,+  )+import Data.Morpheus.Ext.OrdMap+  ( OrdMap,+  )+import Data.Morpheus.Ext.SemigroupM (SemigroupM (..)) import Data.Morpheus.Internal.Utils   ( Failure (..),     KeyOf (..),-    Merge (..),     elems,   ) import Data.Morpheus.Rendering.RenderGQL   ( RenderGQL (..),     Rendering,-    renderArguments,+    newline,     renderObject,     space,   )@@ -71,12 +73,8 @@ import Data.Morpheus.Types.Internal.AST.Fields   ( Arguments,     Directives,-  )-import Data.Morpheus.Types.Internal.AST.MergeSet-  ( MergeSet,-  )-import Data.Morpheus.Types.Internal.AST.OrdMap-  ( OrdMap,+    renderArgumentValues,+    renderDirectives,   ) import Data.Morpheus.Types.Internal.AST.Stage   ( RAW,@@ -95,15 +93,8 @@     Variable (..),     VariableDefinitions,   )-import Data.Semigroup ((<>)) import Language.Haskell.TH.Syntax (Lift (..))-import Prelude-  ( ($),-    (.),-    Eq (..),-    Show (..),-    otherwise,-  )+import Relude  data Fragment (stage :: Stage) = Fragment   { fragmentName :: FieldName,@@ -140,12 +131,15 @@   render (UnionSelection unionSets) = renderObject (elems unionSets)  instance-  Merge (SelectionSet s) =>-  Merge (SelectionContent s)+  ( Monad m,+    Failure ValidationErrors m,+    SemigroupM m (SelectionSet s)+  ) =>+  SemigroupM m (SelectionContent s)   where-  merge path (SelectionSet s1) (SelectionSet s2) = SelectionSet <$> merge path s1 s2-  merge path (UnionSelection u1) (UnionSelection u2) = UnionSelection <$> merge path u1 u2-  merge path oldC currentC+  mergeM path (SelectionSet s1) (SelectionSet s2) = SelectionSet <$> mergeM path s1 s2+  mergeM path (UnionSelection u1) (UnionSelection u2) = UnionSelection <$> mergeM path u1 u2+  mergeM path oldC currentC     | oldC == currentC = pure oldC     | otherwise =       failure@@ -174,7 +168,6 @@   render UnionTag {unionTagName, unionTagSelection} =     "... on "       <> render unionTagName-      <> space       <> renderSelectionSet unionTagSelection  mergeConflict :: [Ref] -> ValidationError -> ValidationErrors@@ -195,22 +188,22 @@         renderStart         xs -instance Merge UnionTag where-  merge path (UnionTag oldTag oldSel) (UnionTag _ currentSel) =-    UnionTag oldTag <$> merge path oldSel currentSel+instance (Monad m, Failure ValidationErrors m) => SemigroupM m UnionTag where+  mergeM path (UnionTag oldTag oldSel) (UnionTag _ currentSel) =+    UnionTag oldTag <$> mergeM path oldSel currentSel -type UnionSelection (s :: Stage) = MergeSet s UnionTag+type UnionSelection (s :: Stage) = MergeSet s TypeName UnionTag -type SelectionSet (s :: Stage) = MergeSet s (Selection s)+type SelectionSet (s :: Stage) = MergeSet s FieldName (Selection s)  data Selection (s :: Stage) where   Selection ::-    { selectionName :: FieldName,+    { selectionPosition :: Position,       selectionAlias :: Maybe FieldName,-      selectionPosition :: Position,+      selectionName :: FieldName,       selectionArguments :: Arguments s,-      selectionContent :: SelectionContent s,-      selectionDirectives :: Directives s+      selectionDirectives :: Directives s,+      selectionContent :: SelectionContent s     } ->     Selection s   InlineFragment :: Fragment RAW -> Selection RAW@@ -222,7 +215,8 @@       { ..       } =       render (fromMaybe selectionName selectionAlias)-        <> renderArguments (elems selectionArguments)+        <> renderArgumentValues selectionArguments+        <> renderDirectives selectionDirectives         <> render selectionContent  instance KeyOf FieldName (Selection s) where@@ -239,10 +233,13 @@     <> "fields to fetch both if this was intentional."  instance-  Merge (SelectionSet a) =>-  Merge (Selection a)+  ( Monad m,+    SemigroupM m (SelectionSet a),+    Failure ValidationErrors m+  ) =>+  SemigroupM m (Selection a)   where-  merge+  mergeM     path     old@Selection {selectionPosition = pos1}     current@Selection {selectionPosition = pos2} =@@ -250,7 +247,7 @@         selectionName <- mergeName         let currentPath = path <> [Ref selectionName pos1]         selectionArguments <- mergeArguments currentPath-        selectionContent <- merge currentPath (selectionContent old) (selectionContent current)+        selectionContent <- mergeM currentPath (selectionContent old) (selectionContent current)         pure $           Selection             { selectionAlias = mergeAlias,@@ -295,7 +292,7 @@                 { validationMessage = "they have differing arguments. " <> useDifferentAliases,                   validationLocations = [pos1, pos2]                 }-  merge path _ _ =+  mergeM path _ _ =     failure $       mergeConflict         path@@ -310,12 +307,12 @@ type DefaultValue = Maybe ResolvedValue  data Operation (s :: Stage) = Operation-  { operationName :: Maybe FieldName,+  { operationPosition :: Position,     operationType :: OperationType,+    operationName :: Maybe FieldName,     operationArguments :: VariableDefinitions s,-    operationSelection :: SelectionSet s,-    operationPosition :: Position,-    operationDirectives :: Directives s+    operationDirectives :: Directives s,+    operationSelection :: SelectionSet s   }   deriving (Show, Lift) @@ -324,13 +321,14 @@     Operation       { operationName,         operationType,+        operationDirectives,         operationSelection       } =       render operationType-        <> space-        <> render operationName-        <> space+        <> maybe "" ((space <>) . render) operationName+        <> renderDirectives operationDirectives         <> renderSelectionSet operationSelection+        <> newline  getOperationName :: Maybe FieldName -> TypeName getOperationName = maybe "AnonymousOperation" (TypeName . readName)
src/Data/Morpheus/Types/Internal/AST/TH.hs view
@@ -25,14 +25,7 @@ import Data.Morpheus.Types.Internal.AST.TypeSystem   ( DataEnumValue (..),   )-import Prelude-  ( (.),-    Bool (..),-    Show,-    all,-    fmap,-    null,-  )+import Relude  toHSFieldDefinition :: FieldDefinition cat s -> FieldDefinition cat s toHSFieldDefinition field@FieldDefinition {fieldType = tyRef@TypeRef {typeConName}} =
src/Data/Morpheus/Types/Internal/AST/TypeCategory.hs view
@@ -22,13 +22,12 @@   ) where -import Data.Maybe (Maybe (..)) import Data.Morpheus.Types.Internal.AST.Base   ( FALSE,     TRUE,   ) import Data.Morpheus.Types.Internal.AST.Stage (Stage)-import Prelude (Bool (..))+import Relude  data TypeCategory   = IN
src/Data/Morpheus/Types/Internal/AST/TypeSystem.hs view
@@ -51,44 +51,46 @@     typed,     possibleTypes,     possibleInterfaceTypes,-    isTypeDefined,     safeDefineType,+    defineSchemaWith,   ) where  -- MORPHEUS--import Control.Applicative ((<|>), Applicative (..))-import Control.Monad (Monad (..), foldM)-import Data.Either (Either (..))-import Data.Foldable (concatMap)-import Data.Functor ((<$>), fmap)-import Data.List (elem, filter, find, notElem)-import Data.Maybe (Maybe (..), catMaybes, mapMaybe, maybe)+import Control.Monad (foldM) import Data.Morpheus.Error.NameCollision   ( NameCollision (..),   )-import Data.Morpheus.Internal.Utils+import Data.Morpheus.Ext.OrdMap+  ( OrdMap,+  )+import Data.Morpheus.Ext.SafeHashMap+  ( SafeHashMap,+    insert,+  )+import Data.Morpheus.Ext.SemigroupM   ( (<:>),-    Collection (..),+    SemigroupM (..),+  )+import Data.Morpheus.Internal.Utils+  ( Collection (..),+    Elems (..),     Failure (..),+    FromElems (..),     KeyOf (..),-    Listable (..),-    Merge (..),     Selectable (..),-    elems,   ) import Data.Morpheus.Rendering.RenderGQL   ( RenderGQL (..),     Rendering,+    intercalate,     newline,     renderEntry,     renderMembers,     renderObject,   ) import Data.Morpheus.Types.Internal.AST.Base-  ( DataFingerprint (..),-    Description,+  ( Description,     FieldName,     FieldName (..),     Msg (..),@@ -116,13 +118,6 @@     FieldsDefinition,     unsafeFromFields,   )-import Data.Morpheus.Types.Internal.AST.OrdMap-  ( OrdMap,-  )-import Data.Morpheus.Types.Internal.AST.SafeHashMap-  ( SafeHashMap,-    insert,-  ) import Data.Morpheus.Types.Internal.AST.Stage   ( CONST,     Stage,@@ -145,19 +140,14 @@ import Data.Morpheus.Types.Internal.AST.Value   ( Value (..),   )-import Data.Semigroup (Semigroup (..))-import Data.Text (intercalate) import Instances.TH.Lift () import Language.Haskell.TH.Syntax (Lift (..))-import Prelude-  ( ($),-    (.),-    Bool (..),-    Eq (..),-    Show (..),-    flip,-    otherwise,+import Relude hiding+  ( empty,+    intercalate,+    show,   )+import Prelude (Show (..))  type DataEnum s = [DataEnumValue s] @@ -216,8 +206,8 @@  -- ENUM VALUE data DataEnumValue s = DataEnumValue-  { enumName :: TypeName,-    enumDescription :: Maybe Description,+  { enumDescription :: Maybe Description,+    enumName :: TypeName,     enumDirectives :: [Directive s]   }   deriving (Show, Lift)@@ -242,8 +232,15 @@   }   deriving (Show, Lift) -instance Merge (Schema s) where-  merge _ s1 s2 =+instance+  ( Monad m,+    Failure ValidationErrors m+  ) =>+  SemigroupM+    m+    (Schema s)+  where+  mergeM _ s1 s2 =     Schema       <$> (types s1 <:> types s2)       <*> mergeOperation (query s1) (query s2)@@ -325,10 +322,17 @@ instance Selectable TypeName (TypeDefinition ANY s) (Schema s) where   selectOr fb f name lib = maybe fb f (lookupDataType name lib) -instance Listable (TypeDefinition ANY s) (Schema s) where+instance Elems (TypeDefinition ANY s) (Schema s) where   elems Schema {..} =     elems types       <> concatMap fromOperation [Just query, mutation, subscription]++instance+  ( Monad m,+    Failure ValidationErrors m+  ) =>+  FromElems m (TypeDefinition ANY s) (Schema s)+  where   fromElems types =     traverse3       (popByKey types)@@ -336,9 +340,9 @@         RootOperationTypeDefinition Mutation "Mutation",         RootOperationTypeDefinition Subscription "Subscription"       )-      >>= buildWith types+      >>= defineSchemaWith types -buildWith ::+defineSchemaWith ::   ( Monad f,     Failure ValidationErrors f   ) =>@@ -348,11 +352,11 @@     Maybe (TypeDefinition OBJECT s)   ) ->   f (Schema s)-buildWith oTypes (Just query, mutation, subscription) = do+defineSchemaWith oTypes (Just query, mutation, subscription) = do   let types = excludeTypes [Just query, mutation, subscription] oTypes   let schema = (initTypeLib query) {mutation, subscription}   foldM (flip safeDefineType) schema types-buildWith _ (Nothing, _, _) = failure ["Query root type must be provided." :: ValidationError]+defineSchemaWith _ (Nothing, _, _) = failure ["Query root type must be provided." :: ValidationError]  excludeTypes :: [Maybe (TypeDefinition c1 s)] -> [TypeDefinition c2 s] -> [TypeDefinition c2 s] excludeTypes exclusionTypes = filter ((`notElem` blacklist) . typeName)@@ -382,7 +386,7 @@   withDirectives     dirs     <$> ( traverse3 selectOp (Query, Mutation, Subscription)-            >>= buildWith types+            >>= defineSchemaWith types         )   where     selectOp op = selectOperation schemaDef op types@@ -434,9 +438,6 @@     <|> (subscription >>= isType name)     <|> selectOr Nothing Just name types -isTypeDefined :: TypeName -> Schema s -> Maybe DataFingerprint-isTypeDefined name lib = typeFingerprint <$> lookupDataType name lib- -- 3.4 Types : https://graphql.github.io/graphql-spec/June2018/#sec-Types ------------------------------------------------------------------------- -- TypeDefinition :@@ -448,9 +449,8 @@ --   InputObjectTypeDefinition  data TypeDefinition (a :: TypeCategory) (s :: Stage) = TypeDefinition-  { typeName :: TypeName,-    typeFingerprint :: DataFingerprint,-    typeDescription :: Maybe Description,+  { typeDescription :: Maybe Description,+    typeName :: TypeName,     typeDirectives :: Directives s,     typeContent :: TypeContent TRUE a s   }@@ -586,7 +586,6 @@   TypeDefinition     { typeName,       typeDescription = Nothing,-      typeFingerprint = DataFingerprint typeName [],       typeDirectives = [],       typeContent     }@@ -635,14 +634,13 @@   TypeDefinition cat s ->   Schema s ->   m (Schema s)-safeDefineType dt@TypeDefinition {typeName, typeContent = DataInputUnion enumKeys, typeFingerprint} lib = do+safeDefineType dt@TypeDefinition {typeName, typeContent = DataInputUnion enumKeys} lib = do   types <- insert unionTags (types lib) >>= insert (toAny dt)   pure lib {types}   where     unionTags =       TypeDefinition         { typeName = typeName <> "Tags",-          typeFingerprint,           typeDescription = Nothing,           typeDirectives = [],           typeContent = mkEnumContent (fmap memberName enumKeys)
src/Data/Morpheus/Types/Internal/AST/Value.hs view
@@ -34,9 +34,6 @@ where  -- MORPHEUS--import Control.Applicative (pure)-import Control.Monad.Fail (MonadFail (fail)) import qualified Data.Aeson as A   ( (.=),     FromJSON (..),@@ -45,22 +42,27 @@     object,     pairs,   )-import Data.Either (Either (..))-import Data.Foldable (foldl, foldl1, null)-import Data.Functor (fmap)+import Data.Foldable (foldl1) import qualified Data.HashMap.Lazy as M-  ( toList,-  )-import Data.Maybe (Maybe (..)) import Data.Morpheus.Error.NameCollision   ( NameCollision (..),   )+import Data.Morpheus.Ext.OrdMap+  ( OrdMap,+    unsafeFromList,+  ) import Data.Morpheus.Internal.Utils   ( KeyOf (..),     elems,     mapTuple,   )-import Data.Morpheus.Rendering.RenderGQL (RenderGQL (..))+import Data.Morpheus.Rendering.RenderGQL+  ( RenderGQL (..),+    fromText,+    renderGQL,+    renderInputSeq,+    space,+  ) import Data.Morpheus.Types.Internal.AST.Base   ( FieldName,     FieldName (..),@@ -72,10 +74,6 @@     ValidationError (..),     msgValidation,   )-import Data.Morpheus.Types.Internal.AST.OrdMap-  ( OrdMap,-    unsafeFromValues,-  ) import Data.Morpheus.Types.Internal.AST.Stage   ( CONST,     CONST_OR_VALID,@@ -87,26 +85,10 @@   ( Scientific,     floatingOrInteger,   )-import Data.Semigroup ((<>))-import Data.Text-  ( Text,-  ) import qualified Data.Vector as V-  ( toList,-  )-import GHC.Generics (Generic) import Instances.TH.Lift () import Language.Haskell.TH.Syntax (Lift (..))-import Prelude-  ( ($),-    (.),-    Bool,-    Eq,-    Float,-    Int,-    Show (..),-    otherwise,-  )+import Relude  -- | Primitive Values for GQLScalar: 'Int', 'Float', 'String', 'Boolean'. -- for performance reason type 'Text' represents GraphQl 'String' value@@ -155,9 +137,9 @@ deriving instance Eq (VariableContent a)  data Variable (stage :: Stage) = Variable-  { variableName :: FieldName,+  { variablePosition :: Position,+    variableName :: FieldName,     variableType :: TypeRef,-    variablePosition :: Position,     variableValue :: VariableContent (CONST_OR_VALID stage)   }   deriving (Show, Eq, Lift)@@ -194,7 +176,7 @@   deriving (Eq, Show)  instance RenderGQL (ObjectEntry a) where-  render (ObjectEntry (FieldName name) value) = name <> ": " <> render value+  render (ObjectEntry (FieldName name) value) = fromText name <> ": " <> render value  instance NameCollision (ObjectEntry s) where   nameCollision ObjectEntry {entryName} =@@ -222,27 +204,22 @@ deriving instance Lift (ObjectEntry a)  instance RenderGQL (Value a) where-  render (ResolvedVariable Ref {refName} _) =-    "$" <> readName refName-  render (VariableValue Ref {refName}) = "$" <> readName refName <> " "+  render (ResolvedVariable Ref {refName} _) = "$" <> render refName+  render (VariableValue Ref {refName}) = "$" <> render refName <> " "   render Null = "null"-  render (Enum x) = readTypeName x+  render (Enum x) = render x   render (Scalar x) = render x-  render (Object keys) = "{" <> foldl toEntry "" (elems keys) <> "}"-    where-      toEntry :: Text -> ObjectEntry a -> Text-      toEntry "" value = render value-      toEntry txt value = txt <> ", " <> render value-  render (List list) = "[" <> foldl toEntry "" list <> "]"+  render (Object xs) = "{" <> entries <> "}"     where-      toEntry :: Text -> Value a -> Text-      toEntry "" value = render value-      toEntry txt value = txt <> ", " <> render value+      entries+        | null (elems xs) = ""+        | otherwise = space <> renderInputSeq (elems xs) <> space+  render (List list) = "[" <> renderInputSeq list <> "]"  -- render = pack . BS.unpack . A.encode  instance Msg (Value a) where-  msg = msg . render+  msg = msg . renderGQL  instance A.ToJSON (Value a) where   toJSON (ResolvedVariable _ Variable {variableValue = ValidVariableValue x}) =@@ -308,6 +285,6 @@   gqlBoolean = Scalar . Boolean   gqlString = Scalar . String   gqlList = List-  gqlObject = Object . unsafeFromValues . fmap toEntry+  gqlObject = Object . unsafeFromList . fmap toEntry     where-      toEntry (key, value) = ObjectEntry key value+      toEntry (key, value) = (key, ObjectEntry key value)
src/Data/Morpheus/Types/Internal/Config.hs view
@@ -8,11 +8,7 @@   ) where -import Prelude-  ( Bool (..),-    Eq,-    Show,-  )+import Relude  data VALIDATION_MODE   = WITHOUT_VARIABLES
src/Data/Morpheus/Types/Internal/Resolving.hs view
@@ -3,15 +3,12 @@ {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Types.Internal.Resolving-  ( Event (..),-    Resolver,+  ( Resolver,     LiftOperation,     runRootResModel,     lift,-    SubEvent,     Eventless,     Failure (..),-    eventChannels,     ResponseEvent (..),     ResponseStream,     cleanEvents,@@ -40,20 +37,17 @@     mkString,     SubscriptionField (..),     getArguments,-    Channel (..),     ResolverState,     liftResolverState,     mkValue,     FieldResModel,+    sortErrors,+    EventHandler (..),   ) where -import Control.Applicative (pure)-import Control.Monad (Monad) import qualified Data.Aeson as A-import Data.Functor (fmap) import qualified Data.HashMap.Lazy as HM-import Data.Maybe (maybe) import Data.Morpheus.Internal.Utils   ( mapTuple,   )@@ -71,13 +65,7 @@ import qualified Data.Vector as V   ( toList,   )-import Prelude-  ( ($),-    (.),-    Bool,-    Float,-    Int,-  )+import Relude  mkString :: Token -> ResModel o e m mkString = ResScalar . String
src/Data/Morpheus/Types/Internal/Resolving/Core.hs view
@@ -16,13 +16,10 @@     cleanEvents,     PushEvents (..),     resultOr,+    sortErrors,   ) where -import Control.Applicative (Applicative (..), liftA2)-import Control.Monad (Monad (..))-import Control.Monad.Trans.Class (MonadTrans (..))-import Data.Functor ((<$>), Functor (..)) import Data.Morpheus.Internal.Utils   ( Failure (..),   )@@ -32,11 +29,7 @@     ValidationError (..),     toGQLError,   )-import Data.Semigroup ((<>))-import Prelude-  ( ($),-    (.),-  )+import Relude  type Eventless = Result () @@ -84,6 +77,10 @@ resultOr _ f (Success x _ _) = f x resultOr f _ (Failure e) = f e +sortErrors :: Result e a -> Result e a+sortErrors (Failure errors) = Failure (sortOn locations errors)+sortErrors x = x+ -- ResultT newtype ResultT event (m :: * -> *) a = ResultT   { runResultT :: m (Result event a)@@ -104,7 +101,7 @@         result2 <- runResultT (mFunc value1)         case result2 of           Failure errors -> pure $ Failure (errors <> w1)-          Success v2 w2 e2 -> return $ Success v2 (w1 <> w2) (e1 <> e2)+          Success v2 w2 e2 -> pure $ Success v2 (w1 <> w2) (e1 <> e2)  instance MonadTrans (ResultT event) where   lift = ResultT . fmap pure
src/Data/Morpheus/Types/Internal/Resolving/Event.hs view
@@ -1,32 +1,25 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-}-{-# LANGUAGE KindSignatures #-}-{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Types.Internal.Resolving.Event-  ( Event (..),-    Channel (..),-    eventChannels,+  ( EventHandler (..),+    ResponseEvent (..),   ) where -import Prelude-  ( Eq (..),-    fmap,+import Data.Morpheus.Types.IO+  ( GQLResponse,   ) --- Channel-data Channel (event :: *) where-  Channel :: a -> Channel (Event a c)--data Event e c = Event-  { channels :: [e],-    content :: c-  }--eventChannels :: Event e c -> [Channel (Event e c)]-eventChannels Event {channels} = fmap Channel channels+class EventHandler e where+  type Channel e+  getChannels :: e -> [Channel e] -instance (Eq ch) => Eq (Channel (Event ch con)) where-  Channel x == Channel y = x == y+data ResponseEvent event (m :: * -> *)+  = Publish event+  | Subscribe+      { subChannel :: Channel event,+        subRes :: event -> m GQLResponse+      }
src/Data/Morpheus/Types/Internal/Resolving/Resolver.hs view
@@ -14,16 +14,13 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Types.Internal.Resolving.Resolver-  ( Event (..),-    Resolver,+  ( Resolver,     LiftOperation,     lift,     subscribe,-    SubEvent,     ResponseEvent (..),     ResponseStream,     ObjectResModel (..),@@ -40,26 +37,15 @@   ) where -import Control.Applicative (Applicative (..))-import Control.Monad (Monad (..), join)-import Control.Monad.Fail (MonadFail (..))-import Control.Monad.IO.Class (MonadIO (..))-import Control.Monad.Reader (MonadReader (..), asks)-import Control.Monad.Trans.Class (MonadTrans (..))-import Control.Monad.Trans.Reader-  ( ReaderT (..),-    mapReaderT,-  )-import Data.Functor ((<$>), Functor (..))-import Data.HashMap.Lazy (HashMap)+import Control.Monad.Trans.Reader (mapReaderT) import qualified Data.HashMap.Lazy as HM-import Data.Maybe (Maybe (..), maybe) import Data.Morpheus.Error.Selection (subfieldsNotSelected)+import Data.Morpheus.Ext.SemigroupM (SemigroupM (..)) import Data.Morpheus.Internal.Utils-  ( SemigroupM (..),-    empty,+  ( empty,     keyOf,     selectOr,+    traverseCollection,   ) import Data.Morpheus.Types.IO   ( GQLResponse,@@ -68,7 +54,6 @@ import Data.Morpheus.Types.Internal.AST   ( Arguments,     FieldName,-    GQLErrors,     GQLValue (..),     InternalError,     MUTATION,@@ -93,9 +78,6 @@     msg,     toGQLError,   )-import Data.Morpheus.Types.Internal.AST.MergeSet-  ( toOrdMap,-  ) import Data.Morpheus.Types.Internal.Resolving.Core   ( Eventless,     Failure (..),@@ -106,8 +88,8 @@     mapEvent,   ) import Data.Morpheus.Types.Internal.Resolving.Event-  ( Channel (..),-    Event (..),+  ( EventHandler (..),+    ResponseEvent (..),   ) import Data.Morpheus.Types.Internal.Resolving.ResolverState   ( ResolverContext (..),@@ -120,28 +102,17 @@     runResolverStateT,     toResolverStateT,   )-import Data.Semigroup-  ( Semigroup (..),-  )-import Data.Traversable (traverse)-import Prelude-  ( ($),-    (.),-    Eq (..),-    Show (..),-    otherwise,+import Relude hiding+  ( Show,+    empty,+    show,   )+import Prelude (Show (..))  type WithOperation (o :: OperationType) = LiftOperation o  type ResponseStream event (m :: * -> *) = ResultT (ResponseEvent event m) m -data ResponseEvent event (m :: * -> *)-  = Publish event-  | Subscribe (SubEvent event m)--type SubEvent event m = Event (Channel event) (event -> m GQLResponse)- data SubscriptionField (a :: *) where   SubscriptionField ::     { channel :: forall e m v. a ~ Resolver SUBSCRIPTION e m v => Channel e,@@ -181,10 +152,6 @@   (ResolverM x) >>= m2 = ResolverM (x >>= runResolverM . m2)   (ResolverS res) >>= m2 = ResolverS (liftSubResolver m2 <$> res) -#if __GLASGOW_HASKELL__ < 808-  fail = failure . msg-# endif- liftSubResolver ::   (Monad m) =>   (t -> Resolver SUBSCRIPTION r m a) ->@@ -204,10 +171,7 @@   lift = packResolver . lift  -- Failure-instance (LiftOperation o, Monad m) => Failure Message (Resolver o e m) where-  failure = packResolver . failure--instance (LiftOperation o, Monad m) => Failure GQLErrors (Resolver o e m) where+instance (LiftOperation o, Monad m, Failure err (ResolverStateT e m)) => Failure err (Resolver o e m) where   failure = packResolver . failure  instance (Monad m, LiftOperation o) => MonadFail (Resolver o e m) where@@ -249,17 +213,16 @@   packResolver = ResolverS . pure . lift . clearStateResolverEvents  subscribe ::-  forall e channel cont m a.-  (Monad m, Event channel cont ~ e) =>-  channel ->+  (Monad m) =>+  Channel e ->   Resolver QUERY e m (e -> Resolver SUBSCRIPTION e m a) ->   SubscriptionField (Resolver SUBSCRIPTION e m a) subscribe ch res =-  SubscriptionField (Channel ch)+  SubscriptionField ch     $ ResolverS     $ fromSub <$> runResolverQ res   where-    fromSub :: (e -> Resolver SUBSCRIPTION e m a) -> ReaderT e (ResolverStateT () m) a+    fromSub :: Monad m => (e -> Resolver SUBSCRIPTION e m a) -> ReaderT e (ResolverStateT () m) a     fromSub f = join (ReaderT (runResolverS . f))  withArguments ::@@ -311,7 +274,7 @@   ResModel o e m ->   Resolver o e m ValidValue resolveObject selectionSet (ResObject drv@ObjectResModel {__typename}) =-  Object . toOrdMap <$> traverse resolver selectionSet+  Object <$> traverseCollection resolver selectionSet   where     resolver :: Selection VALID -> Resolver o e m (ObjectEntry VALID)     resolver currentSelection =@@ -385,7 +348,7 @@   where     handle = do       channel <- channelGenerator currentSelection-      pure $ Subscribe (Event [channel] res)+      pure $ Subscribe channel res subscriptionEvents ctx Nothing _ = failure [resolverFailureMessage ctx "channel Resolver is not defined"]  -- Resolver Models -------------------------------------------------------------------
src/Data/Morpheus/Types/Internal/Resolving/ResolverState.hs view
@@ -13,7 +13,6 @@ {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-}-{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Types.Internal.Resolving.ResolverState@@ -29,29 +28,22 @@   ) where -import Control.Applicative (Applicative (..))-import Control.Monad (Monad (..))-import Control.Monad.Reader (MonadReader (..), asks)-import Control.Monad.Trans.Class (MonadTrans (..))-import Control.Monad.Trans.Reader-  ( ReaderT (..),-    mapReaderT,-  )-import Data.Functor (Functor (..))-import Data.Functor.Identity (Identity (..))+import Control.Monad.Trans.Reader (mapReaderT) import Data.Morpheus.Rendering.RenderGQL   ( RenderGQL (..),+    renderGQL,   ) import Data.Morpheus.Types.Internal.AST   ( GQLError (..),     GQLErrors,-    InternalError,+    InternalError (..),     Message,     Operation,     Schema,     Selection (..),     TypeName,     VALID,+    ValidationError (..),     msg,   ) import Data.Morpheus.Types.Internal.Config (Config (..))@@ -63,17 +55,7 @@     ResultT (..),     cleanEvents,   )-import Data.Semigroup-  ( Semigroup (..),-  )-import Prelude-  ( ($),-    (.),-    Bool (..),-    Int,-    Show (..),-    id,-  )+import Relude  data ResolverContext = ResolverContext   { currentSelection :: Selection VALID,@@ -119,6 +101,11 @@     ctx <- asks id     failure [renderInternalResolverError ctx message] +instance Monad m => Failure [ValidationError] (ResolverStateT e m) where+  failure messages = do+    ctx <- asks id+    failure $ fmap (resolverFailureMessage ctx . validationMessage) messages+ instance (Monad m) => Failure GQLErrors (ResolverStateT e m) where   failure = ResolverStateT . lift . failure @@ -196,7 +183,7 @@ renderSection label content =   "\n\n" <> label <> ":\n" <> line     <> "\n\n"-    <> msg (render content)+    <> msg (renderGQL content)     <> "\n\n"   where     line = stimes (50 :: Int) "-"
src/Data/Morpheus/Types/Internal/Stitching.hs view
@@ -11,24 +11,23 @@   ) where -import Control.Applicative (Applicative (..))-import Control.Monad (Monad (..))-import Data.Functor ((<$>))-import Data.Maybe (Maybe (..)) import Data.Morpheus.Error.NameCollision (NameCollision (..))+import Data.Morpheus.Ext.Map+  ( resolveWith,+    runResolutionT,+  )+import qualified Data.Morpheus.Ext.OrdMap as OM+import qualified Data.Morpheus.Ext.SafeHashMap as SHM+import Data.Morpheus.Ext.SemigroupM (SemigroupM (..)) import Data.Morpheus.Internal.Utils   ( Failure (..),-    SemigroupM (..),     mergeT,     prop,-    resolveWith,-    runResolutionT,   ) import Data.Morpheus.Types.Internal.AST   ( Directive,     DirectiveDefinition,     FieldDefinition,-    Fields (..),     FieldsDefinition,     Schema (..),     TRUE,@@ -37,17 +36,9 @@     TypeLib,     ValidationErrors,   )-import qualified Data.Morpheus.Types.Internal.AST.OrdMap as OM (unsafeFromValues)-import qualified Data.Morpheus.Types.Internal.AST.SafeHashMap as SHM (unsafeFromValues) import Data.Morpheus.Types.Internal.Resolving (RootResModel) import qualified Data.Morpheus.Types.Internal.Resolving as R (RootResModel (..))-import Data.Semigroup (Semigroup (..))-import Prelude-  ( ($),-    (.),-    Eq (..),-    otherwise,-  )+import Relude hiding (optional)  equal :: (Eq a, Applicative m, Failure ValidationErrors m) => ValidationErrors -> a -> a -> m a equal err p1 p2@@ -76,7 +67,7 @@       <*> prop stitch directiveDefinitions s1 s2  instance Stitching (TypeLib s) where-  stitch x y = runResolutionT (mergeT x y) SHM.unsafeFromValues (resolveWith stitch)+  stitch x y = runResolutionT (mergeT x y) SHM.unsafeFromList (resolveWith stitch)  instance Stitching [DirectiveDefinition s] where   stitch = concatM@@ -96,18 +87,16 @@   m (TypeDefinition c s) stitchOperation x y =   TypeDefinition-    <$> prop fstM typeName x y-    <*> prop fstM typeFingerprint x y-    <*> prop concatM typeDescription x y+    <$> prop concatM typeDescription x y+    <*> prop fstM typeName x y     <*> prop stitch typeDirectives x y     <*> prop stitch typeContent x y  instance Stitching (TypeDefinition cat s) where   stitch x y =     TypeDefinition-      <$> prop (equal [nameCollision y]) typeName x y-      <*> prop (equal [nameCollision y]) typeFingerprint x y-      <*> prop concatM typeDescription x y+      <$> prop concatM typeDescription x y+      <*> prop (equal [nameCollision y]) typeName x y       <*> prop stitch typeDirectives x y       <*> prop stitch typeContent x y @@ -117,7 +106,7 @@   stitch _ _ = failure (["Schema Stitching works only for objects"] :: ValidationErrors)  instance Stitching (FieldsDefinition cat s) where-  stitch (Fields x) (Fields y) = Fields <$> runResolutionT (mergeT x y) OM.unsafeFromValues (resolveWith stitch)+  stitch x y = runResolutionT (mergeT x y) OM.unsafeFromList (resolveWith stitch)  instance Stitching (FieldDefinition cat s) where   stitch old new
src/Data/Morpheus/Types/Internal/Validation.hs view
@@ -57,18 +57,6 @@   ) where --- MORPHEUS--import Control.Applicative (pure)-import Control.Monad ((>>=))-import Control.Monad.Trans.Reader-  ( ask,-  )-import Data.Either (Either)-import Data.Foldable (null)-import Data.Functor ((<$>), fmap)-import Data.List (filter)-import Data.Maybe (Maybe (..), fromMaybe, maybe) import Data.Morpheus.Internal.Utils   ( Failure (..),     KeyOf (..),@@ -152,14 +140,9 @@     withScope,     withScopeType,   )-import Data.Semigroup-  ( (<>),-  )-import Prelude-  ( ($),-    (.),-    not,-    otherwise,+import Relude hiding+  ( Constraint,+    asks,   )  getUnused :: (KeyOf k b, Selectable k a c) => c -> [b] -> [b]
src/Data/Morpheus/Types/Internal/Validation/Error.hs view
@@ -16,8 +16,6 @@   ) where --- MORPHEUS-import Data.Maybe (maybeToList) import Data.Morpheus.Error.Selection (unknownSelectionField) import Data.Morpheus.Types.Internal.AST   ( Argument (..),@@ -55,8 +53,7 @@     Target (..),     renderInputPrefix,   )-import Data.Semigroup ((<>))-import Prelude (($))+import Relude  class Unused ctx c where   unused :: ctx -> c -> ValidationError
src/Data/Morpheus/Types/Internal/Validation/Internal.hs view
@@ -20,12 +20,6 @@   ) where --- MORPHEUS--import Control.Applicative (Applicative, pure)-import Control.Monad ((>=>), Monad ((>>=)))-import Data.Functor ((<$>))-import Data.Maybe (Maybe (..), maybe) import Data.Morpheus.Internal.Utils   ( Failure (..),     selectBy,@@ -67,14 +61,7 @@     SelectionValidator,     askSchema,   )-import Data.Semigroup-  ( (<>),-  )-import Data.Traversable (traverse)-import Prelude-  ( ($),-    (.),-  )+import Relude  askType ::   Constraints m c cat s =>
src/Data/Morpheus/Types/Internal/Validation/SchemaValidator.hs view
@@ -26,11 +26,6 @@   ) where ---import Data.Morpheus.Error.Document.Interface (unknownInterface)---- MORPHEUS--import Control.Applicative (pure) import Data.Morpheus.Internal.Utils   ( Failure (..),   )@@ -51,15 +46,7 @@     renderField,     withContext,   )-import Data.Semigroup-  ( (<>),-    Semigroup (..),-  )-import Prelude-  ( (.),-    Show (..),-    const,-  )+import Relude hiding (local)  newtype TypeSystemContext c = TypeSystemContext   {local :: c}
src/Data/Morpheus/Types/Internal/Validation/Validator.hs view
@@ -56,25 +56,13 @@   ) where --- MORPHEUS--import Control.Applicative (Applicative)-import Control.Monad (Monad)-import Control.Monad.Reader (MonadReader (..))-import Control.Monad.Trans.Class (MonadTrans (..))-import Control.Monad.Trans.Reader-  ( ReaderT (..),-    withReaderT,-  )-import Data.Functor ((<$>), Functor (..))-import Data.Maybe (Maybe (..)) import Data.Morpheus.Error.Utils   ( validationErrorMessage,   ) import Data.Morpheus.Internal.Utils   ( Failure (..),   )-import Data.Morpheus.Rendering.RenderGQL (RenderGQL (..))+import Data.Morpheus.Rendering.RenderGQL (RenderGQL (..), renderGQL) import Data.Morpheus.Types.Internal.AST   ( Directive (..),     FieldDefinition (..),@@ -109,17 +97,10 @@ import Data.Morpheus.Types.Internal.Resolving   ( Eventless,   )-import Data.Semigroup-  ( (<>),-    stimes,-  )-import Prelude-  ( ($),-    (.),-    Bool,-    Int,-    Show,-    otherwise,+import Relude hiding+  ( Constraint,+    asks,+    get,   )  data Prop = Prop@@ -528,18 +509,18 @@     renderSection       "Scope"       ( "referenced by type "-          <> render currentTypeName+          <> renderGQL currentTypeName           <> " of kind "-          <> render currentTypeKind+          <> renderGQL currentTypeKind           <> " in field "-          <> render fieldname+          <> renderGQL fieldname       )  renderSection :: RenderGQL a => Message -> a -> Message renderSection label content =   "\n\n" <> label <> ":\n" <> line     <> "\n\n"-    <> msg (render content)+    <> msg (renderGQL content)     <> "\n\n"   where     line = stimes (50 :: Int) "-"
src/Data/Morpheus/Types/SelectionTree.hs view
@@ -8,9 +8,6 @@ -- Description : A simple interface for Morpheus internal Selection Set's representation. module Data.Morpheus.Types.SelectionTree where -import Data.Bool (Bool (..))-import Data.Foldable (concatMap)-import Data.Monoid (mempty) import Data.Morpheus.Internal.Utils (elems, keyOf) import Data.Morpheus.Types.Internal.AST   ( FieldName (..),@@ -20,11 +17,8 @@     UnionTag (..),     VALID,   )-import Data.String-  ( IsString (..),-  ) import Data.Text (unpack)-import Prelude ((.))+import Relude  -- | The 'SelectionTree' instance is a simple interface for interacting -- with morpheus's internal AST while keeping the ability to safely change the concrete
src/Data/Morpheus/Validation/Document/Validation.hs view
@@ -18,24 +18,19 @@   ) where -import Control.Applicative ((*>), (<*>), Applicative (..), pure)-import Control.Monad ((>=>))-import Control.Monad.Reader (asks)-import Data.Foldable (traverse_)-import Data.Functor ((<$>), fmap)-import Data.Maybe (Maybe (..), maybe) import Data.Morpheus.Error.Document.Interface   ( ImplementsError (..),     PartialImplements (..),   )-import Data.Morpheus.Internal.Utils+import Data.Morpheus.Ext.SemigroupM   ( (<:>),-    KeyOf (..),+  )+import Data.Morpheus.Internal.Utils+  ( KeyOf (..),     Selectable (..),     elems,     empty,     failure,-    ordTraverse,   ) import Data.Morpheus.Schema.Schema   ( internalSchema,@@ -98,17 +93,7 @@ import Data.Morpheus.Validation.Internal.Value   ( validateInputByTypeRef,   )-import Data.Proxy (Proxy (..))-import Data.Traversable (traverse)-import Prelude-  ( ($),-    (&&),-    (.),-    (==),-    Bool,-    not,-    otherwise,-  )+import Relude hiding (empty, local)  class ValidateSchema s where   validateSchema :: Bool -> Config -> Schema s -> Eventless (Schema VALID)@@ -165,16 +150,14 @@ validateType   TypeDefinition     { typeName,-      typeFingerprint,       typeDescription,       typeDirectives,       typeContent     } =     inType typeName $       TypeDefinition-        typeName-        typeFingerprint         typeDescription+        typeName         <$> validateDirectives (typeDirectiveLocation typeContent) typeDirectives         <*> validateTypeContent typeContent @@ -195,24 +178,24 @@     { objectImplements,       objectFields     } =-    do-      validateImplements objectImplements objectFields-      DataObject objectImplements <$> ordTraverse validateField objectFields+    DataObject+      <$> validateImplements objectImplements objectFields+      <*> traverse validateField objectFields validateTypeContent DataInputObject {inputObjectFields} =-  DataInputObject <$> ordTraverse validateField inputObjectFields+  DataInputObject <$> traverse validateField inputObjectFields validateTypeContent DataScalar {..} = pure DataScalar {..} validateTypeContent DataEnum {enumMembers} = DataEnum <$> traverse validateEnumMember enumMembers validateTypeContent DataInputUnion {inputUnionMembers} =   DataInputUnion <$> traverse validateUnionMember inputUnionMembers validateTypeContent DataUnion {unionMembers} = DataUnion <$> traverse validateUnionMember unionMembers validateTypeContent (DataInterface fields) =-  DataInterface <$> ordTraverse validateField fields+  DataInterface <$> traverse validateField fields  validateEnumMember ::   DataEnumValue CONST -> SchemaValidator TypeName (DataEnumValue VALID)-validateEnumMember DataEnumValue {enumDirectives = directives, ..} = do-  enumDirectives <- validateDirectives ENUM_VALUE directives-  pure DataEnumValue {..}+validateEnumMember DataEnumValue {enumDirectives = directives, ..} =+  DataEnumValue enumDescription enumName+    <$> validateDirectives ENUM_VALUE directives  validateUnionMember ::   UnionMember cat CONST -> SchemaValidator TypeName (UnionMember cat VALID)@@ -236,11 +219,11 @@   inField     fieldName     ( FieldDefinition-        fieldName         fieldDescription+        fieldName         fieldType-        <$> validateDirectives (directiveLocation (Proxy @cat)) fieldDirectives-          <*> validateOptional (checkFieldContent field) fieldContent+        <$> validateOptional (checkFieldContent field) fieldContent+        <*> validateDirectives (directiveLocation (Proxy @cat)) fieldDirectives     )  checkFieldContent ::@@ -260,7 +243,7 @@   SchemaValidator (TypeName, FieldName) (ArgumentsDefinition VALID) validateArgumentsDefinition (ArgumentsDefinition meta args) =   ArgumentsDefinition meta-    <$> ordTraverse+    <$> traverse       validateArgumentDefinition       args @@ -269,11 +252,11 @@   SchemaValidator (TypeName, FieldName) (ArgumentDefinition VALID) validateArgumentDefinition FieldDefinition {..} =   FieldDefinition-    fieldName     fieldDescription+    fieldName     fieldType-    <$> validateDirectives ARGUMENT_DEFINITION fieldDirectives-    <*> validateOptional (validateArgumentDefaultValue fieldName fieldType) fieldContent+    <$> validateOptional (validateArgumentDefaultValue fieldName fieldType) fieldContent+    <*> validateDirectives ARGUMENT_DEFINITION fieldDirectives  validateArgumentDefaultValue ::   FieldName ->@@ -294,10 +277,12 @@ validateImplements ::   [TypeName] ->   FieldsDefinition OUT CONST ->-  SchemaValidator TypeName ()-validateImplements objectImplements objectFields = do-  interface <- traverse selectInterface objectImplements-  traverse_ (mustBeSubset objectFields) interface+  SchemaValidator TypeName [TypeName]+validateImplements objectImplements objectFields =+  ( traverse selectInterface objectImplements+      >>= traverse_ (mustBeSubset objectFields)+  )+    $> objectImplements  mustBeSubset ::   FieldsDefinition OUT CONST ->@@ -318,9 +303,8 @@       fieldDirectives     } =     inField fieldName $-      do-        _ <- validateDirectives FIELD_DEFINITION fieldDirectives-        selectOr err (isSuptype interfaceField) fieldName objFields+      validateDirectives FIELD_DEFINITION fieldDirectives+        *> selectOr err (isSuptype interfaceField) fieldName objFields     where       err = failImplements Missing @@ -401,7 +385,6 @@ validateDefaultValue typeRef =   validateInputByTypeRef (Typed typeRef) --- TODO: validate directives validateDirectiveDefinition :: DirectiveDefinition CONST -> SchemaValidator () (DirectiveDefinition VALID) validateDirectiveDefinition DirectiveDefinition {directiveDefinitionArgs = args, ..} =   inType "Directive" $ inField directiveDefinitionName $ do
src/Data/Morpheus/Validation/Internal/Arguments.hs view
@@ -18,14 +18,8 @@   ) where -import Control.Applicative ((*>), pure)-import Control.Monad ((>=>), (>>=))-import Data.Functor ((<$>), fmap)-import Data.Maybe (fromMaybe, maybe) import Data.Morpheus.Internal.Utils   ( empty,-    ordTraverse,-    ordTraverse_,   ) import Data.Morpheus.Types.Internal.AST   ( Argument (..),@@ -66,12 +60,7 @@   ( ValidateWithDefault,     validateInputByTypeRef,   )-import Data.Traversable (traverse)-import Prelude-  ( ($),-    (.),-    flip,-  )+import Relude hiding (empty)  type VariableConstraints ctx =   ( GetWith ctx (VariableDefinitions VALID),@@ -103,7 +92,9 @@ toArgument :: FieldDefinition IN s -> Value schemaS -> Validator schemaStage ctx (Argument schemaS) toArgument   FieldDefinition {fieldName}-  value = flip (Argument fieldName) value . fromMaybe (Position 0 0) <$> asksScope position+  value = mkArg . fromMaybe (Position 0 0) <$> asksScope position+    where+      mkArg pos = Argument pos fieldName value  validateArgumentValue ::   (ValidateWithDefault ctx schemaS valueS) =>@@ -116,8 +107,8 @@     withPosition argumentPosition       $ startInput (SourceArgument argumentName)       $ Argument-        argumentName         argumentPosition+        argumentName         <$> validateInputByTypeRef (typed fieldType field) argumentValue  validateFieldArguments ::@@ -151,9 +142,9 @@   Arguments s ->   Validator schemaStage ctx (Arguments VALID) validateArguments checkUnknown argsDef rawArgs = do-  args <- ordTraverse resolve rawArgs-  ordTraverse_ checkUnknown args-    *> ordTraverse (validateArgument args) (arguments argsDef)+  args <- traverse resolve rawArgs+  traverse_ checkUnknown args+    *> traverse (validateArgument args) (arguments argsDef)  class Resolve f s ctx where   resolve :: f s -> Validator schemaS ctx (f CONST)
src/Data/Morpheus/Validation/Internal/Directive.hs view
@@ -9,7 +9,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Validation.Internal.Directive@@ -18,10 +17,6 @@   ) where -import Control.Applicative ((*>), pure)-import Control.Monad ((>>=))-import Data.Functor ((<$>))-import Data.List (elem) import Data.Morpheus.Error.Utils   ( validationErrorMessage,   )@@ -54,16 +49,7 @@   ( ArgumentsConstraints,     validateDirectiveArguments,   )-import Data.Semigroup ((<>))-import Data.Traversable (traverse)-import Prelude-  ( ($),-    (&&),-    (==),-    Bool (..),-    Maybe (..),-    otherwise,-  )+import Relude  validateDirectives ::   ArgumentsConstraints ctx schemaS s =>@@ -81,7 +67,7 @@   withDirective directive $ do     Schema {directiveDefinitions} <- askSchema     directiveDef <- selectKnown directive directiveDefinitions-    Directive directiveName directivePosition+    Directive directivePosition directiveName       <$> ( validateDirectiveLocation location directive directiveDef               *> validateDirectiveArguments directiveDef directiveArgs           )
src/Data/Morpheus/Validation/Internal/Value.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE LambdaCase #-}@@ -13,18 +14,11 @@   ) where -import Control.Applicative ((*>), pure)-import Data.Either (Either (..))-import Data.Function ((&))-import Data.Functor ((<$>), fmap)-import Data.List (any, elem)-import Data.Maybe (Maybe (..), maybe) import Data.Morpheus.Error.Input (typeViolation) import Data.Morpheus.Error.Variable (incompatibleVariableType) import Data.Morpheus.Internal.Utils   ( Failure (..),-    ordTraverse_,-    traverseCollection,+    fromElems,   ) import Data.Morpheus.Types.Internal.AST   ( CONST,@@ -49,6 +43,7 @@     UnionMember (..),     VALID,     ValidValue,+    ValidationErrors,     Value (..),     Variable (..),     Variable (..),@@ -62,9 +57,6 @@     untyped,     withPosition,   )-import Data.Morpheus.Types.Internal.AST.OrdMap-  ( unsafeFromValues,-  ) import Data.Morpheus.Types.Internal.Validation   ( InputContext,     InputSource (..),@@ -82,20 +74,7 @@     selectWithDefaultValue,     withScopeType,   )-import Data.Semigroup ((<>))-import Data.Traversable (traverse)-import Prelude-  ( ($),-    (&&),-    (.),-    Bool (..),-    Eq (..),-    const,-    fst,-    id,-    not,-    otherwise,-  )+import Relude  violation ::   Maybe Message ->@@ -224,7 +203,7 @@ validatInputUnion inputUnion rawFields =   case constraintInputUnion inputUnion rawFields of     Left message -> violation (Just message) (Object rawFields)-    Right (UnionMember {memberName}, Nothing) -> pure (mkInputObject memberName [])+    Right (UnionMember {memberName}, Nothing) -> mkInputObject memberName []     Right (name, Just value) -> validatInputUnionMember name value  validatInputUnionMember ::@@ -235,10 +214,10 @@ validatInputUnionMember member@UnionMember {memberName} value = do   inputDef <- fst <$> askTypeMember member   validValue <- validateInputByType [TypeMaybe] inputDef value-  pure $ mkInputObject memberName [ObjectEntry (toFieldName memberName) validValue]+  mkInputObject memberName [ObjectEntry (toFieldName memberName) validValue] -mkInputObject :: TypeName -> [ObjectEntry s] -> Value s-mkInputObject name xs = Object $ unsafeFromValues $ ObjectEntry "__typename" (Enum name) : xs+mkInputObject :: (Monad m, Failure ValidationErrors m) => TypeName -> [ObjectEntry s] -> m (Value s)+mkInputObject name xs = Object <$> fromElems (ObjectEntry "__typename" (Enum name) : xs)  -- INUT Object validateInputObject ::@@ -247,8 +226,8 @@   Object valueS ->   InputValidator schemaS ctx (Object VALID) validateInputObject fieldsDef object =-  ordTraverse_ (`selectKnown` fieldsDef) object-    *> traverseCollection (validateWithDefault object) fieldsDef+  traverse_ (`selectKnown` fieldsDef) object+    *> traverse (validateWithDefault object) fieldsDef  class ValidateWithDefault c schemaS s where   validateWithDefault ::
src/Data/Morpheus/Validation/Query/Fragment.hs view
@@ -18,12 +18,6 @@   ) where -import Control.Applicative ((<*>), pure)-import Control.Monad ((>>=))-import Data.Functor ((<$>))-import Data.List (elem)-import Data.Maybe (Maybe (..))--- MORPHEUS import Data.Morpheus.Error.Fragment   ( cannotBeSpreadOnType,   )@@ -57,11 +51,7 @@     constraint,     selectKnown,   )-import Data.Traversable (traverse)-import Prelude-  ( ($),-    otherwise,-  )+import Relude  class ResolveFragment (s :: Stage) where   resolveValidFragment ::
src/Data/Morpheus/Validation/Query/FragmentPreconditions.hs view
@@ -12,11 +12,6 @@   ) where -import Control.Applicative ((*>))-import Control.Monad ((>>=))-import Data.Foldable (concatMap)-import Data.Functor ((<$>), fmap)--- MORPHEUS import Data.Morpheus.Error.Fragment   ( cannotSpreadWithinItself,   )@@ -45,10 +40,7 @@     askFragments,     checkUnused,   )-import Data.Semigroup ((<>))-import Prelude-  ( (.),-  )+import Relude  checkUnusedFragments :: SelectionSet RAW -> BaseValidator () checkUnusedFragments selectionSet = do
src/Data/Morpheus/Validation/Query/Selection.hs view
@@ -14,15 +14,13 @@   ) where -import Control.Applicative ((<*>), pure)-import Data.Foldable (null)-import Data.Functor ((<$>), fmap)-import Data.List (filter)-import Data.Maybe (Maybe (..), maybe) import Data.Morpheus.Error.Selection   ( hasNoSubfields,     subfieldsNotSelected,   )+import Data.Morpheus.Ext.SemigroupM+  ( concatTraverse,+  ) import Data.Morpheus.Internal.Utils   ( Failure (..),     elems,@@ -60,9 +58,6 @@     typed,     withPosition,   )-import Data.Morpheus.Types.Internal.AST.MergeSet-  ( concatTraverse,-  ) import Data.Morpheus.Types.Internal.Validation   ( FragmentValidator,     SelectionValidator,@@ -89,16 +84,7 @@   ( validateInterfaceSelection,     validateUnionSelection,   )-import Data.Semigroup ((<>))-import Prelude-  ( ($),-    (&&),-    (.),-    Eq (..),-    const,-    not,-    otherwise,-  )+import Relude hiding (empty)  selectionsWitoutTypename :: SelectionSet VALID -> [Selection VALID] selectionsWitoutTypename = filter (("__typename" /=) . keyOf) . elems
src/Data/Morpheus/Validation/Query/UnionSelection.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Validation.Query.UnionSelection   ( validateUnionSelection,@@ -13,12 +14,13 @@   ) where -import Control.Monad ((>=>))-import Data.Maybe (fromMaybe, isJust)--- MORPHEUS-import Data.Morpheus.Internal.Utils+import Data.List (lookup)+import Data.Morpheus.Ext.SemigroupM   ( (<:>),-    elems,+    join,+  )+import Data.Morpheus.Internal.Utils+  ( elems,     empty,     fromElems,     singleton,@@ -41,9 +43,6 @@     mkType,     toCategory,   )-import qualified Data.Morpheus.Types.Internal.AST.MergeSet as MS-  ( join,-  ) import Data.Morpheus.Types.Internal.Validation   ( FragmentValidator,     Scope (..),@@ -55,6 +54,7 @@   ( ResolveFragment (resolveValidFragment),     castFragmentType,   )+import Relude hiding (empty, join)  -- returns all Fragments used for Possible Types splitFragment ::@@ -104,8 +104,7 @@   [TypeDefinition IMPLEMENTABLE VALID] ->   [UnionTag] ->   [(TypeName, [SelectionSet VALID])]-tagUnionFragments types fragments =-  filter notEmpty (map categorizeType types)+tagUnionFragments types fragments = filter notEmpty (categorizeType <$> types)   where     notEmpty = not . null . snd     categorizeType ::@@ -140,7 +139,7 @@   traverse joinCluster     >=> fmap UnionSelection . fromElems   where-    joinCluster (typeName, fragmets) = UnionTag typeName <$> MS.join (selSet : fragmets)+    joinCluster (typeName, fragmets) = UnionTag typeName <$> join (selSet : fragmets)  withTypename ::   SelectionSet VALID ->
src/Data/Morpheus/Validation/Query/Validation.hs view
@@ -3,6 +3,7 @@ {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE NoImplicitPrelude #-}  module Data.Morpheus.Validation.Query.Validation   ( validateRequest,@@ -41,6 +42,10 @@   ) import Data.Morpheus.Validation.Query.Variable   ( resolveOperationVariables,+  )+import Relude hiding+  ( empty,+    fromList,   )  validateRequest ::
src/Data/Morpheus/Validation/Query/Variable.hs view
@@ -9,14 +9,7 @@   ) where -import Control.Applicative ((*>), pure)-import Control.Monad (Monad ((>>=)))-import Data.Foldable (concat, concatMap)-import Data.Functor ((<$>), fmap) import qualified Data.HashMap.Lazy as M-  ( lookup,-  )-import Data.Maybe (Maybe (..), maybe) import Data.Morpheus.Error.Variable (uninitializedVariable) import Data.Morpheus.Internal.Utils   ( Failure (..),@@ -68,19 +61,7 @@ import Data.Morpheus.Validation.Internal.Value   ( validateInputByType,   )-import Data.Semigroup ((<>))-import Data.Traversable-  ( traverse,-  )-import Prelude-  ( ($),-    (&&),-    (.),-    Bool (..),-    Eq (..),-    not,-    otherwise,-  )+import Relude  class ExploreRefs a where   exploreRefs :: a -> [Ref]@@ -108,10 +89,11 @@     exploreSelectionContent (SelectionSet selSet) = mapSelection searchRefs selSet     ---------------------------------------     searchRefs :: Selection RAW -> BaseValidator [Ref]-    searchRefs Selection {selectionArguments, selectionDirectives, selectionContent} = do-      let directiveRefs = concatMap exploreRefs selectionDirectives-      contentRefs <- exploreSelectionContent selectionContent-      pure $ directiveRefs <> contentRefs <> concatMap exploreRefs selectionArguments+    searchRefs Selection {selectionArguments, selectionDirectives, selectionContent} =+      ((directiveRefs <> argumentRefs) <>) <$> exploreSelectionContent selectionContent+      where+        directiveRefs = concatMap exploreRefs selectionDirectives+        argumentRefs = concatMap exploreRefs selectionArguments     searchRefs (InlineFragment Fragment {fragmentSelection, fragmentDirectives}) =       (concatMap exploreRefs fragmentDirectives <>)         <$> mapSelection searchRefs fragmentSelection
test/Spec.hs view
@@ -6,6 +6,7 @@   ) where +import Relude import Test.Tasty   ( defaultMain,     testGroup,@@ -14,13 +15,10 @@   ( apiTest,   ) import qualified Utils.MergeSchema as MergeSchema+import qualified Utils.Rendering as Rendering import Utils.Schema   ( testSchema,   )-import Prelude-  ( ($),-    IO,-  )  main :: IO () main = do@@ -42,5 +40,27 @@             "on-interface-type-casting",             "on-interface-type-casting-inline",             "on-interface-fail-without-casting"+          ],+        Rendering.test+          "rendering/simple"+          [ "simple",+            "nested",+            "query",+            "mutation",+            "subscription",+            "directive"+          ],+        Rendering.test+          "rendering/union"+          [ "interface",+            "union"+          ],+        Rendering.test+          "rendering/variable"+          [ "simple",+            "input",+            "enum",+            "list",+            "include-exclude"           ]       ]
test/Utils/Api.hs view
@@ -8,13 +8,8 @@   ) where -import Control.Applicative (pure) import qualified Data.Aeson as A import Data.Aeson (decode, encode)-import qualified Data.ByteString.Lazy.Char8 as LB (unpack)-import Data.Functor ((<$>), fmap)-import Data.Functor.Identity (Identity (..))-import Data.Maybe (Maybe (..)) import Data.Morpheus.Core (mkApp, runAppStream) import Data.Morpheus.Types.IO import Data.Morpheus.Types.Internal.AST@@ -26,36 +21,27 @@   ( ResponseStream,     ResultT (..),   )-import Data.Semigroup ((<>)) import Data.Text (unpack)+import Relude import Test.Tasty   ( TestTree,     testGroup,   ) import Test.Tasty.HUnit-  ( assertFailure,-    testCase,+  ( testCase,   ) import Utils.Utils   ( assertValidSchema,+    caseFailure,     expectedResponse,     getRequest,     getResolvers,   )-import Prelude-  ( ($),-    (==),-    IO,-    otherwise,-  )  assertion :: A.Value -> ResponseStream e Identity (Value VALID) -> IO () assertion expected (ResultT (Identity actual))   | Just expected == decode actualValue = pure ()-  | otherwise =-    assertFailure $-      LB.unpack-        ("expected: \n\n " <> encode expected <> " \n\n but got: \n\n " <> actualValue)+  | otherwise = caseFailure (encode expected) actualValue   where     actualValue = encode (renderResponse actual) 
test/Utils/MergeSchema.hs view
@@ -8,15 +8,9 @@   ) where -import Control.Applicative (pure)-import Control.Monad ((>>=))-import Control.Monad.Fail (fail) import Data.Aeson (decode, encode) import qualified Data.Aeson as A import qualified Data.ByteString.Lazy as L (readFile)-import qualified Data.ByteString.Lazy.Char8 as LB (unpack)-import Data.Functor ((<$>), fmap)-import Data.Functor.Identity (Identity (..)) import Data.Morpheus.Core   ( App (..),     AppData (..),@@ -38,9 +32,8 @@     ResultT (..),     resultOr,   )-import Data.Semigroup ((<>)) import Data.Text (unpack)-import Data.Traversable (traverse)+import Relude import Test.Tasty   ( TestTree,     testGroup,@@ -50,19 +43,11 @@     testCase,   ) import Utils.Utils-  ( expectedResponse,+  ( caseFailure,+    expectedResponse,     getRequest,     getResolver,   )-import Prelude-  ( ($),-    (.),-    Eq (..),-    IO,-    Maybe (..),-    otherwise,-    show,-  )  readSchema :: FieldName -> IO (Schema VALID) readSchema (FieldName p) = L.readFile (unpack p) >>= (resultOr (fail . show) pure . parseGQLDocument)@@ -76,10 +61,7 @@ schemaAssertion :: App () Identity -> Schema VALID -> IO () schemaAssertion (App AppData {appSchema}) expectedSchema   | render expectedSchema == render appSchema = pure ()-  | otherwise =-    assertFailure-      $ unpack-      $ "expected: \n " <> render expectedSchema <> " \n but got: \n " <> render appSchema+  | otherwise = caseFailure (render expectedSchema) (render appSchema) schemaAssertion (FailApp gqlerror) _ = assertFailure $ " error: " <> show gqlerror  schemaCase :: (FieldName, [FieldName]) -> IO TestTree@@ -111,10 +93,7 @@ assertion :: A.Value -> ResponseStream e Identity (Value VALID) -> IO () assertion expected (ResultT (Identity actual))   | Just expected == decode actualValue = pure ()-  | otherwise =-    assertFailure $-      LB.unpack-        ("expected: \n\n " <> encode expected <> " \n\n but got: \n\n " <> actualValue)+  | otherwise = caseFailure (encode expected) actualValue   where     actualValue = encode (renderResponse actual) 
+ test/Utils/Rendering.hs view
@@ -0,0 +1,73 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE NamedFieldPuns #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE NoImplicitPrelude #-}++module Utils.Rendering+  ( test,+  )+where++import Data.Aeson (encode)+import Data.ByteString.Lazy.Char8+  ( ByteString,+  )+import qualified Data.ByteString.Lazy.Char8 as LB+import Data.Morpheus.Core+  ( defaultConfig,+    parseRequestWith,+    render,+  )+import Data.Morpheus.Types.Internal.AST+  ( FieldName (..),+    Operation,+    VALID,+  )+import Data.Morpheus.Types.Internal.Resolving+  ( Eventless,+    Result (..),+  )+import qualified Data.Text as T+import Relude hiding (ByteString)+import Test.Tasty+  ( TestTree,+    testGroup,+  )+import Test.Tasty.HUnit+  ( assertFailure,+    testCase,+  )+import Utils.Utils+  ( assertValidSchema,+    getRequest,+    readSource,+  )++assertion :: ByteString -> Eventless (Operation VALID) -> IO ()+assertion expected Success {result = actual}+  | expected == actualValue = pure ()+  | otherwise =+    assertFailure+      ("expected: \n\n " <> show expected <> " \n\n but got: \n\n " <> show actualValue)+  where+    actualValue = render actual+assertion _ Failure {errors} = assertFailure $ LB.unpack (encode errors)++test :: FieldName -> [FieldName] -> TestTree+test apiPath requestPath =+  testGroup (T.unpack $ readName apiPath) $+    fmap (testRendering apiPath) requestPath++getExpectedRendering :: FieldName -> IO ByteString+getExpectedRendering = readSource . (<> "/rendering.gql")++testRendering ::+  FieldName ->+  FieldName ->+  TestTree+testRendering apiPath path = testCase (T.unpack $ readName path) $ do+  schema <- assertValidSchema apiPath+  let fullPath = apiPath <> "/" <> path+  actual <- parseRequestWith defaultConfig schema <$> getRequest fullPath+  expected <- getExpectedRendering fullPath+  assertion expected actual
test/Utils/Schema.hs view
@@ -9,13 +9,9 @@   ) where -import Control.Applicative (pure) import Data.Aeson ((.:), (.=), FromJSON (..), ToJSON (..), Value (..), eitherDecode, encode, object) import qualified Data.ByteString.Lazy as L (readFile)-import qualified Data.ByteString.Lazy.Char8 as LB (unpack) import Data.ByteString.Lazy.Char8 (ByteString)-import Data.Either (Either (..), either)-import Data.Functor ((<$>), fmap) import Data.Morpheus.Core (parseFullGQLDocument) import Data.Morpheus.Types.Internal.AST   ( GQLErrors,@@ -26,27 +22,17 @@   ( Eventless,     Result (..),   )-import Data.Semigroup ((<>)) import Data.Text (pack)-import GHC.Generics (Generic)+import Relude hiding (ByteString, toString) import Test.Tasty (TestTree, testGroup)-import Test.Tasty.HUnit (assertFailure, testCase)+import Test.Tasty.HUnit (testCase) import Utils.Utils   ( CaseTree (..),     FileUrl (..),+    caseFailure,     scanSchemaTests,     toString,   )-import Prelude-  ( ($),-    (.),-    Eq (..),-    FilePath,-    IO,-    String,-    id,-    show,-  )  readSource :: FilePath -> IO ByteString readSource = L.readFile@@ -96,11 +82,8 @@   | err == errors =     pure       ()-assertion expected Success {} =-  assertFailure $-    LB.unpack-      ("expected: \n " <> encode expected <> " \n but got: \n OK")+assertion expected Success {} = caseFailure (encode expected) "OK" assertion expected Failure {errors} =-  assertFailure $-    LB.unpack-      ("expected: \n " <> encode expected <> " \n but got: \n " <> encode (Errors errors))+  caseFailure+    (encode expected)+    (encode (Errors errors))
test/Utils/Utils.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-}@@ -19,24 +18,25 @@     getSchema,     getResolvers,     getResolver,+    caseFailure,   ) where -import Control.Applicative ((<|>), pure)-import Control.Monad ((>=>), Monad) import Data.Aeson (FromJSON, Value (..), decode) import qualified Data.ByteString.Lazy as L (readFile)+import qualified Data.ByteString.Lazy.Char8 as LB (unpack) import Data.ByteString.Lazy.Char8 (ByteString)-import Data.Either (Either (..)) import Data.Foldable (foldl)-import Data.Functor ((<$>)) import Data.HashMap.Lazy (lookup)-import Data.Maybe (Maybe (..), fromMaybe, maybe) import Data.Morpheus.Core (parseGQLDocument) import Data.Morpheus.Types.IO   ( GQLRequest (..),   )-import Data.Morpheus.Types.Internal.AST (FieldName (..), Schema (..), VALID)+import Data.Morpheus.Types.Internal.AST+  ( FieldName (..),+    Schema (..),+    VALID,+  ) import Data.Morpheus.Types.Internal.Resolving   ( Eventless,     ResModel,@@ -46,26 +46,13 @@     mkValue,     resultOr,   )-import Data.Semigroup ((<>))-import Data.Text (Text, unpack)-import qualified Data.Text.Lazy as LT (toStrict)-import Data.Text.Lazy.Encoding (decodeUtf8)-import Data.Traversable (traverse)+import Data.Text (unpack)+import qualified Data.Text.IO as T+import Relude hiding (ByteString, toString) import System.Directory (doesDirectoryExist, listDirectory) import Test.Tasty.HUnit   ( assertFailure,   )-import Prelude-  ( ($),-    (.),-    Bool,-    FilePath,-    IO,-    Show,-    and,-    map,-    show,-  )  readSource :: FieldName -> IO ByteString readSource = L.readFile . path . readName@@ -146,15 +133,11 @@ expectedResponse (FieldName p) = fromMaybe Null . decode <$> L.readFile (resLib p)  getRequest :: FieldName -> IO GQLRequest-getRequest p = do-  queryBS <- LT.toStrict . decodeUtf8 <$> getGQLBody p-  variables <- maybeVariables p-  pure $-    GQLRequest-      { operationName = Nothing,-        query = queryBS,-        variables-      }+getRequest p =+  GQLRequest+    Nothing+    <$> T.readFile (gqlLib $ readName p)+    <*> maybeVariables p  getResolvers :: Monad m => FieldName -> IO (RootResModel e m) getResolvers p = getResolver ("test/" <> p <> "/resolvers.json")@@ -179,3 +162,9 @@   ResModel o e m lookupRes name (Object fields) = maybe mkNull mkValue (lookup name fields) lookupRes _ _ = mkNull++caseFailure :: ByteString -> ByteString -> IO a+caseFailure expected actualValue =+  assertFailure $+    LB.unpack+      ("expected: \n\n " <> expected <> " \n\n but got: \n\n " <> actualValue)
+ test/rendering/simple/directive/query.gql view
@@ -0,0 +1,5 @@+query MyQuery @MyDirective {+  deity @MyDirective {+    name @MyDirective(name: "Some Name")+  }+}
+ test/rendering/simple/directive/rendering.gql view
@@ -0,0 +1,5 @@+query MyQuery @MyDirective {+  deity @MyDirective {+    name @MyDirective(name: "Some Name")+  }+}
+ test/rendering/simple/fragment/query.gql view
@@ -0,0 +1,12 @@+query {+  character {+    ...OnCharacter+    ... on Hero {+      hobby+    }+  }+}++fragment OnCharacter on Character {+  name+}
+ test/rendering/simple/fragment/rendering.gql view
@@ -0,0 +1,17 @@+query {+  character {+    ... on Character {+      __typename+      name+    }+    ... on Deity {+      __typename+      name+    }+    ... on Hero {+      __typename+      name+      hobby+    }+  }+}
+ test/rendering/simple/fragment/variables.json view
@@ -0,0 +1,3 @@+{+  "name": "value 1"+}
+ test/rendering/simple/mutation/query.gql view
@@ -0,0 +1,9 @@+mutation MyMutation {+  deity {+    name+    power+    friends {+      name+    }+  }+}
+ test/rendering/simple/mutation/rendering.gql view
@@ -0,0 +1,9 @@+mutation MyMutation {+  deity {+    name+    power+    friends {+      name+    }+  }+}
+ test/rendering/simple/nested/query.gql view
@@ -0,0 +1,22 @@+{+  deity {+    name+    power+    friends {+      name+      friends {+        power+        name+        friends {+          name+          friends {+            name+            friends {+              name+            }+          }+        }+      }+    }+  }+}
+ test/rendering/simple/nested/rendering.gql view
@@ -0,0 +1,22 @@+query {+  deity {+    name+    power+    friends {+      name+      friends {+        power+        name+        friends {+          name+          friends {+            name+            friends {+              name+            }+          }+        }+      }+    }+  }+}
+ test/rendering/simple/query/query.gql view
@@ -0,0 +1,9 @@+query MyQuery {+  deity {+    name+    power+    friends {+      name+    }+  }+}
+ test/rendering/simple/query/rendering.gql view
@@ -0,0 +1,9 @@+query MyQuery {+  deity {+    name+    power+    friends {+      name+    }+  }+}
+ test/rendering/simple/schema.gql view
@@ -0,0 +1,17 @@+directive @MyDirective(name: String) on FIELD | QUERY++type Deity {+  name: String!+  power: [String!]!+  friends: [Deity!]!+}++type Query {+  deity(name: String): Deity!+}++schema {+  query: Query+  mutation: Query+  subscription: Query+}
+ test/rendering/simple/simple/query.gql view
@@ -0,0 +1,9 @@+{+  deity {+    name+    power+    friends {+      name+    }+  }+}
+ test/rendering/simple/simple/rendering.gql view
@@ -0,0 +1,9 @@+query {+  deity {+    name+    power+    friends {+      name+    }+  }+}
+ test/rendering/simple/subscription/query.gql view
@@ -0,0 +1,9 @@+subscription MySubscription {+  deity {+    name+    power+    friends {+      name+    }+  }+}
+ test/rendering/simple/subscription/rendering.gql view
@@ -0,0 +1,9 @@+subscription MySubscription {+  deity {+    name+    power+    friends {+      name+    }+  }+}
+ test/rendering/union/interface/query.gql view
@@ -0,0 +1,12 @@+query {+  character {+    ...OnCharacter+    ... on Hero {+      hobby+    }+  }+}++fragment OnCharacter on Character {+  name+}
+ test/rendering/union/interface/rendering.gql view
@@ -0,0 +1,17 @@+query {+  character {+    ... on Character {+      __typename+      name+    }+    ... on Deity {+      __typename+      name+    }+    ... on Hero {+      __typename+      name+      hobby+    }+  }+}
+ test/rendering/union/interface/variables.json view
@@ -0,0 +1,3 @@+{+  "name": "value 1"+}
+ test/rendering/union/schema.gql view
@@ -0,0 +1,46 @@+directive @Turbo(name: String) on FIELD | QUERY++directive @Speed(name: String) on FIELD | QUERY++interface Character {+  name: String+}++interface Supernatural {+  power: [String!]!+}++type Hero implements Character {+  name: String+  hobby: String+}++type Deity implements Character & Supernatural {+  name: String!+  power: [String!]!+  friends: [Deity!]!+}++type Animal {+  name: String+  weight: Int+}++type Human {+  name: String+  age: Int+}++union Mortal = Human | Animal++type Query {+  deity: Deity!+  mortal: Mortal!+  character: Character!+}++schema {+  query: Query+  mutation: Query+  subscription: Query+}
+ test/rendering/union/union/query.gql view
@@ -0,0 +1,14 @@+query {+  mortal {+    ...OnHuman+    ...onAnimal+  }+}++fragment OnHuman on Human {+  name+}++fragment onAnimal on Animal {+  weight+}
+ test/rendering/union/union/rendering.gql view
@@ -0,0 +1,10 @@+query {+  mortal {+    ... on Human {+      name+    }+    ... on Animal {+      weight+    }+  }+}
+ test/rendering/union/union/variables.json view
@@ -0,0 +1,3 @@+{+  "name": "value 1"+}
+ test/rendering/variable/enum/query.gql view
@@ -0,0 +1,6 @@+query($enum: MyEnum!) {+  simple {+    name(enum: $enum)+    power+  }+}
+ test/rendering/variable/enum/rendering.gql view
@@ -0,0 +1,6 @@+query {+  simple {+    name(enum: A)+    power+  }+}
+ test/rendering/variable/enum/variables.json view
@@ -0,0 +1,3 @@+{+  "enum": "A"+}
+ test/rendering/variable/include-exclude/query.gql view
@@ -0,0 +1,10 @@+query($isTrue: Boolean!, $isFalse: Boolean!) {+  a: simple {+    value: name @include(if: $isTrue)+    skip: name @skip(if: $isTrue)+  }+  b: simple {+    skip: name @include(if: $isFalse)+    value: name @skip(if: $isFalse)+  }+}
+ test/rendering/variable/include-exclude/rendering.gql view
@@ -0,0 +1,8 @@+query {+  a {+    value+  }+  b {+    value+  }+}
+ test/rendering/variable/include-exclude/variables.json view
@@ -0,0 +1,4 @@+{+  "isTrue": true,+  "isFalse": false+}
+ test/rendering/variable/input/query.gql view
@@ -0,0 +1,6 @@+query($input: Input!) {+  simple {+    name(i: $input)+    power+  }+}
+ test/rendering/variable/input/rendering.gql view
@@ -0,0 +1,6 @@+query {+  simple {+    name(i: { id: "def value", int: 5 })+    power+  }+}
+ test/rendering/variable/input/variables.json view
@@ -0,0 +1,3 @@+{+  "input": { "int": 5 }+}
+ test/rendering/variable/list/query.gql view
@@ -0,0 +1,6 @@+query($list: [Input!]!) {+  simple {+    name(list: $list)+    power+  }+}
+ test/rendering/variable/list/rendering.gql view
@@ -0,0 +1,6 @@+query {+  simple {+    name(list: [{ id: "def value", int: 1 }, { id: "some-id", int: 2 }])+    power+  }+}
+ test/rendering/variable/list/variables.json view
@@ -0,0 +1,3 @@+{+  "list": [{ "int": 1 }, { "id": "some-id", "int": 2 }]+}
+ test/rendering/variable/schema.gql view
@@ -0,0 +1,26 @@+scalar MyScalar++enum MyEnum {+  A+  B+}++input Input {+  id: String = "def value"+  int: MyScalar!+}++type Deity {+  name(i: Input, enum: MyEnum, list: [Input]): String!+  power: [String!]!+}++type Query {+  simple(name: String): Deity!+}++schema {+  query: Query+  mutation: Query+  subscription: Query+}
+ test/rendering/variable/simple/query.gql view
@@ -0,0 +1,6 @@+query($name: String!) {+  simple(name: $name) {+    name+    power+  }+}
+ test/rendering/variable/simple/rendering.gql view
@@ -0,0 +1,6 @@+query {+  simple(name: "value 1") {+    name+    power+  }+}
+ test/rendering/variable/simple/variables.json view
@@ -0,0 +1,3 @@+{+  "name": "value 1"+}
test/schema/validation/default-value/argument/missing-field/response.json view
@@ -9,15 +9,15 @@       "locations": []     },     {-      "message": "Field Query.field(i2:) got invalid default value. Undefined Field \"field\".",+      "message": "Field Query.field(i3:) got invalid default value. in field \"field.field\": Undefined Field \"field\".",       "locations": []     },     {-      "message": "Field Query.field(i3:) got invalid default value. in field \"field.field\": Undefined Field \"field\".",+      "message": "Field Query.field(i3:) got invalid default value. in field \"field\": Undefined Field \"field2\".",       "locations": []     },     {-      "message": "Field Query.field(i3:) got invalid default value. in field \"field\": Undefined Field \"field2\".",+      "message": "Field Query.field(i2:) got invalid default value. Undefined Field \"field\".",       "locations": []     }   ]
test/schema/validation/default-value/argument/unexpected-value/response.json view
@@ -9,23 +9,23 @@       "locations": []     },     {-      "message": "Field Query.field(i2:) got invalid default value. in field \"field1\": Expected type \"ID\" found {field3: 2344}.",+      "message": "Field Query.field(i5:) got invalid default value. Expected type \"Int\" found \"some text\".",       "locations": []     },     {-      "message": "Field Query.field(i2:) got invalid default value. in field \"field2\": Expected type \"String\" found 123.",+      "message": "Field Query.field(i3:) got invalid default value. Expected type \"TestEnum\" found EnumBB.",       "locations": []     },     {-      "message": "Field Query.field(i3:) got invalid default value. Expected type \"TestEnum\" found EnumBB.",+      "message": "Field Query.field(i4:) got invalid default value. Expected type \"ID\" found true.",       "locations": []     },     {-      "message": "Field Query.field(i4:) got invalid default value. Expected type \"ID\" found true.",+      "message": "Field Query.field(i2:) got invalid default value. in field \"field1\": Expected type \"ID\" found { field3: 2344 }.",       "locations": []     },     {-      "message": "Field Query.field(i5:) got invalid default value. Expected type \"Int\" found \"some text\".",+      "message": "Field Query.field(i2:) got invalid default value. in field \"field2\": Expected type \"String\" found 123.",       "locations": []     }   ]
test/schema/validation/default-value/field/unexpected-value/response.json view
@@ -5,19 +5,19 @@       "locations": []     },     {-      "message": "Field Input2.objectField got invalid default value. in field \"field2\": Expected type \"String!\" found true.",+      "message": "Field Input2.objectField got invalid default value. in field \"field4\": Expected type \"TestEnum!\" found 1.",       "locations": []     },     {-      "message": "Field Input2.objectField got invalid default value. in field \"field3\": Expected type \"TestEnum\" found true.",+      "message": "Field Input2.objectField got invalid default value. in field \"field5\": Expected type \"TestEnum\" found \"some text\".",       "locations": []     },     {-      "message": "Field Input2.objectField got invalid default value. in field \"field4\": Expected type \"TestEnum!\" found 1.",+      "message": "Field Input2.objectField got invalid default value. in field \"field2\": Expected type \"String!\" found true.",       "locations": []     },     {-      "message": "Field Input2.objectField got invalid default value. in field \"field5\": Expected type \"TestEnum\" found \"some text\".",+      "message": "Field Input2.objectField got invalid default value. in field \"field3\": Expected type \"TestEnum\" found true.",       "locations": []     },     {@@ -25,19 +25,19 @@       "locations": []     },     {-      "message": "Field Input1.field2 got invalid default value. Expected type \"String!\" found EnumA.",+      "message": "Field Input1.field4 got invalid default value. Expected type \"TestEnum!\" found 1.",       "locations": []     },     {-      "message": "Field Input1.field3 got invalid default value. Expected type \"TestEnum\" found UnknownEnum.",+      "message": "Field Input1.field5 got invalid default value. Expected type \"TestEnum\" found \"some text\".",       "locations": []     },     {-      "message": "Field Input1.field4 got invalid default value. Expected type \"TestEnum!\" found 1.",+      "message": "Field Input1.field2 got invalid default value. Expected type \"String!\" found EnumA.",       "locations": []     },     {-      "message": "Field Input1.field5 got invalid default value. Expected type \"TestEnum\" found \"some text\".",+      "message": "Field Input1.field3 got invalid default value. Expected type \"TestEnum\" found UnknownEnum.",       "locations": []     }   ]
test/schema/validation/directive/fail/at-invalid-place/response.json view
@@ -25,12 +25,12 @@       "locations": [{ "line": 21, "column": 12 }]     },     {-      "message": "Directive \"include\" may not to be used on FIELD_DEFINITION",-      "locations": [{ "line": 22, "column": 35 }]-    },-    {       "message": "Directive \"DirectiveD\" may not to be used on ARGUMENT_DEFINITION",       "locations": [{ "line": 22, "column": 17 }]+    },+    {+      "message": "Directive \"include\" may not to be used on FIELD_DEFINITION",+      "locations": [{ "line": 22, "column": 35 }]     }   ] }
test/schema/validation/directive/fail/missing-argument/response.json view
@@ -1,24 +1,16 @@ {   "errors": [     {-      "message": "Directive \"@DirectiveA\" argument \"a1\" is required but not provided.",-      "locations": [{ "line": 9, "column": 17 }]-    },-    {       "message": "Directive \"@DirectiveA\" argument \"a2\" is required but not provided.",       "locations": [{ "line": 9, "column": 17 }]     },     {-      "message": "Directive \"@DirectiveC\" argument \"arg\" is required but not provided.",-      "locations": [{ "line": 19, "column": 13 }]-    },-    {-      "message": "Directive \"@DirectiveC\" argument \"arg\" is required but not provided.",-      "locations": [{ "line": 20, "column": 38 }]+      "message": "Directive \"@DirectiveA\" argument \"a1\" is required but not provided.",+      "locations": [{ "line": 9, "column": 17 }]     },     {-      "message": "Directive \"@DirectiveC\" argument \"arg\" is required but not provided.",-      "locations": [{ "line": 20, "column": 17 }]+      "message": "Directive \"@DirectiveA\" argument \"a2\" is required but not provided.",+      "locations": [{ "line": 11, "column": 13 }]     },     {       "message": "Directive \"@DirectiveA\" argument \"a1\" is required but not provided.",@@ -26,14 +18,10 @@     },     {       "message": "Directive \"@DirectiveA\" argument \"a2\" is required but not provided.",-      "locations": [{ "line": 11, "column": 13 }]-    },-    {-      "message": "Directive \"@DirectiveA\" argument \"a1\" is required but not provided.",       "locations": [{ "line": 12, "column": 9 }]     },     {-      "message": "Directive \"@DirectiveA\" argument \"a2\" is required but not provided.",+      "message": "Directive \"@DirectiveA\" argument \"a1\" is required but not provided.",       "locations": [{ "line": 12, "column": 9 }]     },     {@@ -43,6 +31,18 @@     {       "message": "Directive \"@DirectiveB\" argument \"a1\" is required but not provided.",       "locations": [{ "line": 16, "column": 17 }]+    },+    {+      "message": "Directive \"@DirectiveC\" argument \"arg\" is required but not provided.",+      "locations": [{ "line": 19, "column": 13 }]+    },+    {+      "message": "Directive \"@DirectiveC\" argument \"arg\" is required but not provided.",+      "locations": [{ "line": 20, "column": 17 }]+    },+    {+      "message": "Directive \"@DirectiveC\" argument \"arg\" is required but not provided.",+      "locations": [{ "line": 20, "column": 38 }]     }   ] }
test/schema/validation/directive/fail/sopthisticated/response.json view
@@ -1,24 +1,24 @@ {   "errors": [     {-      "message": "Directive \"include\" may not to be used on INPUT_OBJECT",-      "locations": [{ "line": 13, "column": 13 }]+      "message": "Directive \"DirectiveA\" may not to be used on ENUM_VALUE",+      "locations": [{ "line": 6, "column": 9 }]     },     {-      "message": "Directive \"@include\" argument \"if\" is required but not provided.",-      "locations": [{ "line": 13, "column": 13 }]+      "message": "Directive \"@DirectiveA\" argument \"a1\" is required but not provided.",+      "locations": [{ "line": 6, "column": 9 }]     },     {-      "message": "Directive \"skip\" may not to be used on INPUT_FIELD_DEFINITION",-      "locations": [{ "line": 14, "column": 13 }]+      "message": "Unknown Directive \"SomeDirective\".",+      "locations": [{ "line": 9, "column": 13 }]     },     {-      "message": "Directive \"@skip\" argument \"if\" is required but not provided.",-      "locations": [{ "line": 14, "column": 13 }]+      "message": "Unknown Argument \"someargs\" on Directive \"DirectiveC\".",+      "locations": [{ "line": 10, "column": 40 }]     },     {-      "message": "Unknown Directive \"SomeDirective\".",-      "locations": [{ "line": 9, "column": 13 }]+      "message": "Argument \"arg\" got invalid value. Expected type \"Int!\" found True.",+      "locations": [{ "line": 10, "column": 29 }]     },     {       "message": "Directive \"DirectiveC\" may not to be used on FIELD_DEFINITION",@@ -29,20 +29,20 @@       "locations": [{ "line": 10, "column": 62 }]     },     {-      "message": "Unknown Argument \"someargs\" on Directive \"DirectiveC\".",-      "locations": [{ "line": 10, "column": 40 }]+      "message": "Directive \"include\" may not to be used on INPUT_OBJECT",+      "locations": [{ "line": 13, "column": 13 }]     },     {-      "message": "Argument \"arg\" got invalid value. Expected type \"Int!\" found True.",-      "locations": [{ "line": 10, "column": 29 }]+      "message": "Directive \"@include\" argument \"if\" is required but not provided.",+      "locations": [{ "line": 13, "column": 13 }]     },     {-      "message": "Directive \"DirectiveA\" may not to be used on ENUM_VALUE",-      "locations": [{ "line": 6, "column": 9 }]+      "message": "Directive \"skip\" may not to be used on INPUT_FIELD_DEFINITION",+      "locations": [{ "line": 14, "column": 13 }]     },     {-      "message": "Directive \"@DirectiveA\" argument \"a1\" is required but not provided.",-      "locations": [{ "line": 6, "column": 9 }]+      "message": "Directive \"@skip\" argument \"if\" is required but not provided.",+      "locations": [{ "line": 14, "column": 13 }]     },     {       "message": "Directive \"DirectiveC\" may not to be used on OBJECT",
test/schema/validation/directive/fail/unexpected-value/response.json view
@@ -5,6 +5,14 @@       "locations": [{ "line": 9, "column": 29 }]     },     {+      "message": "Argument \"a1\" got invalid value. Expected type \"Int!\" found \"some string\".",+      "locations": [{ "line": 10, "column": 30 }]+    },+    {+      "message": "Argument \"a1\" got invalid value. Expected type \"Int!\" found True.",+      "locations": [{ "line": 11, "column": 30 }]+    },+    {       "message": "Argument \"reason\" got invalid value. Expected type \"String\" found EnumA.",       "locations": [{ "line": 14, "column": 21 }]     },@@ -23,14 +31,6 @@     {       "message": "Argument \"a1\" got invalid value. Expected type \"MyInput!\" found [\"some deprication\"].",       "locations": [{ "line": 21, "column": 30 }]-    },-    {-      "message": "Argument \"a1\" got invalid value. Expected type \"Int!\" found \"some string\".",-      "locations": [{ "line": 10, "column": 30 }]-    },-    {-      "message": "Argument \"a1\" got invalid value. Expected type \"Int!\" found True.",-      "locations": [{ "line": 11, "column": 30 }]     }   ] }
test/schema/validation/directive/fail/unknown-directive/response.json view
@@ -1,10 +1,6 @@ {   "errors": [     {-      "message": "Unknown Directive \"DirectveD\".",-      "locations": [{ "line": 15, "column": 15 }]-    },-    {       "message": "Unknown Directive \"DirectveA\".",       "locations": [{ "line": 1, "column": 17 }]     },@@ -25,14 +21,6 @@       "locations": [{ "line": 8, "column": 17 }]     },     {-      "message": "Unknown Directive \"DirectveE\".",-      "locations": [{ "line": 17, "column": 14 }]-    },-    {-      "message": "Unknown Directive \"DirectveE\".",-      "locations": [{ "line": 18, "column": 14 }]-    },-    {       "message": "Unknown Directive \"DirectveC\".",       "locations": [{ "line": 11, "column": 8 }]     },@@ -40,6 +28,19 @@       "message": "Unknown Directive \"DirectveC\".",       "locations": [{ "line": 12, "column": 17 }]     },+    {+      "message": "Unknown Directive \"DirectveD\".",+      "locations": [{ "line": 15, "column": 15 }]+    },+    {+      "message": "Unknown Directive \"DirectveE\".",+      "locations": [{ "line": 17, "column": 14 }]+    },+    {+      "message": "Unknown Directive \"DirectveE\".",+      "locations": [{ "line": 18, "column": 14 }]+    },+     {       "message": "Unknown Directive \"DirectveF\".",       "locations": [{ "line": 22, "column": 12 }]
+ test/schema/validation/performance-check/response.json view
@@ -0,0 +1,1 @@+"OK"
+ test/schema/validation/performance-check/schema.gql view
@@ -0,0 +1,38947 @@+"""+Defines what type of global IDs are accepted for a mutation argument of type ID.+"""+directive @possibleTypes(+  """+  Abstract type of accepted global ID+  """+  abstractType: String++  """+  Accepted types of global IDs.+  """+  concreteTypes: [String!]!+) on INPUT_FIELD_DEFINITION++"""+Marks an element of a GraphQL schema as only available via a preview header+"""+directive @preview(+  """+  The identifier of the API preview that toggles this field.+  """+  toggledBy: String!+) on SCALAR | OBJECT | FIELD_DEFINITION | ARGUMENT_DEFINITION | INTERFACE | UNION | ENUM | ENUM_VALUE | INPUT_OBJECT | INPUT_FIELD_DEFINITION++"""+Autogenerated input type of AcceptEnterpriseAdministratorInvitation+"""+input AcceptEnterpriseAdministratorInvitationInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The id of the invitation being accepted+  """+  invitationId: ID!+  @possibleTypes(concreteTypes: ["EnterpriseAdministratorInvitation"])+}++"""+Autogenerated return type of AcceptEnterpriseAdministratorInvitation+"""+type AcceptEnterpriseAdministratorInvitationPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The invitation that was accepted.+  """+  invitation: EnterpriseAdministratorInvitation++  """+  A message confirming the result of accepting an administrator invitation.+  """+  message: String+}++"""+Autogenerated input type of AcceptTopicSuggestion+"""+input AcceptTopicSuggestionInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The name of the suggested topic.+  """+  name: String!++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of AcceptTopicSuggestion+"""+type AcceptTopicSuggestionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The accepted topic.+  """+  topic: Topic+}++"""+The possible capabilities for action executions setting.+"""+enum ActionExecutionCapabilitySetting {+  """+  All action executions are enabled.+  """+  ALL_ACTIONS++  """+  All action executions are disabled.+  """+  DISABLED++  """+  Only actions defined within the repo are allowed.+  """+  LOCAL_ACTIONS_ONLY++  """+  Organization administrators action execution capabilities.+  """+  NO_POLICY+}++"""+Represents an object which can take actions on GitHub. Typically a User or Bot.+"""+interface Actor {+  """+  A URL pointing to the actor's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!++  """+  The username of the actor.+  """+  login: String!++  """+  The HTTP path for this actor.+  """+  resourcePath: URI!++  """+  The HTTP URL for this actor.+  """+  url: URI!+}++"""+Location information for an actor+"""+type ActorLocation {+  """+  City+  """+  city: String++  """+  Country name+  """+  country: String++  """+  Country code+  """+  countryCode: String++  """+  Region name+  """+  region: String++  """+  Region or state code+  """+  regionCode: String+}++"""+Autogenerated input type of AddAssigneesToAssignable+"""+input AddAssigneesToAssignableInput {+  """+  The id of the assignable object to add assignees to.+  """+  assignableId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "Assignable"+  )++  """+  The id of users to add as assignees.+  """+  assigneeIds: [ID!]! @possibleTypes(concreteTypes: ["User"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated return type of AddAssigneesToAssignable+"""+type AddAssigneesToAssignablePayload {+  """+  The item that was assigned.+  """+  assignable: Assignable++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of AddComment+"""+input AddCommentInput {+  """+  The contents of the comment.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the subject to modify.+  """+  subjectId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "IssueOrPullRequest"+  )+}++"""+Autogenerated return type of AddComment+"""+type AddCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The edge from the subject's comment connection.+  """+  commentEdge: IssueCommentEdge++  """+  The subject+  """+  subject: Node++  """+  The edge from the subject's timeline connection.+  """+  timelineEdge: IssueTimelineItemEdge+}++"""+Autogenerated input type of AddLabelsToLabelable+"""+input AddLabelsToLabelableInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ids of the labels to add.+  """+  labelIds: [ID!]! @possibleTypes(concreteTypes: ["Label"])++  """+  The id of the labelable object to add labels to.+  """+  labelableId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "Labelable"+  )+}++"""+Autogenerated return type of AddLabelsToLabelable+"""+type AddLabelsToLabelablePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The item that was labeled.+  """+  labelable: Labelable+}++"""+Autogenerated input type of AddProjectCard+"""+input AddProjectCardInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The content of the card. Must be a member of the ProjectCardItem union+  """+  contentId: ID+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "ProjectCardItem"+  )++  """+  The note on the card.+  """+  note: String++  """+  The Node ID of the ProjectColumn.+  """+  projectColumnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])+}++"""+Autogenerated return type of AddProjectCard+"""+type AddProjectCardPayload {+  """+  The edge from the ProjectColumn's card connection.+  """+  cardEdge: ProjectCardEdge++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ProjectColumn+  """+  projectColumn: ProjectColumn+}++"""+Autogenerated input type of AddProjectColumn+"""+input AddProjectColumnInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The name of the column.+  """+  name: String!++  """+  The Node ID of the project.+  """+  projectId: ID! @possibleTypes(concreteTypes: ["Project"])+}++"""+Autogenerated return type of AddProjectColumn+"""+type AddProjectColumnPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The edge from the project's column connection.+  """+  columnEdge: ProjectColumnEdge++  """+  The project+  """+  project: Project+}++"""+Autogenerated input type of AddPullRequestReviewComment+"""+input AddPullRequestReviewCommentInput {+  """+  The text of the comment.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The SHA of the commit to comment on.+  """+  commitOID: GitObjectID++  """+  The comment id to reply to.+  """+  inReplyTo: ID @possibleTypes(concreteTypes: ["PullRequestReviewComment"])++  """+  The relative path of the file to comment on.+  """+  path: String++  """+  The line index in the diff to comment on.+  """+  position: Int++  """+  The node ID of the pull request reviewing+  """+  pullRequestId: ID @possibleTypes(concreteTypes: ["PullRequest"])++  """+  The Node ID of the review to modify.+  """+  pullRequestReviewId: ID @possibleTypes(concreteTypes: ["PullRequestReview"])+}++"""+Autogenerated return type of AddPullRequestReviewComment+"""+type AddPullRequestReviewCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The newly created comment.+  """+  comment: PullRequestReviewComment++  """+  The edge from the review's comment connection.+  """+  commentEdge: PullRequestReviewCommentEdge+}++"""+Autogenerated input type of AddPullRequestReview+"""+input AddPullRequestReviewInput {+  """+  The contents of the review body comment.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The review line comments.+  """+  comments: [DraftPullRequestReviewComment]++  """+  The commit OID the review pertains to.+  """+  commitOID: GitObjectID++  """+  The event to perform on the pull request review.+  """+  event: PullRequestReviewEvent++  """+  The Node ID of the pull request to modify.+  """+  pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])++  """+  The review line comment threads.+  """+  threads: [DraftPullRequestReviewThread]+}++"""+Autogenerated return type of AddPullRequestReview+"""+type AddPullRequestReviewPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The newly created pull request review.+  """+  pullRequestReview: PullRequestReview++  """+  The edge from the pull request's review connection.+  """+  reviewEdge: PullRequestReviewEdge+}++"""+Autogenerated input type of AddPullRequestReviewThread+"""+input AddPullRequestReviewThreadInput {+  """+  Body of the thread's first comment.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The line of the blob to which the thread refers. The end of the line range for multi-line comments.+  """+  line: Int!++  """+  Path to the file being commented on.+  """+  path: String!++  """+  The node ID of the pull request reviewing+  """+  pullRequestId: ID @possibleTypes(concreteTypes: ["PullRequest"])++  """+  The Node ID of the review to modify.+  """+  pullRequestReviewId: ID @possibleTypes(concreteTypes: ["PullRequestReview"])++  """+  The side of the diff on which the line resides. For multi-line comments, this is the side for the end of the line range.+  """+  side: DiffSide = RIGHT++  """+  The first line of the range to which the comment refers.+  """+  startLine: Int++  """+  The side of the diff on which the start line resides.+  """+  startSide: DiffSide = RIGHT+}++"""+Autogenerated return type of AddPullRequestReviewThread+"""+type AddPullRequestReviewThreadPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The newly created thread.+  """+  thread: PullRequestReviewThread+}++"""+Autogenerated input type of AddReaction+"""+input AddReactionInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The name of the emoji to react with.+  """+  content: ReactionContent!++  """+  The Node ID of the subject to modify.+  """+  subjectId: ID!+  @possibleTypes(+    concreteTypes: [+      "CommitComment"+      "Issue"+      "IssueComment"+      "PullRequest"+      "PullRequestReview"+      "PullRequestReviewComment"+      "TeamDiscussion"+      "TeamDiscussionComment"+    ]+    abstractType: "Reactable"+  )+}++"""+Autogenerated return type of AddReaction+"""+type AddReactionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The reaction object.+  """+  reaction: Reaction++  """+  The reactable subject.+  """+  subject: Reactable+}++"""+Autogenerated input type of AddStar+"""+input AddStarInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Starrable ID to star.+  """+  starrableId: ID!+  @possibleTypes(+    concreteTypes: ["Gist", "Repository", "Topic"]+    abstractType: "Starrable"+  )+}++"""+Autogenerated return type of AddStar+"""+type AddStarPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The starrable.+  """+  starrable: Starrable+}++"""+Represents a 'added_to_project' event on a given issue or pull request.+"""+type AddedToProjectEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  Project referenced by event.+  """+  project: Project @preview(toggledBy: "starfox-preview")++  """+  Project card referenced by this project event.+  """+  projectCard: ProjectCard @preview(toggledBy: "starfox-preview")++  """+  Column name referenced by this project event.+  """+  projectColumnName: String! @preview(toggledBy: "starfox-preview")+}++"""+A GitHub App.+"""+type App implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The description of the app.+  """+  description: String+  id: ID!++  """+  The hex color code, without the leading '#', for the logo background.+  """+  logoBackgroundColor: String!++  """+  A URL pointing to the app's logo.+  """+  logoUrl(+    """+    The size of the resulting image.+    """+    size: Int+  ): URI!++  """+  The name of the app.+  """+  name: String!++  """+  A slug based on the name of the app for use in URLs.+  """+  slug: String!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The URL to the app's homepage.+  """+  url: URI!+}++"""+Autogenerated input type of ArchiveRepository+"""+input ArchiveRepositoryInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the repository to mark as archived.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of ArchiveRepository+"""+type ArchiveRepositoryPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The repository that was marked as archived.+  """+  repository: Repository+}++"""+An object that can have users assigned to it.+"""+interface Assignable {+  """+  A list of Users assigned to this object.+  """+  assignees(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserConnection!+}++"""+Represents an 'assigned' event on any assignable object.+"""+type AssignedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the assignable associated with the event.+  """+  assignable: Assignable!++  """+  Identifies the user or mannequin that was assigned.+  """+  assignee: Assignee++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the user who was assigned.+  """+  user: User+  @deprecated(+    reason: "Assignees can now be mannequins. Use the `assignee` field instead. Removal on 2020-01-01 UTC."+  )+}++"""+Types that can be assigned to issues.+"""+union Assignee = Bot | Mannequin | Organization | User++"""+An entry in the audit log.+"""+interface AuditEntry {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Types that can initiate an audit log event.+"""+union AuditEntryActor = Bot | Organization | User++"""+Ordering options for Audit Log connections.+"""+input AuditLogOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection++  """+  The field to order Audit Logs by.+  """+  field: AuditLogOrderField+}++"""+Properties by which Audit Log connections can be ordered.+"""+enum AuditLogOrderField {+  """+  Order audit log entries by timestamp+  """+  CREATED_AT+}++"""+Represents a 'automatic_base_change_failed' event on a given pull request.+"""+type AutomaticBaseChangeFailedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  The new base for this PR+  """+  newBase: String!++  """+  The old base for this PR+  """+  oldBase: String!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!+}++"""+Represents a 'automatic_base_change_succeeded' event on a given pull request.+"""+type AutomaticBaseChangeSucceededEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  The new base for this PR+  """+  newBase: String!++  """+  The old base for this PR+  """+  oldBase: String!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!+}++"""+Represents a 'base_ref_changed' event on a given issue or pull request.+"""+type BaseRefChangedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!+}++"""+Represents a 'base_ref_force_pushed' event on a given pull request.+"""+type BaseRefForcePushedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the after commit SHA for the 'base_ref_force_pushed' event.+  """+  afterCommit: Commit++  """+  Identifies the before commit SHA for the 'base_ref_force_pushed' event.+  """+  beforeCommit: Commit++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  Identifies the fully qualified ref name for the 'base_ref_force_pushed' event.+  """+  ref: Ref+}++"""+Represents a Git blame.+"""+type Blame {+  """+  The list of ranges from a Git blame.+  """+  ranges: [BlameRange!]!+}++"""+Represents a range of information from a Git blame.+"""+type BlameRange {+  """+  Identifies the recency of the change, from 1 (new) to 10 (old). This is+  calculated as a 2-quantile and determines the length of distance between the+  median age of all the changes in the file and the recency of the current+  range's change.+  """+  age: Int!++  """+  Identifies the line author+  """+  commit: Commit!++  """+  The ending line for the range+  """+  endingLine: Int!++  """+  The starting line for the range+  """+  startingLine: Int!+}++"""+Represents a Git blob.+"""+type Blob implements GitObject & Node {+  """+  An abbreviated version of the Git object ID+  """+  abbreviatedOid: String!++  """+  Byte size of Blob object+  """+  byteSize: Int!++  """+  The HTTP path for this Git object+  """+  commitResourcePath: URI!++  """+  The HTTP URL for this Git object+  """+  commitUrl: URI!+  id: ID!++  """+  Indicates whether the Blob is binary or text. Returns null if unable to determine the encoding.+  """+  isBinary: Boolean++  """+  Indicates whether the contents is truncated+  """+  isTruncated: Boolean!++  """+  The Git object ID+  """+  oid: GitObjectID!++  """+  The Repository the Git object belongs to+  """+  repository: Repository!++  """+  UTF8 text data or null if the Blob is binary+  """+  text: String+}++"""+A special type of user which takes actions on behalf of GitHub Apps.+"""+type Bot implements Actor & Node & UniformResourceLocatable {+  """+  A URL pointing to the GitHub App's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  The username of the actor.+  """+  login: String!++  """+  The HTTP path for this bot+  """+  resourcePath: URI!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this bot+  """+  url: URI!+}++"""+A branch protection rule.+"""+type BranchProtectionRule implements Node {+  """+  A list of conflicts matching branches protection rule and other branch protection rules+  """+  branchProtectionRuleConflicts(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): BranchProtectionRuleConflictConnection!++  """+  The actor who created this branch protection rule.+  """+  creator: Actor++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  Will new commits pushed to matching branches dismiss pull request review approvals.+  """+  dismissesStaleReviews: Boolean!+  id: ID!++  """+  Can admins overwrite branch protection.+  """+  isAdminEnforced: Boolean!++  """+  Repository refs that are protected by this rule+  """+  matchingRefs(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filters refs with query on name+    """+    query: String+  ): RefConnection!++  """+  Identifies the protection rule pattern.+  """+  pattern: String!++  """+  A list push allowances for this branch protection rule.+  """+  pushAllowances(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): PushAllowanceConnection!++  """+  The repository associated with this branch protection rule.+  """+  repository: Repository++  """+  Number of approving reviews required to update matching branches.+  """+  requiredApprovingReviewCount: Int++  """+  List of required status check contexts that must pass for commits to be accepted to matching branches.+  """+  requiredStatusCheckContexts: [String]++  """+  Are approving reviews required to update matching branches.+  """+  requiresApprovingReviews: Boolean!++  """+  Are reviews from code owners required to update matching branches.+  """+  requiresCodeOwnerReviews: Boolean!++  """+  Are commits required to be signed.+  """+  requiresCommitSignatures: Boolean!++  """+  Are status checks required to update matching branches.+  """+  requiresStatusChecks: Boolean!++  """+  Are branches required to be up to date before merging.+  """+  requiresStrictStatusChecks: Boolean!++  """+  Is pushing to matching branches restricted.+  """+  restrictsPushes: Boolean!++  """+  Is dismissal of pull request reviews restricted.+  """+  restrictsReviewDismissals: Boolean!++  """+  A list review dismissal allowances for this branch protection rule.+  """+  reviewDismissalAllowances(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ReviewDismissalAllowanceConnection!+}++"""+A conflict between two branch protection rules.+"""+type BranchProtectionRuleConflict {+  """+  Identifies the branch protection rule.+  """+  branchProtectionRule: BranchProtectionRule++  """+  Identifies the conflicting branch protection rule.+  """+  conflictingBranchProtectionRule: BranchProtectionRule++  """+  Identifies the branch ref that has conflicting rules+  """+  ref: Ref+}++"""+The connection type for BranchProtectionRuleConflict.+"""+type BranchProtectionRuleConflictConnection {+  """+  A list of edges.+  """+  edges: [BranchProtectionRuleConflictEdge]++  """+  A list of nodes.+  """+  nodes: [BranchProtectionRuleConflict]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type BranchProtectionRuleConflictEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: BranchProtectionRuleConflict+}++"""+The connection type for BranchProtectionRule.+"""+type BranchProtectionRuleConnection {+  """+  A list of edges.+  """+  edges: [BranchProtectionRuleEdge]++  """+  A list of nodes.+  """+  nodes: [BranchProtectionRule]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type BranchProtectionRuleEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: BranchProtectionRule+}++"""+Autogenerated input type of CancelEnterpriseAdminInvitation+"""+input CancelEnterpriseAdminInvitationInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the pending enterprise administrator invitation.+  """+  invitationId: ID!+  @possibleTypes(concreteTypes: ["EnterpriseAdministratorInvitation"])+}++"""+Autogenerated return type of CancelEnterpriseAdminInvitation+"""+type CancelEnterpriseAdminInvitationPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The invitation that was canceled.+  """+  invitation: EnterpriseAdministratorInvitation++  """+  A message confirming the result of canceling an administrator invitation.+  """+  message: String+}++"""+Autogenerated input type of ChangeUserStatus+"""+input ChangeUserStatusInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The emoji to represent your status. Can either be a native Unicode emoji or an emoji name with colons, e.g., :grinning:.+  """+  emoji: String++  """+  If set, the user status will not be shown after this date.+  """+  expiresAt: DateTime++  """+  Whether this status should indicate you are not fully available on GitHub, e.g., you are away.+  """+  limitedAvailability: Boolean = false++  """+  A short description of your current status.+  """+  message: String++  """+  The ID of the organization whose members will be allowed to see the status. If+  omitted, the status will be publicly visible.+  """+  organizationId: ID @possibleTypes(concreteTypes: ["Organization"])+}++"""+Autogenerated return type of ChangeUserStatus+"""+type ChangeUserStatusPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Your updated status.+  """+  status: UserStatus+}++"""+A single check annotation.+"""+type CheckAnnotation @preview(toggledBy: "antiope-preview") {+  """+  The annotation's severity level.+  """+  annotationLevel: CheckAnnotationLevel++  """+  The path to the file that this annotation was made on.+  """+  blobUrl: URI!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The position of this annotation.+  """+  location: CheckAnnotationSpan!++  """+  The annotation's message.+  """+  message: String!++  """+  The path that this annotation was made on.+  """+  path: String!++  """+  Additional information about the annotation.+  """+  rawDetails: String++  """+  The annotation's title+  """+  title: String+}++"""+The connection type for CheckAnnotation.+"""+type CheckAnnotationConnection {+  """+  A list of edges.+  """+  edges: [CheckAnnotationEdge]++  """+  A list of nodes.+  """+  nodes: [CheckAnnotation] @preview(toggledBy: "antiope-preview")++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Information from a check run analysis to specific lines of code.+"""+input CheckAnnotationData @preview(toggledBy: "antiope-preview") {+  """+  Represents an annotation's information level+  """+  annotationLevel: CheckAnnotationLevel!++  """+  The location of the annotation+  """+  location: CheckAnnotationRange!++  """+  A short description of the feedback for these lines of code.+  """+  message: String!++  """+  The path of the file to add an annotation to.+  """+  path: String!++  """+  Details about this annotation.+  """+  rawDetails: String++  """+  The title that represents the annotation.+  """+  title: String+}++"""+An edge in a connection.+"""+type CheckAnnotationEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CheckAnnotation @preview(toggledBy: "antiope-preview")+}++"""+Represents an annotation's information level.+"""+enum CheckAnnotationLevel @preview(toggledBy: "antiope-preview") {+  """+  An annotation indicating an inescapable error.+  """+  FAILURE++  """+  An annotation indicating some information.+  """+  NOTICE++  """+  An annotation indicating an ignorable error.+  """+  WARNING+}++"""+A character position in a check annotation.+"""+type CheckAnnotationPosition @preview(toggledBy: "antiope-preview") {+  """+  Column number (1 indexed).+  """+  column: Int++  """+  Line number (1 indexed).+  """+  line: Int!+}++"""+Information from a check run analysis to specific lines of code.+"""+input CheckAnnotationRange @preview(toggledBy: "antiope-preview") {+  """+  The ending column of the range.+  """+  endColumn: Int++  """+  The ending line of the range.+  """+  endLine: Int!++  """+  The starting column of the range.+  """+  startColumn: Int++  """+  The starting line of the range.+  """+  startLine: Int!+}++"""+An inclusive pair of positions for a check annotation.+"""+type CheckAnnotationSpan @preview(toggledBy: "antiope-preview") {+  """+  End position (inclusive).+  """+  end: CheckAnnotationPosition!++  """+  Start position (inclusive).+  """+  start: CheckAnnotationPosition!+}++"""+The possible states for a check suite or run conclusion.+"""+enum CheckConclusionState @preview(toggledBy: "antiope-preview") {+  """+  The check suite or run requires action.+  """+  ACTION_REQUIRED++  """+  The check suite or run has been cancelled.+  """+  CANCELLED++  """+  The check suite or run has failed.+  """+  FAILURE++  """+  The check suite or run was neutral.+  """+  NEUTRAL++  """+  The check suite or run was skipped.+  """+  SKIPPED++  """+  The check suite or run was marked stale by GitHub. Only GitHub can use this conclusion.+  """+  STALE++  """+  The check suite or run has succeeded.+  """+  SUCCESS++  """+  The check suite or run has timed out.+  """+  TIMED_OUT+}++"""+A check run.+"""+type CheckRun implements Node & UniformResourceLocatable+@preview(toggledBy: "antiope-preview") {+  """+  The check run's annotations+  """+  annotations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CheckAnnotationConnection++  """+  The check suite that this run is a part of.+  """+  checkSuite: CheckSuite!++  """+  Identifies the date and time when the check run was completed.+  """+  completedAt: DateTime++  """+  The conclusion of the check run.+  """+  conclusion: CheckConclusionState++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The URL from which to find full details of the check run on the integrator's site.+  """+  detailsUrl: URI++  """+  A reference for the check run on the integrator's system.+  """+  externalId: String+  id: ID!++  """+  The name of the check for this check run.+  """+  name: String!++  """+  The permalink to the check run summary.+  """+  permalink: URI!++  """+  The repository associated with this check run.+  """+  repository: Repository!++  """+  The HTTP path for this check run.+  """+  resourcePath: URI!++  """+  Identifies the date and time when the check run was started.+  """+  startedAt: DateTime++  """+  The current status of the check run.+  """+  status: CheckStatusState!++  """+  A string representing the check run's summary+  """+  summary: String++  """+  A string representing the check run's text+  """+  text: String++  """+  A string representing the check run+  """+  title: String++  """+  The HTTP URL for this check run.+  """+  url: URI!+}++"""+Possible further actions the integrator can perform.+"""+input CheckRunAction @preview(toggledBy: "antiope-preview") {+  """+  A short explanation of what this action would do.+  """+  description: String!++  """+  A reference for the action on the integrator's system.+  """+  identifier: String!++  """+  The text to be displayed on a button in the web UI.+  """+  label: String!+}++"""+The connection type for CheckRun.+"""+type CheckRunConnection {+  """+  A list of edges.+  """+  edges: [CheckRunEdge]++  """+  A list of nodes.+  """+  nodes: [CheckRun] @preview(toggledBy: "antiope-preview")++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type CheckRunEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CheckRun @preview(toggledBy: "antiope-preview")+}++"""+The filters that are available when fetching check runs.+"""+input CheckRunFilter @preview(toggledBy: "antiope-preview") {+  """+  Filters the check runs created by this application ID.+  """+  appId: Int++  """+  Filters the check runs by this name.+  """+  checkName: String++  """+  Filters the check runs by this type.+  """+  checkType: CheckRunType++  """+  Filters the check runs by this status.+  """+  status: CheckStatusState+}++"""+Descriptive details about the check run.+"""+input CheckRunOutput @preview(toggledBy: "antiope-preview") {+  """+  The annotations that are made as part of the check run.+  """+  annotations: [CheckAnnotationData!]++  """+  Images attached to the check run output displayed in the GitHub pull request UI.+  """+  images: [CheckRunOutputImage!]++  """+  The summary of the check run (supports Commonmark).+  """+  summary: String!++  """+  The details of the check run (supports Commonmark).+  """+  text: String++  """+  A title to provide for this check run.+  """+  title: String!+}++"""+Images attached to the check run output displayed in the GitHub pull request UI.+"""+input CheckRunOutputImage @preview(toggledBy: "antiope-preview") {+  """+  The alternative text for the image.+  """+  alt: String!++  """+  A short image description.+  """+  caption: String++  """+  The full URL of the image.+  """+  imageUrl: URI!+}++"""+The possible types of check runs.+"""+enum CheckRunType @preview(toggledBy: "antiope-preview") {+  """+  Every check run available.+  """+  ALL++  """+  The latest check run.+  """+  LATEST+}++"""+The possible states for a check suite or run status.+"""+enum CheckStatusState @preview(toggledBy: "antiope-preview") {+  """+  The check suite or run has been completed.+  """+  COMPLETED++  """+  The check suite or run is in progress.+  """+  IN_PROGRESS++  """+  The check suite or run has been queued.+  """+  QUEUED++  """+  The check suite or run has been requested.+  """+  REQUESTED+}++"""+A check suite.+"""+type CheckSuite implements Node @preview(toggledBy: "antiope-preview") {+  """+  The GitHub App which created this check suite.+  """+  app: App++  """+  The name of the branch for this check suite.+  """+  branch: Ref++  """+  The check runs associated with a check suite.+  """+  checkRuns(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Filters the check runs by this type.+    """+    filterBy: CheckRunFilter++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CheckRunConnection++  """+  The commit for this check suite+  """+  commit: Commit!++  """+  The conclusion of this check suite.+  """+  conclusion: CheckConclusionState++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  A list of open pull requests matching the check suite.+  """+  matchingPullRequests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    The base ref name to filter the pull requests by.+    """+    baseRefName: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    The head ref name to filter the pull requests by.+    """+    headRefName: String++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pull requests returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the pull requests by.+    """+    states: [PullRequestState!]+  ): PullRequestConnection++  """+  The push that triggered this check suite.+  """+  push: Push++  """+  The repository associated with this check suite.+  """+  repository: Repository!++  """+  The HTTP path for this check suite+  """+  resourcePath: URI!++  """+  The status of this check suite.+  """+  status: CheckStatusState!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this check suite+  """+  url: URI!+}++"""+The auto-trigger preferences that are available for check suites.+"""+input CheckSuiteAutoTriggerPreference @preview(toggledBy: "antiope-preview") {+  """+  The node ID of the application that owns the check suite.+  """+  appId: ID!++  """+  Set to `true` to enable automatic creation of CheckSuite events upon pushes to the repository.+  """+  setting: Boolean!+}++"""+The connection type for CheckSuite.+"""+type CheckSuiteConnection {+  """+  A list of edges.+  """+  edges: [CheckSuiteEdge]++  """+  A list of nodes.+  """+  nodes: [CheckSuite] @preview(toggledBy: "antiope-preview")++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type CheckSuiteEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CheckSuite @preview(toggledBy: "antiope-preview")+}++"""+The filters that are available when fetching check suites.+"""+input CheckSuiteFilter @preview(toggledBy: "antiope-preview") {+  """+  Filters the check suites created by this application ID.+  """+  appId: Int++  """+  Filters the check suites by this name.+  """+  checkName: String+}++"""+Autogenerated input type of ClearLabelsFromLabelable+"""+input ClearLabelsFromLabelableInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The id of the labelable object to clear the labels from.+  """+  labelableId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "Labelable"+  )+}++"""+Autogenerated return type of ClearLabelsFromLabelable+"""+type ClearLabelsFromLabelablePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The item that was unlabeled.+  """+  labelable: Labelable+}++"""+Autogenerated input type of CloneProject+"""+input CloneProjectInput {+  """+  The description of the project.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Whether or not to clone the source project's workflows.+  """+  includeWorkflows: Boolean!++  """+  The name of the project.+  """+  name: String!++  """+  The visibility of the project, defaults to false (private).+  """+  public: Boolean++  """+  The source project to clone.+  """+  sourceId: ID! @possibleTypes(concreteTypes: ["Project"])++  """+  The owner ID to create the project under.+  """+  targetOwnerId: ID!+  @possibleTypes(+    concreteTypes: ["Organization", "Repository", "User"]+    abstractType: "ProjectOwner"+  )+}++"""+Autogenerated return type of CloneProject+"""+type CloneProjectPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The id of the JobStatus for populating cloned fields.+  """+  jobStatusId: String++  """+  The new cloned project.+  """+  project: Project+}++"""+Autogenerated input type of CloneTemplateRepository+"""+input CloneTemplateRepositoryInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A short description of the new repository.+  """+  description: String++  """+  Whether to copy all branches from the template to the new repository. Defaults+  to copying only the default branch of the template.+  """+  includeAllBranches: Boolean = false++  """+  The name of the new repository.+  """+  name: String!++  """+  The ID of the owner for the new repository.+  """+  ownerId: ID!+  @possibleTypes(+    concreteTypes: ["Organization", "User"]+    abstractType: "RepositoryOwner"+  )++  """+  The Node ID of the template repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  Indicates the repository's visibility level.+  """+  visibility: RepositoryVisibility!+}++"""+Autogenerated return type of CloneTemplateRepository+"""+type CloneTemplateRepositoryPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new repository.+  """+  repository: Repository+}++"""+An object that can be closed+"""+interface Closable {+  """+  `true` if the object is closed (definition of closed may depend on type)+  """+  closed: Boolean!++  """+  Identifies the date and time when the object was closed.+  """+  closedAt: DateTime+}++"""+Autogenerated input type of CloseIssue+"""+input CloseIssueInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the issue to be closed.+  """+  issueId: ID! @possibleTypes(concreteTypes: ["Issue"])+}++"""+Autogenerated return type of CloseIssue+"""+type CloseIssuePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The issue that was closed.+  """+  issue: Issue+}++"""+Autogenerated input type of ClosePullRequest+"""+input ClosePullRequestInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the pull request to be closed.+  """+  pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])+}++"""+Autogenerated return type of ClosePullRequest+"""+type ClosePullRequestPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The pull request that was closed.+  """+  pullRequest: PullRequest+}++"""+Represents a 'closed' event on any `Closable`.+"""+type ClosedEvent implements Node & UniformResourceLocatable {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Object that was closed.+  """+  closable: Closable!++  """+  Object which triggered the creation of this event.+  """+  closer: Closer++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  The HTTP path for this closed event.+  """+  resourcePath: URI!++  """+  The HTTP URL for this closed event.+  """+  url: URI!+}++"""+The object which triggered a `ClosedEvent`.+"""+union Closer = Commit | PullRequest++"""+The Code of Conduct for a repository+"""+type CodeOfConduct implements Node {+  """+  The body of the Code of Conduct+  """+  body: String+  id: ID!++  """+  The key for the Code of Conduct+  """+  key: String!++  """+  The formal name of the Code of Conduct+  """+  name: String!++  """+  The HTTP path for this Code of Conduct+  """+  resourcePath: URI++  """+  The HTTP URL for this Code of Conduct+  """+  url: URI+}++"""+Collaborators affiliation level with a subject.+"""+enum CollaboratorAffiliation {+  """+  All collaborators the authenticated user can see.+  """+  ALL++  """+  All collaborators with permissions to an organization-owned subject, regardless of organization membership status.+  """+  DIRECT++  """+  All outside collaborators of an organization-owned subject.+  """+  OUTSIDE+}++"""+Represents a comment.+"""+interface Comment {+  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the subject of the comment.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  The body as Markdown.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The body rendered to text.+  """+  bodyText: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  The actor who edited the comment.+  """+  editor: Actor+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!+}++"""+A comment author association with repository.+"""+enum CommentAuthorAssociation {+  """+  Author has been invited to collaborate on the repository.+  """+  COLLABORATOR++  """+  Author has previously committed to the repository.+  """+  CONTRIBUTOR++  """+  Author has not previously committed to GitHub.+  """+  FIRST_TIMER++  """+  Author has not previously committed to the repository.+  """+  FIRST_TIME_CONTRIBUTOR++  """+  Author is a member of the organization that owns the repository.+  """+  MEMBER++  """+  Author has no association with the repository.+  """+  NONE++  """+  Author is the owner of the repository.+  """+  OWNER+}++"""+The possible errors that will prevent a user from updating a comment.+"""+enum CommentCannotUpdateReason {+  """+  Unable to create comment because repository is archived.+  """+  ARCHIVED++  """+  You cannot update this comment+  """+  DENIED++  """+  You must be the author or have write access to this repository to update this comment.+  """+  INSUFFICIENT_ACCESS++  """+  Unable to create comment because issue is locked.+  """+  LOCKED++  """+  You must be logged in to update this comment.+  """+  LOGIN_REQUIRED++  """+  Repository is under maintenance.+  """+  MAINTENANCE++  """+  At least one email address must be verified to update this comment.+  """+  VERIFIED_EMAIL_REQUIRED+}++"""+Represents a 'comment_deleted' event on a given issue or pull request.+"""+type CommentDeletedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!+}++"""+Represents a Git commit.+"""+type Commit implements GitObject & Node & Subscribable & UniformResourceLocatable {+  """+  An abbreviated version of the Git object ID+  """+  abbreviatedOid: String!++  """+  The number of additions in this commit.+  """+  additions: Int!++  """+  The pull requests associated with a commit+  """+  associatedPullRequests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pull requests.+    """+    orderBy: PullRequestOrder = { field: CREATED_AT, direction: ASC }+  ): PullRequestConnection++  """+  Authorship details of the commit.+  """+  author: GitActor++  """+  Check if the committer and the author match.+  """+  authoredByCommitter: Boolean!++  """+  The datetime when this commit was authored.+  """+  authoredDate: DateTime!++  """+  Fetches `git blame` information.+  """+  blame(+    """+    The file whose Git blame information you want.+    """+    path: String!+  ): Blame!++  """+  The number of changed files in this commit.+  """+  changedFiles: Int!++  """+  The check suites associated with a commit.+  """+  checkSuites(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Filters the check suites by this type.+    """+    filterBy: CheckSuiteFilter++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CheckSuiteConnection @preview(toggledBy: "antiope-preview")++  """+  Comments made on the commit.+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CommitCommentConnection!++  """+  The HTTP path for this Git object+  """+  commitResourcePath: URI!++  """+  The HTTP URL for this Git object+  """+  commitUrl: URI!++  """+  The datetime when this commit was committed.+  """+  committedDate: DateTime!++  """+  Check if commited via GitHub web UI.+  """+  committedViaWeb: Boolean!++  """+  Committership details of the commit.+  """+  committer: GitActor++  """+  The number of deletions in this commit.+  """+  deletions: Int!++  """+  The deployments associated with a commit.+  """+  deployments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Environments to list deployments for+    """+    environments: [String!]++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for deployments returned from the connection.+    """+    orderBy: DeploymentOrder = { field: CREATED_AT, direction: ASC }+  ): DeploymentConnection++  """+  The linear commit history starting from (and including) this commit, in the same order as `git log`.+  """+  history(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    If non-null, filters history to only show commits with matching authorship.+    """+    author: CommitAuthor++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    If non-null, filters history to only show commits touching files under this path.+    """+    path: String++    """+    Allows specifying a beginning time or date for fetching commits.+    """+    since: GitTimestamp++    """+    Allows specifying an ending time or date for fetching commits.+    """+    until: GitTimestamp+  ): CommitHistoryConnection!+  id: ID!++  """+  The Git commit message+  """+  message: String!++  """+  The Git commit message body+  """+  messageBody: String!++  """+  The commit message body rendered to HTML.+  """+  messageBodyHTML: HTML!++  """+  The Git commit message headline+  """+  messageHeadline: String!++  """+  The commit message headline rendered to HTML.+  """+  messageHeadlineHTML: HTML!++  """+  The Git object ID+  """+  oid: GitObjectID!++  """+  The organization this commit was made on behalf of.+  """+  onBehalfOf: Organization++  """+  The parents of a commit.+  """+  parents(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CommitConnection!++  """+  The datetime when this commit was pushed.+  """+  pushedDate: DateTime++  """+  The Repository this commit belongs to+  """+  repository: Repository!++  """+  The HTTP path for this commit+  """+  resourcePath: URI!++  """+  Commit signing information, if present.+  """+  signature: GitSignature++  """+  Status information for this commit+  """+  status: Status++  """+  Check and Status rollup information for this commit.+  """+  statusCheckRollup: StatusCheckRollup++  """+  Returns a list of all submodules in this repository as of this Commit parsed from the .gitmodules file.+  """+  submodules(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): SubmoduleConnection!++  """+  Returns a URL to download a tarball archive for a repository.+  Note: For private repositories, these links are temporary and expire after five minutes.+  """+  tarballUrl: URI!++  """+  Commit's root Tree+  """+  tree: Tree!++  """+  The HTTP path for the tree of this commit+  """+  treeResourcePath: URI!++  """+  The HTTP URL for the tree of this commit+  """+  treeUrl: URI!++  """+  The HTTP URL for this commit+  """+  url: URI!++  """+  Check if the viewer is able to change their subscription status for the repository.+  """+  viewerCanSubscribe: Boolean!++  """+  Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.+  """+  viewerSubscription: SubscriptionState++  """+  Returns a URL to download a zipball archive for a repository.+  Note: For private repositories, these links are temporary and expire after five minutes.+  """+  zipballUrl: URI!+}++"""+Specifies an author for filtering Git commits.+"""+input CommitAuthor {+  """+  Email addresses to filter by. Commits authored by any of the specified email addresses will be returned.+  """+  emails: [String!]++  """+  ID of a User to filter by. If non-null, only commits authored by this user+  will be returned. This field takes precedence over emails.+  """+  id: ID+}++"""+Represents a comment on a given Commit.+"""+type CommitComment implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment {+  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the subject of the comment.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  Identifies the comment body.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The body rendered to text.+  """+  bodyText: String!++  """+  Identifies the commit associated with the comment, if the commit exists.+  """+  commit: Commit++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The actor who edited the comment.+  """+  editor: Actor+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  Returns whether or not a comment has been minimized.+  """+  isMinimized: Boolean!++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  Returns why the comment was minimized.+  """+  minimizedReason: String++  """+  Identifies the file path associated with the comment.+  """+  path: String++  """+  Identifies the line position associated with the comment.+  """+  position: Int++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  The repository associated with this node.+  """+  repository: Repository!++  """+  The HTTP path permalink for this commit comment.+  """+  resourcePath: URI!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL permalink for this commit comment.+  """+  url: URI!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Check if the current viewer can delete this object.+  """+  viewerCanDelete: Boolean!++  """+  Check if the current viewer can minimize this object.+  """+  viewerCanMinimize: Boolean!++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!+}++"""+The connection type for CommitComment.+"""+type CommitCommentConnection {+  """+  A list of edges.+  """+  edges: [CommitCommentEdge]++  """+  A list of nodes.+  """+  nodes: [CommitComment]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type CommitCommentEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CommitComment+}++"""+A thread of comments on a commit.+"""+type CommitCommentThread implements Node & RepositoryNode {+  """+  The comments that exist in this thread.+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CommitCommentConnection!++  """+  The commit the comments were made on.+  """+  commit: Commit+  id: ID!++  """+  The file the comments were made on.+  """+  path: String++  """+  The position in the diff for the commit that the comment was made on.+  """+  position: Int++  """+  The repository associated with this node.+  """+  repository: Repository!+}++"""+The connection type for Commit.+"""+type CommitConnection {+  """+  A list of edges.+  """+  edges: [CommitEdge]++  """+  A list of nodes.+  """+  nodes: [Commit]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Ordering options for commit contribution connections.+"""+input CommitContributionOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field by which to order commit contributions.+  """+  field: CommitContributionOrderField!+}++"""+Properties by which commit contribution connections can be ordered.+"""+enum CommitContributionOrderField {+  """+  Order commit contributions by how many commits they represent.+  """+  COMMIT_COUNT++  """+  Order commit contributions by when they were made.+  """+  OCCURRED_AT+}++"""+This aggregates commits made by a user within one repository.+"""+type CommitContributionsByRepository {+  """+  The commit contributions, each representing a day.+  """+  contributions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for commit contributions returned from the connection.+    """+    orderBy: CommitContributionOrder = { field: OCCURRED_AT, direction: DESC }+  ): CreatedCommitContributionConnection!++  """+  The repository in which the commits were made.+  """+  repository: Repository!++  """+  The HTTP path for the user's commits to the repository in this time range.+  """+  resourcePath: URI!++  """+  The HTTP URL for the user's commits to the repository in this time range.+  """+  url: URI!+}++"""+An edge in a connection.+"""+type CommitEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Commit+}++"""+The connection type for Commit.+"""+type CommitHistoryConnection {+  """+  A list of edges.+  """+  edges: [CommitEdge]++  """+  A list of nodes.+  """+  nodes: [Commit]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Represents a 'connected' event on a given issue or pull request.+"""+type ConnectedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Reference originated in a different repository.+  """+  isCrossRepository: Boolean!++  """+  Issue or pull request that made the reference.+  """+  source: ReferencedSubject!++  """+  Issue or pull request which was connected.+  """+  subject: ReferencedSubject!+}++"""+A content attachment+"""+type ContentAttachment {+  """+  The body text of the content attachment. This parameter supports markdown.+  """+  body: String!++  """+  The content reference that the content attachment is attached to.+  """+  contentReference: ContentReference!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int!+  id: ID!++  """+  The title of the content attachment.+  """+  title: String!+}++"""+A content reference+"""+type ContentReference {+  """+  Identifies the primary key from the database.+  """+  databaseId: Int!+  id: ID!++  """+  The reference of the content reference.+  """+  reference: String!+}++"""+Represents a contribution a user made on GitHub, such as opening an issue.+"""+interface Contribution {+  """+  Whether this contribution is associated with a record you do not have access to. For+  example, your own 'first issue' contribution may have been made on a repository you can no+  longer access.+  """+  isRestricted: Boolean!++  """+  When this contribution was made.+  """+  occurredAt: DateTime!++  """+  The HTTP path for this contribution.+  """+  resourcePath: URI!++  """+  The HTTP URL for this contribution.+  """+  url: URI!++  """+  The user who made this contribution.+  """+  user: User!+}++"""+A calendar of contributions made on GitHub by a user.+"""+type ContributionCalendar {+  """+  A list of hex color codes used in this calendar. The darker the color, the more contributions it represents.+  """+  colors: [String!]!++  """+  Determine if the color set was chosen because it's currently Halloween.+  """+  isHalloween: Boolean!++  """+  A list of the months of contributions in this calendar.+  """+  months: [ContributionCalendarMonth!]!++  """+  The count of total contributions in the calendar.+  """+  totalContributions: Int!++  """+  A list of the weeks of contributions in this calendar.+  """+  weeks: [ContributionCalendarWeek!]!+}++"""+Represents a single day of contributions on GitHub by a user.+"""+type ContributionCalendarDay {+  """+  The hex color code that represents how many contributions were made on this day compared to others in the calendar.+  """+  color: String!++  """+  How many contributions were made by the user on this day.+  """+  contributionCount: Int!++  """+  The day this square represents.+  """+  date: Date!++  """+  A number representing which day of the week this square represents, e.g., 1 is Monday.+  """+  weekday: Int!+}++"""+A month of contributions in a user's contribution graph.+"""+type ContributionCalendarMonth {+  """+  The date of the first day of this month.+  """+  firstDay: Date!++  """+  The name of the month.+  """+  name: String!++  """+  How many weeks started in this month.+  """+  totalWeeks: Int!++  """+  The year the month occurred in.+  """+  year: Int!+}++"""+A week of contributions in a user's contribution graph.+"""+type ContributionCalendarWeek {+  """+  The days of contributions in this week.+  """+  contributionDays: [ContributionCalendarDay!]!++  """+  The date of the earliest square in this week.+  """+  firstDay: Date!+}++"""+Ordering options for contribution connections.+"""+input ContributionOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!+}++"""+A contributions collection aggregates contributions such as opened issues and commits created by a user.+"""+type ContributionsCollection {+  """+  Commit contributions made by the user, grouped by repository.+  """+  commitContributionsByRepository(+    """+    How many repositories should be included.+    """+    maxRepositories: Int = 25+  ): [CommitContributionsByRepository!]!++  """+  A calendar of this user's contributions on GitHub.+  """+  contributionCalendar: ContributionCalendar!++  """+  The years the user has been making contributions with the most recent year first.+  """+  contributionYears: [Int!]!++  """+  Determine if this collection's time span ends in the current month.+  """+  doesEndInCurrentMonth: Boolean!++  """+  The date of the first restricted contribution the user made in this time+  period. Can only be non-null when the user has enabled private contribution counts.+  """+  earliestRestrictedContributionDate: Date++  """+  The ending date and time of this collection.+  """+  endedAt: DateTime!++  """+  The first issue the user opened on GitHub. This will be null if that issue was+  opened outside the collection's time range and ignoreTimeRange is false. If+  the issue is not visible but the user has opted to show private contributions,+  a RestrictedContribution will be returned.+  """+  firstIssueContribution: CreatedIssueOrRestrictedContribution++  """+  The first pull request the user opened on GitHub. This will be null if that+  pull request was opened outside the collection's time range and+  ignoreTimeRange is not true. If the pull request is not visible but the user+  has opted to show private contributions, a RestrictedContribution will be returned.+  """+  firstPullRequestContribution: CreatedPullRequestOrRestrictedContribution++  """+  The first repository the user created on GitHub. This will be null if that+  first repository was created outside the collection's time range and+  ignoreTimeRange is false. If the repository is not visible, then a+  RestrictedContribution is returned.+  """+  firstRepositoryContribution: CreatedRepositoryOrRestrictedContribution++  """+  Does the user have any more activity in the timeline that occurred prior to the collection's time range?+  """+  hasActivityInThePast: Boolean!++  """+  Determine if there are any contributions in this collection.+  """+  hasAnyContributions: Boolean!++  """+  Determine if the user made any contributions in this time frame whose details+  are not visible because they were made in a private repository. Can only be+  true if the user enabled private contribution counts.+  """+  hasAnyRestrictedContributions: Boolean!++  """+  Whether or not the collector's time span is all within the same day.+  """+  isSingleDay: Boolean!++  """+  A list of issues the user opened.+  """+  issueContributions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Should the user's first issue ever be excluded from the result.+    """+    excludeFirst: Boolean = false++    """+    Should the user's most commented issue be excluded from the result.+    """+    excludePopular: Boolean = false++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for contributions returned from the connection.+    """+    orderBy: ContributionOrder = { direction: DESC }+  ): CreatedIssueContributionConnection!++  """+  Issue contributions made by the user, grouped by repository.+  """+  issueContributionsByRepository(+    """+    Should the user's first issue ever be excluded from the result.+    """+    excludeFirst: Boolean = false++    """+    Should the user's most commented issue be excluded from the result.+    """+    excludePopular: Boolean = false++    """+    How many repositories should be included.+    """+    maxRepositories: Int = 25+  ): [IssueContributionsByRepository!]!++  """+  When the user signed up for GitHub. This will be null if that sign up date+  falls outside the collection's time range and ignoreTimeRange is false.+  """+  joinedGitHubContribution: JoinedGitHubContribution++  """+  The date of the most recent restricted contribution the user made in this time+  period. Can only be non-null when the user has enabled private contribution counts.+  """+  latestRestrictedContributionDate: Date++  """+  When this collection's time range does not include any activity from the user, use this+  to get a different collection from an earlier time range that does have activity.+  """+  mostRecentCollectionWithActivity: ContributionsCollection++  """+  Returns a different contributions collection from an earlier time range than this one+  that does not have any contributions.+  """+  mostRecentCollectionWithoutActivity: ContributionsCollection++  """+  The issue the user opened on GitHub that received the most comments in the specified+  time frame.+  """+  popularIssueContribution: CreatedIssueContribution++  """+  The pull request the user opened on GitHub that received the most comments in the+  specified time frame.+  """+  popularPullRequestContribution: CreatedPullRequestContribution++  """+  Pull request contributions made by the user.+  """+  pullRequestContributions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Should the user's first pull request ever be excluded from the result.+    """+    excludeFirst: Boolean = false++    """+    Should the user's most commented pull request be excluded from the result.+    """+    excludePopular: Boolean = false++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for contributions returned from the connection.+    """+    orderBy: ContributionOrder = { direction: DESC }+  ): CreatedPullRequestContributionConnection!++  """+  Pull request contributions made by the user, grouped by repository.+  """+  pullRequestContributionsByRepository(+    """+    Should the user's first pull request ever be excluded from the result.+    """+    excludeFirst: Boolean = false++    """+    Should the user's most commented pull request be excluded from the result.+    """+    excludePopular: Boolean = false++    """+    How many repositories should be included.+    """+    maxRepositories: Int = 25+  ): [PullRequestContributionsByRepository!]!++  """+  Pull request review contributions made by the user.+  """+  pullRequestReviewContributions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for contributions returned from the connection.+    """+    orderBy: ContributionOrder = { direction: DESC }+  ): CreatedPullRequestReviewContributionConnection!++  """+  Pull request review contributions made by the user, grouped by repository.+  """+  pullRequestReviewContributionsByRepository(+    """+    How many repositories should be included.+    """+    maxRepositories: Int = 25+  ): [PullRequestReviewContributionsByRepository!]!++  """+  A list of repositories owned by the user that the user created in this time range.+  """+  repositoryContributions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Should the user's first repository ever be excluded from the result.+    """+    excludeFirst: Boolean = false++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for contributions returned from the connection.+    """+    orderBy: ContributionOrder = { direction: DESC }+  ): CreatedRepositoryContributionConnection!++  """+  A count of contributions made by the user that the viewer cannot access. Only+  non-zero when the user has chosen to share their private contribution counts.+  """+  restrictedContributionsCount: Int!++  """+  The beginning date and time of this collection.+  """+  startedAt: DateTime!++  """+  How many commits were made by the user in this time span.+  """+  totalCommitContributions: Int!++  """+  How many issues the user opened.+  """+  totalIssueContributions(+    """+    Should the user's first issue ever be excluded from this count.+    """+    excludeFirst: Boolean = false++    """+    Should the user's most commented issue be excluded from this count.+    """+    excludePopular: Boolean = false+  ): Int!++  """+  How many pull requests the user opened.+  """+  totalPullRequestContributions(+    """+    Should the user's first pull request ever be excluded from this count.+    """+    excludeFirst: Boolean = false++    """+    Should the user's most commented pull request be excluded from this count.+    """+    excludePopular: Boolean = false+  ): Int!++  """+  How many pull request reviews the user left.+  """+  totalPullRequestReviewContributions: Int!++  """+  How many different repositories the user committed to.+  """+  totalRepositoriesWithContributedCommits: Int!++  """+  How many different repositories the user opened issues in.+  """+  totalRepositoriesWithContributedIssues(+    """+    Should the user's first issue ever be excluded from this count.+    """+    excludeFirst: Boolean = false++    """+    Should the user's most commented issue be excluded from this count.+    """+    excludePopular: Boolean = false+  ): Int!++  """+  How many different repositories the user left pull request reviews in.+  """+  totalRepositoriesWithContributedPullRequestReviews: Int!++  """+  How many different repositories the user opened pull requests in.+  """+  totalRepositoriesWithContributedPullRequests(+    """+    Should the user's first pull request ever be excluded from this count.+    """+    excludeFirst: Boolean = false++    """+    Should the user's most commented pull request be excluded from this count.+    """+    excludePopular: Boolean = false+  ): Int!++  """+  How many repositories the user created.+  """+  totalRepositoryContributions(+    """+    Should the user's first repository ever be excluded from this count.+    """+    excludeFirst: Boolean = false+  ): Int!++  """+  The user who made the contributions in this collection.+  """+  user: User!+}++"""+Autogenerated input type of ConvertProjectCardNoteToIssue+"""+input ConvertProjectCardNoteToIssueInput {+  """+  The body of the newly created issue.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ProjectCard ID to convert.+  """+  projectCardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"])++  """+  The ID of the repository to create the issue in.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  The title of the newly created issue. Defaults to the card's note text.+  """+  title: String+}++"""+Autogenerated return type of ConvertProjectCardNoteToIssue+"""+type ConvertProjectCardNoteToIssuePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated ProjectCard.+  """+  projectCard: ProjectCard+}++"""+Represents a 'convert_to_draft' event on a given pull request.+"""+type ConvertToDraftEvent implements Node & UniformResourceLocatable {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  The HTTP path for this convert to draft event.+  """+  resourcePath: URI!++  """+  The HTTP URL for this convert to draft event.+  """+  url: URI!+}++"""+Represents a 'converted_note_to_issue' event on a given issue or pull request.+"""+type ConvertedNoteToIssueEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  Project referenced by event.+  """+  project: Project @preview(toggledBy: "starfox-preview")++  """+  Project card referenced by this project event.+  """+  projectCard: ProjectCard @preview(toggledBy: "starfox-preview")++  """+  Column name referenced by this project event.+  """+  projectColumnName: String! @preview(toggledBy: "starfox-preview")+}++"""+Autogenerated input type of CreateBranchProtectionRule+"""+input CreateBranchProtectionRuleInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Will new commits pushed to matching branches dismiss pull request review approvals.+  """+  dismissesStaleReviews: Boolean++  """+  Can admins overwrite branch protection.+  """+  isAdminEnforced: Boolean++  """+  The glob-like pattern used to determine matching branches.+  """+  pattern: String!++  """+  A list of User, Team or App IDs allowed to push to matching branches.+  """+  pushActorIds: [ID!]++  """+  The global relay id of the repository in which a new branch protection rule should be created in.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  Number of approving reviews required to update matching branches.+  """+  requiredApprovingReviewCount: Int++  """+  List of required status check contexts that must pass for commits to be accepted to matching branches.+  """+  requiredStatusCheckContexts: [String!]++  """+  Are approving reviews required to update matching branches.+  """+  requiresApprovingReviews: Boolean++  """+  Are reviews from code owners required to update matching branches.+  """+  requiresCodeOwnerReviews: Boolean++  """+  Are commits required to be signed.+  """+  requiresCommitSignatures: Boolean++  """+  Are status checks required to update matching branches.+  """+  requiresStatusChecks: Boolean++  """+  Are branches required to be up to date before merging.+  """+  requiresStrictStatusChecks: Boolean++  """+  Is pushing to matching branches restricted.+  """+  restrictsPushes: Boolean++  """+  Is dismissal of pull request reviews restricted.+  """+  restrictsReviewDismissals: Boolean++  """+  A list of User or Team IDs allowed to dismiss reviews on pull requests targeting matching branches.+  """+  reviewDismissalActorIds: [ID!]+}++"""+Autogenerated return type of CreateBranchProtectionRule+"""+type CreateBranchProtectionRulePayload {+  """+  The newly created BranchProtectionRule.+  """+  branchProtectionRule: BranchProtectionRule++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of CreateCheckRun+"""+input CreateCheckRunInput @preview(toggledBy: "antiope-preview") {+  """+  Possible further actions the integrator can perform, which a user may trigger.+  """+  actions: [CheckRunAction!]++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The time that the check run finished.+  """+  completedAt: DateTime++  """+  The final conclusion of the check.+  """+  conclusion: CheckConclusionState++  """+  The URL of the integrator's site that has the full details of the check.+  """+  detailsUrl: URI++  """+  A reference for the run on the integrator's system.+  """+  externalId: String++  """+  The SHA of the head commit.+  """+  headSha: GitObjectID!++  """+  The name of the check.+  """+  name: String!++  """+  Descriptive details about the run.+  """+  output: CheckRunOutput++  """+  The node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  The time that the check run began.+  """+  startedAt: DateTime++  """+  The current status.+  """+  status: RequestableCheckStatusState+}++"""+Autogenerated return type of CreateCheckRun+"""+type CreateCheckRunPayload @preview(toggledBy: "antiope-preview") {+  """+  The newly created check run.+  """+  checkRun: CheckRun++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of CreateCheckSuite+"""+input CreateCheckSuiteInput @preview(toggledBy: "antiope-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The SHA of the head commit.+  """+  headSha: GitObjectID!++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of CreateCheckSuite+"""+type CreateCheckSuitePayload @preview(toggledBy: "antiope-preview") {+  """+  The newly created check suite.+  """+  checkSuite: CheckSuite++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of CreateContentAttachment+"""+input CreateContentAttachmentInput {+  """+  The body of the content attachment, which may contain markdown.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The node ID of the content_reference.+  """+  contentReferenceId: ID! @possibleTypes(concreteTypes: ["ContentReference"])++  """+  The title of the content attachment.+  """+  title: String!+}++"""+Autogenerated return type of CreateContentAttachment+"""+type CreateContentAttachmentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The newly created content attachment.+  """+  contentAttachment: ContentAttachment+}++"""+Autogenerated input type of CreateDeployment+"""+input CreateDeploymentInput @preview(toggledBy: "flash-preview") {+  """+  Attempt to automatically merge the default branch into the requested ref, defaults to true.+  """+  autoMerge: Boolean = true++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Short description of the deployment.+  """+  description: String = ""++  """+  Name for the target deployment environment.+  """+  environment: String = "production"++  """+  JSON payload with extra information about the deployment.+  """+  payload: String = "{}"++  """+  The node ID of the ref to be deployed.+  """+  refId: ID! @possibleTypes(concreteTypes: ["Ref"])++  """+  The node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  The status contexts to verify against commit status checks. To bypass required+  contexts, pass an empty array. Defaults to all unique contexts.+  """+  requiredContexts: [String!]++  """+  Specifies a task to execute.+  """+  task: String = "deploy"+}++"""+Autogenerated return type of CreateDeployment+"""+type CreateDeploymentPayload @preview(toggledBy: "flash-preview") {+  """+  True if the default branch has been auto-merged into the deployment ref.+  """+  autoMerged: Boolean++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new deployment.+  """+  deployment: Deployment+}++"""+Autogenerated input type of CreateDeploymentStatus+"""+input CreateDeploymentStatusInput @preview(toggledBy: "flash-preview") {+  """+  Adds a new inactive status to all non-transient, non-production environment+  deployments with the same repository and environment name as the created+  status's deployment.+  """+  autoInactive: Boolean = true++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The node ID of the deployment.+  """+  deploymentId: ID! @possibleTypes(concreteTypes: ["Deployment"])++  """+  A short description of the status. Maximum length of 140 characters.+  """+  description: String = ""++  """+  If provided, updates the environment of the deploy. Otherwise, does not modify the environment.+  """+  environment: String++  """+  Sets the URL for accessing your environment.+  """+  environmentUrl: String = ""++  """+  The log URL to associate with this status.       This URL should contain+  output to keep the user updated while the task is running       or serve as+  historical information for what happened in the deployment.+  """+  logUrl: String = ""++  """+  The state of the deployment.+  """+  state: DeploymentStatusState!+}++"""+Autogenerated return type of CreateDeploymentStatus+"""+type CreateDeploymentStatusPayload @preview(toggledBy: "flash-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new deployment status.+  """+  deploymentStatus: DeploymentStatus+}++"""+Autogenerated input type of CreateEnterpriseOrganization+"""+input CreateEnterpriseOrganizationInput {+  """+  The logins for the administrators of the new organization.+  """+  adminLogins: [String!]!++  """+  The email used for sending billing receipts.+  """+  billingEmail: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise owning the new organization.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The login of the new organization.+  """+  login: String!++  """+  The profile name of the new organization.+  """+  profileName: String!+}++"""+Autogenerated return type of CreateEnterpriseOrganization+"""+type CreateEnterpriseOrganizationPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise that owns the created organization.+  """+  enterprise: Enterprise++  """+  The organization that was created.+  """+  organization: Organization+}++"""+Autogenerated input type of CreateIpAllowListEntry+"""+input CreateIpAllowListEntryInput {+  """+  An IP address or range of addresses in CIDR notation.+  """+  allowListValue: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Whether the IP allow list entry is active when an IP allow list is enabled.+  """+  isActive: Boolean!++  """+  An optional name for the IP allow list entry.+  """+  name: String++  """+  The ID of the owner for which to create the new IP allow list entry.+  """+  ownerId: ID!+  @possibleTypes(+    concreteTypes: ["Enterprise", "Organization"]+    abstractType: "IpAllowListOwner"+  )+}++"""+Autogenerated return type of CreateIpAllowListEntry+"""+type CreateIpAllowListEntryPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The IP allow list entry that was created.+  """+  ipAllowListEntry: IpAllowListEntry+}++"""+Autogenerated input type of CreateIssue+"""+input CreateIssueInput {+  """+  The Node ID for the user assignee for this issue.+  """+  assigneeIds: [ID!] @possibleTypes(concreteTypes: ["User"])++  """+  The body for the issue description.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  An array of Node IDs of labels for this issue.+  """+  labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"])++  """+  The Node ID of the milestone for this issue.+  """+  milestoneId: ID @possibleTypes(concreteTypes: ["Milestone"])++  """+  An array of Node IDs for projects associated with this issue.+  """+  projectIds: [ID!] @possibleTypes(concreteTypes: ["Project"])++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  The title for the issue.+  """+  title: String!+}++"""+Autogenerated return type of CreateIssue+"""+type CreateIssuePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new issue.+  """+  issue: Issue+}++"""+Autogenerated input type of CreateLabel+"""+input CreateLabelInput @preview(toggledBy: "bane-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A 6 character hex code, without the leading #, identifying the color of the label.+  """+  color: String!++  """+  A brief description of the label, such as its purpose.+  """+  description: String++  """+  The name of the label.+  """+  name: String!++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of CreateLabel+"""+type CreateLabelPayload @preview(toggledBy: "bane-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new label.+  """+  label: Label+}++"""+Autogenerated input type of CreateProject+"""+input CreateProjectInput {+  """+  The description of project.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The name of project.+  """+  name: String!++  """+  The owner ID to create the project under.+  """+  ownerId: ID!+  @possibleTypes(+    concreteTypes: ["Organization", "Repository", "User"]+    abstractType: "ProjectOwner"+  )++  """+  A list of repository IDs to create as linked repositories for the project+  """+  repositoryIds: [ID!] @possibleTypes(concreteTypes: ["Repository"])++  """+  The name of the GitHub-provided template.+  """+  template: ProjectTemplate+}++"""+Autogenerated return type of CreateProject+"""+type CreateProjectPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new project.+  """+  project: Project+}++"""+Autogenerated input type of CreatePullRequest+"""+input CreatePullRequestInput {+  """+  The name of the branch you want your changes pulled into. This should be an existing branch+  on the current repository. You cannot update the base branch on a pull request to point+  to another repository.+  """+  baseRefName: String!++  """+  The contents of the pull request.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Indicates whether this pull request should be a draft.+  """+  draft: Boolean = false++  """+  The name of the branch where your changes are implemented. For cross-repository pull requests+  in the same network, namespace `head_ref_name` with a user like this: `username:branch`.+  """+  headRefName: String!++  """+  Indicates whether maintainers can modify the pull request.+  """+  maintainerCanModify: Boolean = true++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  The title of the pull request.+  """+  title: String!+}++"""+Autogenerated return type of CreatePullRequest+"""+type CreatePullRequestPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new pull request.+  """+  pullRequest: PullRequest+}++"""+Autogenerated input type of CreateRef+"""+input CreateRefInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The fully qualified name of the new Ref (ie: `refs/heads/my_new_branch`).+  """+  name: String!++  """+  The GitObjectID that the new Ref shall target. Must point to a commit.+  """+  oid: GitObjectID!++  """+  The Node ID of the Repository to create the Ref in.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of CreateRef+"""+type CreateRefPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The newly created ref.+  """+  ref: Ref+}++"""+Autogenerated input type of CreateRepository+"""+input CreateRepositoryInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A short description of the new repository.+  """+  description: String++  """+  Indicates if the repository should have the issues feature enabled.+  """+  hasIssuesEnabled: Boolean = true++  """+  Indicates if the repository should have the wiki feature enabled.+  """+  hasWikiEnabled: Boolean = false++  """+  The URL for a web page about this repository.+  """+  homepageUrl: URI++  """+  The name of the new repository.+  """+  name: String!++  """+  The ID of the owner for the new repository.+  """+  ownerId: ID+  @possibleTypes(+    concreteTypes: ["Organization", "User"]+    abstractType: "RepositoryOwner"+  )++  """+  When an organization is specified as the owner, this ID identifies the team+  that should be granted access to the new repository.+  """+  teamId: ID @possibleTypes(concreteTypes: ["Team"])++  """+  Whether this repository should be marked as a template such that anyone who+  can access it can create new repositories with the same files and directory structure.+  """+  template: Boolean = false++  """+  Indicates the repository's visibility level.+  """+  visibility: RepositoryVisibility!+}++"""+Autogenerated return type of CreateRepository+"""+type CreateRepositoryPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new repository.+  """+  repository: Repository+}++"""+Autogenerated input type of CreateTeamDiscussionComment+"""+input CreateTeamDiscussionCommentInput {+  """+  The content of the comment.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the discussion to which the comment belongs.+  """+  discussionId: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"])+}++"""+Autogenerated return type of CreateTeamDiscussionComment+"""+type CreateTeamDiscussionCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new comment.+  """+  teamDiscussionComment: TeamDiscussionComment+}++"""+Autogenerated input type of CreateTeamDiscussion+"""+input CreateTeamDiscussionInput {+  """+  The content of the discussion.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  If true, restricts the visiblity of this discussion to team members and+  organization admins. If false or not specified, allows any organization member+  to view this discussion.+  """+  private: Boolean++  """+  The ID of the team to which the discussion belongs.+  """+  teamId: ID! @possibleTypes(concreteTypes: ["Team"])++  """+  The title of the discussion.+  """+  title: String!+}++"""+Autogenerated return type of CreateTeamDiscussion+"""+type CreateTeamDiscussionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new discussion.+  """+  teamDiscussion: TeamDiscussion+}++"""+Represents the contribution a user made by committing to a repository.+"""+type CreatedCommitContribution implements Contribution {+  """+  How many commits were made on this day to this repository by the user.+  """+  commitCount: Int!++  """+  Whether this contribution is associated with a record you do not have access to. For+  example, your own 'first issue' contribution may have been made on a repository you can no+  longer access.+  """+  isRestricted: Boolean!++  """+  When this contribution was made.+  """+  occurredAt: DateTime!++  """+  The repository the user made a commit in.+  """+  repository: Repository!++  """+  The HTTP path for this contribution.+  """+  resourcePath: URI!++  """+  The HTTP URL for this contribution.+  """+  url: URI!++  """+  The user who made this contribution.+  """+  user: User!+}++"""+The connection type for CreatedCommitContribution.+"""+type CreatedCommitContributionConnection {+  """+  A list of edges.+  """+  edges: [CreatedCommitContributionEdge]++  """+  A list of nodes.+  """+  nodes: [CreatedCommitContribution]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of commits across days and repositories in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type CreatedCommitContributionEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CreatedCommitContribution+}++"""+Represents the contribution a user made on GitHub by opening an issue.+"""+type CreatedIssueContribution implements Contribution {+  """+  Whether this contribution is associated with a record you do not have access to. For+  example, your own 'first issue' contribution may have been made on a repository you can no+  longer access.+  """+  isRestricted: Boolean!++  """+  The issue that was opened.+  """+  issue: Issue!++  """+  When this contribution was made.+  """+  occurredAt: DateTime!++  """+  The HTTP path for this contribution.+  """+  resourcePath: URI!++  """+  The HTTP URL for this contribution.+  """+  url: URI!++  """+  The user who made this contribution.+  """+  user: User!+}++"""+The connection type for CreatedIssueContribution.+"""+type CreatedIssueContributionConnection {+  """+  A list of edges.+  """+  edges: [CreatedIssueContributionEdge]++  """+  A list of nodes.+  """+  nodes: [CreatedIssueContribution]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type CreatedIssueContributionEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CreatedIssueContribution+}++"""+Represents either a issue the viewer can access or a restricted contribution.+"""+union CreatedIssueOrRestrictedContribution =+    CreatedIssueContribution+  | RestrictedContribution++"""+Represents the contribution a user made on GitHub by opening a pull request.+"""+type CreatedPullRequestContribution implements Contribution {+  """+  Whether this contribution is associated with a record you do not have access to. For+  example, your own 'first issue' contribution may have been made on a repository you can no+  longer access.+  """+  isRestricted: Boolean!++  """+  When this contribution was made.+  """+  occurredAt: DateTime!++  """+  The pull request that was opened.+  """+  pullRequest: PullRequest!++  """+  The HTTP path for this contribution.+  """+  resourcePath: URI!++  """+  The HTTP URL for this contribution.+  """+  url: URI!++  """+  The user who made this contribution.+  """+  user: User!+}++"""+The connection type for CreatedPullRequestContribution.+"""+type CreatedPullRequestContributionConnection {+  """+  A list of edges.+  """+  edges: [CreatedPullRequestContributionEdge]++  """+  A list of nodes.+  """+  nodes: [CreatedPullRequestContribution]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type CreatedPullRequestContributionEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CreatedPullRequestContribution+}++"""+Represents either a pull request the viewer can access or a restricted contribution.+"""+union CreatedPullRequestOrRestrictedContribution =+    CreatedPullRequestContribution+  | RestrictedContribution++"""+Represents the contribution a user made by leaving a review on a pull request.+"""+type CreatedPullRequestReviewContribution implements Contribution {+  """+  Whether this contribution is associated with a record you do not have access to. For+  example, your own 'first issue' contribution may have been made on a repository you can no+  longer access.+  """+  isRestricted: Boolean!++  """+  When this contribution was made.+  """+  occurredAt: DateTime!++  """+  The pull request the user reviewed.+  """+  pullRequest: PullRequest!++  """+  The review the user left on the pull request.+  """+  pullRequestReview: PullRequestReview!++  """+  The repository containing the pull request that the user reviewed.+  """+  repository: Repository!++  """+  The HTTP path for this contribution.+  """+  resourcePath: URI!++  """+  The HTTP URL for this contribution.+  """+  url: URI!++  """+  The user who made this contribution.+  """+  user: User!+}++"""+The connection type for CreatedPullRequestReviewContribution.+"""+type CreatedPullRequestReviewContributionConnection {+  """+  A list of edges.+  """+  edges: [CreatedPullRequestReviewContributionEdge]++  """+  A list of nodes.+  """+  nodes: [CreatedPullRequestReviewContribution]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type CreatedPullRequestReviewContributionEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CreatedPullRequestReviewContribution+}++"""+Represents the contribution a user made on GitHub by creating a repository.+"""+type CreatedRepositoryContribution implements Contribution {+  """+  Whether this contribution is associated with a record you do not have access to. For+  example, your own 'first issue' contribution may have been made on a repository you can no+  longer access.+  """+  isRestricted: Boolean!++  """+  When this contribution was made.+  """+  occurredAt: DateTime!++  """+  The repository that was created.+  """+  repository: Repository!++  """+  The HTTP path for this contribution.+  """+  resourcePath: URI!++  """+  The HTTP URL for this contribution.+  """+  url: URI!++  """+  The user who made this contribution.+  """+  user: User!+}++"""+The connection type for CreatedRepositoryContribution.+"""+type CreatedRepositoryContributionConnection {+  """+  A list of edges.+  """+  edges: [CreatedRepositoryContributionEdge]++  """+  A list of nodes.+  """+  nodes: [CreatedRepositoryContribution]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type CreatedRepositoryContributionEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: CreatedRepositoryContribution+}++"""+Represents either a repository the viewer can access or a restricted contribution.+"""+union CreatedRepositoryOrRestrictedContribution =+    CreatedRepositoryContribution+  | RestrictedContribution++"""+Represents a mention made by one issue or pull request to another.+"""+type CrossReferencedEvent implements Node & UniformResourceLocatable {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Reference originated in a different repository.+  """+  isCrossRepository: Boolean!++  """+  Identifies when the reference was made.+  """+  referencedAt: DateTime!++  """+  The HTTP path for this pull request.+  """+  resourcePath: URI!++  """+  Issue or pull request that made the reference.+  """+  source: ReferencedSubject!++  """+  Issue or pull request to which the reference was made.+  """+  target: ReferencedSubject!++  """+  The HTTP URL for this pull request.+  """+  url: URI!++  """+  Checks if the target will be closed when the source is merged.+  """+  willCloseTarget: Boolean!+}++"""+An ISO-8601 encoded date string.+"""+scalar Date++"""+An ISO-8601 encoded UTC date string.+"""+scalar DateTime++"""+Autogenerated input type of DeclineTopicSuggestion+"""+input DeclineTopicSuggestionInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The name of the suggested topic.+  """+  name: String!++  """+  The reason why the suggested topic is declined.+  """+  reason: TopicSuggestionDeclineReason!++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of DeclineTopicSuggestion+"""+type DeclineTopicSuggestionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The declined topic.+  """+  topic: Topic+}++"""+The possible default permissions for repositories.+"""+enum DefaultRepositoryPermissionField {+  """+  Can read, write, and administrate repos by default+  """+  ADMIN++  """+  No access+  """+  NONE++  """+  Can read repos by default+  """+  READ++  """+  Can read and write repos by default+  """+  WRITE+}++"""+Entities that can be deleted.+"""+interface Deletable {+  """+  Check if the current viewer can delete this object.+  """+  viewerCanDelete: Boolean!+}++"""+Autogenerated input type of DeleteBranchProtectionRule+"""+input DeleteBranchProtectionRuleInput {+  """+  The global relay id of the branch protection rule to be deleted.+  """+  branchProtectionRuleId: ID!+  @possibleTypes(concreteTypes: ["BranchProtectionRule"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated return type of DeleteBranchProtectionRule+"""+type DeleteBranchProtectionRulePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of DeleteDeployment+"""+input DeleteDeploymentInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the deployment to be deleted.+  """+  id: ID! @possibleTypes(concreteTypes: ["Deployment"])+}++"""+Autogenerated return type of DeleteDeployment+"""+type DeleteDeploymentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of DeleteIpAllowListEntry+"""+input DeleteIpAllowListEntryInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the IP allow list entry to delete.+  """+  ipAllowListEntryId: ID! @possibleTypes(concreteTypes: ["IpAllowListEntry"])+}++"""+Autogenerated return type of DeleteIpAllowListEntry+"""+type DeleteIpAllowListEntryPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The IP allow list entry that was deleted.+  """+  ipAllowListEntry: IpAllowListEntry+}++"""+Autogenerated input type of DeleteIssueComment+"""+input DeleteIssueCommentInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the comment to delete.+  """+  id: ID! @possibleTypes(concreteTypes: ["IssueComment"])+}++"""+Autogenerated return type of DeleteIssueComment+"""+type DeleteIssueCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of DeleteIssue+"""+input DeleteIssueInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the issue to delete.+  """+  issueId: ID! @possibleTypes(concreteTypes: ["Issue"])+}++"""+Autogenerated return type of DeleteIssue+"""+type DeleteIssuePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The repository the issue belonged to+  """+  repository: Repository+}++"""+Autogenerated input type of DeleteLabel+"""+input DeleteLabelInput @preview(toggledBy: "bane-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the label to be deleted.+  """+  id: ID! @possibleTypes(concreteTypes: ["Label"])+}++"""+Autogenerated return type of DeleteLabel+"""+type DeleteLabelPayload @preview(toggledBy: "bane-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of DeletePackageVersion+"""+input DeletePackageVersionInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the package version to be deleted.+  """+  packageVersionId: ID! @possibleTypes(concreteTypes: ["PackageVersion"])+}++"""+Autogenerated return type of DeletePackageVersion+"""+type DeletePackageVersionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Whether or not the operation succeeded.+  """+  success: Boolean+}++"""+Autogenerated input type of DeleteProjectCard+"""+input DeleteProjectCardInput {+  """+  The id of the card to delete.+  """+  cardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated return type of DeleteProjectCard+"""+type DeleteProjectCardPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The column the deleted card was in.+  """+  column: ProjectColumn++  """+  The deleted card ID.+  """+  deletedCardId: ID+}++"""+Autogenerated input type of DeleteProjectColumn+"""+input DeleteProjectColumnInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The id of the column to delete.+  """+  columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])+}++"""+Autogenerated return type of DeleteProjectColumn+"""+type DeleteProjectColumnPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The deleted column ID.+  """+  deletedColumnId: ID++  """+  The project the deleted column was in.+  """+  project: Project+}++"""+Autogenerated input type of DeleteProject+"""+input DeleteProjectInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Project ID to update.+  """+  projectId: ID! @possibleTypes(concreteTypes: ["Project"])+}++"""+Autogenerated return type of DeleteProject+"""+type DeleteProjectPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The repository or organization the project was removed from.+  """+  owner: ProjectOwner+}++"""+Autogenerated input type of DeletePullRequestReviewComment+"""+input DeletePullRequestReviewCommentInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the comment to delete.+  """+  id: ID! @possibleTypes(concreteTypes: ["PullRequestReviewComment"])+}++"""+Autogenerated return type of DeletePullRequestReviewComment+"""+type DeletePullRequestReviewCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The pull request review the deleted comment belonged to.+  """+  pullRequestReview: PullRequestReview+}++"""+Autogenerated input type of DeletePullRequestReview+"""+input DeletePullRequestReviewInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the pull request review to delete.+  """+  pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"])+}++"""+Autogenerated return type of DeletePullRequestReview+"""+type DeletePullRequestReviewPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The deleted pull request review.+  """+  pullRequestReview: PullRequestReview+}++"""+Autogenerated input type of DeleteRef+"""+input DeleteRefInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the Ref to be deleted.+  """+  refId: ID! @possibleTypes(concreteTypes: ["Ref"])+}++"""+Autogenerated return type of DeleteRef+"""+type DeleteRefPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of DeleteTeamDiscussionComment+"""+input DeleteTeamDiscussionCommentInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the comment to delete.+  """+  id: ID! @possibleTypes(concreteTypes: ["TeamDiscussionComment"])+}++"""+Autogenerated return type of DeleteTeamDiscussionComment+"""+type DeleteTeamDiscussionCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of DeleteTeamDiscussion+"""+input DeleteTeamDiscussionInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The discussion ID to delete.+  """+  id: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"])+}++"""+Autogenerated return type of DeleteTeamDiscussion+"""+type DeleteTeamDiscussionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Represents a 'demilestoned' event on a given issue or pull request.+"""+type DemilestonedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the milestone title associated with the 'demilestoned' event.+  """+  milestoneTitle: String!++  """+  Object referenced by event.+  """+  subject: MilestoneItem!+}++"""+A dependency manifest entry+"""+type DependencyGraphDependency @preview(toggledBy: "hawkgirl-preview") {+  """+  Does the dependency itself have dependencies?+  """+  hasDependencies: Boolean!++  """+  The dependency package manager+  """+  packageManager: String++  """+  The required package name+  """+  packageName: String!++  """+  The repository containing the package+  """+  repository: Repository++  """+  The dependency version requirements+  """+  requirements: String!+}++"""+The connection type for DependencyGraphDependency.+"""+type DependencyGraphDependencyConnection+@preview(toggledBy: "hawkgirl-preview") {+  """+  A list of edges.+  """+  edges: [DependencyGraphDependencyEdge]++  """+  A list of nodes.+  """+  nodes: [DependencyGraphDependency]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type DependencyGraphDependencyEdge @preview(toggledBy: "hawkgirl-preview") {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: DependencyGraphDependency+}++"""+Dependency manifest for a repository+"""+type DependencyGraphManifest implements Node+@preview(toggledBy: "hawkgirl-preview") {+  """+  Path to view the manifest file blob+  """+  blobPath: String!++  """+  A list of manifest dependencies+  """+  dependencies(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): DependencyGraphDependencyConnection++  """+  The number of dependencies listed in the manifest+  """+  dependenciesCount: Int++  """+  Is the manifest too big to parse?+  """+  exceedsMaxSize: Boolean!++  """+  Fully qualified manifest filename+  """+  filename: String!+  id: ID!++  """+  Were we able to parse the manifest?+  """+  parseable: Boolean!++  """+  The repository containing the manifest+  """+  repository: Repository!+}++"""+The connection type for DependencyGraphManifest.+"""+type DependencyGraphManifestConnection @preview(toggledBy: "hawkgirl-preview") {+  """+  A list of edges.+  """+  edges: [DependencyGraphManifestEdge]++  """+  A list of nodes.+  """+  nodes: [DependencyGraphManifest]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type DependencyGraphManifestEdge @preview(toggledBy: "hawkgirl-preview") {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: DependencyGraphManifest+}++"""+A repository deploy key.+"""+type DeployKey implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  The deploy key.+  """+  key: String!++  """+  Whether or not the deploy key is read only.+  """+  readOnly: Boolean!++  """+  The deploy key title.+  """+  title: String!++  """+  Whether or not the deploy key has been verified.+  """+  verified: Boolean!+}++"""+The connection type for DeployKey.+"""+type DeployKeyConnection {+  """+  A list of edges.+  """+  edges: [DeployKeyEdge]++  """+  A list of nodes.+  """+  nodes: [DeployKey]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type DeployKeyEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: DeployKey+}++"""+Represents a 'deployed' event on a given pull request.+"""+type DeployedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The deployment associated with the 'deployed' event.+  """+  deployment: Deployment!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  The ref associated with the 'deployed' event.+  """+  ref: Ref+}++"""+Represents triggered deployment instance.+"""+type Deployment implements Node {+  """+  Identifies the commit sha of the deployment.+  """+  commit: Commit++  """+  Identifies the oid of the deployment commit, even if the commit has been deleted.+  """+  commitOid: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the actor who triggered the deployment.+  """+  creator: Actor!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The deployment description.+  """+  description: String++  """+  The latest environment to which this deployment was made.+  """+  environment: String+  id: ID!++  """+  The latest environment to which this deployment was made.+  """+  latestEnvironment: String++  """+  The latest status of this deployment.+  """+  latestStatus: DeploymentStatus++  """+  The original environment to which this deployment was made.+  """+  originalEnvironment: String++  """+  Extra information that a deployment system might need.+  """+  payload: String++  """+  Identifies the Ref of the deployment, if the deployment was created by ref.+  """+  ref: Ref++  """+  Identifies the repository associated with the deployment.+  """+  repository: Repository!++  """+  The current state of the deployment.+  """+  state: DeploymentState++  """+  A list of statuses associated with the deployment.+  """+  statuses(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): DeploymentStatusConnection++  """+  The deployment task.+  """+  task: String++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!+}++"""+The connection type for Deployment.+"""+type DeploymentConnection {+  """+  A list of edges.+  """+  edges: [DeploymentEdge]++  """+  A list of nodes.+  """+  nodes: [Deployment]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type DeploymentEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Deployment+}++"""+Represents a 'deployment_environment_changed' event on a given pull request.+"""+type DeploymentEnvironmentChangedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The deployment status that updated the deployment environment.+  """+  deploymentStatus: DeploymentStatus!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!+}++"""+Ordering options for deployment connections+"""+input DeploymentOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order deployments by.+  """+  field: DeploymentOrderField!+}++"""+Properties by which deployment connections can be ordered.+"""+enum DeploymentOrderField {+  """+  Order collection by creation time+  """+  CREATED_AT+}++"""+The possible states in which a deployment can be.+"""+enum DeploymentState {+  """+  The pending deployment was not updated after 30 minutes.+  """+  ABANDONED++  """+  The deployment is currently active.+  """+  ACTIVE++  """+  An inactive transient deployment.+  """+  DESTROYED++  """+  The deployment experienced an error.+  """+  ERROR++  """+  The deployment has failed.+  """+  FAILURE++  """+  The deployment is inactive.+  """+  INACTIVE++  """+  The deployment is in progress.+  """+  IN_PROGRESS++  """+  The deployment is pending.+  """+  PENDING++  """+  The deployment has queued+  """+  QUEUED+}++"""+Describes the status of a given deployment attempt.+"""+type DeploymentStatus implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the actor who triggered the deployment.+  """+  creator: Actor!++  """+  Identifies the deployment associated with status.+  """+  deployment: Deployment!++  """+  Identifies the description of the deployment.+  """+  description: String++  """+  Identifies the environment of the deployment at the time of this deployment status+  """+  environment: String @preview(toggledBy: "flash-preview")++  """+  Identifies the environment URL of the deployment.+  """+  environmentUrl: URI+  id: ID!++  """+  Identifies the log URL of the deployment.+  """+  logUrl: URI++  """+  Identifies the current state of the deployment.+  """+  state: DeploymentStatusState!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!+}++"""+The connection type for DeploymentStatus.+"""+type DeploymentStatusConnection {+  """+  A list of edges.+  """+  edges: [DeploymentStatusEdge]++  """+  A list of nodes.+  """+  nodes: [DeploymentStatus]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type DeploymentStatusEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: DeploymentStatus+}++"""+The possible states for a deployment status.+"""+enum DeploymentStatusState {+  """+  The deployment experienced an error.+  """+  ERROR++  """+  The deployment has failed.+  """+  FAILURE++  """+  The deployment is inactive.+  """+  INACTIVE++  """+  The deployment is in progress.+  """+  IN_PROGRESS++  """+  The deployment is pending.+  """+  PENDING++  """+  The deployment is queued+  """+  QUEUED++  """+  The deployment was successful.+  """+  SUCCESS+}++"""+The possible sides of a diff.+"""+enum DiffSide {+  """+  The left side of the diff.+  """+  LEFT++  """+  The right side of the diff.+  """+  RIGHT+}++"""+Represents a 'disconnected' event on a given issue or pull request.+"""+type DisconnectedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Reference originated in a different repository.+  """+  isCrossRepository: Boolean!++  """+  Issue or pull request from which the issue was disconnected.+  """+  source: ReferencedSubject!++  """+  Issue or pull request which was disconnected.+  """+  subject: ReferencedSubject!+}++"""+Autogenerated input type of DismissPullRequestReview+"""+input DismissPullRequestReviewInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The contents of the pull request review dismissal message.+  """+  message: String!++  """+  The Node ID of the pull request review to modify.+  """+  pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"])+}++"""+Autogenerated return type of DismissPullRequestReview+"""+type DismissPullRequestReviewPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The dismissed pull request review.+  """+  pullRequestReview: PullRequestReview+}++"""+Specifies a review comment to be left with a Pull Request Review.+"""+input DraftPullRequestReviewComment {+  """+  Body of the comment to leave.+  """+  body: String!++  """+  Path to the file being commented on.+  """+  path: String!++  """+  Position in the file to leave a comment on.+  """+  position: Int!+}++"""+Specifies a review comment thread to be left with a Pull Request Review.+"""+input DraftPullRequestReviewThread {+  """+  Body of the comment to leave.+  """+  body: String!++  """+  The line of the blob to which the thread refers. The end of the line range for multi-line comments.+  """+  line: Int!++  """+  Path to the file being commented on.+  """+  path: String!++  """+  The side of the diff on which the line resides. For multi-line comments, this is the side for the end of the line range.+  """+  side: DiffSide = RIGHT++  """+  The first line of the range to which the comment refers.+  """+  startLine: Int++  """+  The side of the diff on which the start line resides.+  """+  startSide: DiffSide = RIGHT+}++"""+An account to manage multiple organizations with consolidated policy and billing.+"""+type Enterprise implements Node {+  """+  A URL pointing to the enterprise's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!++  """+  Enterprise billing information visible to enterprise billing managers.+  """+  billingInfo: EnterpriseBillingInfo++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The description of the enterprise.+  """+  description: String++  """+  The description of the enterprise as HTML.+  """+  descriptionHTML: HTML!+  id: ID!++  """+  The location of the enterprise.+  """+  location: String++  """+  A list of users who are members of this enterprise.+  """+  members(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Only return members within the selected GitHub Enterprise deployment+    """+    deployment: EnterpriseUserDeployment++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for members returned from the connection.+    """+    orderBy: EnterpriseMemberOrder = { field: LOGIN, direction: ASC }++    """+    Only return members within the organizations with these logins+    """+    organizationLogins: [String!]++    """+    The search string to look for.+    """+    query: String++    """+    The role of the user in the enterprise organization or server.+    """+    role: EnterpriseUserAccountMembershipRole+  ): EnterpriseMemberConnection!++  """+  The name of the enterprise.+  """+  name: String!++  """+  A list of organizations that belong to this enterprise.+  """+  organizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations returned from the connection.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The search string to look for.+    """+    query: String+  ): OrganizationConnection!++  """+  Enterprise information only visible to enterprise owners.+  """+  ownerInfo: EnterpriseOwnerInfo++  """+  The HTTP path for this enterprise.+  """+  resourcePath: URI!++  """+  The URL-friendly identifier for the enterprise.+  """+  slug: String!++  """+  The HTTP URL for this enterprise.+  """+  url: URI!++  """+  A list of user accounts on this enterprise.+  """+  userAccounts(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): EnterpriseUserAccountConnection!++  """+  Is the current viewer an admin of this enterprise?+  """+  viewerIsAdmin: Boolean!++  """+  The URL of the enterprise website.+  """+  websiteUrl: URI+}++"""+The connection type for User.+"""+type EnterpriseAdministratorConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseAdministratorEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+A User who is an administrator of an enterprise.+"""+type EnterpriseAdministratorEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: User++  """+  The role of the administrator.+  """+  role: EnterpriseAdministratorRole!+}++"""+An invitation for a user to become an owner or billing manager of an enterprise.+"""+type EnterpriseAdministratorInvitation implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The email of the person who was invited to the enterprise.+  """+  email: String++  """+  The enterprise the invitation is for.+  """+  enterprise: Enterprise!+  id: ID!++  """+  The user who was invited to the enterprise.+  """+  invitee: User++  """+  The user who created the invitation.+  """+  inviter: User++  """+  The invitee's pending role in the enterprise (owner or billing_manager).+  """+  role: EnterpriseAdministratorRole!+}++"""+The connection type for EnterpriseAdministratorInvitation.+"""+type EnterpriseAdministratorInvitationConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseAdministratorInvitationEdge]++  """+  A list of nodes.+  """+  nodes: [EnterpriseAdministratorInvitation]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type EnterpriseAdministratorInvitationEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: EnterpriseAdministratorInvitation+}++"""+Ordering options for enterprise administrator invitation connections+"""+input EnterpriseAdministratorInvitationOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order enterprise administrator invitations by.+  """+  field: EnterpriseAdministratorInvitationOrderField!+}++"""+Properties by which enterprise administrator invitation connections can be ordered.+"""+enum EnterpriseAdministratorInvitationOrderField {+  """+  Order enterprise administrator member invitations by creation time+  """+  CREATED_AT+}++"""+The possible administrator roles in an enterprise account.+"""+enum EnterpriseAdministratorRole {+  """+  Represents a billing manager of the enterprise account.+  """+  BILLING_MANAGER++  """+  Represents an owner of the enterprise account.+  """+  OWNER+}++"""+Metadata for an audit entry containing enterprise account information.+"""+interface EnterpriseAuditEntryData {+  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+}++"""+Enterprise billing information visible to enterprise billing managers and owners.+"""+type EnterpriseBillingInfo {+  """+  The number of licenseable users/emails across the enterprise.+  """+  allLicensableUsersCount: Int!++  """+  The number of data packs used by all organizations owned by the enterprise.+  """+  assetPacks: Int!++  """+  The number of available seats across all owned organizations based on the unique number of billable users.+  """+  availableSeats: Int!+  @deprecated(+    reason: "`availableSeats` will be replaced with `totalAvailableLicenses` to provide more clarity on the value being returned Use EnterpriseBillingInfo.totalAvailableLicenses instead. Removal on 2020-01-01 UTC."+  )++  """+  The bandwidth quota in GB for all organizations owned by the enterprise.+  """+  bandwidthQuota: Float!++  """+  The bandwidth usage in GB for all organizations owned by the enterprise.+  """+  bandwidthUsage: Float!++  """+  The bandwidth usage as a percentage of the bandwidth quota.+  """+  bandwidthUsagePercentage: Int!++  """+  The total seats across all organizations owned by the enterprise.+  """+  seats: Int!+  @deprecated(+    reason: "`seats` will be replaced with `totalLicenses` to provide more clarity on the value being returned Use EnterpriseBillingInfo.totalLicenses instead. Removal on 2020-01-01 UTC."+  )++  """+  The storage quota in GB for all organizations owned by the enterprise.+  """+  storageQuota: Float!++  """+  The storage usage in GB for all organizations owned by the enterprise.+  """+  storageUsage: Float!++  """+  The storage usage as a percentage of the storage quota.+  """+  storageUsagePercentage: Int!++  """+  The number of available licenses across all owned organizations based on the unique number of billable users.+  """+  totalAvailableLicenses: Int!++  """+  The total number of licenses allocated.+  """+  totalLicenses: Int!+}++"""+The possible values for the enterprise default repository permission setting.+"""+enum EnterpriseDefaultRepositoryPermissionSettingValue {+  """+  Organization members will be able to clone, pull, push, and add new collaborators to all organization repositories.+  """+  ADMIN++  """+  Organization members will only be able to clone and pull public repositories.+  """+  NONE++  """+  Organizations in the enterprise choose default repository permissions for their members.+  """+  NO_POLICY++  """+  Organization members will be able to clone and pull all organization repositories.+  """+  READ++  """+  Organization members will be able to clone, pull, and push all organization repositories.+  """+  WRITE+}++"""+The possible values for an enabled/disabled enterprise setting.+"""+enum EnterpriseEnabledDisabledSettingValue {+  """+  The setting is disabled for organizations in the enterprise.+  """+  DISABLED++  """+  The setting is enabled for organizations in the enterprise.+  """+  ENABLED++  """+  There is no policy set for organizations in the enterprise.+  """+  NO_POLICY+}++"""+The possible values for an enabled/no policy enterprise setting.+"""+enum EnterpriseEnabledSettingValue {+  """+  The setting is enabled for organizations in the enterprise.+  """+  ENABLED++  """+  There is no policy set for organizations in the enterprise.+  """+  NO_POLICY+}++"""+An identity provider configured to provision identities for an enterprise.+"""+type EnterpriseIdentityProvider implements Node {+  """+  The digest algorithm used to sign SAML requests for the identity provider.+  """+  digestMethod: SamlDigestAlgorithm++  """+  The enterprise this identity provider belongs to.+  """+  enterprise: Enterprise++  """+  ExternalIdentities provisioned by this identity provider.+  """+  externalIdentities(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ExternalIdentityConnection!+  id: ID!++  """+  The x509 certificate used by the identity provider to sign assertions and responses.+  """+  idpCertificate: X509Certificate++  """+  The Issuer Entity ID for the SAML identity provider.+  """+  issuer: String++  """+  Recovery codes that can be used by admins to access the enterprise if the identity provider is unavailable.+  """+  recoveryCodes: [String!]++  """+  The signature algorithm used to sign SAML requests for the identity provider.+  """+  signatureMethod: SamlSignatureAlgorithm++  """+  The URL endpoint for the identity provider's SAML SSO.+  """+  ssoUrl: URI+}++"""+An object that is a member of an enterprise.+"""+union EnterpriseMember = EnterpriseUserAccount | User++"""+The connection type for EnterpriseMember.+"""+type EnterpriseMemberConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseMemberEdge]++  """+  A list of nodes.+  """+  nodes: [EnterpriseMember]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+A User who is a member of an enterprise through one or more organizations.+"""+type EnterpriseMemberEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  Whether the user does not have a license for the enterprise.+  """+  isUnlicensed: Boolean!+  @deprecated(+    reason: "All members consume a license Removal on 2021-01-01 UTC."+  )++  """+  The item at the end of the edge.+  """+  node: EnterpriseMember+}++"""+Ordering options for enterprise member connections.+"""+input EnterpriseMemberOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order enterprise members by.+  """+  field: EnterpriseMemberOrderField!+}++"""+Properties by which enterprise member connections can be ordered.+"""+enum EnterpriseMemberOrderField {+  """+  Order enterprise members by creation time+  """+  CREATED_AT++  """+  Order enterprise members by login+  """+  LOGIN+}++"""+The possible values for the enterprise members can create repositories setting.+"""+enum EnterpriseMembersCanCreateRepositoriesSettingValue {+  """+  Members will be able to create public and private repositories.+  """+  ALL++  """+  Members will not be able to create public or private repositories.+  """+  DISABLED++  """+  Organization administrators choose whether to allow members to create repositories.+  """+  NO_POLICY++  """+  Members will be able to create only private repositories.+  """+  PRIVATE++  """+  Members will be able to create only public repositories.+  """+  PUBLIC+}++"""+The possible values for the members can make purchases setting.+"""+enum EnterpriseMembersCanMakePurchasesSettingValue {+  """+  The setting is disabled for organizations in the enterprise.+  """+  DISABLED++  """+  The setting is enabled for organizations in the enterprise.+  """+  ENABLED+}++"""+The connection type for Organization.+"""+type EnterpriseOrganizationMembershipConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseOrganizationMembershipEdge]++  """+  A list of nodes.+  """+  nodes: [Organization]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An enterprise organization that a user is a member of.+"""+type EnterpriseOrganizationMembershipEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Organization++  """+  The role of the user in the enterprise membership.+  """+  role: EnterpriseUserAccountMembershipRole!+}++"""+The connection type for User.+"""+type EnterpriseOutsideCollaboratorConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseOutsideCollaboratorEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+A User who is an outside collaborator of an enterprise through one or more organizations.+"""+type EnterpriseOutsideCollaboratorEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  Whether the outside collaborator does not have a license for the enterprise.+  """+  isUnlicensed: Boolean!+  @deprecated(+    reason: "All outside collaborators consume a license Removal on 2021-01-01 UTC."+  )++  """+  The item at the end of the edge.+  """+  node: User++  """+  The enterprise organization repositories this user is a member of.+  """+  repositories(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories.+    """+    orderBy: RepositoryOrder = { field: NAME, direction: ASC }+  ): EnterpriseRepositoryInfoConnection!+}++"""+Enterprise information only visible to enterprise owners.+"""+type EnterpriseOwnerInfo {+  """+  A list of enterprise organizations configured with the provided action execution capabilities setting value.+  """+  actionExecutionCapabilitySettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }+  ): OrganizationConnection!++  """+  A list of all of the administrators for this enterprise.+  """+  admins(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for administrators returned from the connection.+    """+    orderBy: EnterpriseMemberOrder = { field: LOGIN, direction: ASC }++    """+    The search string to look for.+    """+    query: String++    """+    The role to filter by.+    """+    role: EnterpriseAdministratorRole+  ): EnterpriseAdministratorConnection!++  """+  A list of users in the enterprise who currently have two-factor authentication disabled.+  """+  affiliatedUsersWithTwoFactorDisabled(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserConnection!++  """+  Whether or not affiliated users with two-factor authentication disabled exist in the enterprise.+  """+  affiliatedUsersWithTwoFactorDisabledExist: Boolean!++  """+  The setting value for whether private repository forking is enabled for repositories in organizations in this enterprise.+  """+  allowPrivateRepositoryForkingSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided private repository forking setting value.+  """+  allowPrivateRepositoryForkingSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  The setting value for base repository permissions for organizations in this enterprise.+  """+  defaultRepositoryPermissionSetting: EnterpriseDefaultRepositoryPermissionSettingValue!++  """+  A list of enterprise organizations configured with the provided default repository permission.+  """+  defaultRepositoryPermissionSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The permission to find organizations for.+    """+    value: DefaultRepositoryPermissionField!+  ): OrganizationConnection!++  """+  Enterprise Server installations owned by the enterprise.+  """+  enterpriseServerInstallations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Whether or not to only return installations discovered via GitHub Connect.+    """+    connectedOnly: Boolean = false++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for Enterprise Server installations returned.+    """+    orderBy: EnterpriseServerInstallationOrder = {+      field: HOST_NAME+      direction: ASC+    }+  ): EnterpriseServerInstallationConnection!++  """+  The setting value for whether the enterprise has an IP allow list enabled.+  """+  ipAllowListEnabledSetting: IpAllowListEnabledSettingValue!++  """+  The IP addresses that are allowed to access resources owned by the enterprise.+  """+  ipAllowListEntries(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for IP allow list entries returned.+    """+    orderBy: IpAllowListEntryOrder = { field: ALLOW_LIST_VALUE, direction: ASC }+  ): IpAllowListEntryConnection!++  """+  Whether or not the default repository permission is currently being updated.+  """+  isUpdatingDefaultRepositoryPermission: Boolean!++  """+  Whether the two-factor authentication requirement is currently being enforced.+  """+  isUpdatingTwoFactorRequirement: Boolean!++  """+  The setting value for whether organization members with admin permissions on a+  repository can change repository visibility.+  """+  membersCanChangeRepositoryVisibilitySetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided can change repository visibility setting value.+  """+  membersCanChangeRepositoryVisibilitySettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  The setting value for whether members of organizations in the enterprise can create internal repositories.+  """+  membersCanCreateInternalRepositoriesSetting: Boolean++  """+  The setting value for whether members of organizations in the enterprise can create private repositories.+  """+  membersCanCreatePrivateRepositoriesSetting: Boolean++  """+  The setting value for whether members of organizations in the enterprise can create public repositories.+  """+  membersCanCreatePublicRepositoriesSetting: Boolean++  """+  The setting value for whether members of organizations in the enterprise can create repositories.+  """+  membersCanCreateRepositoriesSetting: EnterpriseMembersCanCreateRepositoriesSettingValue++  """+  A list of enterprise organizations configured with the provided repository creation setting value.+  """+  membersCanCreateRepositoriesSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting to find organizations for.+    """+    value: OrganizationMembersCanCreateRepositoriesSettingValue!+  ): OrganizationConnection!++  """+  The setting value for whether members with admin permissions for repositories can delete issues.+  """+  membersCanDeleteIssuesSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided members can delete issues setting value.+  """+  membersCanDeleteIssuesSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  The setting value for whether members with admin permissions for repositories can delete or transfer repositories.+  """+  membersCanDeleteRepositoriesSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided members can delete repositories setting value.+  """+  membersCanDeleteRepositoriesSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  The setting value for whether members of organizations in the enterprise can invite outside collaborators.+  """+  membersCanInviteCollaboratorsSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided members can invite collaborators setting value.+  """+  membersCanInviteCollaboratorsSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  Indicates whether members of this enterprise's organizations can purchase additional services for those organizations.+  """+  membersCanMakePurchasesSetting: EnterpriseMembersCanMakePurchasesSettingValue!++  """+  The setting value for whether members with admin permissions for repositories can update protected branches.+  """+  membersCanUpdateProtectedBranchesSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided members can update protected branches setting value.+  """+  membersCanUpdateProtectedBranchesSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  The setting value for whether members can view dependency insights.+  """+  membersCanViewDependencyInsightsSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided members can view dependency insights setting value.+  """+  membersCanViewDependencyInsightsSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  The setting value for whether organization projects are enabled for organizations in this enterprise.+  """+  organizationProjectsSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided organization projects setting value.+  """+  organizationProjectsSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  A list of outside collaborators across the repositories in the enterprise.+  """+  outsideCollaborators(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    The login of one specific outside collaborator.+    """+    login: String++    """+    Ordering options for outside collaborators returned from the connection.+    """+    orderBy: EnterpriseMemberOrder = { field: LOGIN, direction: ASC }++    """+    The search string to look for.+    """+    query: String++    """+    Only return outside collaborators on repositories with this visibility.+    """+    visibility: RepositoryVisibility+  ): EnterpriseOutsideCollaboratorConnection!++  """+  A list of pending administrator invitations for the enterprise.+  """+  pendingAdminInvitations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pending enterprise administrator invitations returned from the connection.+    """+    orderBy: EnterpriseAdministratorInvitationOrder = {+      field: CREATED_AT+      direction: DESC+    }++    """+    The search string to look for.+    """+    query: String++    """+    The role to filter by.+    """+    role: EnterpriseAdministratorRole+  ): EnterpriseAdministratorInvitationConnection!++  """+  A list of pending collaborator invitations across the repositories in the enterprise.+  """+  pendingCollaboratorInvitations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pending repository collaborator invitations returned from the connection.+    """+    orderBy: RepositoryInvitationOrder = { field: CREATED_AT, direction: DESC }++    """+    The search string to look for.+    """+    query: String+  ): RepositoryInvitationConnection!++  """+  A list of pending collaborators across the repositories in the enterprise.+  """+  pendingCollaborators(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pending repository collaborator invitations returned from the connection.+    """+    orderBy: RepositoryInvitationOrder = { field: CREATED_AT, direction: DESC }++    """+    The search string to look for.+    """+    query: String+  ): EnterprisePendingCollaboratorConnection!+  @deprecated(+    reason: "Repository invitations can now be associated with an email, not only an invitee. Use the `pendingCollaboratorInvitations` field instead. Removal on 2020-10-01 UTC."+  )++  """+  A list of pending member invitations for organizations in the enterprise.+  """+  pendingMemberInvitations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    The search string to look for.+    """+    query: String+  ): EnterprisePendingMemberInvitationConnection!++  """+  The setting value for whether repository projects are enabled in this enterprise.+  """+  repositoryProjectsSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided repository projects setting value.+  """+  repositoryProjectsSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  The SAML Identity Provider for the enterprise.+  """+  samlIdentityProvider: EnterpriseIdentityProvider++  """+  A list of enterprise organizations configured with the SAML single sign-on setting value.+  """+  samlIdentityProviderSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: IdentityProviderConfigurationState!+  ): OrganizationConnection!++  """+  The setting value for whether team discussions are enabled for organizations in this enterprise.+  """+  teamDiscussionsSetting: EnterpriseEnabledDisabledSettingValue!++  """+  A list of enterprise organizations configured with the provided team discussions setting value.+  """+  teamDiscussionsSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!++  """+  The setting value for whether the enterprise requires two-factor authentication for its organizations and users.+  """+  twoFactorRequiredSetting: EnterpriseEnabledSettingValue!++  """+  A list of enterprise organizations configured with the two-factor authentication setting value.+  """+  twoFactorRequiredSettingOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations with this setting.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The setting value to find organizations for.+    """+    value: Boolean!+  ): OrganizationConnection!+}++"""+The connection type for User.+"""+type EnterprisePendingCollaboratorConnection {+  """+  A list of edges.+  """+  edges: [EnterprisePendingCollaboratorEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+A user with an invitation to be a collaborator on a repository owned by an organization in an enterprise.+"""+type EnterprisePendingCollaboratorEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  Whether the invited collaborator does not have a license for the enterprise.+  """+  isUnlicensed: Boolean!+  @deprecated(+    reason: "All pending collaborators consume a license Removal on 2021-01-01 UTC."+  )++  """+  The item at the end of the edge.+  """+  node: User++  """+  The enterprise organization repositories this user is a member of.+  """+  repositories(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories.+    """+    orderBy: RepositoryOrder = { field: NAME, direction: ASC }+  ): EnterpriseRepositoryInfoConnection!+}++"""+The connection type for OrganizationInvitation.+"""+type EnterprisePendingMemberInvitationConnection {+  """+  A list of edges.+  """+  edges: [EnterprisePendingMemberInvitationEdge]++  """+  A list of nodes.+  """+  nodes: [OrganizationInvitation]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!++  """+  Identifies the total count of unique users in the connection.+  """+  totalUniqueUserCount: Int!+}++"""+An invitation to be a member in an enterprise organization.+"""+type EnterprisePendingMemberInvitationEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  Whether the invitation has a license for the enterprise.+  """+  isUnlicensed: Boolean!+  @deprecated(+    reason: "All pending members consume a license Removal on 2020-07-01 UTC."+  )++  """+  The item at the end of the edge.+  """+  node: OrganizationInvitation+}++"""+A subset of repository information queryable from an enterprise.+"""+type EnterpriseRepositoryInfo implements Node {+  id: ID!++  """+  Identifies if the repository is private.+  """+  isPrivate: Boolean!++  """+  The repository's name.+  """+  name: String!++  """+  The repository's name with owner.+  """+  nameWithOwner: String!+}++"""+The connection type for EnterpriseRepositoryInfo.+"""+type EnterpriseRepositoryInfoConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseRepositoryInfoEdge]++  """+  A list of nodes.+  """+  nodes: [EnterpriseRepositoryInfo]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type EnterpriseRepositoryInfoEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: EnterpriseRepositoryInfo+}++"""+An Enterprise Server installation.+"""+type EnterpriseServerInstallation implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The customer name to which the Enterprise Server installation belongs.+  """+  customerName: String!++  """+  The host name of the Enterprise Server installation.+  """+  hostName: String!+  id: ID!++  """+  Whether or not the installation is connected to an Enterprise Server installation via GitHub Connect.+  """+  isConnected: Boolean!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  User accounts on this Enterprise Server installation.+  """+  userAccounts(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for Enterprise Server user accounts returned from the connection.+    """+    orderBy: EnterpriseServerUserAccountOrder = { field: LOGIN, direction: ASC }+  ): EnterpriseServerUserAccountConnection!++  """+  User accounts uploads for the Enterprise Server installation.+  """+  userAccountsUploads(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for Enterprise Server user accounts uploads returned from the connection.+    """+    orderBy: EnterpriseServerUserAccountsUploadOrder = {+      field: CREATED_AT+      direction: DESC+    }+  ): EnterpriseServerUserAccountsUploadConnection!+}++"""+The connection type for EnterpriseServerInstallation.+"""+type EnterpriseServerInstallationConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseServerInstallationEdge]++  """+  A list of nodes.+  """+  nodes: [EnterpriseServerInstallation]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type EnterpriseServerInstallationEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: EnterpriseServerInstallation+}++"""+Ordering options for Enterprise Server installation connections.+"""+input EnterpriseServerInstallationOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order Enterprise Server installations by.+  """+  field: EnterpriseServerInstallationOrderField!+}++"""+Properties by which Enterprise Server installation connections can be ordered.+"""+enum EnterpriseServerInstallationOrderField {+  """+  Order Enterprise Server installations by creation time+  """+  CREATED_AT++  """+  Order Enterprise Server installations by customer name+  """+  CUSTOMER_NAME++  """+  Order Enterprise Server installations by host name+  """+  HOST_NAME+}++"""+A user account on an Enterprise Server installation.+"""+type EnterpriseServerUserAccount implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  User emails belonging to this user account.+  """+  emails(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for Enterprise Server user account emails returned from the connection.+    """+    orderBy: EnterpriseServerUserAccountEmailOrder = {+      field: EMAIL+      direction: ASC+    }+  ): EnterpriseServerUserAccountEmailConnection!++  """+  The Enterprise Server installation on which this user account exists.+  """+  enterpriseServerInstallation: EnterpriseServerInstallation!+  id: ID!++  """+  Whether the user account is a site administrator on the Enterprise Server installation.+  """+  isSiteAdmin: Boolean!++  """+  The login of the user account on the Enterprise Server installation.+  """+  login: String!++  """+  The profile name of the user account on the Enterprise Server installation.+  """+  profileName: String++  """+  The date and time when the user account was created on the Enterprise Server installation.+  """+  remoteCreatedAt: DateTime!++  """+  The ID of the user account on the Enterprise Server installation.+  """+  remoteUserId: Int!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!+}++"""+The connection type for EnterpriseServerUserAccount.+"""+type EnterpriseServerUserAccountConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseServerUserAccountEdge]++  """+  A list of nodes.+  """+  nodes: [EnterpriseServerUserAccount]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type EnterpriseServerUserAccountEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: EnterpriseServerUserAccount+}++"""+An email belonging to a user account on an Enterprise Server installation.+"""+type EnterpriseServerUserAccountEmail implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The email address.+  """+  email: String!+  id: ID!++  """+  Indicates whether this is the primary email of the associated user account.+  """+  isPrimary: Boolean!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The user account to which the email belongs.+  """+  userAccount: EnterpriseServerUserAccount!+}++"""+The connection type for EnterpriseServerUserAccountEmail.+"""+type EnterpriseServerUserAccountEmailConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseServerUserAccountEmailEdge]++  """+  A list of nodes.+  """+  nodes: [EnterpriseServerUserAccountEmail]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type EnterpriseServerUserAccountEmailEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: EnterpriseServerUserAccountEmail+}++"""+Ordering options for Enterprise Server user account email connections.+"""+input EnterpriseServerUserAccountEmailOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order emails by.+  """+  field: EnterpriseServerUserAccountEmailOrderField!+}++"""+Properties by which Enterprise Server user account email connections can be ordered.+"""+enum EnterpriseServerUserAccountEmailOrderField {+  """+  Order emails by email+  """+  EMAIL+}++"""+Ordering options for Enterprise Server user account connections.+"""+input EnterpriseServerUserAccountOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order user accounts by.+  """+  field: EnterpriseServerUserAccountOrderField!+}++"""+Properties by which Enterprise Server user account connections can be ordered.+"""+enum EnterpriseServerUserAccountOrderField {+  """+  Order user accounts by login+  """+  LOGIN++  """+  Order user accounts by creation time on the Enterprise Server installation+  """+  REMOTE_CREATED_AT+}++"""+A user accounts upload from an Enterprise Server installation.+"""+type EnterpriseServerUserAccountsUpload implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The enterprise to which this upload belongs.+  """+  enterprise: Enterprise!++  """+  The Enterprise Server installation for which this upload was generated.+  """+  enterpriseServerInstallation: EnterpriseServerInstallation!+  id: ID!++  """+  The name of the file uploaded.+  """+  name: String!++  """+  The synchronization state of the upload+  """+  syncState: EnterpriseServerUserAccountsUploadSyncState!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!+}++"""+The connection type for EnterpriseServerUserAccountsUpload.+"""+type EnterpriseServerUserAccountsUploadConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseServerUserAccountsUploadEdge]++  """+  A list of nodes.+  """+  nodes: [EnterpriseServerUserAccountsUpload]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type EnterpriseServerUserAccountsUploadEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: EnterpriseServerUserAccountsUpload+}++"""+Ordering options for Enterprise Server user accounts upload connections.+"""+input EnterpriseServerUserAccountsUploadOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order user accounts uploads by.+  """+  field: EnterpriseServerUserAccountsUploadOrderField!+}++"""+Properties by which Enterprise Server user accounts upload connections can be ordered.+"""+enum EnterpriseServerUserAccountsUploadOrderField {+  """+  Order user accounts uploads by creation time+  """+  CREATED_AT+}++"""+Synchronization state of the Enterprise Server user accounts upload+"""+enum EnterpriseServerUserAccountsUploadSyncState {+  """+  The synchronization of the upload failed.+  """+  FAILURE++  """+  The synchronization of the upload is pending.+  """+  PENDING++  """+  The synchronization of the upload succeeded.+  """+  SUCCESS+}++"""+An account for a user who is an admin of an enterprise or a member of an enterprise through one or more organizations.+"""+type EnterpriseUserAccount implements Actor & Node {+  """+  A URL pointing to the enterprise user account's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The enterprise in which this user account exists.+  """+  enterprise: Enterprise!+  id: ID!++  """+  An identifier for the enterprise user account, a login or email address+  """+  login: String!++  """+  The name of the enterprise user account+  """+  name: String++  """+  A list of enterprise organizations this user is a member of.+  """+  organizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for organizations returned from the connection.+    """+    orderBy: OrganizationOrder = { field: LOGIN, direction: ASC }++    """+    The search string to look for.+    """+    query: String++    """+    The role of the user in the enterprise organization.+    """+    role: EnterpriseUserAccountMembershipRole+  ): EnterpriseOrganizationMembershipConnection!++  """+  The HTTP path for this user.+  """+  resourcePath: URI!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this user.+  """+  url: URI!++  """+  The user within the enterprise.+  """+  user: User+}++"""+The connection type for EnterpriseUserAccount.+"""+type EnterpriseUserAccountConnection {+  """+  A list of edges.+  """+  edges: [EnterpriseUserAccountEdge]++  """+  A list of nodes.+  """+  nodes: [EnterpriseUserAccount]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type EnterpriseUserAccountEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: EnterpriseUserAccount+}++"""+The possible roles for enterprise membership.+"""+enum EnterpriseUserAccountMembershipRole {+  """+  The user is a member of the enterprise membership.+  """+  MEMBER++  """+  The user is an owner of the enterprise membership.+  """+  OWNER+}++"""+The possible GitHub Enterprise deployments where this user can exist.+"""+enum EnterpriseUserDeployment {+  """+  The user is part of a GitHub Enterprise Cloud deployment.+  """+  CLOUD++  """+  The user is part of a GitHub Enterprise Server deployment.+  """+  SERVER+}++"""+An external identity provisioned by SAML SSO or SCIM.+"""+type ExternalIdentity implements Node {+  """+  The GUID for this identity+  """+  guid: String!+  id: ID!++  """+  Organization invitation for this SCIM-provisioned external identity+  """+  organizationInvitation: OrganizationInvitation++  """+  SAML Identity attributes+  """+  samlIdentity: ExternalIdentitySamlAttributes++  """+  SCIM Identity attributes+  """+  scimIdentity: ExternalIdentityScimAttributes++  """+  User linked to this external identity. Will be NULL if this identity has not been claimed by an organization member.+  """+  user: User+}++"""+The connection type for ExternalIdentity.+"""+type ExternalIdentityConnection {+  """+  A list of edges.+  """+  edges: [ExternalIdentityEdge]++  """+  A list of nodes.+  """+  nodes: [ExternalIdentity]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type ExternalIdentityEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: ExternalIdentity+}++"""+SAML attributes for the External Identity+"""+type ExternalIdentitySamlAttributes {+  """+  The emails associated with the SAML identity+  """+  emails: [UserEmailMetadata!]++  """+  Family name of the SAML identity+  """+  familyName: String++  """+  Given name of the SAML identity+  """+  givenName: String++  """+  The groups linked to this identity in IDP+  """+  groups: [String!]++  """+  The NameID of the SAML identity+  """+  nameId: String++  """+  The userName of the SAML identity+  """+  username: String+}++"""+SCIM attributes for the External Identity+"""+type ExternalIdentityScimAttributes {+  """+  The emails associated with the SCIM identity+  """+  emails: [UserEmailMetadata!]++  """+  Family name of the SCIM identity+  """+  familyName: String++  """+  Given name of the SCIM identity+  """+  givenName: String++  """+  The groups linked to this identity in IDP+  """+  groups: [String!]++  """+  The userName of the SCIM identity+  """+  username: String+}++"""+Autogenerated input type of FollowUser+"""+input FollowUserInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the user to follow.+  """+  userId: ID! @possibleTypes(concreteTypes: ["User"])+}++"""+Autogenerated return type of FollowUser+"""+type FollowUserPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The user that was followed.+  """+  user: User+}++"""+The connection type for User.+"""+type FollowerConnection {+  """+  A list of edges.+  """+  edges: [UserEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+The connection type for User.+"""+type FollowingConnection {+  """+  A list of edges.+  """+  edges: [UserEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+A funding platform link for a repository.+"""+type FundingLink {+  """+  The funding platform this link is for.+  """+  platform: FundingPlatform!++  """+  The configured URL for this funding link.+  """+  url: URI!+}++"""+The possible funding platforms for repository funding links.+"""+enum FundingPlatform {+  """+  Community Bridge funding platform.+  """+  COMMUNITY_BRIDGE++  """+  Custom funding platform.+  """+  CUSTOM++  """+  GitHub funding platform.+  """+  GITHUB++  """+  IssueHunt funding platform.+  """+  ISSUEHUNT++  """+  Ko-fi funding platform.+  """+  KO_FI++  """+  Liberapay funding platform.+  """+  LIBERAPAY++  """+  Open Collective funding platform.+  """+  OPEN_COLLECTIVE++  """+  Otechie funding platform.+  """+  OTECHIE++  """+  Patreon funding platform.+  """+  PATREON++  """+  Tidelift funding platform.+  """+  TIDELIFT+}++"""+A generic hovercard context with a message and icon+"""+type GenericHovercardContext implements HovercardContext {+  """+  A string describing this context+  """+  message: String!++  """+  An octicon to accompany this context+  """+  octicon: String!+}++"""+A Gist.+"""+type Gist implements Node & Starrable & UniformResourceLocatable {+  """+  A list of comments associated with the gist+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): GistCommentConnection!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The gist description.+  """+  description: String++  """+  The files in this gist.+  """+  files(+    """+    The maximum number of files to return.+    """+    limit: Int = 10++    """+    The oid of the files to return+    """+    oid: GitObjectID+  ): [GistFile]++  """+  A list of forks associated with the gist+  """+  forks(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for gists returned from the connection+    """+    orderBy: GistOrder+  ): GistConnection!+  id: ID!++  """+  Identifies if the gist is a fork.+  """+  isFork: Boolean!++  """+  Whether the gist is public or not.+  """+  isPublic: Boolean!++  """+  The gist name.+  """+  name: String!++  """+  The gist owner.+  """+  owner: RepositoryOwner++  """+  Identifies when the gist was last pushed to.+  """+  pushedAt: DateTime++  """+  The HTML path to this resource.+  """+  resourcePath: URI!++  """+  A list of users who have starred this starrable.+  """+  stargazers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: StarOrder+  ): StargazerConnection!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this Gist.+  """+  url: URI!++  """+  Returns a boolean indicating whether the viewing user has starred this starrable.+  """+  viewerHasStarred: Boolean!+}++"""+Represents a comment on an Gist.+"""+type GistComment implements Comment & Deletable & Minimizable & Node & Updatable & UpdatableComment {+  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the gist.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  Identifies the comment body.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The body rendered to text.+  """+  bodyText: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The actor who edited the comment.+  """+  editor: Actor++  """+  The associated gist.+  """+  gist: Gist!+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  Returns whether or not a comment has been minimized.+  """+  isMinimized: Boolean!++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  Returns why the comment was minimized.+  """+  minimizedReason: String++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Check if the current viewer can delete this object.+  """+  viewerCanDelete: Boolean!++  """+  Check if the current viewer can minimize this object.+  """+  viewerCanMinimize: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!+}++"""+The connection type for GistComment.+"""+type GistCommentConnection {+  """+  A list of edges.+  """+  edges: [GistCommentEdge]++  """+  A list of nodes.+  """+  nodes: [GistComment]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type GistCommentEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: GistComment+}++"""+The connection type for Gist.+"""+type GistConnection {+  """+  A list of edges.+  """+  edges: [GistEdge]++  """+  A list of nodes.+  """+  nodes: [Gist]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type GistEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Gist+}++"""+A file in a gist.+"""+type GistFile {+  """+  The file name encoded to remove characters that are invalid in URL paths.+  """+  encodedName: String++  """+  The gist file encoding.+  """+  encoding: String++  """+  The file extension from the file name.+  """+  extension: String++  """+  Indicates if this file is an image.+  """+  isImage: Boolean!++  """+  Whether the file's contents were truncated.+  """+  isTruncated: Boolean!++  """+  The programming language this file is written in.+  """+  language: Language++  """+  The gist file name.+  """+  name: String++  """+  The gist file size in bytes.+  """+  size: Int++  """+  UTF8 text data or null if the file is binary+  """+  text(+    """+    Optionally truncate the returned file to this length.+    """+    truncate: Int+  ): String+}++"""+Ordering options for gist connections+"""+input GistOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order repositories by.+  """+  field: GistOrderField!+}++"""+Properties by which gist connections can be ordered.+"""+enum GistOrderField {+  """+  Order gists by creation time+  """+  CREATED_AT++  """+  Order gists by push time+  """+  PUSHED_AT++  """+  Order gists by update time+  """+  UPDATED_AT+}++"""+The privacy of a Gist+"""+enum GistPrivacy {+  """+  Gists that are public and secret+  """+  ALL++  """+  Public+  """+  PUBLIC++  """+  Secret+  """+  SECRET+}++"""+Represents an actor in a Git commit (ie. an author or committer).+"""+type GitActor {+  """+  A URL pointing to the author's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!++  """+  The timestamp of the Git action (authoring or committing).+  """+  date: GitTimestamp++  """+  The email in the Git commit.+  """+  email: String++  """+  The name in the Git commit.+  """+  name: String++  """+  The GitHub user corresponding to the email field. Null if no such user exists.+  """+  user: User+}++"""+Represents information about the GitHub instance.+"""+type GitHubMetadata {+  """+  Returns a String that's a SHA of `github-services`+  """+  gitHubServicesSha: GitObjectID!++  """+  IP addresses that users connect to for git operations+  """+  gitIpAddresses: [String!]++  """+  IP addresses that service hooks are sent from+  """+  hookIpAddresses: [String!]++  """+  IP addresses that the importer connects from+  """+  importerIpAddresses: [String!]++  """+  Whether or not users are verified+  """+  isPasswordAuthenticationVerifiable: Boolean!++  """+  IP addresses for GitHub Pages' A records+  """+  pagesIpAddresses: [String!]+}++"""+Represents a Git object.+"""+interface GitObject {+  """+  An abbreviated version of the Git object ID+  """+  abbreviatedOid: String!++  """+  The HTTP path for this Git object+  """+  commitResourcePath: URI!++  """+  The HTTP URL for this Git object+  """+  commitUrl: URI!+  id: ID!++  """+  The Git object ID+  """+  oid: GitObjectID!++  """+  The Repository the Git object belongs to+  """+  repository: Repository!+}++"""+A Git object ID.+"""+scalar GitObjectID++"""+A fully qualified reference name (e.g. `refs/heads/master`).+"""+scalar GitRefname @preview(toggledBy: "update-refs-preview")++"""+Git SSH string+"""+scalar GitSSHRemote++"""+Information about a signature (GPG or S/MIME) on a Commit or Tag.+"""+interface GitSignature {+  """+  Email used to sign this object.+  """+  email: String!++  """+  True if the signature is valid and verified by GitHub.+  """+  isValid: Boolean!++  """+  Payload for GPG signing object. Raw ODB object without the signature header.+  """+  payload: String!++  """+  ASCII-armored signature header from object.+  """+  signature: String!++  """+  GitHub user corresponding to the email signing this commit.+  """+  signer: User++  """+  The state of this signature. `VALID` if signature is valid and verified by+  GitHub, otherwise represents reason why signature is considered invalid.+  """+  state: GitSignatureState!++  """+  True if the signature was made with GitHub's signing key.+  """+  wasSignedByGitHub: Boolean!+}++"""+The state of a Git signature.+"""+enum GitSignatureState {+  """+  The signing certificate or its chain could not be verified+  """+  BAD_CERT++  """+  Invalid email used for signing+  """+  BAD_EMAIL++  """+  Signing key expired+  """+  EXPIRED_KEY++  """+  Internal error - the GPG verification service misbehaved+  """+  GPGVERIFY_ERROR++  """+  Internal error - the GPG verification service is unavailable at the moment+  """+  GPGVERIFY_UNAVAILABLE++  """+  Invalid signature+  """+  INVALID++  """+  Malformed signature+  """+  MALFORMED_SIG++  """+  The usage flags for the key that signed this don't allow signing+  """+  NOT_SIGNING_KEY++  """+  Email used for signing not known to GitHub+  """+  NO_USER++  """+  Valid siganture, though certificate revocation check failed+  """+  OCSP_ERROR++  """+  Valid signature, pending certificate revocation checking+  """+  OCSP_PENDING++  """+  One or more certificates in chain has been revoked+  """+  OCSP_REVOKED++  """+  Key used for signing not known to GitHub+  """+  UNKNOWN_KEY++  """+  Unknown signature type+  """+  UNKNOWN_SIG_TYPE++  """+  Unsigned+  """+  UNSIGNED++  """+  Email used for signing unverified on GitHub+  """+  UNVERIFIED_EMAIL++  """+  Valid signature and verified by GitHub+  """+  VALID+}++"""+An ISO-8601 encoded date string. Unlike the DateTime type, GitTimestamp is not converted in UTC.+"""+scalar GitTimestamp++"""+Represents a GPG signature on a Commit or Tag.+"""+type GpgSignature implements GitSignature {+  """+  Email used to sign this object.+  """+  email: String!++  """+  True if the signature is valid and verified by GitHub.+  """+  isValid: Boolean!++  """+  Hex-encoded ID of the key that signed this object.+  """+  keyId: String++  """+  Payload for GPG signing object. Raw ODB object without the signature header.+  """+  payload: String!++  """+  ASCII-armored signature header from object.+  """+  signature: String!++  """+  GitHub user corresponding to the email signing this commit.+  """+  signer: User++  """+  The state of this signature. `VALID` if signature is valid and verified by+  GitHub, otherwise represents reason why signature is considered invalid.+  """+  state: GitSignatureState!++  """+  True if the signature was made with GitHub's signing key.+  """+  wasSignedByGitHub: Boolean!+}++"""+A string containing HTML code.+"""+scalar HTML++"""+Represents a 'head_ref_deleted' event on a given pull request.+"""+type HeadRefDeletedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the Ref associated with the `head_ref_deleted` event.+  """+  headRef: Ref++  """+  Identifies the name of the Ref associated with the `head_ref_deleted` event.+  """+  headRefName: String!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!+}++"""+Represents a 'head_ref_force_pushed' event on a given pull request.+"""+type HeadRefForcePushedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the after commit SHA for the 'head_ref_force_pushed' event.+  """+  afterCommit: Commit++  """+  Identifies the before commit SHA for the 'head_ref_force_pushed' event.+  """+  beforeCommit: Commit++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  Identifies the fully qualified ref name for the 'head_ref_force_pushed' event.+  """+  ref: Ref+}++"""+Represents a 'head_ref_restored' event on a given pull request.+"""+type HeadRefRestoredEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!+}++"""+Detail needed to display a hovercard for a user+"""+type Hovercard {+  """+  Each of the contexts for this hovercard+  """+  contexts: [HovercardContext!]!+}++"""+An individual line of a hovercard+"""+interface HovercardContext {+  """+  A string describing this context+  """+  message: String!++  """+  An octicon to accompany this context+  """+  octicon: String!+}++"""+The possible states in which authentication can be configured with an identity provider.+"""+enum IdentityProviderConfigurationState {+  """+  Authentication with an identity provider is configured but not enforced.+  """+  CONFIGURED++  """+  Authentication with an identity provider is configured and enforced.+  """+  ENFORCED++  """+  Authentication with an identity provider is not configured.+  """+  UNCONFIGURED+}++"""+Autogenerated input type of ImportProject+"""+input ImportProjectInput {+  """+  The description of Project.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A list of columns containing issues and pull requests.+  """+  columnImports: [ProjectColumnImport!]!++  """+  The name of Project.+  """+  name: String!++  """+  The name of the Organization or User to create the Project under.+  """+  ownerName: String!++  """+  Whether the Project is public or not.+  """+  public: Boolean = false+}++"""+Autogenerated return type of ImportProject+"""+type ImportProjectPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new Project!+  """+  project: Project+}++"""+Autogenerated input type of InviteEnterpriseAdmin+"""+input InviteEnterpriseAdminInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The email of the person to invite as an administrator.+  """+  email: String++  """+  The ID of the enterprise to which you want to invite an administrator.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The login of a user to invite as an administrator.+  """+  invitee: String++  """+  The role of the administrator.+  """+  role: EnterpriseAdministratorRole+}++"""+Autogenerated return type of InviteEnterpriseAdmin+"""+type InviteEnterpriseAdminPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The created enterprise administrator invitation.+  """+  invitation: EnterpriseAdministratorInvitation+}++"""+The possible values for the IP allow list enabled setting.+"""+enum IpAllowListEnabledSettingValue {+  """+  The setting is disabled for the owner.+  """+  DISABLED++  """+  The setting is enabled for the owner.+  """+  ENABLED+}++"""+An IP address or range of addresses that is allowed to access an owner's resources.+"""+type IpAllowListEntry implements Node {+  """+  A single IP address or range of IP addresses in CIDR notation.+  """+  allowListValue: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Whether the entry is currently active.+  """+  isActive: Boolean!++  """+  The name of the IP allow list entry.+  """+  name: String++  """+  The owner of the IP allow list entry.+  """+  owner: IpAllowListOwner!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!+}++"""+The connection type for IpAllowListEntry.+"""+type IpAllowListEntryConnection {+  """+  A list of edges.+  """+  edges: [IpAllowListEntryEdge]++  """+  A list of nodes.+  """+  nodes: [IpAllowListEntry]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type IpAllowListEntryEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: IpAllowListEntry+}++"""+Ordering options for IP allow list entry connections.+"""+input IpAllowListEntryOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order IP allow list entries by.+  """+  field: IpAllowListEntryOrderField!+}++"""+Properties by which IP allow list entry connections can be ordered.+"""+enum IpAllowListEntryOrderField {+  """+  Order IP allow list entries by the allow list value.+  """+  ALLOW_LIST_VALUE++  """+  Order IP allow list entries by creation time.+  """+  CREATED_AT+}++"""+Types that can own an IP allow list.+"""+union IpAllowListOwner = Enterprise | Organization++"""+An Issue is a place to discuss ideas, enhancements, tasks, and bugs for a project.+"""+type Issue implements Assignable & Closable & Comment & Labelable & Lockable & Node & Reactable & RepositoryNode & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment {+  """+  Reason that the conversation was locked.+  """+  activeLockReason: LockReason++  """+  A list of Users assigned to this object.+  """+  assignees(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserConnection!++  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the subject of the comment.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  Identifies the body of the issue.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  Identifies the body of the issue rendered to text.+  """+  bodyText: String!++  """+  `true` if the object is closed (definition of closed may depend on type)+  """+  closed: Boolean!++  """+  Identifies the date and time when the object was closed.+  """+  closedAt: DateTime++  """+  A list of comments associated with the Issue.+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): IssueCommentConnection!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The actor who edited the comment.+  """+  editor: Actor++  """+  The hovercard information for this issue+  """+  hovercard(+    """+    Whether or not to include notification contexts+    """+    includeNotificationContexts: Boolean = true+  ): Hovercard!+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  A list of labels associated with the object.+  """+  labels(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for labels returned from the connection.+    """+    orderBy: LabelOrder = { field: CREATED_AT, direction: ASC }+  ): LabelConnection++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  `true` if the object is locked+  """+  locked: Boolean!++  """+  Identifies the milestone associated with the issue.+  """+  milestone: Milestone++  """+  Identifies the issue number.+  """+  number: Int!++  """+  A list of Users that are participating in the Issue conversation.+  """+  participants(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserConnection!++  """+  List of project cards associated with this issue.+  """+  projectCards(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    A list of archived states to filter the cards by+    """+    archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED]++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ProjectCardConnection!++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  The repository associated with this node.+  """+  repository: Repository!++  """+  The HTTP path for this issue+  """+  resourcePath: URI!++  """+  Identifies the state of the issue.+  """+  state: IssueState!++  """+  A list of events, comments, commits, etc. associated with the issue.+  """+  timeline(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows filtering timeline events by a `since` timestamp.+    """+    since: DateTime+  ): IssueTimelineConnection!+  @deprecated(+    reason: "`timeline` will be removed Use Issue.timelineItems instead. Removal on 2020-10-01 UTC."+  )++  """+  A list of events, comments, commits, etc. associated with the issue.+  """+  timelineItems(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Filter timeline items by type.+    """+    itemTypes: [IssueTimelineItemsItemType!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter timeline items by a `since` timestamp.+    """+    since: DateTime++    """+    Skips the first _n_ elements in the list.+    """+    skip: Int+  ): IssueTimelineItemsConnection!++  """+  Identifies the issue title.+  """+  title: String!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this issue+  """+  url: URI!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!++  """+  Check if the viewer is able to change their subscription status for the repository.+  """+  viewerCanSubscribe: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!++  """+  Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.+  """+  viewerSubscription: SubscriptionState+}++"""+Represents a comment on an Issue.+"""+type IssueComment implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment {+  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the subject of the comment.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  The body as Markdown.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The body rendered to text.+  """+  bodyText: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The actor who edited the comment.+  """+  editor: Actor+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  Returns whether or not a comment has been minimized.+  """+  isMinimized: Boolean!++  """+  Identifies the issue associated with the comment.+  """+  issue: Issue!++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  Returns why the comment was minimized.+  """+  minimizedReason: String++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  Returns the pull request associated with the comment, if this comment was made on a+  pull request.+  """+  pullRequest: PullRequest++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  The repository associated with this node.+  """+  repository: Repository!++  """+  The HTTP path for this issue comment+  """+  resourcePath: URI!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this issue comment+  """+  url: URI!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Check if the current viewer can delete this object.+  """+  viewerCanDelete: Boolean!++  """+  Check if the current viewer can minimize this object.+  """+  viewerCanMinimize: Boolean!++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!+}++"""+The connection type for IssueComment.+"""+type IssueCommentConnection {+  """+  A list of edges.+  """+  edges: [IssueCommentEdge]++  """+  A list of nodes.+  """+  nodes: [IssueComment]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type IssueCommentEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: IssueComment+}++"""+The connection type for Issue.+"""+type IssueConnection {+  """+  A list of edges.+  """+  edges: [IssueEdge]++  """+  A list of nodes.+  """+  nodes: [Issue]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+This aggregates issues opened by a user within one repository.+"""+type IssueContributionsByRepository {+  """+  The issue contributions.+  """+  contributions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for contributions returned from the connection.+    """+    orderBy: ContributionOrder = { direction: DESC }+  ): CreatedIssueContributionConnection!++  """+  The repository in which the issues were opened.+  """+  repository: Repository!+}++"""+An edge in a connection.+"""+type IssueEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Issue+}++"""+Ways in which to filter lists of issues.+"""+input IssueFilters {+  """+  List issues assigned to given name. Pass in `null` for issues with no assigned+  user, and `*` for issues assigned to any user.+  """+  assignee: String++  """+  List issues created by given name.+  """+  createdBy: String++  """+  List issues where the list of label names exist on the issue.+  """+  labels: [String!]++  """+  List issues where the given name is mentioned in the issue.+  """+  mentioned: String++  """+  List issues by given milestone argument. If an string representation of an+  integer is passed, it should refer to a milestone by its number field. Pass in+  `null` for issues with no milestone, and `*` for issues that are assigned to any milestone.+  """+  milestone: String++  """+  List issues that have been updated at or after the given date.+  """+  since: DateTime++  """+  List issues filtered by the list of states given.+  """+  states: [IssueState!]++  """+  List issues subscribed to by viewer.+  """+  viewerSubscribed: Boolean = false+}++"""+Used for return value of Repository.issueOrPullRequest.+"""+union IssueOrPullRequest = Issue | PullRequest++"""+Ways in which lists of issues can be ordered upon return.+"""+input IssueOrder {+  """+  The direction in which to order issues by the specified field.+  """+  direction: OrderDirection!++  """+  The field in which to order issues by.+  """+  field: IssueOrderField!+}++"""+Properties by which issue connections can be ordered.+"""+enum IssueOrderField {+  """+  Order issues by comment count+  """+  COMMENTS++  """+  Order issues by creation time+  """+  CREATED_AT++  """+  Order issues by update time+  """+  UPDATED_AT+}++"""+The possible states of an issue.+"""+enum IssueState {+  """+  An issue that has been closed+  """+  CLOSED++  """+  An issue that is still open+  """+  OPEN+}++"""+The connection type for IssueTimelineItem.+"""+type IssueTimelineConnection {+  """+  A list of edges.+  """+  edges: [IssueTimelineItemEdge]++  """+  A list of nodes.+  """+  nodes: [IssueTimelineItem]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An item in an issue timeline+"""+union IssueTimelineItem =+    AssignedEvent+  | ClosedEvent+  | Commit+  | CrossReferencedEvent+  | DemilestonedEvent+  | IssueComment+  | LabeledEvent+  | LockedEvent+  | MilestonedEvent+  | ReferencedEvent+  | RenamedTitleEvent+  | ReopenedEvent+  | SubscribedEvent+  | TransferredEvent+  | UnassignedEvent+  | UnlabeledEvent+  | UnlockedEvent+  | UnsubscribedEvent+  | UserBlockedEvent++"""+An edge in a connection.+"""+type IssueTimelineItemEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: IssueTimelineItem+}++"""+An item in an issue timeline+"""+union IssueTimelineItems =+    AddedToProjectEvent+  | AssignedEvent+  | ClosedEvent+  | CommentDeletedEvent+  | ConnectedEvent+  | ConvertedNoteToIssueEvent+  | CrossReferencedEvent+  | DemilestonedEvent+  | DisconnectedEvent+  | IssueComment+  | LabeledEvent+  | LockedEvent+  | MarkedAsDuplicateEvent+  | MentionedEvent+  | MilestonedEvent+  | MovedColumnsInProjectEvent+  | PinnedEvent+  | ReferencedEvent+  | RemovedFromProjectEvent+  | RenamedTitleEvent+  | ReopenedEvent+  | SubscribedEvent+  | TransferredEvent+  | UnassignedEvent+  | UnlabeledEvent+  | UnlockedEvent+  | UnmarkedAsDuplicateEvent+  | UnpinnedEvent+  | UnsubscribedEvent+  | UserBlockedEvent++"""+The connection type for IssueTimelineItems.+"""+type IssueTimelineItemsConnection {+  """+  A list of edges.+  """+  edges: [IssueTimelineItemsEdge]++  """+  Identifies the count of items after applying `before` and `after` filters.+  """+  filteredCount: Int!++  """+  A list of nodes.+  """+  nodes: [IssueTimelineItems]++  """+  Identifies the count of items after applying `before`/`after` filters and `first`/`last`/`skip` slicing.+  """+  pageCount: Int!++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!++  """+  Identifies the date and time when the timeline was last updated.+  """+  updatedAt: DateTime!+}++"""+An edge in a connection.+"""+type IssueTimelineItemsEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: IssueTimelineItems+}++"""+The possible item types found in a timeline.+"""+enum IssueTimelineItemsItemType {+  """+  Represents a 'added_to_project' event on a given issue or pull request.+  """+  ADDED_TO_PROJECT_EVENT++  """+  Represents an 'assigned' event on any assignable object.+  """+  ASSIGNED_EVENT++  """+  Represents a 'closed' event on any `Closable`.+  """+  CLOSED_EVENT++  """+  Represents a 'comment_deleted' event on a given issue or pull request.+  """+  COMMENT_DELETED_EVENT++  """+  Represents a 'connected' event on a given issue or pull request.+  """+  CONNECTED_EVENT++  """+  Represents a 'converted_note_to_issue' event on a given issue or pull request.+  """+  CONVERTED_NOTE_TO_ISSUE_EVENT++  """+  Represents a mention made by one issue or pull request to another.+  """+  CROSS_REFERENCED_EVENT++  """+  Represents a 'demilestoned' event on a given issue or pull request.+  """+  DEMILESTONED_EVENT++  """+  Represents a 'disconnected' event on a given issue or pull request.+  """+  DISCONNECTED_EVENT++  """+  Represents a comment on an Issue.+  """+  ISSUE_COMMENT++  """+  Represents a 'labeled' event on a given issue or pull request.+  """+  LABELED_EVENT++  """+  Represents a 'locked' event on a given issue or pull request.+  """+  LOCKED_EVENT++  """+  Represents a 'marked_as_duplicate' event on a given issue or pull request.+  """+  MARKED_AS_DUPLICATE_EVENT++  """+  Represents a 'mentioned' event on a given issue or pull request.+  """+  MENTIONED_EVENT++  """+  Represents a 'milestoned' event on a given issue or pull request.+  """+  MILESTONED_EVENT++  """+  Represents a 'moved_columns_in_project' event on a given issue or pull request.+  """+  MOVED_COLUMNS_IN_PROJECT_EVENT++  """+  Represents a 'pinned' event on a given issue or pull request.+  """+  PINNED_EVENT++  """+  Represents a 'referenced' event on a given `ReferencedSubject`.+  """+  REFERENCED_EVENT++  """+  Represents a 'removed_from_project' event on a given issue or pull request.+  """+  REMOVED_FROM_PROJECT_EVENT++  """+  Represents a 'renamed' event on a given issue or pull request+  """+  RENAMED_TITLE_EVENT++  """+  Represents a 'reopened' event on any `Closable`.+  """+  REOPENED_EVENT++  """+  Represents a 'subscribed' event on a given `Subscribable`.+  """+  SUBSCRIBED_EVENT++  """+  Represents a 'transferred' event on a given issue or pull request.+  """+  TRANSFERRED_EVENT++  """+  Represents an 'unassigned' event on any assignable object.+  """+  UNASSIGNED_EVENT++  """+  Represents an 'unlabeled' event on a given issue or pull request.+  """+  UNLABELED_EVENT++  """+  Represents an 'unlocked' event on a given issue or pull request.+  """+  UNLOCKED_EVENT++  """+  Represents an 'unmarked_as_duplicate' event on a given issue or pull request.+  """+  UNMARKED_AS_DUPLICATE_EVENT++  """+  Represents an 'unpinned' event on a given issue or pull request.+  """+  UNPINNED_EVENT++  """+  Represents an 'unsubscribed' event on a given `Subscribable`.+  """+  UNSUBSCRIBED_EVENT++  """+  Represents a 'user_blocked' event on a given user.+  """+  USER_BLOCKED_EVENT+}++"""+Represents a user signing up for a GitHub account.+"""+type JoinedGitHubContribution implements Contribution {+  """+  Whether this contribution is associated with a record you do not have access to. For+  example, your own 'first issue' contribution may have been made on a repository you can no+  longer access.+  """+  isRestricted: Boolean!++  """+  When this contribution was made.+  """+  occurredAt: DateTime!++  """+  The HTTP path for this contribution.+  """+  resourcePath: URI!++  """+  The HTTP URL for this contribution.+  """+  url: URI!++  """+  The user who made this contribution.+  """+  user: User!+}++"""+A label for categorizing Issues or Milestones with a given Repository.+"""+type Label implements Node {+  """+  Identifies the label color.+  """+  color: String!++  """+  Identifies the date and time when the label was created.+  """+  createdAt: DateTime++  """+  A brief description of this label.+  """+  description: String+  id: ID!++  """+  Indicates whether or not this is a default label.+  """+  isDefault: Boolean!++  """+  A list of issues associated with this label.+  """+  issues(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Filtering options for issues returned from the connection.+    """+    filterBy: IssueFilters++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for issues returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the issues by.+    """+    states: [IssueState!]+  ): IssueConnection!++  """+  Identifies the label name.+  """+  name: String!++  """+  A list of pull requests associated with this label.+  """+  pullRequests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    The base ref name to filter the pull requests by.+    """+    baseRefName: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    The head ref name to filter the pull requests by.+    """+    headRefName: String++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pull requests returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the pull requests by.+    """+    states: [PullRequestState!]+  ): PullRequestConnection!++  """+  The repository associated with this label.+  """+  repository: Repository!++  """+  The HTTP path for this label.+  """+  resourcePath: URI!++  """+  Identifies the date and time when the label was last updated.+  """+  updatedAt: DateTime++  """+  The HTTP URL for this label.+  """+  url: URI!+}++"""+The connection type for Label.+"""+type LabelConnection {+  """+  A list of edges.+  """+  edges: [LabelEdge]++  """+  A list of nodes.+  """+  nodes: [Label]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type LabelEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Label+}++"""+Ways in which lists of labels can be ordered upon return.+"""+input LabelOrder {+  """+  The direction in which to order labels by the specified field.+  """+  direction: OrderDirection!++  """+  The field in which to order labels by.+  """+  field: LabelOrderField!+}++"""+Properties by which label connections can be ordered.+"""+enum LabelOrderField {+  """+  Order labels by creation time+  """+  CREATED_AT++  """+  Order labels by name+  """+  NAME+}++"""+An object that can have labels assigned to it.+"""+interface Labelable {+  """+  A list of labels associated with the object.+  """+  labels(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for labels returned from the connection.+    """+    orderBy: LabelOrder = { field: CREATED_AT, direction: ASC }+  ): LabelConnection+}++"""+Represents a 'labeled' event on a given issue or pull request.+"""+type LabeledEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the label associated with the 'labeled' event.+  """+  label: Label!++  """+  Identifies the `Labelable` associated with the event.+  """+  labelable: Labelable!+}++"""+Represents a given language found in repositories.+"""+type Language implements Node {+  """+  The color defined for the current language.+  """+  color: String+  id: ID!++  """+  The name of the current language.+  """+  name: String!+}++"""+A list of languages associated with the parent.+"""+type LanguageConnection {+  """+  A list of edges.+  """+  edges: [LanguageEdge]++  """+  A list of nodes.+  """+  nodes: [Language]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!++  """+  The total size in bytes of files written in that language.+  """+  totalSize: Int!+}++"""+Represents the language of a repository.+"""+type LanguageEdge {+  cursor: String!+  node: Language!++  """+  The number of bytes of code written in the language.+  """+  size: Int!+}++"""+Ordering options for language connections.+"""+input LanguageOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order languages by.+  """+  field: LanguageOrderField!+}++"""+Properties by which language connections can be ordered.+"""+enum LanguageOrderField {+  """+  Order languages by the size of all files containing the language+  """+  SIZE+}++"""+A repository's open source license+"""+type License implements Node {+  """+  The full text of the license+  """+  body: String!++  """+  The conditions set by the license+  """+  conditions: [LicenseRule]!++  """+  A human-readable description of the license+  """+  description: String++  """+  Whether the license should be featured+  """+  featured: Boolean!++  """+  Whether the license should be displayed in license pickers+  """+  hidden: Boolean!+  id: ID!++  """+  Instructions on how to implement the license+  """+  implementation: String++  """+  The lowercased SPDX ID of the license+  """+  key: String!++  """+  The limitations set by the license+  """+  limitations: [LicenseRule]!++  """+  The license full name specified by <https://spdx.org/licenses>+  """+  name: String!++  """+  Customary short name if applicable (e.g, GPLv3)+  """+  nickname: String++  """+  The permissions set by the license+  """+  permissions: [LicenseRule]!++  """+  Whether the license is a pseudo-license placeholder (e.g., other, no-license)+  """+  pseudoLicense: Boolean!++  """+  Short identifier specified by <https://spdx.org/licenses>+  """+  spdxId: String++  """+  URL to the license on <https://choosealicense.com>+  """+  url: URI+}++"""+Describes a License's conditions, permissions, and limitations+"""+type LicenseRule {+  """+  A description of the rule+  """+  description: String!++  """+  The machine-readable rule key+  """+  key: String!++  """+  The human-readable rule label+  """+  label: String!+}++"""+Autogenerated input type of LinkRepositoryToProject+"""+input LinkRepositoryToProjectInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the Project to link to a Repository+  """+  projectId: ID! @possibleTypes(concreteTypes: ["Project"])++  """+  The ID of the Repository to link to a Project.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of LinkRepositoryToProject+"""+type LinkRepositoryToProjectPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The linked Project.+  """+  project: Project++  """+  The linked Repository.+  """+  repository: Repository+}++"""+Autogenerated input type of LockLockable+"""+input LockLockableInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A reason for why the issue or pull request will be locked.+  """+  lockReason: LockReason++  """+  ID of the issue or pull request to be locked.+  """+  lockableId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "Lockable"+  )+}++"""+Autogenerated return type of LockLockable+"""+type LockLockablePayload {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The item that was locked.+  """+  lockedRecord: Lockable+}++"""+The possible reasons that an issue or pull request was locked.+"""+enum LockReason {+  """+  The issue or pull request was locked because the conversation was off-topic.+  """+  OFF_TOPIC++  """+  The issue or pull request was locked because the conversation was resolved.+  """+  RESOLVED++  """+  The issue or pull request was locked because the conversation was spam.+  """+  SPAM++  """+  The issue or pull request was locked because the conversation was too heated.+  """+  TOO_HEATED+}++"""+An object that can be locked.+"""+interface Lockable {+  """+  Reason that the conversation was locked.+  """+  activeLockReason: LockReason++  """+  `true` if the object is locked+  """+  locked: Boolean!+}++"""+Represents a 'locked' event on a given issue or pull request.+"""+type LockedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Reason that the conversation was locked (optional).+  """+  lockReason: LockReason++  """+  Object that was locked.+  """+  lockable: Lockable!+}++"""+A placeholder user for attribution of imported data on GitHub.+"""+type Mannequin implements Actor & Node & UniformResourceLocatable {+  """+  A URL pointing to the GitHub App's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The mannequin's email on the source instance.+  """+  email: String+  id: ID!++  """+  The username of the actor.+  """+  login: String!++  """+  The HTML path to this resource.+  """+  resourcePath: URI!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The URL to this resource.+  """+  url: URI!+}++"""+Autogenerated input type of MarkPullRequestReadyForReview+"""+input MarkPullRequestReadyForReviewInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the pull request to be marked as ready for review.+  """+  pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])+}++"""+Autogenerated return type of MarkPullRequestReadyForReview+"""+type MarkPullRequestReadyForReviewPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The pull request that is ready for review.+  """+  pullRequest: PullRequest+}++"""+Represents a 'marked_as_duplicate' event on a given issue or pull request.+"""+type MarkedAsDuplicateEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!+}++"""+A public description of a Marketplace category.+"""+type MarketplaceCategory implements Node {+  """+  The category's description.+  """+  description: String++  """+  The technical description of how apps listed in this category work with GitHub.+  """+  howItWorks: String+  id: ID!++  """+  The category's name.+  """+  name: String!++  """+  How many Marketplace listings have this as their primary category.+  """+  primaryListingCount: Int!++  """+  The HTTP path for this Marketplace category.+  """+  resourcePath: URI!++  """+  How many Marketplace listings have this as their secondary category.+  """+  secondaryListingCount: Int!++  """+  The short name of the category used in its URL.+  """+  slug: String!++  """+  The HTTP URL for this Marketplace category.+  """+  url: URI!+}++"""+A listing in the GitHub integration marketplace.+"""+type MarketplaceListing implements Node {+  """+  The GitHub App this listing represents.+  """+  app: App++  """+  URL to the listing owner's company site.+  """+  companyUrl: URI++  """+  The HTTP path for configuring access to the listing's integration or OAuth app+  """+  configurationResourcePath: URI!++  """+  The HTTP URL for configuring access to the listing's integration or OAuth app+  """+  configurationUrl: URI!++  """+  URL to the listing's documentation.+  """+  documentationUrl: URI++  """+  The listing's detailed description.+  """+  extendedDescription: String++  """+  The listing's detailed description rendered to HTML.+  """+  extendedDescriptionHTML: HTML!++  """+  The listing's introductory description.+  """+  fullDescription: String!++  """+  The listing's introductory description rendered to HTML.+  """+  fullDescriptionHTML: HTML!++  """+  Does this listing have any plans with a free trial?+  """+  hasPublishedFreeTrialPlans: Boolean!++  """+  Does this listing have a terms of service link?+  """+  hasTermsOfService: Boolean!++  """+  A technical description of how this app works with GitHub.+  """+  howItWorks: String++  """+  The listing's technical description rendered to HTML.+  """+  howItWorksHTML: HTML!+  id: ID!++  """+  URL to install the product to the viewer's account or organization.+  """+  installationUrl: URI++  """+  Whether this listing's app has been installed for the current viewer+  """+  installedForViewer: Boolean!++  """+  Whether this listing has been removed from the Marketplace.+  """+  isArchived: Boolean!++  """+  Whether this listing is still an editable draft that has not been submitted+  for review and is not publicly visible in the Marketplace.+  """+  isDraft: Boolean!++  """+  Whether the product this listing represents is available as part of a paid plan.+  """+  isPaid: Boolean!++  """+  Whether this listing has been approved for display in the Marketplace.+  """+  isPublic: Boolean!++  """+  Whether this listing has been rejected by GitHub for display in the Marketplace.+  """+  isRejected: Boolean!++  """+  Whether this listing has been approved for unverified display in the Marketplace.+  """+  isUnverified: Boolean!++  """+  Whether this draft listing has been submitted for review for approval to be unverified in the Marketplace.+  """+  isUnverifiedPending: Boolean!++  """+  Whether this draft listing has been submitted for review from GitHub for approval to be verified in the Marketplace.+  """+  isVerificationPendingFromDraft: Boolean!++  """+  Whether this unverified listing has been submitted for review from GitHub for approval to be verified in the Marketplace.+  """+  isVerificationPendingFromUnverified: Boolean!++  """+  Whether this listing has been approved for verified display in the Marketplace.+  """+  isVerified: Boolean!++  """+  The hex color code, without the leading '#', for the logo background.+  """+  logoBackgroundColor: String!++  """+  URL for the listing's logo image.+  """+  logoUrl(+    """+    The size in pixels of the resulting square image.+    """+    size: Int = 400+  ): URI++  """+  The listing's full name.+  """+  name: String!++  """+  The listing's very short description without a trailing period or ampersands.+  """+  normalizedShortDescription: String!++  """+  URL to the listing's detailed pricing.+  """+  pricingUrl: URI++  """+  The category that best describes the listing.+  """+  primaryCategory: MarketplaceCategory!++  """+  URL to the listing's privacy policy, may return an empty string for listings that do not require a privacy policy URL.+  """+  privacyPolicyUrl: URI!++  """+  The HTTP path for the Marketplace listing.+  """+  resourcePath: URI!++  """+  The URLs for the listing's screenshots.+  """+  screenshotUrls: [String]!++  """+  An alternate category that describes the listing.+  """+  secondaryCategory: MarketplaceCategory++  """+  The listing's very short description.+  """+  shortDescription: String!++  """+  The short name of the listing used in its URL.+  """+  slug: String!++  """+  URL to the listing's status page.+  """+  statusUrl: URI++  """+  An email address for support for this listing's app.+  """+  supportEmail: String++  """+  Either a URL or an email address for support for this listing's app, may+  return an empty string for listings that do not require a support URL.+  """+  supportUrl: URI!++  """+  URL to the listing's terms of service.+  """+  termsOfServiceUrl: URI++  """+  The HTTP URL for the Marketplace listing.+  """+  url: URI!++  """+  Can the current viewer add plans for this Marketplace listing.+  """+  viewerCanAddPlans: Boolean!++  """+  Can the current viewer approve this Marketplace listing.+  """+  viewerCanApprove: Boolean!++  """+  Can the current viewer delist this Marketplace listing.+  """+  viewerCanDelist: Boolean!++  """+  Can the current viewer edit this Marketplace listing.+  """+  viewerCanEdit: Boolean!++  """+  Can the current viewer edit the primary and secondary category of this+  Marketplace listing.+  """+  viewerCanEditCategories: Boolean!++  """+  Can the current viewer edit the plans for this Marketplace listing.+  """+  viewerCanEditPlans: Boolean!++  """+  Can the current viewer return this Marketplace listing to draft state+  so it becomes editable again.+  """+  viewerCanRedraft: Boolean!++  """+  Can the current viewer reject this Marketplace listing by returning it to+  an editable draft state or rejecting it entirely.+  """+  viewerCanReject: Boolean!++  """+  Can the current viewer request this listing be reviewed for display in+  the Marketplace as verified.+  """+  viewerCanRequestApproval: Boolean!++  """+  Indicates whether the current user has an active subscription to this Marketplace listing.+  """+  viewerHasPurchased: Boolean!++  """+  Indicates if the current user has purchased a subscription to this Marketplace listing+  for all of the organizations the user owns.+  """+  viewerHasPurchasedForAllOrganizations: Boolean!++  """+  Does the current viewer role allow them to administer this Marketplace listing.+  """+  viewerIsListingAdmin: Boolean!+}++"""+Look up Marketplace Listings+"""+type MarketplaceListingConnection {+  """+  A list of edges.+  """+  edges: [MarketplaceListingEdge]++  """+  A list of nodes.+  """+  nodes: [MarketplaceListing]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type MarketplaceListingEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: MarketplaceListing+}++"""+Entities that have members who can set status messages.+"""+interface MemberStatusable {+  """+  Get the status messages members of this entity have set that are either public or visible only to the organization.+  """+  memberStatuses(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for user statuses returned from the connection.+    """+    orderBy: UserStatusOrder = { field: UPDATED_AT, direction: DESC }+  ): UserStatusConnection!+}++"""+Audit log entry for a members_can_delete_repos.clear event.+"""+type MembersCanDeleteReposClearAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a members_can_delete_repos.disable event.+"""+type MembersCanDeleteReposDisableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a members_can_delete_repos.enable event.+"""+type MembersCanDeleteReposEnableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Represents a 'mentioned' event on a given issue or pull request.+"""+type MentionedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!+}++"""+Autogenerated input type of MergeBranch+"""+input MergeBranchInput {+  """+  The email address to associate with this commit.+  """+  authorEmail: String++  """+  The name of the base branch that the provided head will be merged into.+  """+  base: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Message to use for the merge commit. If omitted, a default will be used.+  """+  commitMessage: String++  """+  The head to merge into the base branch. This can be a branch name or a commit GitObjectID.+  """+  head: String!++  """+  The Node ID of the Repository containing the base branch that will be modified.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of MergeBranch+"""+type MergeBranchPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The resulting merge Commit.+  """+  mergeCommit: Commit+}++"""+Autogenerated input type of MergePullRequest+"""+input MergePullRequestInput {+  """+  The email address to associate with this merge.+  """+  authorEmail: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Commit body to use for the merge commit; if omitted, a default message will be used+  """+  commitBody: String++  """+  Commit headline to use for the merge commit; if omitted, a default message will be used.+  """+  commitHeadline: String++  """+  OID that the pull request head ref must match to allow merge; if omitted, no check is performed.+  """+  expectedHeadOid: GitObjectID++  """+  The merge method to use. If omitted, defaults to 'MERGE'+  """+  mergeMethod: PullRequestMergeMethod = MERGE++  """+  ID of the pull request to be merged.+  """+  pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])+}++"""+Autogenerated return type of MergePullRequest+"""+type MergePullRequestPayload {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The pull request that was merged.+  """+  pullRequest: PullRequest+}++"""+Detailed status information about a pull request merge.+"""+enum MergeStateStatus {+  """+  The head ref is out of date.+  """+  BEHIND++  """+  The merge is blocked.+  """+  BLOCKED++  """+  Mergeable and passing commit status.+  """+  CLEAN++  """+  The merge commit cannot be cleanly created.+  """+  DIRTY++  """+  The merge is blocked due to the pull request being a draft.+  """+  DRAFT++  """+  Mergeable with passing commit status and pre-receive hooks.+  """+  HAS_HOOKS++  """+  The state cannot currently be determined.+  """+  UNKNOWN++  """+  Mergeable with non-passing commit status.+  """+  UNSTABLE+}++"""+Whether or not a PullRequest can be merged.+"""+enum MergeableState {+  """+  The pull request cannot be merged due to merge conflicts.+  """+  CONFLICTING++  """+  The pull request can be merged.+  """+  MERGEABLE++  """+  The mergeability of the pull request is still being calculated.+  """+  UNKNOWN+}++"""+Represents a 'merged' event on a given pull request.+"""+type MergedEvent implements Node & UniformResourceLocatable {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the commit associated with the `merge` event.+  """+  commit: Commit++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the Ref associated with the `merge` event.+  """+  mergeRef: Ref++  """+  Identifies the name of the Ref associated with the `merge` event.+  """+  mergeRefName: String!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  The HTTP path for this merged event.+  """+  resourcePath: URI!++  """+  The HTTP URL for this merged event.+  """+  url: URI!+}++"""+Represents a Milestone object on a given repository.+"""+type Milestone implements Closable & Node & UniformResourceLocatable {+  """+  `true` if the object is closed (definition of closed may depend on type)+  """+  closed: Boolean!++  """+  Identifies the date and time when the object was closed.+  """+  closedAt: DateTime++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the actor who created the milestone.+  """+  creator: Actor++  """+  Identifies the description of the milestone.+  """+  description: String++  """+  Identifies the due date of the milestone.+  """+  dueOn: DateTime+  id: ID!++  """+  Just for debugging on review-lab+  """+  issuePrioritiesDebug: String!++  """+  A list of issues associated with the milestone.+  """+  issues(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Filtering options for issues returned from the connection.+    """+    filterBy: IssueFilters++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for issues returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the issues by.+    """+    states: [IssueState!]+  ): IssueConnection!++  """+  Identifies the number of the milestone.+  """+  number: Int!++  """+  A list of pull requests associated with the milestone.+  """+  pullRequests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    The base ref name to filter the pull requests by.+    """+    baseRefName: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    The head ref name to filter the pull requests by.+    """+    headRefName: String++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pull requests returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the pull requests by.+    """+    states: [PullRequestState!]+  ): PullRequestConnection!++  """+  The repository associated with this milestone.+  """+  repository: Repository!++  """+  The HTTP path for this milestone+  """+  resourcePath: URI!++  """+  Identifies the state of the milestone.+  """+  state: MilestoneState!++  """+  Identifies the title of the milestone.+  """+  title: String!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this milestone+  """+  url: URI!+}++"""+The connection type for Milestone.+"""+type MilestoneConnection {+  """+  A list of edges.+  """+  edges: [MilestoneEdge]++  """+  A list of nodes.+  """+  nodes: [Milestone]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type MilestoneEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Milestone+}++"""+Types that can be inside a Milestone.+"""+union MilestoneItem = Issue | PullRequest++"""+Ordering options for milestone connections.+"""+input MilestoneOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order milestones by.+  """+  field: MilestoneOrderField!+}++"""+Properties by which milestone connections can be ordered.+"""+enum MilestoneOrderField {+  """+  Order milestones by when they were created.+  """+  CREATED_AT++  """+  Order milestones by when they are due.+  """+  DUE_DATE++  """+  Order milestones by their number.+  """+  NUMBER++  """+  Order milestones by when they were last updated.+  """+  UPDATED_AT+}++"""+The possible states of a milestone.+"""+enum MilestoneState {+  """+  A milestone that has been closed.+  """+  CLOSED++  """+  A milestone that is still open.+  """+  OPEN+}++"""+Represents a 'milestoned' event on a given issue or pull request.+"""+type MilestonedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the milestone title associated with the 'milestoned' event.+  """+  milestoneTitle: String!++  """+  Object referenced by event.+  """+  subject: MilestoneItem!+}++"""+Entities that can be minimized.+"""+interface Minimizable {+  """+  Returns whether or not a comment has been minimized.+  """+  isMinimized: Boolean!++  """+  Returns why the comment was minimized.+  """+  minimizedReason: String++  """+  Check if the current viewer can minimize this object.+  """+  viewerCanMinimize: Boolean!+}++"""+Autogenerated input type of MinimizeComment+"""+input MinimizeCommentInput {+  """+  The classification of comment+  """+  classifier: ReportedContentClassifiers!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the subject to modify.+  """+  subjectId: ID!+  @possibleTypes(+    concreteTypes: [+      "CommitComment"+      "GistComment"+      "IssueComment"+      "PullRequestReviewComment"+    ]+    abstractType: "Minimizable"+  )+}++"""+Autogenerated return type of MinimizeComment+"""+type MinimizeCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The comment that was minimized.+  """+  minimizedComment: Minimizable+}++"""+Autogenerated input type of MoveProjectCard+"""+input MoveProjectCardInput {+  """+  Place the new card after the card with this id. Pass null to place it at the top.+  """+  afterCardId: ID @possibleTypes(concreteTypes: ["ProjectCard"])++  """+  The id of the card to move.+  """+  cardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The id of the column to move it into.+  """+  columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])+}++"""+Autogenerated return type of MoveProjectCard+"""+type MoveProjectCardPayload {+  """+  The new edge of the moved card.+  """+  cardEdge: ProjectCardEdge++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of MoveProjectColumn+"""+input MoveProjectColumnInput {+  """+  Place the new column after the column with this id. Pass null to place it at the front.+  """+  afterColumnId: ID @possibleTypes(concreteTypes: ["ProjectColumn"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The id of the column to move.+  """+  columnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])+}++"""+Autogenerated return type of MoveProjectColumn+"""+type MoveProjectColumnPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new edge of the moved column.+  """+  columnEdge: ProjectColumnEdge+}++"""+Represents a 'moved_columns_in_project' event on a given issue or pull request.+"""+type MovedColumnsInProjectEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  Column name the issue or pull request was moved from.+  """+  previousProjectColumnName: String! @preview(toggledBy: "starfox-preview")++  """+  Project referenced by event.+  """+  project: Project @preview(toggledBy: "starfox-preview")++  """+  Project card referenced by this project event.+  """+  projectCard: ProjectCard @preview(toggledBy: "starfox-preview")++  """+  Column name the issue or pull request was moved to.+  """+  projectColumnName: String! @preview(toggledBy: "starfox-preview")+}++"""+The root query for implementing GraphQL mutations.+"""+type Mutation {+  """+  Accepts a pending invitation for a user to become an administrator of an enterprise.+  """+  acceptEnterpriseAdministratorInvitation(+    input: AcceptEnterpriseAdministratorInvitationInput!+  ): AcceptEnterpriseAdministratorInvitationPayload++  """+  Applies a suggested topic to the repository.+  """+  acceptTopicSuggestion(+    input: AcceptTopicSuggestionInput!+  ): AcceptTopicSuggestionPayload++  """+  Adds assignees to an assignable object.+  """+  addAssigneesToAssignable(+    input: AddAssigneesToAssignableInput!+  ): AddAssigneesToAssignablePayload++  """+  Adds a comment to an Issue or Pull Request.+  """+  addComment(input: AddCommentInput!): AddCommentPayload++  """+  Adds labels to a labelable object.+  """+  addLabelsToLabelable(+    input: AddLabelsToLabelableInput!+  ): AddLabelsToLabelablePayload++  """+  Adds a card to a ProjectColumn. Either `contentId` or `note` must be provided but **not** both.+  """+  addProjectCard(input: AddProjectCardInput!): AddProjectCardPayload++  """+  Adds a column to a Project.+  """+  addProjectColumn(input: AddProjectColumnInput!): AddProjectColumnPayload++  """+  Adds a review to a Pull Request.+  """+  addPullRequestReview(+    input: AddPullRequestReviewInput!+  ): AddPullRequestReviewPayload++  """+  Adds a comment to a review.+  """+  addPullRequestReviewComment(+    input: AddPullRequestReviewCommentInput!+  ): AddPullRequestReviewCommentPayload++  """+  Adds a new thread to a pending Pull Request Review.+  """+  addPullRequestReviewThread(+    input: AddPullRequestReviewThreadInput!+  ): AddPullRequestReviewThreadPayload++  """+  Adds a reaction to a subject.+  """+  addReaction(input: AddReactionInput!): AddReactionPayload++  """+  Adds a star to a Starrable.+  """+  addStar(input: AddStarInput!): AddStarPayload++  """+  Marks a repository as archived.+  """+  archiveRepository(input: ArchiveRepositoryInput!): ArchiveRepositoryPayload++  """+  Cancels a pending invitation for an administrator to join an enterprise.+  """+  cancelEnterpriseAdminInvitation(+    input: CancelEnterpriseAdminInvitationInput!+  ): CancelEnterpriseAdminInvitationPayload++  """+  Update your status on GitHub.+  """+  changeUserStatus(input: ChangeUserStatusInput!): ChangeUserStatusPayload++  """+  Clears all labels from a labelable object.+  """+  clearLabelsFromLabelable(+    input: ClearLabelsFromLabelableInput!+  ): ClearLabelsFromLabelablePayload++  """+  Creates a new project by cloning configuration from an existing project.+  """+  cloneProject(input: CloneProjectInput!): CloneProjectPayload++  """+  Create a new repository with the same files and directory structure as a template repository.+  """+  cloneTemplateRepository(+    input: CloneTemplateRepositoryInput!+  ): CloneTemplateRepositoryPayload++  """+  Close an issue.+  """+  closeIssue(input: CloseIssueInput!): CloseIssuePayload++  """+  Close a pull request.+  """+  closePullRequest(input: ClosePullRequestInput!): ClosePullRequestPayload++  """+  Convert a project note card to one associated with a newly created issue.+  """+  convertProjectCardNoteToIssue(+    input: ConvertProjectCardNoteToIssueInput!+  ): ConvertProjectCardNoteToIssuePayload++  """+  Create a new branch protection rule+  """+  createBranchProtectionRule(+    input: CreateBranchProtectionRuleInput!+  ): CreateBranchProtectionRulePayload++  """+  Create a check run.+  """+  createCheckRun(input: CreateCheckRunInput!): CreateCheckRunPayload+  @preview(toggledBy: "antiope-preview")++  """+  Create a check suite+  """+  createCheckSuite(input: CreateCheckSuiteInput!): CreateCheckSuitePayload+  @preview(toggledBy: "antiope-preview")++  """+  Create a content attachment.+  """+  createContentAttachment(+    input: CreateContentAttachmentInput!+  ): CreateContentAttachmentPayload @preview(toggledBy: "corsair-preview")++  """+  Creates a new deployment event.+  """+  createDeployment(input: CreateDeploymentInput!): CreateDeploymentPayload+  @preview(toggledBy: "flash-preview")++  """+  Create a deployment status.+  """+  createDeploymentStatus(+    input: CreateDeploymentStatusInput!+  ): CreateDeploymentStatusPayload @preview(toggledBy: "flash-preview")++  """+  Creates an organization as part of an enterprise account.+  """+  createEnterpriseOrganization(+    input: CreateEnterpriseOrganizationInput!+  ): CreateEnterpriseOrganizationPayload++  """+  Creates a new IP allow list entry.+  """+  createIpAllowListEntry(+    input: CreateIpAllowListEntryInput!+  ): CreateIpAllowListEntryPayload++  """+  Creates a new issue.+  """+  createIssue(input: CreateIssueInput!): CreateIssuePayload++  """+  Creates a new label.+  """+  createLabel(input: CreateLabelInput!): CreateLabelPayload+  @preview(toggledBy: "bane-preview")++  """+  Creates a new project.+  """+  createProject(input: CreateProjectInput!): CreateProjectPayload++  """+  Create a new pull request+  """+  createPullRequest(input: CreatePullRequestInput!): CreatePullRequestPayload++  """+  Create a new Git Ref.+  """+  createRef(input: CreateRefInput!): CreateRefPayload++  """+  Create a new repository.+  """+  createRepository(input: CreateRepositoryInput!): CreateRepositoryPayload++  """+  Creates a new team discussion.+  """+  createTeamDiscussion(+    input: CreateTeamDiscussionInput!+  ): CreateTeamDiscussionPayload++  """+  Creates a new team discussion comment.+  """+  createTeamDiscussionComment(+    input: CreateTeamDiscussionCommentInput!+  ): CreateTeamDiscussionCommentPayload++  """+  Rejects a suggested topic for the repository.+  """+  declineTopicSuggestion(+    input: DeclineTopicSuggestionInput!+  ): DeclineTopicSuggestionPayload++  """+  Delete a branch protection rule+  """+  deleteBranchProtectionRule(+    input: DeleteBranchProtectionRuleInput!+  ): DeleteBranchProtectionRulePayload++  """+  Deletes a deployment.+  """+  deleteDeployment(input: DeleteDeploymentInput!): DeleteDeploymentPayload++  """+  Deletes an IP allow list entry.+  """+  deleteIpAllowListEntry(+    input: DeleteIpAllowListEntryInput!+  ): DeleteIpAllowListEntryPayload++  """+  Deletes an Issue object.+  """+  deleteIssue(input: DeleteIssueInput!): DeleteIssuePayload++  """+  Deletes an IssueComment object.+  """+  deleteIssueComment(input: DeleteIssueCommentInput!): DeleteIssueCommentPayload++  """+  Deletes a label.+  """+  deleteLabel(input: DeleteLabelInput!): DeleteLabelPayload+  @preview(toggledBy: "bane-preview")++  """+  Delete a package version.+  """+  deletePackageVersion(+    input: DeletePackageVersionInput!+  ): DeletePackageVersionPayload @preview(toggledBy: "package-deletes-preview")++  """+  Deletes a project.+  """+  deleteProject(input: DeleteProjectInput!): DeleteProjectPayload++  """+  Deletes a project card.+  """+  deleteProjectCard(input: DeleteProjectCardInput!): DeleteProjectCardPayload++  """+  Deletes a project column.+  """+  deleteProjectColumn(+    input: DeleteProjectColumnInput!+  ): DeleteProjectColumnPayload++  """+  Deletes a pull request review.+  """+  deletePullRequestReview(+    input: DeletePullRequestReviewInput!+  ): DeletePullRequestReviewPayload++  """+  Deletes a pull request review comment.+  """+  deletePullRequestReviewComment(+    input: DeletePullRequestReviewCommentInput!+  ): DeletePullRequestReviewCommentPayload++  """+  Delete a Git Ref.+  """+  deleteRef(input: DeleteRefInput!): DeleteRefPayload++  """+  Deletes a team discussion.+  """+  deleteTeamDiscussion(+    input: DeleteTeamDiscussionInput!+  ): DeleteTeamDiscussionPayload++  """+  Deletes a team discussion comment.+  """+  deleteTeamDiscussionComment(+    input: DeleteTeamDiscussionCommentInput!+  ): DeleteTeamDiscussionCommentPayload++  """+  Dismisses an approved or rejected pull request review.+  """+  dismissPullRequestReview(+    input: DismissPullRequestReviewInput!+  ): DismissPullRequestReviewPayload++  """+  Follow a user.+  """+  followUser(input: FollowUserInput!): FollowUserPayload++  """+  Creates a new project by importing columns and a list of issues/PRs.+  """+  importProject(input: ImportProjectInput!): ImportProjectPayload+  @preview(toggledBy: "slothette-preview")++  """+  Invite someone to become an administrator of the enterprise.+  """+  inviteEnterpriseAdmin(+    input: InviteEnterpriseAdminInput!+  ): InviteEnterpriseAdminPayload++  """+  Creates a repository link for a project.+  """+  linkRepositoryToProject(+    input: LinkRepositoryToProjectInput!+  ): LinkRepositoryToProjectPayload++  """+  Lock a lockable object+  """+  lockLockable(input: LockLockableInput!): LockLockablePayload++  """+  Marks a pull request ready for review.+  """+  markPullRequestReadyForReview(+    input: MarkPullRequestReadyForReviewInput!+  ): MarkPullRequestReadyForReviewPayload++  """+  Merge a head into a branch.+  """+  mergeBranch(input: MergeBranchInput!): MergeBranchPayload++  """+  Merge a pull request.+  """+  mergePullRequest(input: MergePullRequestInput!): MergePullRequestPayload++  """+  Minimizes a comment on an Issue, Commit, Pull Request, or Gist+  """+  minimizeComment(input: MinimizeCommentInput!): MinimizeCommentPayload++  """+  Moves a project card to another place.+  """+  moveProjectCard(input: MoveProjectCardInput!): MoveProjectCardPayload++  """+  Moves a project column to another place.+  """+  moveProjectColumn(input: MoveProjectColumnInput!): MoveProjectColumnPayload++  """+  Pin an issue to a repository+  """+  pinIssue(input: PinIssueInput!): PinIssuePayload+  @preview(toggledBy: "elektra-preview")++  """+  Regenerates the identity provider recovery codes for an enterprise+  """+  regenerateEnterpriseIdentityProviderRecoveryCodes(+    input: RegenerateEnterpriseIdentityProviderRecoveryCodesInput!+  ): RegenerateEnterpriseIdentityProviderRecoveryCodesPayload++  """+  Removes assignees from an assignable object.+  """+  removeAssigneesFromAssignable(+    input: RemoveAssigneesFromAssignableInput!+  ): RemoveAssigneesFromAssignablePayload++  """+  Removes an administrator from the enterprise.+  """+  removeEnterpriseAdmin(+    input: RemoveEnterpriseAdminInput!+  ): RemoveEnterpriseAdminPayload++  """+  Removes the identity provider from an enterprise+  """+  removeEnterpriseIdentityProvider(+    input: RemoveEnterpriseIdentityProviderInput!+  ): RemoveEnterpriseIdentityProviderPayload++  """+  Removes an organization from the enterprise+  """+  removeEnterpriseOrganization(+    input: RemoveEnterpriseOrganizationInput!+  ): RemoveEnterpriseOrganizationPayload++  """+  Removes labels from a Labelable object.+  """+  removeLabelsFromLabelable(+    input: RemoveLabelsFromLabelableInput!+  ): RemoveLabelsFromLabelablePayload++  """+  Removes outside collaborator from all repositories in an organization.+  """+  removeOutsideCollaborator(+    input: RemoveOutsideCollaboratorInput!+  ): RemoveOutsideCollaboratorPayload++  """+  Removes a reaction from a subject.+  """+  removeReaction(input: RemoveReactionInput!): RemoveReactionPayload++  """+  Removes a star from a Starrable.+  """+  removeStar(input: RemoveStarInput!): RemoveStarPayload++  """+  Reopen a issue.+  """+  reopenIssue(input: ReopenIssueInput!): ReopenIssuePayload++  """+  Reopen a pull request.+  """+  reopenPullRequest(input: ReopenPullRequestInput!): ReopenPullRequestPayload++  """+  Set review requests on a pull request.+  """+  requestReviews(input: RequestReviewsInput!): RequestReviewsPayload++  """+  Rerequests an existing check suite.+  """+  rerequestCheckSuite(+    input: RerequestCheckSuiteInput!+  ): RerequestCheckSuitePayload @preview(toggledBy: "antiope-preview")++  """+  Marks a review thread as resolved.+  """+  resolveReviewThread(+    input: ResolveReviewThreadInput!+  ): ResolveReviewThreadPayload++  """+  Creates or updates the identity provider for an enterprise.+  """+  setEnterpriseIdentityProvider(+    input: SetEnterpriseIdentityProviderInput!+  ): SetEnterpriseIdentityProviderPayload++  """+  Submits a pending pull request review.+  """+  submitPullRequestReview(+    input: SubmitPullRequestReviewInput!+  ): SubmitPullRequestReviewPayload++  """+  Transfer an issue to a different repository+  """+  transferIssue(input: TransferIssueInput!): TransferIssuePayload++  """+  Unarchives a repository.+  """+  unarchiveRepository(+    input: UnarchiveRepositoryInput!+  ): UnarchiveRepositoryPayload++  """+  Unfollow a user.+  """+  unfollowUser(input: UnfollowUserInput!): UnfollowUserPayload++  """+  Deletes a repository link from a project.+  """+  unlinkRepositoryFromProject(+    input: UnlinkRepositoryFromProjectInput!+  ): UnlinkRepositoryFromProjectPayload++  """+  Unlock a lockable object+  """+  unlockLockable(input: UnlockLockableInput!): UnlockLockablePayload++  """+  Unmark an issue as a duplicate of another issue.+  """+  unmarkIssueAsDuplicate(+    input: UnmarkIssueAsDuplicateInput!+  ): UnmarkIssueAsDuplicatePayload++  """+  Unminimizes a comment on an Issue, Commit, Pull Request, or Gist+  """+  unminimizeComment(input: UnminimizeCommentInput!): UnminimizeCommentPayload++  """+  Unpin a pinned issue from a repository+  """+  unpinIssue(input: UnpinIssueInput!): UnpinIssuePayload+  @preview(toggledBy: "elektra-preview")++  """+  Marks a review thread as unresolved.+  """+  unresolveReviewThread(+    input: UnresolveReviewThreadInput!+  ): UnresolveReviewThreadPayload++  """+  Create a new branch protection rule+  """+  updateBranchProtectionRule(+    input: UpdateBranchProtectionRuleInput!+  ): UpdateBranchProtectionRulePayload++  """+  Update a check run+  """+  updateCheckRun(input: UpdateCheckRunInput!): UpdateCheckRunPayload+  @preview(toggledBy: "antiope-preview")++  """+  Modifies the settings of an existing check suite+  """+  updateCheckSuitePreferences(+    input: UpdateCheckSuitePreferencesInput!+  ): UpdateCheckSuitePreferencesPayload @preview(toggledBy: "antiope-preview")++  """+  Sets the action execution capability setting for an enterprise.+  """+  updateEnterpriseActionExecutionCapabilitySetting(+    input: UpdateEnterpriseActionExecutionCapabilitySettingInput!+  ): UpdateEnterpriseActionExecutionCapabilitySettingPayload++  """+  Updates the role of an enterprise administrator.+  """+  updateEnterpriseAdministratorRole(+    input: UpdateEnterpriseAdministratorRoleInput!+  ): UpdateEnterpriseAdministratorRolePayload++  """+  Sets whether private repository forks are enabled for an enterprise.+  """+  updateEnterpriseAllowPrivateRepositoryForkingSetting(+    input: UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput!+  ): UpdateEnterpriseAllowPrivateRepositoryForkingSettingPayload++  """+  Sets the default repository permission for organizations in an enterprise.+  """+  updateEnterpriseDefaultRepositoryPermissionSetting(+    input: UpdateEnterpriseDefaultRepositoryPermissionSettingInput!+  ): UpdateEnterpriseDefaultRepositoryPermissionSettingPayload++  """+  Sets whether organization members with admin permissions on a repository can change repository visibility.+  """+  updateEnterpriseMembersCanChangeRepositoryVisibilitySetting(+    input: UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput!+  ): UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingPayload++  """+  Sets the members can create repositories setting for an enterprise.+  """+  updateEnterpriseMembersCanCreateRepositoriesSetting(+    input: UpdateEnterpriseMembersCanCreateRepositoriesSettingInput!+  ): UpdateEnterpriseMembersCanCreateRepositoriesSettingPayload++  """+  Sets the members can delete issues setting for an enterprise.+  """+  updateEnterpriseMembersCanDeleteIssuesSetting(+    input: UpdateEnterpriseMembersCanDeleteIssuesSettingInput!+  ): UpdateEnterpriseMembersCanDeleteIssuesSettingPayload++  """+  Sets the members can delete repositories setting for an enterprise.+  """+  updateEnterpriseMembersCanDeleteRepositoriesSetting(+    input: UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput!+  ): UpdateEnterpriseMembersCanDeleteRepositoriesSettingPayload++  """+  Sets whether members can invite collaborators are enabled for an enterprise.+  """+  updateEnterpriseMembersCanInviteCollaboratorsSetting(+    input: UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput!+  ): UpdateEnterpriseMembersCanInviteCollaboratorsSettingPayload++  """+  Sets whether or not an organization admin can make purchases.+  """+  updateEnterpriseMembersCanMakePurchasesSetting(+    input: UpdateEnterpriseMembersCanMakePurchasesSettingInput!+  ): UpdateEnterpriseMembersCanMakePurchasesSettingPayload++  """+  Sets the members can update protected branches setting for an enterprise.+  """+  updateEnterpriseMembersCanUpdateProtectedBranchesSetting(+    input: UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput!+  ): UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingPayload++  """+  Sets the members can view dependency insights for an enterprise.+  """+  updateEnterpriseMembersCanViewDependencyInsightsSetting(+    input: UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput!+  ): UpdateEnterpriseMembersCanViewDependencyInsightsSettingPayload++  """+  Sets whether organization projects are enabled for an enterprise.+  """+  updateEnterpriseOrganizationProjectsSetting(+    input: UpdateEnterpriseOrganizationProjectsSettingInput!+  ): UpdateEnterpriseOrganizationProjectsSettingPayload++  """+  Updates an enterprise's profile.+  """+  updateEnterpriseProfile(+    input: UpdateEnterpriseProfileInput!+  ): UpdateEnterpriseProfilePayload++  """+  Sets whether repository projects are enabled for a enterprise.+  """+  updateEnterpriseRepositoryProjectsSetting(+    input: UpdateEnterpriseRepositoryProjectsSettingInput!+  ): UpdateEnterpriseRepositoryProjectsSettingPayload++  """+  Sets whether team discussions are enabled for an enterprise.+  """+  updateEnterpriseTeamDiscussionsSetting(+    input: UpdateEnterpriseTeamDiscussionsSettingInput!+  ): UpdateEnterpriseTeamDiscussionsSettingPayload++  """+  Sets whether two factor authentication is required for all users in an enterprise.+  """+  updateEnterpriseTwoFactorAuthenticationRequiredSetting(+    input: UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput!+  ): UpdateEnterpriseTwoFactorAuthenticationRequiredSettingPayload++  """+  Sets whether an IP allow list is enabled on an owner.+  """+  updateIpAllowListEnabledSetting(+    input: UpdateIpAllowListEnabledSettingInput!+  ): UpdateIpAllowListEnabledSettingPayload++  """+  Updates an IP allow list entry.+  """+  updateIpAllowListEntry(+    input: UpdateIpAllowListEntryInput!+  ): UpdateIpAllowListEntryPayload++  """+  Updates an Issue.+  """+  updateIssue(input: UpdateIssueInput!): UpdateIssuePayload++  """+  Updates an IssueComment object.+  """+  updateIssueComment(input: UpdateIssueCommentInput!): UpdateIssueCommentPayload++  """+  Updates an existing label.+  """+  updateLabel(input: UpdateLabelInput!): UpdateLabelPayload+  @preview(toggledBy: "bane-preview")++  """+  Updates an existing project.+  """+  updateProject(input: UpdateProjectInput!): UpdateProjectPayload++  """+  Updates an existing project card.+  """+  updateProjectCard(input: UpdateProjectCardInput!): UpdateProjectCardPayload++  """+  Updates an existing project column.+  """+  updateProjectColumn(+    input: UpdateProjectColumnInput!+  ): UpdateProjectColumnPayload++  """+  Update a pull request+  """+  updatePullRequest(input: UpdatePullRequestInput!): UpdatePullRequestPayload++  """+  Updates the body of a pull request review.+  """+  updatePullRequestReview(+    input: UpdatePullRequestReviewInput!+  ): UpdatePullRequestReviewPayload++  """+  Updates a pull request review comment.+  """+  updatePullRequestReviewComment(+    input: UpdatePullRequestReviewCommentInput!+  ): UpdatePullRequestReviewCommentPayload++  """+  Update a Git Ref.+  """+  updateRef(input: UpdateRefInput!): UpdateRefPayload++  """+  Creates, updates and/or deletes multiple refs in a repository.++  This mutation takes a list of `RefUpdate`s and performs these updates+  on the repository. All updates are performed atomically, meaning that+  if one of them is rejected, no other ref will be modified.++  `RefUpdate.beforeOid` specifies that the given reference needs to point+  to the given value before performing any updates. A value of+  `0000000000000000000000000000000000000000` can be used to verify that+  the references should not exist.++  `RefUpdate.afterOid` specifies the value that the given reference+  will point to after performing all updates. A value of+  `0000000000000000000000000000000000000000` can be used to delete a+  reference.++  If `RefUpdate.force` is set to `true`, a non-fast-forward updates+  for the given reference will be allowed.+  """+  updateRefs(input: UpdateRefsInput!): UpdateRefsPayload+  @preview(toggledBy: "update-refs-preview")++  """+  Update information about a repository.+  """+  updateRepository(input: UpdateRepositoryInput!): UpdateRepositoryPayload++  """+  Updates the state for subscribable subjects.+  """+  updateSubscription(input: UpdateSubscriptionInput!): UpdateSubscriptionPayload++  """+  Updates a team discussion.+  """+  updateTeamDiscussion(+    input: UpdateTeamDiscussionInput!+  ): UpdateTeamDiscussionPayload++  """+  Updates a discussion comment.+  """+  updateTeamDiscussionComment(+    input: UpdateTeamDiscussionCommentInput!+  ): UpdateTeamDiscussionCommentPayload++  """+  Updates team review assignment.+  """+  updateTeamReviewAssignment(+    input: UpdateTeamReviewAssignmentInput!+  ): UpdateTeamReviewAssignmentPayload @preview(toggledBy: "stone-crop-preview")++  """+  Replaces the repository's topics with the given topics.+  """+  updateTopics(input: UpdateTopicsInput!): UpdateTopicsPayload+}++"""+An object with an ID.+"""+interface Node {+  """+  ID of the object.+  """+  id: ID!+}++"""+Metadata for an audit entry with action oauth_application.*+"""+interface OauthApplicationAuditEntryData {+  """+  The name of the OAuth Application.+  """+  oauthApplicationName: String++  """+  The HTTP path for the OAuth Application+  """+  oauthApplicationResourcePath: URI++  """+  The HTTP URL for the OAuth Application+  """+  oauthApplicationUrl: URI+}++"""+Audit log entry for a oauth_application.create event.+"""+type OauthApplicationCreateAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The application URL of the OAuth Application.+  """+  applicationUrl: URI++  """+  The callback URL of the OAuth Application.+  """+  callbackUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The name of the OAuth Application.+  """+  oauthApplicationName: String++  """+  The HTTP path for the OAuth Application+  """+  oauthApplicationResourcePath: URI++  """+  The HTTP URL for the OAuth Application+  """+  oauthApplicationUrl: URI++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The rate limit of the OAuth Application.+  """+  rateLimit: Int++  """+  The state of the OAuth Application.+  """+  state: OauthApplicationCreateAuditEntryState++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The state of an OAuth Application when it was created.+"""+enum OauthApplicationCreateAuditEntryState {+  """+  The OAuth Application was active and allowed to have OAuth Accesses.+  """+  ACTIVE++  """+  The OAuth Application was in the process of being deleted.+  """+  PENDING_DELETION++  """+  The OAuth Application was suspended from generating OAuth Accesses due to abuse or security concerns.+  """+  SUSPENDED+}++"""+The corresponding operation type for the action+"""+enum OperationType {+  """+  An existing resource was accessed+  """+  ACCESS++  """+  A resource performed an authentication event+  """+  AUTHENTICATION++  """+  A new resource was created+  """+  CREATE++  """+  An existing resource was modified+  """+  MODIFY++  """+  An existing resource was removed+  """+  REMOVE++  """+  An existing resource was restored+  """+  RESTORE++  """+  An existing resource was transferred between multiple resources+  """+  TRANSFER+}++"""+Possible directions in which to order a list of items when provided an `orderBy` argument.+"""+enum OrderDirection {+  """+  Specifies an ascending order for a given `orderBy` argument.+  """+  ASC++  """+  Specifies a descending order for a given `orderBy` argument.+  """+  DESC+}++"""+Audit log entry for a org.add_billing_manager+"""+type OrgAddBillingManagerAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The email address used to invite a billing manager for the organization.+  """+  invitationEmail: String++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.add_member+"""+type OrgAddMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The permission level of the member added to the organization.+  """+  permission: OrgAddMemberAuditEntryPermission++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The permissions available to members on an Organization.+"""+enum OrgAddMemberAuditEntryPermission {+  """+  Can read, clone, push, and add collaborators to repositories.+  """+  ADMIN++  """+  Can read and clone repositories.+  """+  READ+}++"""+Audit log entry for a org.block_user+"""+type OrgBlockUserAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The blocked user.+  """+  blockedUser: User++  """+  The username of the blocked user.+  """+  blockedUserName: String++  """+  The HTTP path for the blocked user.+  """+  blockedUserResourcePath: URI++  """+  The HTTP URL for the blocked user.+  """+  blockedUserUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.config.disable_collaborators_only event.+"""+type OrgConfigDisableCollaboratorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.config.enable_collaborators_only event.+"""+type OrgConfigEnableCollaboratorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.create event.+"""+type OrgCreateAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The billing plan for the Organization.+  """+  billingPlan: OrgCreateAuditEntryBillingPlan++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The billing plans available for organizations.+"""+enum OrgCreateAuditEntryBillingPlan {+  """+  Team Plan+  """+  BUSINESS++  """+  Enterprise Cloud Plan+  """+  BUSINESS_PLUS++  """+  Free Plan+  """+  FREE++  """+  Tiered Per Seat Plan+  """+  TIERED_PER_SEAT++  """+  Legacy Unlimited Plan+  """+  UNLIMITED+}++"""+Audit log entry for a org.disable_oauth_app_restrictions event.+"""+type OrgDisableOauthAppRestrictionsAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.disable_saml event.+"""+type OrgDisableSamlAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The SAML provider's digest algorithm URL.+  """+  digestMethodUrl: URI+  id: ID!++  """+  The SAML provider's issuer URL.+  """+  issuerUrl: URI++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The SAML provider's signature algorithm URL.+  """+  signatureMethodUrl: URI++  """+  The SAML provider's single sign-on URL.+  """+  singleSignOnUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.disable_two_factor_requirement event.+"""+type OrgDisableTwoFactorRequirementAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.enable_oauth_app_restrictions event.+"""+type OrgEnableOauthAppRestrictionsAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.enable_saml event.+"""+type OrgEnableSamlAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The SAML provider's digest algorithm URL.+  """+  digestMethodUrl: URI+  id: ID!++  """+  The SAML provider's issuer URL.+  """+  issuerUrl: URI++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The SAML provider's signature algorithm URL.+  """+  signatureMethodUrl: URI++  """+  The SAML provider's single sign-on URL.+  """+  singleSignOnUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.enable_two_factor_requirement event.+"""+type OrgEnableTwoFactorRequirementAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.invite_member event.+"""+type OrgInviteMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The email address of the organization invitation.+  """+  email: String+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The organization invitation.+  """+  organizationInvitation: OrganizationInvitation++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.invite_to_business event.+"""+type OrgInviteToBusinessAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.oauth_app_access_approved event.+"""+type OrgOauthAppAccessApprovedAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The name of the OAuth Application.+  """+  oauthApplicationName: String++  """+  The HTTP path for the OAuth Application+  """+  oauthApplicationResourcePath: URI++  """+  The HTTP URL for the OAuth Application+  """+  oauthApplicationUrl: URI++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.oauth_app_access_denied event.+"""+type OrgOauthAppAccessDeniedAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The name of the OAuth Application.+  """+  oauthApplicationName: String++  """+  The HTTP path for the OAuth Application+  """+  oauthApplicationResourcePath: URI++  """+  The HTTP URL for the OAuth Application+  """+  oauthApplicationUrl: URI++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.oauth_app_access_requested event.+"""+type OrgOauthAppAccessRequestedAuditEntry implements AuditEntry & Node & OauthApplicationAuditEntryData & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The name of the OAuth Application.+  """+  oauthApplicationName: String++  """+  The HTTP path for the OAuth Application+  """+  oauthApplicationResourcePath: URI++  """+  The HTTP URL for the OAuth Application+  """+  oauthApplicationUrl: URI++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.remove_billing_manager event.+"""+type OrgRemoveBillingManagerAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The reason for the billing manager being removed.+  """+  reason: OrgRemoveBillingManagerAuditEntryReason++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The reason a billing manager was removed from an Organization.+"""+enum OrgRemoveBillingManagerAuditEntryReason {+  """+  SAML external identity missing+  """+  SAML_EXTERNAL_IDENTITY_MISSING++  """+  SAML SSO enforcement requires an external identity+  """+  SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY++  """+  The organization required 2FA of its billing managers and this user did not have 2FA enabled.+  """+  TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE+}++"""+Audit log entry for a org.remove_member event.+"""+type OrgRemoveMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The types of membership the member has with the organization.+  """+  membershipTypes: [OrgRemoveMemberAuditEntryMembershipType!]++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The reason for the member being removed.+  """+  reason: OrgRemoveMemberAuditEntryReason++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The type of membership a user has with an Organization.+"""+enum OrgRemoveMemberAuditEntryMembershipType {+  """+  Organization administrators have full access and can change several settings,+  including the names of repositories that belong to the Organization and Owners+  team membership. In addition, organization admins can delete the organization+  and all of its repositories.+  """+  ADMIN++  """+  A billing manager is a user who manages the billing settings for the Organization, such as updating payment information.+  """+  BILLING_MANAGER++  """+  A direct member is a user that is a member of the Organization.+  """+  DIRECT_MEMBER++  """+  An outside collaborator is a person who isn't explicitly a member of the+  Organization, but who has Read, Write, or Admin permissions to one or more+  repositories in the organization.+  """+  OUTSIDE_COLLABORATOR++  """+  An unaffiliated collaborator is a person who is not a member of the+  Organization and does not have access to any repositories in the Organization.+  """+  UNAFFILIATED+}++"""+The reason a member was removed from an Organization.+"""+enum OrgRemoveMemberAuditEntryReason {+  """+  SAML external identity missing+  """+  SAML_EXTERNAL_IDENTITY_MISSING++  """+  SAML SSO enforcement requires an external identity+  """+  SAML_SSO_ENFORCEMENT_REQUIRES_EXTERNAL_IDENTITY++  """+  User was removed from organization during account recovery+  """+  TWO_FACTOR_ACCOUNT_RECOVERY++  """+  The organization required 2FA of its billing managers and this user did not have 2FA enabled.+  """+  TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE++  """+  User account has been deleted+  """+  USER_ACCOUNT_DELETED+}++"""+Audit log entry for a org.remove_outside_collaborator event.+"""+type OrgRemoveOutsideCollaboratorAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The types of membership the outside collaborator has with the organization.+  """+  membershipTypes: [OrgRemoveOutsideCollaboratorAuditEntryMembershipType!]++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The reason for the outside collaborator being removed from the Organization.+  """+  reason: OrgRemoveOutsideCollaboratorAuditEntryReason++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The type of membership a user has with an Organization.+"""+enum OrgRemoveOutsideCollaboratorAuditEntryMembershipType {+  """+  A billing manager is a user who manages the billing settings for the Organization, such as updating payment information.+  """+  BILLING_MANAGER++  """+  An outside collaborator is a person who isn't explicitly a member of the+  Organization, but who has Read, Write, or Admin permissions to one or more+  repositories in the organization.+  """+  OUTSIDE_COLLABORATOR++  """+  An unaffiliated collaborator is a person who is not a member of the+  Organization and does not have access to any repositories in the organization.+  """+  UNAFFILIATED+}++"""+The reason an outside collaborator was removed from an Organization.+"""+enum OrgRemoveOutsideCollaboratorAuditEntryReason {+  """+  SAML external identity missing+  """+  SAML_EXTERNAL_IDENTITY_MISSING++  """+  The organization required 2FA of its billing managers and this user did not have 2FA enabled.+  """+  TWO_FACTOR_REQUIREMENT_NON_COMPLIANCE+}++"""+Audit log entry for a org.restore_member event.+"""+type OrgRestoreMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The number of custom email routings for the restored member.+  """+  restoredCustomEmailRoutingsCount: Int++  """+  The number of issue assignemnts for the restored member.+  """+  restoredIssueAssignmentsCount: Int++  """+  Restored organization membership objects.+  """+  restoredMemberships: [OrgRestoreMemberAuditEntryMembership!]++  """+  The number of restored memberships.+  """+  restoredMembershipsCount: Int++  """+  The number of repositories of the restored member.+  """+  restoredRepositoriesCount: Int++  """+  The number of starred repositories for the restored member.+  """+  restoredRepositoryStarsCount: Int++  """+  The number of watched repositories for the restored member.+  """+  restoredRepositoryWatchesCount: Int++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Types of memberships that can be restored for an Organization member.+"""+union OrgRestoreMemberAuditEntryMembership =+    OrgRestoreMemberMembershipOrganizationAuditEntryData+  | OrgRestoreMemberMembershipRepositoryAuditEntryData+  | OrgRestoreMemberMembershipTeamAuditEntryData++"""+Metadata for an organization membership for org.restore_member actions+"""+type OrgRestoreMemberMembershipOrganizationAuditEntryData implements OrganizationAuditEntryData {+  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI+}++"""+Metadata for a repository membership for org.restore_member actions+"""+type OrgRestoreMemberMembershipRepositoryAuditEntryData implements RepositoryAuditEntryData {+  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI+}++"""+Metadata for a team membership for org.restore_member actions+"""+type OrgRestoreMemberMembershipTeamAuditEntryData implements TeamAuditEntryData {+  """+  The team associated with the action+  """+  team: Team++  """+  The name of the team+  """+  teamName: String++  """+  The HTTP path for this team+  """+  teamResourcePath: URI++  """+  The HTTP URL for this team+  """+  teamUrl: URI+}++"""+Audit log entry for a org.unblock_user+"""+type OrgUnblockUserAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The user being unblocked by the organization.+  """+  blockedUser: User++  """+  The username of the blocked user.+  """+  blockedUserName: String++  """+  The HTTP path for the blocked user.+  """+  blockedUserResourcePath: URI++  """+  The HTTP URL for the blocked user.+  """+  blockedUserUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a org.update_default_repository_permission+"""+type OrgUpdateDefaultRepositoryPermissionAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The new default repository permission level for the organization.+  """+  permission: OrgUpdateDefaultRepositoryPermissionAuditEntryPermission++  """+  The former default repository permission level for the organization.+  """+  permissionWas: OrgUpdateDefaultRepositoryPermissionAuditEntryPermission++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The default permission a repository can have in an Organization.+"""+enum OrgUpdateDefaultRepositoryPermissionAuditEntryPermission {+  """+  Can read, clone, push, and add collaborators to repositories.+  """+  ADMIN++  """+  No default permission value.+  """+  NONE++  """+  Can read and clone repositories.+  """+  READ++  """+  Can read, clone and push to repositories.+  """+  WRITE+}++"""+Audit log entry for a org.update_member event.+"""+type OrgUpdateMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The new member permission level for the organization.+  """+  permission: OrgUpdateMemberAuditEntryPermission++  """+  The former member permission level for the organization.+  """+  permissionWas: OrgUpdateMemberAuditEntryPermission++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The permissions available to members on an Organization.+"""+enum OrgUpdateMemberAuditEntryPermission {+  """+  Can read, clone, push, and add collaborators to repositories.+  """+  ADMIN++  """+  Can read and clone repositories.+  """+  READ+}++"""+Audit log entry for a org.update_member_repository_creation_permission event.+"""+type OrgUpdateMemberRepositoryCreationPermissionAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  Can members create repositories in the organization.+  """+  canCreateRepositories: Boolean++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI++  """+  The permission for visibility level of repositories for this organization.+  """+  visibility: OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility+}++"""+The permissions available for repository creation on an Organization.+"""+enum OrgUpdateMemberRepositoryCreationPermissionAuditEntryVisibility {+  """+  All organization members are restricted from creating any repositories.+  """+  ALL++  """+  All organization members are restricted from creating internal repositories.+  """+  INTERNAL++  """+  All organization members are allowed to create any repositories.+  """+  NONE++  """+  All organization members are restricted from creating private repositories.+  """+  PRIVATE++  """+  All organization members are restricted from creating private or internal repositories.+  """+  PRIVATE_INTERNAL++  """+  All organization members are restricted from creating public repositories.+  """+  PUBLIC++  """+  All organization members are restricted from creating public or internal repositories.+  """+  PUBLIC_INTERNAL++  """+  All organization members are restricted from creating public or private repositories.+  """+  PUBLIC_PRIVATE+}++"""+Audit log entry for a org.update_member_repository_invitation_permission event.+"""+type OrgUpdateMemberRepositoryInvitationPermissionAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  Can outside collaborators be invited to repositories in the organization.+  """+  canInviteOutsideCollaboratorsToRepositories: Boolean++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+An account on GitHub, with one or more owners, that has repositories, members and teams.+"""+type Organization implements Actor & MemberStatusable & Node & PackageOwner & ProfileOwner & ProjectOwner & RepositoryOwner & Sponsorable & UniformResourceLocatable {+  """+  Determine if this repository owner has any items that can be pinned to their profile.+  """+  anyPinnableItems(+    """+    Filter to only a particular kind of pinnable item.+    """+    type: PinnableItemType+  ): Boolean!++  """+  Audit log entries of the organization+  """+  auditLog(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for the returned audit log entries.+    """+    orderBy: AuditLogOrder = { field: CREATED_AT, direction: DESC }++    """+    The query string to filter audit entries+    """+    query: String+  ): OrganizationAuditEntryConnection!++  """+  A URL pointing to the organization's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The organization's public profile description.+  """+  description: String++  """+  The organization's public profile description rendered to HTML.+  """+  descriptionHTML: String++  """+  The organization's public email.+  """+  email: String+  id: ID!++  """+  The setting value for whether the organization has an IP allow list enabled.+  """+  ipAllowListEnabledSetting: IpAllowListEnabledSettingValue!++  """+  The IP addresses that are allowed to access resources owned by the organization.+  """+  ipAllowListEntries(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for IP allow list entries returned.+    """+    orderBy: IpAllowListEntryOrder = { field: ALLOW_LIST_VALUE, direction: ASC }+  ): IpAllowListEntryConnection!++  """+  Whether the organization has verified its profile email and website.+  """+  isVerified: Boolean!++  """+  Showcases a selection of repositories and gists that the profile owner has+  either curated or that have been selected automatically based on popularity.+  """+  itemShowcase: ProfileItemShowcase!++  """+  The organization's public profile location.+  """+  location: String++  """+  The organization's login name.+  """+  login: String!++  """+  Get the status messages members of this entity have set that are either public or visible only to the organization.+  """+  memberStatuses(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for user statuses returned from the connection.+    """+    orderBy: UserStatusOrder = { field: UPDATED_AT, direction: DESC }+  ): UserStatusConnection!++  """+  A list of users who are members of this organization.+  """+  membersWithRole(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): OrganizationMemberConnection!++  """+  The organization's public profile name.+  """+  name: String++  """+  The HTTP path creating a new team+  """+  newTeamResourcePath: URI!++  """+  The HTTP URL creating a new team+  """+  newTeamUrl: URI!++  """+  The billing email for the organization.+  """+  organizationBillingEmail: String++  """+  A list of packages under the owner.+  """+  packages(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Find packages by their names.+    """+    names: [String]++    """+    Ordering of the returned packages.+    """+    orderBy: PackageOrder = { field: CREATED_AT, direction: DESC }++    """+    Filter registry package by type.+    """+    packageType: PackageType++    """+    Find packages in a repository by ID.+    """+    repositoryId: ID+  ): PackageConnection!++  """+  A list of users who have been invited to join this organization.+  """+  pendingMembers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserConnection!++  """+  A list of repositories and gists this profile owner can pin to their profile.+  """+  pinnableItems(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter the types of pinnable items that are returned.+    """+    types: [PinnableItemType!]+  ): PinnableItemConnection!++  """+  A list of repositories and gists this profile owner has pinned to their profile+  """+  pinnedItems(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter the types of pinned items that are returned.+    """+    types: [PinnableItemType!]+  ): PinnableItemConnection!++  """+  Returns how many more items this profile owner can pin to their profile.+  """+  pinnedItemsRemaining: Int!++  """+  Find project by number.+  """+  project(+    """+    The project number to find.+    """+    number: Int!+  ): Project++  """+  A list of projects under the owner.+  """+  projects(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for projects returned from the connection+    """+    orderBy: ProjectOrder++    """+    Query to search projects by, currently only searching by name.+    """+    search: String++    """+    A list of states to filter the projects by.+    """+    states: [ProjectState!]+  ): ProjectConnection!++  """+  The HTTP path listing organization's projects+  """+  projectsResourcePath: URI!++  """+  The HTTP URL listing organization's projects+  """+  projectsUrl: URI!++  """+  A list of repositories that the user owns.+  """+  repositories(+    """+    Array of viewer's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    current viewer owns.+    """+    affiliations: [RepositoryAffiliation]++    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    If non-null, filters repositories according to whether they are forks of another repository+    """+    isFork: Boolean++    """+    If non-null, filters repositories according to whether they have been locked+    """+    isLocked: Boolean++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories returned from the connection+    """+    orderBy: RepositoryOrder++    """+    Array of owner's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    organization or user being viewed owns.+    """+    ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]++    """+    If non-null, filters repositories according to privacy+    """+    privacy: RepositoryPrivacy+  ): RepositoryConnection!++  """+  Find Repository.+  """+  repository(+    """+    Name of Repository to find.+    """+    name: String!+  ): Repository++  """+  When true the organization requires all members, billing managers, and outside+  collaborators to enable two-factor authentication.+  """+  requiresTwoFactorAuthentication: Boolean++  """+  The HTTP path for this organization.+  """+  resourcePath: URI!++  """+  The Organization's SAML identity providers+  """+  samlIdentityProvider: OrganizationIdentityProvider++  """+  The GitHub Sponsors listing for this user.+  """+  sponsorsListing: SponsorsListing++  """+  This object's sponsorships as the maintainer.+  """+  sponsorshipsAsMaintainer(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Whether or not to include private sponsorships in the result set+    """+    includePrivate: Boolean = false++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for sponsorships returned from this connection. If left+    blank, the sponsorships will be ordered based on relevancy to the viewer.+    """+    orderBy: SponsorshipOrder+  ): SponsorshipConnection!++  """+  This object's sponsorships as the sponsor.+  """+  sponsorshipsAsSponsor(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for sponsorships returned from this connection. If left+    blank, the sponsorships will be ordered based on relevancy to the viewer.+    """+    orderBy: SponsorshipOrder+  ): SponsorshipConnection!++  """+  Find an organization's team by its slug.+  """+  team(+    """+    The name or slug of the team to find.+    """+    slug: String!+  ): Team++  """+  A list of teams in this organization.+  """+  teams(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    If true, filters teams that are mapped to an LDAP Group (Enterprise only)+    """+    ldapMapped: Boolean++    """+    Ordering options for teams returned from the connection+    """+    orderBy: TeamOrder++    """+    If non-null, filters teams according to privacy+    """+    privacy: TeamPrivacy++    """+    If non-null, filters teams with query on team name and team slug+    """+    query: String++    """+    If non-null, filters teams according to whether the viewer is an admin or member on team+    """+    role: TeamRole++    """+    If true, restrict to only root teams+    """+    rootTeamsOnly: Boolean = false++    """+    User logins to filter by+    """+    userLogins: [String!]+  ): TeamConnection!++  """+  The HTTP path listing organization's teams+  """+  teamsResourcePath: URI!++  """+  The HTTP URL listing organization's teams+  """+  teamsUrl: URI!++  """+  The organization's Twitter username.+  """+  twitterUsername: String++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this organization.+  """+  url: URI!++  """+  Organization is adminable by the viewer.+  """+  viewerCanAdminister: Boolean!++  """+  Can the viewer pin repositories and gists to the profile?+  """+  viewerCanChangePinnedItems: Boolean!++  """+  Can the current viewer create new projects on this owner.+  """+  viewerCanCreateProjects: Boolean!++  """+  Viewer can create repositories on this organization+  """+  viewerCanCreateRepositories: Boolean!++  """+  Viewer can create teams on this organization.+  """+  viewerCanCreateTeams: Boolean!++  """+  Viewer is an active member of this organization.+  """+  viewerIsAMember: Boolean!++  """+  The organization's public profile URL.+  """+  websiteUrl: URI+}++"""+An audit entry in an organization audit log.+"""+union OrganizationAuditEntry =+    MembersCanDeleteReposClearAuditEntry+  | MembersCanDeleteReposDisableAuditEntry+  | MembersCanDeleteReposEnableAuditEntry+  | OauthApplicationCreateAuditEntry+  | OrgAddBillingManagerAuditEntry+  | OrgAddMemberAuditEntry+  | OrgBlockUserAuditEntry+  | OrgConfigDisableCollaboratorsOnlyAuditEntry+  | OrgConfigEnableCollaboratorsOnlyAuditEntry+  | OrgCreateAuditEntry+  | OrgDisableOauthAppRestrictionsAuditEntry+  | OrgDisableSamlAuditEntry+  | OrgDisableTwoFactorRequirementAuditEntry+  | OrgEnableOauthAppRestrictionsAuditEntry+  | OrgEnableSamlAuditEntry+  | OrgEnableTwoFactorRequirementAuditEntry+  | OrgInviteMemberAuditEntry+  | OrgInviteToBusinessAuditEntry+  | OrgOauthAppAccessApprovedAuditEntry+  | OrgOauthAppAccessDeniedAuditEntry+  | OrgOauthAppAccessRequestedAuditEntry+  | OrgRemoveBillingManagerAuditEntry+  | OrgRemoveMemberAuditEntry+  | OrgRemoveOutsideCollaboratorAuditEntry+  | OrgRestoreMemberAuditEntry+  | OrgUnblockUserAuditEntry+  | OrgUpdateDefaultRepositoryPermissionAuditEntry+  | OrgUpdateMemberAuditEntry+  | OrgUpdateMemberRepositoryCreationPermissionAuditEntry+  | OrgUpdateMemberRepositoryInvitationPermissionAuditEntry+  | PrivateRepositoryForkingDisableAuditEntry+  | PrivateRepositoryForkingEnableAuditEntry+  | RepoAccessAuditEntry+  | RepoAddMemberAuditEntry+  | RepoAddTopicAuditEntry+  | RepoArchivedAuditEntry+  | RepoChangeMergeSettingAuditEntry+  | RepoConfigDisableAnonymousGitAccessAuditEntry+  | RepoConfigDisableCollaboratorsOnlyAuditEntry+  | RepoConfigDisableContributorsOnlyAuditEntry+  | RepoConfigDisableSockpuppetDisallowedAuditEntry+  | RepoConfigEnableAnonymousGitAccessAuditEntry+  | RepoConfigEnableCollaboratorsOnlyAuditEntry+  | RepoConfigEnableContributorsOnlyAuditEntry+  | RepoConfigEnableSockpuppetDisallowedAuditEntry+  | RepoConfigLockAnonymousGitAccessAuditEntry+  | RepoConfigUnlockAnonymousGitAccessAuditEntry+  | RepoCreateAuditEntry+  | RepoDestroyAuditEntry+  | RepoRemoveMemberAuditEntry+  | RepoRemoveTopicAuditEntry+  | RepositoryVisibilityChangeDisableAuditEntry+  | RepositoryVisibilityChangeEnableAuditEntry+  | TeamAddMemberAuditEntry+  | TeamAddRepositoryAuditEntry+  | TeamChangeParentTeamAuditEntry+  | TeamRemoveMemberAuditEntry+  | TeamRemoveRepositoryAuditEntry++"""+The connection type for OrganizationAuditEntry.+"""+type OrganizationAuditEntryConnection {+  """+  A list of edges.+  """+  edges: [OrganizationAuditEntryEdge]++  """+  A list of nodes.+  """+  nodes: [OrganizationAuditEntry]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Metadata for an audit entry with action org.*+"""+interface OrganizationAuditEntryData {+  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI+}++"""+An edge in a connection.+"""+type OrganizationAuditEntryEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: OrganizationAuditEntry+}++"""+The connection type for Organization.+"""+type OrganizationConnection {+  """+  A list of edges.+  """+  edges: [OrganizationEdge]++  """+  A list of nodes.+  """+  nodes: [Organization]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type OrganizationEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Organization+}++"""+An Identity Provider configured to provision SAML and SCIM identities for Organizations+"""+type OrganizationIdentityProvider implements Node {+  """+  The digest algorithm used to sign SAML requests for the Identity Provider.+  """+  digestMethod: URI++  """+  External Identities provisioned by this Identity Provider+  """+  externalIdentities(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ExternalIdentityConnection!+  id: ID!++  """+  The x509 certificate used by the Identity Provder to sign assertions and responses.+  """+  idpCertificate: X509Certificate++  """+  The Issuer Entity ID for the SAML Identity Provider+  """+  issuer: String++  """+  Organization this Identity Provider belongs to+  """+  organization: Organization++  """+  The signature algorithm used to sign SAML requests for the Identity Provider.+  """+  signatureMethod: URI++  """+  The URL endpoint for the Identity Provider's SAML SSO.+  """+  ssoUrl: URI+}++"""+An Invitation for a user to an organization.+"""+type OrganizationInvitation implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The email address of the user invited to the organization.+  """+  email: String+  id: ID!++  """+  The type of invitation that was sent (e.g. email, user).+  """+  invitationType: OrganizationInvitationType!++  """+  The user who was invited to the organization.+  """+  invitee: User++  """+  The user who created the invitation.+  """+  inviter: User!++  """+  The organization the invite is for+  """+  organization: Organization!++  """+  The user's pending role in the organization (e.g. member, owner).+  """+  role: OrganizationInvitationRole!+}++"""+The connection type for OrganizationInvitation.+"""+type OrganizationInvitationConnection {+  """+  A list of edges.+  """+  edges: [OrganizationInvitationEdge]++  """+  A list of nodes.+  """+  nodes: [OrganizationInvitation]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type OrganizationInvitationEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: OrganizationInvitation+}++"""+The possible organization invitation roles.+"""+enum OrganizationInvitationRole {+  """+  The user is invited to be an admin of the organization.+  """+  ADMIN++  """+  The user is invited to be a billing manager of the organization.+  """+  BILLING_MANAGER++  """+  The user is invited to be a direct member of the organization.+  """+  DIRECT_MEMBER++  """+  The user's previous role will be reinstated.+  """+  REINSTATE+}++"""+The possible organization invitation types.+"""+enum OrganizationInvitationType {+  """+  The invitation was to an email address.+  """+  EMAIL++  """+  The invitation was to an existing user.+  """+  USER+}++"""+The connection type for User.+"""+type OrganizationMemberConnection {+  """+  A list of edges.+  """+  edges: [OrganizationMemberEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Represents a user within an organization.+"""+type OrganizationMemberEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  Whether the organization member has two factor enabled or not. Returns null if information is not available to viewer.+  """+  hasTwoFactorEnabled: Boolean++  """+  The item at the end of the edge.+  """+  node: User++  """+  The role this user has in the organization.+  """+  role: OrganizationMemberRole+}++"""+The possible roles within an organization for its members.+"""+enum OrganizationMemberRole {+  """+  The user is an administrator of the organization.+  """+  ADMIN++  """+  The user is a member of the organization.+  """+  MEMBER+}++"""+The possible values for the members can create repositories setting on an organization.+"""+enum OrganizationMembersCanCreateRepositoriesSettingValue {+  """+  Members will be able to create public and private repositories.+  """+  ALL++  """+  Members will not be able to create public or private repositories.+  """+  DISABLED++  """+  Members will be able to create only private repositories.+  """+  PRIVATE+}++"""+Ordering options for organization connections.+"""+input OrganizationOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order organizations by.+  """+  field: OrganizationOrderField!+}++"""+Properties by which organization connections can be ordered.+"""+enum OrganizationOrderField {+  """+  Order organizations by creation time+  """+  CREATED_AT++  """+  Order organizations by login+  """+  LOGIN+}++"""+An organization teams hovercard context+"""+type OrganizationTeamsHovercardContext implements HovercardContext {+  """+  A string describing this context+  """+  message: String!++  """+  An octicon to accompany this context+  """+  octicon: String!++  """+  Teams in this organization the user is a member of that are relevant+  """+  relevantTeams(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): TeamConnection!++  """+  The path for the full team list for this user+  """+  teamsResourcePath: URI!++  """+  The URL for the full team list for this user+  """+  teamsUrl: URI!++  """+  The total number of teams the user is on in the organization+  """+  totalTeamCount: Int!+}++"""+An organization list hovercard context+"""+type OrganizationsHovercardContext implements HovercardContext {+  """+  A string describing this context+  """+  message: String!++  """+  An octicon to accompany this context+  """+  octicon: String!++  """+  Organizations this user is a member of that are relevant+  """+  relevantOrganizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): OrganizationConnection!++  """+  The total number of organizations this user is in+  """+  totalOrganizationCount: Int!+}++"""+Information for an uploaded package.+"""+type Package implements Node {+  id: ID!++  """+  Find the latest version for the package.+  """+  latestVersion: PackageVersion++  """+  Identifies the name of the package.+  """+  name: String!++  """+  Identifies the type of the package.+  """+  packageType: PackageType!++  """+  The repository this package belongs to.+  """+  repository: Repository++  """+  Statistics about package activity.+  """+  statistics: PackageStatistics++  """+  Find package version by version string.+  """+  version(+    """+    The package version.+    """+    version: String!+  ): PackageVersion++  """+  list of versions for this package+  """+  versions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering of the returned packages.+    """+    orderBy: PackageVersionOrder = { field: CREATED_AT, direction: DESC }+  ): PackageVersionConnection!+}++"""+The connection type for Package.+"""+type PackageConnection {+  """+  A list of edges.+  """+  edges: [PackageEdge]++  """+  A list of nodes.+  """+  nodes: [Package]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PackageEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Package+}++"""+A file in a package version.+"""+type PackageFile implements Node {+  id: ID!++  """+  MD5 hash of the file.+  """+  md5: String++  """+  Name of the file.+  """+  name: String!++  """+  The package version this file belongs to.+  """+  packageVersion: PackageVersion++  """+  SHA1 hash of the file.+  """+  sha1: String++  """+  SHA256 hash of the file.+  """+  sha256: String++  """+  Size of the file in bytes.+  """+  size: Int++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  URL to download the asset.+  """+  url: URI+}++"""+The connection type for PackageFile.+"""+type PackageFileConnection {+  """+  A list of edges.+  """+  edges: [PackageFileEdge]++  """+  A list of nodes.+  """+  nodes: [PackageFile]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PackageFileEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PackageFile+}++"""+Ways in which lists of package files can be ordered upon return.+"""+input PackageFileOrder {+  """+  The direction in which to order package files by the specified field.+  """+  direction: OrderDirection++  """+  The field in which to order package files by.+  """+  field: PackageFileOrderField+}++"""+Properties by which package file connections can be ordered.+"""+enum PackageFileOrderField {+  """+  Order package files by creation time+  """+  CREATED_AT+}++"""+Ways in which lists of packages can be ordered upon return.+"""+input PackageOrder {+  """+  The direction in which to order packages by the specified field.+  """+  direction: OrderDirection++  """+  The field in which to order packages by.+  """+  field: PackageOrderField+}++"""+Properties by which package connections can be ordered.+"""+enum PackageOrderField {+  """+  Order packages by creation time+  """+  CREATED_AT+}++"""+Represents an owner of a package.+"""+interface PackageOwner {+  id: ID!++  """+  A list of packages under the owner.+  """+  packages(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Find packages by their names.+    """+    names: [String]++    """+    Ordering of the returned packages.+    """+    orderBy: PackageOrder = { field: CREATED_AT, direction: DESC }++    """+    Filter registry package by type.+    """+    packageType: PackageType++    """+    Find packages in a repository by ID.+    """+    repositoryId: ID+  ): PackageConnection!+}++"""+Represents a object that contains package activity statistics such as downloads.+"""+type PackageStatistics {+  """+  Number of times the package was downloaded since it was created.+  """+  downloadsTotalCount: Int!+}++"""+A version tag contains the mapping between a tag name and a version.+"""+type PackageTag implements Node {+  id: ID!++  """+  Identifies the tag name of the version.+  """+  name: String!++  """+  Version that the tag is associated with.+  """+  version: PackageVersion+}++"""+The possible types of a package.+"""+enum PackageType {+  """+  A debian package.+  """+  DEBIAN++  """+  A docker image.+  """+  DOCKER++  """+  A maven package.+  """+  MAVEN++  """+  An npm package.+  """+  NPM++  """+  A nuget package.+  """+  NUGET++  """+  A python package.+  """+  PYPI++  """+  A rubygems package.+  """+  RUBYGEMS+}++"""+Information about a specific package version.+"""+type PackageVersion implements Node {+  """+  List of files associated with this package version+  """+  files(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering of the returned package files.+    """+    orderBy: PackageFileOrder = { field: CREATED_AT, direction: ASC }+  ): PackageFileConnection!+  id: ID!++  """+  The package associated with this version.+  """+  package: Package++  """+  The platform this version was built for.+  """+  platform: String++  """+  Whether or not this version is a pre-release.+  """+  preRelease: Boolean!++  """+  The README of this package version.+  """+  readme: String++  """+  The release associated with this package version.+  """+  release: Release++  """+  Statistics about package activity.+  """+  statistics: PackageVersionStatistics++  """+  The package version summary.+  """+  summary: String++  """+  The version string.+  """+  version: String!+}++"""+The connection type for PackageVersion.+"""+type PackageVersionConnection {+  """+  A list of edges.+  """+  edges: [PackageVersionEdge]++  """+  A list of nodes.+  """+  nodes: [PackageVersion]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PackageVersionEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PackageVersion+}++"""+Ways in which lists of package versions can be ordered upon return.+"""+input PackageVersionOrder {+  """+  The direction in which to order package versions by the specified field.+  """+  direction: OrderDirection++  """+  The field in which to order package versions by.+  """+  field: PackageVersionOrderField+}++"""+Properties by which package version connections can be ordered.+"""+enum PackageVersionOrderField {+  """+  Order package versions by creation time+  """+  CREATED_AT+}++"""+Represents a object that contains package version activity statistics such as downloads.+"""+type PackageVersionStatistics {+  """+  Number of times the package was downloaded since it was created.+  """+  downloadsTotalCount: Int!+}++"""+Information about pagination in a connection.+"""+type PageInfo {+  """+  When paginating forwards, the cursor to continue.+  """+  endCursor: String++  """+  When paginating forwards, are there more items?+  """+  hasNextPage: Boolean!++  """+  When paginating backwards, are there more items?+  """+  hasPreviousPage: Boolean!++  """+  When paginating backwards, the cursor to continue.+  """+  startCursor: String+}++"""+Types that can grant permissions on a repository to a user+"""+union PermissionGranter = Organization | Repository | Team++"""+A level of permission and source for a user's access to a repository.+"""+type PermissionSource {+  """+  The organization the repository belongs to.+  """+  organization: Organization!++  """+  The level of access this source has granted to the user.+  """+  permission: DefaultRepositoryPermissionField!++  """+  The source of this permission.+  """+  source: PermissionGranter!+}++"""+Autogenerated input type of PinIssue+"""+input PinIssueInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the issue to be pinned+  """+  issueId: ID! @possibleTypes(concreteTypes: ["Issue"])+}++"""+Autogenerated return type of PinIssue+"""+type PinIssuePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The issue that was pinned+  """+  issue: Issue+}++"""+Types that can be pinned to a profile page.+"""+union PinnableItem = Gist | Repository++"""+The connection type for PinnableItem.+"""+type PinnableItemConnection {+  """+  A list of edges.+  """+  edges: [PinnableItemEdge]++  """+  A list of nodes.+  """+  nodes: [PinnableItem]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PinnableItemEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PinnableItem+}++"""+Represents items that can be pinned to a profile page or dashboard.+"""+enum PinnableItemType {+  """+  A gist.+  """+  GIST++  """+  An issue.+  """+  ISSUE++  """+  An organization.+  """+  ORGANIZATION++  """+  A project.+  """+  PROJECT++  """+  A pull request.+  """+  PULL_REQUEST++  """+  A repository.+  """+  REPOSITORY++  """+  A team.+  """+  TEAM++  """+  A user.+  """+  USER+}++"""+Represents a 'pinned' event on a given issue or pull request.+"""+type PinnedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the issue associated with the event.+  """+  issue: Issue!+}++"""+A Pinned Issue is a issue pinned to a repository's index page.+"""+type PinnedIssue implements Node @preview(toggledBy: "elektra-preview") {+  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  The issue that was pinned.+  """+  issue: Issue!++  """+  The actor that pinned this issue.+  """+  pinnedBy: Actor!++  """+  The repository that this issue was pinned to.+  """+  repository: Repository!+}++"""+The connection type for PinnedIssue.+"""+type PinnedIssueConnection @preview(toggledBy: "elektra-preview") {+  """+  A list of edges.+  """+  edges: [PinnedIssueEdge]++  """+  A list of nodes.+  """+  nodes: [PinnedIssue]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PinnedIssueEdge @preview(toggledBy: "elektra-preview") {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PinnedIssue+}++"""+An ISO-8601 encoded UTC date string with millisecond precison.+"""+scalar PreciseDateTime++"""+Audit log entry for a private_repository_forking.disable event.+"""+type PrivateRepositoryForkingDisableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a private_repository_forking.enable event.+"""+type PrivateRepositoryForkingEnableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+A curatable list of repositories relating to a repository owner, which defaults+to showing the most popular repositories they own.+"""+type ProfileItemShowcase {+  """+  Whether or not the owner has pinned any repositories or gists.+  """+  hasPinnedItems: Boolean!++  """+  The repositories and gists in the showcase. If the profile owner has any+  pinned items, those will be returned. Otherwise, the profile owner's popular+  repositories will be returned.+  """+  items(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): PinnableItemConnection!+}++"""+Represents any entity on GitHub that has a profile page.+"""+interface ProfileOwner {+  """+  Determine if this repository owner has any items that can be pinned to their profile.+  """+  anyPinnableItems(+    """+    Filter to only a particular kind of pinnable item.+    """+    type: PinnableItemType+  ): Boolean!++  """+  The public profile email.+  """+  email: String+  id: ID!++  """+  Showcases a selection of repositories and gists that the profile owner has+  either curated or that have been selected automatically based on popularity.+  """+  itemShowcase: ProfileItemShowcase!++  """+  The public profile location.+  """+  location: String++  """+  The username used to login.+  """+  login: String!++  """+  The public profile name.+  """+  name: String++  """+  A list of repositories and gists this profile owner can pin to their profile.+  """+  pinnableItems(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter the types of pinnable items that are returned.+    """+    types: [PinnableItemType!]+  ): PinnableItemConnection!++  """+  A list of repositories and gists this profile owner has pinned to their profile+  """+  pinnedItems(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter the types of pinned items that are returned.+    """+    types: [PinnableItemType!]+  ): PinnableItemConnection!++  """+  Returns how many more items this profile owner can pin to their profile.+  """+  pinnedItemsRemaining: Int!++  """+  Can the viewer pin repositories and gists to the profile?+  """+  viewerCanChangePinnedItems: Boolean!++  """+  The public profile website URL.+  """+  websiteUrl: URI+}++"""+Projects manage issues, pull requests and notes within a project owner.+"""+type Project implements Closable & Node & Updatable {+  """+  The project's description body.+  """+  body: String++  """+  The projects description body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  `true` if the object is closed (definition of closed may depend on type)+  """+  closed: Boolean!++  """+  Identifies the date and time when the object was closed.+  """+  closedAt: DateTime++  """+  List of columns in the project+  """+  columns(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ProjectColumnConnection!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The actor who originally created the project.+  """+  creator: Actor++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  The project's name.+  """+  name: String!++  """+  The project's number.+  """+  number: Int!++  """+  The project's owner. Currently limited to repositories, organizations, and users.+  """+  owner: ProjectOwner!++  """+  List of pending cards in this project+  """+  pendingCards(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    A list of archived states to filter the cards by+    """+    archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED]++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ProjectCardConnection!++  """+  The HTTP path for this project+  """+  resourcePath: URI!++  """+  Whether the project is open or closed.+  """+  state: ProjectState!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this project+  """+  url: URI!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!+}++"""+A card in a project.+"""+type ProjectCard implements Node {+  """+  The project column this card is associated under. A card may only belong to one+  project column at a time. The column field will be null if the card is created+  in a pending state and has yet to be associated with a column. Once cards are+  associated with a column, they will not become pending in the future.+  """+  column: ProjectColumn++  """+  The card content item+  """+  content: ProjectCardItem++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The actor who created this card+  """+  creator: Actor++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  Whether the card is archived+  """+  isArchived: Boolean!++  """+  The card note+  """+  note: String++  """+  The project that contains this card.+  """+  project: Project!++  """+  The HTTP path for this card+  """+  resourcePath: URI!++  """+  The state of ProjectCard+  """+  state: ProjectCardState++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this card+  """+  url: URI!+}++"""+The possible archived states of a project card.+"""+enum ProjectCardArchivedState {+  """+  A project card that is archived+  """+  ARCHIVED++  """+  A project card that is not archived+  """+  NOT_ARCHIVED+}++"""+The connection type for ProjectCard.+"""+type ProjectCardConnection {+  """+  A list of edges.+  """+  edges: [ProjectCardEdge]++  """+  A list of nodes.+  """+  nodes: [ProjectCard]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type ProjectCardEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: ProjectCard+}++"""+An issue or PR and its owning repository to be used in a project card.+"""+input ProjectCardImport {+  """+  The issue or pull request number.+  """+  number: Int!++  """+  Repository name with owner (owner/repository).+  """+  repository: String!+}++"""+Types that can be inside Project Cards.+"""+union ProjectCardItem = Issue | PullRequest++"""+Various content states of a ProjectCard+"""+enum ProjectCardState {+  """+  The card has content only.+  """+  CONTENT_ONLY++  """+  The card has a note only.+  """+  NOTE_ONLY++  """+  The card is redacted.+  """+  REDACTED+}++"""+A column inside a project.+"""+type ProjectColumn implements Node {+  """+  List of cards in the column+  """+  cards(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    A list of archived states to filter the cards by+    """+    archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED]++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ProjectCardConnection!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  The project column's name.+  """+  name: String!++  """+  The project that contains this column.+  """+  project: Project!++  """+  The semantic purpose of the column+  """+  purpose: ProjectColumnPurpose++  """+  The HTTP path for this project column+  """+  resourcePath: URI!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this project column+  """+  url: URI!+}++"""+The connection type for ProjectColumn.+"""+type ProjectColumnConnection {+  """+  A list of edges.+  """+  edges: [ProjectColumnEdge]++  """+  A list of nodes.+  """+  nodes: [ProjectColumn]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type ProjectColumnEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: ProjectColumn+}++"""+A project column and a list of its issues and PRs.+"""+input ProjectColumnImport {+  """+  The name of the column.+  """+  columnName: String!++  """+  A list of issues and pull requests in the column.+  """+  issues: [ProjectCardImport!]++  """+  The position of the column, starting from 0.+  """+  position: Int!+}++"""+The semantic purpose of the column - todo, in progress, or done.+"""+enum ProjectColumnPurpose {+  """+  The column contains cards which are complete+  """+  DONE++  """+  The column contains cards which are currently being worked on+  """+  IN_PROGRESS++  """+  The column contains cards still to be worked on+  """+  TODO+}++"""+A list of projects associated with the owner.+"""+type ProjectConnection {+  """+  A list of edges.+  """+  edges: [ProjectEdge]++  """+  A list of nodes.+  """+  nodes: [Project]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type ProjectEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Project+}++"""+Ways in which lists of projects can be ordered upon return.+"""+input ProjectOrder {+  """+  The direction in which to order projects by the specified field.+  """+  direction: OrderDirection!++  """+  The field in which to order projects by.+  """+  field: ProjectOrderField!+}++"""+Properties by which project connections can be ordered.+"""+enum ProjectOrderField {+  """+  Order projects by creation time+  """+  CREATED_AT++  """+  Order projects by name+  """+  NAME++  """+  Order projects by update time+  """+  UPDATED_AT+}++"""+Represents an owner of a Project.+"""+interface ProjectOwner {+  id: ID!++  """+  Find project by number.+  """+  project(+    """+    The project number to find.+    """+    number: Int!+  ): Project++  """+  A list of projects under the owner.+  """+  projects(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for projects returned from the connection+    """+    orderBy: ProjectOrder++    """+    Query to search projects by, currently only searching by name.+    """+    search: String++    """+    A list of states to filter the projects by.+    """+    states: [ProjectState!]+  ): ProjectConnection!++  """+  The HTTP path listing owners projects+  """+  projectsResourcePath: URI!++  """+  The HTTP URL listing owners projects+  """+  projectsUrl: URI!++  """+  Can the current viewer create new projects on this owner.+  """+  viewerCanCreateProjects: Boolean!+}++"""+State of the project; either 'open' or 'closed'+"""+enum ProjectState {+  """+  The project is closed.+  """+  CLOSED++  """+  The project is open.+  """+  OPEN+}++"""+GitHub-provided templates for Projects+"""+enum ProjectTemplate {+  """+  Create a board with v2 triggers to automatically move cards across To do, In progress and Done columns.+  """+  AUTOMATED_KANBAN_V2++  """+  Create a board with triggers to automatically move cards across columns with review automation.+  """+  AUTOMATED_REVIEWS_KANBAN++  """+  Create a board with columns for To do, In progress and Done.+  """+  BASIC_KANBAN++  """+  Create a board to triage and prioritize bugs with To do, priority, and Done columns.+  """+  BUG_TRIAGE+}++"""+A user's public key.+"""+type PublicKey implements Node {+  """+  The last time this authorization was used to perform an action. Values will be null for keys not owned by the user.+  """+  accessedAt: DateTime++  """+  Identifies the date and time when the key was created. Keys created before+  March 5th, 2014 have inaccurate values. Values will be null for keys not owned by the user.+  """+  createdAt: DateTime++  """+  The fingerprint for this PublicKey.+  """+  fingerprint: String!+  id: ID!++  """+  Whether this PublicKey is read-only or not. Values will be null for keys not owned by the user.+  """+  isReadOnly: Boolean++  """+  The public key string.+  """+  key: String!++  """+  Identifies the date and time when the key was updated. Keys created before+  March 5th, 2014 may have inaccurate values. Values will be null for keys not+  owned by the user.+  """+  updatedAt: DateTime+}++"""+The connection type for PublicKey.+"""+type PublicKeyConnection {+  """+  A list of edges.+  """+  edges: [PublicKeyEdge]++  """+  A list of nodes.+  """+  nodes: [PublicKey]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PublicKeyEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PublicKey+}++"""+A repository pull request.+"""+type PullRequest implements Assignable & Closable & Comment & Labelable & Lockable & Node & Reactable & RepositoryNode & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment {+  """+  Reason that the conversation was locked.+  """+  activeLockReason: LockReason++  """+  The number of additions in this pull request.+  """+  additions: Int!++  """+  A list of Users assigned to this object.+  """+  assignees(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserConnection!++  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the subject of the comment.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  Identifies the base Ref associated with the pull request.+  """+  baseRef: Ref++  """+  Identifies the name of the base Ref associated with the pull request, even if the ref has been deleted.+  """+  baseRefName: String!++  """+  Identifies the oid of the base ref associated with the pull request, even if the ref has been deleted.+  """+  baseRefOid: GitObjectID!++  """+  The repository associated with this pull request's base Ref.+  """+  baseRepository: Repository++  """+  The body as Markdown.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The body rendered to text.+  """+  bodyText: String!++  """+  Whether or not the pull request is rebaseable.+  """+  canBeRebased: Boolean! @preview(toggledBy: "merge-info-preview")++  """+  The number of changed files in this pull request.+  """+  changedFiles: Int!++  """+  The HTTP path for the checks of this pull request.+  """+  checksResourcePath: URI!++  """+  The HTTP URL for the checks of this pull request.+  """+  checksUrl: URI!++  """+  `true` if the pull request is closed+  """+  closed: Boolean!++  """+  Identifies the date and time when the object was closed.+  """+  closedAt: DateTime++  """+  A list of comments associated with the pull request.+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): IssueCommentConnection!++  """+  A list of commits present in this pull request's head branch not present in the base branch.+  """+  commits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): PullRequestCommitConnection!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The number of deletions in this pull request.+  """+  deletions: Int!++  """+  The actor who edited this pull request's body.+  """+  editor: Actor++  """+  Lists the files changed within this pull request.+  """+  files(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): PullRequestChangedFileConnection++  """+  Identifies the head Ref associated with the pull request.+  """+  headRef: Ref++  """+  Identifies the name of the head Ref associated with the pull request, even if the ref has been deleted.+  """+  headRefName: String!++  """+  Identifies the oid of the head ref associated with the pull request, even if the ref has been deleted.+  """+  headRefOid: GitObjectID!++  """+  The repository associated with this pull request's head Ref.+  """+  headRepository: Repository++  """+  The owner of the repository associated with this pull request's head Ref.+  """+  headRepositoryOwner: RepositoryOwner++  """+  The hovercard information for this issue+  """+  hovercard(+    """+    Whether or not to include notification contexts+    """+    includeNotificationContexts: Boolean = true+  ): Hovercard!+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  The head and base repositories are different.+  """+  isCrossRepository: Boolean!++  """+  Identifies if the pull request is a draft.+  """+  isDraft: Boolean!++  """+  A list of labels associated with the object.+  """+  labels(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for labels returned from the connection.+    """+    orderBy: LabelOrder = { field: CREATED_AT, direction: ASC }+  ): LabelConnection++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  `true` if the pull request is locked+  """+  locked: Boolean!++  """+  Indicates whether maintainers can modify the pull request.+  """+  maintainerCanModify: Boolean!++  """+  The commit that was created when this pull request was merged.+  """+  mergeCommit: Commit++  """+  Detailed information about the current pull request merge state status.+  """+  mergeStateStatus: MergeStateStatus! @preview(toggledBy: "merge-info-preview")++  """+  Whether or not the pull request can be merged based on the existence of merge conflicts.+  """+  mergeable: MergeableState!++  """+  Whether or not the pull request was merged.+  """+  merged: Boolean!++  """+  The date and time that the pull request was merged.+  """+  mergedAt: DateTime++  """+  The actor who merged the pull request.+  """+  mergedBy: Actor++  """+  Identifies the milestone associated with the pull request.+  """+  milestone: Milestone++  """+  Identifies the pull request number.+  """+  number: Int!++  """+  A list of Users that are participating in the Pull Request conversation.+  """+  participants(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserConnection!++  """+  The permalink to the pull request.+  """+  permalink: URI!++  """+  The commit that GitHub automatically generated to test if this pull request+  could be merged. This field will not return a value if the pull request is+  merged, or if the test merge commit is still being generated. See the+  `mergeable` field for more details on the mergeability of the pull request.+  """+  potentialMergeCommit: Commit++  """+  List of project cards associated with this pull request.+  """+  projectCards(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    A list of archived states to filter the cards by+    """+    archivedStates: [ProjectCardArchivedState] = [ARCHIVED, NOT_ARCHIVED]++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ProjectCardConnection!++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  The repository associated with this node.+  """+  repository: Repository!++  """+  The HTTP path for this pull request.+  """+  resourcePath: URI!++  """+  The HTTP path for reverting this pull request.+  """+  revertResourcePath: URI!++  """+  The HTTP URL for reverting this pull request.+  """+  revertUrl: URI!++  """+  The current status of this pull request with respect to code review.+  """+  reviewDecision: PullRequestReviewDecision++  """+  A list of review requests associated with the pull request.+  """+  reviewRequests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ReviewRequestConnection++  """+  The list of all review threads for this pull request.+  """+  reviewThreads(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): PullRequestReviewThreadConnection!++  """+  A list of reviews associated with the pull request.+  """+  reviews(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Filter by author of the review.+    """+    author: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    A list of states to filter the reviews.+    """+    states: [PullRequestReviewState!]+  ): PullRequestReviewConnection++  """+  Identifies the state of the pull request.+  """+  state: PullRequestState!++  """+  A list of reviewer suggestions based on commit history and past review comments.+  """+  suggestedReviewers: [SuggestedReviewer]!++  """+  A list of events, comments, commits, etc. associated with the pull request.+  """+  timeline(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows filtering timeline events by a `since` timestamp.+    """+    since: DateTime+  ): PullRequestTimelineConnection!+  @deprecated(+    reason: "`timeline` will be removed Use PullRequest.timelineItems instead. Removal on 2020-10-01 UTC."+  )++  """+  A list of events, comments, commits, etc. associated with the pull request.+  """+  timelineItems(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Filter timeline items by type.+    """+    itemTypes: [PullRequestTimelineItemsItemType!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter timeline items by a `since` timestamp.+    """+    since: DateTime++    """+    Skips the first _n_ elements in the list.+    """+    skip: Int+  ): PullRequestTimelineItemsConnection!++  """+  Identifies the pull request title.+  """+  title: String!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this pull request.+  """+  url: URI!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Whether or not the viewer can apply suggestion.+  """+  viewerCanApplySuggestion: Boolean!++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!++  """+  Check if the viewer is able to change their subscription status for the repository.+  """+  viewerCanSubscribe: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!++  """+  Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.+  """+  viewerSubscription: SubscriptionState+}++"""+A file changed in a pull request.+"""+type PullRequestChangedFile {+  """+  The number of additions to the file.+  """+  additions: Int!++  """+  The number of deletions to the file.+  """+  deletions: Int!++  """+  The path of the file.+  """+  path: String!+}++"""+The connection type for PullRequestChangedFile.+"""+type PullRequestChangedFileConnection {+  """+  A list of edges.+  """+  edges: [PullRequestChangedFileEdge]++  """+  A list of nodes.+  """+  nodes: [PullRequestChangedFile]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PullRequestChangedFileEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PullRequestChangedFile+}++"""+Represents a Git commit part of a pull request.+"""+type PullRequestCommit implements Node & UniformResourceLocatable {+  """+  The Git commit object+  """+  commit: Commit!+  id: ID!++  """+  The pull request this commit belongs to+  """+  pullRequest: PullRequest!++  """+  The HTTP path for this pull request commit+  """+  resourcePath: URI!++  """+  The HTTP URL for this pull request commit+  """+  url: URI!+}++"""+Represents a commit comment thread part of a pull request.+"""+type PullRequestCommitCommentThread implements Node & RepositoryNode {+  """+  The comments that exist in this thread.+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CommitCommentConnection!++  """+  The commit the comments were made on.+  """+  commit: Commit!+  id: ID!++  """+  The file the comments were made on.+  """+  path: String++  """+  The position in the diff for the commit that the comment was made on.+  """+  position: Int++  """+  The pull request this commit comment thread belongs to+  """+  pullRequest: PullRequest!++  """+  The repository associated with this node.+  """+  repository: Repository!+}++"""+The connection type for PullRequestCommit.+"""+type PullRequestCommitConnection {+  """+  A list of edges.+  """+  edges: [PullRequestCommitEdge]++  """+  A list of nodes.+  """+  nodes: [PullRequestCommit]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PullRequestCommitEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PullRequestCommit+}++"""+The connection type for PullRequest.+"""+type PullRequestConnection {+  """+  A list of edges.+  """+  edges: [PullRequestEdge]++  """+  A list of nodes.+  """+  nodes: [PullRequest]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+This aggregates pull requests opened by a user within one repository.+"""+type PullRequestContributionsByRepository {+  """+  The pull request contributions.+  """+  contributions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for contributions returned from the connection.+    """+    orderBy: ContributionOrder = { direction: DESC }+  ): CreatedPullRequestContributionConnection!++  """+  The repository in which the pull requests were opened.+  """+  repository: Repository!+}++"""+An edge in a connection.+"""+type PullRequestEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PullRequest+}++"""+Represents available types of methods to use when merging a pull request.+"""+enum PullRequestMergeMethod {+  """+  Add all commits from the head branch to the base branch with a merge commit.+  """+  MERGE++  """+  Add all commits from the head branch onto the base branch individually.+  """+  REBASE++  """+  Combine all commits from the head branch into a single commit in the base branch.+  """+  SQUASH+}++"""+Ways in which lists of issues can be ordered upon return.+"""+input PullRequestOrder {+  """+  The direction in which to order pull requests by the specified field.+  """+  direction: OrderDirection!++  """+  The field in which to order pull requests by.+  """+  field: PullRequestOrderField!+}++"""+Properties by which pull_requests connections can be ordered.+"""+enum PullRequestOrderField {+  """+  Order pull_requests by creation time+  """+  CREATED_AT++  """+  Order pull_requests by update time+  """+  UPDATED_AT+}++"""+A review object for a given pull request.+"""+type PullRequestReview implements Comment & Deletable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment {+  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the subject of the comment.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  Identifies the pull request review body.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The body of this review rendered as plain text.+  """+  bodyText: String!++  """+  A list of review comments for the current pull request review.+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): PullRequestReviewCommentConnection!++  """+  Identifies the commit associated with this pull request review.+  """+  commit: Commit++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The actor who edited the comment.+  """+  editor: Actor+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  A list of teams that this review was made on behalf of.+  """+  onBehalfOf(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): TeamConnection!++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  Identifies the pull request associated with this pull request review.+  """+  pullRequest: PullRequest!++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  The repository associated with this node.+  """+  repository: Repository!++  """+  The HTTP path permalink for this PullRequestReview.+  """+  resourcePath: URI!++  """+  Identifies the current state of the pull request review.+  """+  state: PullRequestReviewState!++  """+  Identifies when the Pull Request Review was submitted+  """+  submittedAt: DateTime++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL permalink for this PullRequestReview.+  """+  url: URI!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Check if the current viewer can delete this object.+  """+  viewerCanDelete: Boolean!++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!+}++"""+A review comment associated with a given repository pull request.+"""+type PullRequestReviewComment implements Comment & Deletable & Minimizable & Node & Reactable & RepositoryNode & Updatable & UpdatableComment {+  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the subject of the comment.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  The comment body of this review comment.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The comment body of this review comment rendered as plain text.+  """+  bodyText: String!++  """+  Identifies the commit associated with the comment.+  """+  commit: Commit++  """+  Identifies when the comment was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The diff hunk to which the comment applies.+  """+  diffHunk: String!++  """+  Identifies when the comment was created in a draft state.+  """+  draftedAt: DateTime!++  """+  The actor who edited the comment.+  """+  editor: Actor+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  Returns whether or not a comment has been minimized.+  """+  isMinimized: Boolean!++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  Returns why the comment was minimized.+  """+  minimizedReason: String++  """+  Identifies the original commit associated with the comment.+  """+  originalCommit: Commit++  """+  The original line index in the diff to which the comment applies.+  """+  originalPosition: Int!++  """+  Identifies when the comment body is outdated+  """+  outdated: Boolean!++  """+  The path to which the comment applies.+  """+  path: String!++  """+  The line index in the diff to which the comment applies.+  """+  position: Int++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  The pull request associated with this review comment.+  """+  pullRequest: PullRequest!++  """+  The pull request review associated with this review comment.+  """+  pullRequestReview: PullRequestReview++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  The comment this is a reply to.+  """+  replyTo: PullRequestReviewComment++  """+  The repository associated with this node.+  """+  repository: Repository!++  """+  The HTTP path permalink for this review comment.+  """+  resourcePath: URI!++  """+  Identifies the state of the comment.+  """+  state: PullRequestReviewCommentState!++  """+  Identifies when the comment was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL permalink for this review comment.+  """+  url: URI!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Check if the current viewer can delete this object.+  """+  viewerCanDelete: Boolean!++  """+  Check if the current viewer can minimize this object.+  """+  viewerCanMinimize: Boolean!++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!+}++"""+The connection type for PullRequestReviewComment.+"""+type PullRequestReviewCommentConnection {+  """+  A list of edges.+  """+  edges: [PullRequestReviewCommentEdge]++  """+  A list of nodes.+  """+  nodes: [PullRequestReviewComment]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PullRequestReviewCommentEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PullRequestReviewComment+}++"""+The possible states of a pull request review comment.+"""+enum PullRequestReviewCommentState {+  """+  A comment that is part of a pending review+  """+  PENDING++  """+  A comment that is part of a submitted review+  """+  SUBMITTED+}++"""+The connection type for PullRequestReview.+"""+type PullRequestReviewConnection {+  """+  A list of edges.+  """+  edges: [PullRequestReviewEdge]++  """+  A list of nodes.+  """+  nodes: [PullRequestReview]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+This aggregates pull request reviews made by a user within one repository.+"""+type PullRequestReviewContributionsByRepository {+  """+  The pull request review contributions.+  """+  contributions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for contributions returned from the connection.+    """+    orderBy: ContributionOrder = { direction: DESC }+  ): CreatedPullRequestReviewContributionConnection!++  """+  The repository in which the pull request reviews were made.+  """+  repository: Repository!+}++"""+The review status of a pull request.+"""+enum PullRequestReviewDecision {+  """+  The pull request has received an approving review.+  """+  APPROVED++  """+  Changes have been requested on the pull request.+  """+  CHANGES_REQUESTED++  """+  A review is required before the pull request can be merged.+  """+  REVIEW_REQUIRED+}++"""+An edge in a connection.+"""+type PullRequestReviewEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PullRequestReview+}++"""+The possible events to perform on a pull request review.+"""+enum PullRequestReviewEvent {+  """+  Submit feedback and approve merging these changes.+  """+  APPROVE++  """+  Submit general feedback without explicit approval.+  """+  COMMENT++  """+  Dismiss review so it now longer effects merging.+  """+  DISMISS++  """+  Submit feedback that must be addressed before merging.+  """+  REQUEST_CHANGES+}++"""+The possible states of a pull request review.+"""+enum PullRequestReviewState {+  """+  A review allowing the pull request to merge.+  """+  APPROVED++  """+  A review blocking the pull request from merging.+  """+  CHANGES_REQUESTED++  """+  An informational review.+  """+  COMMENTED++  """+  A review that has been dismissed.+  """+  DISMISSED++  """+  A review that has not yet been submitted.+  """+  PENDING+}++"""+A threaded list of comments for a given pull request.+"""+type PullRequestReviewThread implements Node {+  """+  A list of pull request comments associated with the thread.+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Skips the first _n_ elements in the list.+    """+    skip: Int+  ): PullRequestReviewCommentConnection!++  """+  The side of the diff on which this thread was placed.+  """+  diffSide: DiffSide!+  id: ID!++  """+  Whether this thread has been resolved+  """+  isResolved: Boolean!++  """+  The line in the file to which this thread refers+  """+  line: Int++  """+  The original line in the file to which this thread refers.+  """+  originalLine: Int++  """+  The original start line in the file to which this thread refers (multi-line only).+  """+  originalStartLine: Int++  """+  Identifies the pull request associated with this thread.+  """+  pullRequest: PullRequest!++  """+  Identifies the repository associated with this thread.+  """+  repository: Repository!++  """+  The user who resolved this thread+  """+  resolvedBy: User++  """+  The side of the diff that the first line of the thread starts on (multi-line only)+  """+  startDiffSide: DiffSide++  """+  The start line in the file to which this thread refers (multi-line only)+  """+  startLine: Int++  """+  Whether or not the viewer can resolve this thread+  """+  viewerCanResolve: Boolean!++  """+  Whether or not the viewer can unresolve this thread+  """+  viewerCanUnresolve: Boolean!+}++"""+Review comment threads for a pull request review.+"""+type PullRequestReviewThreadConnection {+  """+  A list of edges.+  """+  edges: [PullRequestReviewThreadEdge]++  """+  A list of nodes.+  """+  nodes: [PullRequestReviewThread]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PullRequestReviewThreadEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PullRequestReviewThread+}++"""+Represents the latest point in the pull request timeline for which the viewer has seen the pull request's commits.+"""+type PullRequestRevisionMarker {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The last commit the viewer has seen.+  """+  lastSeenCommit: Commit!++  """+  The pull request to which the marker belongs.+  """+  pullRequest: PullRequest!+}++"""+The possible states of a pull request.+"""+enum PullRequestState {+  """+  A pull request that has been closed without being merged.+  """+  CLOSED++  """+  A pull request that has been closed by being merged.+  """+  MERGED++  """+  A pull request that is still open.+  """+  OPEN+}++"""+The connection type for PullRequestTimelineItem.+"""+type PullRequestTimelineConnection {+  """+  A list of edges.+  """+  edges: [PullRequestTimelineItemEdge]++  """+  A list of nodes.+  """+  nodes: [PullRequestTimelineItem]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An item in an pull request timeline+"""+union PullRequestTimelineItem =+    AssignedEvent+  | BaseRefForcePushedEvent+  | ClosedEvent+  | Commit+  | CommitCommentThread+  | CrossReferencedEvent+  | DemilestonedEvent+  | DeployedEvent+  | DeploymentEnvironmentChangedEvent+  | HeadRefDeletedEvent+  | HeadRefForcePushedEvent+  | HeadRefRestoredEvent+  | IssueComment+  | LabeledEvent+  | LockedEvent+  | MergedEvent+  | MilestonedEvent+  | PullRequestReview+  | PullRequestReviewComment+  | PullRequestReviewThread+  | ReferencedEvent+  | RenamedTitleEvent+  | ReopenedEvent+  | ReviewDismissedEvent+  | ReviewRequestRemovedEvent+  | ReviewRequestedEvent+  | SubscribedEvent+  | UnassignedEvent+  | UnlabeledEvent+  | UnlockedEvent+  | UnsubscribedEvent+  | UserBlockedEvent++"""+An edge in a connection.+"""+type PullRequestTimelineItemEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PullRequestTimelineItem+}++"""+An item in a pull request timeline+"""+union PullRequestTimelineItems =+    AddedToProjectEvent+  | AssignedEvent+  | AutomaticBaseChangeFailedEvent+  | AutomaticBaseChangeSucceededEvent+  | BaseRefChangedEvent+  | BaseRefForcePushedEvent+  | ClosedEvent+  | CommentDeletedEvent+  | ConnectedEvent+  | ConvertToDraftEvent+  | ConvertedNoteToIssueEvent+  | CrossReferencedEvent+  | DemilestonedEvent+  | DeployedEvent+  | DeploymentEnvironmentChangedEvent+  | DisconnectedEvent+  | HeadRefDeletedEvent+  | HeadRefForcePushedEvent+  | HeadRefRestoredEvent+  | IssueComment+  | LabeledEvent+  | LockedEvent+  | MarkedAsDuplicateEvent+  | MentionedEvent+  | MergedEvent+  | MilestonedEvent+  | MovedColumnsInProjectEvent+  | PinnedEvent+  | PullRequestCommit+  | PullRequestCommitCommentThread+  | PullRequestReview+  | PullRequestReviewThread+  | PullRequestRevisionMarker+  | ReadyForReviewEvent+  | ReferencedEvent+  | RemovedFromProjectEvent+  | RenamedTitleEvent+  | ReopenedEvent+  | ReviewDismissedEvent+  | ReviewRequestRemovedEvent+  | ReviewRequestedEvent+  | SubscribedEvent+  | TransferredEvent+  | UnassignedEvent+  | UnlabeledEvent+  | UnlockedEvent+  | UnmarkedAsDuplicateEvent+  | UnpinnedEvent+  | UnsubscribedEvent+  | UserBlockedEvent++"""+The connection type for PullRequestTimelineItems.+"""+type PullRequestTimelineItemsConnection {+  """+  A list of edges.+  """+  edges: [PullRequestTimelineItemsEdge]++  """+  Identifies the count of items after applying `before` and `after` filters.+  """+  filteredCount: Int!++  """+  A list of nodes.+  """+  nodes: [PullRequestTimelineItems]++  """+  Identifies the count of items after applying `before`/`after` filters and `first`/`last`/`skip` slicing.+  """+  pageCount: Int!++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!++  """+  Identifies the date and time when the timeline was last updated.+  """+  updatedAt: DateTime!+}++"""+An edge in a connection.+"""+type PullRequestTimelineItemsEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PullRequestTimelineItems+}++"""+The possible item types found in a timeline.+"""+enum PullRequestTimelineItemsItemType {+  """+  Represents a 'added_to_project' event on a given issue or pull request.+  """+  ADDED_TO_PROJECT_EVENT++  """+  Represents an 'assigned' event on any assignable object.+  """+  ASSIGNED_EVENT++  """+  Represents a 'automatic_base_change_failed' event on a given pull request.+  """+  AUTOMATIC_BASE_CHANGE_FAILED_EVENT++  """+  Represents a 'automatic_base_change_succeeded' event on a given pull request.+  """+  AUTOMATIC_BASE_CHANGE_SUCCEEDED_EVENT++  """+  Represents a 'base_ref_changed' event on a given issue or pull request.+  """+  BASE_REF_CHANGED_EVENT++  """+  Represents a 'base_ref_force_pushed' event on a given pull request.+  """+  BASE_REF_FORCE_PUSHED_EVENT++  """+  Represents a 'closed' event on any `Closable`.+  """+  CLOSED_EVENT++  """+  Represents a 'comment_deleted' event on a given issue or pull request.+  """+  COMMENT_DELETED_EVENT++  """+  Represents a 'connected' event on a given issue or pull request.+  """+  CONNECTED_EVENT++  """+  Represents a 'converted_note_to_issue' event on a given issue or pull request.+  """+  CONVERTED_NOTE_TO_ISSUE_EVENT++  """+  Represents a 'convert_to_draft' event on a given pull request.+  """+  CONVERT_TO_DRAFT_EVENT++  """+  Represents a mention made by one issue or pull request to another.+  """+  CROSS_REFERENCED_EVENT++  """+  Represents a 'demilestoned' event on a given issue or pull request.+  """+  DEMILESTONED_EVENT++  """+  Represents a 'deployed' event on a given pull request.+  """+  DEPLOYED_EVENT++  """+  Represents a 'deployment_environment_changed' event on a given pull request.+  """+  DEPLOYMENT_ENVIRONMENT_CHANGED_EVENT++  """+  Represents a 'disconnected' event on a given issue or pull request.+  """+  DISCONNECTED_EVENT++  """+  Represents a 'head_ref_deleted' event on a given pull request.+  """+  HEAD_REF_DELETED_EVENT++  """+  Represents a 'head_ref_force_pushed' event on a given pull request.+  """+  HEAD_REF_FORCE_PUSHED_EVENT++  """+  Represents a 'head_ref_restored' event on a given pull request.+  """+  HEAD_REF_RESTORED_EVENT++  """+  Represents a comment on an Issue.+  """+  ISSUE_COMMENT++  """+  Represents a 'labeled' event on a given issue or pull request.+  """+  LABELED_EVENT++  """+  Represents a 'locked' event on a given issue or pull request.+  """+  LOCKED_EVENT++  """+  Represents a 'marked_as_duplicate' event on a given issue or pull request.+  """+  MARKED_AS_DUPLICATE_EVENT++  """+  Represents a 'mentioned' event on a given issue or pull request.+  """+  MENTIONED_EVENT++  """+  Represents a 'merged' event on a given pull request.+  """+  MERGED_EVENT++  """+  Represents a 'milestoned' event on a given issue or pull request.+  """+  MILESTONED_EVENT++  """+  Represents a 'moved_columns_in_project' event on a given issue or pull request.+  """+  MOVED_COLUMNS_IN_PROJECT_EVENT++  """+  Represents a 'pinned' event on a given issue or pull request.+  """+  PINNED_EVENT++  """+  Represents a Git commit part of a pull request.+  """+  PULL_REQUEST_COMMIT++  """+  Represents a commit comment thread part of a pull request.+  """+  PULL_REQUEST_COMMIT_COMMENT_THREAD++  """+  A review object for a given pull request.+  """+  PULL_REQUEST_REVIEW++  """+  A threaded list of comments for a given pull request.+  """+  PULL_REQUEST_REVIEW_THREAD++  """+  Represents the latest point in the pull request timeline for which the viewer has seen the pull request's commits.+  """+  PULL_REQUEST_REVISION_MARKER++  """+  Represents a 'ready_for_review' event on a given pull request.+  """+  READY_FOR_REVIEW_EVENT++  """+  Represents a 'referenced' event on a given `ReferencedSubject`.+  """+  REFERENCED_EVENT++  """+  Represents a 'removed_from_project' event on a given issue or pull request.+  """+  REMOVED_FROM_PROJECT_EVENT++  """+  Represents a 'renamed' event on a given issue or pull request+  """+  RENAMED_TITLE_EVENT++  """+  Represents a 'reopened' event on any `Closable`.+  """+  REOPENED_EVENT++  """+  Represents a 'review_dismissed' event on a given issue or pull request.+  """+  REVIEW_DISMISSED_EVENT++  """+  Represents an 'review_requested' event on a given pull request.+  """+  REVIEW_REQUESTED_EVENT++  """+  Represents an 'review_request_removed' event on a given pull request.+  """+  REVIEW_REQUEST_REMOVED_EVENT++  """+  Represents a 'subscribed' event on a given `Subscribable`.+  """+  SUBSCRIBED_EVENT++  """+  Represents a 'transferred' event on a given issue or pull request.+  """+  TRANSFERRED_EVENT++  """+  Represents an 'unassigned' event on any assignable object.+  """+  UNASSIGNED_EVENT++  """+  Represents an 'unlabeled' event on a given issue or pull request.+  """+  UNLABELED_EVENT++  """+  Represents an 'unlocked' event on a given issue or pull request.+  """+  UNLOCKED_EVENT++  """+  Represents an 'unmarked_as_duplicate' event on a given issue or pull request.+  """+  UNMARKED_AS_DUPLICATE_EVENT++  """+  Represents an 'unpinned' event on a given issue or pull request.+  """+  UNPINNED_EVENT++  """+  Represents an 'unsubscribed' event on a given `Subscribable`.+  """+  UNSUBSCRIBED_EVENT++  """+  Represents a 'user_blocked' event on a given user.+  """+  USER_BLOCKED_EVENT+}++"""+The possible target states when updating a pull request.+"""+enum PullRequestUpdateState {+  """+  A pull request that has been closed without being merged.+  """+  CLOSED++  """+  A pull request that is still open.+  """+  OPEN+}++"""+A Git push.+"""+type Push implements Node @preview(toggledBy: "antiope-preview") {+  id: ID!++  """+  The SHA after the push+  """+  nextSha: GitObjectID++  """+  The permalink for this push.+  """+  permalink: URI!++  """+  The SHA before the push+  """+  previousSha: GitObjectID++  """+  The user who pushed+  """+  pusher: User!++  """+  The repository that was pushed to+  """+  repository: Repository!+}++"""+A team, user or app who has the ability to push to a protected branch.+"""+type PushAllowance implements Node {+  """+  The actor that can push.+  """+  actor: PushAllowanceActor++  """+  Identifies the branch protection rule associated with the allowed user or team.+  """+  branchProtectionRule: BranchProtectionRule+  id: ID!+}++"""+Types that can be an actor.+"""+union PushAllowanceActor = App | Team | User++"""+The connection type for PushAllowance.+"""+type PushAllowanceConnection {+  """+  A list of edges.+  """+  edges: [PushAllowanceEdge]++  """+  A list of nodes.+  """+  nodes: [PushAllowance]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type PushAllowanceEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: PushAllowance+}++"""+The query root of GitHub's GraphQL interface.+"""+type Query {+  """+  Look up a code of conduct by its key+  """+  codeOfConduct(+    """+    The code of conduct's key+    """+    key: String!+  ): CodeOfConduct++  """+  Look up a code of conduct by its key+  """+  codesOfConduct: [CodeOfConduct]++  """+  Look up an enterprise by URL slug.+  """+  enterprise(+    """+    The enterprise invitation token.+    """+    invitationToken: String++    """+    The enterprise URL slug.+    """+    slug: String!+  ): Enterprise++  """+  Look up a pending enterprise administrator invitation by invitee, enterprise and role.+  """+  enterpriseAdministratorInvitation(+    """+    The slug of the enterprise the user was invited to join.+    """+    enterpriseSlug: String!++    """+    The role for the business member invitation.+    """+    role: EnterpriseAdministratorRole!++    """+    The login of the user invited to join the business.+    """+    userLogin: String!+  ): EnterpriseAdministratorInvitation++  """+  Look up a pending enterprise administrator invitation by invitation token.+  """+  enterpriseAdministratorInvitationByToken(+    """+    The invitation token sent with the invitation email.+    """+    invitationToken: String!+  ): EnterpriseAdministratorInvitation++  """+  Look up an open source license by its key+  """+  license(+    """+    The license's downcased SPDX ID+    """+    key: String!+  ): License++  """+  Return a list of known open source licenses+  """+  licenses: [License]!++  """+  Get alphabetically sorted list of Marketplace categories+  """+  marketplaceCategories(+    """+    Exclude categories with no listings.+    """+    excludeEmpty: Boolean++    """+    Returns top level categories only, excluding any subcategories.+    """+    excludeSubcategories: Boolean++    """+    Return only the specified categories.+    """+    includeCategories: [String!]+  ): [MarketplaceCategory!]!++  """+  Look up a Marketplace category by its slug.+  """+  marketplaceCategory(+    """+    The URL slug of the category.+    """+    slug: String!++    """+    Also check topic aliases for the category slug+    """+    useTopicAliases: Boolean+  ): MarketplaceCategory++  """+  Look up a single Marketplace listing+  """+  marketplaceListing(+    """+    Select the listing that matches this slug. It's the short name of the listing used in its URL.+    """+    slug: String!+  ): MarketplaceListing++  """+  Look up Marketplace listings+  """+  marketplaceListings(+    """+    Select listings that can be administered by the specified user.+    """+    adminId: ID++    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Select listings visible to the viewer even if they are not approved. If omitted or+    false, only approved listings will be returned.+    """+    allStates: Boolean++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Select only listings with the given category.+    """+    categorySlug: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Select listings for products owned by the specified organization.+    """+    organizationId: ID++    """+    Select only listings where the primary category matches the given category slug.+    """+    primaryCategoryOnly: Boolean = false++    """+    Select the listings with these slugs, if they are visible to the viewer.+    """+    slugs: [String]++    """+    Also check topic aliases for the category slug+    """+    useTopicAliases: Boolean++    """+    Select listings to which user has admin access. If omitted, listings visible to the+    viewer are returned.+    """+    viewerCanAdmin: Boolean++    """+    Select only listings that offer a free trial.+    """+    withFreeTrialsOnly: Boolean = false+  ): MarketplaceListingConnection!++  """+  Return information about the GitHub instance+  """+  meta: GitHubMetadata!++  """+  Fetches an object given its ID.+  """+  node(+    """+    ID of the object.+    """+    id: ID!+  ): Node++  """+  Lookup nodes by a list of IDs.+  """+  nodes(+    """+    The list of node IDs.+    """+    ids: [ID!]!+  ): [Node]!++  """+  Lookup a organization by login.+  """+  organization(+    """+    The organization's login.+    """+    login: String!+  ): Organization++  """+  The client's rate limit information.+  """+  rateLimit(+    """+    If true, calculate the cost for the query without evaluating it+    """+    dryRun: Boolean = false+  ): RateLimit++  """+  Hack to workaround https://github.com/facebook/relay/issues/112 re-exposing the root query object+  """+  relay: Query!++  """+  Lookup a given repository by the owner and repository name.+  """+  repository(+    """+    The name of the repository+    """+    name: String!++    """+    The login field of a user or organization+    """+    owner: String!+  ): Repository++  """+  Lookup a repository owner (ie. either a User or an Organization) by login.+  """+  repositoryOwner(+    """+    The username to lookup the owner by.+    """+    login: String!+  ): RepositoryOwner++  """+  Lookup resource by a URL.+  """+  resource(+    """+    The URL.+    """+    url: URI!+  ): UniformResourceLocatable++  """+  Perform a search across resources.+  """+  search(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    The search string to look for.+    """+    query: String!++    """+    The types of search items to search within.+    """+    type: SearchType!+  ): SearchResultItemConnection!++  """+  GitHub Security Advisories+  """+  securityAdvisories(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Filter advisories by identifier, e.g. GHSA or CVE.+    """+    identifier: SecurityAdvisoryIdentifierFilter++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for the returned topics.+    """+    orderBy: SecurityAdvisoryOrder = { field: UPDATED_AT, direction: DESC }++    """+    Filter advisories to those published since a time in the past.+    """+    publishedSince: DateTime++    """+    Filter advisories to those updated since a time in the past.+    """+    updatedSince: DateTime+  ): SecurityAdvisoryConnection!++  """+  Fetch a Security Advisory by its GHSA ID+  """+  securityAdvisory(+    """+    GitHub Security Advisory ID.+    """+    ghsaId: String!+  ): SecurityAdvisory++  """+  Software Vulnerabilities documented by GitHub Security Advisories+  """+  securityVulnerabilities(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    An ecosystem to filter vulnerabilities by.+    """+    ecosystem: SecurityAdvisoryEcosystem++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for the returned topics.+    """+    orderBy: SecurityVulnerabilityOrder = { field: UPDATED_AT, direction: DESC }++    """+    A package name to filter vulnerabilities by.+    """+    package: String++    """+    A list of severities to filter vulnerabilities by.+    """+    severities: [SecurityAdvisorySeverity!]+  ): SecurityVulnerabilityConnection!++  """+  Look up a single Sponsors Listing+  """+  sponsorsListing(+    """+    Select the Sponsors listing which matches this slug+    """+    slug: String!+  ): SponsorsListing+  @deprecated(+    reason: "`Query.sponsorsListing` will be removed. Use `Sponsorable.sponsorsListing` instead. Removal on 2020-04-01 UTC."+  )++  """+  Look up a topic by name.+  """+  topic(+    """+    The topic's name.+    """+    name: String!+  ): Topic++  """+  Lookup a user by login.+  """+  user(+    """+    The user's login.+    """+    login: String!+  ): User++  """+  The currently authenticated user.+  """+  viewer: User!+}++"""+Represents the client's rate limit.+"""+type RateLimit {+  """+  The point cost for the current query counting against the rate limit.+  """+  cost: Int!++  """+  The maximum number of points the client is permitted to consume in a 60 minute window.+  """+  limit: Int!++  """+  The maximum number of nodes this query may return+  """+  nodeCount: Int!++  """+  The number of points remaining in the current rate limit window.+  """+  remaining: Int!++  """+  The time at which the current rate limit window resets in UTC epoch seconds.+  """+  resetAt: DateTime!++  """+  The number of points used in the current rate limit window.+  """+  used: Int!+}++"""+Represents a subject that can be reacted on.+"""+interface Reactable {+  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!+}++"""+The connection type for User.+"""+type ReactingUserConnection {+  """+  A list of edges.+  """+  edges: [ReactingUserEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Represents a user that's made a reaction.+"""+type ReactingUserEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!+  node: User!++  """+  The moment when the user made the reaction.+  """+  reactedAt: DateTime!+}++"""+An emoji reaction to a particular piece of content.+"""+type Reaction implements Node {+  """+  Identifies the emoji reaction.+  """+  content: ReactionContent!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  The reactable piece of content+  """+  reactable: Reactable!++  """+  Identifies the user who created this reaction.+  """+  user: User+}++"""+A list of reactions that have been left on the subject.+"""+type ReactionConnection {+  """+  A list of edges.+  """+  edges: [ReactionEdge]++  """+  A list of nodes.+  """+  nodes: [Reaction]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!++  """+  Whether or not the authenticated user has left a reaction on the subject.+  """+  viewerHasReacted: Boolean!+}++"""+Emojis that can be attached to Issues, Pull Requests and Comments.+"""+enum ReactionContent {+  """+  Represents the `:confused:` emoji.+  """+  CONFUSED++  """+  Represents the `:eyes:` emoji.+  """+  EYES++  """+  Represents the `:heart:` emoji.+  """+  HEART++  """+  Represents the `:hooray:` emoji.+  """+  HOORAY++  """+  Represents the `:laugh:` emoji.+  """+  LAUGH++  """+  Represents the `:rocket:` emoji.+  """+  ROCKET++  """+  Represents the `:-1:` emoji.+  """+  THUMBS_DOWN++  """+  Represents the `:+1:` emoji.+  """+  THUMBS_UP+}++"""+An edge in a connection.+"""+type ReactionEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Reaction+}++"""+A group of emoji reactions to a particular piece of content.+"""+type ReactionGroup {+  """+  Identifies the emoji reaction.+  """+  content: ReactionContent!++  """+  Identifies when the reaction was created.+  """+  createdAt: DateTime++  """+  The subject that was reacted to.+  """+  subject: Reactable!++  """+  Users who have reacted to the reaction subject with the emotion represented by this reaction group+  """+  users(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): ReactingUserConnection!++  """+  Whether or not the authenticated user has left a reaction on the subject.+  """+  viewerHasReacted: Boolean!+}++"""+Ways in which lists of reactions can be ordered upon return.+"""+input ReactionOrder {+  """+  The direction in which to order reactions by the specified field.+  """+  direction: OrderDirection!++  """+  The field in which to order reactions by.+  """+  field: ReactionOrderField!+}++"""+A list of fields that reactions can be ordered by.+"""+enum ReactionOrderField {+  """+  Allows ordering a list of reactions by when they were created.+  """+  CREATED_AT+}++"""+Represents a 'ready_for_review' event on a given pull request.+"""+type ReadyForReviewEvent implements Node & UniformResourceLocatable {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  The HTTP path for this ready for review event.+  """+  resourcePath: URI!++  """+  The HTTP URL for this ready for review event.+  """+  url: URI!+}++"""+Represents a Git reference.+"""+type Ref implements Node {+  """+  A list of pull requests with this ref as the head ref.+  """+  associatedPullRequests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    The base ref name to filter the pull requests by.+    """+    baseRefName: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    The head ref name to filter the pull requests by.+    """+    headRefName: String++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pull requests returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the pull requests by.+    """+    states: [PullRequestState!]+  ): PullRequestConnection!+  id: ID!++  """+  The ref name.+  """+  name: String!++  """+  The ref's prefix, such as `refs/heads/` or `refs/tags/`.+  """+  prefix: String!++  """+  The repository the ref belongs to.+  """+  repository: Repository!++  """+  The object the ref points to. Returns null when object does not exist.+  """+  target: GitObject+}++"""+The connection type for Ref.+"""+type RefConnection {+  """+  A list of edges.+  """+  edges: [RefEdge]++  """+  A list of nodes.+  """+  nodes: [Ref]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type RefEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Ref+}++"""+Ways in which lists of git refs can be ordered upon return.+"""+input RefOrder {+  """+  The direction in which to order refs by the specified field.+  """+  direction: OrderDirection!++  """+  The field in which to order refs by.+  """+  field: RefOrderField!+}++"""+Properties by which ref connections can be ordered.+"""+enum RefOrderField {+  """+  Order refs by their alphanumeric name+  """+  ALPHABETICAL++  """+  Order refs by underlying commit date if the ref prefix is refs/tags/+  """+  TAG_COMMIT_DATE+}++"""+A ref update+"""+input RefUpdate @preview(toggledBy: "update-refs-preview") {+  """+  The value this ref should be updated to.+  """+  afterOid: GitObjectID!++  """+  The value this ref needs to point to before the update.+  """+  beforeOid: GitObjectID++  """+  Force a non fast-forward update.+  """+  force: Boolean = false++  """+  The fully qualified name of the ref to be update. For example `refs/heads/branch-name`+  """+  name: GitRefname!+}++"""+Represents a 'referenced' event on a given `ReferencedSubject`.+"""+type ReferencedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the commit associated with the 'referenced' event.+  """+  commit: Commit++  """+  Identifies the repository associated with the 'referenced' event.+  """+  commitRepository: Repository!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Reference originated in a different repository.+  """+  isCrossRepository: Boolean!++  """+  Checks if the commit message itself references the subject. Can be false in the case of a commit comment reference.+  """+  isDirectReference: Boolean!++  """+  Object referenced by event.+  """+  subject: ReferencedSubject!+}++"""+Any referencable object+"""+union ReferencedSubject = Issue | PullRequest++"""+Autogenerated input type of RegenerateEnterpriseIdentityProviderRecoveryCodes+"""+input RegenerateEnterpriseIdentityProviderRecoveryCodesInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set an identity provider.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])+}++"""+Autogenerated return type of RegenerateEnterpriseIdentityProviderRecoveryCodes+"""+type RegenerateEnterpriseIdentityProviderRecoveryCodesPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The identity provider for the enterprise.+  """+  identityProvider: EnterpriseIdentityProvider+}++"""+A release contains the content for a release.+"""+type Release implements Node & UniformResourceLocatable {+  """+  The author of the release+  """+  author: User++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The description of the release.+  """+  description: String++  """+  The description of this release rendered to HTML.+  """+  descriptionHTML: HTML+  id: ID!++  """+  Whether or not the release is a draft+  """+  isDraft: Boolean!++  """+  Whether or not the release is a prerelease+  """+  isPrerelease: Boolean!++  """+  The title of the release.+  """+  name: String++  """+  Identifies the date and time when the release was created.+  """+  publishedAt: DateTime++  """+  List of releases assets which are dependent on this release.+  """+  releaseAssets(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    A list of names to filter the assets by.+    """+    name: String+  ): ReleaseAssetConnection!++  """+  The HTTP path for this issue+  """+  resourcePath: URI!++  """+  A description of the release, rendered to HTML without any links in it.+  """+  shortDescriptionHTML(+    """+    How many characters to return.+    """+    limit: Int = 200+  ): HTML++  """+  The Git tag the release points to+  """+  tag: Ref++  """+  The name of the release's Git tag+  """+  tagName: String!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this issue+  """+  url: URI!+}++"""+A release asset contains the content for a release asset.+"""+type ReleaseAsset implements Node {+  """+  The asset's content-type+  """+  contentType: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The number of times this asset was downloaded+  """+  downloadCount: Int!++  """+  Identifies the URL where you can download the release asset via the browser.+  """+  downloadUrl: URI!+  id: ID!++  """+  Identifies the title of the release asset.+  """+  name: String!++  """+  Release that the asset is associated with+  """+  release: Release++  """+  The size (in bytes) of the asset+  """+  size: Int!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The user that performed the upload+  """+  uploadedBy: User!++  """+  Identifies the URL of the release asset.+  """+  url: URI!+}++"""+The connection type for ReleaseAsset.+"""+type ReleaseAssetConnection {+  """+  A list of edges.+  """+  edges: [ReleaseAssetEdge]++  """+  A list of nodes.+  """+  nodes: [ReleaseAsset]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type ReleaseAssetEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: ReleaseAsset+}++"""+The connection type for Release.+"""+type ReleaseConnection {+  """+  A list of edges.+  """+  edges: [ReleaseEdge]++  """+  A list of nodes.+  """+  nodes: [Release]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type ReleaseEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Release+}++"""+Ways in which lists of releases can be ordered upon return.+"""+input ReleaseOrder {+  """+  The direction in which to order releases by the specified field.+  """+  direction: OrderDirection!++  """+  The field in which to order releases by.+  """+  field: ReleaseOrderField!+}++"""+Properties by which release connections can be ordered.+"""+enum ReleaseOrderField {+  """+  Order releases by creation time+  """+  CREATED_AT++  """+  Order releases alphabetically by name+  """+  NAME+}++"""+Autogenerated input type of RemoveAssigneesFromAssignable+"""+input RemoveAssigneesFromAssignableInput {+  """+  The id of the assignable object to remove assignees from.+  """+  assignableId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "Assignable"+  )++  """+  The id of users to remove as assignees.+  """+  assigneeIds: [ID!]! @possibleTypes(concreteTypes: ["User"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated return type of RemoveAssigneesFromAssignable+"""+type RemoveAssigneesFromAssignablePayload {+  """+  The item that was unassigned.+  """+  assignable: Assignable++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of RemoveEnterpriseAdmin+"""+input RemoveEnterpriseAdminInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Enterprise ID from which to remove the administrator.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The login of the user to remove as an administrator.+  """+  login: String!+}++"""+Autogenerated return type of RemoveEnterpriseAdmin+"""+type RemoveEnterpriseAdminPayload {+  """+  The user who was removed as an administrator.+  """+  admin: User++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated enterprise.+  """+  enterprise: Enterprise++  """+  A message confirming the result of removing an administrator.+  """+  message: String++  """+  The viewer performing the mutation.+  """+  viewer: User+}++"""+Autogenerated input type of RemoveEnterpriseIdentityProvider+"""+input RemoveEnterpriseIdentityProviderInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise from which to remove the identity provider.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])+}++"""+Autogenerated return type of RemoveEnterpriseIdentityProvider+"""+type RemoveEnterpriseIdentityProviderPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The identity provider that was removed from the enterprise.+  """+  identityProvider: EnterpriseIdentityProvider+}++"""+Autogenerated input type of RemoveEnterpriseOrganization+"""+input RemoveEnterpriseOrganizationInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise from which the organization should be removed.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The ID of the organization to remove from the enterprise.+  """+  organizationId: ID! @possibleTypes(concreteTypes: ["Organization"])+}++"""+Autogenerated return type of RemoveEnterpriseOrganization+"""+type RemoveEnterpriseOrganizationPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated enterprise.+  """+  enterprise: Enterprise++  """+  The organization that was removed from the enterprise.+  """+  organization: Organization++  """+  The viewer performing the mutation.+  """+  viewer: User+}++"""+Autogenerated input type of RemoveLabelsFromLabelable+"""+input RemoveLabelsFromLabelableInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ids of labels to remove.+  """+  labelIds: [ID!]! @possibleTypes(concreteTypes: ["Label"])++  """+  The id of the Labelable to remove labels from.+  """+  labelableId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "Labelable"+  )+}++"""+Autogenerated return type of RemoveLabelsFromLabelable+"""+type RemoveLabelsFromLabelablePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Labelable the labels were removed from.+  """+  labelable: Labelable+}++"""+Autogenerated input type of RemoveOutsideCollaborator+"""+input RemoveOutsideCollaboratorInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the organization to remove the outside collaborator from.+  """+  organizationId: ID! @possibleTypes(concreteTypes: ["Organization"])++  """+  The ID of the outside collaborator to remove.+  """+  userId: ID! @possibleTypes(concreteTypes: ["User"])+}++"""+Autogenerated return type of RemoveOutsideCollaborator+"""+type RemoveOutsideCollaboratorPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The user that was removed as an outside collaborator.+  """+  removedUser: User+}++"""+Autogenerated input type of RemoveReaction+"""+input RemoveReactionInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The name of the emoji reaction to remove.+  """+  content: ReactionContent!++  """+  The Node ID of the subject to modify.+  """+  subjectId: ID!+  @possibleTypes(+    concreteTypes: [+      "CommitComment"+      "Issue"+      "IssueComment"+      "PullRequest"+      "PullRequestReview"+      "PullRequestReviewComment"+      "TeamDiscussion"+      "TeamDiscussionComment"+    ]+    abstractType: "Reactable"+  )+}++"""+Autogenerated return type of RemoveReaction+"""+type RemoveReactionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The reaction object.+  """+  reaction: Reaction++  """+  The reactable subject.+  """+  subject: Reactable+}++"""+Autogenerated input type of RemoveStar+"""+input RemoveStarInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Starrable ID to unstar.+  """+  starrableId: ID!+  @possibleTypes(+    concreteTypes: ["Gist", "Repository", "Topic"]+    abstractType: "Starrable"+  )+}++"""+Autogenerated return type of RemoveStar+"""+type RemoveStarPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The starrable.+  """+  starrable: Starrable+}++"""+Represents a 'removed_from_project' event on a given issue or pull request.+"""+type RemovedFromProjectEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  Project referenced by event.+  """+  project: Project @preview(toggledBy: "starfox-preview")++  """+  Column name referenced by this project event.+  """+  projectColumnName: String! @preview(toggledBy: "starfox-preview")+}++"""+Represents a 'renamed' event on a given issue or pull request+"""+type RenamedTitleEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the current title of the issue or pull request.+  """+  currentTitle: String!+  id: ID!++  """+  Identifies the previous title of the issue or pull request.+  """+  previousTitle: String!++  """+  Subject that was renamed.+  """+  subject: RenamedTitleSubject!+}++"""+An object which has a renamable title+"""+union RenamedTitleSubject = Issue | PullRequest++"""+Autogenerated input type of ReopenIssue+"""+input ReopenIssueInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the issue to be opened.+  """+  issueId: ID! @possibleTypes(concreteTypes: ["Issue"])+}++"""+Autogenerated return type of ReopenIssue+"""+type ReopenIssuePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The issue that was opened.+  """+  issue: Issue+}++"""+Autogenerated input type of ReopenPullRequest+"""+input ReopenPullRequestInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the pull request to be reopened.+  """+  pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])+}++"""+Autogenerated return type of ReopenPullRequest+"""+type ReopenPullRequestPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The pull request that was reopened.+  """+  pullRequest: PullRequest+}++"""+Represents a 'reopened' event on any `Closable`.+"""+type ReopenedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Object that was reopened.+  """+  closable: Closable!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!+}++"""+Audit log entry for a repo.access event.+"""+type RepoAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI++  """+  The visibility of the repository+  """+  visibility: RepoAccessAuditEntryVisibility+}++"""+The privacy of a repository+"""+enum RepoAccessAuditEntryVisibility {+  """+  The repository is visible only to users in the same business.+  """+  INTERNAL++  """+  The repository is visible only to those with explicit access.+  """+  PRIVATE++  """+  The repository is visible to everyone.+  """+  PUBLIC+}++"""+Audit log entry for a repo.add_member event.+"""+type RepoAddMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI++  """+  The visibility of the repository+  """+  visibility: RepoAddMemberAuditEntryVisibility+}++"""+The privacy of a repository+"""+enum RepoAddMemberAuditEntryVisibility {+  """+  The repository is visible only to users in the same business.+  """+  INTERNAL++  """+  The repository is visible only to those with explicit access.+  """+  PRIVATE++  """+  The repository is visible to everyone.+  """+  PUBLIC+}++"""+Audit log entry for a repo.add_topic event.+"""+type RepoAddTopicAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData & TopicAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The name of the topic added to the repository+  """+  topic: Topic++  """+  The name of the topic added to the repository+  """+  topicName: String++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.archived event.+"""+type RepoArchivedAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI++  """+  The visibility of the repository+  """+  visibility: RepoArchivedAuditEntryVisibility+}++"""+The privacy of a repository+"""+enum RepoArchivedAuditEntryVisibility {+  """+  The repository is visible only to users in the same business.+  """+  INTERNAL++  """+  The repository is visible only to those with explicit access.+  """+  PRIVATE++  """+  The repository is visible to everyone.+  """+  PUBLIC+}++"""+Audit log entry for a repo.change_merge_setting event.+"""+type RepoChangeMergeSettingAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  Whether the change was to enable (true) or disable (false) the merge type+  """+  isEnabled: Boolean++  """+  The merge method affected by the change+  """+  mergeType: RepoChangeMergeSettingAuditEntryMergeType++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The merge options available for pull requests to this repository.+"""+enum RepoChangeMergeSettingAuditEntryMergeType {+  """+  The pull request is added to the base branch in a merge commit.+  """+  MERGE++  """+  Commits from the pull request are added onto the base branch individually without a merge commit.+  """+  REBASE++  """+  The pull request's commits are squashed into a single commit before they are merged to the base branch.+  """+  SQUASH+}++"""+Audit log entry for a repo.config.disable_anonymous_git_access event.+"""+type RepoConfigDisableAnonymousGitAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.disable_collaborators_only event.+"""+type RepoConfigDisableCollaboratorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.disable_contributors_only event.+"""+type RepoConfigDisableContributorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.disable_sockpuppet_disallowed event.+"""+type RepoConfigDisableSockpuppetDisallowedAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.enable_anonymous_git_access event.+"""+type RepoConfigEnableAnonymousGitAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.enable_collaborators_only event.+"""+type RepoConfigEnableCollaboratorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.enable_contributors_only event.+"""+type RepoConfigEnableContributorsOnlyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.enable_sockpuppet_disallowed event.+"""+type RepoConfigEnableSockpuppetDisallowedAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.lock_anonymous_git_access event.+"""+type RepoConfigLockAnonymousGitAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.config.unlock_anonymous_git_access event.+"""+type RepoConfigUnlockAnonymousGitAccessAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repo.create event.+"""+type RepoCreateAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The name of the parent repository for this forked repository.+  """+  forkParentName: String++  """+  The name of the root repository for this netork.+  """+  forkSourceName: String+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI++  """+  The visibility of the repository+  """+  visibility: RepoCreateAuditEntryVisibility+}++"""+The privacy of a repository+"""+enum RepoCreateAuditEntryVisibility {+  """+  The repository is visible only to users in the same business.+  """+  INTERNAL++  """+  The repository is visible only to those with explicit access.+  """+  PRIVATE++  """+  The repository is visible to everyone.+  """+  PUBLIC+}++"""+Audit log entry for a repo.destroy event.+"""+type RepoDestroyAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI++  """+  The visibility of the repository+  """+  visibility: RepoDestroyAuditEntryVisibility+}++"""+The privacy of a repository+"""+enum RepoDestroyAuditEntryVisibility {+  """+  The repository is visible only to users in the same business.+  """+  INTERNAL++  """+  The repository is visible only to those with explicit access.+  """+  PRIVATE++  """+  The repository is visible to everyone.+  """+  PUBLIC+}++"""+Audit log entry for a repo.remove_member event.+"""+type RepoRemoveMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI++  """+  The visibility of the repository+  """+  visibility: RepoRemoveMemberAuditEntryVisibility+}++"""+The privacy of a repository+"""+enum RepoRemoveMemberAuditEntryVisibility {+  """+  The repository is visible only to users in the same business.+  """+  INTERNAL++  """+  The repository is visible only to those with explicit access.+  """+  PRIVATE++  """+  The repository is visible to everyone.+  """+  PUBLIC+}++"""+Audit log entry for a repo.remove_topic event.+"""+type RepoRemoveTopicAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData & TopicAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The name of the topic added to the repository+  """+  topic: Topic++  """+  The name of the topic added to the repository+  """+  topicName: String++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The reasons a piece of content can be reported or minimized.+"""+enum ReportedContentClassifiers {+  """+  An abusive or harassing piece of content+  """+  ABUSE++  """+  A duplicated piece of content+  """+  DUPLICATE++  """+  An irrelevant piece of content+  """+  OFF_TOPIC++  """+  An outdated piece of content+  """+  OUTDATED++  """+  The content has been resolved+  """+  RESOLVED++  """+  A spammy piece of content+  """+  SPAM+}++"""+A repository contains the content for a project.+"""+type Repository implements Node & PackageOwner & ProjectOwner & RepositoryInfo & Starrable & Subscribable & UniformResourceLocatable {+  """+  A list of users that can be assigned to issues in this repository.+  """+  assignableUsers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filters users with query on user name and login+    """+    query: String+  ): UserConnection!++  """+  A list of branch protection rules for this repository.+  """+  branchProtectionRules(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): BranchProtectionRuleConnection!++  """+  Returns the code of conduct for this repository+  """+  codeOfConduct: CodeOfConduct++  """+  A list of collaborators associated with the repository.+  """+  collaborators(+    """+    Collaborators affiliation level with a repository.+    """+    affiliation: CollaboratorAffiliation++    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filters users with query on user name and login+    """+    query: String+  ): RepositoryCollaboratorConnection++  """+  A list of commit comments associated with the repository.+  """+  commitComments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CommitCommentConnection!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The Ref associated with the repository's default branch.+  """+  defaultBranchRef: Ref++  """+  Whether or not branches are automatically deleted when merged in this repository.+  """+  deleteBranchOnMerge: Boolean!++  """+  A list of dependency manifests contained in the repository+  """+  dependencyGraphManifests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Cursor to paginate dependencies+    """+    dependenciesAfter: String++    """+    Number of dependencies to fetch+    """+    dependenciesFirst: Int++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Flag to scope to only manifests with dependencies+    """+    withDependencies: Boolean+  ): DependencyGraphManifestConnection @preview(toggledBy: "hawkgirl-preview")++  """+  A list of deploy keys that are on this repository.+  """+  deployKeys(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): DeployKeyConnection!++  """+  Deployments associated with the repository+  """+  deployments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Environments to list deployments for+    """+    environments: [String!]++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for deployments returned from the connection.+    """+    orderBy: DeploymentOrder = { field: CREATED_AT, direction: ASC }+  ): DeploymentConnection!++  """+  The description of the repository.+  """+  description: String++  """+  The description of the repository rendered to HTML.+  """+  descriptionHTML: HTML!++  """+  The number of kilobytes this repository occupies on disk.+  """+  diskUsage: Int++  """+  Returns how many forks there are of this repository in the whole network.+  """+  forkCount: Int!++  """+  A list of direct forked repositories.+  """+  forks(+    """+    Array of viewer's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    current viewer owns.+    """+    affiliations: [RepositoryAffiliation]++    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    If non-null, filters repositories according to whether they have been locked+    """+    isLocked: Boolean++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories returned from the connection+    """+    orderBy: RepositoryOrder++    """+    Array of owner's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    organization or user being viewed owns.+    """+    ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]++    """+    If non-null, filters repositories according to privacy+    """+    privacy: RepositoryPrivacy+  ): RepositoryConnection!++  """+  The funding links for this repository+  """+  fundingLinks: [FundingLink!]!++  """+  Indicates if the repository has issues feature enabled.+  """+  hasIssuesEnabled: Boolean!++  """+  Indicates if the repository has the Projects feature enabled.+  """+  hasProjectsEnabled: Boolean!++  """+  Indicates if the repository has wiki feature enabled.+  """+  hasWikiEnabled: Boolean!++  """+  The repository's URL.+  """+  homepageUrl: URI+  id: ID!++  """+  Indicates if the repository is unmaintained.+  """+  isArchived: Boolean!++  """+  Returns whether or not this repository disabled.+  """+  isDisabled: Boolean!++  """+  Returns whether or not this repository is empty.+  """+  isEmpty: Boolean!++  """+  Identifies if the repository is a fork.+  """+  isFork: Boolean!++  """+  Indicates if the repository has been locked or not.+  """+  isLocked: Boolean!++  """+  Identifies if the repository is a mirror.+  """+  isMirror: Boolean!++  """+  Identifies if the repository is private.+  """+  isPrivate: Boolean!++  """+  Identifies if the repository is a template that can be used to generate new repositories.+  """+  isTemplate: Boolean!++  """+  Returns a single issue from the current repository by number.+  """+  issue(+    """+    The number for the issue to be returned.+    """+    number: Int!+  ): Issue++  """+  Returns a single issue-like object from the current repository by number.+  """+  issueOrPullRequest(+    """+    The number for the issue to be returned.+    """+    number: Int!+  ): IssueOrPullRequest++  """+  A list of issues that have been opened in the repository.+  """+  issues(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Filtering options for issues returned from the connection.+    """+    filterBy: IssueFilters++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for issues returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the issues by.+    """+    states: [IssueState!]+  ): IssueConnection!++  """+  Returns a single label by name+  """+  label(+    """+    Label name+    """+    name: String!+  ): Label++  """+  A list of labels associated with the repository.+  """+  labels(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for labels returned from the connection.+    """+    orderBy: LabelOrder = { field: CREATED_AT, direction: ASC }++    """+    If provided, searches labels by name and description.+    """+    query: String+  ): LabelConnection++  """+  A list containing a breakdown of the language composition of the repository.+  """+  languages(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: LanguageOrder+  ): LanguageConnection++  """+  The license associated with the repository+  """+  licenseInfo: License++  """+  The reason the repository has been locked.+  """+  lockReason: RepositoryLockReason++  """+  A list of Users that can be mentioned in the context of the repository.+  """+  mentionableUsers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filters users with query on user name and login+    """+    query: String+  ): UserConnection!++  """+  Whether or not PRs are merged with a merge commit on this repository.+  """+  mergeCommitAllowed: Boolean!++  """+  Returns a single milestone from the current repository by number.+  """+  milestone(+    """+    The number for the milestone to be returned.+    """+    number: Int!+  ): Milestone++  """+  A list of milestones associated with the repository.+  """+  milestones(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for milestones.+    """+    orderBy: MilestoneOrder++    """+    Filters milestones with a query on the title+    """+    query: String++    """+    Filter by the state of the milestones.+    """+    states: [MilestoneState!]+  ): MilestoneConnection++  """+  The repository's original mirror URL.+  """+  mirrorUrl: URI++  """+  The name of the repository.+  """+  name: String!++  """+  The repository's name with owner.+  """+  nameWithOwner: String!++  """+  A Git object in the repository+  """+  object(+    """+    A Git revision expression suitable for rev-parse+    """+    expression: String++    """+    The Git object ID+    """+    oid: GitObjectID+  ): GitObject++  """+  The image used to represent this repository in Open Graph data.+  """+  openGraphImageUrl: URI!++  """+  The User owner of the repository.+  """+  owner: RepositoryOwner!++  """+  A list of packages under the owner.+  """+  packages(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Find packages by their names.+    """+    names: [String]++    """+    Ordering of the returned packages.+    """+    orderBy: PackageOrder = { field: CREATED_AT, direction: DESC }++    """+    Filter registry package by type.+    """+    packageType: PackageType++    """+    Find packages in a repository by ID.+    """+    repositoryId: ID+  ): PackageConnection!++  """+  The repository parent, if this is a fork.+  """+  parent: Repository++  """+  A list of pinned issues for this repository.+  """+  pinnedIssues(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): PinnedIssueConnection @preview(toggledBy: "elektra-preview")++  """+  The primary language of the repository's code.+  """+  primaryLanguage: Language++  """+  Find project by number.+  """+  project(+    """+    The project number to find.+    """+    number: Int!+  ): Project++  """+  A list of projects under the owner.+  """+  projects(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for projects returned from the connection+    """+    orderBy: ProjectOrder++    """+    Query to search projects by, currently only searching by name.+    """+    search: String++    """+    A list of states to filter the projects by.+    """+    states: [ProjectState!]+  ): ProjectConnection!++  """+  The HTTP path listing the repository's projects+  """+  projectsResourcePath: URI!++  """+  The HTTP URL listing the repository's projects+  """+  projectsUrl: URI!++  """+  Returns a single pull request from the current repository by number.+  """+  pullRequest(+    """+    The number for the pull request to be returned.+    """+    number: Int!+  ): PullRequest++  """+  A list of pull requests that have been opened in the repository.+  """+  pullRequests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    The base ref name to filter the pull requests by.+    """+    baseRefName: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    The head ref name to filter the pull requests by.+    """+    headRefName: String++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pull requests returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the pull requests by.+    """+    states: [PullRequestState!]+  ): PullRequestConnection!++  """+  Identifies when the repository was last pushed to.+  """+  pushedAt: DateTime++  """+  Whether or not rebase-merging is enabled on this repository.+  """+  rebaseMergeAllowed: Boolean!++  """+  Fetch a given ref from the repository+  """+  ref(+    """+    The ref to retrieve. Fully qualified matches are checked in order+    (`refs/heads/master`) before falling back onto checks for short name matches (`master`).+    """+    qualifiedName: String!+  ): Ref++  """+  Fetch a list of refs from the repository+  """+  refs(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    DEPRECATED: use orderBy. The ordering direction.+    """+    direction: OrderDirection++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for refs returned from the connection.+    """+    orderBy: RefOrder++    """+    Filters refs with query on name+    """+    query: String++    """+    A ref name prefix like `refs/heads/`, `refs/tags/`, etc.+    """+    refPrefix: String!+  ): RefConnection++  """+  Lookup a single release given various criteria.+  """+  release(+    """+    The name of the Tag the Release was created from+    """+    tagName: String!+  ): Release++  """+  List of releases which are dependent on this repository.+  """+  releases(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: ReleaseOrder+  ): ReleaseConnection!++  """+  A list of applied repository-topic associations for this repository.+  """+  repositoryTopics(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): RepositoryTopicConnection!++  """+  The HTTP path for this repository+  """+  resourcePath: URI!++  """+  A description of the repository, rendered to HTML without any links in it.+  """+  shortDescriptionHTML(+    """+    How many characters to return.+    """+    limit: Int = 200+  ): HTML!++  """+  Whether or not squash-merging is enabled on this repository.+  """+  squashMergeAllowed: Boolean!++  """+  The SSH URL to clone this repository+  """+  sshUrl: GitSSHRemote!++  """+  A list of users who have starred this starrable.+  """+  stargazers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: StarOrder+  ): StargazerConnection!++  """+  Returns a list of all submodules in this repository parsed from the+  .gitmodules file as of the default branch's HEAD commit.+  """+  submodules(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): SubmoduleConnection!++  """+  Temporary authentication token for cloning this repository.+  """+  tempCloneToken: String++  """+  The repository from which this repository was generated, if any.+  """+  templateRepository: Repository++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this repository+  """+  url: URI!++  """+  Whether this repository has a custom image to use with Open Graph as opposed to being represented by the owner's avatar.+  """+  usesCustomOpenGraphImage: Boolean!++  """+  Indicates whether the viewer has admin permissions on this repository.+  """+  viewerCanAdminister: Boolean!++  """+  Can the current viewer create new projects on this owner.+  """+  viewerCanCreateProjects: Boolean!++  """+  Check if the viewer is able to change their subscription status for the repository.+  """+  viewerCanSubscribe: Boolean!++  """+  Indicates whether the viewer can update the topics of this repository.+  """+  viewerCanUpdateTopics: Boolean!++  """+  The last commit email for the viewer.+  """+  viewerDefaultCommitEmail: String++  """+  The last used merge method by the viewer or the default for the repository.+  """+  viewerDefaultMergeMethod: PullRequestMergeMethod!++  """+  Returns a boolean indicating whether the viewing user has starred this starrable.+  """+  viewerHasStarred: Boolean!++  """+  The users permission level on the repository. Will return null if authenticated as an GitHub App.+  """+  viewerPermission: RepositoryPermission++  """+  A list of emails this viewer can commit with.+  """+  viewerPossibleCommitEmails: [String!]++  """+  Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.+  """+  viewerSubscription: SubscriptionState++  """+  A list of vulnerability alerts that are on this repository.+  """+  vulnerabilityAlerts(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): RepositoryVulnerabilityAlertConnection++  """+  A list of users watching the repository.+  """+  watchers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserConnection!+}++"""+The affiliation of a user to a repository+"""+enum RepositoryAffiliation {+  """+  Repositories that the user has been added to as a collaborator.+  """+  COLLABORATOR++  """+  Repositories that the user has access to through being a member of an+  organization. This includes every repository on every team that the user is on.+  """+  ORGANIZATION_MEMBER++  """+  Repositories that are owned by the authenticated user.+  """+  OWNER+}++"""+Metadata for an audit entry with action repo.*+"""+interface RepositoryAuditEntryData {+  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI+}++"""+The connection type for User.+"""+type RepositoryCollaboratorConnection {+  """+  A list of edges.+  """+  edges: [RepositoryCollaboratorEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Represents a user who is a collaborator of a repository.+"""+type RepositoryCollaboratorEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!+  node: User!++  """+  The permission the user has on the repository.++  **Upcoming Change on 2020-10-01 UTC**+  **Description:** Type for `permission` will change from `RepositoryPermission!` to `String`.+  **Reason:** This field may return additional values+  """+  permission: RepositoryPermission!++  """+  A list of sources for the user's access to the repository.+  """+  permissionSources: [PermissionSource!]+}++"""+A list of repositories owned by the subject.+"""+type RepositoryConnection {+  """+  A list of edges.+  """+  edges: [RepositoryEdge]++  """+  A list of nodes.+  """+  nodes: [Repository]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!++  """+  The total size in kilobytes of all repositories in the connection.+  """+  totalDiskUsage: Int!+}++"""+The reason a repository is listed as 'contributed'.+"""+enum RepositoryContributionType {+  """+  Created a commit+  """+  COMMIT++  """+  Created an issue+  """+  ISSUE++  """+  Created a pull request+  """+  PULL_REQUEST++  """+  Reviewed a pull request+  """+  PULL_REQUEST_REVIEW++  """+  Created the repository+  """+  REPOSITORY+}++"""+An edge in a connection.+"""+type RepositoryEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Repository+}++"""+A subset of repository info.+"""+interface RepositoryInfo {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The description of the repository.+  """+  description: String++  """+  The description of the repository rendered to HTML.+  """+  descriptionHTML: HTML!++  """+  Returns how many forks there are of this repository in the whole network.+  """+  forkCount: Int!++  """+  Indicates if the repository has issues feature enabled.+  """+  hasIssuesEnabled: Boolean!++  """+  Indicates if the repository has the Projects feature enabled.+  """+  hasProjectsEnabled: Boolean!++  """+  Indicates if the repository has wiki feature enabled.+  """+  hasWikiEnabled: Boolean!++  """+  The repository's URL.+  """+  homepageUrl: URI++  """+  Indicates if the repository is unmaintained.+  """+  isArchived: Boolean!++  """+  Identifies if the repository is a fork.+  """+  isFork: Boolean!++  """+  Indicates if the repository has been locked or not.+  """+  isLocked: Boolean!++  """+  Identifies if the repository is a mirror.+  """+  isMirror: Boolean!++  """+  Identifies if the repository is private.+  """+  isPrivate: Boolean!++  """+  Identifies if the repository is a template that can be used to generate new repositories.+  """+  isTemplate: Boolean!++  """+  The license associated with the repository+  """+  licenseInfo: License++  """+  The reason the repository has been locked.+  """+  lockReason: RepositoryLockReason++  """+  The repository's original mirror URL.+  """+  mirrorUrl: URI++  """+  The name of the repository.+  """+  name: String!++  """+  The repository's name with owner.+  """+  nameWithOwner: String!++  """+  The image used to represent this repository in Open Graph data.+  """+  openGraphImageUrl: URI!++  """+  The User owner of the repository.+  """+  owner: RepositoryOwner!++  """+  Identifies when the repository was last pushed to.+  """+  pushedAt: DateTime++  """+  The HTTP path for this repository+  """+  resourcePath: URI!++  """+  A description of the repository, rendered to HTML without any links in it.+  """+  shortDescriptionHTML(+    """+    How many characters to return.+    """+    limit: Int = 200+  ): HTML!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this repository+  """+  url: URI!++  """+  Whether this repository has a custom image to use with Open Graph as opposed to being represented by the owner's avatar.+  """+  usesCustomOpenGraphImage: Boolean!+}++"""+An invitation for a user to be added to a repository.+"""+type RepositoryInvitation implements Node {+  """+  The email address that received the invitation.+  """+  email: String+  id: ID!++  """+  The user who received the invitation.+  """+  invitee: User++  """+  The user who created the invitation.+  """+  inviter: User!++  """+  The permission granted on this repository by this invitation.++  **Upcoming Change on 2020-10-01 UTC**+  **Description:** Type for `permission` will change from `RepositoryPermission!` to `String`.+  **Reason:** This field may return additional values+  """+  permission: RepositoryPermission!++  """+  The Repository the user is invited to.+  """+  repository: RepositoryInfo+}++"""+The connection type for RepositoryInvitation.+"""+type RepositoryInvitationConnection {+  """+  A list of edges.+  """+  edges: [RepositoryInvitationEdge]++  """+  A list of nodes.+  """+  nodes: [RepositoryInvitation]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type RepositoryInvitationEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: RepositoryInvitation+}++"""+Ordering options for repository invitation connections.+"""+input RepositoryInvitationOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order repository invitations by.+  """+  field: RepositoryInvitationOrderField!+}++"""+Properties by which repository invitation connections can be ordered.+"""+enum RepositoryInvitationOrderField {+  """+  Order repository invitations by creation time+  """+  CREATED_AT++  """+  Order repository invitations by invitee login+  """+  INVITEE_LOGIN+  @deprecated(+    reason: "`INVITEE_LOGIN` is no longer a valid field value. Repository invitations can now be associated with an email, not only an invitee. Removal on 2020-10-01 UTC."+  )+}++"""+The possible reasons a given repository could be in a locked state.+"""+enum RepositoryLockReason {+  """+  The repository is locked due to a billing related reason.+  """+  BILLING++  """+  The repository is locked due to a migration.+  """+  MIGRATING++  """+  The repository is locked due to a move.+  """+  MOVING++  """+  The repository is locked due to a rename.+  """+  RENAME+}++"""+Represents a object that belongs to a repository.+"""+interface RepositoryNode {+  """+  The repository associated with this node.+  """+  repository: Repository!+}++"""+Ordering options for repository connections+"""+input RepositoryOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order repositories by.+  """+  field: RepositoryOrderField!+}++"""+Properties by which repository connections can be ordered.+"""+enum RepositoryOrderField {+  """+  Order repositories by creation time+  """+  CREATED_AT++  """+  Order repositories by name+  """+  NAME++  """+  Order repositories by push time+  """+  PUSHED_AT++  """+  Order repositories by number of stargazers+  """+  STARGAZERS++  """+  Order repositories by update time+  """+  UPDATED_AT+}++"""+Represents an owner of a Repository.+"""+interface RepositoryOwner {+  """+  A URL pointing to the owner's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!+  id: ID!++  """+  The username used to login.+  """+  login: String!++  """+  A list of repositories that the user owns.+  """+  repositories(+    """+    Array of viewer's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    current viewer owns.+    """+    affiliations: [RepositoryAffiliation]++    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    If non-null, filters repositories according to whether they are forks of another repository+    """+    isFork: Boolean++    """+    If non-null, filters repositories according to whether they have been locked+    """+    isLocked: Boolean++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories returned from the connection+    """+    orderBy: RepositoryOrder++    """+    Array of owner's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    organization or user being viewed owns.+    """+    ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]++    """+    If non-null, filters repositories according to privacy+    """+    privacy: RepositoryPrivacy+  ): RepositoryConnection!++  """+  Find Repository.+  """+  repository(+    """+    Name of Repository to find.+    """+    name: String!+  ): Repository++  """+  The HTTP URL for the owner.+  """+  resourcePath: URI!++  """+  The HTTP URL for the owner.+  """+  url: URI!+}++"""+The access level to a repository+"""+enum RepositoryPermission {+  """+  Can read, clone, and push to this repository. Can also manage issues, pull+  requests, and repository settings, including adding collaborators+  """+  ADMIN++  """+  Can read, clone, and push to this repository. They can also manage issues, pull requests, and some repository settings+  """+  MAINTAIN++  """+  Can read and clone this repository. Can also open and comment on issues and pull requests+  """+  READ++  """+  Can read and clone this repository. Can also manage issues and pull requests+  """+  TRIAGE++  """+  Can read, clone, and push to this repository. Can also manage issues and pull requests+  """+  WRITE+}++"""+The privacy of a repository+"""+enum RepositoryPrivacy {+  """+  Private+  """+  PRIVATE++  """+  Public+  """+  PUBLIC+}++"""+A repository-topic connects a repository to a topic.+"""+type RepositoryTopic implements Node & UniformResourceLocatable {+  id: ID!++  """+  The HTTP path for this repository-topic.+  """+  resourcePath: URI!++  """+  The topic.+  """+  topic: Topic!++  """+  The HTTP URL for this repository-topic.+  """+  url: URI!+}++"""+The connection type for RepositoryTopic.+"""+type RepositoryTopicConnection {+  """+  A list of edges.+  """+  edges: [RepositoryTopicEdge]++  """+  A list of nodes.+  """+  nodes: [RepositoryTopic]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type RepositoryTopicEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: RepositoryTopic+}++"""+The repository's visibility level.+"""+enum RepositoryVisibility {+  """+  The repository is visible only to users in the same business.+  """+  INTERNAL++  """+  The repository is visible only to those with explicit access.+  """+  PRIVATE++  """+  The repository is visible to everyone.+  """+  PUBLIC+}++"""+Audit log entry for a repository_visibility_change.disable event.+"""+type RepositoryVisibilityChangeDisableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a repository_visibility_change.enable event.+"""+type RepositoryVisibilityChangeEnableAuditEntry implements AuditEntry & EnterpriseAuditEntryData & Node & OrganizationAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!++  """+  The HTTP path for this enterprise.+  """+  enterpriseResourcePath: URI++  """+  The slug of the enterprise.+  """+  enterpriseSlug: String++  """+  The HTTP URL for this enterprise.+  """+  enterpriseUrl: URI+  id: ID!++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+A alert for a repository with an affected vulnerability.+"""+type RepositoryVulnerabilityAlert implements Node & RepositoryNode {+  """+  When was the alert created?+  """+  createdAt: DateTime!++  """+  The reason the alert was dismissed+  """+  dismissReason: String++  """+  When was the alert dimissed?+  """+  dismissedAt: DateTime++  """+  The user who dismissed the alert+  """+  dismisser: User+  id: ID!++  """+  The associated repository+  """+  repository: Repository!++  """+  The associated security advisory+  """+  securityAdvisory: SecurityAdvisory++  """+  The associated security vulnerablity+  """+  securityVulnerability: SecurityVulnerability++  """+  The vulnerable manifest filename+  """+  vulnerableManifestFilename: String!++  """+  The vulnerable manifest path+  """+  vulnerableManifestPath: String!++  """+  The vulnerable requirements+  """+  vulnerableRequirements: String+}++"""+The connection type for RepositoryVulnerabilityAlert.+"""+type RepositoryVulnerabilityAlertConnection {+  """+  A list of edges.+  """+  edges: [RepositoryVulnerabilityAlertEdge]++  """+  A list of nodes.+  """+  nodes: [RepositoryVulnerabilityAlert]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type RepositoryVulnerabilityAlertEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: RepositoryVulnerabilityAlert+}++"""+Autogenerated input type of RequestReviews+"""+input RequestReviewsInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the pull request to modify.+  """+  pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])++  """+  The Node IDs of the team to request.+  """+  teamIds: [ID!] @possibleTypes(concreteTypes: ["Team"])++  """+  Add users to the set rather than replace.+  """+  union: Boolean++  """+  The Node IDs of the user to request.+  """+  userIds: [ID!] @possibleTypes(concreteTypes: ["User"])+}++"""+Autogenerated return type of RequestReviews+"""+type RequestReviewsPayload {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The pull request that is getting requests.+  """+  pullRequest: PullRequest++  """+  The edge from the pull request to the requested reviewers.+  """+  requestedReviewersEdge: UserEdge+}++"""+The possible states that can be requested when creating a check run.+"""+enum RequestableCheckStatusState @preview(toggledBy: "antiope-preview") {+  """+  The check suite or run has been completed.+  """+  COMPLETED++  """+  The check suite or run is in progress.+  """+  IN_PROGRESS++  """+  The check suite or run has been queued.+  """+  QUEUED+}++"""+Types that can be requested reviewers.+"""+union RequestedReviewer = Mannequin | Team | User++"""+Autogenerated input type of RerequestCheckSuite+"""+input RerequestCheckSuiteInput @preview(toggledBy: "antiope-preview") {+  """+  The Node ID of the check suite.+  """+  checkSuiteId: ID! @possibleTypes(concreteTypes: ["CheckSuite"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of RerequestCheckSuite+"""+type RerequestCheckSuitePayload @preview(toggledBy: "antiope-preview") {+  """+  The requested check suite.+  """+  checkSuite: CheckSuite++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of ResolveReviewThread+"""+input ResolveReviewThreadInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the thread to resolve+  """+  threadId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewThread"])+}++"""+Autogenerated return type of ResolveReviewThread+"""+type ResolveReviewThreadPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The thread to resolve.+  """+  thread: PullRequestReviewThread+}++"""+Represents a private contribution a user made on GitHub.+"""+type RestrictedContribution implements Contribution {+  """+  Whether this contribution is associated with a record you do not have access to. For+  example, your own 'first issue' contribution may have been made on a repository you can no+  longer access.+  """+  isRestricted: Boolean!++  """+  When this contribution was made.+  """+  occurredAt: DateTime!++  """+  The HTTP path for this contribution.+  """+  resourcePath: URI!++  """+  The HTTP URL for this contribution.+  """+  url: URI!++  """+  The user who made this contribution.+  """+  user: User!+}++"""+A team or user who has the ability to dismiss a review on a protected branch.+"""+type ReviewDismissalAllowance implements Node {+  """+  The actor that can dismiss.+  """+  actor: ReviewDismissalAllowanceActor++  """+  Identifies the branch protection rule associated with the allowed user or team.+  """+  branchProtectionRule: BranchProtectionRule+  id: ID!+}++"""+Types that can be an actor.+"""+union ReviewDismissalAllowanceActor = Team | User++"""+The connection type for ReviewDismissalAllowance.+"""+type ReviewDismissalAllowanceConnection {+  """+  A list of edges.+  """+  edges: [ReviewDismissalAllowanceEdge]++  """+  A list of nodes.+  """+  nodes: [ReviewDismissalAllowance]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type ReviewDismissalAllowanceEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: ReviewDismissalAllowance+}++"""+Represents a 'review_dismissed' event on a given issue or pull request.+"""+type ReviewDismissedEvent implements Node & UniformResourceLocatable {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  Identifies the optional message associated with the 'review_dismissed' event.+  """+  dismissalMessage: String++  """+  Identifies the optional message associated with the event, rendered to HTML.+  """+  dismissalMessageHTML: String+  id: ID!++  """+  Identifies the previous state of the review with the 'review_dismissed' event.+  """+  previousReviewState: PullRequestReviewState!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  Identifies the commit which caused the review to become stale.+  """+  pullRequestCommit: PullRequestCommit++  """+  The HTTP path for this review dismissed event.+  """+  resourcePath: URI!++  """+  Identifies the review associated with the 'review_dismissed' event.+  """+  review: PullRequestReview++  """+  The HTTP URL for this review dismissed event.+  """+  url: URI!+}++"""+A request for a user to review a pull request.+"""+type ReviewRequest implements Node {+  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  Identifies the pull request associated with this review request.+  """+  pullRequest: PullRequest!++  """+  The reviewer that is requested.+  """+  requestedReviewer: RequestedReviewer+}++"""+The connection type for ReviewRequest.+"""+type ReviewRequestConnection {+  """+  A list of edges.+  """+  edges: [ReviewRequestEdge]++  """+  A list of nodes.+  """+  nodes: [ReviewRequest]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type ReviewRequestEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: ReviewRequest+}++"""+Represents an 'review_request_removed' event on a given pull request.+"""+type ReviewRequestRemovedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  Identifies the reviewer whose review request was removed.+  """+  requestedReviewer: RequestedReviewer+}++"""+Represents an 'review_requested' event on a given pull request.+"""+type ReviewRequestedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  PullRequest referenced by event.+  """+  pullRequest: PullRequest!++  """+  Identifies the reviewer whose review was requested.+  """+  requestedReviewer: RequestedReviewer+}++"""+A hovercard context with a message describing the current code review state of the pull+request.+"""+type ReviewStatusHovercardContext implements HovercardContext {+  """+  A string describing this context+  """+  message: String!++  """+  An octicon to accompany this context+  """+  octicon: String!++  """+  The current status of the pull request with respect to code review.+  """+  reviewDecision: PullRequestReviewDecision+}++"""+The possible digest algorithms used to sign SAML requests for an identity provider.+"""+enum SamlDigestAlgorithm {+  """+  SHA1+  """+  SHA1++  """+  SHA256+  """+  SHA256++  """+  SHA384+  """+  SHA384++  """+  SHA512+  """+  SHA512+}++"""+The possible signature algorithms used to sign SAML requests for a Identity Provider.+"""+enum SamlSignatureAlgorithm {+  """+  RSA-SHA1+  """+  RSA_SHA1++  """+  RSA-SHA256+  """+  RSA_SHA256++  """+  RSA-SHA384+  """+  RSA_SHA384++  """+  RSA-SHA512+  """+  RSA_SHA512+}++"""+A Saved Reply is text a user can use to reply quickly.+"""+type SavedReply implements Node {+  """+  The body of the saved reply.+  """+  body: String!++  """+  The saved reply body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int+  id: ID!++  """+  The title of the saved reply.+  """+  title: String!++  """+  The user that saved this reply.+  """+  user: Actor+}++"""+The connection type for SavedReply.+"""+type SavedReplyConnection {+  """+  A list of edges.+  """+  edges: [SavedReplyEdge]++  """+  A list of nodes.+  """+  nodes: [SavedReply]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type SavedReplyEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: SavedReply+}++"""+Ordering options for saved reply connections.+"""+input SavedReplyOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order saved replies by.+  """+  field: SavedReplyOrderField!+}++"""+Properties by which saved reply connections can be ordered.+"""+enum SavedReplyOrderField {+  """+  Order saved reply by when they were updated.+  """+  UPDATED_AT+}++"""+The results of a search.+"""+union SearchResultItem =+    App+  | Issue+  | MarketplaceListing+  | Organization+  | PullRequest+  | Repository+  | User++"""+A list of results that matched against a search query.+"""+type SearchResultItemConnection {+  """+  The number of pieces of code that matched the search query.+  """+  codeCount: Int!++  """+  A list of edges.+  """+  edges: [SearchResultItemEdge]++  """+  The number of issues that matched the search query.+  """+  issueCount: Int!++  """+  A list of nodes.+  """+  nodes: [SearchResultItem]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  The number of repositories that matched the search query.+  """+  repositoryCount: Int!++  """+  The number of users that matched the search query.+  """+  userCount: Int!++  """+  The number of wiki pages that matched the search query.+  """+  wikiCount: Int!+}++"""+An edge in a connection.+"""+type SearchResultItemEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: SearchResultItem++  """+  Text matches on the result found.+  """+  textMatches: [TextMatch]+}++"""+Represents the individual results of a search.+"""+enum SearchType {+  """+  Returns results matching issues in repositories.+  """+  ISSUE++  """+  Returns results matching repositories.+  """+  REPOSITORY++  """+  Returns results matching users and organizations on GitHub.+  """+  USER+}++"""+A GitHub Security Advisory+"""+type SecurityAdvisory implements Node {+  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  This is a long plaintext description of the advisory+  """+  description: String!++  """+  The GitHub Security Advisory ID+  """+  ghsaId: String!+  id: ID!++  """+  A list of identifiers for this advisory+  """+  identifiers: [SecurityAdvisoryIdentifier!]!++  """+  The organization that originated the advisory+  """+  origin: String!++  """+  The permalink for the advisory+  """+  permalink: URI++  """+  When the advisory was published+  """+  publishedAt: DateTime!++  """+  A list of references for this advisory+  """+  references: [SecurityAdvisoryReference!]!++  """+  The severity of the advisory+  """+  severity: SecurityAdvisorySeverity!++  """+  A short plaintext summary of the advisory+  """+  summary: String!++  """+  When the advisory was last updated+  """+  updatedAt: DateTime!++  """+  Vulnerabilities associated with this Advisory+  """+  vulnerabilities(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    An ecosystem to filter vulnerabilities by.+    """+    ecosystem: SecurityAdvisoryEcosystem++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for the returned topics.+    """+    orderBy: SecurityVulnerabilityOrder = { field: UPDATED_AT, direction: DESC }++    """+    A package name to filter vulnerabilities by.+    """+    package: String++    """+    A list of severities to filter vulnerabilities by.+    """+    severities: [SecurityAdvisorySeverity!]+  ): SecurityVulnerabilityConnection!++  """+  When the advisory was withdrawn, if it has been withdrawn+  """+  withdrawnAt: DateTime+}++"""+The connection type for SecurityAdvisory.+"""+type SecurityAdvisoryConnection {+  """+  A list of edges.+  """+  edges: [SecurityAdvisoryEdge]++  """+  A list of nodes.+  """+  nodes: [SecurityAdvisory]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+The possible ecosystems of a security vulnerability's package.+"""+enum SecurityAdvisoryEcosystem {+  """+  PHP packages hosted at packagist.org+  """+  COMPOSER++  """+  Java artifacts hosted at the Maven central repository+  """+  MAVEN++  """+  JavaScript packages hosted at npmjs.com+  """+  NPM++  """+  .NET packages hosted at the NuGet Gallery+  """+  NUGET++  """+  Python packages hosted at PyPI.org+  """+  PIP++  """+  Ruby gems hosted at RubyGems.org+  """+  RUBYGEMS+}++"""+An edge in a connection.+"""+type SecurityAdvisoryEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: SecurityAdvisory+}++"""+A GitHub Security Advisory Identifier+"""+type SecurityAdvisoryIdentifier {+  """+  The identifier type, e.g. GHSA, CVE+  """+  type: String!++  """+  The identifier+  """+  value: String!+}++"""+An advisory identifier to filter results on.+"""+input SecurityAdvisoryIdentifierFilter {+  """+  The identifier type.+  """+  type: SecurityAdvisoryIdentifierType!++  """+  The identifier string. Supports exact or partial matching.+  """+  value: String!+}++"""+Identifier formats available for advisories.+"""+enum SecurityAdvisoryIdentifierType {+  """+  Common Vulnerabilities and Exposures Identifier.+  """+  CVE++  """+  GitHub Security Advisory ID.+  """+  GHSA+}++"""+Ordering options for security advisory connections+"""+input SecurityAdvisoryOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order security advisories by.+  """+  field: SecurityAdvisoryOrderField!+}++"""+Properties by which security advisory connections can be ordered.+"""+enum SecurityAdvisoryOrderField {+  """+  Order advisories by publication time+  """+  PUBLISHED_AT++  """+  Order advisories by update time+  """+  UPDATED_AT+}++"""+An individual package+"""+type SecurityAdvisoryPackage {+  """+  The ecosystem the package belongs to, e.g. RUBYGEMS, NPM+  """+  ecosystem: SecurityAdvisoryEcosystem!++  """+  The package name+  """+  name: String!+}++"""+An individual package version+"""+type SecurityAdvisoryPackageVersion {+  """+  The package name or version+  """+  identifier: String!+}++"""+A GitHub Security Advisory Reference+"""+type SecurityAdvisoryReference {+  """+  A publicly accessible reference+  """+  url: URI!+}++"""+Severity of the vulnerability.+"""+enum SecurityAdvisorySeverity {+  """+  Critical.+  """+  CRITICAL++  """+  High.+  """+  HIGH++  """+  Low.+  """+  LOW++  """+  Moderate.+  """+  MODERATE+}++"""+An individual vulnerability within an Advisory+"""+type SecurityVulnerability {+  """+  The Advisory associated with this Vulnerability+  """+  advisory: SecurityAdvisory!++  """+  The first version containing a fix for the vulnerability+  """+  firstPatchedVersion: SecurityAdvisoryPackageVersion++  """+  A description of the vulnerable package+  """+  package: SecurityAdvisoryPackage!++  """+  The severity of the vulnerability within this package+  """+  severity: SecurityAdvisorySeverity!++  """+  When the vulnerability was last updated+  """+  updatedAt: DateTime!++  """+  A string that describes the vulnerable package versions.+  This string follows a basic syntax with a few forms.+  + `= 0.2.0` denotes a single vulnerable version.+  + `<= 1.0.8` denotes a version range up to and including the specified version+  + `< 0.1.11` denotes a version range up to, but excluding, the specified version+  + `>= 4.3.0, < 4.3.5` denotes a version range with a known minimum and maximum version.+  + `>= 0.0.1` denotes a version range with a known minimum, but no known maximum+  """+  vulnerableVersionRange: String!+}++"""+The connection type for SecurityVulnerability.+"""+type SecurityVulnerabilityConnection {+  """+  A list of edges.+  """+  edges: [SecurityVulnerabilityEdge]++  """+  A list of nodes.+  """+  nodes: [SecurityVulnerability]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type SecurityVulnerabilityEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: SecurityVulnerability+}++"""+Ordering options for security vulnerability connections+"""+input SecurityVulnerabilityOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order security vulnerabilities by.+  """+  field: SecurityVulnerabilityOrderField!+}++"""+Properties by which security vulnerability connections can be ordered.+"""+enum SecurityVulnerabilityOrderField {+  """+  Order vulnerability by update time+  """+  UPDATED_AT+}++"""+Autogenerated input type of SetEnterpriseIdentityProvider+"""+input SetEnterpriseIdentityProviderInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The digest algorithm used to sign SAML requests for the identity provider.+  """+  digestMethod: SamlDigestAlgorithm!++  """+  The ID of the enterprise on which to set an identity provider.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The x509 certificate used by the identity provider to sign assertions and responses.+  """+  idpCertificate: String!++  """+  The Issuer Entity ID for the SAML identity provider+  """+  issuer: String++  """+  The signature algorithm used to sign SAML requests for the identity provider.+  """+  signatureMethod: SamlSignatureAlgorithm!++  """+  The URL endpoint for the identity provider's SAML SSO.+  """+  ssoUrl: URI!+}++"""+Autogenerated return type of SetEnterpriseIdentityProvider+"""+type SetEnterpriseIdentityProviderPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The identity provider for the enterprise.+  """+  identityProvider: EnterpriseIdentityProvider+}++"""+Represents an S/MIME signature on a Commit or Tag.+"""+type SmimeSignature implements GitSignature {+  """+  Email used to sign this object.+  """+  email: String!++  """+  True if the signature is valid and verified by GitHub.+  """+  isValid: Boolean!++  """+  Payload for GPG signing object. Raw ODB object without the signature header.+  """+  payload: String!++  """+  ASCII-armored signature header from object.+  """+  signature: String!++  """+  GitHub user corresponding to the email signing this commit.+  """+  signer: User++  """+  The state of this signature. `VALID` if signature is valid and verified by+  GitHub, otherwise represents reason why signature is considered invalid.+  """+  state: GitSignatureState!++  """+  True if the signature was made with GitHub's signing key.+  """+  wasSignedByGitHub: Boolean!+}++"""+Entites that can sponsor others via GitHub Sponsors+"""+union Sponsor = Organization | User++"""+Entities that can be sponsored through GitHub Sponsors+"""+interface Sponsorable {+  """+  The GitHub Sponsors listing for this user.+  """+  sponsorsListing: SponsorsListing++  """+  This object's sponsorships as the maintainer.+  """+  sponsorshipsAsMaintainer(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Whether or not to include private sponsorships in the result set+    """+    includePrivate: Boolean = false++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for sponsorships returned from this connection. If left+    blank, the sponsorships will be ordered based on relevancy to the viewer.+    """+    orderBy: SponsorshipOrder+  ): SponsorshipConnection!++  """+  This object's sponsorships as the sponsor.+  """+  sponsorshipsAsSponsor(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for sponsorships returned from this connection. If left+    blank, the sponsorships will be ordered based on relevancy to the viewer.+    """+    orderBy: SponsorshipOrder+  ): SponsorshipConnection!+}++"""+A GitHub Sponsors listing.+"""+type SponsorsListing implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The full description of the listing.+  """+  fullDescription: String!++  """+  The full description of the listing rendered to HTML.+  """+  fullDescriptionHTML: HTML!+  id: ID!++  """+  The listing's full name.+  """+  name: String!++  """+  The short description of the listing.+  """+  shortDescription: String!++  """+  The short name of the listing.+  """+  slug: String!++  """+  The published tiers for this GitHub Sponsors listing.+  """+  tiers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for Sponsors tiers returned from the connection.+    """+    orderBy: SponsorsTierOrder = {+      field: MONTHLY_PRICE_IN_CENTS+      direction: ASC+    }+  ): SponsorsTierConnection+}++"""+A GitHub Sponsors tier associated with a GitHub Sponsors listing.+"""+type SponsorsTier implements Node {+  """+  SponsorsTier information only visible to users that can administer the associated Sponsors listing.+  """+  adminInfo: SponsorsTierAdminInfo++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The description of the tier.+  """+  description: String!++  """+  The tier description rendered to HTML+  """+  descriptionHTML: HTML!+  id: ID!++  """+  How much this tier costs per month in cents.+  """+  monthlyPriceInCents: Int!++  """+  How much this tier costs per month in dollars.+  """+  monthlyPriceInDollars: Int!++  """+  The name of the tier.+  """+  name: String!++  """+  The sponsors listing that this tier belongs to.+  """+  sponsorsListing: SponsorsListing!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!+}++"""+SponsorsTier information only visible to users that can administer the associated Sponsors listing.+"""+type SponsorsTierAdminInfo {+  """+  The sponsorships associated with this tier.+  """+  sponsorships(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Whether or not to include private sponsorships in the result set+    """+    includePrivate: Boolean = false++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for sponsorships returned from this connection. If left+    blank, the sponsorships will be ordered based on relevancy to the viewer.+    """+    orderBy: SponsorshipOrder+  ): SponsorshipConnection!+}++"""+The connection type for SponsorsTier.+"""+type SponsorsTierConnection {+  """+  A list of edges.+  """+  edges: [SponsorsTierEdge]++  """+  A list of nodes.+  """+  nodes: [SponsorsTier]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type SponsorsTierEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: SponsorsTier+}++"""+Ordering options for Sponsors tiers connections.+"""+input SponsorsTierOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order tiers by.+  """+  field: SponsorsTierOrderField!+}++"""+Properties by which Sponsors tiers connections can be ordered.+"""+enum SponsorsTierOrderField {+  """+  Order tiers by creation time.+  """+  CREATED_AT++  """+  Order tiers by their monthly price in cents+  """+  MONTHLY_PRICE_IN_CENTS+}++"""+A sponsorship relationship between a sponsor and a maintainer+"""+type Sponsorship implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  The entity that is being sponsored+  """+  maintainer: User!+  @deprecated(+    reason: "`Sponsorship.maintainer` will be removed. Use `Sponsorship.sponsorable` instead. Removal on 2020-04-01 UTC."+  )++  """+  The privacy level for this sponsorship.+  """+  privacyLevel: SponsorshipPrivacy!++  """+  The user that is sponsoring. Returns null if the sponsorship is private or if sponsor is not a user.+  """+  sponsor: User+  @deprecated(+    reason: "`Sponsorship.sponsor` will be removed. Use `Sponsorship.sponsorEntity` instead. Removal on 2020-10-01 UTC."+  )++  """+  The user or organization that is sponsoring. Returns null if the sponsorship is private.+  """+  sponsorEntity: Sponsor++  """+  The entity that is being sponsored+  """+  sponsorable: Sponsorable!++  """+  The associated sponsorship tier+  """+  tier: SponsorsTier+}++"""+The connection type for Sponsorship.+"""+type SponsorshipConnection {+  """+  A list of edges.+  """+  edges: [SponsorshipEdge]++  """+  A list of nodes.+  """+  nodes: [Sponsorship]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type SponsorshipEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Sponsorship+}++"""+Ordering options for sponsorship connections.+"""+input SponsorshipOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order sponsorship by.+  """+  field: SponsorshipOrderField!+}++"""+Properties by which sponsorship connections can be ordered.+"""+enum SponsorshipOrderField {+  """+  Order sponsorship by creation time.+  """+  CREATED_AT+}++"""+The privacy of a sponsorship+"""+enum SponsorshipPrivacy {+  """+  Private+  """+  PRIVATE++  """+  Public+  """+  PUBLIC+}++"""+Ways in which star connections can be ordered.+"""+input StarOrder {+  """+  The direction in which to order nodes.+  """+  direction: OrderDirection!++  """+  The field in which to order nodes by.+  """+  field: StarOrderField!+}++"""+Properties by which star connections can be ordered.+"""+enum StarOrderField {+  """+  Allows ordering a list of stars by when they were created.+  """+  STARRED_AT+}++"""+The connection type for User.+"""+type StargazerConnection {+  """+  A list of edges.+  """+  edges: [StargazerEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Represents a user that's starred a repository.+"""+type StargazerEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!+  node: User!++  """+  Identifies when the item was starred.+  """+  starredAt: DateTime!+}++"""+Things that can be starred.+"""+interface Starrable {+  id: ID!++  """+  A list of users who have starred this starrable.+  """+  stargazers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: StarOrder+  ): StargazerConnection!++  """+  Returns a boolean indicating whether the viewing user has starred this starrable.+  """+  viewerHasStarred: Boolean!+}++"""+The connection type for Repository.+"""+type StarredRepositoryConnection {+  """+  A list of edges.+  """+  edges: [StarredRepositoryEdge]++  """+  Is the list of stars for this user truncated? This is true for users that have many stars.+  """+  isOverLimit: Boolean!++  """+  A list of nodes.+  """+  nodes: [Repository]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Represents a starred repository.+"""+type StarredRepositoryEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!+  node: Repository!++  """+  Identifies when the item was starred.+  """+  starredAt: DateTime!+}++"""+Represents a commit status.+"""+type Status implements Node {+  """+  The commit this status is attached to.+  """+  commit: Commit++  """+  Looks up an individual status context by context name.+  """+  context(+    """+    The context name.+    """+    name: String!+  ): StatusContext++  """+  The individual status contexts for this commit.+  """+  contexts: [StatusContext!]!+  id: ID!++  """+  The combined commit status.+  """+  state: StatusState!+}++"""+Represents the rollup for both the check runs and status for a commit.+"""+type StatusCheckRollup implements Node {+  """+  The commit the status and check runs are attached to.+  """+  commit: Commit++  """+  A list of status contexts and check runs for this commit.+  """+  contexts(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): StatusCheckRollupContextConnection!+  id: ID!++  """+  The combined status for the commit.+  """+  state: StatusState!+}++"""+Types that can be inside a StatusCheckRollup context.+"""+union StatusCheckRollupContext = CheckRun | StatusContext++"""+The connection type for StatusCheckRollupContext.+"""+type StatusCheckRollupContextConnection {+  """+  A list of edges.+  """+  edges: [StatusCheckRollupContextEdge]++  """+  A list of nodes.+  """+  nodes: [StatusCheckRollupContext]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type StatusCheckRollupContextEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: StatusCheckRollupContext+}++"""+Represents an individual commit status context+"""+type StatusContext implements Node {+  """+  The avatar of the OAuth application or the user that created the status+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int = 40+  ): URI++  """+  This commit this status context is attached to.+  """+  commit: Commit++  """+  The name of this status context.+  """+  context: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The actor who created this status context.+  """+  creator: Actor++  """+  The description for this status context.+  """+  description: String+  id: ID!++  """+  The state of this status context.+  """+  state: StatusState!++  """+  The URL for this status context.+  """+  targetUrl: URI+}++"""+The possible commit status states.+"""+enum StatusState {+  """+  Status is errored.+  """+  ERROR++  """+  Status is expected.+  """+  EXPECTED++  """+  Status is failing.+  """+  FAILURE++  """+  Status is pending.+  """+  PENDING++  """+  Status is successful.+  """+  SUCCESS+}++"""+Autogenerated input type of SubmitPullRequestReview+"""+input SubmitPullRequestReviewInput {+  """+  The text field to set on the Pull Request Review.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The event to send to the Pull Request Review.+  """+  event: PullRequestReviewEvent!++  """+  The Pull Request ID to submit any pending reviews.+  """+  pullRequestId: ID @possibleTypes(concreteTypes: ["PullRequest"])++  """+  The Pull Request Review ID to submit.+  """+  pullRequestReviewId: ID @possibleTypes(concreteTypes: ["PullRequestReview"])+}++"""+Autogenerated return type of SubmitPullRequestReview+"""+type SubmitPullRequestReviewPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The submitted pull request review.+  """+  pullRequestReview: PullRequestReview+}++"""+A pointer to a repository at a specific revision embedded inside another repository.+"""+type Submodule {+  """+  The branch of the upstream submodule for tracking updates+  """+  branch: String++  """+  The git URL of the submodule repository+  """+  gitUrl: URI!++  """+  The name of the submodule in .gitmodules+  """+  name: String!++  """+  The path in the superproject that this submodule is located in+  """+  path: String!++  """+  The commit revision of the subproject repository being tracked by the submodule+  """+  subprojectCommitOid: GitObjectID+}++"""+The connection type for Submodule.+"""+type SubmoduleConnection {+  """+  A list of edges.+  """+  edges: [SubmoduleEdge]++  """+  A list of nodes.+  """+  nodes: [Submodule]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type SubmoduleEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Submodule+}++"""+Entities that can be subscribed to for web and email notifications.+"""+interface Subscribable {+  id: ID!++  """+  Check if the viewer is able to change their subscription status for the repository.+  """+  viewerCanSubscribe: Boolean!++  """+  Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.+  """+  viewerSubscription: SubscriptionState+}++"""+Represents a 'subscribed' event on a given `Subscribable`.+"""+type SubscribedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Object referenced by event.+  """+  subscribable: Subscribable!+}++"""+The possible states of a subscription.+"""+enum SubscriptionState {+  """+  The User is never notified.+  """+  IGNORED++  """+  The User is notified of all conversations.+  """+  SUBSCRIBED++  """+  The User is only notified when participating or @mentioned.+  """+  UNSUBSCRIBED+}++"""+A suggestion to review a pull request based on a user's commit history and review comments.+"""+type SuggestedReviewer {+  """+  Is this suggestion based on past commits?+  """+  isAuthor: Boolean!++  """+  Is this suggestion based on past review comments?+  """+  isCommenter: Boolean!++  """+  Identifies the user suggested to review the pull request.+  """+  reviewer: User!+}++"""+Represents a Git tag.+"""+type Tag implements GitObject & Node {+  """+  An abbreviated version of the Git object ID+  """+  abbreviatedOid: String!++  """+  The HTTP path for this Git object+  """+  commitResourcePath: URI!++  """+  The HTTP URL for this Git object+  """+  commitUrl: URI!+  id: ID!++  """+  The Git tag message.+  """+  message: String++  """+  The Git tag name.+  """+  name: String!++  """+  The Git object ID+  """+  oid: GitObjectID!++  """+  The Repository the Git object belongs to+  """+  repository: Repository!++  """+  Details about the tag author.+  """+  tagger: GitActor++  """+  The Git object the tag points to.+  """+  target: GitObject!+}++"""+A team of users in an organization.+"""+type Team implements MemberStatusable & Node & Subscribable {+  """+  A list of teams that are ancestors of this team.+  """+  ancestors(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): TeamConnection!++  """+  A URL pointing to the team's avatar.+  """+  avatarUrl(+    """+    The size in pixels of the resulting square image.+    """+    size: Int = 400+  ): URI++  """+  List of child teams belonging to this team+  """+  childTeams(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Whether to list immediate child teams or all descendant child teams.+    """+    immediateOnly: Boolean = true++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: TeamOrder++    """+    User logins to filter by+    """+    userLogins: [String!]+  ): TeamConnection!++  """+  The slug corresponding to the organization and team.+  """+  combinedSlug: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The description of the team.+  """+  description: String++  """+  Find a team discussion by its number.+  """+  discussion(+    """+    The sequence number of the discussion to find.+    """+    number: Int!+  ): TeamDiscussion++  """+  A list of team discussions.+  """+  discussions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    If provided, filters discussions according to whether or not they are pinned.+    """+    isPinned: Boolean++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: TeamDiscussionOrder+  ): TeamDiscussionConnection!++  """+  The HTTP path for team discussions+  """+  discussionsResourcePath: URI!++  """+  The HTTP URL for team discussions+  """+  discussionsUrl: URI!++  """+  The HTTP path for editing this team+  """+  editTeamResourcePath: URI!++  """+  The HTTP URL for editing this team+  """+  editTeamUrl: URI!+  id: ID!++  """+  A list of pending invitations for users to this team+  """+  invitations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): OrganizationInvitationConnection++  """+  Get the status messages members of this entity have set that are either public or visible only to the organization.+  """+  memberStatuses(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for user statuses returned from the connection.+    """+    orderBy: UserStatusOrder = { field: UPDATED_AT, direction: DESC }+  ): UserStatusConnection!++  """+  A list of users who are members of this team.+  """+  members(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter by membership type+    """+    membership: TeamMembershipType = ALL++    """+    Order for the connection.+    """+    orderBy: TeamMemberOrder++    """+    The search string to look for.+    """+    query: String++    """+    Filter by team member role+    """+    role: TeamMemberRole+  ): TeamMemberConnection!++  """+  The HTTP path for the team' members+  """+  membersResourcePath: URI!++  """+  The HTTP URL for the team' members+  """+  membersUrl: URI!++  """+  The name of the team.+  """+  name: String!++  """+  The HTTP path creating a new team+  """+  newTeamResourcePath: URI!++  """+  The HTTP URL creating a new team+  """+  newTeamUrl: URI!++  """+  The organization that owns this team.+  """+  organization: Organization!++  """+  The parent team of the team.+  """+  parentTeam: Team++  """+  The level of privacy the team has.+  """+  privacy: TeamPrivacy!++  """+  A list of repositories this team has access to.+  """+  repositories(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for the connection.+    """+    orderBy: TeamRepositoryOrder++    """+    The search string to look for.+    """+    query: String+  ): TeamRepositoryConnection!++  """+  The HTTP path for this team's repositories+  """+  repositoriesResourcePath: URI!++  """+  The HTTP URL for this team's repositories+  """+  repositoriesUrl: URI!++  """+  The HTTP path for this team+  """+  resourcePath: URI!++  """+  What algorithm is used for review assignment for this team+  """+  reviewRequestDelegationAlgorithm: TeamReviewAssignmentAlgorithm+  @preview(toggledBy: "stone-crop-preview")++  """+  True if review assignment is enabled for this team+  """+  reviewRequestDelegationEnabled: Boolean!+  @preview(toggledBy: "stone-crop-preview")++  """+  How many team members are required for review assignment for this team+  """+  reviewRequestDelegationMemberCount: Int+  @preview(toggledBy: "stone-crop-preview")++  """+  When assigning team members via delegation, whether the entire team should be notified as well.+  """+  reviewRequestDelegationNotifyTeam: Boolean!+  @preview(toggledBy: "stone-crop-preview")++  """+  The slug corresponding to the team.+  """+  slug: String!++  """+  The HTTP path for this team's teams+  """+  teamsResourcePath: URI!++  """+  The HTTP URL for this team's teams+  """+  teamsUrl: URI!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this team+  """+  url: URI!++  """+  Team is adminable by the viewer.+  """+  viewerCanAdminister: Boolean!++  """+  Check if the viewer is able to change their subscription status for the repository.+  """+  viewerCanSubscribe: Boolean!++  """+  Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.+  """+  viewerSubscription: SubscriptionState+}++"""+Audit log entry for a team.add_member event.+"""+type TeamAddMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & TeamAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  Whether the team was mapped to an LDAP Group.+  """+  isLdapMapped: Boolean++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The team associated with the action+  """+  team: Team++  """+  The name of the team+  """+  teamName: String++  """+  The HTTP path for this team+  """+  teamResourcePath: URI++  """+  The HTTP URL for this team+  """+  teamUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a team.add_repository event.+"""+type TeamAddRepositoryAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData & TeamAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  Whether the team was mapped to an LDAP Group.+  """+  isLdapMapped: Boolean++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The team associated with the action+  """+  team: Team++  """+  The name of the team+  """+  teamName: String++  """+  The HTTP path for this team+  """+  teamResourcePath: URI++  """+  The HTTP URL for this team+  """+  teamUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Metadata for an audit entry with action team.*+"""+interface TeamAuditEntryData {+  """+  The team associated with the action+  """+  team: Team++  """+  The name of the team+  """+  teamName: String++  """+  The HTTP path for this team+  """+  teamResourcePath: URI++  """+  The HTTP URL for this team+  """+  teamUrl: URI+}++"""+Audit log entry for a team.change_parent_team event.+"""+type TeamChangeParentTeamAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & TeamAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  Whether the team was mapped to an LDAP Group.+  """+  isLdapMapped: Boolean++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The new parent team.+  """+  parentTeam: Team++  """+  The name of the new parent team+  """+  parentTeamName: String++  """+  The name of the former parent team+  """+  parentTeamNameWas: String++  """+  The HTTP path for the parent team+  """+  parentTeamResourcePath: URI++  """+  The HTTP URL for the parent team+  """+  parentTeamUrl: URI++  """+  The former parent team.+  """+  parentTeamWas: Team++  """+  The HTTP path for the previous parent team+  """+  parentTeamWasResourcePath: URI++  """+  The HTTP URL for the previous parent team+  """+  parentTeamWasUrl: URI++  """+  The team associated with the action+  """+  team: Team++  """+  The name of the team+  """+  teamName: String++  """+  The HTTP path for this team+  """+  teamResourcePath: URI++  """+  The HTTP URL for this team+  """+  teamUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The connection type for Team.+"""+type TeamConnection {+  """+  A list of edges.+  """+  edges: [TeamEdge]++  """+  A list of nodes.+  """+  nodes: [Team]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+A team discussion.+"""+type TeamDiscussion implements Comment & Deletable & Node & Reactable & Subscribable & UniformResourceLocatable & Updatable & UpdatableComment {+  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the discussion's team.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  The body as Markdown.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The body rendered to text.+  """+  bodyText: String!++  """+  Identifies the discussion body hash.+  """+  bodyVersion: String!++  """+  A list of comments on this discussion.+  """+  comments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    When provided, filters the connection such that results begin with the comment with this number.+    """+    fromComment: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: TeamDiscussionCommentOrder+  ): TeamDiscussionCommentConnection!++  """+  The HTTP path for discussion comments+  """+  commentsResourcePath: URI!++  """+  The HTTP URL for discussion comments+  """+  commentsUrl: URI!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The actor who edited the comment.+  """+  editor: Actor+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  Whether or not the discussion is pinned.+  """+  isPinned: Boolean!++  """+  Whether or not the discussion is only visible to team members and org admins.+  """+  isPrivate: Boolean!++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  Identifies the discussion within its team.+  """+  number: Int!++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  The HTTP path for this discussion+  """+  resourcePath: URI!++  """+  The team that defines the context of this discussion.+  """+  team: Team!++  """+  The title of the discussion+  """+  title: String!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this discussion+  """+  url: URI!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Check if the current viewer can delete this object.+  """+  viewerCanDelete: Boolean!++  """+  Whether or not the current viewer can pin this discussion.+  """+  viewerCanPin: Boolean!++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!++  """+  Check if the viewer is able to change their subscription status for the repository.+  """+  viewerCanSubscribe: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!++  """+  Identifies if the viewer is watching, not watching, or ignoring the subscribable entity.+  """+  viewerSubscription: SubscriptionState+}++"""+A comment on a team discussion.+"""+type TeamDiscussionComment implements Comment & Deletable & Node & Reactable & UniformResourceLocatable & Updatable & UpdatableComment {+  """+  The actor who authored the comment.+  """+  author: Actor++  """+  Author's association with the comment's team.+  """+  authorAssociation: CommentAuthorAssociation!++  """+  The body as Markdown.+  """+  body: String!++  """+  The body rendered to HTML.+  """+  bodyHTML: HTML!++  """+  The body rendered to text.+  """+  bodyText: String!++  """+  The current version of the body content.+  """+  bodyVersion: String!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Check if this comment was created via an email reply.+  """+  createdViaEmail: Boolean!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The discussion this comment is about.+  """+  discussion: TeamDiscussion!++  """+  The actor who edited the comment.+  """+  editor: Actor+  id: ID!++  """+  Check if this comment was edited and includes an edit with the creation data+  """+  includesCreatedEdit: Boolean!++  """+  The moment the editor made the last edit+  """+  lastEditedAt: DateTime++  """+  Identifies the comment number.+  """+  number: Int!++  """+  Identifies when the comment was published at.+  """+  publishedAt: DateTime++  """+  A list of reactions grouped by content left on the subject.+  """+  reactionGroups: [ReactionGroup!]++  """+  A list of Reactions left on the Issue.+  """+  reactions(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Allows filtering Reactions by emoji.+    """+    content: ReactionContent++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Allows specifying the order in which reactions are returned.+    """+    orderBy: ReactionOrder+  ): ReactionConnection!++  """+  The HTTP path for this comment+  """+  resourcePath: URI!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this comment+  """+  url: URI!++  """+  A list of edits to this content.+  """+  userContentEdits(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): UserContentEditConnection++  """+  Check if the current viewer can delete this object.+  """+  viewerCanDelete: Boolean!++  """+  Can user react to this subject+  """+  viewerCanReact: Boolean!++  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!++  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!++  """+  Did the viewer author this comment.+  """+  viewerDidAuthor: Boolean!+}++"""+The connection type for TeamDiscussionComment.+"""+type TeamDiscussionCommentConnection {+  """+  A list of edges.+  """+  edges: [TeamDiscussionCommentEdge]++  """+  A list of nodes.+  """+  nodes: [TeamDiscussionComment]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type TeamDiscussionCommentEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: TeamDiscussionComment+}++"""+Ways in which team discussion comment connections can be ordered.+"""+input TeamDiscussionCommentOrder {+  """+  The direction in which to order nodes.+  """+  direction: OrderDirection!++  """+  The field by which to order nodes.+  """+  field: TeamDiscussionCommentOrderField!+}++"""+Properties by which team discussion comment connections can be ordered.+"""+enum TeamDiscussionCommentOrderField {+  """+  Allows sequential ordering of team discussion comments (which is equivalent to chronological ordering).+  """+  NUMBER+}++"""+The connection type for TeamDiscussion.+"""+type TeamDiscussionConnection {+  """+  A list of edges.+  """+  edges: [TeamDiscussionEdge]++  """+  A list of nodes.+  """+  nodes: [TeamDiscussion]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type TeamDiscussionEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: TeamDiscussion+}++"""+Ways in which team discussion connections can be ordered.+"""+input TeamDiscussionOrder {+  """+  The direction in which to order nodes.+  """+  direction: OrderDirection!++  """+  The field by which to order nodes.+  """+  field: TeamDiscussionOrderField!+}++"""+Properties by which team discussion connections can be ordered.+"""+enum TeamDiscussionOrderField {+  """+  Allows chronological ordering of team discussions.+  """+  CREATED_AT+}++"""+An edge in a connection.+"""+type TeamEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: Team+}++"""+The connection type for User.+"""+type TeamMemberConnection {+  """+  A list of edges.+  """+  edges: [TeamMemberEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Represents a user who is a member of a team.+"""+type TeamMemberEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The HTTP path to the organization's member access page.+  """+  memberAccessResourcePath: URI!++  """+  The HTTP URL to the organization's member access page.+  """+  memberAccessUrl: URI!+  node: User!++  """+  The role the member has on the team.+  """+  role: TeamMemberRole!+}++"""+Ordering options for team member connections+"""+input TeamMemberOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order team members by.+  """+  field: TeamMemberOrderField!+}++"""+Properties by which team member connections can be ordered.+"""+enum TeamMemberOrderField {+  """+  Order team members by creation time+  """+  CREATED_AT++  """+  Order team members by login+  """+  LOGIN+}++"""+The possible team member roles; either 'maintainer' or 'member'.+"""+enum TeamMemberRole {+  """+  A team maintainer has permission to add and remove team members.+  """+  MAINTAINER++  """+  A team member has no administrative permissions on the team.+  """+  MEMBER+}++"""+Defines which types of team members are included in the returned list. Can be one of IMMEDIATE, CHILD_TEAM or ALL.+"""+enum TeamMembershipType {+  """+  Includes immediate and child team members for the team.+  """+  ALL++  """+  Includes only child team members for the team.+  """+  CHILD_TEAM++  """+  Includes only immediate members of the team.+  """+  IMMEDIATE+}++"""+Ways in which team connections can be ordered.+"""+input TeamOrder {+  """+  The direction in which to order nodes.+  """+  direction: OrderDirection!++  """+  The field in which to order nodes by.+  """+  field: TeamOrderField!+}++"""+Properties by which team connections can be ordered.+"""+enum TeamOrderField {+  """+  Allows ordering a list of teams by name.+  """+  NAME+}++"""+The possible team privacy values.+"""+enum TeamPrivacy {+  """+  A secret team can only be seen by its members.+  """+  SECRET++  """+  A visible team can be seen and @mentioned by every member of the organization.+  """+  VISIBLE+}++"""+Audit log entry for a team.remove_member event.+"""+type TeamRemoveMemberAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & TeamAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  Whether the team was mapped to an LDAP Group.+  """+  isLdapMapped: Boolean++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The team associated with the action+  """+  team: Team++  """+  The name of the team+  """+  teamName: String++  """+  The HTTP path for this team+  """+  teamResourcePath: URI++  """+  The HTTP URL for this team+  """+  teamUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+Audit log entry for a team.remove_repository event.+"""+type TeamRemoveRepositoryAuditEntry implements AuditEntry & Node & OrganizationAuditEntryData & RepositoryAuditEntryData & TeamAuditEntryData {+  """+  The action name+  """+  action: String!++  """+  The user who initiated the action+  """+  actor: AuditEntryActor++  """+  The IP address of the actor+  """+  actorIp: String++  """+  A readable representation of the actor's location+  """+  actorLocation: ActorLocation++  """+  The username of the user who initiated the action+  """+  actorLogin: String++  """+  The HTTP path for the actor.+  """+  actorResourcePath: URI++  """+  The HTTP URL for the actor.+  """+  actorUrl: URI++  """+  The time the action was initiated+  """+  createdAt: PreciseDateTime!+  id: ID!++  """+  Whether the team was mapped to an LDAP Group.+  """+  isLdapMapped: Boolean++  """+  The corresponding operation type for the action+  """+  operationType: OperationType++  """+  The Organization associated with the Audit Entry.+  """+  organization: Organization++  """+  The name of the Organization.+  """+  organizationName: String++  """+  The HTTP path for the organization+  """+  organizationResourcePath: URI++  """+  The HTTP URL for the organization+  """+  organizationUrl: URI++  """+  The repository associated with the action+  """+  repository: Repository++  """+  The name of the repository+  """+  repositoryName: String++  """+  The HTTP path for the repository+  """+  repositoryResourcePath: URI++  """+  The HTTP URL for the repository+  """+  repositoryUrl: URI++  """+  The team associated with the action+  """+  team: Team++  """+  The name of the team+  """+  teamName: String++  """+  The HTTP path for this team+  """+  teamResourcePath: URI++  """+  The HTTP URL for this team+  """+  teamUrl: URI++  """+  The user affected by the action+  """+  user: User++  """+  For actions involving two users, the actor is the initiator and the user is the affected user.+  """+  userLogin: String++  """+  The HTTP path for the user.+  """+  userResourcePath: URI++  """+  The HTTP URL for the user.+  """+  userUrl: URI+}++"""+The connection type for Repository.+"""+type TeamRepositoryConnection {+  """+  A list of edges.+  """+  edges: [TeamRepositoryEdge]++  """+  A list of nodes.+  """+  nodes: [Repository]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+Represents a team repository.+"""+type TeamRepositoryEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!+  node: Repository!++  """+  The permission level the team has on the repository++  **Upcoming Change on 2020-10-01 UTC**+  **Description:** Type for `permission` will change from `RepositoryPermission!` to `String`.+  **Reason:** This field may return additional values+  """+  permission: RepositoryPermission!+}++"""+Ordering options for team repository connections+"""+input TeamRepositoryOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order repositories by.+  """+  field: TeamRepositoryOrderField!+}++"""+Properties by which team repository connections can be ordered.+"""+enum TeamRepositoryOrderField {+  """+  Order repositories by creation time+  """+  CREATED_AT++  """+  Order repositories by name+  """+  NAME++  """+  Order repositories by permission+  """+  PERMISSION++  """+  Order repositories by push time+  """+  PUSHED_AT++  """+  Order repositories by number of stargazers+  """+  STARGAZERS++  """+  Order repositories by update time+  """+  UPDATED_AT+}++"""+The possible team review assignment algorithms+"""+enum TeamReviewAssignmentAlgorithm @preview(toggledBy: "stone-crop-preview") {+  """+  Balance review load across the entire team+  """+  LOAD_BALANCE++  """+  Alternate reviews between each team member+  """+  ROUND_ROBIN+}++"""+The role of a user on a team.+"""+enum TeamRole {+  """+  User has admin rights on the team.+  """+  ADMIN++  """+  User is a member of the team.+  """+  MEMBER+}++"""+A text match within a search result.+"""+type TextMatch {+  """+  The specific text fragment within the property matched on.+  """+  fragment: String!++  """+  Highlights within the matched fragment.+  """+  highlights: [TextMatchHighlight!]!++  """+  The property matched on.+  """+  property: String!+}++"""+Represents a single highlight in a search result match.+"""+type TextMatchHighlight {+  """+  The indice in the fragment where the matched text begins.+  """+  beginIndice: Int!++  """+  The indice in the fragment where the matched text ends.+  """+  endIndice: Int!++  """+  The text matched.+  """+  text: String!+}++"""+A topic aggregates entities that are related to a subject.+"""+type Topic implements Node & Starrable {+  id: ID!++  """+  The topic's name.+  """+  name: String!++  """+  A list of related topics, including aliases of this topic, sorted with the most relevant+  first. Returns up to 10 Topics.+  """+  relatedTopics(+    """+    How many topics to return.+    """+    first: Int = 3+  ): [Topic!]!++  """+  A list of users who have starred this starrable.+  """+  stargazers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: StarOrder+  ): StargazerConnection!++  """+  Returns a boolean indicating whether the viewing user has starred this starrable.+  """+  viewerHasStarred: Boolean!+}++"""+Metadata for an audit entry with a topic.+"""+interface TopicAuditEntryData {+  """+  The name of the topic added to the repository+  """+  topic: Topic++  """+  The name of the topic added to the repository+  """+  topicName: String+}++"""+Reason that the suggested topic is declined.+"""+enum TopicSuggestionDeclineReason {+  """+  The suggested topic is not relevant to the repository.+  """+  NOT_RELEVANT++  """+  The viewer does not like the suggested topic.+  """+  PERSONAL_PREFERENCE++  """+  The suggested topic is too general for the repository.+  """+  TOO_GENERAL++  """+  The suggested topic is too specific for the repository (e.g. #ruby-on-rails-version-4-2-1).+  """+  TOO_SPECIFIC+}++"""+Autogenerated input type of TransferIssue+"""+input TransferIssueInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the issue to be transferred+  """+  issueId: ID! @possibleTypes(concreteTypes: ["Issue"])++  """+  The Node ID of the repository the issue should be transferred to+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of TransferIssue+"""+type TransferIssuePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The issue that was transferred+  """+  issue: Issue+}++"""+Represents a 'transferred' event on a given issue or pull request.+"""+type TransferredEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  The repository this came from+  """+  fromRepository: Repository+  id: ID!++  """+  Identifies the issue associated with the event.+  """+  issue: Issue!+}++"""+Represents a Git tree.+"""+type Tree implements GitObject & Node {+  """+  An abbreviated version of the Git object ID+  """+  abbreviatedOid: String!++  """+  The HTTP path for this Git object+  """+  commitResourcePath: URI!++  """+  The HTTP URL for this Git object+  """+  commitUrl: URI!++  """+  A list of tree entries.+  """+  entries: [TreeEntry!]+  id: ID!++  """+  The Git object ID+  """+  oid: GitObjectID!++  """+  The Repository the Git object belongs to+  """+  repository: Repository!+}++"""+Represents a Git tree entry.+"""+type TreeEntry {+  """+  Entry file mode.+  """+  mode: Int!++  """+  Entry file name.+  """+  name: String!++  """+  Entry file object.+  """+  object: GitObject++  """+  Entry file Git object ID.+  """+  oid: GitObjectID!++  """+  The Repository the tree entry belongs to+  """+  repository: Repository!++  """+  If the TreeEntry is for a directory occupied by a submodule project, this returns the corresponding submodule+  """+  submodule: Submodule++  """+  Entry file type.+  """+  type: String!+}++"""+An RFC 3986, RFC 3987, and RFC 6570 (level 4) compliant URI string.+"""+scalar URI++"""+Autogenerated input type of UnarchiveRepository+"""+input UnarchiveRepositoryInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the repository to unarchive.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of UnarchiveRepository+"""+type UnarchiveRepositoryPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The repository that was unarchived.+  """+  repository: Repository+}++"""+Represents an 'unassigned' event on any assignable object.+"""+type UnassignedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the assignable associated with the event.+  """+  assignable: Assignable!++  """+  Identifies the user or mannequin that was unassigned.+  """+  assignee: Assignee++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the subject (user) who was unassigned.+  """+  user: User+  @deprecated(+    reason: "Assignees can now be mannequins. Use the `assignee` field instead. Removal on 2020-01-01 UTC."+  )+}++"""+Autogenerated input type of UnfollowUser+"""+input UnfollowUserInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the user to unfollow.+  """+  userId: ID! @possibleTypes(concreteTypes: ["User"])+}++"""+Autogenerated return type of UnfollowUser+"""+type UnfollowUserPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The user that was unfollowed.+  """+  user: User+}++"""+Represents a type that can be retrieved by a URL.+"""+interface UniformResourceLocatable {+  """+  The HTML path to this resource.+  """+  resourcePath: URI!++  """+  The URL to this resource.+  """+  url: URI!+}++"""+Represents an unknown signature on a Commit or Tag.+"""+type UnknownSignature implements GitSignature {+  """+  Email used to sign this object.+  """+  email: String!++  """+  True if the signature is valid and verified by GitHub.+  """+  isValid: Boolean!++  """+  Payload for GPG signing object. Raw ODB object without the signature header.+  """+  payload: String!++  """+  ASCII-armored signature header from object.+  """+  signature: String!++  """+  GitHub user corresponding to the email signing this commit.+  """+  signer: User++  """+  The state of this signature. `VALID` if signature is valid and verified by+  GitHub, otherwise represents reason why signature is considered invalid.+  """+  state: GitSignatureState!++  """+  True if the signature was made with GitHub's signing key.+  """+  wasSignedByGitHub: Boolean!+}++"""+Represents an 'unlabeled' event on a given issue or pull request.+"""+type UnlabeledEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the label associated with the 'unlabeled' event.+  """+  label: Label!++  """+  Identifies the `Labelable` associated with the event.+  """+  labelable: Labelable!+}++"""+Autogenerated input type of UnlinkRepositoryFromProject+"""+input UnlinkRepositoryFromProjectInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the Project linked to the Repository.+  """+  projectId: ID! @possibleTypes(concreteTypes: ["Project"])++  """+  The ID of the Repository linked to the Project.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of UnlinkRepositoryFromProject+"""+type UnlinkRepositoryFromProjectPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The linked Project.+  """+  project: Project++  """+  The linked Repository.+  """+  repository: Repository+}++"""+Autogenerated input type of UnlockLockable+"""+input UnlockLockableInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the issue or pull request to be unlocked.+  """+  lockableId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "Lockable"+  )+}++"""+Autogenerated return type of UnlockLockable+"""+type UnlockLockablePayload {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The item that was unlocked.+  """+  unlockedRecord: Lockable+}++"""+Represents an 'unlocked' event on a given issue or pull request.+"""+type UnlockedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Object that was unlocked.+  """+  lockable: Lockable!+}++"""+Autogenerated input type of UnmarkIssueAsDuplicate+"""+input UnmarkIssueAsDuplicateInput {+  """+  ID of the issue or pull request currently considered canonical/authoritative/original.+  """+  canonicalId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "IssueOrPullRequest"+  )++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  ID of the issue or pull request currently marked as a duplicate.+  """+  duplicateId: ID!+  @possibleTypes(+    concreteTypes: ["Issue", "PullRequest"]+    abstractType: "IssueOrPullRequest"+  )+}++"""+Autogenerated return type of UnmarkIssueAsDuplicate+"""+type UnmarkIssueAsDuplicatePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The issue or pull request that was marked as a duplicate.+  """+  duplicate: IssueOrPullRequest+}++"""+Represents an 'unmarked_as_duplicate' event on a given issue or pull request.+"""+type UnmarkedAsDuplicateEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!+}++"""+Autogenerated input type of UnminimizeComment+"""+input UnminimizeCommentInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the subject to modify.+  """+  subjectId: ID!+  @possibleTypes(+    concreteTypes: [+      "CommitComment"+      "GistComment"+      "IssueComment"+      "PullRequestReviewComment"+    ]+    abstractType: "Minimizable"+  )+}++"""+Autogenerated return type of UnminimizeComment+"""+type UnminimizeCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The comment that was unminimized.+  """+  unminimizedComment: Minimizable+}++"""+Autogenerated input type of UnpinIssue+"""+input UnpinIssueInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the issue to be unpinned+  """+  issueId: ID! @possibleTypes(concreteTypes: ["Issue"])+}++"""+Autogenerated return type of UnpinIssue+"""+type UnpinIssuePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The issue that was unpinned+  """+  issue: Issue+}++"""+Represents an 'unpinned' event on a given issue or pull request.+"""+type UnpinnedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Identifies the issue associated with the event.+  """+  issue: Issue!+}++"""+Autogenerated input type of UnresolveReviewThread+"""+input UnresolveReviewThreadInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the thread to unresolve+  """+  threadId: ID! @possibleTypes(concreteTypes: ["PullRequestReviewThread"])+}++"""+Autogenerated return type of UnresolveReviewThread+"""+type UnresolveReviewThreadPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The thread to resolve.+  """+  thread: PullRequestReviewThread+}++"""+Represents an 'unsubscribed' event on a given `Subscribable`.+"""+type UnsubscribedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  Object referenced by event.+  """+  subscribable: Subscribable!+}++"""+Entities that can be updated.+"""+interface Updatable {+  """+  Check if the current viewer can update this object.+  """+  viewerCanUpdate: Boolean!+}++"""+Comments that can be updated.+"""+interface UpdatableComment {+  """+  Reasons why the current viewer can not update this comment.+  """+  viewerCannotUpdateReasons: [CommentCannotUpdateReason!]!+}++"""+Autogenerated input type of UpdateBranchProtectionRule+"""+input UpdateBranchProtectionRuleInput {+  """+  The global relay id of the branch protection rule to be updated.+  """+  branchProtectionRuleId: ID!+  @possibleTypes(concreteTypes: ["BranchProtectionRule"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Will new commits pushed to matching branches dismiss pull request review approvals.+  """+  dismissesStaleReviews: Boolean++  """+  Can admins overwrite branch protection.+  """+  isAdminEnforced: Boolean++  """+  The glob-like pattern used to determine matching branches.+  """+  pattern: String++  """+  A list of User, Team or App IDs allowed to push to matching branches.+  """+  pushActorIds: [ID!]++  """+  Number of approving reviews required to update matching branches.+  """+  requiredApprovingReviewCount: Int++  """+  List of required status check contexts that must pass for commits to be accepted to matching branches.+  """+  requiredStatusCheckContexts: [String!]++  """+  Are approving reviews required to update matching branches.+  """+  requiresApprovingReviews: Boolean++  """+  Are reviews from code owners required to update matching branches.+  """+  requiresCodeOwnerReviews: Boolean++  """+  Are commits required to be signed.+  """+  requiresCommitSignatures: Boolean++  """+  Are status checks required to update matching branches.+  """+  requiresStatusChecks: Boolean++  """+  Are branches required to be up to date before merging.+  """+  requiresStrictStatusChecks: Boolean++  """+  Is pushing to matching branches restricted.+  """+  restrictsPushes: Boolean++  """+  Is dismissal of pull request reviews restricted.+  """+  restrictsReviewDismissals: Boolean++  """+  A list of User or Team IDs allowed to dismiss reviews on pull requests targeting matching branches.+  """+  reviewDismissalActorIds: [ID!]+}++"""+Autogenerated return type of UpdateBranchProtectionRule+"""+type UpdateBranchProtectionRulePayload {+  """+  The newly created BranchProtectionRule.+  """+  branchProtectionRule: BranchProtectionRule++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of UpdateCheckRun+"""+input UpdateCheckRunInput @preview(toggledBy: "antiope-preview") {+  """+  Possible further actions the integrator can perform, which a user may trigger.+  """+  actions: [CheckRunAction!]++  """+  The node of the check.+  """+  checkRunId: ID! @possibleTypes(concreteTypes: ["CheckRun"])++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The time that the check run finished.+  """+  completedAt: DateTime++  """+  The final conclusion of the check.+  """+  conclusion: CheckConclusionState++  """+  The URL of the integrator's site that has the full details of the check.+  """+  detailsUrl: URI++  """+  A reference for the run on the integrator's system.+  """+  externalId: String++  """+  The name of the check.+  """+  name: String++  """+  Descriptive details about the run.+  """+  output: CheckRunOutput++  """+  The node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  The time that the check run began.+  """+  startedAt: DateTime++  """+  The current status.+  """+  status: RequestableCheckStatusState+}++"""+Autogenerated return type of UpdateCheckRun+"""+type UpdateCheckRunPayload @preview(toggledBy: "antiope-preview") {+  """+  The updated check run.+  """+  checkRun: CheckRun++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of UpdateCheckSuitePreferences+"""+input UpdateCheckSuitePreferencesInput @preview(toggledBy: "antiope-preview") {+  """+  The check suite preferences to modify.+  """+  autoTriggerPreferences: [CheckSuiteAutoTriggerPreference!]!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of UpdateCheckSuitePreferences+"""+type UpdateCheckSuitePreferencesPayload @preview(toggledBy: "antiope-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated repository.+  """+  repository: Repository+}++"""+Autogenerated input type of UpdateEnterpriseActionExecutionCapabilitySetting+"""+input UpdateEnterpriseActionExecutionCapabilitySettingInput {+  """+  The value for the action execution capability setting on the enterprise.+  """+  capability: ActionExecutionCapabilitySetting!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can create repositories setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])+}++"""+Autogenerated return type of UpdateEnterpriseActionExecutionCapabilitySetting+"""+type UpdateEnterpriseActionExecutionCapabilitySettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated action execution capability setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the action execution capability setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseAdministratorRole+"""+input UpdateEnterpriseAdministratorRoleInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the Enterprise which the admin belongs to.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The login of a administrator whose role is being changed.+  """+  login: String!++  """+  The new role for the Enterprise administrator.+  """+  role: EnterpriseAdministratorRole!+}++"""+Autogenerated return type of UpdateEnterpriseAdministratorRole+"""+type UpdateEnterpriseAdministratorRolePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A message confirming the result of changing the administrator's role.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseAllowPrivateRepositoryForkingSetting+"""+input UpdateEnterpriseAllowPrivateRepositoryForkingSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the allow private repository forking setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the allow private repository forking setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseAllowPrivateRepositoryForkingSetting+"""+type UpdateEnterpriseAllowPrivateRepositoryForkingSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated allow private repository forking setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the allow private repository forking setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseDefaultRepositoryPermissionSetting+"""+input UpdateEnterpriseDefaultRepositoryPermissionSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the default repository permission setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the default repository permission setting on the enterprise.+  """+  settingValue: EnterpriseDefaultRepositoryPermissionSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseDefaultRepositoryPermissionSetting+"""+type UpdateEnterpriseDefaultRepositoryPermissionSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated default repository permission setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the default repository permission setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseMembersCanChangeRepositoryVisibilitySetting+"""+input UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can change repository visibility setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the members can change repository visibility setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseMembersCanChangeRepositoryVisibilitySetting+"""+type UpdateEnterpriseMembersCanChangeRepositoryVisibilitySettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated members can change repository visibility setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the members can change repository visibility setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseMembersCanCreateRepositoriesSetting+"""+input UpdateEnterpriseMembersCanCreateRepositoriesSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can create repositories setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  Allow members to create internal repositories. Defaults to current value.+  """+  membersCanCreateInternalRepositories: Boolean++  """+  Allow members to create private repositories. Defaults to current value.+  """+  membersCanCreatePrivateRepositories: Boolean++  """+  Allow members to create public repositories. Defaults to current value.+  """+  membersCanCreatePublicRepositories: Boolean++  """+  When false, allow member organizations to set their own repository creation member privileges.+  """+  membersCanCreateRepositoriesPolicyEnabled: Boolean++  """+  Value for the members can create repositories setting on the enterprise. This+  or the granular public/private/internal allowed fields (but not both) must be provided.+  """+  settingValue: EnterpriseMembersCanCreateRepositoriesSettingValue+}++"""+Autogenerated return type of UpdateEnterpriseMembersCanCreateRepositoriesSetting+"""+type UpdateEnterpriseMembersCanCreateRepositoriesSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated members can create repositories setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the members can create repositories setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseMembersCanDeleteIssuesSetting+"""+input UpdateEnterpriseMembersCanDeleteIssuesSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can delete issues setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the members can delete issues setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseMembersCanDeleteIssuesSetting+"""+type UpdateEnterpriseMembersCanDeleteIssuesSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated members can delete issues setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the members can delete issues setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseMembersCanDeleteRepositoriesSetting+"""+input UpdateEnterpriseMembersCanDeleteRepositoriesSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can delete repositories setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the members can delete repositories setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseMembersCanDeleteRepositoriesSetting+"""+type UpdateEnterpriseMembersCanDeleteRepositoriesSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated members can delete repositories setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the members can delete repositories setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseMembersCanInviteCollaboratorsSetting+"""+input UpdateEnterpriseMembersCanInviteCollaboratorsSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can invite collaborators setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the members can invite collaborators setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseMembersCanInviteCollaboratorsSetting+"""+type UpdateEnterpriseMembersCanInviteCollaboratorsSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated members can invite collaborators setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the members can invite collaborators setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseMembersCanMakePurchasesSetting+"""+input UpdateEnterpriseMembersCanMakePurchasesSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can make purchases setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the members can make purchases setting on the enterprise.+  """+  settingValue: EnterpriseMembersCanMakePurchasesSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseMembersCanMakePurchasesSetting+"""+type UpdateEnterpriseMembersCanMakePurchasesSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated members can make purchases setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the members can make purchases setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseMembersCanUpdateProtectedBranchesSetting+"""+input UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can update protected branches setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the members can update protected branches setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseMembersCanUpdateProtectedBranchesSetting+"""+type UpdateEnterpriseMembersCanUpdateProtectedBranchesSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated members can update protected branches setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the members can update protected branches setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseMembersCanViewDependencyInsightsSetting+"""+input UpdateEnterpriseMembersCanViewDependencyInsightsSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the members can view dependency insights setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the members can view dependency insights setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseMembersCanViewDependencyInsightsSetting+"""+type UpdateEnterpriseMembersCanViewDependencyInsightsSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated members can view dependency insights setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the members can view dependency insights setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseOrganizationProjectsSetting+"""+input UpdateEnterpriseOrganizationProjectsSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the organization projects setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the organization projects setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseOrganizationProjectsSetting+"""+type UpdateEnterpriseOrganizationProjectsSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated organization projects setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the organization projects setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseProfile+"""+input UpdateEnterpriseProfileInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The description of the enterprise.+  """+  description: String++  """+  The Enterprise ID to update.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The location of the enterprise.+  """+  location: String++  """+  The name of the enterprise.+  """+  name: String++  """+  The URL of the enterprise's website.+  """+  websiteUrl: String+}++"""+Autogenerated return type of UpdateEnterpriseProfile+"""+type UpdateEnterpriseProfilePayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated enterprise.+  """+  enterprise: Enterprise+}++"""+Autogenerated input type of UpdateEnterpriseRepositoryProjectsSetting+"""+input UpdateEnterpriseRepositoryProjectsSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the repository projects setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the repository projects setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseRepositoryProjectsSetting+"""+type UpdateEnterpriseRepositoryProjectsSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated repository projects setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the repository projects setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseTeamDiscussionsSetting+"""+input UpdateEnterpriseTeamDiscussionsSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the team discussions setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the team discussions setting on the enterprise.+  """+  settingValue: EnterpriseEnabledDisabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseTeamDiscussionsSetting+"""+type UpdateEnterpriseTeamDiscussionsSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated team discussions setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the team discussions setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateEnterpriseTwoFactorAuthenticationRequiredSetting+"""+input UpdateEnterpriseTwoFactorAuthenticationRequiredSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the enterprise on which to set the two factor authentication required setting.+  """+  enterpriseId: ID! @possibleTypes(concreteTypes: ["Enterprise"])++  """+  The value for the two factor authentication required setting on the enterprise.+  """+  settingValue: EnterpriseEnabledSettingValue!+}++"""+Autogenerated return type of UpdateEnterpriseTwoFactorAuthenticationRequiredSetting+"""+type UpdateEnterpriseTwoFactorAuthenticationRequiredSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The enterprise with the updated two factor authentication required setting.+  """+  enterprise: Enterprise++  """+  A message confirming the result of updating the two factor authentication required setting.+  """+  message: String+}++"""+Autogenerated input type of UpdateIpAllowListEnabledSetting+"""+input UpdateIpAllowListEnabledSettingInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the owner on which to set the IP allow list enabled setting.+  """+  ownerId: ID!+  @possibleTypes(+    concreteTypes: ["Enterprise", "Organization"]+    abstractType: "IpAllowListOwner"+  )++  """+  The value for the IP allow list enabled setting.+  """+  settingValue: IpAllowListEnabledSettingValue!+}++"""+Autogenerated return type of UpdateIpAllowListEnabledSetting+"""+type UpdateIpAllowListEnabledSettingPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The IP allow list owner on which the setting was updated.+  """+  owner: IpAllowListOwner+}++"""+Autogenerated input type of UpdateIpAllowListEntry+"""+input UpdateIpAllowListEntryInput {+  """+  An IP address or range of addresses in CIDR notation.+  """+  allowListValue: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the IP allow list entry to update.+  """+  ipAllowListEntryId: ID! @possibleTypes(concreteTypes: ["IpAllowListEntry"])++  """+  Whether the IP allow list entry is active when an IP allow list is enabled.+  """+  isActive: Boolean!++  """+  An optional name for the IP allow list entry.+  """+  name: String+}++"""+Autogenerated return type of UpdateIpAllowListEntry+"""+type UpdateIpAllowListEntryPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The IP allow list entry that was updated.+  """+  ipAllowListEntry: IpAllowListEntry+}++"""+Autogenerated input type of UpdateIssueComment+"""+input UpdateIssueCommentInput {+  """+  The updated text of the comment.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the IssueComment to modify.+  """+  id: ID! @possibleTypes(concreteTypes: ["IssueComment"])+}++"""+Autogenerated return type of UpdateIssueComment+"""+type UpdateIssueCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated comment.+  """+  issueComment: IssueComment+}++"""+Autogenerated input type of UpdateIssue+"""+input UpdateIssueInput {+  """+  An array of Node IDs of users for this issue.+  """+  assigneeIds: [ID!] @possibleTypes(concreteTypes: ["User"])++  """+  The body for the issue description.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the Issue to modify.+  """+  id: ID! @possibleTypes(concreteTypes: ["Issue"])++  """+  An array of Node IDs of labels for this issue.+  """+  labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"])++  """+  The Node ID of the milestone for this issue.+  """+  milestoneId: ID @possibleTypes(concreteTypes: ["Milestone"])++  """+  An array of Node IDs for projects associated with this issue.+  """+  projectIds: [ID!]++  """+  The desired issue state.+  """+  state: IssueState++  """+  The title for the issue.+  """+  title: String+}++"""+Autogenerated return type of UpdateIssue+"""+type UpdateIssuePayload {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The issue.+  """+  issue: Issue+}++"""+Autogenerated input type of UpdateLabel+"""+input UpdateLabelInput @preview(toggledBy: "bane-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A 6 character hex code, without the leading #, identifying the updated color of the label.+  """+  color: String++  """+  A brief description of the label, such as its purpose.+  """+  description: String++  """+  The Node ID of the label to be updated.+  """+  id: ID! @possibleTypes(concreteTypes: ["Label"])++  """+  The updated name of the label.+  """+  name: String+}++"""+Autogenerated return type of UpdateLabel+"""+type UpdateLabelPayload @preview(toggledBy: "bane-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated label.+  """+  label: Label+}++"""+Autogenerated input type of UpdateProjectCard+"""+input UpdateProjectCardInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Whether or not the ProjectCard should be archived+  """+  isArchived: Boolean++  """+  The note of ProjectCard.+  """+  note: String++  """+  The ProjectCard ID to update.+  """+  projectCardId: ID! @possibleTypes(concreteTypes: ["ProjectCard"])+}++"""+Autogenerated return type of UpdateProjectCard+"""+type UpdateProjectCardPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated ProjectCard.+  """+  projectCard: ProjectCard+}++"""+Autogenerated input type of UpdateProjectColumn+"""+input UpdateProjectColumnInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The name of project column.+  """+  name: String!++  """+  The ProjectColumn ID to update.+  """+  projectColumnId: ID! @possibleTypes(concreteTypes: ["ProjectColumn"])+}++"""+Autogenerated return type of UpdateProjectColumn+"""+type UpdateProjectColumnPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated project column.+  """+  projectColumn: ProjectColumn+}++"""+Autogenerated input type of UpdateProject+"""+input UpdateProjectInput {+  """+  The description of project.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The name of project.+  """+  name: String++  """+  The Project ID to update.+  """+  projectId: ID! @possibleTypes(concreteTypes: ["Project"])++  """+  Whether the project is public or not.+  """+  public: Boolean++  """+  Whether the project is open or closed.+  """+  state: ProjectState+}++"""+Autogenerated return type of UpdateProject+"""+type UpdateProjectPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated project.+  """+  project: Project+}++"""+Autogenerated input type of UpdatePullRequest+"""+input UpdatePullRequestInput {+  """+  An array of Node IDs of users for this pull request.+  """+  assigneeIds: [ID!] @possibleTypes(concreteTypes: ["User"])++  """+  The name of the branch you want your changes pulled into. This should be an existing branch+  on the current repository.+  """+  baseRefName: String++  """+  The contents of the pull request.+  """+  body: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  An array of Node IDs of labels for this pull request.+  """+  labelIds: [ID!] @possibleTypes(concreteTypes: ["Label"])++  """+  Indicates whether maintainers can modify the pull request.+  """+  maintainerCanModify: Boolean++  """+  The Node ID of the milestone for this pull request.+  """+  milestoneId: ID @possibleTypes(concreteTypes: ["Milestone"])++  """+  An array of Node IDs for projects associated with this pull request.+  """+  projectIds: [ID!]++  """+  The Node ID of the pull request.+  """+  pullRequestId: ID! @possibleTypes(concreteTypes: ["PullRequest"])++  """+  The target state of the pull request.+  """+  state: PullRequestUpdateState++  """+  The title of the pull request.+  """+  title: String+}++"""+Autogenerated return type of UpdatePullRequest+"""+type UpdatePullRequestPayload {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated pull request.+  """+  pullRequest: PullRequest+}++"""+Autogenerated input type of UpdatePullRequestReviewComment+"""+input UpdatePullRequestReviewCommentInput {+  """+  The text of the comment.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the comment to modify.+  """+  pullRequestReviewCommentId: ID!+  @possibleTypes(concreteTypes: ["PullRequestReviewComment"])+}++"""+Autogenerated return type of UpdatePullRequestReviewComment+"""+type UpdatePullRequestReviewCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated comment.+  """+  pullRequestReviewComment: PullRequestReviewComment+}++"""+Autogenerated input type of UpdatePullRequestReview+"""+input UpdatePullRequestReviewInput {+  """+  The contents of the pull request review body.+  """+  body: String!++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the pull request review to modify.+  """+  pullRequestReviewId: ID! @possibleTypes(concreteTypes: ["PullRequestReview"])+}++"""+Autogenerated return type of UpdatePullRequestReview+"""+type UpdatePullRequestReviewPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated pull request review.+  """+  pullRequestReview: PullRequestReview+}++"""+Autogenerated input type of UpdateRef+"""+input UpdateRefInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Permit updates of branch Refs that are not fast-forwards?+  """+  force: Boolean = false++  """+  The GitObjectID that the Ref shall be updated to target.+  """+  oid: GitObjectID!++  """+  The Node ID of the Ref to be updated.+  """+  refId: ID! @possibleTypes(concreteTypes: ["Ref"])+}++"""+Autogenerated return type of UpdateRef+"""+type UpdateRefPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated Ref.+  """+  ref: Ref+}++"""+Autogenerated input type of UpdateRefs+"""+input UpdateRefsInput @preview(toggledBy: "update-refs-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A list of ref updates.+  """+  refUpdates: [RefUpdate!]!++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])+}++"""+Autogenerated return type of UpdateRefs+"""+type UpdateRefsPayload @preview(toggledBy: "update-refs-preview") {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String+}++"""+Autogenerated input type of UpdateRepository+"""+input UpdateRepositoryInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  A new description for the repository. Pass an empty string to erase the existing description.+  """+  description: String++  """+  Indicates if the repository should have the issues feature enabled.+  """+  hasIssuesEnabled: Boolean++  """+  Indicates if the repository should have the project boards feature enabled.+  """+  hasProjectsEnabled: Boolean++  """+  Indicates if the repository should have the wiki feature enabled.+  """+  hasWikiEnabled: Boolean++  """+  The URL for a web page about this repository. Pass an empty string to erase the existing URL.+  """+  homepageUrl: URI++  """+  The new name of the repository.+  """+  name: String++  """+  The ID of the repository to update.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  Whether this repository should be marked as a template such that anyone who+  can access it can create new repositories with the same files and directory structure.+  """+  template: Boolean+}++"""+Autogenerated return type of UpdateRepository+"""+type UpdateRepositoryPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated repository.+  """+  repository: Repository+}++"""+Autogenerated input type of UpdateSubscription+"""+input UpdateSubscriptionInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The new state of the subscription.+  """+  state: SubscriptionState!++  """+  The Node ID of the subscribable object to modify.+  """+  subscribableId: ID!+  @possibleTypes(+    concreteTypes: [+      "Commit"+      "Issue"+      "PullRequest"+      "Repository"+      "Team"+      "TeamDiscussion"+    ]+    abstractType: "Subscribable"+  )+}++"""+Autogenerated return type of UpdateSubscription+"""+type UpdateSubscriptionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The input subscribable entity.+  """+  subscribable: Subscribable+}++"""+Autogenerated input type of UpdateTeamDiscussionComment+"""+input UpdateTeamDiscussionCommentInput {+  """+  The updated text of the comment.+  """+  body: String!++  """+  The current version of the body content.+  """+  bodyVersion: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The ID of the comment to modify.+  """+  id: ID! @possibleTypes(concreteTypes: ["TeamDiscussionComment"])+}++"""+Autogenerated return type of UpdateTeamDiscussionComment+"""+type UpdateTeamDiscussionCommentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated comment.+  """+  teamDiscussionComment: TeamDiscussionComment+}++"""+Autogenerated input type of UpdateTeamDiscussion+"""+input UpdateTeamDiscussionInput {+  """+  The updated text of the discussion.+  """+  body: String++  """+  The current version of the body content. If provided, this update operation+  will be rejected if the given version does not match the latest version on the server.+  """+  bodyVersion: String++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the discussion to modify.+  """+  id: ID! @possibleTypes(concreteTypes: ["TeamDiscussion"])++  """+  If provided, sets the pinned state of the updated discussion.+  """+  pinned: Boolean++  """+  The updated title of the discussion.+  """+  title: String+}++"""+Autogenerated return type of UpdateTeamDiscussion+"""+type UpdateTeamDiscussionPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The updated discussion.+  """+  teamDiscussion: TeamDiscussion+}++"""+Autogenerated input type of UpdateTeamReviewAssignment+"""+input UpdateTeamReviewAssignmentInput+@preview(toggledBy: "stone-crop-preview") {+  """+  The algorithm to use for review assignment+  """+  algorithm: TeamReviewAssignmentAlgorithm = ROUND_ROBIN++  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Turn on or off review assignment+  """+  enabled: Boolean!++  """+  An array of team member IDs to exclude+  """+  excludedTeamMemberIds: [ID!] @possibleTypes(concreteTypes: ["User"])++  """+  The Node ID of the team to update review assginments of+  """+  id: ID! @possibleTypes(concreteTypes: ["Team"])++  """+  Notify the entire team of the PR if it is delegated+  """+  notifyTeam: Boolean = true++  """+  The number of team members to assign+  """+  teamMemberCount: Int = 1+}++"""+Autogenerated return type of UpdateTeamReviewAssignment+"""+type UpdateTeamReviewAssignmentPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The team that was modified+  """+  team: Team+}++"""+Autogenerated input type of UpdateTopics+"""+input UpdateTopicsInput {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  The Node ID of the repository.+  """+  repositoryId: ID! @possibleTypes(concreteTypes: ["Repository"])++  """+  An array of topic names.+  """+  topicNames: [String!]!+}++"""+Autogenerated return type of UpdateTopics+"""+type UpdateTopicsPayload {+  """+  A unique identifier for the client performing the mutation.+  """+  clientMutationId: String++  """+  Names of the provided topics that are not valid.+  """+  invalidTopicNames: [String!]++  """+  The updated repository.+  """+  repository: Repository+}++"""+A user is an individual's account on GitHub that owns repositories and can make new content.+"""+type User implements Actor & Node & PackageOwner & ProfileOwner & ProjectOwner & RepositoryOwner & Sponsorable & UniformResourceLocatable {+  """+  Determine if this repository owner has any items that can be pinned to their profile.+  """+  anyPinnableItems(+    """+    Filter to only a particular kind of pinnable item.+    """+    type: PinnableItemType+  ): Boolean!++  """+  A URL pointing to the user's public avatar.+  """+  avatarUrl(+    """+    The size of the resulting square image.+    """+    size: Int+  ): URI!++  """+  The user's public profile bio.+  """+  bio: String++  """+  The user's public profile bio as HTML.+  """+  bioHTML: HTML!++  """+  A list of commit comments made by this user.+  """+  commitComments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): CommitCommentConnection!++  """+  The user's public profile company.+  """+  company: String++  """+  The user's public profile company as HTML.+  """+  companyHTML: HTML!++  """+  The collection of contributions this user has made to different repositories.+  """+  contributionsCollection(+    """+    Only contributions made at this time or later will be counted. If omitted, defaults to a year ago.+    """+    from: DateTime++    """+    The ID of the organization used to filter contributions.+    """+    organizationID: ID++    """+    Only contributions made before and up to and including this time will be+    counted. If omitted, defaults to the current time.+    """+    to: DateTime+  ): ContributionsCollection!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the primary key from the database.+  """+  databaseId: Int++  """+  The user's publicly visible profile email.+  """+  email: String!++  """+  A list of users the given user is followed by.+  """+  followers(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): FollowerConnection!++  """+  A list of users the given user is following.+  """+  following(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): FollowingConnection!++  """+  Find gist by repo name.+  """+  gist(+    """+    The gist name to find.+    """+    name: String!+  ): Gist++  """+  A list of gist comments made by this user.+  """+  gistComments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): GistCommentConnection!++  """+  A list of the Gists the user has created.+  """+  gists(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for gists returned from the connection+    """+    orderBy: GistOrder++    """+    Filters Gists according to privacy.+    """+    privacy: GistPrivacy+  ): GistConnection!++  """+  The hovercard information for this user in a given context+  """+  hovercard(+    """+    The ID of the subject to get the hovercard in the context of+    """+    primarySubjectId: ID+  ): Hovercard!+  id: ID!++  """+  Whether or not this user is a participant in the GitHub Security Bug Bounty.+  """+  isBountyHunter: Boolean!++  """+  Whether or not this user is a participant in the GitHub Campus Experts Program.+  """+  isCampusExpert: Boolean!++  """+  Whether or not this user is a GitHub Developer Program member.+  """+  isDeveloperProgramMember: Boolean!++  """+  Whether or not this user is a GitHub employee.+  """+  isEmployee: Boolean!++  """+  Whether or not the user has marked themselves as for hire.+  """+  isHireable: Boolean!++  """+  Whether or not this user is a site administrator.+  """+  isSiteAdmin: Boolean!++  """+  Whether or not this user is the viewing user.+  """+  isViewer: Boolean!++  """+  A list of issue comments made by this user.+  """+  issueComments(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): IssueCommentConnection!++  """+  A list of issues associated with this user.+  """+  issues(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Filtering options for issues returned from the connection.+    """+    filterBy: IssueFilters++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for issues returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the issues by.+    """+    states: [IssueState!]+  ): IssueConnection!++  """+  Showcases a selection of repositories and gists that the profile owner has+  either curated or that have been selected automatically based on popularity.+  """+  itemShowcase: ProfileItemShowcase!++  """+  The user's public profile location.+  """+  location: String++  """+  The username used to login.+  """+  login: String!++  """+  The user's public profile name.+  """+  name: String++  """+  Find an organization by its login that the user belongs to.+  """+  organization(+    """+    The login of the organization to find.+    """+    login: String!+  ): Organization++  """+  Verified email addresses that match verified domains for a specified organization the user is a member of.+  """+  organizationVerifiedDomainEmails(+    """+    The login of the organization to match verified domains from.+    """+    login: String!+  ): [String!]!++  """+  A list of organizations the user belongs to.+  """+  organizations(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): OrganizationConnection!++  """+  A list of packages under the owner.+  """+  packages(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Find packages by their names.+    """+    names: [String]++    """+    Ordering of the returned packages.+    """+    orderBy: PackageOrder = { field: CREATED_AT, direction: DESC }++    """+    Filter registry package by type.+    """+    packageType: PackageType++    """+    Find packages in a repository by ID.+    """+    repositoryId: ID+  ): PackageConnection!++  """+  A list of repositories and gists this profile owner can pin to their profile.+  """+  pinnableItems(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter the types of pinnable items that are returned.+    """+    types: [PinnableItemType!]+  ): PinnableItemConnection!++  """+  A list of repositories and gists this profile owner has pinned to their profile+  """+  pinnedItems(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Filter the types of pinned items that are returned.+    """+    types: [PinnableItemType!]+  ): PinnableItemConnection!++  """+  Returns how many more items this profile owner can pin to their profile.+  """+  pinnedItemsRemaining: Int!++  """+  Find project by number.+  """+  project(+    """+    The project number to find.+    """+    number: Int!+  ): Project++  """+  A list of projects under the owner.+  """+  projects(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for projects returned from the connection+    """+    orderBy: ProjectOrder++    """+    Query to search projects by, currently only searching by name.+    """+    search: String++    """+    A list of states to filter the projects by.+    """+    states: [ProjectState!]+  ): ProjectConnection!++  """+  The HTTP path listing user's projects+  """+  projectsResourcePath: URI!++  """+  The HTTP URL listing user's projects+  """+  projectsUrl: URI!++  """+  A list of public keys associated with this user.+  """+  publicKeys(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int+  ): PublicKeyConnection!++  """+  A list of pull requests associated with this user.+  """+  pullRequests(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    The base ref name to filter the pull requests by.+    """+    baseRefName: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    The head ref name to filter the pull requests by.+    """+    headRefName: String++    """+    A list of label names to filter the pull requests by.+    """+    labels: [String!]++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for pull requests returned from the connection.+    """+    orderBy: IssueOrder++    """+    A list of states to filter the pull requests by.+    """+    states: [PullRequestState!]+  ): PullRequestConnection!++  """+  A list of repositories that the user owns.+  """+  repositories(+    """+    Array of viewer's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    current viewer owns.+    """+    affiliations: [RepositoryAffiliation]++    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    If non-null, filters repositories according to whether they are forks of another repository+    """+    isFork: Boolean++    """+    If non-null, filters repositories according to whether they have been locked+    """+    isLocked: Boolean++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories returned from the connection+    """+    orderBy: RepositoryOrder++    """+    Array of owner's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    organization or user being viewed owns.+    """+    ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]++    """+    If non-null, filters repositories according to privacy+    """+    privacy: RepositoryPrivacy+  ): RepositoryConnection!++  """+  A list of repositories that the user recently contributed to.+  """+  repositoriesContributedTo(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    If non-null, include only the specified types of contributions. The+    GitHub.com UI uses [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]+    """+    contributionTypes: [RepositoryContributionType]++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    If true, include user repositories+    """+    includeUserRepositories: Boolean++    """+    If non-null, filters repositories according to whether they have been locked+    """+    isLocked: Boolean++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories returned from the connection+    """+    orderBy: RepositoryOrder++    """+    If non-null, filters repositories according to privacy+    """+    privacy: RepositoryPrivacy+  ): RepositoryConnection!++  """+  Find Repository.+  """+  repository(+    """+    Name of Repository to find.+    """+    name: String!+  ): Repository++  """+  The HTTP path for this user+  """+  resourcePath: URI!++  """+  Replies this user has saved+  """+  savedReplies(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    The field to order saved replies by.+    """+    orderBy: SavedReplyOrder = { field: UPDATED_AT, direction: DESC }+  ): SavedReplyConnection++  """+  The GitHub Sponsors listing for this user.+  """+  sponsorsListing: SponsorsListing++  """+  This object's sponsorships as the maintainer.+  """+  sponsorshipsAsMaintainer(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Whether or not to include private sponsorships in the result set+    """+    includePrivate: Boolean = false++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for sponsorships returned from this connection. If left+    blank, the sponsorships will be ordered based on relevancy to the viewer.+    """+    orderBy: SponsorshipOrder+  ): SponsorshipConnection!++  """+  This object's sponsorships as the sponsor.+  """+  sponsorshipsAsSponsor(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for sponsorships returned from this connection. If left+    blank, the sponsorships will be ordered based on relevancy to the viewer.+    """+    orderBy: SponsorshipOrder+  ): SponsorshipConnection!++  """+  Repositories the user has starred.+  """+  starredRepositories(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Order for connection+    """+    orderBy: StarOrder++    """+    Filters starred repositories to only return repositories owned by the viewer.+    """+    ownedByViewer: Boolean+  ): StarredRepositoryConnection!++  """+  The user's description of what they're currently doing.+  """+  status: UserStatus++  """+  Repositories the user has contributed to, ordered by contribution rank, plus repositories the user has created+  """+  topRepositories(+    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories returned from the connection+    """+    orderBy: RepositoryOrder!++    """+    How far back in time to fetch contributed repositories+    """+    since: DateTime+  ): RepositoryConnection!++  """+  The user's Twitter username.+  """+  twitterUsername: String++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The HTTP URL for this user+  """+  url: URI!++  """+  Can the viewer pin repositories and gists to the profile?+  """+  viewerCanChangePinnedItems: Boolean!++  """+  Can the current viewer create new projects on this owner.+  """+  viewerCanCreateProjects: Boolean!++  """+  Whether or not the viewer is able to follow the user.+  """+  viewerCanFollow: Boolean!++  """+  Whether or not this user is followed by the viewer.+  """+  viewerIsFollowing: Boolean!++  """+  A list of repositories the given user is watching.+  """+  watching(+    """+    Affiliation options for repositories returned from the connection. If none+    specified, the results will include repositories for which the current+    viewer is an owner or collaborator, or member.+    """+    affiliations: [RepositoryAffiliation]++    """+    Returns the elements in the list that come after the specified cursor.+    """+    after: String++    """+    Returns the elements in the list that come before the specified cursor.+    """+    before: String++    """+    Returns the first _n_ elements from the list.+    """+    first: Int++    """+    If non-null, filters repositories according to whether they have been locked+    """+    isLocked: Boolean++    """+    Returns the last _n_ elements from the list.+    """+    last: Int++    """+    Ordering options for repositories returned from the connection+    """+    orderBy: RepositoryOrder++    """+    Array of owner's affiliation options for repositories returned from the+    connection. For example, OWNER will include only repositories that the+    organization or user being viewed owns.+    """+    ownerAffiliations: [RepositoryAffiliation] = [OWNER, COLLABORATOR]++    """+    If non-null, filters repositories according to privacy+    """+    privacy: RepositoryPrivacy+  ): RepositoryConnection!++  """+  A URL pointing to the user's public website/blog.+  """+  websiteUrl: URI+}++"""+The possible durations that a user can be blocked for.+"""+enum UserBlockDuration {+  """+  The user was blocked for 1 day+  """+  ONE_DAY++  """+  The user was blocked for 30 days+  """+  ONE_MONTH++  """+  The user was blocked for 7 days+  """+  ONE_WEEK++  """+  The user was blocked permanently+  """+  PERMANENT++  """+  The user was blocked for 3 days+  """+  THREE_DAYS+}++"""+Represents a 'user_blocked' event on a given user.+"""+type UserBlockedEvent implements Node {+  """+  Identifies the actor who performed the event.+  """+  actor: Actor++  """+  Number of days that the user was blocked for.+  """+  blockDuration: UserBlockDuration!++  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!+  id: ID!++  """+  The user who was blocked.+  """+  subject: User+}++"""+The connection type for User.+"""+type UserConnection {+  """+  A list of edges.+  """+  edges: [UserEdge]++  """+  A list of nodes.+  """+  nodes: [User]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edit on user content+"""+type UserContentEdit implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  Identifies the date and time when the object was deleted.+  """+  deletedAt: DateTime++  """+  The actor who deleted this content+  """+  deletedBy: Actor++  """+  A summary of the changes for this edit+  """+  diff: String++  """+  When this content was edited+  """+  editedAt: DateTime!++  """+  The actor who edited this content+  """+  editor: Actor+  id: ID!++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!+}++"""+A list of edits to content.+"""+type UserContentEditConnection {+  """+  A list of edges.+  """+  edges: [UserContentEditEdge]++  """+  A list of nodes.+  """+  nodes: [UserContentEdit]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type UserContentEditEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: UserContentEdit+}++"""+Represents a user.+"""+type UserEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: User+}++"""+Email attributes from External Identity+"""+type UserEmailMetadata {+  """+  Boolean to identify primary emails+  """+  primary: Boolean++  """+  Type of email+  """+  type: String++  """+  Email id+  """+  value: String!+}++"""+The user's description of what they're currently doing.+"""+type UserStatus implements Node {+  """+  Identifies the date and time when the object was created.+  """+  createdAt: DateTime!++  """+  An emoji summarizing the user's status.+  """+  emoji: String++  """+  The status emoji as HTML.+  """+  emojiHTML: HTML++  """+  If set, the status will not be shown after this date.+  """+  expiresAt: DateTime++  """+  ID of the object.+  """+  id: ID!++  """+  Whether this status indicates the user is not fully available on GitHub.+  """+  indicatesLimitedAvailability: Boolean!++  """+  A brief message describing what the user is doing.+  """+  message: String++  """+  The organization whose members can see this status. If null, this status is publicly visible.+  """+  organization: Organization++  """+  Identifies the date and time when the object was last updated.+  """+  updatedAt: DateTime!++  """+  The user who has this status.+  """+  user: User!+}++"""+The connection type for UserStatus.+"""+type UserStatusConnection {+  """+  A list of edges.+  """+  edges: [UserStatusEdge]++  """+  A list of nodes.+  """+  nodes: [UserStatus]++  """+  Information to aid in pagination.+  """+  pageInfo: PageInfo!++  """+  Identifies the total count of items in the connection.+  """+  totalCount: Int!+}++"""+An edge in a connection.+"""+type UserStatusEdge {+  """+  A cursor for use in pagination.+  """+  cursor: String!++  """+  The item at the end of the edge.+  """+  node: UserStatus+}++"""+Ordering options for user status connections.+"""+input UserStatusOrder {+  """+  The ordering direction.+  """+  direction: OrderDirection!++  """+  The field to order user statuses by.+  """+  field: UserStatusOrderField!+}++"""+Properties by which user status connections can be ordered.+"""+enum UserStatusOrderField {+  """+  Order user statuses by when they were updated.+  """+  UPDATED_AT+}++"""+A hovercard context with a message describing how the viewer is related.+"""+type ViewerHovercardContext implements HovercardContext {+  """+  A string describing this context+  """+  message: String!++  """+  An octicon to accompany this context+  """+  octicon: String!++  """+  Identifies the user who is related to this context.+  """+  viewer: User!+}++"""+A valid x509 certificate string+"""+scalar X509Certificate