/babel-to-estree

Translate a Babel AST to an ESTree-compliant AST. A "fork" of babel-eslint/babylon-to-espree.

Primary LanguageJavaScriptMIT LicenseMIT

babel-to-estree

Translates a "Babel AST" to an "ESTree AST". Intended for cases when an AST must be consumed by an ESTree-compliant consumer after a babel-plugin traversal.

If you only need a babylon-parsed AST, and do not need traversal, try the "estree" plugin that babylon now offers instead.

Usage

import { transform } from 'babel-core'
import { toEstree } from 'babel-to-estree'
import myPlugin from './my-babel-plugin'

const source = 'code("here");'

const { ast, code } = transform(source, { plugins: [myPlugin] })

// mutates `ast` input
toEstree(ast, source);

// contains Literal, not StringLiteral
console.log(ast.body[0].expression.arguments[0])

// Node {
//   type: 'Literal',
//   start: 5,
//   end: 11,
//   loc: SourceLocation {
//     start: Position { line: 1, column: 5 },
//     end: Position { line: 1, column: 11 } },
//   extra: { rawValue: 'here', raw: '"here"' },
//   value: 'here',
//   range: [ 5, 11 ],
//   _babelType: 'StringLiteral',
//   raw: '"here"'
// }

Deviations Addressed

The Babel AST format is based on ESTree spec with the following deviations:

AST for JSX code is based on Facebook JSX AST with the addition of one node type:

  • JSXText

History

Based on the babylon-to-espree module of babel-eslint, which was in turn based on acorn-to-esprima.