Trastpiler is an agnostic transpiler for Abstract Syntax Trees.
npm install trastpiler --save
import createTranspiler from "trastpiler";
// Generate an AST using parser of choice
const tree = esprima.parse(javascriptCode);
// Create a <AST-type, callback> hashmap for the supported declarations, statements and expressions.
const mappers = {
WhileStatement: ({ body, test }, { transpile }) =>
`while ${transpile(test)} do
${transpile(body)}
end`,
// ...
};
// Create a transpiler and call it,
// supplying an AST node to start from
const transpile = createTranspiler({ mappers });
const transpiledCode = transpile(tree.body);
Property | Type | Description |
---|---|---|
configuration | object | |
mappers | HashMap<string, function> | Key-value pairs of a declaration/expression/statement type and function to process the AST node. |
initialScope | object | Initial data to use for the scope. |
A declaration, expression or statement must have the following signature:
/**
* @param {object} node AST node. Nodes must atleast have a `type` property
* @param {{ transpile, scope }} references References to the current scope and transpiler function - optional.
* @return {string} transpiled node
*/
function expressionTypeName (node, { transpile, scope }) {
// Do stuff relevant for this expression (transpile child nodes, add variables to scope etc)
return transpiledCode;
}
In the examples folder you may find some practical examples of how to build your own libraries on top of trastpiler.
- jspicl - Transpiles JavaScript into a subset of LUA.