js2flowchart
Version:
> Why? While I've been working on [Under-the-hood-ReactJS](https://github.com/Bogdan-Lyashenko/Under-the-hood-ReactJS) I spent enormous amount of time on creating schemes. Each change in code or flowchart affects all entire scheme instantly, forcing you t
42 lines (31 loc) • 871 B
JavaScript
export const levelsTraversal = (tree, stepIn, onNode, stepOut, options = {}) => {
const getBody = options.getBody || (node => node.body);
stepIn(tree);
getBody(tree).forEach(node => {
onNode(node);
if (getBody(node)) {
levelsTraversal(node, stepIn, onNode, stepOut, options);
}
});
stepOut(tree);
};
export const traversal = (tree, fn, getBody = node => node.body) => {
let queue = [].concat(tree);
while (queue.length) {
let node = queue.shift();
fn(node);
const nodeBody = getBody(node);
if (nodeBody) {
queue = [...queue, ...nodeBody];
}
}
};
export const traversalSearch = (tree, fn) => {
const result = [];
traversal(tree, node => {
if (fn(node)) {
result.push(node);
}
});
return result;
};