packages feed

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