1 | module Compiler.ES.Node
6 | import Compiler.ES.Codegen
8 | import Compiler.Common
10 | import Libraries.Utils.Path
13 | import System.File.Permissions
18 | envNode = "/usr/bin/env node"
20 | findNode : IO String
22 | Nothing <- idrisGetEnv "NODE"
23 | | Just node => pure node
24 | path <- pathLookup ["node"]
25 | pure $
fromMaybe envNode path
30 | Ref Syn SyntaxInfo ->
31 | ClosedTerm -> Core String
32 | compileToNode c s tm = do
33 | js <- compileToES c s Node tm ["node", "javascript"]
34 | pure $
shebang ++ js
37 | shebang = "#!\{envNode}\n"
42 | Ref Syn SyntaxInfo ->
43 | (tmpDir : String) ->
44 | (outputDir : String) ->
46 | (outfile : String) ->
48 | compileExpr c s tmpDir outputDir tm outfile =
49 | do es <- compileToNode c s tm
50 | let out = outputDir </> outfile
51 | Core.writeFile out es
52 | coreLift_ $
chmodRaw out 0o755
58 | Ref Syn SyntaxInfo ->
59 | (tmpDir : String) -> ClosedTerm -> Core ()
60 | executeExpr c s tmpDir tm =
61 | do let outn = tmpDir </> "_tmp_node.js"
62 | js <- compileToNode c s tm
63 | Core.writeFile outn js
64 | node <- coreLift findNode
65 | quoted_node <- pure $
"\"" ++ node ++ "\""
66 | coreLift_ $
system (quoted_node ++ " " ++ outn)
70 | codegenNode : Codegen
71 | codegenNode = MkCG compileExpr executeExpr Nothing Nothing