om-elm 2.0.0.8 → 2.0.1.0
raw patch · 2 files changed
+65/−25 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ System.Elm.Middleware: elmSiteDev :: Map PathInfo FilePath -> Q (TExp Middleware)
+ System.Elm.Middleware: elmSiteOptimize :: Map PathInfo FilePath -> Q (TExp Middleware)
Files
- om-elm.cabal +1/−1
- src/System/Elm/Middleware.hs +64/−24
om-elm.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: om-elm-version: 2.0.0.8+version: 2.0.1.0 synopsis: Haskell utilities for building embedded Elm programs. description: This package provides utilities for serving Elm programs directly from your Haskell binary. It uses TemplateHaskell
src/System/Elm/Middleware.hs view
@@ -33,36 +33,49 @@ See the function documnetation for more details. -}-module System.Elm.Middleware (- requireElm,- elmSite,- elmSiteDebug,- PathInfo,-) where+module System.Elm.Middleware+ ( requireElm+ , elmSite+ , elmSiteDebug+ , elmSiteDev+ , elmSiteOptimize+ , PathInfo+ )+where import Control.Exception.Safe (tryAny) import Control.Monad (void)-import Data.Bool (bool) import Data.Map (Map)-import Data.String (IsString, fromString)+import Data.String (IsString(fromString)) import Data.Text (Text)-import Distribution.Simple (UserHooks, hookedPrograms, preConf,- simpleUserHooks)-import Distribution.Simple.Program (Program, configureAllKnownPrograms,- defaultProgramDb, requireProgram, simpleProgram)-import Distribution.Simple.Setup (configVerbosity, fromFlagOrDefault)+import Distribution.Simple (UserHooks(hookedPrograms, preConf), simpleUserHooks)+import Distribution.Simple.Program+ ( Program, configureAllKnownPrograms, defaultProgramDb, requireProgram+ , simpleProgram+ )+import Distribution.Simple.Setup+ ( ConfigFlags(configVerbosity), fromFlagOrDefault+ ) import Distribution.Verbosity (normal) import Language.Haskell.TH (Code(examineCode), Q, TExp, runIO) import Language.Haskell.TH.Syntax (addDependentFile) import Network.HTTP.Types (methodNotAllowed405, ok200)-import Network.Wai (Application, Middleware, pathInfo, requestMethod,- responseLBS)+import Network.Wai+ ( Request(pathInfo, requestMethod), Application, Middleware, responseLBS+ )+import Prelude+ ( Bool(True), Eq((==)), Foldable(length), Functor(fmap), Maybe(Just, Nothing)+ , Monad((>>=)), MonadFail(fail), Semigroup((<>)), Show(show)+ , Traversable(mapM), ($), (++), (.), (<$>), (=<<), FilePath, String, putStrLn+ , reverse, take+ ) import Safe (lastMay) import System.Directory (createDirectory, removeDirectoryRecursive) import System.Exit (ExitCode(ExitSuccess))-import System.Posix (ProcessStatus(Exited), executeFile, forkProcess,- getProcessStatus)+import System.Posix+ ( ProcessStatus(Exited), executeFile, forkProcess, getProcessStatus+ ) import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS8 import qualified Data.Map as Map@@ -75,7 +88,7 @@ > import Distribution.Simple (defaultMainWithHooks, simpleUserHooks) > import System.Elm.Middleware (requireElm)- > + > > main = defaultMainWithHooks (requireElm simpleUserHooks) -}@@ -115,18 +128,32 @@ will construct a WAI 'Middleware' which serves the compiled elm program on @/app.js@. + Neither the @--optimize@ nor the @--debug@ flags are passed to the+ elm compiler.+ -}+elmSiteDev :: Map PathInfo FilePath -> Q (TExp Middleware)+elmSiteDev = elmSite2 Dev+++{-| Deprecated. Synonym for 'elmSiteDev'. -}+{-# DEPRECATED elmSite "Use elmSiteDev instead. This function will be removed in a future release." #-} elmSite :: Map PathInfo FilePath -> Q (TExp Middleware)-elmSite = elmSite2 False+elmSite = elmSite2 Dev -{- | Like 'elmSite', but serve the debug elm runtime. -}+{- | Like 'elmSiteDev', but serve the debug elm runtime. -} elmSiteDebug :: Map PathInfo FilePath -> Q (TExp Middleware)-elmSiteDebug = elmSite2 True+elmSiteDebug = elmSite2 Debug -elmSite2 :: Bool -> Map PathInfo FilePath -> Q (TExp Middleware)-elmSite2 debug spec =+{- | Like 'elmSiteDev', but pass @--optimize@ to the elm compiler. -}+elmSiteOptimize :: Map PathInfo FilePath -> Q (TExp Middleware)+elmSiteOptimize = elmSite2 Optimize+++elmSite2 :: Mode -> Map PathInfo FilePath -> Q (TExp Middleware)+elmSite2 mode spec = buildMiddleware =<< mapM (\(u, c) -> (u,) <$> c) [ (uriPath, compileElm uriPath elmFile)@@ -167,13 +194,20 @@ void . tryAny $ removeDirectoryRecursive buildDir createDirectory buildDir putStrLn $ "Compiling elm file: " ++ elmFile+ let+ flags :: [String]+ flags =+ case mode of+ Debug -> ["--debug"]+ Dev -> []+ Optimize -> ["--optimize"] forkProcess ( executeFile "elm" True ([ "make", elmFile, "--output=" <> buildFile- ] ++ bool [] ["--debug"] debug) Nothing+ ] ++ flags) Nothing ) >>= getProcessStatus True True >>= \case Nothing -> fail "elm should have ended." Just (Exited ExitSuccess) ->@@ -208,5 +242,11 @@ {- | A WAI uri path, as per the meaning of 'pathInfo'. -} type PathInfo = [Text]+++data Mode+ = Optimize+ | Dev+ | Debug