The Lona Compiler is a CLI tool for generating cross-platform UI code from JSON definitions.
The Lona Compiler is published on npm as lonac -- however, this is likely outdated. You should build the development version for now.
This project is written in ReasonML, an OCaml dialect that can compile to JavaScript using BuckleScript.
Install from: https://reasonml.github.io/docs/en/installation
From this directory, run:
yarn
Note: If you don't have yarn installed already, you can download it with npm:
npm install --global yarn
I recommend developing with VSCode and the reason-vscode plugin (there are several plugins, but this one is most reliable in my experience).
yarn start
There are currently 3 commands:
colors- Generate colors code from acolors.jsonfilecomponent- Generate component code from a.componentfileworkspace- Generate a directory with code for colors, text styles, and every.componentfile in a directory
For each command, you'll choose a code generation target: swift, js, or xml.
You can specify a framework using the --framework=... option.
In the case of js, the options are:
reactnative: React Native (default)reactdom: React DOMreactsketchapp: React SketchApp
In the case of swift, the options are:
uikit: iOSappkit: macOS
Check out the scripts section of the package.json to see some examples. There is a snapshot command for each compiler target.
The following examples assume you've built the development version. If you're using the
npmversion, replacenode src/main.bs.jswithlonac.
This will output the generated colors code to stdout. You may also pass the colors.json file through stdin instead of as a parameter, if you prefer.
node src/main.bs.js colors [target] [path-to-colors.json]The will output the generated component code to stdout.
node src/main.bs.js component [target] [path-to-component.component]
This will generate the colors, text styles, and all components, writing them to output-directory in the same structure as the input workspace directory.
node src/main.bs.js workspace [target] [path-to-workspace] [output-directory]