Как преобразовать буквальную функцию в AST с помощью Babel
Я пытаюсь обновить объект конфигурации JS с помощью Babel. Для этого я создал плагин Babel, который используется следующим образом:
const transform = require('@babel/standalone').transform
const newCode = transform(code, {
plugins: [
[
myBabelPlugin, {
scripts: {
action: 'create:merge',
value: ['path/to/my/script.js']
},
someFunc: {
action: 'create',
function a(arg) { return true; }
}
}
]
]
}).code
Внутри он вызывает toAst
функция, которая выполняет итерацию по литеральным элементам и возвращает их как AST. Мне удалось несколько заставить его работать для функций, но я ищу лучший способ обработки функций - будь то анонимные, стрелочные функции и т. Д.
Текущая функция "функция для AST"
if (typeof elem === 'function') {
const ast = babylon.parse(elem.toString(), {
plugins: [
babelPluginTransformRuntime,
babelPluginTransformArrowFunction
]
})
const { params, body } = ast.program.body[0]
return t.functionExpression(
null,
params,
body
)
}
Причина, по которой я это делаю, заключается в том, что при возврате тела программы будет получаться что-то вроде этого:
const config = {
elem: function () {
function myFunction() {
...
}
}
}
Но это кажется действительно хакерским. Он также не работает с анонимными функциями. Мы будем благодарны за любую подсказку о том, что происходит, или даже за код.
Спасибо ✌️