jspicl
jspicl is a Javascript to PICO-8 Lua transpiler. It creates an AST out of the JavaScript code and then transpiles it down to the LUA subset of which PICO-8 supports.
CLI
Consider using jspicl-cli instead to simplify your project setup. It includes several additional features such as watch mode (reloading your game when code changes), using PNGs as your game's spritesheet etc.
Installation
npm install jspicl --save
Usage
; const javascriptCode = `...`;const output polyfills = ;console;
By default, jspicl formats the LUA output for you but if performance ever becomes an issue you can turn this off through the options argument.
const output polyfills = ;
Options
Property | Type | Description |
---|---|---|
input | string | JavaScript code to transpile into PICO-8 LUA |
options | object | |
prettify | boolean | Format output |
customMappers | HashMap<string, function> | Custom handlers for transpiling expressions, declarations or statements. |
Return value
Property | Type | Description |
---|---|---|
output | string | The transpiled javascript code |
polyfills | object | Table of required polyfills with their corresponding lua code. |
Customized transpilation
jspicl does not support all expressions or statements out of the box but it is
extensible enough to allow for these to be added. It also allows existing ones to
be replaced if the implementation is considered unsatisfactory.
This is done by supplying a customMappers
option. The only requirement imposed on
the AST node is that it contains a string property called type
since this is used to identify the appropriate declaration, expression or statement.
const customMappers = // Replace the default while-statement implementation `while do -- We have full control of the output! end` // Add support for missing features { // https://esprima.readthedocs.io/en/latest/syntax-tree-format.html#for-of-statement } // Custom statements, declarations and expressions are also valid // as long as they are included in the AST `-- You're doing great!` // ...; const output = ;
Known limitations
ES2015+ | Not all ES2015+ features are supported. Run your code through a transpiler first such as bublé or babel. |
prototype chains | Not supported |
Array methods | Not all prototype methods have been polyfilled yet. |
Math.max | Only supports two arguments. |
AST | Not all declarations, expressions and statements have been implemented. More will be added as needed. |
Versioning
This project uses semantic versioning
Related projects
jspicl CLI - Command line interface for jspicl
games - Games created with jspicl