packages feed

elm-server 0.8 → 0.9

raw patch · 2 files changed

+37/−18 lines, 2 filesdep +directorydep +processdep ~Elmdep ~happstack-server

Dependencies added: directory, process

Dependency ranges changed: Elm, happstack-server

Files

Server.hs view
@@ -3,37 +3,45 @@  import Control.Monad (msum,guard) import Control.Monad.Trans (MonadIO(liftIO))-import Data.List (isPrefixOf, isSuffixOf)+import Data.List (isPrefixOf, isSuffixOf, (\\)) import Data.Version (showVersion) import Happstack.Server import Happstack.Server.Compression+import System.Directory import System.Environment import System.FilePath+import System.Process import qualified Language.Elm as Elm import Paths_elm_server -runtime = "/elm-" ++ showVersion version ++ ".js"+runtime = "/elm-runtime.js" -serve :: String -> IO ()-serve libLoc = do-  putStrLn ("Elm Server " ++ showVersion version ++-            ": running at <http://localhost:8000>")+serve :: Int -> String -> IO ()+serve portNumber libLoc = do+  putStrLn $ "Elm Server " ++ showVersion version +++             ": running at <http://localhost:" ++ show portNumber ++ ">"   putStrLn "Just refresh a page to recompile it!"-  simpleHTTP nullConf $ do+  simpleHTTP httpConf $ do          _ <- compressedResponseFilter          msum [ uriRest serveElm               , uriRest (serveLib libLoc)               , serveDirectory EnableBrowsing [] "."               ]+  where httpConf = nullConf { port = portNumber }  pageTitle :: String -> String pageTitle = dropExtension . takeBaseName +serveElm :: FilePath -> ServerPartT IO Response serveElm fp = do   guard (takeExtension fp == ".elm")-  content <- liftIO (readFile (tail fp))-  ok . toResponse $ Elm.toHtml runtime (pageTitle fp) content+  let file = tail fp+  liftIO $ rawSystem "elm" [ "--make" ,"--runtime=" ++ runtime+                           , "--cache-dir=elm-server-cache", file ]+  liftIO $ removeDirectoryRecursive "elm-server-cache"+  serveFile (asContentType "text/html") ("build" </> replaceExtension file "html") +serveLib :: FilePath -> [Char] -> ServerPartT IO Response serveLib libLoc fp = do   guard (fp == runtime)   serveFile (asContentType "application/javascript") libLoc@@ -44,13 +52,19 @@ parse :: [String] -> IO () parse ("--help":_) = putStrLn usage parse ("--version":_) = putStrLn ("The Elm Server " ++ showVersion version)-parse [] = serve =<< Elm.runtime-parse [arg]-    | "--runtime-location=" `isPrefixOf` arg =-        serve . tail $ dropWhile (/='=') arg-    | otherwise = putStrLn usageMini-parse _ = putStrLn usageMini+parse args =+  case null remainingArgs of+    True -> serve portNumber =<< elmRuntime+    False -> putStrLn usageMini+  where+    runtimeArg = filter (isPrefixOf "--runtime-location=") args+    portArg = filter (isPrefixOf "--port=") args+    remainingArgs = (args \\ runtimeArg) \\ portArg +    argValue arg = tail $ dropWhile (/= '=') (head arg)+    portNumber = if null portArg then 8000 else read (argValue portArg) :: Int+    elmRuntime = if null runtimeArg then Elm.runtime else return $ argValue runtimeArg+ usageMini :: String usageMini =   "Usage: elm-server [OPTIONS]\n\@@ -61,6 +75,9 @@   "Usage: elm-server [OPTIONS]\n\   \Compiles and serves .elm files from the current directory.\n\   \Example: elm-server\n\+  \\n\+  \Server configuration:\n\+  \  --port               set the port to listen on (default: 8000)\n\   \\n\   \Resource Locations:\n\   \  --runtime-location   set the location of the Elm runtime\n\
elm-server.cabal view
@@ -1,5 +1,5 @@ Name:                elm-server-Version:             0.8+Version:             0.9 Synopsis:            The Elm language server. Description:         This package provides a standalone, Happstack-based Elm server. @@ -27,12 +27,14 @@   Main-is:             Server.hs   Build-depends:       base >=4.2 && <5,                        containers >= 0.3,+                       directory,                        transformers >= 0.2,                        mtl >= 2,                        parsec >= 3.1.1,                        blaze-html >= 0.5.1,                        HTTP >= 4000,-                       happstack-server == 7.1.1 || == 7.1.7 || == 7.0.2,+                       happstack-server,                        deepseq,                        filepath,-                       Elm >= 0.8+                       Elm >= 0.9.0.1,+                       process