| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | 
							- "use strict";
 
- Object.defineProperty(exports, "__esModule", {
 
-   value: true
 
- });
 
- exports.find = find;
 
- exports.findParent = findParent;
 
- exports.getAncestry = getAncestry;
 
- exports.getDeepestCommonAncestorFrom = getDeepestCommonAncestorFrom;
 
- exports.getEarliestCommonAncestorFrom = getEarliestCommonAncestorFrom;
 
- exports.getFunctionParent = getFunctionParent;
 
- exports.getStatementParent = getStatementParent;
 
- exports.inType = inType;
 
- exports.isAncestor = isAncestor;
 
- exports.isDescendant = isDescendant;
 
- var _t = require("@babel/types");
 
- var _index = require("./index");
 
- const {
 
-   VISITOR_KEYS
 
- } = _t;
 
- function findParent(callback) {
 
-   let path = this;
 
-   while (path = path.parentPath) {
 
-     if (callback(path)) return path;
 
-   }
 
-   return null;
 
- }
 
- function find(callback) {
 
-   let path = this;
 
-   do {
 
-     if (callback(path)) return path;
 
-   } while (path = path.parentPath);
 
-   return null;
 
- }
 
- function getFunctionParent() {
 
-   return this.findParent(p => p.isFunction());
 
- }
 
- function getStatementParent() {
 
-   let path = this;
 
-   do {
 
-     if (!path.parentPath || Array.isArray(path.container) && path.isStatement()) {
 
-       break;
 
-     } else {
 
-       path = path.parentPath;
 
-     }
 
-   } while (path);
 
-   if (path && (path.isProgram() || path.isFile())) {
 
-     throw new Error("File/Program node, we can't possibly find a statement parent to this");
 
-   }
 
-   return path;
 
- }
 
- function getEarliestCommonAncestorFrom(paths) {
 
-   return this.getDeepestCommonAncestorFrom(paths, function (deepest, i, ancestries) {
 
-     let earliest;
 
-     const keys = VISITOR_KEYS[deepest.type];
 
-     for (const ancestry of ancestries) {
 
-       const path = ancestry[i + 1];
 
-       if (!earliest) {
 
-         earliest = path;
 
-         continue;
 
-       }
 
-       if (path.listKey && earliest.listKey === path.listKey) {
 
-         if (path.key < earliest.key) {
 
-           earliest = path;
 
-           continue;
 
-         }
 
-       }
 
-       const earliestKeyIndex = keys.indexOf(earliest.parentKey);
 
-       const currentKeyIndex = keys.indexOf(path.parentKey);
 
-       if (earliestKeyIndex > currentKeyIndex) {
 
-         earliest = path;
 
-       }
 
-     }
 
-     return earliest;
 
-   });
 
- }
 
- function getDeepestCommonAncestorFrom(paths, filter) {
 
-   if (!paths.length) {
 
-     return this;
 
-   }
 
-   if (paths.length === 1) {
 
-     return paths[0];
 
-   }
 
-   let minDepth = Infinity;
 
-   let lastCommonIndex, lastCommon;
 
-   const ancestries = paths.map(path => {
 
-     const ancestry = [];
 
-     do {
 
-       ancestry.unshift(path);
 
-     } while ((path = path.parentPath) && path !== this);
 
-     if (ancestry.length < minDepth) {
 
-       minDepth = ancestry.length;
 
-     }
 
-     return ancestry;
 
-   });
 
-   const first = ancestries[0];
 
-   depthLoop: for (let i = 0; i < minDepth; i++) {
 
-     const shouldMatch = first[i];
 
-     for (const ancestry of ancestries) {
 
-       if (ancestry[i] !== shouldMatch) {
 
-         break depthLoop;
 
-       }
 
-     }
 
-     lastCommonIndex = i;
 
-     lastCommon = shouldMatch;
 
-   }
 
-   if (lastCommon) {
 
-     if (filter) {
 
-       return filter(lastCommon, lastCommonIndex, ancestries);
 
-     } else {
 
-       return lastCommon;
 
-     }
 
-   } else {
 
-     throw new Error("Couldn't find intersection");
 
-   }
 
- }
 
- function getAncestry() {
 
-   let path = this;
 
-   const paths = [];
 
-   do {
 
-     paths.push(path);
 
-   } while (path = path.parentPath);
 
-   return paths;
 
- }
 
- function isAncestor(maybeDescendant) {
 
-   return maybeDescendant.isDescendant(this);
 
- }
 
- function isDescendant(maybeAncestor) {
 
-   return !!this.findParent(parent => parent === maybeAncestor);
 
- }
 
- function inType(...candidateTypes) {
 
-   let path = this;
 
-   while (path) {
 
-     for (const type of candidateTypes) {
 
-       if (path.node.type === type) return true;
 
-     }
 
-     path = path.parentPath;
 
-   }
 
-   return false;
 
- }
 
 
  |