packages feed

webgear-swagger-ui 1.1.1 → 1.2.0

raw patch · 4 files changed

+23/−49 lines, 4 filesdep +wai-app-staticdep −mime-typesdep ~basedep ~webgear-corePVP ok

version bump matches the API change (PVP)

Dependencies added: wai-app-static

Dependencies removed: mime-types

Dependency ranges changed: base, webgear-core

API changes (from Hackage documentation)

- WebGear.Swagger.UI: swaggerUI :: (StdHandler h m, Sets h [RequiredResponseHeader "Content-Type" Text, RequiredResponseHeader "Content-Type" MimeType, Body HTML ByteString, Body JSON apiSpec, UnknownContentBody] Response) => apiSpec -> RequestHandler h ts
+ WebGear.Swagger.UI: swaggerUI :: (StdHandler h m, Sets h [RequiredResponseHeader "Content-Type" Text, Body HTML ByteString, Body JSON apiSpec, UnknownContentBody] Response) => apiSpec -> RequestHandler h ts

Files

CHANGELOG.md view
@@ -2,6 +2,11 @@  ## [Unreleased] +## [1.2.0] - 2024-03-18++### Changed+- Support for embedding WAI applications in handlers (#36)+ ## [1.1.1] - 2024-01-01  ### Changed@@ -12,6 +17,7 @@ ### Added - First version of webgear-swagger-ui -[Unreleased]: https://github.com/haskell-webgear/webgear/compare/v1.1.1...HEAD+[Unreleased]: https://github.com/haskell-webgear/webgear/compare/v1.2.0...HEAD+[1.2.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.2.0 [1.1.1]: https://github.com/haskell-webgear/webgear/releases/tag/v1.1.1 [1.1.0]: https://github.com/haskell-webgear/webgear/releases/tag/v1.1.0
src/WebGear/Swagger/UI.hs view
@@ -5,36 +5,27 @@   swaggerUI, ) where -import Control.Arrow (returnA, (<+>))+import Control.Arrow ((<+>)) import Data.ByteString (ByteString)-import Data.ByteString.Builder (byteString)-import Data.Text (Text, unpack)+import Data.Text (Text) import qualified Network.HTTP.Types as HTTP-import qualified Network.Mime as Mime+import Network.Wai.Application.Static (embeddedSettings) import WebGear.Core (   Body,   HTML (..),-  Handler (consumeRoute),   JSON (..),-  PlainText (..),   RequestHandler,   RequiredResponseHeader,   Response (..),-  ResponseBody (ResponseBodyBuilder),-  RoutePath (..),   Sets,   StdHandler,   UnknownContentBody,   match,   method,-  ok200,   pathEnd,   respondA,   route,-  setBodyWithoutContentType,-  setHeader,-  unwitnessA,-  (>->),+  serveStatic,  ) import qualified WebGear.Swagger.UI.Embedded as Embedded @@ -50,7 +41,6 @@   , Sets       h       [ RequiredResponseHeader "Content-Type" Text-      , RequiredResponseHeader "Content-Type" Mime.MimeType       , Body HTML ByteString       , Body JSON apiSpec       , UnknownContentBody@@ -96,35 +86,10 @@   apiSpec ->   RequestHandler h ts swaggerJson apiSpec =-  [route| HTTP.GET /swagger.json |]-    $ proc _request -> respondA HTTP.ok200 JSON -< apiSpec+  [route| HTTP.GET /swagger.json |] $+    proc _request -> respondA HTTP.ok200 JSON -< apiSpec -uiAssets ::-  ( StdHandler h m-  , Sets-      h-      [ RequiredResponseHeader "Content-Type" Text-      , RequiredResponseHeader "Content-Type" Mime.MimeType-      , UnknownContentBody-      ]-      Response-  ) =>-  RequestHandler h ts+uiAssets :: (StdHandler h m) => RequestHandler h ts uiAssets =-  [match| HTTP.GET / |]-    $ proc _request -> do-      RoutePath path <- consumeRoute returnA -< ()-      case path of-        [filename] ->-          case lookup (unpack filename) Embedded.uiAssetsDir of-            Nothing -> notFound -< ()-            Just content -> do-              let contentType = Mime.defaultMimeLookup filename-              (ok200 -< ())-                >-> (\resp -> setBodyWithoutContentType -< (resp, ResponseBodyBuilder $ byteString content))-                >-> (\resp -> setHeader @"Content-Type" -< (resp, contentType))-                >-> (\resp -> unwitnessA -< resp)-        _ -> notFound -< ()-  where-    notFound = proc () -> do-      respondA HTTP.notFound404 PlainText -< "" :: Text+  [match| HTTP.GET / |] $+    serveStatic (embeddedSettings Embedded.uiAssetsDir)
src/WebGear/Swagger/UI/Embedded.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE TemplateHaskell #-} +-- | Embed a swagger-ui distribution in Haskell. module WebGear.Swagger.UI.Embedded (   indexHtmlFile,   uiAssetsDir,@@ -8,8 +9,10 @@ import Data.ByteString (ByteString) import qualified Data.FileEmbed as FileEmbed +-- | Contents of index.html from a swagger-ui distribution indexHtmlFile :: ByteString indexHtmlFile = $(FileEmbed.embedFile "index.html") +-- | UI assets from a swagger-ui distribution indexed by their filename uiAssetsDir :: [(FilePath, ByteString)] uiAssetsDir = $(FileEmbed.embedDir "swagger-ui-5.10.5/dist")
webgear-swagger-ui.cabal view
@@ -1,7 +1,7 @@ cabal-version:       2.4  name:                webgear-swagger-ui-version:             1.1.1+version:             1.2.0 synopsis:            Host swagger UI based on WebGear API specifications. description:     WebGear is a library to for building composable, type-safe HTTP API servers.@@ -49,13 +49,13 @@                     , WebGear.Swagger.UI.Embedded   hs-source-dirs:     src   default-language:   Haskell2010-  build-depends:      base >=4.13.0.0 && <4.19+  build-depends:      base >=4.13.0.0 && <4.20                     , bytestring >=0.10.10.1 && <0.13                     , file-embed ==0.0.*                     , http-types ==0.12.*-                    , mime-types ==0.1.*                     , text >=1.2.0.0 && <2.2-                    , webgear-core ^>=1.1.1+                    , wai-app-static ==3.1.*+                    , webgear-core ^>=1.2.0   default-extensions: Arrows                       DataKinds                       FlexibleContexts