import * as ESTree from 'estree';
import { TNodeWithBlockStatement } from '../types/node/TNodeWithBlockStatement';
import { NodeType } from '../enums/NodeType';
export class Node {
/**
* @param {Node} node
* @returns {boolean}
*/
public static isArrowFunctionExpressionNode (node: ESTree.Node): node is ESTree.ArrowFunctionExpression {
return node.type === NodeType.ArrowFunctionExpression;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isAssignmentPatternNode (node: ESTree.Node): node is ESTree.AssignmentPattern {
return node.type === NodeType.AssignmentPattern;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isBlockStatementNode (node: ESTree.Node): node is ESTree.BlockStatement {
return node.type === NodeType.BlockStatement;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isBreakStatementNode (node: ESTree.Node): node is ESTree.BreakStatement {
return node.type === NodeType.BreakStatement;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isCallExpressionNode (node: ESTree.Node): node is ESTree.CallExpression {
return node.type === NodeType.CallExpression;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isCatchClauseNode (node: ESTree.Node): node is ESTree.CatchClause {
return node.type === NodeType.CatchClause;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isContinueStatementNode (node: ESTree.Node): node is ESTree.ContinueStatement {
return node.type === NodeType.ContinueStatement;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isExpressionStatementNode (node: ESTree.Node): node is ESTree.ExpressionStatement {
return node.type === NodeType.ExpressionStatement;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isFunctionDeclarationNode (node: ESTree.Node): node is ESTree.FunctionDeclaration {
return node.type === NodeType.FunctionDeclaration;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isFunctionExpressionNode (node: ESTree.Node): node is ESTree.FunctionExpression {
return node.type === NodeType.FunctionExpression;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isIdentifierNode (node: ESTree.Node): node is ESTree.Identifier {
return node.type === NodeType.Identifier;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isIfStatementNode (node: ESTree.Node): node is ESTree.IfStatement {
return node.type === NodeType.IfStatement;
}
/**
* @param {Node} node
* @param {Node} parentNode
* @returns {boolean}
*/
public static isLabelIdentifierNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier {
const parentNodeIsLabeledStatementNode: boolean = Node.isLabeledStatementNode(parentNode) && parentNode.label === node;
const parentNodeIsContinueStatementNode: boolean = Node.isContinueStatementNode(parentNode) && parentNode.label === node;
const parentNodeIsBreakStatementNode: boolean = Node.isBreakStatementNode(parentNode) && parentNode.label === node;
return parentNodeIsLabeledStatementNode || parentNodeIsContinueStatementNode || parentNodeIsBreakStatementNode;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isLabeledStatementNode (node: ESTree.Node): node is ESTree.LabeledStatement {
return node.type === NodeType.LabeledStatement;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isLiteralNode (node: ESTree.Node): node is ESTree.Literal {
return node.type === NodeType.Literal;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isMemberExpressionNode (node: ESTree.Node): node is ESTree.MemberExpression {
return node.type === NodeType.MemberExpression;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isMethodDefinitionNode (node: ESTree.Node): node is ESTree.MethodDefinition {
return node.type === NodeType.MethodDefinition;
}
/**
* @param {Object} object
* @returns {boolean}
*/
public static isNode (object: Object & { type?: string }): object is ESTree.Node {
return object && !object.type !== undefined;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isNodeHasBlockStatement (node: ESTree.Node): node is TNodeWithBlockStatement {
return Array.isArray((