@@ -1,6 +1,7 @@
11{-# OPTIONS_GHC -Wall #-}
22module Elm.Compiler.Objects
33 ( JS.Mode(..)
4+ , Name.Target(..)
45 , JS.generate
56 , JS.Roots
67 , mains
@@ -8,19 +9,21 @@ module Elm.Compiler.Objects
89 , Opt.Graph
910 , empty
1011 , union
11− , unions
12− ,
12+ , Kernel(..)
13+ , fromKernels
1314 )
1415 where
1516
1617
17−import qualified Data.List as List
1818import qualified Data.Map as Map
1919import qualified Data.Text as Text
2020
2121import qualified AST.Optimized as Opt
2222import qualified AST.Module.Name as ModuleName
23+import qualified Elm.Name as N
24+import qualified Elm.Package as Pkg
2325import qualified Generate.JavaScript as JS
26+import qualified Generate.JavaScript.Name as Name
2427
2528
2629
@@ -55,6 +58,30 @@ union (Opt.Graph mains1 graph1 fields1) (Opt.Graph mains2 graph2 fields2) =
5558 (Map.union fields1 fields2)
5659
5760
58−unions :: [Opt.Graph] -> Opt.Graph
59−unions graphs =
60− List.foldl' union empty graphs
61+
62+-- KERNEL GRAPHS
63+
64+
65+data Kernel =
66+ Kernel
67+ { _client :: Opt.KContent
68+ , _server :: Maybe Opt.KContent
69+ }
70+
71+
72+fromKernels :: Map.Map N.Name Kernel -> Opt.Graph
73+fromKernels kernels =
74+ Opt.Graph
75+ Map.empty
76+ (Map.mapKeys toGlobal (Map.map toNode kernels))
77+ Map.empty
78+
79+
80+toGlobal :: N.Name -> Opt.Global
81+toGlobal home =
82+ Opt.Global (ModuleName.Canonical Pkg.kernel home) N.dollar
83+
84+
85+toNode :: Kernel -> Opt.Node
86+toNode (Kernel client server) =
87+ Opt.Kernel client server