UNPKG

651 BJavaScriptView Raw
1'use strict';
2
3module.exports = {
4 /**
5 * Walk tree of 'nodes' and call 'visitor' on each
6 * If 'visitor' returns more nodes, keep walking
7 * 'revisitor' will be called after potential recursive walk
8 * @param {Array} nodes
9 * @param {Function} visitor
10 * @param {Function} [revisitor]
11 */
12 walk(nodes, visitor, revisitor) {
13 function _walk(nodes) {
14 if (nodes) {
15 for (let i = 0, n = nodes.length; i < n; i++) {
16 const moreNodes = visitor(nodes[i]);
17
18 if (moreNodes && moreNodes.length) _walk(moreNodes);
19 if (revisitor) revisitor(nodes[i]);
20 }
21 }
22 }
23
24 _walk(nodes);
25 }
26};