blob: 77b09850ae540064e3758ff390a0c75cafa877a1 [file] [log] [blame]
Tim van der Lippebc3a0b72021-11-08 15:22:37 +00001'use strict';
2exports.__esModule = true;
3
4exports.default = function visit(node, keys, visitorSpec) {
5 if (!node || !keys) {
6 return;
7 }
8 const type = node.type;
9 if (typeof visitorSpec[type] === 'function') {
10 visitorSpec[type](node);
11 }
12 const childFields = keys[type];
13 if (!childFields) {
14 return;
15 }
16 childFields.forEach((fieldName) => {
17 [].concat(node[fieldName]).forEach((item) => {
18 visit(item, keys, visitorSpec);
19 });
20 });
21 if (typeof visitorSpec[`${type}:Exit`] === 'function') {
22 visitorSpec[`${type}:Exit`](node);
23 }
24};