exports[`test printBinaryExpression.js 1`] = ` "\'use babel\'; /* @flow */ /* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the license found in the LICENSE file in * the root directory of this source tree. */ import type {BinaryExpression} from \'./types\'; function printBinaryExpression( node: BinaryExpression, ) { console.log(node); } module.exports = printBinaryExpression; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \"use babel\"; /* @flow */ /* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the license found in the LICENSE file in * the root directory of this source tree. */ import type { BinaryExpression } from \"./types\"; function printBinaryExpression(node: BinaryExpression) { console.log(node); } module.exports = printBinaryExpression; " `; exports[`test types.js 1`] = ` "/** * @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; }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** * @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 }; " `;