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:
- Literal token is replaced with StringLiteral, NumericLiteral, BooleanLiteral, NullLiteral, RegExpLiteral
- Property token is replaced with ObjectProperty and ObjectMethod
- MethodDefinition is replaced with ClassMethod
- Program and BlockStatement contain additional
directives
field with Directive and DirectiveLiteral - ClassMethod, ObjectProperty, and ObjectMethod value property's properties in FunctionExpression is coerced/brought into the main method node.
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.