1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Generate.JavaScript (generate) where
5import qualified Control.Monad.State as State
7import qualified Data.Text.Lazy as LazyText
9import qualified AST.Effects as Effects
10import qualified AST.Module as Module
11import qualified AST.Module.Name as ModuleName
12import qualified Elm.Package as Pkg
13import qualified Generate.JavaScript.Builder as JS
14import qualified Generate.JavaScript.Expression as JS
15import qualified Generate.JavaScript.Helpers as JS
16import qualified Generate.JavaScript.Variable as Var
23generate :: Module.Optimized -> LazyText.Text
24generate (Module.Module moduleName info) =
27 do defsList <- mapM JS.generateDef (Module.program info)
28 let managerStmts = generateEffectManager moduleName (Module.effects info)
29 return (concat (defsList ++ [managerStmts]))
32 State.evalState genBody 0
38-- GENERATE EFFECT MANAGER
41generateEffectManager :: ModuleName.Canonical -> Effects.Canonical -> [JS.Stmt]
42generateEffectManager moduleName effects =
50 Effects.Manager pkgName (Effects.Info _ _ _ _ managerType) ->
53 Var.coreNative "Platform" "effectManagers"
56 JS.String (ModuleName.canonicalToText moduleName)
59 ( JS.IdProp (JS.Id name)
60 , JS.ref (Var.qualified moduleName name)
64 [ "pkg" ==> Pkg.toText pkgName
72 Effects.CmdManager _ ->
73 [ "tag" ==> "cmd", entry "cmdMap" ]
75 Effects.SubManager _ ->
76 [ "tag" ==> "sub", entry "subMap" ]
78 Effects.FxManager _ _ ->
79 [ "tag" ==> "fx", entry "cmdMap", entry "subMap" ]
83 (JS.LBracket managers managerName)
84 (JS.Object (managerEntries ++ otherEntries))
86 [ JS.ExprStmt addManager ]
89(==>) :: Text -> Text -> ( JS.Prop, JS.Expr )
91 ( JS.IdProp (JS.Id key)
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