1module Generate.JavaScript (generate) where
3import qualified Control.Monad.State as State
4import qualified Data.Text.Lazy as LazyText
5import qualified Language.ECMAScript3.Syntax as JS
7import qualified AST.Effects as Effects
8import qualified AST.Module as Module
9import qualified AST.Module.Name as ModuleName
10import qualified Elm.Package as Pkg
11import qualified Generate.JavaScript.Builder as Builder
12import qualified Generate.JavaScript.Expression as JS
13import qualified Generate.JavaScript.Helpers as JS
14import qualified Generate.JavaScript.Variable as Var
21generate :: Module.Optimized -> LazyText.Text
22generate (Module.Module moduleName _ info) =
25 do defsList <- mapM JS.generateDef (Module.program info)
26 let managerStmts = generateEffectManager moduleName (Module.effects info)
27 return (concat (defsList ++ [managerStmts]))
30 State.evalState genBody 0
32 Builder.stmtsToText body
36-- GENERATE EFFECT MANAGER
39generateEffectManager :: ModuleName.Canonical -> Effects.Canonical -> [JS.Statement ()]
40generateEffectManager moduleName effects =
48 Effects.Manager pkgName (Effects.Info _ _ _ _ managerType) ->
51 Var.native (ModuleName.inCore ["Native","Platform"]) "effectManagers"
54 JS.StringLit () (ModuleName.canonicalToString moduleName)
57 ( JS.PropId () (JS.Id () name)
58 , JS.ref (Var.qualified moduleName name)
62 [ "pkg" ==> Pkg.toString pkgName
70 Effects.CmdManager _ ->
71 [ "tag" ==> "cmd", entry "cmdMap" ]
73 Effects.SubManager _ ->
74 [ "tag" ==> "sub", entry "subMap" ]
76 Effects.FxManager _ _ ->
77 [ "tag" ==> "fx", entry "cmdMap", entry "subMap" ]
80 JS.AssignExpr () JS.OpAssign
81 (JS.LBracket () managers managerName)
82 (JS.ObjectLit () (managerEntries ++ otherEntries))
84 [ JS.ExprStmt () addManager ]
87(==>) :: String -> String -> ( JS.Prop (), JS.Expression () )
89 ( JS.PropId () (JS.Id () key)
90 , JS.StringLit () value
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list