web/babel
babel, change ternary to If-else statements
by java개발자
2022. 11. 29.
var babel = require("@babel/core");
// 삼항연산자를 if문으로 수정
var ternaryTemplate = babel.template(`
(function() {
if (TEST) {
return CONSEQUENT;
}
return ALTERNATE;
})();
`);
var custom1 = function ({
types: t
}) {
return {
visitor: {
ConditionalExpression(path) {
try {
path.replaceWith(
ternaryTemplate({
TEST: path.node.test,
CONSEQUENT: path.node.consequent,
ALTERNATE: path.node.alternate,
})
);
} catch (e) {
throw path.buildCodeFrameError("Error message here: " + e.message);
}
}
},
};
};
sourceCode = `
var a = true ? b : c;
var b = true ? d ? e : f : c;
`;
sourceCode = babel.transformSync(sourceCode, {
plugins: [custom1],
}).code;
console.log(sourceCode);
// 결과
// var a = function () {
// if (true) {
// return b;
// }
// return c;
// }();
// var b = function () {
// if (true) {
// return function () {
// if (d) {
// return e;
// }
// return f;
// }();
// }
// return c;
// }();