graphql-spice 1.0.5.0 → 1.0.6.0
raw patch · 10 files changed
+92/−20 lines, 10 filesdep ~graphqlPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: graphql
API changes (from Hackage documentation)
+ Language.GraphQL.TH: gql :: QuasiQuoter
Files
- CHANGELOG.md +6/−0
- graphql-spice.cabal +4/−2
- src/Language/GraphQL/Class.hs +1/−0
- src/Language/GraphQL/TH.hs +49/−0
- tests/Language/GraphQL/ClassSpec.hs +1/−12
- tests/Language/GraphQL/CoerceSpec.hs +1/−0
- tests/Language/GraphQL/DirectiveSpec.hs +1/−2
- tests/Language/GraphQL/FragmentSpec.hs +1/−2
- tests/Language/GraphQL/RootOperationSpec.hs +1/−2
- tests/Language/GraphQL/THSpec.hs +27/−0
CHANGELOG.md view
@@ -6,6 +6,11 @@ and this project adheres to [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## [1.0.6.0] - 2024-12-06+### Added+- `Language.GraphQL.Class.gql` is moved to `Language.GraphQL.TH` where it was+ before in `graphql`.+ ## [1.0.5.0] - 2024-11-21 ### Added - Add `ToGraphQL` and `FromGraphQL` instances for `Value` and `HashMap`.@@ -41,6 +46,7 @@ - JSON serialization. - Test helpers. +[1.0.6.0]: https://git.caraus.tech/OSS/graphql-spice/compare/v1.0.5.0...v1.0.6.0 [1.0.5.0]: https://git.caraus.tech/OSS/graphql-spice/compare/v1.0.4.0...v1.0.5.0 [1.0.4.0]: https://git.caraus.tech/OSS/graphql-spice/compare/v1.0.3.0...v1.0.4.0 [1.0.3.0]: https://git.caraus.tech/OSS/graphql-spice/compare/v1.0.2.0...v1.0.3.0
graphql-spice.cabal view
@@ -1,7 +1,7 @@ cabal-version: 3.0 name: graphql-spice-version: 1.0.5.0+version: 1.0.6.0 synopsis: GraphQL with batteries description: Various extensions and convenience functions for the core graphql package.@@ -27,6 +27,7 @@ Language.GraphQL.Class Language.GraphQL.JSON Language.GraphQL.Resolver+ Language.GraphQL.TH Test.Hspec.GraphQL other-modules: hs-source-dirs: src@@ -38,7 +39,7 @@ containers >= 0.6 && < 0.8, exceptions ^>= 0.10.4, hspec-expectations >= 0.8.2 && < 0.9,- graphql >= 1.3.0 && < 1.5.0,+ graphql ^>= 1.5.0, megaparsec >= 9.0 && < 10, scientific ^>= 0.3.7, template-haskell >= 2.16 && < 3,@@ -58,6 +59,7 @@ Language.GraphQL.DirectiveSpec Language.GraphQL.FragmentSpec Language.GraphQL.RootOperationSpec+ Language.GraphQL.THSpec hs-source-dirs: tests ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
src/Language/GraphQL/Class.hs view
@@ -485,6 +485,7 @@ -- | Removes leading and trailing newlines. Indentation of the first line is -- removed from each line of the string.+{-# DEPRECATED gql "Use Language.GraphQL.TH.gql instead" #-} gql :: QuasiQuoter gql = QuasiQuoter { quoteExp = pure . LitE . StringL . stripIndentation
+ src/Language/GraphQL/TH.hs view
@@ -0,0 +1,49 @@+{- This Source Code Form is subject to the terms of the Mozilla Public License,+ v. 2.0. If a copy of the MPL was not distributed with this file, You can+ obtain one at https://mozilla.org/MPL/2.0/. -}++module Language.GraphQL.TH+ ( gql+ ) where++import Language.Haskell.TH+ ( Exp(..)+ , Lit(..)+ )+import Language.Haskell.TH.Quote (QuasiQuoter(..))++stripIndentation :: String -> String+stripIndentation code = reverse+ $ dropWhile isLineBreak+ $ reverse+ $ unlines+ $ indent spaces <$> lines' withoutLeadingNewlines+ where+ indent 0 xs = xs+ indent count (' ' : xs) = indent (count - 1) xs+ indent _ xs = xs+ withoutLeadingNewlines = dropWhile isLineBreak code+ spaces = length $ takeWhile (== ' ') withoutLeadingNewlines+ lines' "" = []+ lines' string =+ let (line, rest) = break isLineBreak string+ reminder =+ case rest of+ [] -> []+ '\r' : '\n' : strippedString -> lines' strippedString+ _ : strippedString -> lines' strippedString+ in line : reminder+ isLineBreak = flip any ['\n', '\r'] . (==)++-- | Removes leading and trailing newlines. Indentation of the first line is+-- removed from each line of the string.+gql :: QuasiQuoter+gql = QuasiQuoter+ { quoteExp = pure . LitE . StringL . stripIndentation+ , quotePat = const+ $ fail "Illegal gql QuasiQuote (allowed as expression only, used as a pattern)"+ , quoteType = const+ $ fail "Illegal gql QuasiQuote (allowed as expression only, used as a type)"+ , quoteDec = const+ $ fail "Illegal gql QuasiQuote (allowed as expression only, used as a declaration)"+ }
tests/Language/GraphQL/ClassSpec.hs view
@@ -5,6 +5,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-}+ module Language.GraphQL.ClassSpec ( spec ) where@@ -18,7 +19,6 @@ , ToGraphQL(..) , deriveFromGraphQL , deriveToGraphQL- , gql ) import Test.Hspec (Spec, describe, it, shouldBe) import qualified Data.HashMap.Strict as HashMap@@ -161,14 +161,3 @@ let given = Type.Enum "TWO_FIELD_ENUM_2" expected = TWO_FIELD_ENUM_2 in fromGraphQL given `shouldBe` Just expected-- describe "gql" $- it "replaces CRNL with NL" $- let expected :: Text- expected = "line1\nline2\nline3"- actual = [gql| - line1 - line2 - line3 - |]- in actual `shouldBe` expected
tests/Language/GraphQL/CoerceSpec.hs view
@@ -3,6 +3,7 @@ obtain one at https://mozilla.org/MPL/2.0/. -} {-# LANGUAGE OverloadedStrings #-}+ module Language.GraphQL.CoerceSpec ( spec ) where
tests/Language/GraphQL/DirectiveSpec.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE PackageImports #-} module Language.GraphQL.DirectiveSpec ( spec@@ -18,7 +17,7 @@ import Language.GraphQL.Type import qualified Language.GraphQL.Type.Out as Out import Test.Hspec (Spec, describe, it)-import "graphql-spice" Test.Hspec.GraphQL+import Test.Hspec.GraphQL experimentalResolver :: Schema IO experimentalResolver = schema queryType Nothing Nothing mempty
tests/Language/GraphQL/FragmentSpec.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE PackageImports #-} module Language.GraphQL.FragmentSpec ( spec@@ -20,7 +19,7 @@ import Language.GraphQL.TH import qualified Language.GraphQL as GraphQL import Test.Hspec (Spec, describe, it)-import "graphql-spice" Test.Hspec.GraphQL+import Test.Hspec.GraphQL size :: (Text, Value) size = ("size", String "L")
tests/Language/GraphQL/RootOperationSpec.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-}-{-# LANGUAGE PackageImports #-} module Language.GraphQL.RootOperationSpec ( spec@@ -18,7 +17,7 @@ import Language.GraphQL.TH import Language.GraphQL.Type import qualified Language.GraphQL.Type.Out as Out-import "graphql-spice" Test.Hspec.GraphQL+import Test.Hspec.GraphQL hatType :: Out.ObjectType IO hatType = Out.ObjectType "Hat" Nothing []
+ tests/Language/GraphQL/THSpec.hs view
@@ -0,0 +1,27 @@+{- This Source Code Form is subject to the terms of the Mozilla Public License,+ v. 2.0. If a copy of the MPL was not distributed with this file, You can+ obtain one at https://mozilla.org/MPL/2.0/. -}++{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-}++module Language.GraphQL.THSpec+ ( spec+ ) where++import Data.Text (Text)+import Language.GraphQL.TH (gql)+import Test.Hspec (Spec, describe, it, shouldBe)++spec :: Spec+spec = do+ describe "gql" $+ it "replaces CRNL with NL" $+ let expected :: Text+ expected = "line1\nline2\nline3"+ actual = [gql| + line1 + line2 + line3 + |]+ in actual `shouldBe` expected