packages feed

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 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