'use strict';
var objectPattern = require('nodes');
var nodes = objectPattern.nodes;
function templateify(program) {
program.search('#TemplateLiteral').forEach(function (node) {
var parts = [];
var stringFound;
node.quasis.forEach(function (quasi, i) {
var cooked = quasi.value.cooked;
if (cooked) {
stringFound = true;
parts.push(new nodes.Literal({ value: quasi.value.cooked }));
}
if (i in node.expressions) {
parts.push(node.expressions[i]);
}
});
if (!stringFound) {
parts.push(new nodes.Literal({ value: '' }));
}
if (parts.length === 1) {
node.parentNode.replaceChild(node, parts[0]);
return;
}
var bin = new nodes.BinaryExpression({
operator: '+',
left: parts.shift(),
right: parts.pop()
});
parts.reduceRight(function (bin, part) {
return bin.left = new nodes.BinaryExpression({
operator: '+',
left: bin.left,
right: part
});
}, bin);
node.parentNode.replaceChild(node, bin);
});
}
exports.transform = templateify; |