@@ -7,10 +7,14 @@ module Elm.Project.Root
9import Control.Monad.Trans (liftIO)
9import Control.Monad.Trans (liftIO)
10+import qualified Data.ByteString.Lazy as LBS
10import qualified Data.Map as Map
11import qualified Data.Map as Map
12+import Data.Monoid ((<>))
13+import qualified Network.HTTP.Client as Client
11import qualified System.Directory as Dir
14import qualified System.Directory as Dir
12import System.FilePath ((</>))
15import System.FilePath ((</>))
17+import qualified Elm.Compiler.Version as Elm
14import qualified Elm.Package as Pkg
18import qualified Elm.Package as Pkg
15import qualified Elm.Project.Constraint as Con
19import qualified Elm.Project.Constraint as Con
16import qualified Elm.Project.Json as Project
20import qualified Elm.Project.Json as Project
@@ -19,8 +23,11 @@ import Elm.Project.Json (Project(..), PkgInfo(..))
19import Elm.Project.Summary (Summary)
23import Elm.Project.Summary (Summary)
20import qualified Elm.PerUserCache as PerUserCache
24import qualified Elm.PerUserCache as PerUserCache
21import qualified File.IO as IO
25import qualified File.IO as IO
26+import qualified Reporting.Doc as D
22import qualified Reporting.Exit as Exit
27import qualified Reporting.Exit as Exit
28+import qualified Reporting.Progress as Progress
23import qualified Reporting.Task as Task
29import qualified Reporting.Task as Task
30+import qualified Reporting.Task.Http as Http
24import qualified Stuff.Verify as Verify
31import qualified Stuff.Verify as Verify
25import qualified Json.Encode as Encode
32import qualified Json.Encode as Encode
@@ -54,7 +61,38 @@ moveToRoot =
54 return root
61 return root
56 Nothing ->
63 Nothing ->
64+ do approved <- Task.getApproval $ D.vcat $
65+ [ "It looks like you are starting a new Elm project. Very exciting!"
67+ , "I would like to create two files to help you get started:"
69+ , " 1. elm.json" <> D.black " ------------ describes your dependencies"
70+ , " 2. src/Main.elm" <> D.black " ------ a basic Elm program to expand"
72+ , "This is common to all Elm projects. Would you like me to create them? [Y/n]: "
77+ do liftIO $ Dir.createDirectoryIfMissing True "src"
80+ Task.report Progress.ElmJsonApproved
81+ liftIO $ Dir.getCurrentDirectory
83+ do Task.report Progress.ElmJsonRejected
57− Task.throw Exit.NoElmJson
84+ Task.throw Exit.NoElmJson
87+fetch :: FilePath -> Task.Task ()
91+ ("https://experiment.elm-lang.org/" ++ Pkg.versionToString Elm.version ++ "/starter/" ++ path)
93+ do response <- Client.httpLbs request manager
94+ Right <$> LBS.writeFile path (Client.responseBody response)