matchesPattern.js
 1  "use strict";
 2  
 3  Object.defineProperty(exports, "__esModule", {
 4    value: true
 5  });
 6  exports.default = matchesPattern;
 7  
 8  var _generated = require("./generated");
 9  
10  function matchesPattern(member, match, allowPartial) {
11    if (!(0, _generated.isMemberExpression)(member)) return false;
12    const parts = Array.isArray(match) ? match : match.split(".");
13    const nodes = [];
14    let node;
15  
16    for (node = member; (0, _generated.isMemberExpression)(node); node = node.object) {
17      nodes.push(node.property);
18    }
19  
20    nodes.push(node);
21    if (nodes.length < parts.length) return false;
22    if (!allowPartial && nodes.length > parts.length) return false;
23  
24    for (let i = 0, j = nodes.length - 1; i < parts.length; i++, j--) {
25      const node = nodes[j];
26      let value;
27  
28      if ((0, _generated.isIdentifier)(node)) {
29        value = node.name;
30      } else if ((0, _generated.isStringLiteral)(node)) {
31        value = node.value;
32      } else if ((0, _generated.isThisExpression)(node)) {
33        value = "this";
34      } else {
35        return false;
36      }
37  
38      if (parts[i] !== value) return false;
39    }
40  
41    return true;
42  }