'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.childrenOfNode = childrenOfNode;
exports.hasClassName = hasClassName;
exports.treeForEach = treeForEach;
exports.treeFilter = treeFilter;
exports.pathToNode = pathToNode;
exports.parentsOfNode = parentsOfNode;
exports.nodeHasId = nodeHasId;
exports.nodeHasType = nodeHasType;
exports.buildPredicate = buildPredicate;
exports.getTextFromNode = getTextFromNode;
// istanbul ignore next
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _Utils = require('./Utils');
function childrenOfNode(node) {
if (!node) return [];
var maybeArray = (0, _Utils.propsOfNode)(node).children;
var result = [];
_react2['default'].Children.forEach(maybeArray, function (child) {
return result.push(child);
});
return result;
}
function hasClassName(node, className) {
var classes = (0, _Utils.propsOfNode)(node).className || '';
return (' ' + classes + ' ').indexOf(' ' + className + ' ') > -1;
}
function treeForEach(tree, fn) {
fn(tree);
childrenOfNode(tree).forEach(function (node) {
return treeForEach(node, fn);
});
}
function treeFilter(tree, fn) {
var results = [];
treeForEach(tree, function (node) {
if (fn(node)) {
results.push(node);
}
});
return results;
}
function pathToNode(node, root) {
var queue = [root];
var path = [];
while (queue.length) {
var current = queue.pop();
var children = childrenOfNode(current);
if (current === node) return path;
path.push(current);
if (children.length === 0) {
// leaf node. if it isn't the node we are looking for, we pop.
path.pop();
}
queue.push.apply(queue, children);
}
return null;
}
function parentsOfNode(node, root) {
return pathToNode(node, root).reverse();
}
function nodeHasId(node, id) {
var maybeId = node && node._store && node._store.props && node._store.props.id;
return maybeId === id;
}
function nodeHasType(node, type) {
Iif (!type || !node) return false;
Iif (!node.type) return false;
Eif (typeof node.type === 'string') return node.type === type;
return node.type.name === type || node.type.displayName === type;
}
function buildPredicate(selector) {
switch (typeof selector) {
case 'function':
// selector is a component constructor
return function (node) {
return node && node.type === selector;
};
case 'string':
Iif (!(0, _Utils.isSimpleSelector)(selector)) {
throw (0, _Utils.selectorError)(selector);
}
if (_Utils.isCompoundSelector.test(selector)) {
return (0, _Utils.AND)((0, _Utils.splitSelector)(selector).map(buildPredicate));
}
if (selector[0] === '.') {
// selector is a class name
return function (node) {
return hasClassName(node, selector.substr(1));
};
} else Iif (selector[0] === '#') {
// selector is an id name
return function (node) {
return nodeHasId(node, selector.substr(1));
};
}
// selector is a string. match to DOM tag or constructor displayName
return function (node) {
return nodeHasType(node, selector);
};
default:
throw new TypeError('Expecting a string or Component Constructor');
}
}
function getTextFromNode(node) {
Iif (node === null || node === undefined) {
return '';
}
if (typeof node === 'string' || typeof node === 'number') {
return '' + node;
}
if (node.type && typeof node.type === 'function') {
return '<' + (node.type.name || node.type.displayName) + ' />';
}
return childrenOfNode(node).map(getTextFromNode).join('').replace(/\s+/, ' ');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9sZWxhbmRfcmljaGFyZHNvbi9jb2RlL3JlYWdlbnQvc3JjL1NoYWxsb3dUcmF2ZXJzYWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxQkFBa0IsT0FBTzs7OztxQkFRbEIsU0FBUzs7QUFFVCxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUU7QUFDbkMsTUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNyQixNQUFNLFVBQVUsR0FBRyx3QkFBWSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDOUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLHFCQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQUEsS0FBSztXQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0dBQUEsQ0FBQyxDQUFDO0FBQ2hFLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtBQUM1QyxNQUFNLE9BQU8sR0FBRyx3QkFBWSxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO0FBQ2xELFNBQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQSxDQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2xFOztBQUVNLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsSUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1QsZ0JBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxJQUFJO1dBQUksV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7R0FBQSxDQUFDLENBQUM7Q0FDN0Q7O0FBRU0sU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNuQyxNQUFNLE9BQU8sR0FB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RCxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTs7QUFFOUIsZUFBTyxVQUFBLElBQUk7aUJBQUksU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQUEsQ0FBQztPQUNwRDs7QUFFRCxhQUFPLFVBQUEsSUFBSTtlQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO09BQUEsQ0FBQzs7QUFBQSxBQUU3QztBQUNFLFlBQU0sSUFBSSxTQUFTLENBQUMsNkNBQTZDLENBQUMsQ0FBQztBQUFBLEdBQ3BFO0NBQ0Y7O0FBRU0sU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFO0FBQ3BDLE1BQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ3ZDLFdBQU8sRUFBRSxDQUFDO0dBQ1g7O0FBRUQsTUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ3hELFdBQU8sRUFBRSxHQUFHLElBQUksQ0FBQztHQUNsQjs7QUFFRCxNQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtBQUNoRCxrQkFBVyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQSxTQUFNO0dBQ3pEOztBQUVELFNBQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztDQUMvRSIsImZpbGUiOiIvVXNlcnMvbGVsYW5kX3JpY2hhcmRzb24vY29kZS9yZWFnZW50L3NyYy9TaGFsbG93VHJhdmVyc2FsLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIHByb3BzT2ZOb2RlLFxuICBpc1NpbXBsZVNlbGVjdG9yLFxuICBzcGxpdFNlbGVjdG9yLFxuICBzZWxlY3RvckVycm9yLFxuICBpc0NvbXBvdW5kU2VsZWN0b3IsXG4gIEFORCxcbn0gZnJvbSAnLi9VdGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZHJlbk9mTm9kZShub2RlKSB7XG4gIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuICBjb25zdCBtYXliZUFycmF5ID0gcHJvcHNPZk5vZGUobm9kZSkuY2hpbGRyZW47XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKG1heWJlQXJyYXksIGNoaWxkID0+IHJlc3VsdC5wdXNoKGNoaWxkKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNDbGFzc05hbWUobm9kZSwgY2xhc3NOYW1lKSB7XG4gIGNvbnN0IGNsYXNzZXMgPSBwcm9wc09mTm9kZShub2RlKS5jbGFzc05hbWUgfHwgJyc7XG4gIHJldHVybiAoJyAnICsgY2xhc3NlcyArICcgJykuaW5kZXhPZignICcgKyBjbGFzc05hbWUgKyAnICcpID4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmVlRm9yRWFjaCh0cmVlLCBmbikge1xuICBmbih0cmVlKTtcbiAgY2hpbGRyZW5PZk5vZGUodHJlZSkuZm9yRWFjaChub2RlID0+IHRyZWVGb3JFYWNoKG5vZGUsIGZuKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmVlRmlsdGVyKHRyZWUsIGZuKSB7XG4gIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgdHJlZUZvckVhY2godHJlZSwgbm9kZSA9PiB7XG4gICAgaWYgKGZuKG5vZGUpKSB7XG4gICAgICByZXN1bHRzLnB1c2gobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoVG9Ob2RlKG5vZGUsIHJvb3QpIHtcbiAgY29uc3QgcXVldWUgPSBbcm9vdF07XG4gIGNvbnN0IHBhdGggPSBbXTtcblxuICB3aGlsZSAocXVldWUubGVuZ3RoKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHF1ZXVlLnBvcCgpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2hpbGRyZW5PZk5vZGUoY3VycmVudCk7XG5cbiAgICBpZiAoY3VycmVudCA9PT0gbm9kZSkgcmV0dXJuIHBhdGg7XG5cbiAgICBwYXRoLnB1c2goY3VycmVudCk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBsZWFmIG5vZGUuIGlmIGl0IGlzbid0IHRoZSBub2RlIHdlIGFyZSBsb29raW5nIGZvciwgd2UgcG9wLlxuICAgICAgcGF0aC5wb3AoKTtcbiAgICB9XG4gICAgcXVldWUucHVzaC5hcHBseShxdWV1ZSwgY2hpbGRyZW4pO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJlbnRzT2ZOb2RlKG5vZGUsIHJvb3QpIHtcbiAgcmV0dXJuIHBhdGhUb05vZGUobm9kZSwgcm9vdCkucmV2ZXJzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9kZUhhc0lkKG5vZGUsIGlkKSB7XG4gIGNvbnN0IG1heWJlSWQgPSBub2RlICYmIG5vZGUuX3N0b3JlICYmIG5vZGUuX3N0b3JlLnByb3BzICYmIG5vZGUuX3N0b3JlLnByb3BzLmlkO1xuICByZXR1cm4gbWF5YmVJZCA9PT0gaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlSGFzVHlwZShub2RlLCB0eXBlKSB7XG4gIGlmICghdHlwZSB8fCAhbm9kZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIW5vZGUudHlwZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIG5vZGUudHlwZSA9PT0gJ3N0cmluZycpIHJldHVybiBub2RlLnR5cGUgPT09IHR5cGU7XG4gIHJldHVybiBub2RlLnR5cGUubmFtZSA9PT0gdHlwZSB8fCBub2RlLnR5cGUuZGlzcGxheU5hbWUgPT09IHR5cGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByZWRpY2F0ZShzZWxlY3Rvcikge1xuICBzd2l0Y2ggKHR5cGVvZiBzZWxlY3Rvcikge1xuICBjYXNlICdmdW5jdGlvbic6XG4gICAgLy8gc2VsZWN0b3IgaXMgYSBjb21wb25lbnQgY29uc3RydWN0b3JcbiAgICByZXR1cm4gbm9kZSA9PiBub2RlICYmIG5vZGUudHlwZSA9PT0gc2VsZWN0b3I7XG5cbiAgY2FzZSAnc3RyaW5nJzpcbiAgICBpZiAoIWlzU2ltcGxlU2VsZWN0b3Ioc2VsZWN0b3IpKSB7XG4gICAgICB0aHJvdyBzZWxlY3RvckVycm9yKHNlbGVjdG9yKTtcbiAgICB9XG4gICAgaWYgKGlzQ29tcG91bmRTZWxlY3Rvci50ZXN0KHNlbGVjdG9yKSkge1xuICAgICAgcmV0dXJuIEFORChzcGxpdFNlbGVjdG9yKHNlbGVjdG9yKS5tYXAoYnVpbGRQcmVkaWNhdGUpKTtcbiAgICB9XG4gICAgaWYgKHNlbGVjdG9yWzBdID09PSAnLicpIHtcbiAgICAgIC8vIHNlbGVjdG9yIGlzIGEgY2xhc3MgbmFtZVxuICAgICAgcmV0dXJuIG5vZGUgPT4gaGFzQ2xhc3NOYW1lKG5vZGUsIHNlbGVjdG9yLnN1YnN0cigxKSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RvclswXSA9PT0gJyMnKSB7XG4gICAgICAvLyBzZWxlY3RvciBpcyBhbiBpZCBuYW1lXG4gICAgICByZXR1cm4gbm9kZSA9PiBub2RlSGFzSWQobm9kZSwgc2VsZWN0b3Iuc3Vic3RyKDEpKTtcbiAgICB9XG4gICAgLy8gc2VsZWN0b3IgaXMgYSBzdHJpbmcuIG1hdGNoIHRvIERPTSB0YWcgb3IgY29uc3RydWN0b3IgZGlzcGxheU5hbWVcbiAgICByZXR1cm4gbm9kZSA9PiBub2RlSGFzVHlwZShub2RlLCBzZWxlY3Rvcik7XG5cbiAgZGVmYXVsdDpcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RpbmcgYSBzdHJpbmcgb3IgQ29tcG9uZW50IENvbnN0cnVjdG9yJyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRGcm9tTm9kZShub2RlKSB7XG4gIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2Ygbm9kZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5vZGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuICcnICsgbm9kZTtcbiAgfVxuXG4gIGlmIChub2RlLnR5cGUgJiYgdHlwZW9mIG5vZGUudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBgPCR7bm9kZS50eXBlLm5hbWUgfHwgbm9kZS50eXBlLmRpc3BsYXlOYW1lfSAvPmA7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW5PZk5vZGUobm9kZSkubWFwKGdldFRleHRGcm9tTm9kZSkuam9pbignJykucmVwbGFjZSgvXFxzKy8sICcgJyk7XG59XG4iXX0= |