Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
transform the ast on a recursive walk
tree: a9d1ebe716

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
example
test
.travis.yml
README.markdown
index.js
package.json

README.markdown

falafel

Transform the ast on a recursive walk.

build status

This module is like burrito, except that it uses esprima instead of uglify for friendlier-looking ast nodes.

example

array.js

Put a function wrapper around all array literals.

var falafel = require('falafel');

var src = '(' + function () {
    var xs = [ 1, 2, [ 3, 4 ] ];
    var ys = [ 5, 6 ];
    console.dir([ xs, ys ]);
} + ')()';

var output = falafel(src, function (node) {
    if (node.type === 'ArrayExpression') {
        node.update('fn(' + node.source() + ')');
    }
});
console.log(output);

output:

(function () {
    var xs = fn([ 1, 2, fn([ 3, 4 ]) ]);
    var ys = fn([ 5, 6 ]);
    console.dir(fn([ xs, ys ]));
})()

methods

var falafel = require('falafel')

falafel(src, fn)

Transform the string source src with the function fn, returning the transformed string output.

For every node in the ast, fn(node) fires. The recursive walk is a pre-traversal, so children get called before their parents.

Performing a pre-traversal makes it easier to write nested transforms since transforming parents often requires transforming all its children first.

nodes

Aside from the regular esprima data, you can also call some inserted methods on nodes.

Aside from updating the current node, you can also reach into sub-nodes to call update functions on children from parent nodes.

node.source()

Return the source for the given node, including any modifications made to children nodes.

node.update(s)

Transform the source for the present node to the string s.

node.parent

Reference to the parent element or null at the root element.

install

With npm do:

npm install falafel

license

MIT

Something went wrong with that request. Please try again.