/** * @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, };