{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Morpheus.Client
( raw,
Fetch (..),
FetchError (..),
ScalarValue (..),
DecodeScalar (..),
EncodeScalar (..),
ID (..),
declareGlobalTypes,
declareGlobalTypesByName,
declareLocalTypes,
declareLocalTypesInline,
clientTypeDeclarations,
-- Fetch API
GQLClient,
GQLClientResult,
ResponseStream,
withHeaders,
request,
forEach,
single,
-- DEPRECATED EXPORTS
gql,
defineByDocument,
defineByDocumentFile,
defineByDocumentFile',
defineByIntrospection,
defineByIntrospectionFile,
defineByIntrospectionFile',
parseClientTypeDeclarations,
readSchemaSource,
SchemaSource,
)
where
import Data.ByteString.Lazy (ByteString)
import qualified Data.ByteString.Lazy as L
( readFile,
)
import Data.Morpheus.Client.CodeGen.Declare
( clientTypeDeclarations,
declareGlobalTypes,
declareGlobalTypesByName,
declareLocalTypes,
declareLocalTypesInline,
internalLegacyLocalDeclareTypes,
parseClientTypeDeclarations,
raw,
)
import Data.Morpheus.Client.CodeGen.Utils (readSchemaSource)
import Data.Morpheus.Client.Fetch
( Fetch (..),
)
import Data.Morpheus.Client.Fetch.ResponseStream
( GQLClient,
ResponseStream,
forEach,
request,
single,
withHeaders,
)
import Data.Morpheus.Client.Fetch.Types
( ExecutableSource,
FetchError (..),
GQLClientResult,
SchemaSource (..),
)
import Data.Morpheus.Types.GQLScalar
( DecodeScalar (..),
EncodeScalar (..),
)
import Data.Morpheus.Types.ID (ID (..))
import Data.Morpheus.Types.Internal.AST
( ScalarValue (..),
)
import Language.Haskell.TH
import Language.Haskell.TH.Quote (QuasiQuoter)
import Language.Haskell.TH.Syntax
( qAddDependentFile,
)
import Relude hiding (ByteString)
{-# DEPRECATED gql "use raw" #-}
gql :: QuasiQuoter
gql = raw
-- DEPRECATED: Legacy Code Exports
{-# DEPRECATED defineByDocumentFile' "use declareLocalTypes" #-}
-- | This variant exposes 'Q FilePath' enabling the use of TH to generate the 'FilePath'. For example, https://hackage.haskell.org/package/file-embed-0.0.13.0/docs/Data-FileEmbed.html#v:makeRelativeToProject can be used to handle multi package projects more reliably.
defineByDocumentFile' :: Q FilePath -> ExecutableSource -> Q [Dec]
defineByDocumentFile' qFilePath args = qFilePath >>= flip defineByDocumentFile args
{-# DEPRECATED defineByIntrospectionFile' "use declareLocalTypes" #-}
-- | This variant exposes 'Q FilePath' enabling the use of TH to generate the 'FilePath'. For example, https://hackage.haskell.org/package/file-embed-0.0.13.0/docs/Data-FileEmbed.html#v:makeRelativeToProject can be used to handle multi package projects more reliably.
defineByIntrospectionFile' :: Q FilePath -> ExecutableSource -> Q [Dec]
defineByIntrospectionFile' path args = path >>= flip defineByIntrospectionFile args
-- with file
{-# DEPRECATED defineByIntrospectionFile "use declareLocalTypes" #-}
defineByIntrospectionFile :: FilePath -> ExecutableSource -> Q [Dec]
defineByIntrospectionFile filePath args = do
qAddDependentFile filePath
defineByIntrospection (L.readFile filePath) args
{-# DEPRECATED defineByDocumentFile "use declareLocalTypes" #-}
defineByDocumentFile :: FilePath -> ExecutableSource -> Q [Dec]
defineByDocumentFile filePath args = do
qAddDependentFile filePath
defineByDocument (L.readFile filePath) args
-- direct
{-# DEPRECATED defineByDocument "use clientTypeDeclarations" #-}
defineByDocument :: IO ByteString -> ExecutableSource -> Q [Dec]
defineByDocument doc = internalLegacyLocalDeclareTypes (GQL <$> doc)
{-# DEPRECATED defineByIntrospection "use clientTypeDeclarations" #-}
defineByIntrospection :: IO ByteString -> ExecutableSource -> Q [Dec]
defineByIntrospection doc = internalLegacyLocalDeclareTypes (JSON <$> doc)