ecma-search
Version:
Search ECMAScript Structurally
47 lines (38 loc) • 1.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
var _lodash = _interopRequireDefault(require("lodash"));
var _traverse = _interopRequireDefault(require("@babel/traverse"));
var _utils = require("../utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _default(queryAstNode, esToSearchAst) {
if (queryAstNode.type === 'ExpressionStatement') {
queryAstNode = queryAstNode.expression;
}
var results = [];
var queryClone = (0, _utils.reducer)(queryAstNode);
var foundMatch;
(0, _traverse.default)(esToSearchAst, {
enter: function enter(path) {
if (foundMatch) {
return;
}
if (queryClone.type === path.node.type) {
var nodeClone = (0, _utils.reducer)(path.node);
if (_lodash.default.isEqual(queryClone, nodeClone) && !results.includes(path.parent)) {
results.push(path.node);
foundMatch = path.node;
}
}
},
exit: function exit(path) {
if (foundMatch === path.node) {
foundMatch = null;
}
}
});
return results;
}
//# sourceMappingURL=exact.js.map