'use strict';
var build = require('nodes');
var objectPatternK = require('./util/iterators');
var values = objectPatternK.values;
var objectPatternJ = require('./transform/shorthands');
var deshorthandify = objectPatternJ.transform;
var objectPatternI = require('./transform/arrow-functions');
var arrowify = objectPatternI.transform;
var objectPatternH = require('./transform/comprehensions');
var comprehendify = objectPatternH.transform;
var objectPatternG = require('./transform/for-of');
var forofify = objectPatternG.transform;
var objectPatternF = require('./transform/patterns');
var patternify = objectPatternF.transform;
var objectPatternE = require('./transform/default-params');
var defaultify = objectPatternE.transform;
var objectPatternD = require('./transform/classes');
var classify = objectPatternD.transform;
var objectPatternC = require('./transform/rest-param');
var restify = objectPatternC.transform;
var objectPatternB = require('./transform/spread');
var spreadify = objectPatternB.transform;
var objectPatternA = require('./transform/template-literals');
var templateify = objectPatternA.transform;
var objectPattern = require('./transform/let-declarations');
var letify = objectPattern.transform;
var nodes = build.nodes;
function blockify(program) {
var statementBodies = function () {
var comprehension = [];
for (var iterator = values([
'#IfStatement > alternate',
'#IfStatement > consequent',
'#ForStatement > body',
'#ForInStatement > body',
'#ForOfStatement > body',
'#WhileStatement > body',
'#DoWhileStatement > body'
])['@@iterator'](), step; !(step = iterator.next()).done;) {
var selector = step.value;
comprehension.push(selector + '[type!=BlockStatement]');
}
return comprehension;
}();
program.search(statementBodies).forEach(function (statement) {
var parentNode = statement.parentNode;
var key = parentNode.indexOf(statement);
parentNode[key] = new nodes.BlockStatement({ body: [statement] });
});
program.search('#ArrowFunctionExpression[expression=true]').forEach(function (node) {
node.expression = false;
node.body = new nodes.BlockStatement({ body: [new nodes.ReturnStatement({ argument: node.body })] });
});
}
function transform(tree) {
var program = build(tree);
blockify(program);
deshorthandify(program);
arrowify(program);
comprehendify(program);
forofify(program);
patternify(program);
defaultify(program);
classify(program);
restify(program);
spreadify(program);
templateify(program);
letify(program);
return program.toJSON();
}
module.exports = transform; |