wai-middleware-content-type 0.6.0 → 0.6.1
raw patch · 13 files changed
+62/−55 lines, 13 filesdep ~wai-transformersPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: wai-transformers
API changes (from Hackage documentation)
- Network.Wai.Middleware.ContentType.Types: Other :: Text -> FileExt
+ Network.Wai.Middleware.ContentType.Types: Other :: {-# UNPACK #-} !Text -> FileExt
Files
- src/Network/Wai/Middleware/ContentType.hs +3/−3
- src/Network/Wai/Middleware/ContentType/Blaze.hs +1/−1
- src/Network/Wai/Middleware/ContentType/ByteString.hs +1/−1
- src/Network/Wai/Middleware/ContentType/Cassius.hs +2/−2
- src/Network/Wai/Middleware/ContentType/Clay.hs +3/−3
- src/Network/Wai/Middleware/ContentType/Json.hs +4/−4
- src/Network/Wai/Middleware/ContentType/Julius.hs +2/−2
- src/Network/Wai/Middleware/ContentType/Lucid.hs +2/−2
- src/Network/Wai/Middleware/ContentType/Lucius.hs +2/−2
- src/Network/Wai/Middleware/ContentType/Text.hs +1/−1
- src/Network/Wai/Middleware/ContentType/Types.hs +29/−25
- test/Network/Wai/Middleware/ContentTypeSpec.hs +6/−5
- wai-middleware-content-type.cabal +6/−4
src/Network/Wai/Middleware/ContentType.hs view
@@ -42,11 +42,11 @@ import Network.Wai.Middleware.ContentType.Lucius import Network.Wai.Middleware.ContentType.Text -import Network.Wai.Trans (Response, MiddlewareT, requestHeaders,- pathInfo)+import Network.Wai (Response, requestHeaders, pathInfo)+import Network.Wai.Trans (MiddlewareT) import Network.Wai.Logger (withStdoutLogger) import qualified Data.HashMap.Lazy as HM-import Data.Monoid+import Data.Monoid (First (..)) import Control.Monad.Trans.Control.Aligned (MonadBaseControl (..)) import Data.Singleton.Class (Extractable (..))
src/Network/Wai/Middleware/ContentType/Blaze.hs view
@@ -4,7 +4,7 @@ module Network.Wai.Middleware.ContentType.Blaze where -import Network.Wai.Middleware.ContentType.Types+import Network.Wai.Middleware.ContentType.Types (FileExtListenerT, tell', FileExt (Html), ResponseVia (..)) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response, responseBuilder)
src/Network/Wai/Middleware/ContentType/ByteString.hs view
@@ -1,6 +1,6 @@ module Network.Wai.Middleware.ContentType.ByteString where -import Network.Wai.Middleware.ContentType.Types+import Network.Wai.Middleware.ContentType.Types (FileExtListenerT, tell', getLogger, FileExt, ResponseVia (..)) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response, responseLBS)
src/Network/Wai/Middleware/ContentType/Cassius.hs view
@@ -6,11 +6,11 @@ module Network.Wai.Middleware.ContentType.Cassius where import Network.Wai.Middleware.ContentType.Types as CT-import Network.Wai.Middleware.ContentType.Text+import Network.Wai.Middleware.ContentType.Text (textOnly) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response) -import Text.Cassius+import Text.Cassius (Css, renderCss) import qualified Data.HashMap.Lazy as HM
src/Network/Wai/Middleware/ContentType/Clay.hs view
@@ -6,12 +6,12 @@ module Network.Wai.Middleware.ContentType.Clay where import Network.Wai.Middleware.ContentType.Types as CT-import Network.Wai.Middleware.ContentType.Text+import Network.Wai.Middleware.ContentType.Text (textOnly) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response) -import Clay.Render-import Clay.Stylesheet+import Clay.Render (Config, renderWith)+import Clay.Stylesheet (Css, App) import qualified Data.HashMap.Lazy as HM
src/Network/Wai/Middleware/ContentType/Json.hs view
@@ -4,8 +4,8 @@ module Network.Wai.Middleware.ContentType.Json where -import Network.Wai.Middleware.ContentType.Types-import Network.Wai.Middleware.ContentType.ByteString+import Network.Wai.Middleware.ContentType.Types (FileExtListenerT, FileExt (Json), mapHeaders, overFileExts)+import Network.Wai.Middleware.ContentType.ByteString (bytestringOnly, bytestring) import Network.HTTP.Types (Status, ResponseHeaders) import Network.Wai (Response) @@ -21,8 +21,8 @@ ) => j -> FileExtListenerT m () json =- (overFileExts [Json] $ mapHeaders (("Content-Type","application/json"):))- . bytestring Json . A.encode+ overFileExts [Json] (mapHeaders (("Content-Type","application/json"):))+ . bytestring Json . A.encode {-# INLINEABLE json #-}
src/Network/Wai/Middleware/ContentType/Julius.hs view
@@ -6,11 +6,11 @@ module Network.Wai.Middleware.ContentType.Julius where import Network.Wai.Middleware.ContentType.Types as CT-import Network.Wai.Middleware.ContentType.Text+import Network.Wai.Middleware.ContentType.Text (textOnly) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response) -import Text.Julius+import Text.Julius (Javascript (..), renderJavascript) import qualified Data.HashMap.Lazy as HM
src/Network/Wai/Middleware/ContentType/Lucid.hs view
@@ -4,12 +4,12 @@ module Network.Wai.Middleware.ContentType.Lucid where -import Network.Wai.Middleware.ContentType.Types+import Network.Wai.Middleware.ContentType.Types (FileExtListenerT, tell', FileExt (Html), ResponseVia (..)) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response, responseBuilder) import qualified Lucid.Base as L-import Control.Monad.Trans+import Control.Monad.Trans (MonadTrans (lift)) import qualified Data.HashMap.Lazy as HM
src/Network/Wai/Middleware/ContentType/Lucius.hs view
@@ -6,11 +6,11 @@ module Network.Wai.Middleware.ContentType.Lucius where import Network.Wai.Middleware.ContentType.Types as CT-import Network.Wai.Middleware.ContentType.Text+import Network.Wai.Middleware.ContentType.Text (textOnly) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response) -import Text.Lucius+import Text.Lucius (Css, renderCss) import qualified Data.HashMap.Lazy as HM
src/Network/Wai/Middleware/ContentType/Text.hs view
@@ -4,7 +4,7 @@ module Network.Wai.Middleware.ContentType.Text where -import Network.Wai.Middleware.ContentType.Types+import Network.Wai.Middleware.ContentType.Types (FileExtListenerT, tell', FileExt (Text), ResponseVia (..)) import Network.HTTP.Types (status200, Status, ResponseHeaders) import Network.Wai (Response, responseBuilder)
src/Network/Wai/Middleware/ContentType/Types.hs view
@@ -45,29 +45,33 @@ ) where import qualified Data.Text as T-import Data.HashMap.Lazy hiding (null)+import Data.HashMap.Lazy (HashMap) import qualified Data.HashMap.Lazy as HM-import Data.Monoid+import Data.Monoid ((<>)) import Data.Maybe (fromMaybe)-import Data.Url-import Data.Hashable+import Data.Url (MonadUrl)+import Data.Hashable (Hashable) import qualified Data.ByteString as BS-import Control.Applicative-import Control.Monad.Base-import Control.Monad.Catch-import Control.Monad.Cont-import Control.Monad.Except-import Control.Monad.Trans.Control hiding (embed)-import Control.Monad.Trans.Resource-import Control.Monad.State-import Control.Monad.Writer hiding (tell)-import Control.Monad.Reader-import Control.Monad.Logger+import Control.Monad (MonadPlus)+import Control.Applicative (Alternative)+import Control.Monad.Fix (MonadFix)+import Control.Monad.IO.Class (MonadIO)+import Control.Monad.Trans (MonadTrans (..))+import Control.Monad.Base (MonadBase (..))+import Control.Monad.Catch (MonadMask, MonadCatch, MonadThrow)+import Control.Monad.Cont (MonadCont)+import Control.Monad.Except (MonadError)+import Control.Monad.Trans.Control (MonadTransControl (..), MonadBaseControl (..), ComposeSt, defaultRestoreM, defaultLiftBaseWith)+import Control.Monad.Trans.Resource (MonadResource)+import Control.Monad.State (StateT (..), MonadState, get, put, execStateT, modify')+import Control.Monad.Writer (MonadWriter)+import Control.Monad.Reader (ReaderT (..), MonadReader (..))+import Control.Monad.Logger (MonadLogger (..)) -import GHC.Generics+import GHC.Generics (Generic) import Network.HTTP.Types (Status, ResponseHeaders) import Network.HTTP.Media (mapAccept)-import Network.Wai.Trans (Response)+import Network.Wai (Response) -- | Version of 'Control.Monad.Writer.tell' for 'Control.Monad.State.StateT'@@ -84,7 +88,7 @@ | Json | Text | Markdown- | Other T.Text -- ^ excluding prefix period, i.e. `foo`+ | Other {-# UNPACK #-} !T.Text -- ^ excluding prefix period, i.e. `foo` deriving (Show, Eq, Ord, Generic) instance Hashable FileExt@@ -94,7 +98,7 @@ getFileExt :: [T.Text] -> Maybe FileExt getFileExt chunks = case chunks of [] -> Nothing- xs -> toExt . T.breakOnEnd "." $ last xs+ xs -> toExt (T.breakOnEnd "." (last xs)) {-# INLINEABLE getFileExt #-} @@ -111,7 +115,7 @@ | x `elem` jsons = Just Json | x `elem` texts = Just Text | x `elem` markdowns = Just Markdown- | otherwise = Just $ Other x+ | otherwise = Just (Other x) where htmls = ["htm", "html"] csss = ["css"]@@ -171,17 +175,17 @@ ) getLogger :: Monad m => FileExtListenerT m (Status -> Maybe Integer -> IO ())-getLogger = FileExtListenerT $ ReaderT $ \aplogger -> pure aplogger+getLogger = FileExtListenerT (ReaderT pure) instance MonadTrans FileExtListenerT where- lift m = FileExtListenerT $ ReaderT $ \_ -> lift m+ lift m = FileExtListenerT (ReaderT (\_ -> lift m)) instance MonadReader r m => MonadReader r (FileExtListenerT m) where- ask = FileExtListenerT $ ReaderT $ \_ -> ask+ ask = FileExtListenerT (ReaderT (const ask)) local f (FileExtListenerT (ReaderT g)) = FileExtListenerT $ ReaderT $ \x -> local f (g x) instance Monad m => Monoid (FileExtListenerT m ()) where- mempty = FileExtListenerT $ put mempty+ mempty = FileExtListenerT (put mempty) mappend x y = x >> y deriving instance (MonadResource m, MonadBase IO m) => MonadResource (FileExtListenerT m)@@ -270,6 +274,6 @@ -- > text "foo" -- > invalidEncoding myErrorHandler -- handles all except text/plain invalidEncoding :: Monad m => ResponseVia -> FileExtListenerT m ()-invalidEncoding r = mapM_ (\t -> tell' $ HM.singleton t r) [Html,Css,JavaScript,Json,Text,Markdown]+invalidEncoding r = mapM_ (\t -> tell' (HM.singleton t r)) [Html,Css,JavaScript,Json,Text,Markdown] {-# INLINEABLE invalidEncoding #-}
test/Network/Wai/Middleware/ContentTypeSpec.hs view
@@ -6,16 +6,17 @@ module Network.Wai.Middleware.ContentTypeSpec where import Network.Wai.Middleware.ContentType-import Network.Wai.Trans-import Network.Wai.Internal-import Network.HTTP.Types+ ( FileExtListenerT, FileExt (Other), bytestring, julius, cassius, json, lucid, text+ , textOnly, fileExtsToMiddleware+ )+import Network.Wai (Application)+import Network.HTTP.Types (status406) import qualified Data.Text as T-import qualified Data.Text.Lazy as LT import qualified Data.Text.Lazy.Encoding as LT import qualified Lucid as L import qualified Text.Lucius as SL import qualified Text.Julius as SJ-import Test.Hspec+import Test.Hspec (Spec, it, describe) import Test.Hspec.Wai as HW
wai-middleware-content-type.cabal view
@@ -2,13 +2,15 @@ -- -- see: https://github.com/sol/hpack ----- hash: 9afbbd3c4ff146797016c5eef9779f0e704a685311098f1e20cdf09ca06c944f+-- hash: f497bfc449fb4f1433a5f05220106caabf2e30185da00ecd30075efef2dfa54d name: wai-middleware-content-type-version: 0.6.0+version: 0.6.1 synopsis: Route to different middlewares based on the incoming Accept header. description: Please see the README on Github at <https://git.localcooking.com/tooling/wai-middleware-content-type#readme> category: Web+homepage: https://github.com/athanclark/wai-middleware-content-type#readme+bug-reports: https://github.com/athanclark/wai-middleware-content-type/issues author: Athan Clark maintainer: athan.clark@localcooking.com copyright: 2018 Athan Clark@@ -22,7 +24,7 @@ source-repository head type: git- location: git://git.localcooking.com/tooling/wai-middleware-content-type.git+ location: https://github.com/athanclark/wai-middleware-content-type library exposed-modules:@@ -69,7 +71,7 @@ , urlpath >=8.0.1 , wai >=3.2 , wai-logger- , wai-transformers+ , wai-transformers >=0.1.0 default-language: Haskell2010 test-suite wai-middleware-content-type-test