UNPKG

jest-codemods

Version:

Codemods for migrating test files to Jest

76 lines (75 loc) 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getIdentifierFromExpression = getIdentifierFromExpression; exports.getMemberExpressionElements = getMemberExpressionElements; exports.findParentCallExpression = findParentCallExpression; exports.findParentVariableDeclaration = findParentVariableDeclaration; exports.findParentOfType = findParentOfType; exports.traverseMemberExpressionUtil = traverseMemberExpressionUtil; /** * Find the identifier from a given MemberExpression * * Example: return `foo` for a node of `foo.bar.baz()` * * @param {MemberExpression} node * @return {string|null} */ function getIdentifierFromExpression(node) { if (!node) { return null; } if (node.type === 'Identifier') { return node; } return getIdentifierFromExpression(node.object); } /** * Returns list of elements from a given MemberExpression * * Example: return ['foo', 'bar', 'baz'] for a node of `foo.bar.baz()` * * @param {MemberExpression} node * @return {array} */ function getMemberExpressionElements(node, _rest) { if (_rest === void 0) { _rest = []; } if (node.object.type === 'Identifier') { return [node.object.name, node.property.name].concat(_rest); } return getMemberExpressionElements(node.object, [node.property.name].concat(_rest)); } function findParentCallExpression(path, name) { if (!path) { return null; } if (path.value.type === 'CallExpression' && path.value.callee.property && path.value.callee.property.name === name) { return path; } return findParentCallExpression(path.parentPath, name); } function findParentVariableDeclaration(path) { return findParentOfType(path, 'VariableDeclarator'); } function findParentOfType(path, type) { if (!path || !path.value) { return null; } if (path.value.type === type) { return path; } return findParentOfType(path.parentPath, type); } function traverseMemberExpressionUtil(j, nodeValidator) { var traverseMemberExpression = function (node) { if (!node) { return false; } if (nodeValidator(node)) { return true; } return traverseMemberExpression(node.object); }; return traverseMemberExpression; }