{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Data.Morpheus.Core
  ( Config (..),
    RenderGQL (..),
    SelectionTree (..),
    VALIDATION_MODE (..),
    ValidateSchema (..),
    debugConfig,
    defaultConfig,
    internalSchema,
    parseFullSchema,
    parseRequest,
    parseRequestWith,
    parseSchema,
    parseTypeDefinitions,
    render,
    validateRequest,
  )
where

import Data.ByteString.Lazy.Char8
  ( ByteString,
  )
import Data.Morpheus.Ext.Result
  ( GQLResult,
  )
import Data.Morpheus.Internal.Utils ((<:>))
import Data.Morpheus.Parser
  ( parseRequest,
    parseRequestWith,
    parseSchema,
    parseTypeDefinitions,
  )
import Data.Morpheus.Rendering.RenderGQL (RenderGQL (..), render)
import Data.Morpheus.Schema.Schema (internalSchema)
import Data.Morpheus.Types.Internal.AST
  ( Schema,
    VALID,
  )
import Data.Morpheus.Types.Internal.Config
  ( Config (..),
    VALIDATION_MODE (..),
    debugConfig,
    defaultConfig,
  )
import Data.Morpheus.Types.SelectionTree (SelectionTree (..))
import Data.Morpheus.Validation.Document.Validation (ValidateSchema (..))
import Data.Morpheus.Validation.Query.Validation
  ( validateRequest,
  )
import Relude hiding (ByteString)

parseFullSchema :: ByteString -> GQLResult (Schema VALID)
parseFullSchema :: ByteString -> GQLResult (Schema VALID)
parseFullSchema = ByteString -> GQLResult (Schema VALID)
parseSchema (ByteString -> GQLResult (Schema VALID))
-> (Schema VALID -> GQLResult (Schema VALID))
-> ByteString
-> GQLResult (Schema VALID)
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> (Schema VALID
forall (s :: Stage). Schema s
internalSchema Schema VALID -> Schema VALID -> GQLResult (Schema VALID)
forall (m :: * -> *) a.
(Merge (HistoryT m) a, Monad m) =>
a -> a -> m a
<:>)