/** * @flow */ 'use strict'; /* * Flow types for the Babylon AST. */ // Abstract types. Something must extend these. export type Comment = { type: 'CommentLine'; _CommentLine: void; value: string; end: number; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; } | { type: 'CommentBlock'; _CommentBlock: void; value: string; end: number; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; }; export type Declaration = { type: 'ClassBody'; _ClassBody: void; body: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ClassDeclaration'; _ClassDeclaration: void; body: ClassBody; id: ?Identifier; superClass: ?Expression; decorators: any; superTypeParameters: any; typeParameters: any; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'FunctionDeclaration'; _FunctionDeclaration: void; body: BlockStatement; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; } | { type: 'MethodDefinition'; _MethodDefinition: void; computed: boolean; key: Node; kind: 'constructor' | 'method' | 'get' | 'set'; static: boolean; value: FunctionExpression; decorators: ?Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'VariableDeclaration'; _VariableDeclaration: void; declarations: Array; kind: 'var' | 'let' | 'const'; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ClassProperty'; _ClassProperty: void; computed: boolean; key: Node; static: boolean; typeAnnotation: ?TypeAnnotation; value: ?Expression; decorators: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Expression = { type: 'ArrayExpression'; _ArrayExpression: void; elements: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'AssignmentExpression'; _AssignmentExpression: void; left: Pattern; operator: AssignmentOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'AwaitExpression'; _AwaitExpression: void; all: boolean; argument: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BinaryExpression'; _BinaryExpression: void; left: Expression; operator: BinaryOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BindExpression'; _BindExpression: void; callee: Node; object: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'CallExpression'; _CallExpression: void; arguments: Array; callee: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ClassExpression'; _ClassExpression: void; body: ClassBody; id: ?Identifier; superClass: ?Expression; decorators: any; superTypeParameters: any; typeParameters: any; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ComprehensionExpression'; _ComprehensionExpression: void; body: Expression; blocks: Array; filter: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ConditionalExpression'; _ConditionalExpression: void; alternate: Expression; consequent: Expression; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DoExpression'; _DoExpression: void; body: Statement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'FunctionExpression'; _FunctionExpression: void; body: BlockStatement; id: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; } | { type: 'Identifier'; _Identifier: void; name: string; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'Literal'; _Literal: void; raw: string; regex: ?{pattern: string, flags: string}; value: ?(string | boolean | number | RegExp); end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'LogicalExpression'; _LogicalExpression: void; left: Expression; operator: LogicalOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'MemberExpression'; _MemberExpression: void; computed: boolean; object: Expression; property: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'NewExpression'; _NewExpression: void; arguments: Array; callee: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectExpression'; _ObjectExpression: void; properties: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'SequenceExpression'; _SequenceExpression: void; expression: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TaggedTemplateExpression'; _TaggedTemplateExpression: void; quasi: TemplateLiteral; tag: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TemplateLiteral'; _TemplateLiteral: void; expressions: Array; quasis: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ThisExpression'; _ThisExpression: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'UnaryExpression'; _UnaryExpression: void; argument: Expression; operator: UnaryOperator; prefix: true; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'UpdateExpression'; _UpdateExpression: void; argument: Expression; operator: UpdateOperator; prefix: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'YieldExpression'; _YieldExpression: void; argument: ?Expression; delegate: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TypeCastExpression'; _TypeCastExpression: void; expression: Expression; typeAnnotation: TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXElement'; _JSXElement: void; children: Array; closingElement: ?JSXClosingElement; openingElement: JSXOpeningElement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXEmptyExpression'; _JSXEmptyExpression: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXExpressionContainer'; _JSXExpressionContainer: void; expression: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXMemberExpression'; _JSXMemberExpression: void; computed: boolean; object: Node; property: JSXIdentifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Function = { type: 'ArrowFunctionExpression'; _ArrowFunctionExpression: void; body: Node; id: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; } | { type: 'FunctionDeclaration'; _FunctionDeclaration: void; body: BlockStatement; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; } | { type: 'FunctionExpression'; _FunctionExpression: void; body: BlockStatement; id: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; }; export type Node = { type: 'ArrayExpression'; _ArrayExpression: void; elements: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ArrayPattern'; _ArrayPattern: void; elements: Array; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ArrowFunctionExpression'; _ArrowFunctionExpression: void; body: Node; id: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; } | { type: 'AssignmentExpression'; _AssignmentExpression: void; left: Pattern; operator: AssignmentOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'AssignmentPattern'; _AssignmentPattern: void; left: Pattern; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'AwaitExpression'; _AwaitExpression: void; all: boolean; argument: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BinaryExpression'; _BinaryExpression: void; left: Expression; operator: BinaryOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BindExpression'; _BindExpression: void; callee: Node; object: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BlockStatement'; _BlockStatement: void; body: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BreakStatement'; _BreakStatement: void; label: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'CallExpression'; _CallExpression: void; arguments: Array; callee: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'CatchClause'; _CatchClause: void; body: BlockStatement; param: Pattern; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ClassBody'; _ClassBody: void; body: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ClassDeclaration'; _ClassDeclaration: void; body: ClassBody; id: ?Identifier; superClass: ?Expression; decorators: any; superTypeParameters: any; typeParameters: any; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ClassExpression'; _ClassExpression: void; body: ClassBody; id: ?Identifier; superClass: ?Expression; decorators: any; superTypeParameters: any; typeParameters: any; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ComprehensionBlock'; _ComprehensionBlock: void; each: boolean; left: Pattern; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ComprehensionExpression'; _ComprehensionExpression: void; body: Expression; blocks: Array; filter: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ConditionalExpression'; _ConditionalExpression: void; alternate: Expression; consequent: Expression; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ContinueStatement'; _ContinueStatement: void; label: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'Decorator'; _Decorator: void; expression: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DebuggerStatement'; _DebuggerStatement: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DoWhileStatement'; _DoWhileStatement: void; body: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DoExpression'; _DoExpression: void; body: Statement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'EmptyStatement'; _EmptyStatement: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ExpressionStatement'; _ExpressionStatement: void; expression: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'File'; _File: void; program: Program; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ForInStatement'; _ForInStatement: void; body: Statement; left: Node; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ForOfStatement'; _ForOfStatement: void; body: Statement; left: Node; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ForStatement'; _ForStatement: void; init: ?Node; test: ?Expression; update: ?Expression; body: Statement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'FunctionDeclaration'; _FunctionDeclaration: void; body: BlockStatement; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; } | { type: 'FunctionExpression'; _FunctionExpression: void; body: BlockStatement; id: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; } | { type: 'Identifier'; _Identifier: void; name: string; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'IfStatement'; _IfStatement: void; alternate: ?Statement; consequent: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ImportDefaultSpecifier'; _ImportDefaultSpecifier: void; local: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ImportNamespaceSpecifier'; _ImportNamespaceSpecifier: void; local: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ImportDeclaration'; _ImportDeclaration: void; specifiers: Array; source: Literal; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ImportSpecifier'; _ImportSpecifier: void; imported: Node; local: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'LabeledStatement'; _LabeledStatement: void; body: Statement; label: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'Literal'; _Literal: void; raw: string; regex: ?{pattern: string, flags: string}; value: ?(string | boolean | number | RegExp); end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'LogicalExpression'; _LogicalExpression: void; left: Expression; operator: LogicalOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'MemberExpression'; _MemberExpression: void; computed: boolean; object: Expression; property: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'MetaProperty'; _MetaProperty: void; meta: Node; property: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'MethodDefinition'; _MethodDefinition: void; computed: boolean; key: Node; kind: 'constructor' | 'method' | 'get' | 'set'; static: boolean; value: FunctionExpression; decorators: ?Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'NewExpression'; _NewExpression: void; arguments: Array; callee: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'Noop'; _Noop: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectExpression'; _ObjectExpression: void; properties: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectPattern'; _ObjectPattern: void; properties: Array; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'Program'; _Program: void; body: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'Property'; _Property: void; computed: boolean; key: Node; kind: 'init' | 'get' | 'set'; method: boolean; shorthand: boolean; value: Node; decorators: ?Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'RestElement'; _RestElement: void; argument: Pattern; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ReturnStatement'; _ReturnStatement: void; argument: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'SequenceExpression'; _SequenceExpression: void; expression: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'SpreadElement'; _SpreadElement: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'SpreadProperty'; _SpreadProperty: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'Super'; _Super: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'SwitchCase'; _SwitchCase: void; consequent: Array; test: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'SwitchStatement'; _SwitchStatement: void; cases: Array; discriminant: Expression; lexical: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TaggedTemplateExpression'; _TaggedTemplateExpression: void; quasi: TemplateLiteral; tag: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TemplateElement'; _TemplateElement: void; tail: boolean; value: {cooked: string, raw: string}; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TemplateLiteral'; _TemplateLiteral: void; expressions: Array; quasis: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ThisExpression'; _ThisExpression: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ThrowStatement'; _ThrowStatement: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TryStatement'; _TryStatement: void; block: BlockStatement; finalizer: ?BlockStatement; guardedHandlers: Array; handler: ?CatchClause; handlers: ?Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'UnaryExpression'; _UnaryExpression: void; argument: Expression; operator: UnaryOperator; prefix: true; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'UpdateExpression'; _UpdateExpression: void; argument: Expression; operator: UpdateOperator; prefix: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'VariableDeclaration'; _VariableDeclaration: void; declarations: Array; kind: 'var' | 'let' | 'const'; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'VariableDeclarator'; _VariableDeclarator: void; id: Pattern; init: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'WhileStatement'; _WhileStatement: void; body: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'WithStatement'; _WithStatement: void; body: Statement; object: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'YieldExpression'; _YieldExpression: void; argument: ?Expression; delegate: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ExportAllDeclaration'; _ExportAllDeclaration: void; exported: Node; source: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ExportDefaultDeclaration'; _ExportDefaultDeclaration: void; declaration: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ExportNamedDeclaration'; _ExportNamedDeclaration: void; declaration: Node; source: Literal; specifiers: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ExportDefaultSpecifier'; _ExportDefaultSpecifier: void; exported: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ExportNamespaceSpecifier'; _ExportNamespaceSpecifier: void; exported: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ExportSpecifier'; _ExportSpecifier: void; local: Node; exported: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'AnyTypeAnnotation'; _AnyTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ArrayTypeAnnotation'; _ArrayTypeAnnotation: void; elementType: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BooleanLiteralTypeAnnotation'; _BooleanLiteralTypeAnnotation: void; raw: string; value: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BooleanTypeAnnotation'; _BooleanTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ClassImplements'; _ClassImplements: void; id: Identifier; typeParameters: ?TypeParameterInstantiation; superClass: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ClassProperty'; _ClassProperty: void; computed: boolean; key: Node; static: boolean; typeAnnotation: ?TypeAnnotation; value: ?Expression; decorators: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DeclareClass'; _DeclareClass: void; body: ObjectTypeAnnotation; extends: Array; id: Identifier; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DeclareFunction'; _DeclareFunction: void; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DeclareModule'; _DeclareModule: void; body: BlockStatement; id: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DeclareVariable'; _DeclareVariable: void; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'FunctionTypeAnnotation'; _FunctionTypeAnnotation: void; params: Array; rest: ?FunctionTypeParam; returnType: Type; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'FunctionTypeParam'; _FunctionTypeParam: void; name: Identifier; optional: boolean; typeAnnotation: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'GenericTypeAnnotation'; _GenericTypeAnnotation: void; id: Node; typeParameters: ?TypeParameterInstantiation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'InterfaceExtends'; _InterfaceExtends: void; id: Identifier; typeParameters: ?TypeParameterInstantiation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'InterfaceDeclaration'; _InterfaceDeclaration: void; body: ObjectTypeAnnotation; extends: Array; id: Identifier; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'IntersectionTypeAnnotation'; _IntersectionTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'MixedTypeAnnotation'; _MixedTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'NullableTypeAnnotation'; _NullableTypeAnnotation: void; typeAnnotation: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'NumberLiteralTypeAnnotation'; _NumberLiteralTypeAnnotation: void; raw: string; value: number; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'NumberTypeAnnotation'; _NumberTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'StringLiteralTypeAnnotation'; _StringLiteralTypeAnnotation: void; raw: string; value: string; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'StringTypeAnnotation'; _StringTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TupleTypeAnnotation'; _TupleTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TypeofTypeAnnotation'; _TypeofTypeAnnotation: void; argument: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TypeAlias'; _TypeAlias: void; id: Identifier; right: Type; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TypeAnnotation'; _TypeAnnotation: void; typeAnnotation: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TypeCastExpression'; _TypeCastExpression: void; expression: Expression; typeAnnotation: TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TypeParameterDeclaration'; _TypeParameterDeclaration: void; params: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TypeParameterInstantiation'; _TypeParameterInstantiation: void; params: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectTypeAnnotation'; _ObjectTypeAnnotation: void; callProperties: Array; indexers: Array; properties: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectTypeCallProperty'; _ObjectTypeCallProperty: void; static: boolean; value: FunctionTypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectTypeIndexer'; _ObjectTypeIndexer: void; id: Identifier; key: Type; value: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectTypeProperty'; _ObjectTypeProperty: void; key: Node; optional: boolean; value: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'QualifiedTypeIdentifier'; _QualifiedTypeIdentifier: void; id: Identifier; qualification: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'UnionTypeAnnotation'; _UnionTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'VoidTypeAnnotation'; _VoidTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXAttribute'; _JSXAttribute: void; name: Node; value: ?Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXClosingElement'; _JSXClosingElement: void; name: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXElement'; _JSXElement: void; children: Array; closingElement: ?JSXClosingElement; openingElement: JSXOpeningElement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXEmptyExpression'; _JSXEmptyExpression: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXExpressionContainer'; _JSXExpressionContainer: void; expression: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXIdentifier'; _JSXIdentifier: void; name: string; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXMemberExpression'; _JSXMemberExpression: void; computed: boolean; object: Node; property: JSXIdentifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXNamespacedName'; _JSXNamespacedName: void; name: JSXIdentifier; namespace: JSXIdentifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXOpeningElement'; _JSXOpeningElement: void; attributes: Array; name: Array; selfClosing: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'JSXSpreadAttribute'; _JSXSpreadAttribute: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Pattern = { type: 'ArrayPattern'; _ArrayPattern: void; elements: Array; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'AssignmentPattern'; _AssignmentPattern: void; left: Pattern; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'Identifier'; _Identifier: void; name: string; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectPattern'; _ObjectPattern: void; properties: Array; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'RestElement'; _RestElement: void; argument: Pattern; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Statement = { type: 'BlockStatement'; _BlockStatement: void; body: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BreakStatement'; _BreakStatement: void; label: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ContinueStatement'; _ContinueStatement: void; label: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DoWhileStatement'; _DoWhileStatement: void; body: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'EmptyStatement'; _EmptyStatement: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ExpressionStatement'; _ExpressionStatement: void; expression: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ForInStatement'; _ForInStatement: void; body: Statement; left: Node; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ForOfStatement'; _ForOfStatement: void; body: Statement; left: Node; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ForStatement'; _ForStatement: void; init: ?Node; test: ?Expression; update: ?Expression; body: Statement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'IfStatement'; _IfStatement: void; alternate: ?Statement; consequent: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'LabeledStatement'; _LabeledStatement: void; body: Statement; label: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ReturnStatement'; _ReturnStatement: void; argument: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'SwitchStatement'; _SwitchStatement: void; cases: Array; discriminant: Expression; lexical: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ThrowStatement'; _ThrowStatement: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TryStatement'; _TryStatement: void; block: BlockStatement; finalizer: ?BlockStatement; guardedHandlers: Array; handler: ?CatchClause; handlers: ?Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'WhileStatement'; _WhileStatement: void; body: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'WithStatement'; _WithStatement: void; body: Statement; object: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DeclareClass'; _DeclareClass: void; body: ObjectTypeAnnotation; extends: Array; id: Identifier; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DeclareFunction'; _DeclareFunction: void; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DeclareModule'; _DeclareModule: void; body: BlockStatement; id: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'DeclareVariable'; _DeclareVariable: void; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'InterfaceDeclaration'; _InterfaceDeclaration: void; body: ObjectTypeAnnotation; extends: Array; id: Identifier; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TypeAlias'; _TypeAlias: void; id: Identifier; right: Type; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Type = { type: 'AnyTypeAnnotation'; _AnyTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ArrayTypeAnnotation'; _ArrayTypeAnnotation: void; elementType: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BooleanLiteralTypeAnnotation'; _BooleanLiteralTypeAnnotation: void; raw: string; value: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'BooleanTypeAnnotation'; _BooleanTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'FunctionTypeAnnotation'; _FunctionTypeAnnotation: void; params: Array; rest: ?FunctionTypeParam; returnType: Type; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'GenericTypeAnnotation'; _GenericTypeAnnotation: void; id: Node; typeParameters: ?TypeParameterInstantiation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'IntersectionTypeAnnotation'; _IntersectionTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'MixedTypeAnnotation'; _MixedTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'NullableTypeAnnotation'; _NullableTypeAnnotation: void; typeAnnotation: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'NumberLiteralTypeAnnotation'; _NumberLiteralTypeAnnotation: void; raw: string; value: number; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'NumberTypeAnnotation'; _NumberTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'StringLiteralTypeAnnotation'; _StringLiteralTypeAnnotation: void; raw: string; value: string; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'StringTypeAnnotation'; _StringTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'TupleTypeAnnotation'; _TupleTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'ObjectTypeAnnotation'; _ObjectTypeAnnotation: void; callProperties: Array; indexers: Array; properties: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'UnionTypeAnnotation'; _UnionTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; } | { type: 'VoidTypeAnnotation'; _VoidTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // Concrete Types. Nothing can extend these. export type CommentLine = { type: 'CommentLine'; _CommentLine: void; value: string; end: number; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; }; export type CommentBlock = { type: 'CommentBlock'; _CommentBlock: void; value: string; end: number; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; }; // Babel concrete types. export type ArrayExpression = { type: 'ArrayExpression'; _ArrayExpression: void; elements: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ArrayPattern = { type: 'ArrayPattern'; _ArrayPattern: void; elements: Array; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ArrowFunctionExpression = { type: 'ArrowFunctionExpression'; _ArrowFunctionExpression: void; body: Node; id: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; }; type AssignmentOperator = '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' | '>>>=' | '|=' | '^=' | '&='; export type AssignmentExpression = { type: 'AssignmentExpression'; _AssignmentExpression: void; left: Pattern; operator: AssignmentOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type AssignmentPattern = { type: 'AssignmentPattern'; _AssignmentPattern: void; left: Pattern; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type AwaitExpression = { type: 'AwaitExpression'; _AwaitExpression: void; all: boolean; argument: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; type BinaryOperator = '==' | '!=' | '===' | '!==' | '<' | '<=' | '>' | '>=' | '<<' | '>>' | '>>>' | '+' | '-' | '*' | '/' | '%' | '&' | '|' | '^' | 'in' | 'instanceof' | '..'; export type BinaryExpression = { type: 'BinaryExpression'; _BinaryExpression: void; left: Expression; operator: BinaryOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: What is this? export type BindExpression = { type: 'BindExpression'; _BindExpression: void; callee: Node; object: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type BlockStatement = { type: 'BlockStatement'; _BlockStatement: void; body: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type BreakStatement = { type: 'BreakStatement'; _BreakStatement: void; label: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type CallExpression = { type: 'CallExpression'; _CallExpression: void; arguments: Array; callee: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type CatchClause = { type: 'CatchClause'; _CatchClause: void; body: BlockStatement; param: Pattern; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ClassBody = { type: 'ClassBody'; _ClassBody: void; body: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ClassDeclaration = { type: 'ClassDeclaration'; _ClassDeclaration: void; body: ClassBody; id: ?Identifier; superClass: ?Expression; decorators: any; superTypeParameters: any; typeParameters: any; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ClassExpression = { type: 'ClassExpression'; _ClassExpression: void; body: ClassBody; id: ?Identifier; superClass: ?Expression; decorators: any; superTypeParameters: any; typeParameters: any; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ComprehensionBlock = { type: 'ComprehensionBlock'; _ComprehensionBlock: void; each: boolean; left: Pattern; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ComprehensionExpression = { type: 'ComprehensionExpression'; _ComprehensionExpression: void; body: Expression; blocks: Array; filter: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ConditionalExpression = { type: 'ConditionalExpression'; _ConditionalExpression: void; alternate: Expression; consequent: Expression; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ContinueStatement = { type: 'ContinueStatement'; _ContinueStatement: void; label: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type Decorator = { type: 'Decorator'; _Decorator: void; expression: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type DebuggerStatement = { type: 'DebuggerStatement'; _DebuggerStatement: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type DoWhileStatement = { type: 'DoWhileStatement'; _DoWhileStatement: void; body: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type DoExpression = { type: 'DoExpression'; _DoExpression: void; body: Statement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type EmptyStatement = { type: 'EmptyStatement'; _EmptyStatement: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ExpressionStatement = { type: 'ExpressionStatement'; _ExpressionStatement: void; expression: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type File = { type: 'File'; _File: void; program: Program; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ForInStatement = { type: 'ForInStatement'; _ForInStatement: void; body: Statement; left: Node; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ForOfStatement = { type: 'ForOfStatement'; _ForOfStatement: void; body: Statement; left: Node; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ForStatement = { type: 'ForStatement'; _ForStatement: void; init: ?Node; test: ?Expression; update: ?Expression; body: Statement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type FunctionDeclaration = { type: 'FunctionDeclaration'; _FunctionDeclaration: void; body: BlockStatement; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; }; export type FunctionExpression = { type: 'FunctionExpression'; _FunctionExpression: void; body: BlockStatement; id: ?Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; async: boolean; defaults: Array; expression: boolean; generator: boolean; params: Array; rest: ?Identifier; returnType: ?TypeAnnotation; typeParameters: ?TypeParameterDeclaration; }; export type Identifier = { type: 'Identifier'; _Identifier: void; name: string; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type IfStatement = { type: 'IfStatement'; _IfStatement: void; alternate: ?Statement; consequent: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ImportDefaultSpecifier = { type: 'ImportDefaultSpecifier'; _ImportDefaultSpecifier: void; local: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ImportNamespaceSpecifier = { type: 'ImportNamespaceSpecifier'; _ImportNamespaceSpecifier: void; local: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ImportDeclaration = { type: 'ImportDeclaration'; _ImportDeclaration: void; specifiers: Array; source: Literal; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ImportSpecifier = { type: 'ImportSpecifier'; _ImportSpecifier: void; imported: Node; local: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type LabeledStatement = { type: 'LabeledStatement'; _LabeledStatement: void; body: Statement; label: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Literal = { type: 'Literal'; _Literal: void; raw: string; regex: ?{pattern: string, flags: string}; value: ?(string | boolean | number | RegExp); end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; type LogicalOperator = '||' | '&&'; export type LogicalExpression = { type: 'LogicalExpression'; _LogicalExpression: void; left: Expression; operator: LogicalOperator; right: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type MemberExpression = { type: 'MemberExpression'; _MemberExpression: void; computed: boolean; object: Expression; property: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type MetaProperty = { type: 'MetaProperty'; _MetaProperty: void; meta: Node; property: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type MethodDefinition = { type: 'MethodDefinition'; _MethodDefinition: void; computed: boolean; key: Node; kind: 'constructor' | 'method' | 'get' | 'set'; static: boolean; value: FunctionExpression; decorators: ?Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type NewExpression = { type: 'NewExpression'; _NewExpression: void; arguments: Array; callee: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Noop = { type: 'Noop'; _Noop: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ObjectExpression = { type: 'ObjectExpression'; _ObjectExpression: void; properties: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ObjectPattern = { type: 'ObjectPattern'; _ObjectPattern: void; properties: Array; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Program = { type: 'Program'; _Program: void; body: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Property = { type: 'Property'; _Property: void; computed: boolean; key: Node; kind: 'init' | 'get' | 'set'; method: boolean; shorthand: boolean; value: Node; decorators: ?Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type RestElement = { type: 'RestElement'; _RestElement: void; argument: Pattern; typeAnnotation: ?TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ReturnStatement = { type: 'ReturnStatement'; _ReturnStatement: void; argument: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type SequenceExpression = { type: 'SequenceExpression'; _SequenceExpression: void; expression: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type SpreadElement = { type: 'SpreadElement'; _SpreadElement: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type SpreadProperty = { type: 'SpreadProperty'; _SpreadProperty: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type Super = { type: 'Super'; _Super: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type SwitchCase = { type: 'SwitchCase'; _SwitchCase: void; consequent: Array; test: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type SwitchStatement = { type: 'SwitchStatement'; _SwitchStatement: void; cases: Array; discriminant: Expression; lexical: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TaggedTemplateExpression = { type: 'TaggedTemplateExpression'; _TaggedTemplateExpression: void; quasi: TemplateLiteral; tag: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TemplateElement = { type: 'TemplateElement'; _TemplateElement: void; tail: boolean; value: {cooked: string, raw: string}; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TemplateLiteral = { type: 'TemplateLiteral'; _TemplateLiteral: void; expressions: Array; quasis: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ThisExpression = { type: 'ThisExpression'; _ThisExpression: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ThrowStatement = { type: 'ThrowStatement'; _ThrowStatement: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TryStatement = { type: 'TryStatement'; _TryStatement: void; block: BlockStatement; finalizer: ?BlockStatement; guardedHandlers: Array; handler: ?CatchClause; handlers: ?Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; type UnaryOperator = '-' | '+' | '!' | '~' | 'typeof' | 'void' | 'delete'; export type UnaryExpression = { type: 'UnaryExpression'; _UnaryExpression: void; argument: Expression; operator: UnaryOperator; prefix: true; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; type UpdateOperator = '++' | '--'; export type UpdateExpression = { type: 'UpdateExpression'; _UpdateExpression: void; argument: Expression; operator: UpdateOperator; prefix: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type VariableDeclaration = { type: 'VariableDeclaration'; _VariableDeclaration: void; declarations: Array; kind: 'var' | 'let' | 'const'; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type VariableDeclarator = { type: 'VariableDeclarator'; _VariableDeclarator: void; id: Pattern; init: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type WhileStatement = { type: 'WhileStatement'; _WhileStatement: void; body: Statement; test: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type WithStatement = { type: 'WithStatement'; _WithStatement: void; body: Statement; object: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type YieldExpression = { type: 'YieldExpression'; _YieldExpression: void; argument: ?Expression; delegate: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ExportAllDeclaration = { type: 'ExportAllDeclaration'; _ExportAllDeclaration: void; exported: Node; source: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ExportDefaultDeclaration = { type: 'ExportDefaultDeclaration'; _ExportDefaultDeclaration: void; declaration: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ExportNamedDeclaration = { type: 'ExportNamedDeclaration'; _ExportNamedDeclaration: void; declaration: Node; source: Literal; specifiers: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ExportDefaultSpecifier = { type: 'ExportDefaultSpecifier'; _ExportDefaultSpecifier: void; exported: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ExportNamespaceSpecifier = { type: 'ExportNamespaceSpecifier'; _ExportNamespaceSpecifier: void; exported: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type ExportSpecifier = { type: 'ExportSpecifier'; _ExportSpecifier: void; local: Node; exported: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type AnyTypeAnnotation = { type: 'AnyTypeAnnotation'; _AnyTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ArrayTypeAnnotation = { type: 'ArrayTypeAnnotation'; _ArrayTypeAnnotation: void; elementType: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type BooleanLiteralTypeAnnotation = { type: 'BooleanLiteralTypeAnnotation'; _BooleanLiteralTypeAnnotation: void; raw: string; value: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type BooleanTypeAnnotation = { type: 'BooleanTypeAnnotation'; _BooleanTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ClassImplements = { type: 'ClassImplements'; _ClassImplements: void; id: Identifier; typeParameters: ?TypeParameterInstantiation; superClass: ?Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ClassProperty = { type: 'ClassProperty'; _ClassProperty: void; computed: boolean; key: Node; static: boolean; typeAnnotation: ?TypeAnnotation; value: ?Expression; decorators: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type DeclareClass = { type: 'DeclareClass'; _DeclareClass: void; body: ObjectTypeAnnotation; extends: Array; id: Identifier; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type DeclareFunction = { type: 'DeclareFunction'; _DeclareFunction: void; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type DeclareModule = { type: 'DeclareModule'; _DeclareModule: void; body: BlockStatement; id: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; // TODO: Make this correct. export type DeclareVariable = { type: 'DeclareVariable'; _DeclareVariable: void; id: Identifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type FunctionTypeAnnotation = { type: 'FunctionTypeAnnotation'; _FunctionTypeAnnotation: void; params: Array; rest: ?FunctionTypeParam; returnType: Type; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type FunctionTypeParam = { type: 'FunctionTypeParam'; _FunctionTypeParam: void; name: Identifier; optional: boolean; typeAnnotation: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type GenericTypeAnnotation = { type: 'GenericTypeAnnotation'; _GenericTypeAnnotation: void; id: Node; typeParameters: ?TypeParameterInstantiation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type InterfaceExtends = { type: 'InterfaceExtends'; _InterfaceExtends: void; id: Identifier; typeParameters: ?TypeParameterInstantiation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type InterfaceDeclaration = { type: 'InterfaceDeclaration'; _InterfaceDeclaration: void; body: ObjectTypeAnnotation; extends: Array; id: Identifier; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type IntersectionTypeAnnotation = { type: 'IntersectionTypeAnnotation'; _IntersectionTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type MixedTypeAnnotation = { type: 'MixedTypeAnnotation'; _MixedTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type NullableTypeAnnotation = { type: 'NullableTypeAnnotation'; _NullableTypeAnnotation: void; typeAnnotation: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type NumberLiteralTypeAnnotation = { type: 'NumberLiteralTypeAnnotation'; _NumberLiteralTypeAnnotation: void; raw: string; value: number; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type NumberTypeAnnotation = { type: 'NumberTypeAnnotation'; _NumberTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type StringLiteralTypeAnnotation = { type: 'StringLiteralTypeAnnotation'; _StringLiteralTypeAnnotation: void; raw: string; value: string; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type StringTypeAnnotation = { type: 'StringTypeAnnotation'; _StringTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TupleTypeAnnotation = { type: 'TupleTypeAnnotation'; _TupleTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TypeofTypeAnnotation = { type: 'TypeofTypeAnnotation'; _TypeofTypeAnnotation: void; argument: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TypeAlias = { type: 'TypeAlias'; _TypeAlias: void; id: Identifier; right: Type; typeParameters: ?TypeParameterDeclaration; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TypeAnnotation = { type: 'TypeAnnotation'; _TypeAnnotation: void; typeAnnotation: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TypeCastExpression = { type: 'TypeCastExpression'; _TypeCastExpression: void; expression: Expression; typeAnnotation: TypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TypeParameterDeclaration = { type: 'TypeParameterDeclaration'; _TypeParameterDeclaration: void; params: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type TypeParameterInstantiation = { type: 'TypeParameterInstantiation'; _TypeParameterInstantiation: void; params: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ObjectTypeAnnotation = { type: 'ObjectTypeAnnotation'; _ObjectTypeAnnotation: void; callProperties: Array; indexers: Array; properties: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ObjectTypeCallProperty = { type: 'ObjectTypeCallProperty'; _ObjectTypeCallProperty: void; static: boolean; value: FunctionTypeAnnotation; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ObjectTypeIndexer = { type: 'ObjectTypeIndexer'; _ObjectTypeIndexer: void; id: Identifier; key: Type; value: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type ObjectTypeProperty = { type: 'ObjectTypeProperty'; _ObjectTypeProperty: void; key: Node; optional: boolean; value: Type; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type QualifiedTypeIdentifier = { type: 'QualifiedTypeIdentifier'; _QualifiedTypeIdentifier: void; id: Identifier; qualification: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type UnionTypeAnnotation = { type: 'UnionTypeAnnotation'; _UnionTypeAnnotation: void; types: Array; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type VoidTypeAnnotation = { type: 'VoidTypeAnnotation'; _VoidTypeAnnotation: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXAttribute = { type: 'JSXAttribute'; _JSXAttribute: void; name: Node; value: ?Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXClosingElement = { type: 'JSXClosingElement'; _JSXClosingElement: void; name: Node; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXElement = { type: 'JSXElement'; _JSXElement: void; children: Array; closingElement: ?JSXClosingElement; openingElement: JSXOpeningElement; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXEmptyExpression = { type: 'JSXEmptyExpression'; _JSXEmptyExpression: void; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXExpressionContainer = { type: 'JSXExpressionContainer'; _JSXExpressionContainer: void; expression: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXIdentifier = { type: 'JSXIdentifier'; _JSXIdentifier: void; name: string; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXMemberExpression = { type: 'JSXMemberExpression'; _JSXMemberExpression: void; computed: boolean; object: Node; property: JSXIdentifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXNamespacedName = { type: 'JSXNamespacedName'; _JSXNamespacedName: void; name: JSXIdentifier; namespace: JSXIdentifier; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXOpeningElement = { type: 'JSXOpeningElement'; _JSXOpeningElement: void; attributes: Array; name: Array; selfClosing: boolean; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; }; export type JSXSpreadAttribute = { type: 'JSXSpreadAttribute'; _JSXSpreadAttribute: void; argument: Expression; end: number; innerComments: ?Array; leadingComments: ?Array; loc: { end: {column: number, line: number}, start: {column: number, line: number}, }; start: number; trailingComments: ?Array; };