1234567891011121314151617181920212223242526272829303132333435363738 |
- "use strict";
- let estraverse = require('estraverse');
- class NodeUtils {
- static getNodeScope(node, deep = 0) {
- let scopeNodes = [
- 'FunctionDeclaration',
- 'FunctionExpression',
- 'ArrowFunctionExpression',
- 'MethodDefinition'
- ];
- if (node.parentNode.type === 'Program') {
- return node.parentNode;
- }
- if (scopeNodes.indexOf(node.parentNode.type) < 0) {
- return NodeUtils.getNodeScope(node.parentNode, deep);
- }
- if (deep > 0) {
- return NodeUtils.getNodeScope(node.parentNode, --deep);
- }
- if (node.type !== 'BlockStatement') {
- return NodeUtils.getNodeScope(node.parentNode);
- }
- return node;
- }
- static getParentNodeWithType(node, types, limitNodeTypes = [], deep = 0) {
- if (node.parentNode.type === 'Program' || limitNodeTypes.indexOf(node.parentNode.type) >= 0) {
- return node.parentNode;
- }
- if (types.indexOf(node.parentNode.type) < 0) {
- return NodeUtils.getParentNodeWithType(node.parentNode, types, limitNodeTypes, deep);
- }
- if (deep > 0) {
- return NodeUtils.getParentNodeWithType(node.parentNode, types, limitNodeTypes, --deep);
- }
- return node.parentNode;
- }
- }
- exports.NodeUtils = NodeUtils;
|