Convert ESTree
-compatible JavaScript AST
to Babel AST
.
To use parsers like:
With babel
tools like:
@babel/traverse
@babel/types
- etc...
The thing is @babel/parser
has a little differences with estree
standard:
-
Property
ofObjectExpression
andObjectPattern
calledObjectProperty
; -
FunctionExpression
of aProperty
located inObjectMethod
node; -
File
node; -
StringLiteral
,NumericLiteral
,NullLiteral
,RegExpLiteral
,BooleanLiteral
instead ofLiteral
; -
ClassMethod
instead ofMethodDefinition
; -
ClassPrivateMethod
; -
ClassPrivateName
stores name asIdentifier
inid
field; -
ClassPrivateProperty
instead ofFieldDefinition
; -
OptionalMemberExpression
andOptionalCallExpression
instead ofChainExpression
; -
ImportDeclaration
andExportNamedDeclaration
hasattributes
; -
JSXText
hasextra
field; - etc...
Also @babel/parser
has differences with typescript-estree
:
-
TSExpressionWithTypeArguments
instead ofTSClassImplements
; -
ClassPrivateProperty
instead ofPropertyDefinition
whenkey.type=PrivateName
; -
ClasseProperty
instead ofPropertyDefinition
whenkey.type=Identifier
; -
PrivateName
instead ofPrivateIdentifier
; -
TSInterfaceHeritage
instead ofTSExpressionWithTypeArguments
; -
TSQualifiedName
instead ofMemberExpression
inTSInterfaceHeritage
; -
TSDeclaredMethod
withabstract=true
instead ofTSAbstractMethodDefinition
; - etc...
estree-to-babel
aims to smooth this differences.
npm i estree-to-babel
const cherow = require('cherow');
const toBabel = require('estree-to-babel');
const traverse = require('@babel/traverse').default;
const ast = toBabel(cherow.parse(`
const f = ({a}) => a;
`));
traverse({
ObjectProperty(path) {
console.log(path.value.name);
// output
'a';
},
});
MIT