on afa4f13 help sign in
71 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 Reporting.Task as Task
17import qualified Build
18import qualified Elm.Details as Details
19import qualified Generate
20import qualified Reporting
21import qualified Reporting.Exit as Exit
25-- ASSETS
28readAsset :: FilePath -> IO BS.ByteString
29readAsset path =
30 BS.readFile ("reactor" </> "assets" </> path)
34-- BUILD REACTOR ELM
37buildReactorFrontEnd :: IO BS.ByteString
38buildReactorFrontEnd =
39 Dir.withCurrentDirectory "reactor" $
40 do root <- Dir.getCurrentDirectory
41 runTaskUnsafe $
42 do details <- Task.eio Exit.ReactorBadDetails $ Details.load Reporting.silent root
43 artifacts <- Task.eio Exit.ReactorBadBuild $ Build.fromMains Reporting.silent root details mains
44 javascript <- Task.mapError Exit.ReactorBadGenerate $ Generate.prod root details artifacts
45 return (LBS.toStrict (B.toLazyByteString javascript))
48mains :: NE.List FilePath
49mains =
50 NE.List
51 ("src" </> "NotFound.elm")
52 [ "src" </> "Errors.elm"
53 , "src" </> "Index.elm"
54 ]
57runTaskUnsafe :: Task.Task Exit.Reactor a -> IO a
58runTaskUnsafe task =
59 do result <- Task.run task
60 case result of
61 Right a ->
62 return a
64 Left exit ->
65 do Exit.toStderr (Exit.reactorToReport exit)
66 error
67 "\n--------------------------------------------------------\
68 \\nError in Develop.StaticFiles.Build.buildReactorFrontEnd\
69 \\nCompile with `elm make` directly to figure it out faster\
70 \\n--------------------------------------------------------\
71 \\n"