@@ -5,22 +5,32 @@ module Develop
8import Control.Applicative ((<|>))
9import Control.Applicative ((<|>))
10+import Control.Concurrent.MVar (newEmptyMVar, putMVar, takeMVar)
9−import Control.Monad (guard)
11+import Control.Monad (guard, void)
10import Control.Monad.Trans (MonadIO(liftIO))
12import Control.Monad.Trans (MonadIO(liftIO))
11import qualified Data.ByteString.Builder as B
13import qualified Data.ByteString.Builder as B
12import qualified Data.ByteString as BS
14import qualified Data.ByteString as BS
13import qualified Data.HashMap.Strict as HashMap
15import qualified Data.HashMap.Strict as HashMap
14import Data.Monoid ((<>))
16import Data.Monoid ((<>))
15import qualified System.Directory as Dir
17import qualified System.Directory as Dir
16−import System.FilePath
18+import System.FilePath as FP
17import Snap.Core
19import Snap.Core
18import Snap.Http.Server
20import Snap.Http.Server
19import Snap.Util.FileServe
21import Snap.Util.FileServe
23+import qualified Elm.Compiler.Objects as Obj
24+import qualified Elm.Project as Project
21import qualified Develop.Generate.Help as Generate
25import qualified Develop.Generate.Help as Generate
22import qualified Develop.Generate.Index as Index
26import qualified Develop.Generate.Index as Index
23import qualified Develop.StaticFiles as StaticFiles
27import qualified Develop.StaticFiles as StaticFiles
28+import qualified Generate.Output as Output
29+import qualified Json.Encode as Encode
30+import qualified Reporting.Exit as Exit
31+import qualified Reporting.Progress as Progress
32+import qualified Reporting.Task as Task
33+import qualified Stuff.Paths as Path
@@ -83,23 +93,6 @@ directoryConfig =
91− do file <- getSafePath
92− guard =<< liftIO (Dir.doesFileExist file)
93− modifyResponse (setContentType "text/javascript")
94− writeBS =<< liftIO (toJavaScript file)
97−toJavaScript :: FilePath -> IO BS.ByteString
98−toJavaScript filePath =
99− error "TODO toJavaScript" filePath
103-- NOT FOUND
96-- NOT FOUND
@@ -163,8 +156,35 @@ serveCode file =
163serveElm :: FilePath -> Snap ()
156serveElm :: FilePath -> Snap ()
164serveElm file =
157serveElm file =
165 do guard (takeExtension file == ".elm")
158 do guard (takeExtension file == ".elm")
161+ do mvar <- newEmptyMVar
163+ let reporter = Progress.Reporter (\_ -> return ()) (putMVar mvar)
165+ void $ Task.run reporter $
166+ do summary <- Project.getRoot
167+ Project.compile options Nothing summary [file]
166− modifyResponse (setContentType "text/html")
173+ do modifyResponse (setContentType "text/html")
167− writeBuilder (error "TODO")
174+ writeBuilder $
175+ Generate.makePageHtml "Errors" (Encode.encode (Exit.toJson exit))
178+ serveFileAs "text/html" (Path.temp "html")
181+options :: Output.Options
184+ (directory, filePath) = FP.splitFileName (Path.temp "html")
185+ output = Output.Html (Just directory) filePath
187+ Output.Options Obj.Dev Obj.Client (Just output)