ElixirScript 

The goal is to convert a subset (or full set) of Elixir code to JavaScript, providing the ability to write JavaScript in Elixir. This is done by taking the Elixir AST and converting it into JavaScript AST and then to JavaScript code. This is done using the Elixir-ESTree library.
Requirements
- Elixir
- Node or io.js (only for development)
Usage
ElixirScript can be used in the following ways:
If using as part of a project, you can add the following to your deps
{:elixir_script, "~> 0.7"}From there you can either use the ElixirScript module directly or the mix command,
mix ex2jsCLI Client
You can download the latest release from the releases page and use the included
ex2jsescript.
Development
Clone the repo
git clone git@github.com:bryanjos/elixirscript.gitGet dependencies
mix deps.get
npm installCompile
mix compileTest
mix testTo build distributable tarball
mix ex2js.dist
`ex2js.tar.gz` will be in the `dist` folderUsage
usage: ex2js <input> [options]
<input> path to elixir files or
the elixir code string if the -ex flag is used
options:
-o --output [path] places output at the given path
-ex --elixir read input as elixir code string
-r --root [path] root path for standard libs
-h --help this message#Limitations
Not all of the Kernel.SpecialForms module is defined
The following aren't defined (yet):
__CALLER____ENV__- quote
- unquote
- unquote_slicing
- super
Most of the Standard Library isn't defined yet
A lot of functions in the Kernel module are implemented. The Enum, Atom, List, Tuple, Logger, and Range modules are either fully defined are not complete. The rest still need to be implemented. Some modules like System or File may not be useful or function in the browser and may end up being only useful when using ElixirScript outside of the browser.
No Macro support
Not sure how this would be implemented right now, but looking for ideas.
else blocks are currently not supported on try expressions
Only because the translation of else haven't been figured out yet
Pattern matching works but is still limited
Currently pattern matching on bitstrings isn't supported, but for every other case that one would use pattern matching, it should work.
There are probably more that I'm forgetting. Check the issues for what's implemented and what still is needed.
Example projects
todo-elixirscript The TodoMVC app using ElixirScript and Phoenix.
color_bar_spike A canvas drawing example using ElixirScript, React and Delorean