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 +23/−0
- morpheus-graphql-core.cabal +54/−6
- src/Data/Morpheus/Core.hs +12/−12
- src/Data/Morpheus/Error.hs +2/−2
- src/Data/Morpheus/Error/Fragment.hs +5/−8
- src/Data/Morpheus/Error/NameCollision.hs +5/−0
- src/Data/Morpheus/Error/Schema.hs +0/−25
- src/Data/Morpheus/Error/Utils.hs +1/−3
- src/Data/Morpheus/Error/Variable.hs +1/−2
- src/Data/Morpheus/Error/Warning.hs +2/−15
- src/Data/Morpheus/Ext/Elems.hs +25/−0
- src/Data/Morpheus/Ext/Failure.hs +21/−0
- src/Data/Morpheus/Ext/KeyOf.hs +38/−0
- src/Data/Morpheus/Ext/Map.hs +104/−0
- src/Data/Morpheus/Ext/MergeSet.hs +106/−0
- src/Data/Morpheus/Ext/OrdMap.hs +92/−0
- src/Data/Morpheus/Ext/SafeHashMap.hs +81/−0
- src/Data/Morpheus/Ext/SemigroupM.hs +82/−0
- src/Data/Morpheus/Internal/Graph.hs +10/−19
- src/Data/Morpheus/Internal/TH.hs +6/−111
- src/Data/Morpheus/Internal/Utils.hs +60/−254
- src/Data/Morpheus/Parser.hs +12/−5
- src/Data/Morpheus/Parsing/Document/TypeSystem.hs +110/−128
- src/Data/Morpheus/Parsing/Internal/Arguments.hs +8/−7
- src/Data/Morpheus/Parsing/Internal/Internal.hs +30/−22
- src/Data/Morpheus/Parsing/Internal/Pattern.hs +57/−47
- src/Data/Morpheus/Parsing/Internal/Terms.hs +138/−106
- src/Data/Morpheus/Parsing/Internal/Value.hs +19/−35
- src/Data/Morpheus/Parsing/Request/Operation.hs +21/−20
- src/Data/Morpheus/Parsing/Request/Parser.hs +18/−8
- src/Data/Morpheus/Parsing/Request/Selection.hs +12/−12
- src/Data/Morpheus/QuasiQuoter.hs +18/−10
- src/Data/Morpheus/Rendering/RenderGQL.hs +60/−32
- src/Data/Morpheus/Rendering/RenderIntrospection.hs +5/−19
- src/Data/Morpheus/Schema/DSL.hs +8/−7
- src/Data/Morpheus/Schema/Schema.hs +3/−18
- src/Data/Morpheus/Schema/SchemaAPI.hs +5/−4
- src/Data/Morpheus/Types/App.hs +5/−17
- src/Data/Morpheus/Types/GQLScalar.hs +2/−14
- src/Data/Morpheus/Types/ID.hs +2/−12
- src/Data/Morpheus/Types/IO.hs +7/−17
- src/Data/Morpheus/Types/Internal/AST.hs +5/−17
- src/Data/Morpheus/Types/Internal/AST/Base.hs +18/−38
- src/Data/Morpheus/Types/Internal/AST/DirectiveLocation.hs +2/−1
- src/Data/Morpheus/Types/Internal/AST/Fields.hs +56/−68
- src/Data/Morpheus/Types/Internal/AST/MergeSet.hs +0/−152
- src/Data/Morpheus/Types/Internal/AST/OrdMap.hs +0/−100
- src/Data/Morpheus/Types/Internal/AST/SafeHashMap.hs +0/−91
- src/Data/Morpheus/Types/Internal/AST/Selection.hs +46/−48
- src/Data/Morpheus/Types/Internal/AST/TH.hs +1/−8
- src/Data/Morpheus/Types/Internal/AST/TypeCategory.hs +1/−2
- src/Data/Morpheus/Types/Internal/AST/TypeSystem.hs +50/−52
- src/Data/Morpheus/Types/Internal/AST/Value.hs +27/−50
- src/Data/Morpheus/Types/Internal/Config.hs +1/−5
- src/Data/Morpheus/Types/Internal/Resolving.hs +4/−16
- src/Data/Morpheus/Types/Internal/Resolving/Core.hs +7/−10
- src/Data/Morpheus/Types/Internal/Resolving/Event.hs +14/−21
- src/Data/Morpheus/Types/Internal/Resolving/Resolver.hs +19/−56
- src/Data/Morpheus/Types/Internal/Resolving/ResolverState.hs +11/−24
- src/Data/Morpheus/Types/Internal/Stitching.hs +14/−25
- src/Data/Morpheus/Types/Internal/Validation.hs +3/−20
- src/Data/Morpheus/Types/Internal/Validation/Error.hs +1/−4
- src/Data/Morpheus/Types/Internal/Validation/Internal.hs +1/−14
- src/Data/Morpheus/Types/Internal/Validation/SchemaValidator.hs +1/−14
- src/Data/Morpheus/Types/Internal/Validation/Validator.hs +9/−28
- src/Data/Morpheus/Types/SelectionTree.hs +1/−7
- src/Data/Morpheus/Validation/Document/Validation.hs +29/−46
- src/Data/Morpheus/Validation/Internal/Arguments.hs +8/−17
- src/Data/Morpheus/Validation/Internal/Directive.hs +2/−16
- src/Data/Morpheus/Validation/Internal/Value.hs +10/−31
- src/Data/Morpheus/Validation/Query/Fragment.hs +1/−11
- src/Data/Morpheus/Validation/Query/FragmentPreconditions.hs +1/−9
- src/Data/Morpheus/Validation/Query/Selection.hs +4/−18
- src/Data/Morpheus/Validation/Query/UnionSelection.hs +10/−11
- src/Data/Morpheus/Validation/Query/Validation.hs +5/−0
- src/Data/Morpheus/Validation/Query/Variable.hs +6/−24
- test/Spec.hs +24/−4
- test/Utils/Api.hs +4/−18
- test/Utils/MergeSchema.hs +5/−26
- test/Utils/Rendering.hs +73/−0
- test/Utils/Schema.hs +7/−24
- test/Utils/Utils.hs +21/−32
- test/rendering/simple/directive/query.gql +5/−0
- test/rendering/simple/directive/rendering.gql +5/−0
- test/rendering/simple/fragment/query.gql +12/−0
- test/rendering/simple/fragment/rendering.gql +17/−0
- test/rendering/simple/fragment/variables.json +3/−0
- test/rendering/simple/mutation/query.gql +9/−0
- test/rendering/simple/mutation/rendering.gql +9/−0
- test/rendering/simple/nested/query.gql +22/−0
- test/rendering/simple/nested/rendering.gql +22/−0
- test/rendering/simple/query/query.gql +9/−0
- test/rendering/simple/query/rendering.gql +9/−0
- test/rendering/simple/schema.gql +17/−0
- test/rendering/simple/simple/query.gql +9/−0
- test/rendering/simple/simple/rendering.gql +9/−0
- test/rendering/simple/subscription/query.gql +9/−0
- test/rendering/simple/subscription/rendering.gql +9/−0
- test/rendering/union/interface/query.gql +12/−0
- test/rendering/union/interface/rendering.gql +17/−0
- test/rendering/union/interface/variables.json +3/−0
- test/rendering/union/schema.gql +46/−0
- test/rendering/union/union/query.gql +14/−0
- test/rendering/union/union/rendering.gql +10/−0
- test/rendering/union/union/variables.json +3/−0
- test/rendering/variable/enum/query.gql +6/−0
- test/rendering/variable/enum/rendering.gql +6/−0
- test/rendering/variable/enum/variables.json +3/−0
- test/rendering/variable/include-exclude/query.gql +10/−0
- test/rendering/variable/include-exclude/rendering.gql +8/−0
- test/rendering/variable/include-exclude/variables.json +4/−0
- test/rendering/variable/input/query.gql +6/−0
- test/rendering/variable/input/rendering.gql +6/−0
- test/rendering/variable/input/variables.json +3/−0
- test/rendering/variable/list/query.gql +6/−0
- test/rendering/variable/list/rendering.gql +6/−0
- test/rendering/variable/list/variables.json +3/−0
- test/rendering/variable/schema.gql +26/−0
- test/rendering/variable/simple/query.gql +6/−0
- test/rendering/variable/simple/rendering.gql +6/−0
- test/rendering/variable/simple/variables.json +3/−0
- test/schema/validation/default-value/argument/missing-field/response.json +3/−3
- test/schema/validation/default-value/argument/unexpected-value/response.json +5/−5
- test/schema/validation/default-value/field/unexpected-value/response.json +8/−8
- test/schema/validation/directive/fail/at-invalid-place/response.json +4/−4
- test/schema/validation/directive/fail/missing-argument/response.json +17/−17
- test/schema/validation/directive/fail/sopthisticated/response.json +18/−18
- test/schema/validation/directive/fail/unexpected-value/response.json +8/−8
- test/schema/validation/directive/fail/unknown-directive/response.json +13/−12
- test/schema/validation/performance-check/response.json +1/−0
- test/schema/validation/performance-check/schema.gql +38947/−0
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