| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694 |
- // This definition file follows a somewhat unusual format. ESTree allows
- // runtime type checks based on the `type` parameter. In order to explain this
- // to typescript we want to use discriminated union types:
- // https://github.com/Microsoft/TypeScript/pull/9163
- //
- // For ESTree this is a bit tricky because the high level interfaces like
- // Node or Function are pulling double duty. We want to pass common fields down
- // to the interfaces that extend them (like Identifier or
- // ArrowFunctionExpression), but you can't extend a type union or enforce
- // common fields on them. So we've split the high level interfaces into two
- // types, a base type which passes down inherited fields, and a type union of
- // all types which extend the base type. Only the type union is exported, and
- // the union is how other types refer to the collection of inheriting types.
- //
- // This makes the definitions file here somewhat more difficult to maintain,
- // but it has the notable advantage of making ESTree much easier to use as
- // an end user.
- export interface BaseNodeWithoutComments {
- // Every leaf interface that extends BaseNode must specify a type property.
- // The type property should be a string literal. For example, Identifier
- // has: `type: "Identifier"`
- type: string;
- loc?: SourceLocation | null | undefined;
- range?: [number, number] | undefined;
- }
- export interface BaseNode extends BaseNodeWithoutComments {
- leadingComments?: Comment[] | undefined;
- trailingComments?: Comment[] | undefined;
- }
- export interface NodeMap {
- AssignmentProperty: AssignmentProperty;
- CatchClause: CatchClause;
- Class: Class;
- ClassBody: ClassBody;
- Expression: Expression;
- Function: Function;
- Identifier: Identifier;
- Literal: Literal;
- MethodDefinition: MethodDefinition;
- ModuleDeclaration: ModuleDeclaration;
- ModuleSpecifier: ModuleSpecifier;
- Pattern: Pattern;
- PrivateIdentifier: PrivateIdentifier;
- Program: Program;
- Property: Property;
- PropertyDefinition: PropertyDefinition;
- SpreadElement: SpreadElement;
- Statement: Statement;
- Super: Super;
- SwitchCase: SwitchCase;
- TemplateElement: TemplateElement;
- VariableDeclarator: VariableDeclarator;
- }
- export type Node = NodeMap[keyof NodeMap];
- export interface Comment extends BaseNodeWithoutComments {
- type: "Line" | "Block";
- value: string;
- }
- export interface SourceLocation {
- source?: string | null | undefined;
- start: Position;
- end: Position;
- }
- export interface Position {
- /** >= 1 */
- line: number;
- /** >= 0 */
- column: number;
- }
- export interface Program extends BaseNode {
- type: "Program";
- sourceType: "script" | "module";
- body: Array<Directive | Statement | ModuleDeclaration>;
- comments?: Comment[] | undefined;
- }
- export interface Directive extends BaseNode {
- type: "ExpressionStatement";
- expression: Literal;
- directive: string;
- }
- export interface BaseFunction extends BaseNode {
- params: Pattern[];
- generator?: boolean | undefined;
- async?: boolean | undefined;
- // The body is either BlockStatement or Expression because arrow functions
- // can have a body that's either. FunctionDeclarations and
- // FunctionExpressions have only BlockStatement bodies.
- body: BlockStatement | Expression;
- }
- export type Function = FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;
- export type Statement =
- | ExpressionStatement
- | BlockStatement
- | StaticBlock
- | EmptyStatement
- | DebuggerStatement
- | WithStatement
- | ReturnStatement
- | LabeledStatement
- | BreakStatement
- | ContinueStatement
- | IfStatement
- | SwitchStatement
- | ThrowStatement
- | TryStatement
- | WhileStatement
- | DoWhileStatement
- | ForStatement
- | ForInStatement
- | ForOfStatement
- | Declaration;
- export interface BaseStatement extends BaseNode {}
- export interface EmptyStatement extends BaseStatement {
- type: "EmptyStatement";
- }
- export interface BlockStatement extends BaseStatement {
- type: "BlockStatement";
- body: Statement[];
- innerComments?: Comment[] | undefined;
- }
- export interface StaticBlock extends Omit<BlockStatement, "type"> {
- type: "StaticBlock";
- }
- export interface ExpressionStatement extends BaseStatement {
- type: "ExpressionStatement";
- expression: Expression;
- }
- export interface IfStatement extends BaseStatement {
- type: "IfStatement";
- test: Expression;
- consequent: Statement;
- alternate?: Statement | null | undefined;
- }
- export interface LabeledStatement extends BaseStatement {
- type: "LabeledStatement";
- label: Identifier;
- body: Statement;
- }
- export interface BreakStatement extends BaseStatement {
- type: "BreakStatement";
- label?: Identifier | null | undefined;
- }
- export interface ContinueStatement extends BaseStatement {
- type: "ContinueStatement";
- label?: Identifier | null | undefined;
- }
- export interface WithStatement extends BaseStatement {
- type: "WithStatement";
- object: Expression;
- body: Statement;
- }
- export interface SwitchStatement extends BaseStatement {
- type: "SwitchStatement";
- discriminant: Expression;
- cases: SwitchCase[];
- }
- export interface ReturnStatement extends BaseStatement {
- type: "ReturnStatement";
- argument?: Expression | null | undefined;
- }
- export interface ThrowStatement extends BaseStatement {
- type: "ThrowStatement";
- argument: Expression;
- }
- export interface TryStatement extends BaseStatement {
- type: "TryStatement";
- block: BlockStatement;
- handler?: CatchClause | null | undefined;
- finalizer?: BlockStatement | null | undefined;
- }
- export interface WhileStatement extends BaseStatement {
- type: "WhileStatement";
- test: Expression;
- body: Statement;
- }
- export interface DoWhileStatement extends BaseStatement {
- type: "DoWhileStatement";
- body: Statement;
- test: Expression;
- }
- export interface ForStatement extends BaseStatement {
- type: "ForStatement";
- init?: VariableDeclaration | Expression | null | undefined;
- test?: Expression | null | undefined;
- update?: Expression | null | undefined;
- body: Statement;
- }
- export interface BaseForXStatement extends BaseStatement {
- left: VariableDeclaration | Pattern;
- right: Expression;
- body: Statement;
- }
- export interface ForInStatement extends BaseForXStatement {
- type: "ForInStatement";
- }
- export interface DebuggerStatement extends BaseStatement {
- type: "DebuggerStatement";
- }
- export type Declaration = FunctionDeclaration | VariableDeclaration | ClassDeclaration;
- export interface BaseDeclaration extends BaseStatement {}
- export interface MaybeNamedFunctionDeclaration extends BaseFunction, BaseDeclaration {
- type: "FunctionDeclaration";
- /** It is null when a function declaration is a part of the `export default function` statement */
- id: Identifier | null;
- body: BlockStatement;
- }
- export interface FunctionDeclaration extends MaybeNamedFunctionDeclaration {
- id: Identifier;
- }
- export interface VariableDeclaration extends BaseDeclaration {
- type: "VariableDeclaration";
- declarations: VariableDeclarator[];
- kind: "var" | "let" | "const" | "using" | "await using";
- }
- export interface VariableDeclarator extends BaseNode {
- type: "VariableDeclarator";
- id: Pattern;
- init?: Expression | null | undefined;
- }
- export interface ExpressionMap {
- ArrayExpression: ArrayExpression;
- ArrowFunctionExpression: ArrowFunctionExpression;
- AssignmentExpression: AssignmentExpression;
- AwaitExpression: AwaitExpression;
- BinaryExpression: BinaryExpression;
- CallExpression: CallExpression;
- ChainExpression: ChainExpression;
- ClassExpression: ClassExpression;
- ConditionalExpression: ConditionalExpression;
- FunctionExpression: FunctionExpression;
- Identifier: Identifier;
- ImportExpression: ImportExpression;
- Literal: Literal;
- LogicalExpression: LogicalExpression;
- MemberExpression: MemberExpression;
- MetaProperty: MetaProperty;
- NewExpression: NewExpression;
- ObjectExpression: ObjectExpression;
- SequenceExpression: SequenceExpression;
- TaggedTemplateExpression: TaggedTemplateExpression;
- TemplateLiteral: TemplateLiteral;
- ThisExpression: ThisExpression;
- UnaryExpression: UnaryExpression;
- UpdateExpression: UpdateExpression;
- YieldExpression: YieldExpression;
- }
- export type Expression = ExpressionMap[keyof ExpressionMap];
- export interface BaseExpression extends BaseNode {}
- export type ChainElement = SimpleCallExpression | MemberExpression;
- export interface ChainExpression extends BaseExpression {
- type: "ChainExpression";
- expression: ChainElement;
- }
- export interface ThisExpression extends BaseExpression {
- type: "ThisExpression";
- }
- export interface ArrayExpression extends BaseExpression {
- type: "ArrayExpression";
- elements: Array<Expression | SpreadElement | null>;
- }
- export interface ObjectExpression extends BaseExpression {
- type: "ObjectExpression";
- properties: Array<Property | SpreadElement>;
- }
- export interface PrivateIdentifier extends BaseNode {
- type: "PrivateIdentifier";
- name: string;
- }
- export interface Property extends BaseNode {
- type: "Property";
- key: Expression | PrivateIdentifier;
- value: Expression | Pattern; // Could be an AssignmentProperty
- kind: "init" | "get" | "set";
- method: boolean;
- shorthand: boolean;
- computed: boolean;
- }
- export interface PropertyDefinition extends BaseNode {
- type: "PropertyDefinition";
- key: Expression | PrivateIdentifier;
- value?: Expression | null | undefined;
- computed: boolean;
- static: boolean;
- }
- export interface FunctionExpression extends BaseFunction, BaseExpression {
- id?: Identifier | null | undefined;
- type: "FunctionExpression";
- body: BlockStatement;
- }
- export interface SequenceExpression extends BaseExpression {
- type: "SequenceExpression";
- expressions: Expression[];
- }
- export interface UnaryExpression extends BaseExpression {
- type: "UnaryExpression";
- operator: UnaryOperator;
- prefix: true;
- argument: Expression;
- }
- export interface BinaryExpression extends BaseExpression {
- type: "BinaryExpression";
- operator: BinaryOperator;
- left: Expression | PrivateIdentifier;
- right: Expression;
- }
- export interface AssignmentExpression extends BaseExpression {
- type: "AssignmentExpression";
- operator: AssignmentOperator;
- left: Pattern | MemberExpression;
- right: Expression;
- }
- export interface UpdateExpression extends BaseExpression {
- type: "UpdateExpression";
- operator: UpdateOperator;
- argument: Expression;
- prefix: boolean;
- }
- export interface LogicalExpression extends BaseExpression {
- type: "LogicalExpression";
- operator: LogicalOperator;
- left: Expression;
- right: Expression;
- }
- export interface ConditionalExpression extends BaseExpression {
- type: "ConditionalExpression";
- test: Expression;
- alternate: Expression;
- consequent: Expression;
- }
- export interface BaseCallExpression extends BaseExpression {
- callee: Expression | Super;
- arguments: Array<Expression | SpreadElement>;
- }
- export type CallExpression = SimpleCallExpression | NewExpression;
- export interface SimpleCallExpression extends BaseCallExpression {
- type: "CallExpression";
- optional: boolean;
- }
- export interface NewExpression extends BaseCallExpression {
- type: "NewExpression";
- }
- export interface MemberExpression extends BaseExpression, BasePattern {
- type: "MemberExpression";
- object: Expression | Super;
- property: Expression | PrivateIdentifier;
- computed: boolean;
- optional: boolean;
- }
- export type Pattern = Identifier | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern | MemberExpression;
- export interface BasePattern extends BaseNode {}
- export interface SwitchCase extends BaseNode {
- type: "SwitchCase";
- test?: Expression | null | undefined;
- consequent: Statement[];
- }
- export interface CatchClause extends BaseNode {
- type: "CatchClause";
- param: Pattern | null;
- body: BlockStatement;
- }
- export interface Identifier extends BaseNode, BaseExpression, BasePattern {
- type: "Identifier";
- name: string;
- }
- export type Literal = SimpleLiteral | RegExpLiteral | BigIntLiteral;
- export interface SimpleLiteral extends BaseNode, BaseExpression {
- type: "Literal";
- value: string | boolean | number | null;
- raw?: string | undefined;
- }
- export interface RegExpLiteral extends BaseNode, BaseExpression {
- type: "Literal";
- value?: RegExp | null | undefined;
- regex: {
- pattern: string;
- flags: string;
- };
- raw?: string | undefined;
- }
- export interface BigIntLiteral extends BaseNode, BaseExpression {
- type: "Literal";
- value?: bigint | null | undefined;
- bigint: string;
- raw?: string | undefined;
- }
- export type UnaryOperator = "-" | "+" | "!" | "~" | "typeof" | "void" | "delete";
- export type BinaryOperator =
- | "=="
- | "!="
- | "==="
- | "!=="
- | "<"
- | "<="
- | ">"
- | ">="
- | "<<"
- | ">>"
- | ">>>"
- | "+"
- | "-"
- | "*"
- | "/"
- | "%"
- | "**"
- | "|"
- | "^"
- | "&"
- | "in"
- | "instanceof";
- export type LogicalOperator = "||" | "&&" | "??";
- export type AssignmentOperator =
- | "="
- | "+="
- | "-="
- | "*="
- | "/="
- | "%="
- | "**="
- | "<<="
- | ">>="
- | ">>>="
- | "|="
- | "^="
- | "&="
- | "||="
- | "&&="
- | "??=";
- export type UpdateOperator = "++" | "--";
- export interface ForOfStatement extends BaseForXStatement {
- type: "ForOfStatement";
- await: boolean;
- }
- export interface Super extends BaseNode {
- type: "Super";
- }
- export interface SpreadElement extends BaseNode {
- type: "SpreadElement";
- argument: Expression;
- }
- export interface ArrowFunctionExpression extends BaseExpression, BaseFunction {
- type: "ArrowFunctionExpression";
- expression: boolean;
- body: BlockStatement | Expression;
- }
- export interface YieldExpression extends BaseExpression {
- type: "YieldExpression";
- argument?: Expression | null | undefined;
- delegate: boolean;
- }
- export interface TemplateLiteral extends BaseExpression {
- type: "TemplateLiteral";
- quasis: TemplateElement[];
- expressions: Expression[];
- }
- export interface TaggedTemplateExpression extends BaseExpression {
- type: "TaggedTemplateExpression";
- tag: Expression;
- quasi: TemplateLiteral;
- }
- export interface TemplateElement extends BaseNode {
- type: "TemplateElement";
- tail: boolean;
- value: {
- /** It is null when the template literal is tagged and the text has an invalid escape (e.g. - tag`\unicode and \u{55}`) */
- cooked?: string | null | undefined;
- raw: string;
- };
- }
- export interface AssignmentProperty extends Property {
- value: Pattern;
- kind: "init";
- method: boolean; // false
- }
- export interface ObjectPattern extends BasePattern {
- type: "ObjectPattern";
- properties: Array<AssignmentProperty | RestElement>;
- }
- export interface ArrayPattern extends BasePattern {
- type: "ArrayPattern";
- elements: Array<Pattern | null>;
- }
- export interface RestElement extends BasePattern {
- type: "RestElement";
- argument: Pattern;
- }
- export interface AssignmentPattern extends BasePattern {
- type: "AssignmentPattern";
- left: Pattern;
- right: Expression;
- }
- export type Class = ClassDeclaration | ClassExpression;
- export interface BaseClass extends BaseNode {
- superClass?: Expression | null | undefined;
- body: ClassBody;
- }
- export interface ClassBody extends BaseNode {
- type: "ClassBody";
- body: Array<MethodDefinition | PropertyDefinition | StaticBlock>;
- }
- export interface MethodDefinition extends BaseNode {
- type: "MethodDefinition";
- key: Expression | PrivateIdentifier;
- value: FunctionExpression;
- kind: "constructor" | "method" | "get" | "set";
- computed: boolean;
- static: boolean;
- }
- export interface MaybeNamedClassDeclaration extends BaseClass, BaseDeclaration {
- type: "ClassDeclaration";
- /** It is null when a class declaration is a part of the `export default class` statement */
- id: Identifier | null;
- }
- export interface ClassDeclaration extends MaybeNamedClassDeclaration {
- id: Identifier;
- }
- export interface ClassExpression extends BaseClass, BaseExpression {
- type: "ClassExpression";
- id?: Identifier | null | undefined;
- }
- export interface MetaProperty extends BaseExpression {
- type: "MetaProperty";
- meta: Identifier;
- property: Identifier;
- }
- export type ModuleDeclaration =
- | ImportDeclaration
- | ExportNamedDeclaration
- | ExportDefaultDeclaration
- | ExportAllDeclaration;
- export interface BaseModuleDeclaration extends BaseNode {}
- export type ModuleSpecifier = ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier | ExportSpecifier;
- export interface BaseModuleSpecifier extends BaseNode {
- local: Identifier;
- }
- export interface ImportDeclaration extends BaseModuleDeclaration {
- type: "ImportDeclaration";
- specifiers: Array<ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier>;
- attributes: ImportAttribute[];
- source: Literal;
- }
- export interface ImportSpecifier extends BaseModuleSpecifier {
- type: "ImportSpecifier";
- imported: Identifier | Literal;
- }
- export interface ImportAttribute extends BaseNode {
- type: "ImportAttribute";
- key: Identifier | Literal;
- value: Literal;
- }
- export interface ImportExpression extends BaseExpression {
- type: "ImportExpression";
- source: Expression;
- options?: Expression | null | undefined;
- }
- export interface ImportDefaultSpecifier extends BaseModuleSpecifier {
- type: "ImportDefaultSpecifier";
- }
- export interface ImportNamespaceSpecifier extends BaseModuleSpecifier {
- type: "ImportNamespaceSpecifier";
- }
- export interface ExportNamedDeclaration extends BaseModuleDeclaration {
- type: "ExportNamedDeclaration";
- declaration?: Declaration | null | undefined;
- specifiers: ExportSpecifier[];
- attributes: ImportAttribute[];
- source?: Literal | null | undefined;
- }
- export interface ExportSpecifier extends Omit<BaseModuleSpecifier, "local"> {
- type: "ExportSpecifier";
- local: Identifier | Literal;
- exported: Identifier | Literal;
- }
- export interface ExportDefaultDeclaration extends BaseModuleDeclaration {
- type: "ExportDefaultDeclaration";
- declaration: MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration | Expression;
- }
- export interface ExportAllDeclaration extends BaseModuleDeclaration {
- type: "ExportAllDeclaration";
- exported: Identifier | Literal | null;
- attributes: ImportAttribute[];
- source: Literal;
- }
- export interface AwaitExpression extends BaseExpression {
- type: "AwaitExpression";
- argument: Expression;
- }
|