Как преобразовать буквальную функцию в AST с помощью Babel - PullRequest
1 голос
/ 18 марта 2020

Я пытаюсь обновить объект конфигурации 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. Мне удалось несколько заставить его работать для функций, но я ищу лучший способ обработки функций - будь то анонимные функции, функции стрелок и т. Д. c.

Current "функция для AST "function

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() {
      ...
    }
  }
}

Но это выглядит очень странно. Это также нарушает анонимные функции. Любая подсказка о том, что происходит или даже код, будет принята с благодарностью ..

Спасибо 101

...