npm

Need private packages and team management tools?Check out npm Orgs. »

transpiler

1.2.0 • Public • Published

Transpiler

Build Status

AST-based transpiler wrapper.

Usage

var myTranspiler = require('transpiler').create(<spec>);
 
var myResult = myTranspiler.transpile(<AST>, <DATA|null>, [<OPTIONS>]);

Here's a transpiler for a very simple AST spec that represents expressions:

var transpilerSpec = {
    nodes: {
        'EXPR': function (node, transpile) {
            return transpile(node.left) + ' ' + node.operator + ' ' + transpile(node.right);
        },
        'OPERAND': function (node) {
            return node.value;
        }
    }
};

We can create a transpiler that uses this spec like so:

var expressionTranspiler = require('transpiler').create(transpilerSpec);

Now we're ready to perform a transpile. Let's start with a simple example, here's my AST:

var myAST = {
    name: 'EXPR',
    left: {
        name: 'OPERAND',
        value: 21
    },
    operator: '+',
    right: {
        name: 'OPERAND',
        value: 27
    }
};

And let's transpile:

console.log(expressionTranspiler.transpile(myAST)); // Logs '21 + 27'

Overrides

It's possible to override or customise the way certain nodes are transpiled. As an example, let's change it so that operands with the value 27 are wrapped in yes(...). Here's my AST again:

var myAST = {
    name: 'EXPR',
    left: {
        name: 'OPERAND',
        value: 21
    },
    operator: '+',
    right: {
        name: 'OPERAND',
        value: 27
    }
};

Now let's transpile, but this time we'll specify a custom way to transpile OPERAND nodes:

console.log(expressionTranspiler.transpile(myAST, null, {
    nodes: {
        'OPERAND': function (node, transpile, context, original) {
            if (node.value === 27) {
                return 'yes(' + original(node) + ')';
            }
 
            return original(node);
        }
    }
})); // Logs '21 + yes(27)'

Keeping up to date

Keywords

install

npm i transpiler

Downloadsweekly downloads

11

version

1.2.0

license

MIT

homepage

github.com

repository

Gitgithub

last publish

collaborators

  • avatar
Report a vulnerability