on 5e73421 help sign in
73 lines 2.0 kB history raw
1{-# LANGUAGE OverloadedStrings #-}
2module Develop.StaticFiles.Build
3 ( readAsset
4 , buildReactorFrontEnd
5 )
6 where
9import qualified Data.ByteString as BS
10import qualified Data.ByteString.Builder as B
11import qualified Data.ByteString.Lazy as LBS
12import qualified Data.NonEmptyList as NE
13import qualified System.Directory as Dir
14import System.FilePath ((</>))
16import qualified BackgroundWriter as BW
17import qualified Build
18import qualified Elm.Details as Details
19import qualified Generate
20import qualified Reporting
21import qualified Reporting.Exit as Exit
22import qualified Reporting.Task as Task
26-- ASSETS
29readAsset :: FilePath -> IO BS.ByteString
30readAsset path =
31 BS.readFile ("reactor" </> "assets" </> path)
35-- BUILD REACTOR ELM
38buildReactorFrontEnd :: IO BS.ByteString
39buildReactorFrontEnd =
40 BW.withScope $ \scope ->
41 Dir.withCurrentDirectory "reactor" $
42 do root <- Dir.getCurrentDirectory
43 runTaskUnsafe $
44 do details <- Task.eio Exit.ReactorBadDetails $ Details.load Reporting.silent scope root
45 artifacts <- Task.eio Exit.ReactorBadBuild $ Build.fromMains Reporting.silent root details mains
46 javascript <- Task.mapError Exit.ReactorBadGenerate $ Generate.prod root details artifacts
47 return (LBS.toStrict (B.toLazyByteString javascript))
50mains :: NE.List FilePath
51mains =
52 NE.List
53 ("src" </> "NotFound.elm")
54 [ "src" </> "Errors.elm"
55 , "src" </> "Index.elm"
56 ]
59runTaskUnsafe :: Task.Task Exit.Reactor a -> IO a
60runTaskUnsafe task =
61 do result <- Task.run task
62 case result of
63 Right a ->
64 return a
66 Left exit ->
67 do Exit.toStderr (Exit.reactorToReport exit)
68 error
69 "\n--------------------------------------------------------\
70 \\nError in Develop.StaticFiles.Build.buildReactorFrontEnd\
71 \\nCompile with `elm make` directly to figure it out faster\
72 \\n--------------------------------------------------------\
73 \\n"