Skip to content
Permalink
Newer
Older
100644 25 lines (23 sloc) 570 Bytes
Ignoring revisions in .git-blame-ignore-revs.
2
3
exports.__esModule = true;
4
5
exports.default = function visit(node, keys, visitorSpec) {
6
if (!node || !keys) {
7
return;
8
}
9
const type = node.type;
10
if (typeof visitorSpec[type] === 'function') {
11
visitorSpec[type](node);
12
}
13
const childFields = keys[type];
14
if (!childFields) {
15
return;
16
}
17
childFields.forEach((fieldName) => {
18
[].concat(node[fieldName]).forEach((item) => {
19
visit(item, keys, visitorSpec);
20
});
21
});
22
if (typeof visitorSpec[`${type}:Exit`] === 'function') {
23
visitorSpec[`${type}:Exit`](node);
24
}
25
};