UNPKG

ast-types

Version:

Esprima-compatible implementation of the Mozilla JS Parser API

1,284 lines 87.6 kB
import { Omit } from "../types"; import { Type } from "../lib/types"; import * as K from "./kinds"; export declare namespace namedTypes { interface Printable { loc?: K.SourceLocationKind | null; } interface SourceLocation { start: K.PositionKind; end: K.PositionKind; source?: string | null; } interface Node extends Printable { type: string; comments?: K.CommentKind[] | null; } interface Comment extends Printable { value: string; leading?: boolean; trailing?: boolean; } interface Position { line: number; column: number; } interface File extends Omit<Node, "type"> { type: "File"; program: K.ProgramKind; name?: string | null; } interface Program extends Omit<Node, "type"> { type: "Program"; body: K.StatementKind[]; directives?: K.DirectiveKind[]; interpreter?: K.InterpreterDirectiveKind | null; } interface Statement extends Node { } interface Function extends Node { id?: K.IdentifierKind | null; params: K.PatternKind[]; body: K.BlockStatementKind; generator?: boolean; async?: boolean; expression?: boolean; defaults?: (K.ExpressionKind | null)[]; rest?: K.IdentifierKind | null; returnType?: K.TypeAnnotationKind | K.TSTypeAnnotationKind | null; typeParameters?: K.TypeParameterDeclarationKind | K.TSTypeParameterDeclarationKind | null; predicate?: K.FlowPredicateKind | null; } interface Expression extends Node { } interface Pattern extends Node { } interface Identifier extends Omit<Expression, "type">, Omit<Pattern, "type"> { type: "Identifier"; name: string; optional?: boolean; typeAnnotation?: K.TypeAnnotationKind | K.TSTypeAnnotationKind | null; } interface BlockStatement extends Omit<Statement, "type"> { type: "BlockStatement"; body: K.StatementKind[]; directives?: K.DirectiveKind[]; } interface EmptyStatement extends Omit<Statement, "type"> { type: "EmptyStatement"; } interface ExpressionStatement extends Omit<Statement, "type"> { type: "ExpressionStatement"; expression: K.ExpressionKind; } interface IfStatement extends Omit<Statement, "type"> { type: "IfStatement"; test: K.ExpressionKind; consequent: K.StatementKind; alternate?: K.StatementKind | null; } interface LabeledStatement extends Omit<Statement, "type"> { type: "LabeledStatement"; label: K.IdentifierKind; body: K.StatementKind; } interface BreakStatement extends Omit<Statement, "type"> { type: "BreakStatement"; label?: K.IdentifierKind | null; } interface ContinueStatement extends Omit<Statement, "type"> { type: "ContinueStatement"; label?: K.IdentifierKind | null; } interface WithStatement extends Omit<Statement, "type"> { type: "WithStatement"; object: K.ExpressionKind; body: K.StatementKind; } interface SwitchStatement extends Omit<Statement, "type"> { type: "SwitchStatement"; discriminant: K.ExpressionKind; cases: K.SwitchCaseKind[]; lexical?: boolean; } interface SwitchCase extends Omit<Node, "type"> { type: "SwitchCase"; test: K.ExpressionKind | null; consequent: K.StatementKind[]; } interface ReturnStatement extends Omit<Statement, "type"> { type: "ReturnStatement"; argument: K.ExpressionKind | null; } interface ThrowStatement extends Omit<Statement, "type"> { type: "ThrowStatement"; argument: K.ExpressionKind; } interface TryStatement extends Omit<Statement, "type"> { type: "TryStatement"; block: K.BlockStatementKind; handler?: K.CatchClauseKind | null; handlers?: K.CatchClauseKind[]; guardedHandlers?: K.CatchClauseKind[]; finalizer?: K.BlockStatementKind | null; } interface CatchClause extends Omit<Node, "type"> { type: "CatchClause"; param?: K.PatternKind | null; guard?: K.ExpressionKind | null; body: K.BlockStatementKind; } interface WhileStatement extends Omit<Statement, "type"> { type: "WhileStatement"; test: K.ExpressionKind; body: K.StatementKind; } interface DoWhileStatement extends Omit<Statement, "type"> { type: "DoWhileStatement"; body: K.StatementKind; test: K.ExpressionKind; } interface ForStatement extends Omit<Statement, "type"> { type: "ForStatement"; init: K.VariableDeclarationKind | K.ExpressionKind | null; test: K.ExpressionKind | null; update: K.ExpressionKind | null; body: K.StatementKind; } interface Declaration extends Statement { } interface VariableDeclaration extends Omit<Declaration, "type"> { type: "VariableDeclaration"; kind: "var" | "let" | "const"; declarations: (K.VariableDeclaratorKind | K.IdentifierKind)[]; } interface ForInStatement extends Omit<Statement, "type"> { type: "ForInStatement"; left: K.VariableDeclarationKind | K.ExpressionKind; right: K.ExpressionKind; body: K.StatementKind; } interface DebuggerStatement extends Omit<Statement, "type"> { type: "DebuggerStatement"; } interface FunctionDeclaration extends Omit<Function, "type" | "id">, Omit<Declaration, "type"> { type: "FunctionDeclaration"; id: K.IdentifierKind | null; } interface FunctionExpression extends Omit<Function, "type">, Omit<Expression, "type"> { type: "FunctionExpression"; } interface VariableDeclarator extends Omit<Node, "type"> { type: "VariableDeclarator"; id: K.PatternKind; init?: K.ExpressionKind | null; } interface ThisExpression extends Omit<Expression, "type"> { type: "ThisExpression"; } interface ArrayExpression extends Omit<Expression, "type"> { type: "ArrayExpression"; elements: (K.ExpressionKind | K.SpreadElementKind | K.RestElementKind | null)[]; } interface ObjectExpression extends Omit<Expression, "type"> { type: "ObjectExpression"; properties: (K.PropertyKind | K.ObjectMethodKind | K.ObjectPropertyKind | K.SpreadPropertyKind | K.SpreadElementKind)[]; } interface Property extends Omit<Node, "type"> { type: "Property"; kind: "init" | "get" | "set"; key: K.LiteralKind | K.IdentifierKind | K.ExpressionKind; value: K.ExpressionKind | K.PatternKind; method?: boolean; shorthand?: boolean; computed?: boolean; decorators?: K.DecoratorKind[] | null; } interface Literal extends Omit<Expression, "type"> { type: "Literal"; value: string | boolean | null | number | RegExp; regex?: { pattern: string; flags: string; } | null; } interface SequenceExpression extends Omit<Expression, "type"> { type: "SequenceExpression"; expressions: K.ExpressionKind[]; } interface UnaryExpression extends Omit<Expression, "type"> { type: "UnaryExpression"; operator: "-" | "+" | "!" | "~" | "typeof" | "void" | "delete"; argument: K.ExpressionKind; prefix?: boolean; } interface BinaryExpression extends Omit<Expression, "type"> { type: "BinaryExpression"; operator: "==" | "!=" | "===" | "!==" | "<" | "<=" | ">" | ">=" | "<<" | ">>" | ">>>" | "+" | "-" | "*" | "/" | "%" | "&" | "|" | "^" | "in" | "instanceof" | "**"; left: K.ExpressionKind; right: K.ExpressionKind; } interface AssignmentExpression extends Omit<Expression, "type"> { type: "AssignmentExpression"; operator: "=" | "+=" | "-=" | "*=" | "/=" | "%=" | "<<=" | ">>=" | ">>>=" | "|=" | "^=" | "&=" | "**="; left: K.PatternKind | K.MemberExpressionKind; right: K.ExpressionKind; } interface ChainElement extends Node { optional?: boolean; } interface MemberExpression extends Omit<Expression, "type">, Omit<ChainElement, "type"> { type: "MemberExpression"; object: K.ExpressionKind; property: K.IdentifierKind | K.ExpressionKind; computed?: boolean; } interface UpdateExpression extends Omit<Expression, "type"> { type: "UpdateExpression"; operator: "++" | "--"; argument: K.ExpressionKind; prefix: boolean; } interface LogicalExpression extends Omit<Expression, "type"> { type: "LogicalExpression"; operator: "||" | "&&" | "??"; left: K.ExpressionKind; right: K.ExpressionKind; } interface ConditionalExpression extends Omit<Expression, "type"> { type: "ConditionalExpression"; test: K.ExpressionKind; consequent: K.ExpressionKind; alternate: K.ExpressionKind; } interface NewExpression extends Omit<Expression, "type"> { type: "NewExpression"; callee: K.ExpressionKind; arguments: (K.ExpressionKind | K.SpreadElementKind)[]; typeArguments?: null | K.TypeParameterInstantiationKind; } interface CallExpression extends Omit<Expression, "type">, Omit<ChainElement, "type"> { type: "CallExpression"; callee: K.ExpressionKind; arguments: (K.ExpressionKind | K.SpreadElementKind)[]; typeArguments?: null | K.TypeParameterInstantiationKind; } interface RestElement extends Omit<Pattern, "type"> { type: "RestElement"; argument: K.PatternKind; typeAnnotation?: K.TypeAnnotationKind | K.TSTypeAnnotationKind | null; } interface TypeAnnotation extends Omit<Node, "type"> { type: "TypeAnnotation"; typeAnnotation: K.FlowTypeKind; } interface TSTypeAnnotation extends Omit<Node, "type"> { type: "TSTypeAnnotation"; typeAnnotation: K.TSTypeKind | K.TSTypeAnnotationKind; } interface SpreadElementPattern extends Omit<Pattern, "type"> { type: "SpreadElementPattern"; argument: K.PatternKind; } interface ArrowFunctionExpression extends Omit<Function, "type" | "id" | "body" | "generator">, Omit<Expression, "type"> { type: "ArrowFunctionExpression"; id?: null; body: K.BlockStatementKind | K.ExpressionKind; generator?: false; } interface ForOfStatement extends Omit<Statement, "type"> { type: "ForOfStatement"; left: K.VariableDeclarationKind | K.PatternKind; right: K.ExpressionKind; body: K.StatementKind; await?: boolean; } interface YieldExpression extends Omit<Expression, "type"> { type: "YieldExpression"; argument: K.ExpressionKind | null; delegate?: boolean; } interface GeneratorExpression extends Omit<Expression, "type"> { type: "GeneratorExpression"; body: K.ExpressionKind; blocks: K.ComprehensionBlockKind[]; filter: K.ExpressionKind | null; } interface ComprehensionBlock extends Omit<Node, "type"> { type: "ComprehensionBlock"; left: K.PatternKind; right: K.ExpressionKind; each: boolean; } interface ComprehensionExpression extends Omit<Expression, "type"> { type: "ComprehensionExpression"; body: K.ExpressionKind; blocks: K.ComprehensionBlockKind[]; filter: K.ExpressionKind | null; } interface ObjectProperty extends Omit<Node, "type"> { shorthand?: boolean; type: "ObjectProperty"; key: K.LiteralKind | K.IdentifierKind | K.ExpressionKind; value: K.ExpressionKind | K.PatternKind; accessibility?: K.LiteralKind | null; computed?: boolean; } interface PropertyPattern extends Omit<Pattern, "type"> { type: "PropertyPattern"; key: K.LiteralKind | K.IdentifierKind | K.ExpressionKind; pattern: K.PatternKind; computed?: boolean; } interface ObjectPattern extends Omit<Pattern, "type"> { type: "ObjectPattern"; properties: (K.PropertyKind | K.PropertyPatternKind | K.SpreadPropertyPatternKind | K.SpreadPropertyKind | K.ObjectPropertyKind | K.RestPropertyKind)[]; typeAnnotation?: K.TypeAnnotationKind | K.TSTypeAnnotationKind | null; decorators?: K.DecoratorKind[] | null; } interface ArrayPattern extends Omit<Pattern, "type"> { type: "ArrayPattern"; elements: (K.PatternKind | K.SpreadElementKind | null)[]; } interface SpreadElement extends Omit<Node, "type"> { type: "SpreadElement"; argument: K.ExpressionKind; } interface AssignmentPattern extends Omit<Pattern, "type"> { type: "AssignmentPattern"; left: K.PatternKind; right: K.ExpressionKind; } interface MethodDefinition extends Omit<Declaration, "type"> { type: "MethodDefinition"; kind: "constructor" | "method" | "get" | "set"; key: K.ExpressionKind; value: K.FunctionKind; computed?: boolean; static?: boolean; decorators?: K.DecoratorKind[] | null; } interface ClassPropertyDefinition extends Omit<Declaration, "type"> { type: "ClassPropertyDefinition"; definition: K.MethodDefinitionKind | K.VariableDeclaratorKind | K.ClassPropertyDefinitionKind | K.ClassPropertyKind; } interface ClassProperty extends Omit<Declaration, "type"> { type: "ClassProperty"; key: K.LiteralKind | K.IdentifierKind | K.ExpressionKind; computed?: boolean; value: K.ExpressionKind | null; static?: boolean; typeAnnotation?: K.TypeAnnotationKind | K.TSTypeAnnotationKind | null; variance?: K.VarianceKind | "plus" | "minus" | null; access?: "public" | "private" | "protected" | undefined; } interface ClassBody extends Omit<Declaration, "type"> { type: "ClassBody"; body: (K.MethodDefinitionKind | K.VariableDeclaratorKind | K.ClassPropertyDefinitionKind | K.ClassPropertyKind | K.ClassPrivatePropertyKind | K.ClassMethodKind | K.ClassPrivateMethodKind | K.TSDeclareMethodKind | K.TSCallSignatureDeclarationKind | K.TSConstructSignatureDeclarationKind | K.TSIndexSignatureKind | K.TSMethodSignatureKind | K.TSPropertySignatureKind)[]; } interface ClassDeclaration extends Omit<Declaration, "type"> { type: "ClassDeclaration"; id: K.IdentifierKind | null; body: K.ClassBodyKind; superClass?: K.ExpressionKind | null; typeParameters?: K.TypeParameterDeclarationKind | K.TSTypeParameterDeclarationKind | null; superTypeParameters?: K.TypeParameterInstantiationKind | K.TSTypeParameterInstantiationKind | null; implements?: K.ClassImplementsKind[] | K.TSExpressionWithTypeArgumentsKind[]; } interface ClassExpression extends Omit<Expression, "type"> { type: "ClassExpression"; id?: K.IdentifierKind | null; body: K.ClassBodyKind; superClass?: K.ExpressionKind | null; typeParameters?: K.TypeParameterDeclarationKind | K.TSTypeParameterDeclarationKind | null; superTypeParameters?: K.TypeParameterInstantiationKind | K.TSTypeParameterInstantiationKind | null; implements?: K.ClassImplementsKind[] | K.TSExpressionWithTypeArgumentsKind[]; } interface Super extends Omit<Expression, "type"> { type: "Super"; } interface Specifier extends Node { } interface ModuleSpecifier extends Specifier { local?: K.IdentifierKind | null; id?: K.IdentifierKind | null; name?: K.IdentifierKind | null; } interface ImportSpecifier extends Omit<ModuleSpecifier, "type"> { type: "ImportSpecifier"; imported: K.IdentifierKind; } interface ImportDefaultSpecifier extends Omit<ModuleSpecifier, "type"> { type: "ImportDefaultSpecifier"; } interface ImportNamespaceSpecifier extends Omit<ModuleSpecifier, "type"> { type: "ImportNamespaceSpecifier"; } interface ImportDeclaration extends Omit<Declaration, "type"> { type: "ImportDeclaration"; specifiers?: (K.ImportSpecifierKind | K.ImportNamespaceSpecifierKind | K.ImportDefaultSpecifierKind)[]; source: K.LiteralKind; importKind?: "value" | "type" | "typeof"; } interface ExportNamedDeclaration extends Omit<Declaration, "type"> { type: "ExportNamedDeclaration"; declaration: K.DeclarationKind | null; specifiers?: K.ExportSpecifierKind[]; source?: K.LiteralKind | null; } interface ExportSpecifier extends Omit<ModuleSpecifier, "type"> { type: "ExportSpecifier"; exported: K.IdentifierKind; } interface ExportDefaultDeclaration extends Omit<Declaration, "type"> { type: "ExportDefaultDeclaration"; declaration: K.DeclarationKind | K.ExpressionKind; } interface ExportAllDeclaration extends Omit<Declaration, "type"> { type: "ExportAllDeclaration"; source: K.LiteralKind; exported: K.IdentifierKind | null; } interface TaggedTemplateExpression extends Omit<Expression, "type"> { type: "TaggedTemplateExpression"; tag: K.ExpressionKind; quasi: K.TemplateLiteralKind; } interface TemplateLiteral extends Omit<Expression, "type"> { type: "TemplateLiteral"; quasis: K.TemplateElementKind[]; expressions: K.ExpressionKind[]; } interface TemplateElement extends Omit<Node, "type"> { type: "TemplateElement"; value: { cooked: string | null; raw: string; }; tail: boolean; } interface MetaProperty extends Omit<Expression, "type"> { type: "MetaProperty"; meta: K.IdentifierKind; property: K.IdentifierKind; } interface AwaitExpression extends Omit<Expression, "type"> { type: "AwaitExpression"; argument: K.ExpressionKind | null; all?: boolean; } interface SpreadProperty extends Omit<Node, "type"> { type: "SpreadProperty"; argument: K.ExpressionKind; } interface SpreadPropertyPattern extends Omit<Pattern, "type"> { type: "SpreadPropertyPattern"; argument: K.PatternKind; } interface ImportExpression extends Omit<Expression, "type"> { type: "ImportExpression"; source: K.ExpressionKind; } interface ChainExpression extends Omit<Expression, "type"> { type: "ChainExpression"; expression: K.ChainElementKind; } interface OptionalCallExpression extends Omit<CallExpression, "type" | "optional"> { type: "OptionalCallExpression"; optional?: boolean; } interface OptionalMemberExpression extends Omit<MemberExpression, "type" | "optional"> { type: "OptionalMemberExpression"; optional?: boolean; } interface JSXAttribute extends Omit<Node, "type"> { type: "JSXAttribute"; name: K.JSXIdentifierKind | K.JSXNamespacedNameKind; value?: K.LiteralKind | K.JSXExpressionContainerKind | K.JSXElementKind | K.JSXFragmentKind | null; } interface JSXIdentifier extends Omit<Identifier, "type" | "name"> { type: "JSXIdentifier"; name: string; } interface JSXNamespacedName extends Omit<Node, "type"> { type: "JSXNamespacedName"; namespace: K.JSXIdentifierKind; name: K.JSXIdentifierKind; } interface JSXExpressionContainer extends Omit<Expression, "type"> { type: "JSXExpressionContainer"; expression: K.ExpressionKind | K.JSXEmptyExpressionKind; } interface JSXElement extends Omit<Expression, "type"> { type: "JSXElement"; openingElement: K.JSXOpeningElementKind; closingElement?: K.JSXClosingElementKind | null; children?: (K.JSXTextKind | K.JSXExpressionContainerKind | K.JSXSpreadChildKind | K.JSXElementKind | K.JSXFragmentKind | K.LiteralKind)[]; name?: K.JSXIdentifierKind | K.JSXNamespacedNameKind | K.JSXMemberExpressionKind; selfClosing?: boolean; attributes?: (K.JSXAttributeKind | K.JSXSpreadAttributeKind)[]; } interface JSXFragment extends Omit<Expression, "type"> { type: "JSXFragment"; openingFragment: K.JSXOpeningFragmentKind; closingFragment: K.JSXClosingFragmentKind; children?: (K.JSXTextKind | K.JSXExpressionContainerKind | K.JSXSpreadChildKind | K.JSXElementKind | K.JSXFragmentKind | K.LiteralKind)[]; } interface JSXMemberExpression extends Omit<MemberExpression, "type" | "object" | "property" | "computed"> { type: "JSXMemberExpression"; object: K.JSXIdentifierKind | K.JSXMemberExpressionKind; property: K.JSXIdentifierKind; computed?: boolean; } interface JSXSpreadAttribute extends Omit<Node, "type"> { type: "JSXSpreadAttribute"; argument: K.ExpressionKind; } interface JSXEmptyExpression extends Omit<Node, "type"> { type: "JSXEmptyExpression"; } interface JSXText extends Omit<Literal, "type" | "value"> { type: "JSXText"; value: string; raw?: string; } interface JSXSpreadChild extends Omit<Node, "type"> { type: "JSXSpreadChild"; expression: K.ExpressionKind; } interface JSXOpeningElement extends Omit<Node, "type"> { type: "JSXOpeningElement"; name: K.JSXIdentifierKind | K.JSXNamespacedNameKind | K.JSXMemberExpressionKind; attributes?: (K.JSXAttributeKind | K.JSXSpreadAttributeKind)[]; selfClosing?: boolean; } interface JSXClosingElement extends Omit<Node, "type"> { type: "JSXClosingElement"; name: K.JSXIdentifierKind | K.JSXNamespacedNameKind | K.JSXMemberExpressionKind; } interface JSXOpeningFragment extends Omit<Node, "type"> { type: "JSXOpeningFragment"; } interface JSXClosingFragment extends Omit<Node, "type"> { type: "JSXClosingFragment"; } interface Decorator extends Omit<Node, "type"> { type: "Decorator"; expression: K.ExpressionKind; } interface PrivateName extends Omit<Expression, "type">, Omit<Pattern, "type"> { type: "PrivateName"; id: K.IdentifierKind; } interface ClassPrivateProperty extends Omit<ClassProperty, "type" | "key" | "value"> { type: "ClassPrivateProperty"; key: K.PrivateNameKind; value?: K.ExpressionKind | null; } interface TypeParameterDeclaration extends Omit<Node, "type"> { type: "TypeParameterDeclaration"; params: K.TypeParameterKind[]; } interface TSTypeParameterDeclaration extends Omit<Declaration, "type"> { type: "TSTypeParameterDeclaration"; params: K.TSTypeParameterKind[]; } interface TypeParameterInstantiation extends Omit<Node, "type"> { type: "TypeParameterInstantiation"; params: K.FlowTypeKind[]; } interface TSTypeParameterInstantiation extends Omit<Node, "type"> { type: "TSTypeParameterInstantiation"; params: K.TSTypeKind[]; } interface ClassImplements extends Omit<Node, "type"> { type: "ClassImplements"; id: K.IdentifierKind; superClass?: K.ExpressionKind | null; typeParameters?: K.TypeParameterInstantiationKind | null; } interface TSType extends Node { } interface TSHasOptionalTypeParameterInstantiation { typeParameters?: K.TSTypeParameterInstantiationKind | null; } interface TSExpressionWithTypeArguments extends Omit<TSType, "type">, TSHasOptionalTypeParameterInstantiation { type: "TSExpressionWithTypeArguments"; expression: K.IdentifierKind | K.TSQualifiedNameKind; } interface Flow extends Node { } interface FlowType extends Flow { } interface AnyTypeAnnotation extends Omit<FlowType, "type"> { type: "AnyTypeAnnotation"; } interface EmptyTypeAnnotation extends Omit<FlowType, "type"> { type: "EmptyTypeAnnotation"; } interface MixedTypeAnnotation extends Omit<FlowType, "type"> { type: "MixedTypeAnnotation"; } interface VoidTypeAnnotation extends Omit<FlowType, "type"> { type: "VoidTypeAnnotation"; } interface SymbolTypeAnnotation extends Omit<FlowType, "type"> { type: "SymbolTypeAnnotation"; } interface NumberTypeAnnotation extends Omit<FlowType, "type"> { type: "NumberTypeAnnotation"; } interface BigIntTypeAnnotation extends Omit<FlowType, "type"> { type: "BigIntTypeAnnotation"; } interface NumberLiteralTypeAnnotation extends Omit<FlowType, "type"> { type: "NumberLiteralTypeAnnotation"; value: number; raw: string; } interface NumericLiteralTypeAnnotation extends Omit<FlowType, "type"> { type: "NumericLiteralTypeAnnotation"; value: number; raw: string; } interface BigIntLiteralTypeAnnotation extends Omit<FlowType, "type"> { type: "BigIntLiteralTypeAnnotation"; value: null; raw: string; } interface StringTypeAnnotation extends Omit<FlowType, "type"> { type: "StringTypeAnnotation"; } interface StringLiteralTypeAnnotation extends Omit<FlowType, "type"> { type: "StringLiteralTypeAnnotation"; value: string; raw: string; } interface BooleanTypeAnnotation extends Omit<FlowType, "type"> { type: "BooleanTypeAnnotation"; } interface BooleanLiteralTypeAnnotation extends Omit<FlowType, "type"> { type: "BooleanLiteralTypeAnnotation"; value: boolean; raw: string; } interface NullableTypeAnnotation extends Omit<FlowType, "type"> { type: "NullableTypeAnnotation"; typeAnnotation: K.FlowTypeKind; } interface NullLiteralTypeAnnotation extends Omit<FlowType, "type"> { type: "NullLiteralTypeAnnotation"; } interface NullTypeAnnotation extends Omit<FlowType, "type"> { type: "NullTypeAnnotation"; } interface ThisTypeAnnotation extends Omit<FlowType, "type"> { type: "ThisTypeAnnotation"; } interface ExistsTypeAnnotation extends Omit<FlowType, "type"> { type: "ExistsTypeAnnotation"; } interface ExistentialTypeParam extends Omit<FlowType, "type"> { type: "ExistentialTypeParam"; } interface FunctionTypeAnnotation extends Omit<FlowType, "type"> { type: "FunctionTypeAnnotation"; params: K.FunctionTypeParamKind[]; returnType: K.FlowTypeKind; rest: K.FunctionTypeParamKind | null; typeParameters: K.TypeParameterDeclarationKind | null; } interface FunctionTypeParam extends Omit<Node, "type"> { type: "FunctionTypeParam"; name: K.IdentifierKind | null; typeAnnotation: K.FlowTypeKind; optional: boolean; } interface ArrayTypeAnnotation extends Omit<FlowType, "type"> { type: "ArrayTypeAnnotation"; elementType: K.FlowTypeKind; } interface ObjectTypeAnnotation extends Omit<FlowType, "type"> { type: "ObjectTypeAnnotation"; properties: (K.ObjectTypePropertyKind | K.ObjectTypeSpreadPropertyKind)[]; indexers?: K.ObjectTypeIndexerKind[]; callProperties?: K.ObjectTypeCallPropertyKind[]; inexact?: boolean | undefined; exact?: boolean; internalSlots?: K.ObjectTypeInternalSlotKind[]; } interface ObjectTypeProperty extends Omit<Node, "type"> { type: "ObjectTypeProperty"; key: K.LiteralKind | K.IdentifierKind; value: K.FlowTypeKind; optional: boolean; variance?: K.VarianceKind | "plus" | "minus" | null; } interface ObjectTypeSpreadProperty extends Omit<Node, "type"> { type: "ObjectTypeSpreadProperty"; argument: K.FlowTypeKind; } interface ObjectTypeIndexer extends Omit<Node, "type"> { type: "ObjectTypeIndexer"; id: K.IdentifierKind; key: K.FlowTypeKind; value: K.FlowTypeKind; variance?: K.VarianceKind | "plus" | "minus" | null; static?: boolean; } interface ObjectTypeCallProperty extends Omit<Node, "type"> { type: "ObjectTypeCallProperty"; value: K.FunctionTypeAnnotationKind; static?: boolean; } interface ObjectTypeInternalSlot extends Omit<Node, "type"> { type: "ObjectTypeInternalSlot"; id: K.IdentifierKind; value: K.FlowTypeKind; optional: boolean; static: boolean; method: boolean; } interface Variance extends Omit<Node, "type"> { type: "Variance"; kind: "plus" | "minus"; } interface QualifiedTypeIdentifier extends Omit<Node, "type"> { type: "QualifiedTypeIdentifier"; qualification: K.IdentifierKind | K.QualifiedTypeIdentifierKind; id: K.IdentifierKind; } interface GenericTypeAnnotation extends Omit<FlowType, "type"> { type: "GenericTypeAnnotation"; id: K.IdentifierKind | K.QualifiedTypeIdentifierKind; typeParameters: K.TypeParameterInstantiationKind | null; } interface MemberTypeAnnotation extends Omit<FlowType, "type"> { type: "MemberTypeAnnotation"; object: K.IdentifierKind; property: K.MemberTypeAnnotationKind | K.GenericTypeAnnotationKind; } interface UnionTypeAnnotation extends Omit<FlowType, "type"> { type: "UnionTypeAnnotation"; types: K.FlowTypeKind[]; } interface IntersectionTypeAnnotation extends Omit<FlowType, "type"> { type: "IntersectionTypeAnnotation"; types: K.FlowTypeKind[]; } interface TypeofTypeAnnotation extends Omit<FlowType, "type"> { type: "TypeofTypeAnnotation"; argument: K.FlowTypeKind; } interface TypeParameter extends Omit<FlowType, "type"> { type: "TypeParameter"; name: string; variance?: K.VarianceKind | "plus" | "minus" | null; bound?: K.TypeAnnotationKind | null; default?: K.FlowTypeKind | null; } interface InterfaceTypeAnnotation extends Omit<FlowType, "type"> { type: "InterfaceTypeAnnotation"; body: K.ObjectTypeAnnotationKind; extends?: K.InterfaceExtendsKind[] | null; } interface InterfaceExtends extends Omit<Node, "type"> { type: "InterfaceExtends"; id: K.IdentifierKind; typeParameters?: K.TypeParameterInstantiationKind | null; } interface InterfaceDeclaration extends Omit<Declaration, "type"> { type: "InterfaceDeclaration"; id: K.IdentifierKind; typeParameters?: K.TypeParameterDeclarationKind | null; body: K.ObjectTypeAnnotationKind; extends: K.InterfaceExtendsKind[]; } interface DeclareInterface extends Omit<InterfaceDeclaration, "type"> { type: "DeclareInterface"; } interface TypeAlias extends Omit<Declaration, "type"> { type: "TypeAlias"; id: K.IdentifierKind; typeParameters: K.TypeParameterDeclarationKind | null; right: K.FlowTypeKind; } interface DeclareTypeAlias extends Omit<TypeAlias, "type"> { type: "DeclareTypeAlias"; } interface OpaqueType extends Omit<Declaration, "type"> { type: "OpaqueType"; id: K.IdentifierKind; typeParameters: K.TypeParameterDeclarationKind | null; impltype: K.FlowTypeKind; supertype: K.FlowTypeKind | null; } interface DeclareOpaqueType extends Omit<OpaqueType, "type" | "impltype"> { type: "DeclareOpaqueType"; impltype: K.FlowTypeKind | null; } interface TypeCastExpression extends Omit<Expression, "type"> { type: "TypeCastExpression"; expression: K.ExpressionKind; typeAnnotation: K.TypeAnnotationKind; } interface TupleTypeAnnotation extends Omit<FlowType, "type"> { type: "TupleTypeAnnotation"; types: K.FlowTypeKind[]; } interface DeclareVariable extends Omit<Statement, "type"> { type: "DeclareVariable"; id: K.IdentifierKind; } interface DeclareFunction extends Omit<Statement, "type"> { type: "DeclareFunction"; id: K.IdentifierKind; predicate?: K.FlowPredicateKind | null; } interface FlowPredicate extends Flow { } interface DeclareClass extends Omit<InterfaceDeclaration, "type"> { type: "DeclareClass"; } interface DeclareModule extends Omit<Statement, "type"> { type: "DeclareModule"; id: K.IdentifierKind | K.LiteralKind; body: K.BlockStatementKind; } interface DeclareModuleExports extends Omit<Statement, "type"> { type: "DeclareModuleExports"; typeAnnotation: K.TypeAnnotationKind; } interface DeclareExportDeclaration extends Omit<Declaration, "type"> { type: "DeclareExportDeclaration"; default: boolean; declaration: K.DeclareVariableKind | K.DeclareFunctionKind | K.DeclareClassKind | K.FlowTypeKind | K.TypeAliasKind | K.DeclareOpaqueTypeKind | K.InterfaceDeclarationKind | null; specifiers?: (K.ExportSpecifierKind | K.ExportBatchSpecifierKind)[]; source?: K.LiteralKind | null; } interface ExportBatchSpecifier extends Omit<Specifier, "type"> { type: "ExportBatchSpecifier"; } interface DeclareExportAllDeclaration extends Omit<Declaration, "type"> { type: "DeclareExportAllDeclaration"; source?: K.LiteralKind | null; } interface InferredPredicate extends Omit<FlowPredicate, "type"> { type: "InferredPredicate"; } interface DeclaredPredicate extends Omit<FlowPredicate, "type"> { type: "DeclaredPredicate"; value: K.ExpressionKind; } interface EnumDeclaration extends Omit<Declaration, "type"> { type: "EnumDeclaration"; id: K.IdentifierKind; body: K.EnumBooleanBodyKind | K.EnumNumberBodyKind | K.EnumStringBodyKind | K.EnumSymbolBodyKind; } interface EnumBooleanBody { type: "EnumBooleanBody"; members: K.EnumBooleanMemberKind[]; explicitType: boolean; } interface EnumNumberBody { type: "EnumNumberBody"; members: K.EnumNumberMemberKind[]; explicitType: boolean; } interface EnumStringBody { type: "EnumStringBody"; members: K.EnumStringMemberKind[] | K.EnumDefaultedMemberKind[]; explicitType: boolean; } interface EnumSymbolBody { type: "EnumSymbolBody"; members: K.EnumDefaultedMemberKind[]; } interface EnumBooleanMember { type: "EnumBooleanMember"; id: K.IdentifierKind; init: K.LiteralKind | boolean; } interface EnumNumberMember { type: "EnumNumberMember"; id: K.IdentifierKind; init: K.LiteralKind; } interface EnumStringMember { type: "EnumStringMember"; id: K.IdentifierKind; init: K.LiteralKind; } interface EnumDefaultedMember { type: "EnumDefaultedMember"; id: K.IdentifierKind; } interface ExportDeclaration extends Omit<Declaration, "type"> { type: "ExportDeclaration"; default: boolean; declaration: K.DeclarationKind | K.ExpressionKind | null; specifiers?: (K.ExportSpecifierKind | K.ExportBatchSpecifierKind)[]; source?: K.LiteralKind | null; } interface Block extends Comment { type: "Block"; } interface Line extends Comment { type: "Line"; } interface Noop extends Omit<Statement, "type"> { type: "Noop"; } interface DoExpression extends Omit<Expression, "type"> { type: "DoExpression"; body: K.StatementKind[]; } interface BindExpression extends Omit<Expression, "type"> { type: "BindExpression"; object: K.ExpressionKind | null; callee: K.ExpressionKind; } interface ParenthesizedExpression extends Omit<Expression, "type"> { type: "ParenthesizedExpression"; expression: K.ExpressionKind; } interface ExportNamespaceSpecifier extends Omit<Specifier, "type"> { type: "ExportNamespaceSpecifier"; exported: K.IdentifierKind; } interface ExportDefaultSpecifier extends Omit<Specifier, "type"> { type: "ExportDefaultSpecifier"; exported: K.IdentifierKind; } interface CommentBlock extends Comment { type: "CommentBlock"; } interface CommentLine extends Comment { type: "CommentLine"; } interface Directive extends Omit<Node, "type"> { type: "Directive"; value: K.DirectiveLiteralKind; } interface DirectiveLiteral extends Omit<Node, "type">, Omit<Expression, "type"> { type: "DirectiveLiteral"; value?: string; } interface InterpreterDirective extends Omit<Node, "type"> { type: "InterpreterDirective"; value: string; } interface StringLiteral extends Omit<Literal, "type" | "value"> { type: "StringLiteral"; value: string; } interface NumericLiteral extends Omit<Literal, "type" | "value"> { type: "NumericLiteral"; value: number; raw?: string | null; extra?: { rawValue: number; raw: string; }; } interface BigIntLiteral extends Omit<Literal, "type" | "value"> { type: "BigIntLiteral"; value: string | number; extra?: { rawValue: string; raw: string; }; } interface NullLiteral extends Omit<Literal, "type" | "value"> { type: "NullLiteral"; value?: null; } interface BooleanLiteral extends Omit<Literal, "type" | "value"> { type: "BooleanLiteral"; value: boolean; } interface RegExpLiteral extends Omit<Literal, "type" | "value"> { type: "RegExpLiteral"; pattern: string; flags: string; value?: RegExp; } interface ObjectMethod extends Omit<Node, "type">, Omit<Function, "type" | "params" | "body" | "generator" | "async"> { type: "ObjectMethod"; kind: "method" | "get" | "set"; key: K.LiteralKind | K.IdentifierKind | K.ExpressionKind; params: K.PatternKind[]; body: K.BlockStatementKind; computed?: boolean; generator?: boolean; async?: boolean; accessibility?: K.LiteralKind | null; decorators?: K.DecoratorKind[] | null; } interface ClassMethod extends Omit<Declaration, "type">, Omit<Function, "type" | "body"> { type: "ClassMethod"; key: K.LiteralKind | K.IdentifierKind | K.ExpressionKind; kind?: "get" | "set" | "method" | "constructor"; body: K.BlockStatementKind; computed?: boolean; static?: boolean | null; abstract?: boolean | null; access?: "public" | "private" | "protected" | null; accessibility?: "public" | "private" | "protected" | null; decorators?: K.DecoratorKind[] | null; optional?: boolean | null; } interface ClassPrivateMethod extends Omit<Declaration, "type">, Omit<Function, "type" | "body"> { type: "ClassPrivateMethod"; key: K.PrivateNameKind; kind?: "get" | "set" | "method" | "constructor"; body: K.BlockStatementKind; computed?: boolean; static?: boolean | null; abstract?: boolean | null; access?: "public" | "private" | "protected" | null; accessibility?: "public" | "private" | "protected" | null; decorators?: K.DecoratorKind[] | null; optional?: boolean | null; } interface RestProperty extends Omit<Node, "type"> { type: "RestProperty"; argument: K.ExpressionKind; } interface ForAwaitStatement extends Omit<Statement, "type"> { type: "ForAwaitStatement"; left: K.VariableDeclarationKind | K.ExpressionKind; right: K.ExpressionKind; body: K.StatementKind; } interface Import extends Omit<Expression, "type"> { type: "Import"; } interface TSQualifiedName extends Omit<Node, "type"> { type: "TSQualifiedName"; left: K.IdentifierKind | K.TSQualifiedNameKind; right: K.IdentifierKind | K.TSQualifiedNameKind; } interface TSTypeReference extends Omit<TSType, "type">, TSHasOptionalTypeParameterInstantiation { type: "TSTypeReference"; typeName: K.IdentifierKind | K.TSQualifiedNameKind; } interface TSHasOptionalTypeParameters { typeParameters?: K.TSTypeParameterDeclarationKind | null | undefined; } interface TSHasOptionalTypeAnnotation { typeAnnotation?: K.TSTypeAnnotationKind | null; } interface TSAsExpression extends Omit<Expression, "type">, Omit<Pattern, "type"> { type: "TSAsExpression"; expression: K.ExpressionKind; typeAnnotation: K.TSTypeKind; extra?: { parenthesized: boolean; } | null; } interface TSNonNullExpression extends Omit<Expression, "type">, Omit<Pattern, "type"> { type: "TSNonNullExpression"; expression: K.ExpressionKind; } interface TSAnyKeyword extends Omit<TSType, "type"> { type: "TSAnyKeyword"; } interface TSBigIntKeyword extends Omit<TSType, "type"> { type: "TSBigIntKeyword"; } interface TSBooleanKeyword extends Omit<TSType, "type"> { type: "TSBooleanKeyword"; } interface TSNeverKeyword extends Omit<TSType, "type"> { type: "TSNeverKeyword"; } interface TSNullKeyword extends Omit<TSType, "type"> { type: "TSNullKeyword"; } interface TSNumberKeyword extends Omit<TSType, "type"> { type: "TSNumberKeyword"; } interface TSObjectKeyword extends Omit<TSType, "type"> { type: "TSObjectKeyword"; } interface TSStringKeyword extends Omit<TSType, "type"> { type: "TSStringKeyword"; } interface TSSymbolKeyword extends Omit<TSType, "type"> { type: "TSSymbolKeyword"; } interface TSUndefinedKeyword extends Omit<TSType, "type"> { type: "TSUndefinedKeyword"; } interface TSUnknownKeyword extends Omit<TSType, "type"> { type: "TSUnknownKeyword"; } interface TSVoidKeyword extends Omit<TSType, "type"> { type: "TSVoidKeyword"; } interface TSThisType extends Omit<TSType, "type"> { type: "TSThisType"; } interface TSArrayType extends Omit<TSType, "type"> { type: "TSArrayType"; elementType: K.TSTypeKind; } interface TSLiteralType extends Omit<TSType, "type"> { type: "TSLiteralType"; literal: K.NumericLiteralKind | K.StringLiteralKind | K.BooleanLiteralKind | K.TemplateLiteralKind | K.UnaryExpressionKind; } interface TSUnionType extends Omit<TSType, "type"> { type: "TSUnionType"; types: K.TSTypeKind[]; } interface TSIntersectionType extends Omit<TSType, "type"> { type: "TSIntersectionType"; types: K.TSTypeKind[]; } interface TSConditionalType extends Omit<TSType, "type"> { type: "TSConditionalType"; checkType: K.TSTypeKind; extendsType: K.TSTypeKind; trueType: K.TSTypeKind; falseType: K.TSTypeKind; } interface TSInferType extends Omit<TSType, "type"> { type: "TSInferType"; typeParameter: K.TSTypeParameterKind; } interface TSTypeParameter extends Omit<Identifier, "type" | "name"> { type: "TSTypeParameter"; name: string; constraint?: K.TSTypeKind | undefined; default?: K.TSTypeKind | undefined; } interface TSParenthesizedType extends Omit<TSType, "type"> { type: "TSParenthesizedType"; typeAnnotation: K.TSTypeKind; } interface TSFunctionType extends Omit<TSType, "type">, TSHasOptionalTypeParameters, TSHasOptionalTypeAnnotation { type: "TSFunctionType"; parameters: (K.IdentifierKind | K.RestElementKind | K.ArrayPatternKind | K.ObjectPatternKind)[]; } interface TSConstructorType extends Omit<TSType, "type">, TSHasOptionalTypeParameters, TSHasOptionalTypeAnnotation { type: "TSConstructorType"; parameters: (K.IdentifierKind | K.RestElementKind | K.ArrayPatternKind | K.ObjectPatternKind)[]; } interface TSDeclareFunction extends Omit<Declaration, "type">, TSHasOptionalTypeParameters { type: "TSDeclareFunction"; declare?: boolean; async?: boolean; generator?: boolean; id?: K.IdentifierKind | null; params: K.PatternKind[]; returnType?: K.TSTypeAnnotationKind | K.NoopKind | null; } interface TSDeclareMethod extends Omit<Declaration, "type">, TSHasOptionalTypeParameters { type: "TSDeclareMethod"; async?: boolean; generator?: boolean; params: K.PatternKind[]; abstract?: boolean; accessibility?: "public" | "private" | "protected" | undefined; static?: boolean; computed?: boolean; optional?: boolean; key: K.IdentifierKind | K.StringLiteralKind | K.NumericLiteralKind | K.ExpressionKind; kind?: "get" | "set" | "method" | "constructor"; access?: "public" | "private" | "protected" | undefined; decorators?: K.DecoratorKind[] | null; returnType?: K.TSTypeAnnotationKind | K.NoopKind | null; } interface TSMappedType extends Omit<TSType, "type"> { type: "TSMappedType"; readonly?: boolean | "+" | "-"; typeParameter: K.TSTypeParameterKind; optional?: boolean | "+" | "-"; typeAnnotation?: K.TSTypeKind | null; } interface TSTupleType extends Omit<TSType, "type"> { type: "TSTupleType"; elementTypes: (K.TSTypeKind | K.TSNamedTupleMemberKind)[]; } interface TSNamedTupleMember extends Omit<TSType, "type"> { type: "TSNamedTupleMember"; label: K.IdentifierKind; optional?: boolean; elementType: K.TSTypeKind; } interface TSRestType extends Omit<TSType, "type"> { type: "TSRestType"; typeAnnotation: K.TSTypeKind; } interface TSOptionalType extends Omit<TSType, "type"> { type: "TSOptionalType"; typeAnnotation: K.TSTypeKind; } interface TSIndexedAccessType extends Omit<TSType, "type"> { type: "TSIndexedAccessType"; objectType: K.TSTypeKind; indexType: K.TSTypeKind; } interface TSTypeOperator extends Omit<TSType, "type"> { type: "TSTypeOperator"; operator: string; typeAnnotation: K.TSTypeKind; } interface TSIndexSignature extends Omit<Declaration, "type">, TSHasOptionalTypeAnnotation { type: "TSIndexSignature"; parameters: K.IdentifierKind[]; readonly?: boolean; } interface TSPropertySignature extends Omit<Declaration, "type">, TSHasOptionalTypeAnnotation { type: "TSPropertySignature"; key: K.ExpressionKind; computed?: boolean; readonly?: boolean; optional?: boolean; initializer?: K.ExpressionKind | null; } interface TSMethodSignature extends Omit<Declaration, "type">, TSHasOptionalTypeParameters, TSHasOptionalTypeAnnotation { type: "TSMethodSignature"; key: K.ExpressionKind; computed?: boolean; optional?: boolean; parameters: (K.IdentifierKind | K.RestElementKind | K.ArrayPatternKind | K.ObjectPatternKind)[]; } interface TSTypePredicate extends Omit<TSTypeAnnotation, "type" | "typeAnnotation">, Omit<TSType, "type"> { type: "TSTypePredicate"; parameterName: K.IdentifierKind | K.TSThisTypeKind; typeAnnotation?: K.TSTypeAnnotationKind | null; asserts?: boolean; } interface TSCallSignatureDeclaration extends Omit<Declaration, "type">, TSHasOptionalTypeParameters, TSHasOptionalTypeAnnotation { type: "TSCallSignatureDeclaration"; parameters: (K.IdentifierKind | K.RestElementKind | K.ArrayPatternKind | K.ObjectPatternKind)[]; } interface TSConstructSignatureDeclaration extends Omit<Declaration, "type">, TSHasOptionalTypeParameters, TSHasOptionalTypeAnnotation { type: "TSConstructSignatureDeclaration"; parameters: (K.IdentifierKind | K.RestElementKind | K.ArrayPatternKind | K.ObjectPatternKind)[]; } interface TSEnumMember extends Omit<Node, "type"> { type: "TSEnumMember"; id: K.IdentifierKind | K.StringLiteralKind; initializer?: K.ExpressionKind | null; } interface TSTypeQuery extends Omit<TSType, "type"> { type: "TSTypeQuery"; exprName: K.IdentifierKind | K.TSQualifiedNameKind | K.TSImportTypeKind; } interface TSImportType extends Omit<TSType, "type">, TSHasOptionalTypeParameterInstantiation { type: "TSImportType"; argument: K.StringLiteralKind; qualifier?: K.IdentifierKind | K.TSQualifiedNameKind | undefined; } interface TSTypeLiteral extends Omit<TSType, "type"> { type: "TSTypeLiteral"; members: (K.TSCallSignatureDeclarationKind | K.TSConstructSignatureDeclarationKind | K.TSIndexSignatureKind | K.TSMethodSignatureKind | K.TSPropertySignatureKind)[]; } interface TSTypeAssertion extends Omit<Expression, "type">, Omit<Pattern, "type"> { type: "TSTypeAssertion"; typeAnnotation: K.TSTypeKind; expression: K.ExpressionKind; ext