|  | 6 years ago | |
|---|---|---|
| .. | ||
| bin | 6 years ago | |
| lib | 6 years ago | |
| CHANGELOG.md | 6 years ago | |
| LICENSE | 6 years ago | |
| README.md | 6 years ago | |
| package.json | 6 years ago | |
		
			
				
				README.md
			
		
		
			
			
		
	
	
   
Babylon is a JavaScript parser used in Babel.
- The latest ECMAScript version enabled by default (ES2017).
- Comment attachment.
- Support for JSX and Flow.
- Support for experimental language proposals (accepting PRs for anything at least stage-0).
Credits
Heavily based on acorn and acorn-jsx, thanks to the awesome work of @RReverser and @marijnh.
Significant diversions are expected to occur in the future such as streaming, EBNF definitions, sweet.js integration, interspatial parsing and more.
API
babylon.parse(code, [options])
babylon.parseExpression(code, [options])
parse() parses the provided code as an entire ECMAScript program, while
parseExpression() tries to parse a single Expression with performance in
mind. When in doubt, use .parse().
Options
- 
allowImportExportEverywhere: By default, importandexportdeclarations can only appear at a program's top level. Setting this option totrueallows them anywhere where a statement is allowed.
- 
allowReturnOutsideFunction: By default, a return statement at the top level raises an error. Set this to trueto accept such code.
- 
allowSuperOutsideMethod: TODO 
- 
sourceType: Indicate the mode the code should be parsed in. Can be either "script"or"module".
- 
sourceFilename: Correlate output AST nodes with their source filename. Useful when generating code and source maps from the ASTs of multiple input files. 
- 
startLine: By default, the first line of code parsed is treated as line 1. You can provide a line number to alternatively start with. Useful for integration with other source tools. 
- 
plugins: Array containing the plugins that you want to enable. 
- 
strictMode: TODO 
Output
Babylon generates AST according to Babel AST format. It is based on ESTree spec with the following deviations:
There is now an
estreeplugin which reverts these 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 directivesfield 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
Semver
Babylon follows semver in most situations. The only thing to note is that some spec-compliancy bug fixes may be released under patch versions.
For example: We push a fix to early error on something like #107 - multiple default exports per file. That would be considered a bug fix even though it would cause a build to fail.
Example
require("babylon").parse("code", {
  // parse in strict mode and allow module declarations
  sourceType: "module",
  plugins: [
    // enable jsx and flow syntax
    "jsx",
    "flow"
  ]
});
Plugins
- estree
- jsx
- flow
- doExpressions
- objectRestSpread
- decorators(Based on an outdated version of the Decorators proposal. Will be removed in a future version of- Babylon)
- classProperties
- exportExtensions
- asyncGenerators
- functionBind
- functionSent
- dynamicImport
- templateInvalidEscapes