datastar-hs 1.1.0.0 → 1.1.0.1
raw patch · 5 files changed
+42/−3 lines, 5 filesdep ~aesonPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: aeson
API changes (from Hackage documentation)
- Hypermedia.Datastar.ExecuteScript: instance GHC.Show.Show Hypermedia.Datastar.ExecuteScript.ExecuteScript
- Hypermedia.Datastar.PatchElements: instance GHC.Show.Show Hypermedia.Datastar.PatchElements.PatchElements
- Hypermedia.Datastar.PatchSignals: instance GHC.Show.Show Hypermedia.Datastar.PatchSignals.PatchSignals
- Hypermedia.Datastar.Types: instance GHC.Show.Show Hypermedia.Datastar.Types.ElementNamespace
- Hypermedia.Datastar.Types: instance GHC.Show.Show Hypermedia.Datastar.Types.ElementPatchMode
- Hypermedia.Datastar.Types: instance GHC.Show.Show Hypermedia.Datastar.Types.EventType
- Hypermedia.Datastar.WAI: instance GHC.Show.Show Hypermedia.Datastar.WAI.CompressionStrategy
+ Hypermedia.Datastar.ExecuteScript: instance GHC.Internal.Show.Show Hypermedia.Datastar.ExecuteScript.ExecuteScript
+ Hypermedia.Datastar.PatchElements: instance GHC.Internal.Show.Show Hypermedia.Datastar.PatchElements.PatchElements
+ Hypermedia.Datastar.PatchSignals: instance GHC.Internal.Show.Show Hypermedia.Datastar.PatchSignals.PatchSignals
+ Hypermedia.Datastar.Types: instance GHC.Internal.Show.Show Hypermedia.Datastar.Types.ElementNamespace
+ Hypermedia.Datastar.Types: instance GHC.Internal.Show.Show Hypermedia.Datastar.Types.ElementPatchMode
+ Hypermedia.Datastar.Types: instance GHC.Internal.Show.Show Hypermedia.Datastar.Types.EventType
+ Hypermedia.Datastar.WAI: instance GHC.Internal.Show.Show Hypermedia.Datastar.WAI.CompressionStrategy
Files
- CHANGELOG.md +13/−0
- datastar-hs.cabal +3/−1
- src/Hypermedia/Datastar/WAI.hs +1/−2
- test/Hypermedia/Datastar/ReadSignalsSpec.hs +23/−0
- test/Main.hs +2/−0
CHANGELOG.md view
@@ -1,5 +1,18 @@ # Changelog +## 1.1.0.1++All changes contributed by [@sectore](https://github.com/sectore) — thanks!++* Fix double URL-decoding of the `datastar` query parameter in `readSignals`+ (GET/DELETE requests). `WAI.queryString` is already decoded, so the extra+ decode corrupted signal values containing literal `+` or `%` characters+ ([#8](https://github.com/starfederation/datastar-haskell/pull/8))+* Fix GHC warnings in the add-on packages' test suites+ ([#6](https://github.com/starfederation/datastar-haskell/pull/6))+* Add a `haskell-flake` based Nix flake for development+ ([#7](https://github.com/starfederation/datastar-haskell/pull/7))+ ## 1.1.0.0 * **Breaking**: the compressor modules moved to add-on packages so that the
datastar-hs.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: datastar-hs-version: 1.1.0.0+version: 1.1.0.1 synopsis: Haskell bindings for Datastar description: Server-side SDK for building real-time hypermedia applications with@@ -98,8 +98,10 @@ Hypermedia.Datastar.NegotiationSpec Hypermedia.Datastar.PatchElementsSpec Hypermedia.Datastar.PatchSignalsSpec+ Hypermedia.Datastar.ReadSignalsSpec Hypermedia.Datastar.SSESpec build-depends:+ , aeson , base , bytestring , datastar-hs
src/Hypermedia/Datastar/WAI.hs view
@@ -274,8 +274,7 @@ parseFromQuery :: (FromJSON a) => WAI.Request -> Either String a parseFromQuery req = case lookup "datastar" (WAI.queryString req) of- (Just (Just val)) ->- A.eitherDecodeStrict $ WAI.urlDecode True val+ (Just (Just val)) -> A.eitherDecodeStrict val _ -> Left "missing 'datastar' query parameter" parseFromBody :: (FromJSON a) => WAI.Request -> IO (Either String a)
+ test/Hypermedia/Datastar/ReadSignalsSpec.hs view
@@ -0,0 +1,23 @@+module Hypermedia.Datastar.ReadSignalsSpec (spec) where++import Test.Hspec++import Data.Aeson (FromJSON (..), withObject, (.:))+import Data.Text (Text)++import Network.Wai (defaultRequest, queryString, requestMethod)++import Hypermedia.Datastar.WAI (readSignals)++newtype Msg = Msg Text deriving (Eq, Show)++instance FromJSON Msg where+ parseJSON = withObject "Msg" $ \o -> Msg <$> o .: "msg"++spec :: Spec+spec = describe "readSignals" $ do+ let req q = defaultRequest{requestMethod = "GET", queryString = [("datastar", Just q)]}++ it "decodes JSON signals from the query string exactly as sent" $ do+ result <- readSignals (req "{\"msg\":\"a+b\"}")+ result `shouldBe` Right (Msg "a+b")
test/Main.hs view
@@ -6,6 +6,7 @@ import Hypermedia.Datastar.NegotiationSpec qualified import Hypermedia.Datastar.PatchElementsSpec qualified import Hypermedia.Datastar.PatchSignalsSpec qualified+import Hypermedia.Datastar.ReadSignalsSpec qualified import Hypermedia.Datastar.SSESpec qualified main :: IO ()@@ -14,4 +15,5 @@ Hypermedia.Datastar.NegotiationSpec.spec Hypermedia.Datastar.PatchElementsSpec.spec Hypermedia.Datastar.PatchSignalsSpec.spec+ Hypermedia.Datastar.ReadSignalsSpec.spec Hypermedia.Datastar.SSESpec.spec