UNPKG

meriyah

Version:

A 100% compliant, self-hosted javascript parser with high focus on both performance and stability

533 lines (532 loc) • 19.6 kB
export interface _Node { start?: number; end?: number; range?: [number, number]; loc?: SourceLocation | null; } export interface SourceLocation { source?: string | null; start: Position; end: Position; } export interface Position { line: number; column: number; } export type Labels = any; export type IdentifierOrExpression = Identifier | Expression | ArrowFunctionExpression; export type ArgumentExpression = ArrayExpression | AssignmentExpression | ConditionalExpression | Literal | SpreadElement | BinaryExpression | LogicalExpression | SequenceExpression; export type CommentType = 'SingleLine' | 'MultiLine' | 'HTMLOpen' | 'HTMLClose' | 'HashbangComment'; export interface Comment extends _Node { type: CommentType; value: string; } export type Node = AccessorProperty | ArrayExpression | ArrayPattern | ArrowFunctionExpression | AssignmentExpression | AssignmentPattern | AwaitExpression | BinaryExpression | BlockStatement | BreakStatement | CallExpression | ChainExpression | ImportExpression | CatchClause | ClassBody | ClassDeclaration | ClassExpression | ConditionalExpression | ContinueStatement | DebuggerStatement | Decorator | DoWhileStatement | EmptyStatement | ExportAllDeclaration | ExportDefaultDeclaration | ExportNamedDeclaration | ExportSpecifier | ExpressionStatement | PropertyDefinition | ForInStatement | ForOfStatement | ForStatement | FunctionDeclaration | FunctionExpression | Identifier | IfStatement | ImportDeclaration | ImportDefaultSpecifier | ImportAttribute | ImportNamespaceSpecifier | ImportSpecifier | JSXNamespacedName | JSXAttribute | JSXClosingElement | JSXClosingFragment | JSXElement | JSXEmptyExpression | JSXExpressionContainer | JSXFragment | JSXIdentifier | JSXOpeningElement | JSXOpeningFragment | JSXSpreadAttribute | JSXSpreadChild | JSXMemberExpression | JSXText | LabeledStatement | Literal | LogicalExpression | MemberExpression | MetaProperty | MethodDefinition | NewExpression | ObjectExpression | ObjectPattern | ParenthesizedExpression | PrivateIdentifier | Program | Property | RestElement | ReturnStatement | SequenceExpression | SpreadElement | StaticBlock | Super | SwitchCase | SwitchStatement | TaggedTemplateExpression | TemplateElement | TemplateLiteral | ThisExpression | ThrowStatement | TryStatement | UpdateExpression | UnaryExpression | VariableDeclaration | VariableDeclarator | WhileStatement | WithStatement | YieldExpression; export type BindingPattern = ArrayPattern | ObjectPattern | Identifier; export type ClassElement = FunctionExpression | MethodDefinition; export type DeclarationStatement = ClassDeclaration | ClassExpression | ExportDefaultDeclaration | ExportAllDeclaration | ExportNamedDeclaration | FunctionDeclaration; export type EntityName = Identifier; export type ExportDeclaration = ClassDeclaration | ClassExpression | FunctionDeclaration | VariableDeclaration; export type Expression = ArrowFunctionExpression | AssignmentExpression | BinaryExpression | ConditionalExpression | MetaProperty | ChainExpression | JSXClosingElement | JSXClosingFragment | JSXExpressionContainer | JSXOpeningElement | JSXOpeningFragment | JSXSpreadChild | LogicalExpression | NewExpression | RestElement | SequenceExpression | SpreadElement | AwaitExpression | LeftHandSideExpression | UnaryExpression | UpdateExpression | YieldExpression; export type ForInitializer = Expression | VariableDeclaration; export type ImportClause = ImportDefaultSpecifier | ImportNamespaceSpecifier | ImportSpecifier; export type IterationStatement = DoWhileStatement | ForInStatement | ForOfStatement | ForStatement | WhileStatement; export type JSXChild = JSXElement | JSXExpression | JSXFragment | JSXText; export type JSXExpression = JSXEmptyExpression | JSXSpreadChild | JSXExpressionContainer; export type JSXTagNameExpression = JSXIdentifier | JSXMemberExpression | JSXNamespacedName; export type LeftHandSideExpression = CallExpression | ChainExpression | ImportExpression | ClassExpression | ClassDeclaration | FunctionExpression | LiteralExpression | MemberExpression | PrimaryExpression | TaggedTemplateExpression; export type LiteralExpression = Literal | TemplateLiteral; export type ObjectLiteralElementLike = MethodDefinition | Property | RestElement | SpreadElement; export type Parameter = AssignmentPattern | RestElement | ArrayPattern | ObjectPattern | Identifier; export type PrimaryExpression = ArrayExpression | ArrayPattern | ClassExpression | FunctionExpression | Identifier | JSXElement | JSXFragment | JSXOpeningElement | Literal | LiteralExpression | MetaProperty | ObjectExpression | ObjectPattern | Super | TemplateLiteral | ThisExpression; export type PrimaryExpressionExtended = ArrayExpression | ArrowFunctionExpression | ArrayPattern | AwaitExpression | Expression | ClassExpression | FunctionExpression | Identifier | JSXElement | JSXFragment | JSXOpeningElement | Literal | LiteralExpression | MetaProperty | ObjectExpression | ObjectPattern | PrivateIdentifier | NewExpression | Super | TemplateLiteral | ThisExpression | UnaryExpression | UpdateExpression; export type PropertyName = Identifier | Literal; export type Statement = BlockStatement | BreakStatement | ContinueStatement | DebuggerStatement | DeclarationStatement | EmptyStatement | ExpressionStatement | IfStatement | IterationStatement | ImportDeclaration | LabeledStatement | ReturnStatement | SwitchStatement | ThrowStatement | TryStatement | VariableDeclaration | WithStatement; interface ClassDeclarationBase extends _Node { id: Identifier | null; body: ClassBody; superClass: Expression | null; decorators?: Decorator[]; } interface FunctionDeclarationBase extends _Node { id: Identifier | null; generator: boolean; async: boolean; params: Parameter[]; body?: BlockStatement | null; } export interface BlockStatementBase extends _Node { body: Statement[]; } export interface ArrayExpression extends _Node { type: 'ArrayExpression'; elements: (Expression | SpreadElement | null)[]; } export interface ArrayPattern extends _Node { type: 'ArrayPattern'; elements: Expression[]; } export interface ArrowFunctionExpression extends _Node { type: 'ArrowFunctionExpression'; params: Parameter[]; body: Expression | BlockStatement; async: boolean; expression: boolean; generator: false; } export interface AssignmentExpression extends _Node { type: 'AssignmentExpression'; operator: string; left: Expression; right: Expression; } export interface AssignmentPattern extends _Node { type: 'AssignmentPattern'; left: BindingPattern | Identifier; right?: Expression; } export interface AwaitExpression extends _Node { type: 'AwaitExpression'; argument: Expression; } export interface BinaryExpression extends _Node { type: 'BinaryExpression'; operator: string; left: Expression | PrivateIdentifier; right: Expression; } export interface BlockStatement extends BlockStatementBase { type: 'BlockStatement'; } export interface BreakStatement extends _Node { type: 'BreakStatement'; label: Identifier | null; } export interface ImportExpression extends _Node { type: 'ImportExpression'; source: Expression; options?: Expression | null; } export interface ChainExpression extends _Node { type: 'ChainExpression'; expression: CallExpression | MemberExpression; } export interface CallExpression extends _Node { type: 'CallExpression'; callee: any; arguments: (Expression | SpreadElement)[]; optional: boolean; } export interface CatchClause extends _Node { type: 'CatchClause'; param: BindingPattern | Identifier | null; body: BlockStatement; } export interface StaticBlock extends BlockStatementBase { type: 'StaticBlock'; } export interface ClassBody extends _Node { type: 'ClassBody'; body: (ClassElement | PropertyDefinition | AccessorProperty | StaticBlock)[]; } export interface AccessorProperty extends _Node { type: 'AccessorProperty'; key: PrivateIdentifier | Expression; value: any; decorators?: Decorator[]; computed: boolean; static: boolean; } export interface PropertyDefinition extends _Node { type: 'PropertyDefinition'; key: PrivateIdentifier | Expression; value: any; decorators?: Decorator[]; computed: boolean; static: boolean; } export interface PrivateIdentifier extends _Node { type: 'PrivateIdentifier'; name: string; } export interface ClassDeclaration extends ClassDeclarationBase { type: 'ClassDeclaration'; } export interface ClassExpression extends ClassDeclarationBase { type: 'ClassExpression'; } export interface ConditionalExpression extends _Node { type: 'ConditionalExpression'; test: Expression; consequent: Expression; alternate: Expression; } export interface ContinueStatement extends _Node { type: 'ContinueStatement'; label: Identifier | null; } export interface DebuggerStatement extends _Node { type: 'DebuggerStatement'; } export interface Decorator extends _Node { type: 'Decorator'; expression: LeftHandSideExpression; } export interface DoWhileStatement extends _Node { type: 'DoWhileStatement'; test: Expression; body: Statement; } export interface EmptyStatement extends _Node { type: 'EmptyStatement'; } export interface ExportAllDeclaration extends _Node { type: 'ExportAllDeclaration'; source: StringLiteral; exported: Identifier | StringLiteral | null; attributes: ImportAttribute[]; } export interface ExportDefaultDeclaration extends _Node { type: 'ExportDefaultDeclaration'; declaration: ExportDeclaration | Expression; } export interface ExportNamedDeclaration extends _Node { type: 'ExportNamedDeclaration'; declaration: ExportDeclaration | null; specifiers: ExportSpecifier[]; source: StringLiteral | null; attributes: ImportAttribute[]; } export interface ExportSpecifier extends _Node { type: 'ExportSpecifier'; local: Identifier | StringLiteral; exported: Identifier | StringLiteral; } export interface ExpressionStatement extends _Node { type: 'ExpressionStatement'; expression: Expression; directive?: string; } export interface ForInStatement extends _Node { type: 'ForInStatement'; left: ForInitializer; right: Expression; body: Statement; } export interface ForOfStatement extends _Node { type: 'ForOfStatement'; left: ForInitializer; right: Expression; body: Statement; await: boolean; } export interface ForStatement extends _Node { type: 'ForStatement'; init: Expression | ForInitializer | null; test: Expression | null; update: Expression | null; body: Statement; } export interface FunctionDeclaration extends FunctionDeclarationBase { type: 'FunctionDeclaration'; } export interface FunctionExpression extends FunctionDeclarationBase { type: 'FunctionExpression'; } export interface Identifier extends _Node { type: 'Identifier'; name: string; } export interface IfStatement extends _Node { type: 'IfStatement'; test: Expression; consequent: Statement; alternate: Statement | null; } export interface ImportDeclaration extends _Node { type: 'ImportDeclaration'; source: StringLiteral; specifiers: ImportClause[]; attributes: ImportAttribute[]; } export interface ImportAttribute extends _Node { type: 'ImportAttribute'; key: Identifier | StringLiteral; value: StringLiteral; } export interface ImportDefaultSpecifier extends _Node { type: 'ImportDefaultSpecifier'; local: Identifier; } export interface ImportNamespaceSpecifier extends _Node { type: 'ImportNamespaceSpecifier'; local: Identifier; } export interface ImportSpecifier extends _Node { type: 'ImportSpecifier'; local: Identifier; imported: Identifier | StringLiteral; } export interface JSXNamespacedName extends _Node { type: 'JSXNamespacedName'; namespace: JSXIdentifier | JSXMemberExpression; name: JSXIdentifier; } export type JSXAttributeValue = JSXIdentifier | Literal | JSXElement | JSXFragment | JSXExpressionContainer | JSXSpreadChild | null; export interface JSXAttribute extends _Node { type: 'JSXAttribute'; name: JSXNamespacedName | JSXIdentifier; value: JSXAttributeValue; } export interface JSXClosingElement extends _Node { type: 'JSXClosingElement'; name: JSXTagNameExpression; } export interface JSXClosingFragment extends _Node { type: 'JSXClosingFragment'; } export interface JSXElement extends _Node { type: 'JSXElement'; openingElement: JSXOpeningElement; closingElement: JSXClosingElement | null; children: JSXChild[]; } export interface JSXEmptyExpression extends _Node { type: 'JSXEmptyExpression'; } export interface JSXExpressionContainer extends _Node { type: 'JSXExpressionContainer'; expression: Expression | JSXEmptyExpression; } export interface JSXFragment extends _Node { type: 'JSXFragment'; openingFragment: JSXOpeningFragment; closingFragment: JSXClosingFragment; children: JSXChild[]; } export interface JSXIdentifier extends _Node { type: 'JSXIdentifier'; name: string; } export interface JSXMemberExpression extends _Node { type: 'JSXMemberExpression'; object: JSXTagNameExpression; property: JSXIdentifier; } export interface JSXOpeningElement extends _Node { type: 'JSXOpeningElement'; selfClosing: boolean; name: JSXTagNameExpression; attributes: (JSXAttribute | JSXSpreadAttribute)[]; } export interface JSXOpeningFragment extends _Node { type: 'JSXOpeningFragment'; } export interface JSXSpreadAttribute extends _Node { type: 'JSXSpreadAttribute'; argument: Expression; } export interface JSXSpreadChild extends _Node { type: 'JSXSpreadChild'; expression: Expression | JSXEmptyExpression; } export interface JSXText extends _Node { type: 'JSXText'; value: string; raw?: string; } export interface LabeledStatement extends _Node { type: 'LabeledStatement'; label: Identifier; body: Statement; } export type Literal = StringLiteral | NumericLiteral | BooleanLiteral | NullLiteral | BigIntLiteral | RegExpLiteral; export interface _LiteralBase extends _Node { type: 'Literal'; raw?: string; } export interface StringLiteral extends _LiteralBase { value: string; } export interface NumericLiteral extends _LiteralBase { value: number; } export interface BooleanLiteral extends _LiteralBase { value: boolean; } export interface NullLiteral extends _LiteralBase { value: null; } export interface BigIntLiteral extends _LiteralBase { value: bigint; bigint: string; } export interface RegExpLiteral extends _LiteralBase { value: RegExp | null; regex: { pattern: string; flags: string; }; } export interface LogicalExpression extends _Node { type: 'LogicalExpression'; operator: string; left: Expression; right: Expression; } export interface MemberExpression extends _Node { type: 'MemberExpression'; object: Expression | Super; property: Expression | PrivateIdentifier; computed: boolean; optional: boolean; } export type Pattern = Identifier | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern | MemberExpression; export interface MetaProperty extends _Node { type: 'MetaProperty'; meta: Identifier; property: Identifier; } export interface MethodDefinition extends _Node { type: 'MethodDefinition'; key: Expression | PrivateIdentifier | null; value: FunctionExpression; computed: boolean; static: boolean; kind: 'method' | 'get' | 'set' | 'constructor'; decorators?: Decorator[]; } export interface NewExpression extends _Node { type: 'NewExpression'; callee: LeftHandSideExpression; arguments: Expression[]; } export interface ObjectExpression extends _Node { type: 'ObjectExpression'; properties: ObjectLiteralElementLike[]; } export interface ObjectPattern extends _Node { type: 'ObjectPattern'; properties: ObjectLiteralElementLike[]; } export interface Program extends _Node { type: 'Program'; body: Statement[]; sourceType: 'module' | 'script'; } export interface ParenthesizedExpression extends _Node { type: 'ParenthesizedExpression'; expression: Expression; } export interface Property extends _Node { type: 'Property'; key: Expression; value: Expression | AssignmentPattern | BindingPattern | Identifier; computed: boolean; method: boolean; shorthand: boolean; kind: 'init' | 'get' | 'set'; } export interface RestElement extends _Node { type: 'RestElement'; argument: BindingPattern | Identifier | Expression | PropertyName; value?: AssignmentPattern; } export interface ReturnStatement extends _Node { type: 'ReturnStatement'; argument: Expression | null; } export interface SequenceExpression extends _Node { type: 'SequenceExpression'; expressions: Expression[]; } export type SpreadArgument = BindingPattern | Identifier | Expression | PropertyName | SpreadElement; export interface SpreadElement extends _Node { type: 'SpreadElement'; argument: SpreadArgument; } export interface Super extends _Node { type: 'Super'; } export interface SwitchCase extends _Node { type: 'SwitchCase'; test: Expression | null; consequent: Statement[]; } export interface SwitchStatement extends _Node { type: 'SwitchStatement'; discriminant: Expression; cases: SwitchCase[]; } export interface TaggedTemplateExpression extends _Node { type: 'TaggedTemplateExpression'; tag: Expression; quasi: TemplateLiteral; } export interface TemplateElement extends _Node { type: 'TemplateElement'; value: { raw: string; cooked: string | null; }; tail: boolean; } export interface TemplateLiteral extends _Node { type: 'TemplateLiteral'; quasis: TemplateElement[]; expressions: Expression[]; } export interface ThisExpression extends _Node { type: 'ThisExpression'; } export interface ThrowStatement extends _Node { type: 'ThrowStatement'; argument: Expression; } export interface TryStatement extends _Node { type: 'TryStatement'; block: BlockStatement; handler: CatchClause | null; finalizer: BlockStatement | null; } export type UnaryOperator = '-' | '+' | '!' | '~' | 'typeof' | 'void' | 'delete'; export type UpdateOperator = '++' | '--'; export interface UpdateExpression extends _Node { type: 'UpdateExpression'; operator: UpdateOperator; argument: Expression; prefix: boolean; } export interface UnaryExpression extends _Node { type: 'UnaryExpression'; operator: UnaryOperator; prefix: true; argument: Expression; } export interface VariableDeclaration extends _Node { type: 'VariableDeclaration'; declarations: VariableDeclarator[]; kind: 'let' | 'const' | 'var'; } export interface VariableDeclarator extends _Node { type: 'VariableDeclarator'; id: Expression | BindingPattern | Identifier; init: Expression | null; definite?: boolean; } export interface WhileStatement extends _Node { type: 'WhileStatement'; test: Expression; body: Statement; } export interface WithStatement extends _Node { type: 'WithStatement'; object: Expression; body: Statement; } export interface YieldExpression extends _Node { type: 'YieldExpression'; delegate: boolean; argument?: Expression | null; } export {};