UNPKG

jsepgen

Version:

Tiny module to generate code from the jsep AST

38 lines (33 loc) 1.18 kB
/** * Export `gen` */ module.exports = gen; /** * Generate a string from an AST * * @param {Object} node * @param {Function} fn (optional) */ function gen(node, fn) { var p = fn && fn(node); if (p) return gen(p, fn); if(node.type === "BinaryExpression") { return '(' + gen(node.left, fn) + ' ' + node.operator + ' ' + gen(node.right, fn) + ')' } else if (node.type === 'CallExpression') { var args = node.arguments.map(function(n) { return gen(n, fn) }); return gen(node.callee, fn) + '(' + args.join(', ') + ')'; } else if(node.type === "UnaryExpression") { return node.operator + gen(node.argument, fn); } else if (node.type == 'MemberExpression' && node.computed) { return gen(node.object) + '[' + gen(node.property) + ']'; } else if (node.type == 'MemberExpression' && !node.computed) { return gen(node.object) + '.' + gen(node.property); } else if (node.type == 'ArrayExpression') { var arr = node.elements.map(function (n) { return gen(n, fn) }).join(','); return '[' + arr + ']'; } else if(node.type === "Literal") { return node.raw; } else if (node.type === 'Identifier') { return node.name; } }