Circular dependency in utility functions
Circular dependency

Although I find this circular dependency fishy, I don't know how to remove it. Maybe it's not possible.

However, as long as the circular dependency exists,
it would be better if the two functions were defined in the same file.
I don't like having them in separate files because:


It can be misleading, suggesting that one file is usable without the other, but it's not
The elementArrayFinderGetMethods and the conditions on it in is-element-finder violates the encapsulation of isElementArrayFinder


Readability

Symmetry helps readability.
In isElementFinder you use early return on callee,
but not in isElementArrayFinder.

You could further reduce the nesting by lifting a callee.object condition to one level higher:

  if (callee.object &amp;&amp; callee.property &amp;&amp; (callee.property.name === 'all' || callee.property.name === '$$')) {
    if (callee.object.type === 'Identifier') {
      return callee.object.name === 'element'
    }

    if (callee.object.type === 'CallExpression') {
      return isElementFinder(callee.object) || isElementArrayFinder(callee.object)
    }
  }


The callee.property &amp;&amp; (callee.property.name === 'all' || callee.property.name === '$$') condition could be a good candidate to extract to a helper method.