@@ -19,14 +19,18 @@ defmodule ElixirScript.Output do
1919
2020 opts = ModuleState . get_compiler_opts ( pid )
2121
22- #TODO: Combine Mix.Project.config()[:app] with Mix.Project.deps_paths() to
23- # get app names.
24- # File.exists? Path.join([:code.priv_dir(app), "src", "elixir_script"])
25- # to find out if app has interop files.
26- # If so, copy files and directories to output folder
27-
28- bundle ( modules , opts , ModuleState . js_modules ( pid ) )
29- |> output ( Map . get ( opts , :output ) )
22+ js_modules = ModuleState . js_modules ( pid )
23+ |> Enum . filter ( fn
24+ { _module , _name , nil } -> false
25+ _ -> true
26+ end )
27+ |> Enum . map ( fn
28+ { module , name , path } ->
29+ { module , name , Path . join ( "." , path ) }
30+ end )
31+
32+ bundle ( modules , opts , js_modules )
33+ |> output ( Map . get ( opts , :output ) , js_modules )
3034 end
3135
3236 defp bundle ( modules , opts , js_modules ) do
@@ -61,21 +65,27 @@ defmodule ElixirScript.Output do
6165 end
6266 end
6367
64- defp output ( code , nil ) do
68+ defp output ( code , nil , _ ) do
6569 code
6670 end
6771
68- defp output ( code , :stdout ) do
72+ defp output ( code , :stdout , _ ) do
6973 IO . puts ( code )
7074 end
7175
72- defp output ( code , path ) do
76+ defp output ( code , path , js_modules ) do
7377 file_name = get_output_file_name ( path )
7478
7579 if ! File . exists? ( Path . dirname ( file_name ) ) do
7680 File . mkdir_p! ( Path . dirname ( file_name ) )
7781 end
7882
83+ apps = get_app_names ( )
84+ output_dir = Path . dirname ( file_name )
85+ Enum . each ( js_modules , fn ( { _ , _ , path } ) ->
86+ copy_javascript_module ( apps , output_dir , path )
87+ end )
88+
7989 File . write! ( file_name , code )
8090 end
8191
@@ -87,4 +97,27 @@ defmodule ElixirScript.Output do
8797 Path . join ( [ path , @ generated_name ] )
8898 end
8999 end
100+
101+ defp get_app_names ( ) do
102+ Mix.Project . config ( ) [ :app ]
103+ deps = Mix.Project . deps_paths ( )
104+ |> Map . keys
105+
106+ [ Mix.Project . config ( ) [ :app ] ] ++ deps
107+ end
108+
109+ defp copy_javascript_module ( apps , output_dir , js_module_path ) do
110+ Enum . each ( apps , fn ( app ) ->
111+ full_path = Path . join ( [ :code . priv_dir ( app ) , "elixir_script" , js_module_path ] ) <> ".js"
112+
113+ if File . exists? ( full_path ) do
114+ js_output_path = Path . join ( output_dir , js_module_path ) <> ".js"
115+ if ! File . exists? ( Path . dirname ( js_output_path ) ) do
116+ File . mkdir_p! ( Path . dirname ( js_output_path ) )
117+ end
118+
119+ File . cp ( full_path , js_output_path )
120+ end
121+ end )
122+ end
90123end
0 commit comments