NodeUtils.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. "use strict";
  2. const NodeType_1 = require("./enums/NodeType");
  3. const Utils_1 = require("./Utils");
  4. class NodeUtils {
  5. static getScopeOfNode(node, depth = 0) {
  6. if (node.parentNode.type === NodeType_1.NodeType.Program) {
  7. return node.parentNode;
  8. }
  9. if (!Utils_1.Utils.arrayContains(NodeUtils.scopeNodes, node.parentNode.type)) {
  10. return NodeUtils.getScopeOfNode(node.parentNode, depth);
  11. }
  12. if (depth > 0) {
  13. return NodeUtils.getScopeOfNode(node.parentNode, --depth);
  14. }
  15. if (node.type !== NodeType_1.NodeType.BlockStatement) {
  16. return NodeUtils.getScopeOfNode(node.parentNode);
  17. }
  18. return node;
  19. }
  20. static getParentNodeWithType(node, types, limitNodeTypes = [], depth = 0) {
  21. if (node.parentNode.type === NodeType_1.NodeType.Program || Utils_1.Utils.arrayContains(limitNodeTypes, node.parentNode.type)) {
  22. return node.parentNode;
  23. }
  24. if (!Utils_1.Utils.arrayContains(types, node.parentNode.type)) {
  25. return NodeUtils.getParentNodeWithType(node.parentNode, types, limitNodeTypes, depth);
  26. }
  27. if (depth > 0) {
  28. return NodeUtils.getParentNodeWithType(node.parentNode, types, limitNodeTypes, --depth);
  29. }
  30. return node.parentNode;
  31. }
  32. static isBlockStatementNode(node) {
  33. return node.type === NodeType_1.NodeType.BlockStatement;
  34. }
  35. static isIdentifierNode(node) {
  36. return node.type === NodeType_1.NodeType.Identifier;
  37. }
  38. static isLiteralNode(node) {
  39. return node.type === NodeType_1.NodeType.Literal;
  40. }
  41. static isMemberExpressionNode(node) {
  42. return node.type === NodeType_1.NodeType.MemberExpression;
  43. }
  44. static isPropertyNode(node) {
  45. return node.type === NodeType_1.NodeType.Property;
  46. }
  47. static isVariableDeclaratorNode(node) {
  48. return node.type === NodeType_1.NodeType.VariableDeclarator;
  49. }
  50. }
  51. NodeUtils.scopeNodes = [
  52. NodeType_1.NodeType.ArrowFunctionExpression,
  53. NodeType_1.NodeType.FunctionDeclaration,
  54. NodeType_1.NodeType.FunctionExpression,
  55. NodeType_1.NodeType.MethodDefinition
  56. ];
  57. exports.NodeUtils = NodeUtils;