@@ -9,13 +9,18 @@ module Develop.Generate.Index
9import Control.Monad (filterM)
9import Control.Monad (filterM)
10import qualified Data.ByteString.Builder as B
10import qualified Data.ByteString.Builder as B
11import qualified Data.List as List
11import qualified Data.List as List
12+import qualified Data.Map as Map
12import qualified System.Directory as Dir
13import qualified System.Directory as Dir
13import System.FilePath ((</>), splitDirectories, takeExtension)
14import System.FilePath ((</>), splitDirectories, takeExtension)
15import qualified Develop.Generate.Help as Help
16import qualified Develop.Generate.Help as Help
17+import qualified Elm.Details as Details
16import qualified Elm.Outline as Outline
18import qualified Elm.Outline as Outline
19+import qualified Elm.Package as Pkg
20+import qualified Elm.Version as V
17import qualified Json.Encode as E
21import qualified Json.Encode as E
18import Json.Encode ((==>))
22import Json.Encode ((==>))
23+import qualified Reporting
19import qualified Stuff
24import qualified Stuff
@@ -41,6 +46,7 @@ data Flags =
41 , _files :: [File]
46 , _files :: [File]
42 , _readme :: Maybe String
47 , _readme :: Maybe String
43 , _outline :: Maybe Outline.Outline
48 , _outline :: Maybe Outline.Outline
49+ , _exactDeps :: Map.Map Pkg.Name V.Version
@@ -63,6 +69,7 @@ getFlags pwd =
63 files <- getFiles pwd contents
69 files <- getFiles pwd contents
64 readme <- getReadme pwd
70 readme <- getReadme pwd
65 outline <- getOutline
71 outline <- getOutline
72+ exactDeps <- getExactDeps outline
68 { _root = root
75 { _root = root
@@ -71,6 +78,7 @@ getFlags pwd =
71 , _files = files
78 , _files = files
72 , _readme = readme
79 , _readme = readme
73 , _outline = outline
80 , _outline = outline
81+ , _exactDeps = exactDeps
@@ -135,11 +143,50 @@ getOutline =
149+-- TODO revamp how `elm reactor` works so that this can go away.
150+-- I am trying to "just get it working again" at this point though.
152+getExactDeps :: Maybe Outline.Outline -> IO (Map.Map Pkg.Name V.Version)
153+getExactDeps maybeOutline =
154+ case maybeOutline of
164+ do maybeRoot <- Stuff.findRoot
170+ do result <- Details.load Reporting.silent root
175+ Right (Details.Details _ validOutline _ _ _) ->
176+ case validOutline of
177+ Details.ValidApp _ ->
180+ Details.ValidPkg _ _ solution ->
141encode :: Flags -> E.Value
188encode :: Flags -> E.Value
142−encode (Flags root pwd dirs files readme outline) =
189+encode (Flags root pwd dirs files readme outline exactDeps) =
144 [ "root" ==> encodeFilePath root
191 [ "root" ==> encodeFilePath root
145 , "pwd" ==> E.list encodeFilePath pwd
192 , "pwd" ==> E.list encodeFilePath pwd
@@ -147,6 +194,7 @@ encode (Flags root pwd dirs files readme outline) =
147 , "files" ==> E.list encodeFile files
194 , "files" ==> E.list encodeFile files
148 , "readme" ==> maybe E.null E.chars readme
195 , "readme" ==> maybe E.null E.chars readme
149 , "outline" ==> maybe E.null Outline.encode outline
196 , "outline" ==> maybe E.null Outline.encode outline
197+ , "exactDeps" ==> E.dict Pkg.toJsonString V.encode exactDeps