import { Node, BaseNode } from '../helpers'; import { Identifier, Literal, Program, FunctionDeclaration, FunctionExpression, ArrowFunctionExpression, SwitchCase, CatchClause, VariableDeclarator, ExpressionStatement, BlockStatement, EmptyStatement, DebuggerStatement, WithStatement, ReturnStatement, LabeledStatement, BreakStatement, ContinueStatement, IfStatement, SwitchStatement, ThrowStatement, TryStatement, WhileStatement, DoWhileStatement, ForStatement, ForInStatement, ForOfStatement, VariableDeclaration, ClassDeclaration, ThisExpression, ArrayExpression, ObjectExpression, YieldExpression, UnaryExpression, UpdateExpression, BinaryExpression, AssignmentExpression, LogicalExpression, MemberExpression, ConditionalExpression, CallExpression, NewExpression, SequenceExpression, TemplateLiteral, TaggedTemplateExpression, ClassExpression, MetaProperty, AwaitExpression, ImportExpression, ChainExpression, Property, Super, TemplateElement, SpreadElement, ObjectPattern, ArrayPattern, RestElement, AssignmentPattern, ClassBody, MethodDefinition, ImportDeclaration, ExportNamedDeclaration, ExportDefaultDeclaration, ExportAllDeclaration, ImportSpecifier, ImportDefaultSpecifier, ImportNamespaceSpecifier, ExportSpecifier, PrivateIdentifier, PropertyDefinition, StaticBlock, ImportAttribute, JSXIdentifier, JSXNamespacedName, JSXMemberExpression, JSXEmptyExpression, JSXExpressionContainer, JSXSpreadAttribute, JSXAttribute, JSXClosingElement, JSXClosingFragment, JSXElement, JSXFragment, JSXOpeningElement, JSXOpeningFragment, JSXSpreadChild, JSXText } from 'estree-jsx'; import { NodePath } from '../nodepath'; import type { AliasMap } from '../aliases'; export type Matcher = { [K in Exclude]?: T[K] | ((value: T[K]) => boolean); }; export type Checker = { (node: Node | undefined | null, toMatch?: Matcher): node is T; (path: NodePath | undefined | null, toMatch?: Matcher): path is NodePath; }; export type Is = { identifier: Checker; literal: Checker; program: Checker; functionDeclaration: Checker; functionExpression: Checker; arrowFunctionExpression: Checker; switchCase: Checker; catchClause: Checker; variableDeclarator: Checker; expressionStatement: Checker; blockStatement: Checker; emptyStatement: Checker; debuggerStatement: Checker; withStatement: Checker; returnStatement: Checker; labeledStatement: Checker; breakStatement: Checker; continueStatement: Checker; ifStatement: Checker; switchStatement: Checker; throwStatement: Checker; tryStatement: Checker; whileStatement: Checker; doWhileStatement: Checker; forStatement: Checker; forInStatement: Checker; forOfStatement: Checker; variableDeclaration: Checker; classDeclaration: Checker; thisExpression: Checker; arrayExpression: Checker; objectExpression: Checker; yieldExpression: Checker; unaryExpression: Checker; updateExpression: Checker; binaryExpression: Checker; assignmentExpression: Checker; logicalExpression: Checker; memberExpression: Checker; conditionalExpression: Checker; callExpression: Checker; newExpression: Checker; sequenceExpression: Checker; templateLiteral: Checker; taggedTemplateExpression: Checker; classExpression: Checker; metaProperty: Checker; awaitExpression: Checker; importExpression: Checker; chainExpression: Checker; property: Checker; super: Checker; templateElement: Checker; spreadElement: Checker; objectPattern: Checker; arrayPattern: Checker; restElement: Checker; assignmentPattern: Checker; classBody: Checker; methodDefinition: Checker; importDeclaration: Checker; exportNamedDeclaration: Checker; exportDefaultDeclaration: Checker; exportAllDeclaration: Checker; importSpecifier: Checker; importDefaultSpecifier: Checker; importNamespaceSpecifier: Checker; exportSpecifier: Checker; privateIdentifier: Checker; propertyDefinition: Checker; staticBlock: Checker; importAttribute: Checker; jsxIdentifier: Checker; jsxNamespacedName: Checker; jsxMemberExpression: Checker; jsxEmptyExpression: Checker; jsxExpressionContainer: Checker; jsxSpreadAttribute: Checker; jsxAttribute: Checker; jsxClosingElement: Checker; jsxClosingFragment: Checker; jsxElement: Checker; jsxFragment: Checker; jsxOpeningElement: Checker; jsxOpeningFragment: Checker; jsxSpreadChild: Checker; jsxText: Checker; function: Checker; statement: Checker; declaration: Checker; expression: Checker; pattern: Checker; class: Checker; exportDeclaration: Checker; loop: Checker; moduleDeclaration: Checker; };