@@ -7,10 +7,14 @@ module Elm.Project.Root
77 where
88
99import Control.Monad.Trans (liftIO)
10+import qualified Data.ByteString.Lazy as LBS
1011import qualified Data.Map as Map
12+import Data.Monoid ((<>))
13+import qualified Network.HTTP.Client as Client
1114import qualified System.Directory as Dir
1215import System.FilePath ((</>))
1316
17+import qualified Elm.Compiler.Version as Elm
1418import qualified Elm.Package as Pkg
1519import qualified Elm.Project.Constraint as Con
1620import qualified Elm.Project.Json as Project
@@ -19,8 +23,11 @@ import Elm.Project.Json (Project(..), PkgInfo(..))
1923import Elm.Project.Summary (Summary)
2024import qualified Elm.PerUserCache as PerUserCache
2125import qualified File.IO as IO
26+import qualified Reporting.Doc as D
2227import qualified Reporting.Exit as Exit
28+import qualified Reporting.Progress as Progress
2329import qualified Reporting.Task as Task
30+import qualified Reporting.Task.Http as Http
2431import qualified Stuff.Verify as Verify
2532import qualified Json.Encode as Encode
2633
@@ -54,7 +61,38 @@ moveToRoot =
5461 return root
5562
5663 Nothing ->
57− Task.throw Exit.NoElmJson
64+ do approved <- Task.getApproval $ D.vcat $
65+ [ "It looks like you are starting a new Elm project. Very exciting!"
66+ , ""
67+ , "I would like to create two files to help you get started:"
68+ , ""
69+ , " 1. elm.json" <> D.black " ------------ describes your dependencies"
70+ , " 2. src/Main.elm" <> D.black " ------ a basic Elm program to expand"
71+ , ""
72+ , "This is common to all Elm projects. Would you like me to create them? [Y/n]: "
73+ ]
74+
75+ if approved
76+ then
77+ do liftIO $ Dir.createDirectoryIfMissing True "src"
78+ fetch "elm.json"
79+ fetch "src/Main.elm"
80+ Task.report Progress.ElmJsonApproved
81+ liftIO $ Dir.getCurrentDirectory
82+ else
83+ do Task.report Progress.ElmJsonRejected
84+ Task.throw Exit.NoElmJson
85+
86+
87+fetch :: FilePath -> Task.Task ()
88+fetch path =
89+ Http.run $
90+ Http.anything
91+ ("https://experiment.elm-lang.org/" ++ Pkg.versionToString Elm.version ++ "/starter/" ++ path)
92+ (\request manager ->
93+ do response <- Client.httpLbs request manager
94+ Right <$> LBS.writeFile path (Client.responseBody response)
95+ )
5896
5997
6098